Project #07
The Legend Of Lamp
Description
The lamp needs to get to the portal to get to the next room. As it is a lamp, it can shed light into dark rooms, but be aware, the cable length is limited! Can you help it to find the right way?
Space | Toggle the light of the lamp |
←/↑/→/↓ | Move |
Return | Start / Skip story |
The Game
Inspiration
The Legend Of Zelda is my favorite game series of all time. So of course I decided to build my game as an homage to this series. Especially the SNES game, “A Link to the Past” (see below ↓) as well as the original “The Legend of Zelda” for NES, inspired me for the intro, storytelling, and gameplay. My game therefore should be seen from a top view, controlling a character in 4 axes, going through a “dungeon” of some sort, and solving puzzles.
Background
Over the past years, I have lived in a couple of cities, often also just for a couple of months. I wanted to display this journey, showing the different places I have lived in, up until the next step, which hopefully will happen soon, but is delayed due to the currently ongoing pandemic: New York City.
Initially, I intended to have myself as the playable character, however, I do not feel comfortable to put myself into the protagonist role, so I decided on the only companion that has followed me along with all the steps, my lamp.
Story
Title: The title is super close to the one from “The Legend of Zelda” underlining the homage.
Intro: Also here, I wanted to include the famous sentence “It’s dangerous to go alone. Take this.” from the first Zelda game. Instead of a sword, the lamp is given to me, in this case, marking the beginning of a long-lasting relationship.
Levels: Each level represents a room in which I have lived. So far I am considering:
- Schwäbisch Gmünd - the place I did my undergraduate degree at
- Hamburg - the city where I did my internship semester
- Lund, Sweden - the town where I did my exchange semester
- München - where I am currently located at
Outro: The Outro is a still image of the lamp sticking out of a moving box. A little label on the box is indicating that it will be on its way to NYC.
Mechanics
What the lamp can do:
- Walk
- Toggle its light
- Constraint: the cable length
Enemies
- Furniture as obstacles for the lamp
- Furniture as obstacles for the cable
- Darkness
Grayboxing
open in editor ↗Cable Calculations
When building the gray boxed version of the game, I had problems with the cable management *badumm-tss*. For every step the lamp is taking, the program is first calculating if this is actually possible, given the length of the cable at the new position. It basically is a little prediction that is happening before a step is taken, making sure that every eventual collision is thought through.
I heavily relied on the examples and codes from Jeffrey Thompson. His collision detection codes for lines and rectangles were the foundation. The biggest issue has been to prevent the cable from "slipping" if the rare occasion happened that the last current position of the lamp, as well as the point before the last point, had no obstacle in between. This all seems quite abstract, so please find the sketch with visualized detection edges below. Try moving around to understand where collision detection is happening for the cable.
Styling the game
Level Design
For the levels, I tried to abstractly recreate the rooms fairly accurately, but also played around with different cable lengths and positions of the objects to make them a little harder. The objects are placed separately, allowing them to also potentially behave differently in future iterations.
Also, I realized that if the lamp is continuously turned on there is no reason to turn it off again. So I decided to add a timer of two seconds to the light (see the bar in the top left corner) to increase the complexity again. It needs some time to recharge, requiring the player to remember the sudden next path to go.
Having designed the levels, it was of course very easy for me to go through them. I had the feeling that they were too simple to solve. After sending it to a couple of friends and my roommates and watching them either in person or via zoom, I realized that they struggled a little bit to find the right path, assuring me that this seems like the right complexity for such a short game.
Images
Being a huge fan of The Legend Of Zelda, as mentioned before, I naturally wanted to make the game in a modern 8bit style. Inspired by the visuals of A Link To The Past but also the Pokémon franchise, I created all my furniture elements in a slightly tilted 3d style, as this helps the most to get a feeling for the objects.
I created all of them in Adobe Photoshop drawing the elements
pixel by pixel. To get the pixel look right, I drew the images only with
half the resolution, then exporting them again but even with the double
resolution to guarantee sharp edges also on retina displays. So, an
image asset that needs 40px ✕ 40px
is drawn in a
20px ✕ 20px
canvas to then get exported with
80px ✕ 80px
.
My roommate Nikolas mentioned that he would appreciate seeing more of the rooms, so I took his feedback into consideration, adding a transition, displaying the rooms briefly.
Music and Sounds
For the sound effects, I used the sounds from A Link To The Past from this library . The music is done by my friends Hans and Fabian, who I am really grateful for this contribution! (Also I just want to mention that I totally can recommend their music projects Poly Poly and C.O.W.牛!)
Next Steps
I might continue to develop this game further. Here are some points I am currently thinking about to evolve:
- Adding more levels (places I lived in more briefly and other, minor, room changes I did not consider so far due to the sheer amount of levels)
- Making some objects movable, e.g. the shoes in the Hamburg level, to increase the complexity
- Having some objects constantly moving and thereby changing the cable length and thus pulling the lamp back
- Thinking about different issues with the cable, e.g. disabling that the lamp can cross the cable
- Or the contrary to the point above, having specific objects that need to be wrapped by the cable to enable reaching the goal