[WIP] Harvest Moon/Stardew Valley-Alike Project

Hey all, I got an Arduboy around February and have been having some fun with it. My hope was to do a low pressure project in my free time… that would also be a bit of a programming challenge.

Since some of my favorite time killer games are stardew valley and harvest moon, I thought this type of game would work great on the arduboy. And due to the high amount of content required for these games to work, I felt it would be a fun challenge considering the graphical, sound and memory limitations of the platform.

So after doing a few test projects to learn the hardware, I’ve come up with a bare bones engine that:

  • allows users to move around game world, with certain tiles being typical “collision” and also “interactive” tiles of various types.
  • the A and B buttons can be mapped to any tool or item
  • tapping the A or B button will use the item
  • holding down the A button opens the item menu/inventory
  • holding down the B button will open a map/calendar
  • transition between interior and exteriors
  • sleep/save to end the current day early
  • impact the world by tilling the soil, plant seeds, water the seeds, watch them develop, and eventually harvest the crops
  • Currently there are 3 crop types for each season, each with different growth rates, seed prices, and sale values
  • I plan to also add 1 tree type and 1 type of vine for each growing season

I uploaded a quick video of some of these features: Watch the game in action

Obviously, the song in the video is not coming from the arduboy. :wink:

I still have a town and a forested area planned. In the forest area, wood, stone and wild fruits/flowers can be gathered. At a minimum, the town will contain NPCs with a variety of dialog options and shops for buying crops, upgrading tools, etc.

Ideally, I’d like to include more complex features like expanding your farmhouse, marriage options, male or female character selection, holidays, a barn for chickens and cows, and a mine. But I have a feeling I’ll run into space limitations long before then. We will see how it goes.

Would love to get some feedback, suggestions for features what have you. I spent quite a bit of time browsing the forums to learn about the arduboy before beginning my own project. So I know it’s a community with a wealth of information and suggestions.

19 Likes

Looks great … I haven’t been able to listen to the video (I am at work!) but hope it is Neil Young’s Harvest Moon.

2 Likes

Sadly no. It’s a song from Harvest Moon Back to Nature… missed opportunity! :joy:

1 Like

Can’t really give much feedback until the game and code are posted other than “it looks good, keep it up”.

1 Like

Thanks, yeah I’ll post the code sometime in the next week or two most likely. I’m sure there is plenty of optimization that can be done, but wanted to introduce myself and the project now that it’s in a semi-playable state.

The scripts still contain some leftover junk from my test programs and first passes at this project. I’ll need to get that unused code out of there.

Then I’ll drop 'em onto github and will welcome any suggestions!

4 Likes

Wow! I love it! If you are curious about how to avoid some space limitations you should talk to @Mr.Blinky :wink:

3 Likes

I hear he has an interesting accessory in the works! :wink:

2 Likes

This looks pretty awesome!

1 Like

Wonderful work! Glad to see more Harvest Moon/Stardew valley style games on Arduboy! :smiley: Have you checked out Tacklebox on Arduboy yet? I think you’d like it =].

I know @city41 will get a kick out of this too! (and he also made Tacklebox)

And always wonderful to see a fellow black on white pixel artist! ;D.

2 Likes

Thanks @Mr.Blinky and @2bitcrook!

I haven’t tackled tacklebox yet, but it looks great! Reminds me of Legend of the River King.Definitely right up my alley. :wink: I feel like this type of device is perfect for this type of game. And I agree, I love the black on white look. To me, it makes the world feel more open and welcoming. While the white on black works far better for a space shooter, dungeon crawler, etc.

So far I’ve spent most of my time in Arduventure, Microcity and Omega Horizon. But I played at least a little of several games including technical showcases like Hopper and that awesome star fox style demo.

Still many games I want to try like tacklebox, Ardynia, and lots more. But after playing a few, I was feeling the itch to do my own heh.

5 Likes

Sounds like you’ve been having a grand time then with those games!

Also when trying out Tacklebox there is a version you can play online but I can understand if you would rather play it on an actual arduboy!

1 Like

I just want to say that I am a huge fan of how this is heading!!

1 Like

Thanks! I’m pretty happy with the progress. Didn’t get a chance to work on it much last week but I got some new graphics done yesterday for shops, vines, and fruits for the inventory. Going to try to get those functions added into the game over the next week.

Here is an update with some of the new graphics that I will be adding into the game this week:

14 Likes

UGHH so excited for this, Ive been looking into trying to make a game just like this, simply because it is one I would want to play, but have decided that is just one project I can’t do myself. I can’t wait to be able to play this game. Good work!

1 Like

Any new developments?

Working on it some tonight actually.

I should have an update on Saturday afternoon or Sunday. Got the above graphics into the game. The day now progresses on its own based on how many steps you take and this triggers the end of day transition at midnight. Crops now fully develop into their final crop form and they can be loaded into the inventory screen. Date and time can now be viewed from the calendar menu when holding down the B button.

Right now, I’m working on the logic for picking up the crops to add to your inventory. Then eating them to regain stamina or dropping them into the shipping bin to earn cash during the overnight transition.

Once these are done, I’ll post another video update and will start cleaning up the code for what I’ve done so far so I can drop it onto Github. It’s about to the point when feedback would be the most helpful for saving space and optimization. Currently at 73% ROM, 80% RAM with lots of features to go. I know that can be cut down significantly.

10 Likes

I’ve recorded a video of the progress that my wife will put together with music and strategic fast forwarding through the less exciting stuff. :wink: In the mean time here is a bit more info.

I have a fully functioning clock in the top left hand corner that updates every ~1.5 in game hours.

Eating of crops also now works to regain your stamina. To inform the player of what has occurred, a notification has popped up in the bottom right corner. A notice will also pop up when you pick up an item, run out of stamina, etc.

Now I’m in the clean up stage before posting on github. The most vital changes I made won’t be immediately noticeable. I had initially saved the environments as global 2D arrays of uint8_t. Each value is associated with an 8x8 tile, allowing me to easily update what tile I wanted on the field.

For instance, a newly planted crop that has not been watered today is: 101
A newly planted crop that was immediately watered would be: 201
A crop that is unwatered today but watered the last two days is: 121
A crop that grew into its second stage overnight is: 102

I needed to maintain this functionality. But the rest of the numbers in the array were pretty much set in stone, so storing them in an array at all times seemed pointless and was taking up space. Especially considering after adding the farm, the farmhouse and the forest, I was up to nearly 90% dynamic memory. It became quite clear that if I hardcode the environments in this the way, I would quickly run out of space.

So I rewrote how this works entirely. Instead, I have a single max world map array. I wrote a function that I send a locationID to when leaving one location for another. The function then updates the worldMap array to the values of the new location.

I was able to do this by breaking out certain aspects separately. Now objects like homes or signs will store only their starting x,y coordinates rather than me having to add them to the array.

The field data now has its own global array because I still need it to work the same way as when I had a farmMap’ instead of a worldMap. This way I can generate the rest of the farm upon entering each area to avoid hardcoding it. Up front, this takes up more space, having two separate arrays required for the farm. (a worldMap array and a fieldData array). But by splitting them up, I can save a lot of space for adding in the town, forest and cave data. Because the worldMap is used for all environments. I might be able to split this up even further by using some type of metaTile like objects. But for now I’ll keep it as is.

Because of this change, I needed to revamp the way things are saved to the EEPROM. Previously I just saved the values of each tile in the farmMap into EEPROM. I knew it wouldn’t be staying that way but it was a quick way to save the farm at the end of each day and load it when the Arduboy is first turned on.

Now that it is broken out, I am only saving the fieldData section instead of the full farm. I’ve also compressed the data into unsigned 32 bit integers. I tested the memory savings of using an 8 bit, 16 bit, and 32 bit integers, and 32 bit had the best savings.

I have a few more optimizations like this as I clean up my code. My next update in this post will be in a day or two with the video. Within a few days of that, it will be a link to the code.

12 Likes

Man! I think this is great! I’m thinking about getting a Aurduboy soon and I think this would totaly be one of the titles I would want to play! Hope it goes along smoothly!