Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics


A member registered Sep 27, 2018

Recent community posts

I'm wondering about what the intended or best way to use the alternate prompts might be. They're numbered, so it's very tempting to just give them a go , but then I'm not sure how to treat the alternate first prompt or the alternate endings. The instructions say "save your original prompt page and use one of these in place of that number". I'm not sure exactly how that's intended. Maybe we get to prompt 32, and it feels like too much of a curveball (32 is always like that for me) or we've had it a couple games in a row, and we just decide we want something else? So then we flip to the Alternate Prompts and just peruse them until we find something we like? And of course when we roll the dice we jump from our saved position at 32. Is that about right? Seems pretty indulgent!

I'm tempted to do some reordering and see if I can't make the alternate prompts feel time-appropriate like the main list.

I'd be interested for you to continue!

I was able to use World Painter to embed a generated city into Minecraft, and started filling in the buildings! It's very satisfying. :)

Ah, Substrate is a screensaver: It avoids the loose ends by starting seeds directly on existing lines. I was acting like you'd heard of it because I've seen it mentioned a couple times in the context of history of procedurally generated art.

Having played with the code more, now I understand that the objects are rendered in one at a time to give some appearance of depth. It does look like there's a setting for number of starting seeds which gets used on a few objects.

It might be interesting to produce some symmetry by having some objects which place two seeds at a time, symmetrically.  Maybe that would be a solution for getting more face-like things to appear.

Anyway, I'm enjoying poking around in your old project. :)

Sorry to spam you with lots of messages, but I've also gotten some nice looking results by putting just a single kink into the lines - via using numbers other than pi to initialize the second tracer's angle at the end of Tracer.spawn().

Been poking around all day, and now I have some coherent thoughts on improving the image generation.

The pips have some good variety, but at the moment aren’t different enough that, e.g., diamonds and chimes can be told apart by shape in a given deck. 

An easy way to vary them more would be to alter their “density” or starting number of seeds. I’ve cranked up the seeds and gotten an interesting look.

Very occasionally, I get a suit whose pips favor some zigzag lines. I got a “rocks” suit on one deck which was a grey color and did this! It looked like jagged boulders. Possibly this outcome should be slightly more common to increase variety.

I suppose mask shapes could also be varied more. Thin, randomly tilted rectangles, crescent shapes, or annuli (circles with a hole) might look noticeably different, but I haven’t tried any of that.

A more out-there idea would be to add a “foreshortening” effect to either the line quality or the flow fields. Right now, flow fields have “right” and “left” which are at right angles from their forward direction. But these “right” and “left” vectors could be placed at shallower angles to the forward vector, with “right” still being the negative of “left”. Applying foreshortening could potentially make some objects seem more 3D. And, flow fields could potentially have different amounts of foreshortening in different regions. (At this point it’s almost like having two different flow fields, one conceptualized as at a right angle to the other.) This means they could represent the geometry of foreshortened curved surfaces.

Besides the pips, the other major thing to my mind is the figures. Sometimes they turn out very interesting, but they have some quirks which can feel repetitive; such as not having a clear head or being roughly diamond-shaped. What I’ve done for myself is add some extra mask shapes, such as just the top half of an ellipse, and a plain rectangle. The plain rectangle doesn’t look too great, but maybe more random quadrilaterals would have some character. I was also thinking maybe a more hand-shaped human silhouette could be good, or a selection of appropriate Julia sets.

I’d also like to try and see what happens when all the density is placed near the edges of the mask shape, leaving the middle basically empty. But another option would be to try distributing the density by Perlin noise.

When it comes to having a head, probably the only solution is to put some sort of deliberately generating head near the top of figures some of the time. Wouldn’t want to do that too much. The strength of this comes when it enables seeing things in the scribbles, not when it forces one interpretation.

OK, I've fixed the bug 3 different ways and I think what's happening is that occasionally one region entirely contains another. The function register(shape) only checks whether an existing region has points outside the shape, not whether the new shape has points outside an existing region. Comparing the sizes of the two regions can show them to be not duplicates (and skips a lot of comparisons), or the comparison can be done symmetrically to notice that shape contains points outside the existing region.

