Into the Mysterious Tower
So, this was hard to make. But how did it start exactly? Let me see…
I’m sure I have to emphasize that this is a fan-made, free project from which I have no financial gain. That spider-man, and any other characters I mention were not mine, but they were owned by their copyright holders. So, I made a disclaimer screen explaining this. I consider this prototype finished, I don’t have plans to continue it in its current form. I may use the code and methods I used for a different project, but that won’t be with any copyrighted material.
I adore old C64 games – that’s no secret, those were the first games I played the most when I was a kid. There are developers who actually make new games for this discontinued hardware, with the accumulated knowledge of decades of graphical and coding finesse of which this hardware was capable. The original engineers of the C64 were sometimes shocked to see what clever coding could bring forth from this 8-bit machine. The love I have for this can be seen in my _ _ _ and Rescue Mission on Titan game jam projects. Although, if you look at this game and the screenshots, this is not a palette of colors used on those games. I actually used the 8-bit Nintendo full palette with a couple of more extra shades. But what is the connection then?
I played a lot of games on the C64 and I have fond memories of many, including the Amazing Spider-man, which was a puzzle platformer. I don’t remember if I ever completed that game, though I managed to get far I’m sure. When I showed my game to some of my colleagues, one of them remembered playing that C64 game as a kid. In this game you could walk and crawl on walls, could shoot webs, activate buttons, and the player had to find the way to the end. I have wanted to make something similar for a while, and as last month’s theme was UP AND DOWN, I made a spider-man puzzle platformer game. And boy, was it hard.
First and foremost, I wanted to nail the basic features before I did anything else, as I know I had some difficult things to code. First of all, I have never properly used state machines so far, I managed to get by without them, but in this project, I did use states and it’s been great. I had to separate the many states the character could be in, since just the player’s code is over 2000 lines. So, I managed to control the character the normal way easily, but I had to make it move on the walls and the ceiling too. Those are similar to the normal, walk-on-the-ground code, except for gravity, jumping off a wall returns the character to the on-ground state which handles the falling and jumping. I made tight air vents, which I also handled separately. And the web shooting, more precisely the swinging was a great deal of work. I made a version that sort of worked, but I wasn’t really satisfied with it. So, I searched for a solution and I found Shaun Spalding’s rope swing tutorial, and I used that as the base for my swinging. I expanded on that, so I could force a swing left and right and move on it up and down. It worked out quite nicely, though it’s not perfect (it sort of works like a pole and not a rope, as you can shoot it on the ground and it’s not collapsing under the character). After the player drops the web, it starts to disappear, and I change it to a three point path with Bézier curve turned on and simply draw it on the screen. The code handles a lot, as the player can walk upright and on all fours on any surface, I had to make a lot of while loops to push out the character from colliders. I got a lot of teleporting bugs, but in the end I’m almost sure I handled every one of them (not sure :)). Also I couldn’t figure out an automatic way to get a certain point in every frame (the hand that holds the web), so the web’s end coordinates are hardcoded in every frame in every animation.
After the base features I started to draw things, I drew a cute spider-man, I also named the game The Extraordinary Spider-man (as this, to my knowledge, has never been used), with the subtitle of Into the Mysterious Tower. I started to build the first level (and from there it was a constant fight with the teleport bugs), and started to add new stuff to do. And new stuff, and new stuff again. It started to be a feature creep so I had to stop myself from adding new things. In the end I had sticky and non-sticky walls. Green slime, sawblades, laser cannons and rats to damage the character. Pizza to be consumed for replenishing lost HP, thick doors to open (or close). Buttons and pressure plates to turn things on or off, a laser trip to turn red if the player crosses its laser. I also had a switch hub, where many buttons can connect and that turns green if all buttons are on. (It turned out to be useful mostly to handle single sources, as I realized I should change how these works, but it stays as it is for now.) I made carriable boxes to hold down pressure plates, block lasers and smash rats. I also made a dialog system, as spider-man is a chatty hero, and I wanted to show that.
At the end I managed to build two maps. The second map was designed by my darling girlfriend Allegra – originally in three separate maps (that’s why those are harder :)). This is why there is a long drop on the second level connecting the second and third rooms: I ran out of time and couldn’t build anything there to connect the two rooms. I also encountered some interesting bugs, like the tile editor wasn’t working properly for a couple of days, but luckily Yoyogames pushed out a fix for that. I also had an air vent not working properly in one place. The player kept teleporting into the wall, despite all other air vent entrances was working just fine. After moving it by 32 pixels (and it was on a 32×32 grid), it suddenly worked.
I even added an intro, explaining how spider-man gets into the sewer. The prototype ends where he would get out of the sewer to a higher level of the tower. And I made a transition effect, one I wanted to make for The Chromatic Shield too. Recently Yoyogames started to add effect layers to GMS2, which are still not working properly, but 1up Indie had a tutorial about this topic, and showed how to access the parameters of these on the fly. So, I built one combining a posterize and colorize effect and it turned out great. I also revisited the code I used in Ghouly Scares, namely the mouse-controlled menu system. In the end, I managed to make it work properly (and I hope I remember to expand my library of reusable stuff with this).