I should have posted this last night, but as of 10 PM PDT the game is done! It now also has a name, Radiance. Because light plays such a big factor in the mechanics and the story, it seemed like a good fit. You can play it here:
https://mattcolon.itch.io/radiance
I won't be able to work on it more today due to work, but this ended up being a nice little exploration of reflection mechanics and how they can be expanded upon. If I had additional time, here's what I would have liked to explore:
- Moving enemies
- After the ending, making the player the source of the ray of light
- Light reflection for combat beyond puzzles
- Refraction of light through objects
- Refraction of light into colors
Something that I aim for in each game jam is to learn and do new things so a grow as a developer beyond making use of the skills I've developed. For this one, there were two things I focused on: raycasting/line rendering and scene management. I hadn't used raycasts before in Unity, but it seemed to be perfect for this type of gameplay. Paired with Unity's LineRenderer, it made it easy to use a raycast to determine the lines for the ray of light and find its reflections around the room, then translate that into points of collision to add to the positions of the LineRenderer. I also made use of tags to determine whether a hit should be reflected or cause damage.
I've played around with scene management in the past, but my game jams had still been single screen games. For example, Unveil, my CGDC Speedgame: Hardmode 2020 entry, was a dozen maps on top of each other lined up such that the exit for one was at the same place as the entrance to another to make it easy to simply disable the previous map and enable the next. However, this time I went all in on scene management, and it made it much simpler to deal with. In some cases, I could do a "scorched earth" approach to a scene as I was getting ready to leave it, destroying objects as needed to pave the way for the player to head towards the scene transition. I also made many more prefabs than I have before, and that made it incredibly simple to start a new scene by dragging in all the common things (e.g. the player object, the ray of light, the darkness creations, the darkness manager that makes the room lighten up after darkness creatures are destroyed, etc.) and then pulling in the new map. I also learned about DontDestroyOnLoad(), which allowed me to carry over the background music through scenes.
Overall, this was another great experience, and I hope you all enjoy the game!