There appears to be a bug - sometimes one or two areas on a card don't get colored in. I was able to fix this by commenting out

if(duplicate) { return null; }

inside the register(shape) function in Painter. So the problem is with how it detects duplicates.

I was able to download the Javascript source and get it working, and added more text to my own liking. :) I see what you mean with the gradients; it's just enough to be a bit annoying to add texture. It looks like you've got a framework in place for alternate lettering, but the "modern" style is the only one implemented.

If you don't mind, here's my current understanding of how your image generation works - how close am I to correct?

So each card has a number of objects associated with it, such as "sea", "sun", "star", "figure", "mountains", "city" etc. These objects work in different ways but generally have an actual position on the card, and often an associated "mask" that determines the shape of their "density". Objects also have a flow field, which I take it is like a vector field, which influences the direction lines will take, if the line is associated with the object. Each object also has a set of parameters which determine how lines will be drawn; this can make lines strictly follow the flow field, or wobble around, or travel at right angles to the flow field, or zigzag, etc. etc. It can also make lines thicker or thinner, and can apply certain colors to the cells which are produced by the lines.

Drawing takes place via a number of growth points traveling around on the card. Each of these growth points belongs to one of the "objects" (as I've been calling them), but they're all on the same card so they can collide with lines being drawn by other "objects". One thing I'm not clear on, is how many growth points initially are placed onto the card. Do separate objects maintain separate pools of points, or are they all thrown in together? But anyway, just like with the famous "Substrate", when a growth point collides with an existing line, it gets moved someplace else on the card.

As I understand it, growth points actually spread outward in two directions (unlike Substrate). So I think maybe both sides of the line need to "land" on an existing line before the line "dies" and a new growth point gets placed. When both sides of a line have "landed", typically it would form a closed shape which I think gets called a "cell". I'm guessing that the growth point which completes a "cell" influences what color it eventually gets colored, via the parent object that owns the growth point.

New growth points get placed randomly on the card, according to the "density" field. Looks like when a new growth point is placed, it drains away some of the density nearby, so that growth points are unlikely to begin too close to where one has already been. There's also a limited number of total growth points, so that eventually they run out and the card is finished.

I think that covers most of what I understood. Is that about right?

I don't know if you'll ever come back to this, either to do a writeup or add to it, but it is quite wonderful! Sometimes I can just sort of sink into the image and see figures and detail. Here are the improvements that came to mind while I was playing with it.

It could use some more suit names. They're probably easy to come up with, but here are some I've seen on real decks: discs, mirrors, spirals, doors, chalices. And some from the short story "Dowager of Bees": chains, bees, ivy, scissors, chimneys, teeth.

I'd like it if some decks used "princess, prince" in place of "page, knight". Other face cards in actual decks include "brother, sister, mother, father". Again referencing Dowager of Bees, we have titles like "Dowager, Detective." It would be nicely surreal to have a wide variety of titles like that.

All that's just word-stuff, but with the images it feels sillier to suggest anything. One nice touch would be using textures other than gradients on some decks, as if the printing techniques vary. And the lines could be slightly offset from the colors, as is often seen on older or cheaper printings of RWS decks. Also, the style of the numbering and lettering could change from one deck to another; some decks could have a "borderless" style.

My personal temptation would be to add a few exceptions to many of the predictable rules, for example sometimes "six of swords" could be generated via the face card / major arcana generation algorithm.

By messing with my screen settings I was able to get cards of about 749 x 1260 pixels (per card - the png images I got were bigger). That is *almost* the image size required by a POD tarot card service.

It looks like the bigger the screen, the bigger the image generated :) so maybe there is a good way to trick it into generating print-quality images

I never even thought of that 1st option, and I'm not sure I understand how that would work! So you get a prompt, decide which memory to add it to, and that decides roughly the time period it occurred in? Sounds interesting.