thank you!
“how did you choose?” – the game was made for a jam with a constrained code-size (here’s the entire source code!) and I wanted consistent layouts, so I seeded the RNG with the current level number (srand(lvl)
) and then placed some number of mountains/graves/heroes at completely random locations. I think level 1 was too easy (it wasn’t good enough preparation for level 2), so then I tried srand(lvl/7)
(which makes different layouts but keeps the code-size small) and then landed on srand(lvl/3)
. I think those were the only three things I tried. I chose based on how level 1 felt – it needs to be not too hard (relatively speaking) but it needs to be hard enough that you learn the game enough to be prepared to take on level 2, when the game gets a lot harder (maybe I should have kept looking – the grave sitting out in the open near the town is maybe too hard!)
but why did I want consistent layouts in the first place? (after all, seeding the RNG added code!) Hard to say… I think it was something similar – level 1 needs to be a stepping stone into the rest of the game. If you can just reset until you get an easy level 1, you won’t be prepared for level 2, which will be frustrating. Maybe you could just reset until you get an easy level 2? Maybe it would work, but my gut said to make the levels consistent.
It also helps to give the game a sense of place, rather than procgen oatmeal. I like the feeling of losing and then trying the same level again, to do it better (or winning, and then trying to get your move-count down). And I think if I were playing the first level for the first time, I would care more about protecting the town that lives in this one particular valley than I would about Random Oatmeal Town #37. making every level random (er, randomly random, rather than consistently random) would emphasize the fakeness of the game too much for me. I think it would also “use up” the interesting parts of the game too quickly – I like having the player sit in one valley for a while and explore what makes that particular one interesting. (The move counter points in that direction too)
(one final note: “chaotic or unbeatable?” – chaotic yes, but not unbeatable! I knew the generator would be consistent + simple procgen from the start, so I designed the rest of the mechanics to work with any level. In theory, the generator can certainly spit out unbeatable levels, but in practice I haven’t found any yet in the hundred or so levels that I’ve played.)
great questions, thank you! I didn’t realize I had this much to say about it :) I should clean this up a bit and post it as a devlog