Gamesmithing: Moondrop Mountain 7DRL Postmortem

more crops.png

I'm a nurse, and one of the things about nursing is that your schedule is very inconsistent. We do three twelve-hour shifts per week, but there's no rhyme or reason to which days you'll be working. In early October, I worked Monday Tuesday Wednesday one week and Thursday Friday Saturday the next. That gave me a full week off in between.

I thought it would be a perfect time to attempt the Seven Day Roguelike Challenge (7DRL from here on), during which you try to create a roguelike game from scratch within seven days. What is a roguelike, exactly? It's hard to define because everyone has different opinions as to what counts as a roguelike. Some common elements include permadeath (or run-based gameplay), procedurally-generated environments, dungeon crawling, and randomized items. For instance, you might pick up an unidentified magic wand and the only way to figure out what it does is to fire it at an enemy. It might be a "wand of fireball" and burn the goblin to a crisp. Or it might be a "wand of polymorph" and turn the meek goblin into a powerful (and angry) dragon.

Now, there are a number of ASCII art dungeon crawler roguelikes out there already, so I wanted to try to apply some roguelike DNA to another genre. I choose Stardew Valley as my subject for two reasons. First, I haven't seen any roguelike Stardews before - I could try to combine the two unrelated genres and come up with something original. More importantly, my wife loves Stardew. This game could be something of a mini-love letter to her. (In fact, the main character "Jay" is modeled after her, in as much as you can say any 9x12-pixel person is modeled after anyone.)

This is Jay. She likes to dance at plants.

This is Jay. She likes to dance at plants.

Earlier, I did a deep dive into the mechanics of Stardew, and I wanted to see how much of that experience I could replicate within the short time period. To summarize, Stardew has an amazing amount of variety, both in the big things (the game mechanics) and the little things (the number of crops available to plant). The different game mechanics form overlapping layers, and doing well on one mechanical area (like fishing) will help out in another (like fighting deep in the mines). It effectively uses delayed reward cycles to keep momentum going, and its Community Center Bundle system provides effective long-term goals for the player. Phew! That's a lot of ground to cover, especially over seven days. Spoiler alert: things ended up on the chopping block.

I've done some game jams like Ludum Dare before, and in those jams you don't know the theme until the jam starts. With the 7DRL, you can work on some things (game design ideas and art assets) ahead of time. This was great, as I was able to get some basic artwork in before starting. I used the Tiny Sprite Sheet Generator to make a sprite sheet and picked out sprites that looked particularly "planty". I modified them slightly to make them "plantier". I then drew the young plants and sprouts that the final plants must have started off as, and came up with the harvested fruits and vegetables. Derivation is always easier than inspiration, so I was able to use this process to quickly come up with sixteen different crops with different stages of growth. That's a check for my "variety of crops" design goal. It's not as many as Stardew has, but given the scope of the game I was quite happy.

crops promo.gif

A while ago, I purchased the itch.io Racial Justice bundle, and it included an RPG Farming Kit that was meant to help make a Stardew Valley-like game. Unfortunately, I was never able to get the kit working properly and had to abandon that before I started on my week-long bender. Although I was hoping the kit would save me some time, I wasn’t taking the loss too hard. As any developer can tell you, it's much easier to write your own code rather than figure out someone else's. The code reflects your own understanding of the problem space, rather than needing to interpret another person's ideas and conventions. So I started from scratch. (Fun fact: developer hobbies also generally include “Reinventing the Wheel” and “Burning It All to the Ground”.)

