Reap: Unofficial Unity port
Reap is a game made in GameMaker by Daniel Linssen for Ludum Dare 34. This is my unoffical Unity port of that game, a fan project if you will, because Reap is a truly spectacular game, especially considering it's been made in less than 48 hours.
Whenever a new Ludum Dare has concluded I go through the top 100 compo results looking for cool, new games. I mostly pay attention to the Unity games because Unity's what I know and it's fun to see what other Unity developers are able to make, but this time Reap stood out to me. First of all, the game is gorgeous, but it also has this really ingenious gameplay mechanic where you're given a map, but the map doesn't show your own location, you have to figure that out based on the landmarks around you, and thanks to the fantastic procedural world generator in the game, you're given a huge new world with interesting landmarks for every new playthrough.
The world generator was the reason I decided to download the source code for Reap even though the game is made with GameMaker, a game engine I know practically nothing about. Initially I was thinking about just trying to learn enough about GameMaker and Daniel's code to be able to fish the world generator code out of the game to learn from it, but it quickly turned into a personal challenge of porting the game in it's entirety from Game Maker to Unity. My initial motivation came from the fact that the original game was made in under 48 hours for the Ludum Dare compo, which I thought would mean that the port would take less time than that. It didn't, in total I think I spent about 100 hours on the port. A major reason for this was obviously my complete lack of knowledge about GameMaker, but Unity itself also gave me a lot of trouble because I've never pushed myself this hard to attempt a proper pixel perfect 2D game like this in Unity before, and there was a lot of things I needed to learn. There are still some unresolved issues which you can see in the Roadmap tab below.
I'm considering writing an accompanying article to this project detailing everything I learned in regards to this. Perhaps there are other people out there who are curious about the differences between Unity and GameMaker and what it is like to port a 2D game made in a 2D engine into a 3D engine.
You can also check out my WIP thread on the official Unity forums if you're interested in reading about my experience with porting the game:
The original GameMaker game is available from Daniel's website, here:
Also consider checking out Daniel's other games, they are all really clever and beautifully crafted:
Disclaimer: I've spoken with Daniel and I've been given permission to do this. Everything in the project remains the property of Daniel Linssen - all the graphics, the sounds, and the source code belongs to him. You're free to download the project, learn from it and play around with it, but don't redistribute it and please don't be a dick and try to sell it.
- Upgraded the project to Unity 5.5.0.
- Added Windows and Mac standalone builds.
- Added a README.txt to the project.
- Tried for a long time to fix the remaining issues, but I'm giving up. Perhaps I'll give it another go later on and perhaps I'll get some help now from you that you have access to the project files.
- Cleaned up and released the project for you to explore.
- Food implemented as a stat. You lose food every time you fall asleep. Eat turnips to regain lost food. If you run out of food you die and the game restarts.
- Energy implemented as a stat. Doing anything costs energy. When your energy runs out you fall asleep until the next morning.
- Implemented normal and hard difficulty. In hard difficulty days are shorter, you have less food, less energy and there are fewer resources on the map.
- Time implemented. There's now a day night cycle and turnips grow.
- The title, instructions and loading screens are now in.
- Almost all the UI is in. The only thing missing is the energy and food meters.
- The circle simulating your field of view is in, but it's not perfect yet because I'm a shader noob. The outline is not 1 pixel thick all around the circle.
- I'm now rendering the entire game to a render texture which ensures everything including UI, shaders etc. output at 2x scale. This is super buggy in the editor, but seems to work perfectly fine in the final build.
- You can now view the treasure map and use it to find and dig up the treasure to win the game.
- All the particle effects have been added.
- Turnips can be reaped with the hoe. They still don't grow, but you can recover the one you planted.
- The bridges are now animated.
- I've rewritten my custom sprite animator script to be framerate dependent to ensure everything is as similar as possible to the original game.
- The shovel can now be used to dig the ground for planting turnips.
- Turnips can now be planted. They don't grow yet because there's no implementation of time yet.
- Turnips can be eaten. They don't do anything yet because food isn't implemented as a stat yet.
- The markers for the treasure map pieces are now drawn on the map.
- The treasure map can now be assembled if you gather all 4 pieces. It can't be interacted with yet.
- The gamepad triggers are working just like in the original game now. At least for xbox 360 controllers on Windows as that's all I've tested.
- All the items have proper sprites and positioning for when they are carried now.
- The turnips and logs now have random sprites for when they are dropped.
- Added the map. Hold the use key while holding it to view it. The only thing missing is the markers for the pieces of the treasure map.
- Added all the remaining items as well, I think. You can pick them up and drop them, but their functionality is not implemented yet.
- Changed the game resolution to 1280x720 to stay true to the original game. I'll begin working on the UI soon and I want to make sure I'm working at the correct resolution from the start.
- Added a custom sprite animator script so I won't have to mess around with Mecanim and the dope sheet.
- Added animations to the player and the axe.
- Added most of the sounds in the game.
- Fixed the raft movement.
- Reordered some of the sprites to make them appear correctly behind and in front of the player depending on the context.
- Added the axe. Use it to cause global warming.
- You can now chop down trees and use the logs that drop to build rafts and bridges.
- This means the entire world should be explorable now.
- Added the ambient wind sound. It feels a bit louder in Unity than in GameMaker. Not sure if it's just me or if there's a difference there.
- Removed the debug visuals, they are no longer needed.
- Removed the initial debug camera and world re-generation functionality.
- Implemented the player character with grid based movement just like in the original.
- All the input methods of the original should work the same here.
- Implemented collision detection. With the grid based movement and Daniel's clever algorithm this collision detection is just 1(!) line of code.
- I've left my debug boxes in there so you can see how funky the character is positioned on the grid. It took me many hours to figure that one out.
- The player spawning code which ensures the player spawns with some room around him is implemented, but because you don't yet have the axe you may be forced to restart the game if you spawn in a less than ideal position.
- I've also tweaked the pixel perfect rendering in this build.
- Initial release
I may attempt to fix some of these at a later date, but at the moment I'm hoping someone else fixes them for me. :p
- The stroke surrounding the view mask is not exactly 1 pixel thick all around like it is in the original. This is surely caused by my crappy shader, but I don't know how to fix it.
- The lines for the energy and food meter sometimes because 2 pixel thick. No idea how to fix this one as they come straight from GL.LINES
- There's a pixelsnap bug with the line for the food meter when it's pointing straight up. No idea how to fix. This bug suddenly appeared towards the end.
- "Rendertexture error: Material doesn't have a texture property '_MainTex' UnityEngine.Canvas:SendWillRenderCanvases()" Something is wonky with shaders. Probably my view mask shader.
These are bugs that I haven't fixed because they also exist in the original game so I've preserved them to keep the two versions as similar as possible.
- If you're standing on the corner edge of the shore and try to build a raft diagonally out into the water you will not be able to enter the raft. Probably an issue with the collision detection.
- If you eat a turnip while you're facing up, the turnip will pass behind your head.
- Not really a bug, but you can travel indefinitely out into the sea without ever looping around to the other side of the world.
- The "Press key to begin" text on the instructions screen jerks a bit when the counter loops around.