Friday, 20 March 2015

HarvestRL Update

After taking a break for a few days, I went back to the code for HarvestRL and started making some revisions. There were some rather major bugs that made the game impossible to complete at times. In other cases, the game was exceptionally easy (though this was a rather circumstance). I've gone through and fixed what I thought were the major issues with the game.

So, version 1.01 is now available for download. The full details are available here.

Wednesday, 18 March 2015

HarvestRL Postmortem

With the challenge officially done, it's probably a good time to reflect on the game. It needs polish, and I'll have some fixes and adjustments done for those.

Rather than just growing crops for money or whatever, I wanted there to be an actual point to it. One aspect of this was growing food to keep a food-clock in check. Having the player be so hungry that they need to eat every second was just plain annoying, and it made far more sense to have the player grow food for the village. Initially I was going to have the option to sell food to a merchant (for money) or donate it to the village, and have that as a choice. The selling never made it into the game, so it's just an issue of donate it or keep it to eat. The overall clock is what I intended in the game; currently, it's too easy. There isn't enough pressure that the player needs to decide what to do about it since food is too readily available.

The combat is sufficient though tactically shallow. The player has very few hit points for several reasons. I wanted no randomness in the combat. I wanted each opportunity to be hit to be significant. I wanted damage reduction to be limited. As a result, the player should regularly get swarmed and then have to figure out where to go to avoid getting quickly killed. This becomes less of an issue near the end of the game (again like I wanted it), but the final boss is still exceptionally difficult. Unfortunately, it's difficult in a tedious rather than tactically interesting way. However, this is because of another issue.

There's no consumable combat-related items except healing and a weak ranged attack. The ranged attack is certainly useful (especially since it's the only non-renewable resource in the game), but even a few more special effects would have made a huge difference. Unfortunately, the framework I had in the game wasn't working with special effects yet, so I just hardcoded these two quickly (along with the seeds) and left it at that. Later versions will definitely need more, and a greater variety of enemies, to deepen the combat. That is definitely the weakest part of the game right now.

I also really dislike the village generation, but I spent a whole day on it and didn't want to lose any more time for the challenge. The underground levels are actually close to what I initially intended. They're not great, but I didn't want something fancy anyway. It is annoying that you can get an unwinnable game due to the RNG, but at the time I wasn't thinking about such an issue.

Overall, I'm content with my first successful 7DRL. There's a lot of room for growth with this game, but I'm torn between doing regular updates to HarvestRL and turning it into something more versus renaming it as a new game and pushing the boundaries on it. I'm leaning more towards the latter choice though.

I can also integrate this game with others I've started over the past few years but never finished or released. Since I now have something available, and have a means of updating and releasing new versions of things, you'll start seeing more games from me in the months and years to come. Hopefully, that will be a good thing.

Monday, 16 March 2015

7DRL Challenge 2015 - Finished

The challenge is over, and my entry is complete. I had some really frustrating compilation problems near the end, making a redistributable version impossible. That was fixed this morning, but it involved a lot more work than expected.

HarvestRL is the finished game. You play as an adventurer/farmer tasked with saving a small village. Some of the villagers are possessed by an evil spirit, and the rest of the villagers are too scared to do anything. You need to find the sacred fruit that will cure the villagers, while in the meantime keeping the village stocked with food. You also need to eat, but you can grow food or find some in the wilds. When you've cured the villagers, you need to find a defeat the source of the evil.

This is meant to be a short game, but I really don't know how well balanced it is. It could be very hard or very easy depending on how you play, but at least you can actually win it. All the instructions are in the game itself, except for the location of your farm (SouthEast) and how to get seeds (eat food).

You can download it here:

Windows 32-Bit

I'll likely do more with this game in the future, or use parts of it in other games, but for now it stands on its own.

Friday, 13 March 2015

7DRL Challenge 2015 - Day 5

This is now the start of Day 5. Despite the long list of things I would like to add to the game, most of it is still coming along smoothly. Yesterday was spent fixing the inventory system (since my previous framework had everything needed for one, but it was broken) and getting farming to work. Basic combat is in the game, but I want to make a few adjustments to it before I'll consider that ready. The AI shouldn't just wander all over the place no matter the circumstance.

Currently, you are able to do the following:
- explore a random overworld with a village
- head to rather empty but random dungeons
- run into villagers' houses and close the door behind you
- till soft soil with a plow
- plant seeds in tilled soil
- water planted seeds and other plants to keep them wet
- attack random rabbits and wolves wandering in the world

The game has a day-night cycle and changing seasons, but they don't look different yet.