Throwing that Farming Kit away (#noregrets) meant that I spent the first five days implementing basic game things - cameras, player controllers, tile-based selection, an inventory system, day/night cycle and UI, and the like. I initially tried to use Unity's tilemap system, but found that it was intended more for static tiles instead of than dynamic ones. I was having problems with simple things like changing the tile artwork from dry to watered. (Unity drives me crazy sometimes. Unity's Tilemap.cs class does not implement the interface ITilemap.) I ended up rolling my own tile system.

After Day 5, I had a fairly generic Stardew game going. On Day 6, I added in the roguelike twist: every plant would affect its neighbors according to a randomized formula. Each plant species had a type, sunny or shady, and they would give a bonus or a penalty to neighbors depending on if the neighbors were sunny or shady themselves. For instance, the "Squash Dude" crops would give sunny neighbors a bonus if they were immediately above the squash and shady plants a bonus if they were to the right of the squash. If there was a shady plant above, it would get a penalty to its value because the squash was throwing sunny vibes upwards.

A squash dude with two shady plants above and to the right. The shady plant above is penalized for getting sunny vibes.

A squash dude with two shady plants above and to the right. The shady plant above is penalized for getting sunny vibes.

My wife was good enough to playtest the game on the evening of Day 6 and she exposed a lot of problems. The plant / neighbor system was unintuitive, and the UI was doing no favors in explaining it. The only way to see which plants affected which others was to hover over already-planted seeds with an empty hand. Additionally, the player was exposed to all 16 different crops over the 16 days that constitute a game. Each of these crops had their own directional “vibe” arrows. This was really too much for a player to keep track of.

On Day 7, I shifted gears. The "Seven Day" part of the challenge took a back seat. It was easy enough to chop in half the number of crops that show up each game. It was harder figuring out how to make the UI intuitive. I included UI cues for planting seeds (you would see both the bonus arrows for the seed you were planting onto its potential neighbors and the bonus arrows from the neighbors onto the potential new plant) and for planted seeds (hovering on a seed would show it's type, sunny or shady). I included a background on the plant seeds in the inventory screen and the hotkey UI that shows what type each seed belongs to. After another nine days, I had the UI ship shape. (What's that? Spending six days on the game and nine days on the UI? Well, I had the first seven days off and then I worked six twelve-hour shifts over the next seven days. Progress slowed to a crawl.)

I kept up development until Day 21, when I posted the final* version of Moondrop Mountain. During the time between, I tried to build in some of the different layered mechanics that made Stardew great. Including a huge system like fishing or fighting was out of the question, time-wise. I ended up including a mining system instead. At the start of each day, rocks appear randomly on empty tiles across the farm. To make the mining system more than just busting rocks, the rocks that spawn can also be sunny rocks or shady rocks. These rocks shoot out bonus arrows to all adjacent squares. When one of these spawns in the middle of your farm, you have to change your plans to accommodate it.

This game jam ended up being a great thing. I've previously only done weekend jams, and the extended time period allowed me to make a more complete game. In general, one of the hardest things in game development is scope management. It's easy to dream up a bigger game than you have time to build, whether that time is a week or a year. With this game, awareness of the limited time available helped me keep the scope in check. I had a blast making it, too.

So, how does the game do as a Stardew-like? It's much smaller, obviously. I was able to get in the basic game structure (plant seeds, water 'em, harvest crops, and repeat). I successfully got the variety of crops I was hoping for. I was able to add in a single complementary system, even if I wasn't able to add in a huge variety of mechanics. It's not as Stardew-y as Stardew, but given the limited amount of time I'm quite proud of the work.

Contrariwise, how does it do as a roguelike? Perhaps less well in that regard. The game is run-based (there's no concept of death, really). It has randomized plants and attributes, and a randomized farm layout where certain tiles are unusable. Roguelikes usually have layers of systems that interact with each other in unexpected ways, allowing emergent gameplay to arise. Moondrop doesn't have any of that. At least not yet*.

Lessons Learned:

  — Tools are great if they save you time, but all tools take time to learn to use. Balance this well.

  — Working within an established genre can be a great way to set player expectations and guide your UI work.

  — When you are introducing a new concept, good UI cues are vital to let the player know what’s going on.

  — Trying to design a genre mashup can reveal unexpected similarities between your two genres.

— Playtesting a game is so very necessary to check if you are clearly communicating your gameplay ideas.

Moondrop Mountain can be played for free in your browser at https://joshuagalecki.itch.io/moondrop-mountain.

rocks bug.png

* The question is, "What's next?" I'm happy with the game as a finished product, and I'll likely leave it as is. Unless, of course, people are playing it and wanting to see more. I'd love to have dedicated fans, haha. If I did do more development on this, I would add in more systems. Creating a fishing system, expanding the crafting system, and maybe even an NPC town or a monster-ridden cavern would all be future goals. Importantly, I would want to make these different systems interact with each other. Maybe the monsters live on your farm and you can befriend them. Maybe you can craft potions that blow up rocks and water plants, or vice-versa if they haven’t been identified. Maybe you can grow plant-people townsfolk on your farm, and then they build a little village themselves. You see, the problem** with game development is that it's so easy to dream up a bigger game than you have time to build.

** It's not a bug, it's a feature.

The (slightly-modified) sprites originally chosen from the generated sprite sheet. I had an idea for each one, but only rows 5 and 6 made it into the game as crops.

The (slightly-modified) sprites originally chosen from the generated sprite sheet. I had an idea for each one, but only rows 5 and 6 made it into the game as crops.

Since this article first appeared, I have continued to work on Moondrop Mountain. You can continue reading about my efforts to get this game awesome here.