Plague
The above video was made for a submission into RIT's MAGIC MAKER Program.
Quick Info
- Released: April 2023
- Platform: PC
- Genre: RPG, Dungeon Crawler
- Software: GameMaker Studio 2, GitHub, Google Drive
- Skills: Teamwork, AGILE, Programming, Game Design, Data Abstraction, CSV Parsing
- Awards: Best Design, RIT Game Dev Club 2022 Halloween Jam
- Development Time:7 Months
- Download Game ⤴
- Source Code ⤴
Overview
Plague began development in October 2022 as a submission in the RIT Game Dev Club's Halloween 2022 Game Jam, where entrants were tasked with creating a game over the course of 48 hours based on the theme "Decay". I worked alongside one of my friends to develop the basic prototype of Plague, which ultimately won in the Best Design category.
After the Jam, my friend and I decided to continue development. Our new goal was to submit an application to RIT's Magic Maker Program - we thought that Plague had a lot of potential, and the program would allow us to dedicate our summer towards making it the best it could be.
During the spring semester, we spent most of our free time on creating a vertical slice to submit to the program. We wrote design documents, communicated design ideas, and met after classes in the open computer lab to work. My partner handled most of the sprite work, and he composed the game's soundtrack. I was responsible for the game's script, as well as level design, battle mechanics, and 3D rendering.




Rendering the Dungeon
When creating the original idea for Plague, I knew I wanted the game to be a first-person dungeon crawler. It's a genre that you don't really see nowadays, and I always wondered how I would go about programming the graphics.
Plague was developed in GameMaker Studio 2, which does not natively support 3D, so I had to "cheat" a little to make the graphics work - it's not true 3D. The dungeons themselves are represented by a 2D array of structs. These structs contain info about the wall, floor, and ceiling tiles that comprise the dungeon, such as what sprite they should use, and what should happen if the player attempts to step on that tile (battle? treasure? nothing?). The player's current location is a coordinate in the dungeon array.
GameMaker Studio 2 has a built-in function that accepts a sprite and four (x, y) coordinates as parameters - this function will then draw the sprite on screen, with the sprite's corners being placed at the provided coordinates. When rendering the dungeon, I iterate through the tiles that are in the player's view, and check to see what location they are in with respect to the player (transforming from world coords to local coords). Then, depending on where these tiles are located, they are drawn at set coordinates defined by the top image above. For the turning animation, there is only one in between frame, and the set coordinates for that are shown in the middle image.
This solution worked for the time being, but I do not think it is ideal. The animations are choppy, as there are only a few set locations on screen that the walls can be displayed. Additionally, some players may experience motion sickness while playing due to the unnatural movement. Plague is still under development, and my current task is reworking the rendering engine to use industry standards - projection matrixes and all that fun stuff. The current plan is to use raycasting to determine which tiles are in view, then using perspective projection to map 3D world coordinates to 2D screen coordinates.
The file containing most of the rendering code can be found here.