Currently, farming works as follows. Using a seed (like a potion or something) scatters seeds all around the player. Only certain tiles are affected by seeds, and these get a "planted seed" decoration placed on them. You can operate the plants with a watering can to get them wet. The next dawn, if the plant is wet then it will grow. After it grows for a certain number of days, it changes into a plant ready to be harvested. The player then bumps into the plant and harvests it (adding the item to your inventory). This is very data heavy, as anyone looking at the config files will realize, and there could very well be a better way of doing this. However, this was easy to program; I'll improve it after the challenge if I keep working on the game.

This system is also much easier than my previous plan. I thought it'd be good to turn on a "farming" mode, it asks you what tool to equip, then you toggle on and off the use of that tool as you wander around. Instead, you now just equip the tool you want to use and then automatically use it as you walk into or onto various tiles.

For today, I need to add more content. You need to grow more than just one type of plant, the plants need to do something, the village and dungeons shouldn't be empty, and so on. This will be the same for tomorrow, so that Day 7 just involves bug fixing and UI cleaning. I'll post again tonight with some updated screenshots.

Wednesday, 11 March 2015

7DRL 2015 Challenge - Day 3

It is now the end of the third day of the challenge for me, since I started later than most of the participants. Happily, others are also on their day 3, so I don't feel that behind everyone.

The plan for yesterday was combat, enemies, and entering/exiting the dungeon. That didn't quite work out. Instead, I spent most of the time getting multiple areas to generate, moving between them not breaking the game, and having a nice village show up. The village is still way too random looking for my taste, but I can fix that later if there's time. At least it works. The end of day 2 thus brought no combat but it did bring a semi-interesting world to explore.

Day 3 started with the prospect of adding the farming. Since this is supposed to be a game with some farming elements, I thought I should probably add that. I ran into UI difficulties almost immediately, much more so than I expected, and that consumed most of my time today. Fortunately, those problems are fixed. The player can now explore the world, look at things, open and close doors, and switch in and out of farming mode.

In Harvest Moon and games like it, you typically have a variety of tools that you switch between and then use them on the tile in front of you. Since I didn't want to add facing to an ASCII game, that meant two possibilities: 1) have a use+direction for each farming action, or 2) have an auto-use for some item wherever you move. I am going with option 2. Option 1 is (barely) easier to code but it would be exceptionally tedious to play. (Who wants to use three discreet button presses for each farming plot they want to water?) Hence, the player will switch into and out of farming mode. This mode will equip a selected tool, allow auto-using wherever they walk (or bump into as may be the case), switch tools, and toggle the auto-using. There might be a better way of doing this, but that's how I'm going to develop it.

So, in the meantime, here are a couple screenshots of me wandering around and opening doors.

Tuesday, 10 March 2015

7DRL 2015 Challenge - End of Day 1

The first day went about as well as I expected. Numerous coding issues, minor problems that broke everything else, and so on. At least I didn't have compiler problems, which used to be a recurring issue every time I started a new project.

Fortunately, the first day ended with the basic functionality complete. A randomly generated level is drawn, multiple levels are stored, the player can move around on the screen, supporting and messaging information is displayed, and players can easily get into and out of the game.

For day 2 I plan on accomplishing: basic combat, enemies, and entering / exiting dungeons. The enemy AI won't be particularly impressive at this point, but it can be improved later. The dungeon generation is also rudimentary, but that is also acceptable for now. If all goes well today, there'll be some fancy screenshots ready for day 3.

Sunday, 8 March 2015

7DRL 2015 Challenge

Last year I joined the Seven-Day Roguelike Challenge (7DRL) in which participants attempt to make a Roguelike game in 7 days. I completely failed by day 5, having only the most rudimentary part of the game finished. I did have some random levels to explore and wandering opponents, though it was stuck in a real-time mode (for some reason) that made it completely unplayable.

This past game was using an engine I had built for Roguelikes, but the engine was very incomplete and buggy. Since then, I had been working on it occasionally and trying to use it for some other game. Neither the game nor the engine made it to any stage of completion worth releasing.

This year though, the engine was actually complete enough that I thought I'd finish major parts of it by using it in a 7DRL. This made sense for the following reasons: 1) the engine was meant for a large game, 2) a large game is not going to be finished by me anytime soon, and 3) making the engine work for a small game means finishing the essential parts of it. Since the small game will have all the things that a RL needs (e.g., random level generation, exploration, combat), then this challenge will give me the opportunity to actually finish those things.

To make sure this was even possible, I spent the past week fiddling with the engine and making sure the basic structure was still good. More work needs to be done, especially with the enemy AI, but I'll work on that as part of the challenge. Even if I fail again, at least the engine will be more capable for next time.

For 2015 then, I'll be working on A Rogue Harvest. It will be a procedurally generated simplified version of Rune Factory (the Harvest Moon game with combat and non-farming activities). Combat will be somewhat straight forward, but the farming mechanics will be tied in to it. You will need to choose what food to grow, and that food will help you accomplish the story missions (the dungeons to clear out). I have many ideas to expand on this game, but I'll add those later if the game is actually completed on time.