This is a diary I kept while I was making the game.
A review of Rapunzel's Escape has just gone up on YouTube. This was done by Matt Mikolaj, formerly of O-gamer magazine. He is starting a new video reviewing project and already has quite a few reviews up there including one for the runescape easter missions.
Check it out here:
Thanks Matt for reviewing the game!
Seems like it doesn't matter how much you test something, there's always something else that can go wrong! The new collision detection system wasn't flawless and with a lot of hair, it was possible to push an enemy right out of the screen.
By putting the view in director on 12% I could see the little enemy floating helplessly downward in the void outside the game. Once he reached 32,000 pixels down, he would loop and start again from 32,000 pixels up. I didn't watch that long though.
Fixing this bug was tougher than identifying it. At first it seemed just limiting the speed of all objects to below the size of a tile would do it (31 pixels per frame) and although that made things better it was still possible for things to go wrong.
I discovered that under very special circumstances it was possible for Rapunzel or an enemy to warp through a block and appear on the other side.
Once that was fixed, it became apparent that it was still possible for very small objects to force their way out of the corners where a wall and a floor tile meet if it was travelling fast enough. To sort this out I had to program a new type of collision tile specifically for this circumstance.
The whole thing took ages, but at least now, the system should be robust. After the hammering I've given it, I'd be surprised if anything else goes wrong. (How to tempt fate!)
While I was at it, I also noticed that Rapunzel's hair had an annoying habit of flicking around when you entered a new screen. This was relatively simple to sort out, just a matter of moving the hair when Rapunzel moved rather than letting it get "pulled" across the screen.
I also noticed that the big witch wasn't really behaving properly so I tweaked that and also redesigned the screen to take away a safe spot that allowed Rapunzel to hide, and still hit the witch with impunity. It also means that the only way to get to the hair potions at the top is get blasted up there (unless you entered through the secret entrance).
I also felt that the witch was a big weakling, and the fight tended not to go on for long enough, so I increased her hit points from 100 to 300.
Oh and I also put the stars back in. This was because of a suggestion by Eric9000 which reminded me about them. I don't have a credits section in Rapunzel yet so I hope mentioning your name here will suffice for the time being!
After going to all the effort of making a new collision detection system for MR3, it seemed a shame not to allow Rapunzel to benefit from it as well.
Bringing it to Rapunzel gave the following improvements:
- faster game speed
- more flexible level design
- small bug in room exit corrected
Implementing it in Rapunzel turned out to expose a few minor flaws in the system, which would have reared their heads eventually anyway, so it proved a good testing ground for the new system. Also, special code had to be added to cope with platforms - ie special tiles which you can walk through left and right and up but collide with when moving downwards (if you were above it last frame, and are not pressing "down").
Rapunzel's collision detection was very slow compared to the new one and relied on dividing the screen into rectangular zones which would then be detected against. This meant that keeping solid blocks in rectangular arrangements would keep the number of zones down, and keep the game running faster. It also meant screens with quite a few enemies on (5 or 6) would have to be relatively free of solid or platform blocks, again in order to keep the speed up. Without this constraint I was able to go back a redesign some of the screens to make them more interesting.
Under the old system it used to be possible to jump "through the ceiling" of a room in the armoury to arrive in the floor of the room above. This bug corrected itself with the new system, because now when Rapunzel (or Merlin) leaves a room, the collision detection system actually looks at the tiles in the surrounding rooms rather than assuming that anywhere on the current screen where there are no solid tiles is a viable exit. This is an improvement over the system in MR2 as well.
> one of the new armoury rooms
> things hot up
> things get tough
> one of the redesigned roof rooms
V1.024th Feb 2005
I had to re-ogranise the data in Rapunzel to make way for MR3. After I had done this, I was having trouble uploading v1.02 to the website. No matter what I tried, it didn't seem to want to load.
In the end I thought maybe using extenal casts for the scripts was more hassle than it was worth. The idea was that Rapunzel and MR3 would load from partly the same casts for their scripts meaning that if you had played one, the other would already be half-loaded. However, I never understood why casts that contained nothing but text could be 3mb in size. It didn't make sense to me.
To my surprise, when I included the script casts with the rest of the movie, the size of the .dcr only increased by 55k, for a loss of that 3mb. Effectively that means that something that was taking up 3mb is now only taking up 55k.
I still don't understand, but the upshot is that this is good news. The total download size for Rapunzel has been reduced by 75% saving you time when you're downloading it and the loader bar now properly indicates how much has loaded.
I also managed to fix the instructions screen so that the text starts at the top. Bizarrely, the problem was caused by the text centering on wherever I had left the cursor! By leaving the cursor at the top of the text box after each edit, I can make sure that the instructions start at the top.
Rapunzel FinalTweaks22nd Dec 2004
Made a few last adjustments today.
Made the prince's collision area smaller so that it was easier to avoid getting into a conversation with him, since, at the moment, you can't skip the conversation.
Altered the instructions as they still referred to the space bar, which is no longer needed.
Added a version number to the titlescreen.
So the game is now finished, but as always I'm not 100% happy with it. Here are some things that I would like to add when I get a chance:
- disable the "esc" key and use it to bring up the instructions in-game
- add a minimap like the one in MR2 so you can see where you've been.
- do something about the way the enemies sometimes overlap so that two look like one.
- pause mode
- save game
- be able to skip the dialogue between the Prince and Rap
- make a loader that takes into account the extra casts that need to be loaded
Rapunzel End Sequence20th Dec 2004
Did the end sequence today (along with a few other bits and pieces like making the hair grow automatically when it gets cut).
Like the title sequence, the end sequence is a series of screens with pictures and text. I didn't have time to animate it all, and just having pure text is a bit dissapointing at the end of a game so I thought this way was a good compromise. Also has a bit of a storybook feel to it.
Rapunzel Title Sequence16th Dec 2004
Started the title sequence for Rapunzel today. This involved programming a little program that will sequence through a series of screens and display back, next and exit buttons.
After that, I just had to construct some pictures and add the text. Erm, there's not really much else to say about it. You can view the title sequence from the game's title menu.
Rapunzel Title Screen15th Dec 2004
Did the title screen today. The title screen to the original demo was very simple and looked like this:
I had just lunked in some text to show that it was the title screen. I picked the Dapuhin because out of the fonts on my computer it seemed most in keeping with the style of font in the Longhair Lovers logo.
I hadn't put a lot of thought into it at that stage and always planned to replace it with something more "computer gamey". Then one day I was feeling like I wanted a break from the programming so I started on the title screen, got as far as doing the font (it took ages) but didn't get as far as drawing a nice pixelly picture of Rapunzel running away from some enemies. It looked like this:
Then, it later turned out that Jennifer (who had commissioned the game for longhairlovers.com) preferred the first font! She asked me if I could match the fonts to the one that would appear on the Rapunzel t-shirts that a graphic designer friend of hers had done. This was no problem and the end result looks better than if the second design had been taken to it's conclusion.
I still felt that Rapunzel should feature on the title screen but by this late stage I didn't have time to draw her so I took several screen grabs of me playing the game and choose one to use as the background for the title screen.
Now the only reason I mention all this is that the witch has a computer in the game and on that computer is Rapunzel's Escape - but it's the old version with the second title screen. That's what you get for being evil - out of date products!
Rapunzel Perform Dialogue10th Dec 2004
Gave Rapunzel and the Prince the ability to perform dialogue today. I'm quite pleased with this because the way I did dialogue in Merlin's Revenge 2 was to actually animate it on a timeline. This involved an awful lot of fiddling about with a huge number of text boxes and multiple rewatchings to make sure the amount of time that each bit of speech stayed on screen for was ok. What I had noticed while I was doing that was that the amount of time needed was roughly proportional to the number of characters in the line, perhaps with an amount added on as a basic minimum.
So for Rapunzel, I decided to try to automate the process of performing dialogue. As well as lessening the amount of time it took to change a script into a performance it also has the advantage of allowing scripts to be performed in game.
The way it works in Rapunzel is that the Handsome Prince, whilst sleeping, behaves the same way as a powerup except that his collision area is quite a lot larger than he is. When Rapunzel "collects" him, he doesn't dissappear; he goes into "awake" mode and tells the the game to perform the script. The game then hands each character a line at a time from the script and the character calculates how long to "say" each line for based on the number of characters in the line. The character then tells the game when it has finished the line so game knows to move onto the next one.
In order to save typing, the script also contains a "cast list" (labelled "players") at the top of it explain which in-game characters are referred to in the script. Then come the lines themselves (labelled "lines"). The script for Rapunzel meeting the Prince looks like this:
#playerCharacter - r:
#handsomePrince - p:
r: OI WAKE UP!!
p: egad! 'tis a dragon!
r: Thanks very much.
p: Oh, it's you - what are you doing here?
p: aren't you supposed to be...
p: ...you know...
p: ...up there?
r: Yes well...
r: ...I got tired of waiting for you to wake up...
r: ...so I rescued myself.
p: Oh, jolly good. Shall we go then?
r: hmm... dunno, it doesn't seem right to just walk off.
r: it's not right for the, you know, idiom thing.
p: ah yes, that...
p: ...it's a prob innit?...
r: exactly. Hmm..
p: look, here's what I suggest -
p: I've noticed that the evil witch is nearby...
p: ...she's about eight screens up from here...
p: ...why don't you pop yourself up there, defeat her...
p: ...and then dangle your hair off the balcony...
p: ...so I can climb up it?
p: That's still a sort of a rescue...
p: ...and you get to kick some more butt!
r: Hey, I like that!
r: Yep! Sounds good to me! Let's do it!
p: Well, you do it, there's a love...
p: ...I'll just have little nap.
r: Good grief.
Any changes can be made to the text: the characters will adapt instantly. the only thing I had to look out for was keeping the lines short enough that they didn't dissappear off the edge of the screen or spill over onto two lines, which looks a bit wierd.
Rapunzel Handsome Prince9th Dec 2004
Added the handsome prince today. Here he is: