My Mario Game Test in Backbone (Amiga)
Posted 2014/12/10 10:01:32
I like to type too much, which puts off a lot of people (as most don't like to read a lot "TL;DR!"), so... be warned! (showered the text with colors to make it more... festive. Could just have made it even less fun to read, buuut whateva!)
I've already written in the game some of the stuff I'm gonna write here, but to keep it all in one place - why not put it all here even if I repeat myself? Well, I don't repeat myself here if this is the first place you read it :P, but if you go by where I wrote it first, even if this IS the first place you read it, I did sort of repeat myself anyway... and as usual, I type a lot of nonsense (the stuff I just wrote that is, and this... aglets & soda)
Note: I only planned on doing level 1, but couldn't finish it as I ran into an object limit. So, some things won't get score, the flag pole doesn't work, you can't finish the level (made it so you teleport to the start instead), the Koopa when jumped on doesn't spawn a shell that moves away (would be easy to make, but needed to use more objects)... It's all explained somewhere below :P
I've never heard about Backbone (a game creation tool/kit/program/thingy) until a buddy (Hipoonios) made his very first game ever (SuperTed/Longplay) with it. He told me about all the bugs, glitches and limitations it has (or "had", depending on how you read it). I Googled Backbone and found several YouTube videos of what mostly was unfinished games, mostly tests by people. There were also some info in a couple of forums, like English Amiga Board. This program seem to be quite popular, even with all its problems, so I downloaded it and gave it ago.
While learning/experimenting, I wanted something to work with, so I chose Super Mario Bros. on NES. Just the first level will be enough. One of the reasons I chose Mario was because Backbone has this Powerhead option, which breaks blocks when you hit them with your head. I learned that this is not good enough for a Mario game as these blocks can only contain 4 frames of animation, which is not enough for me + I wanted to do a pretty decent accurate version (as close as I can in BB anyway) of SMB so I wanted all the animation frames for when the coin boxes () animate in idle mode, and all the frames when you hit it with your head so it pops up a coin and the whole box itself bumps. On top of this I wanted this to add +1 coin to the panel, and at the same time give the +200 points of score per coin. All this is "normally" not possible in BB, but with some clever thinking, I made it work.
Backbone was very easy to learn and I found out way more bugs and limitations than Hipponios did. I tried pretty much everything to learn about the limitations, exactly how things like collision detection worked etc, and thus from understanding a lot I managed to get stuff working that you normally shouldn't be able to, stuff I've not seen anyone else do in their games. Because of this I now have many cool ideas for games with unique stuff I've not seen anyone do yet.
Backbone has some options/functions/buttons that hasn't been finished, so they do nothing, they just taunt you with what one day could have been functioning. One of them I REALLY needed to make the stuff work more accurate like the original SMB was the "Remove Object" event.
And that's that, now to talk a bit about this Mario example/test/experiment/whatever...
I didn't plan on uploading it as I couldn't make things work the way I wanted, and also as it was just my own test game, nothing for others to try out... but changed my mind. All I wanted to do was to record a video of it and put on my YouTube channel.
Three initial problems with solutions (you're welcome, in case you didn't know them):
* SMB has a panel above and the rest of the game underneath, but the way everyone do their games in BB is with a black line in-between these two areas (some wants it, but others didn't know how to get rid of it, so they worked with it the best they could, designed with it in mind etc), which SMB doesn't have, so I needed to get rid of it. Turns out the background color used for transparency in BB (color slot 0) is also for this line, so I set this color to the blue background color (whereas everyone seems to go with black) and voilà!... no more black line between the panel and the rest of the game (turns out this only works if the panel is on top).
went from this: to this:
The problem with this is the color will paint the outsides, which doesn't look good if you view the game in a too big window like in WinUAE. On a real Amiga I guess there wouldn't be this much blue space on the sides. I just made it this wide so you could more easily see. The width of these pictures are 352. Even if it was just 320 there would still be blue outside the game area. So, it would be much prettier if I used black instead as that would have made only the game show. It would have been like this...:
... which is just the way I want it, but at the cost of having to include the black line. So I went without the black line instead. This game was supposed to be shown as a video only anyway, where I crop the sides. The game itself is 256 pixels wide.
* The panel height - it crashes BB if it's below 40px, but only if viewed in any of the different ways inside BB other than when playing. So I had to use a second panel for when placing the score/coins/timer. That was my workaround. The panel I'm using is 24px high. So maybe this explains why every BB game I've seen that uses a picture for their panel only use BIG ones.
* The text/numbers (characters) displayed in the panel have black backgrounds. Even if you sat the tiles palette color slot 0 to blue, this doesn't affect the panel palette (as it's its own image, but I first thought it shared palette with the tiles). So you need to do the same for the panel. So, to change the background color of the characters, set the color in slot 0 of your panel image to the color your want. Unfortunately it doesn't seem like you can have this color transparent.
went from this: to this:
* Speed is pretty important for most games, but in BB that's a big issue. The biggest problem with BB in my opinion is the lack of speed. It's so badly optimized that it doesn't take much for a game to run in 12fps. Mario on NES uses 24 colors (fired the game up and had a quick look, but might be wrong), so I had to go with the 32 color mode in BB as you can't go with anything but 8, 16, and 32. Doesn't matter if you use even 2 colors, if you set it to 32 it will run like it's using 32 colors. at 32 colors AND the fact that it's a scrolling game, made the game run sooooooo poorly. I decided to try 16 colors and the speed DOUBLED. I noticed scrolling to the left in BB games is not as fast as right. In 16 colors is scrolled smooth to the right, but not left. If I went with 8 colors it would scroll smooth and fast in both directions, but as this game doesn't scroll to the left, I went with 16. I did manage to get the palette down to 8 colors and still have the game look good, but forgot about the underground cave, which had 3 more colors, so I ended up with 11, so I had to go with 16 anyway. So my tip for those who wants to do games in BB, try to use 8 colors if possible, but not over 16. Also, try skipping scrolling completely (nice games can be made without scrolling). With only 8 or 16 colors and no scrolling, games will run really good, even if there's several animated objects on the screen.
* Sometimes changes won't update when you try the game. For example, you can add an enemy or some tiles, but when you run the game these changes won't happen, it's still how it was before. To solve this, just reset the computer/emulator and run the game again. You could probably also remove the game files from RAM (never tried, easier for me to just reset as it takes like 8 sec before I'm back in WB and have started Backbone again, but if you are on a real Amiga, removing the files from RAM is probably faster).
* If you activate a teleport event while climbing, you won't fall if you chose to teleport to somewhere in the air. You will fall the millisecond you press any direction. You can see this for yourself if you climb down the tube, but tap down until you've triggerd the event, don't hold, because if you hold down too long, you will hold down AFTER you've teleported which will cause you to fall. I could have fixed this by simply removing the ladder so you fall down to the event trigger instead, but then you can't slowly ascend down like in the original SMB game :) (but yes, in the original you don't have to hold down, just press once), so kept the ladder. By the way, the reason I chose to teleport to the right side of the room is so the room was as far to the right as possible, so it wouldn't scroll to the right when you got there. If I chose to teleport to the normal spot on the left side, you would not see the entire right side of the room until you moved there (repeated myself again, but had to be said, I think... wiejfpwem!#/123%#¤ cheese). The position of the screen is decided based on what Auto Scroll you are using, even if none. I have it set to "Right", which always places me somewhere on the left side of the screen (if the stage still has enough tiles outside the screen to the right). Turning Auto Scroll off puts me more in the middle, but not quite. No matter what mode I have it set to, I couldn't get the room to be to the furthest right when teleporting to the left side.
* There were many more of course, but too technical. Can't be bothered explaining.
* Unfortunately I couldn't finish the level as I reached the limit for objects (not talking the ones in Edit Objects). It's 60-65 (maybe 67?), lost count when I tested it (twice). You get this error when you try to place one beyond this limit:
You can add objects using event too, which I tried, but they just wouldn't show up in the game if the limit was reached. Objects is the key to do most cool things, you just have to be a bit creative. Because of this, I couldn't finish the level. I was working on adding the coins in the underground room when I realized. So, these coins won't give score (and couldn't place all coins), you can't jump on the flag pole to finish the level, only a couple of blocks of bricks () can be "bumped" (removed 2 coins so I could add those 2 blocks), the Koopa won't spawn a shell that moves away and can hurt you AND that you can jump on. I could of course remove some more coins and finish more things, but not fun now when I can't have all the coins and do the rest. Weeeeeell, this was just all practice for me anyway.
* You can set the level to Auto Scroll, which is a cool feature and I had some ideas for cool games and functions like a radar, minimap, a special extended panel, etc, but all out the window because you can speed up the scrolling by walking forwards, BAH! I tried to come up with ideas to make these work anyway, but they won't function that well when you can change the speed of the scrolling whenever you want, so will not use them.
* The collision detection is terrible! It only does a decent job when checking against sides of things you WALK/RUN into, and land on. But when it comes to jumping/falling into from the side, then it's terrible. Because of this, jumping up and landing on individual boxes can be a bit difficult (doesn't help that I use a bit of sliding). You can also trigger the coin boxes (and the brick thingies) from the sides by either falling or jumping by the edges as a big part of Mario will go inside them. This could be fixed by simply adding one of those bricks to each side of each coin box, but that's not how the original Mario level 1 is (it is like that in a few places, though). If the "Remove Object" event in the level editor worked, I could easily have made these coin boxes work exactly like in the NES version, despite the bad collision detection.
* The event boxes are smaller than 16x16, which is the smallest tile size you can select, so you will hit the tile before you hit the event box. I had some nice ideas where I would place an object (disguised as a tile, so not placed off the grid pattern) as a collectible and an event on top of that, so both triggered at the same time when touched, but it would fail if the player didn't jump high enough so he hit both, as the event is smaller than the tile. It would be no problem if events could be placed exactly anywhere you wanted with pixel accuracy like objects. I so wanted this to work so I decided to place these fake tiles (objects) further up instead, so the bottom edge of the event and objects where at the same level, but nope... this is another case of bad collision detection - objects are triggered as soon as a pixel of the player hits it, but events only trigger when it's in the MIDDLE of the player. So, see it like this: imagine a pixel in the middle of the player, and a pixel in the middle of the event box... the event box will only trigger when both these meet, which SUUUCKS. So, going by Mario's size, if I place an event box above him, and jump upwards, half his body will be inside it when it triggers.
I had several ideas on how to do the 'going down the tube' to the underground room. I ended up using one that wasn't automated, but easiest to implement. As I can't place the events exactly wherever I want, same with ladders as a ladder is a tile, and objects can't be ladders, I had to come up with a way to make the player descend down the tube in the MIDDLE of two tiles, as these tubes are 2 tiles wide. Most people would probably just have made them 3 tiles wide, but I didn't want that, so I simply modified the tube tiles so they took up 3 tiles instead, but still the width of 2. This way I could have a ladder in the middle of it. The sides are solid so you can't move through it from the sides. Only 2 downsides to this is you can't stand close to the tube from the outside, and you have to hold down to get into it, as it IS using a ladder. Other methods I had didn't have these 2 downsides, but came with other ones instead and were more complicated to get to work, but possible.
* You can't reset the game properly. When you "reset" the game, it's all reset except some of the stuff in the panel, like score and energy (lives are reset). So if you lose all your lives and die and the game starts over, you still have the same score and energy (writing this from the top of my head, so might remember wrong about the energy. But the score definitely doesn't reset), only the level itself is reset properly. Because of this, I removed the possibility of dying (had the animation and the tune working).
* You can't stop the music. So, when you would die and the die tune would play, it would do that on top of the background music, which is another reason I removed dying. You might think that dying Mario style wouldn't work as the game would reset as soon as the death animation had finished playing, even before the tune got to finish. Well, that was not a problem as I just had to add "empty" frames at the end of the animation to last as long as the die tune... this they both ended at the same time, so from the time you die, the game resets after the tune and animation had finished playing.
* You can't jump outside the top of the screen. So, after I first drew/mapped/created/whatever the level with the correct tile height, I noticed I couldn't jump to the flag because Mario would just hit the top of the screen and fall down (only room to jump 2 tiles high). I decided to create the level again but this time 5 tiles further down. This time I could jump all the way to the flag top, but now the screen will scroll up and down throughout the level, which sucks as you can't see the bottom if you stand just a couple of blocks up, and it made the game extra slow AND the original game doesn't have scrolling up/down. So, I thought it would be best to just go back to how I first made it to get rid of the vertical scrolling, which I did. Then I noticed I made the level 2 tiles too short somewhere in the beginning, ARGHH!! Had to redo the whole level AGAIN! (yes, I'm that picky). I remade the level one more time somewhere in there, forgot the reason.
* The score in BB can't be more than 4 digits, so can't use SMB's original 6. Also, can't have it like "0012", only " 1"/" 45" etc... I had a few ideas to have "0000" but none worked as I couldn't have the font background color transparent.
* Just one frame for jumping and falling? At least we can have animation when standing still, dying, moving, climbing, crawling, and shooting.
* More often than not if you keep moving when jumping on an enemy, the kill is not triggered. Also, if you hold down jump when landing on an enemy, even then sometimes the kill won't trigger, instead you jump HIGH.
* Can't decide where the collision point for his feet should be. The original SMB has anything moving on the ground one pixel into the ground. I made it so that they walk on the ground. If I move the "hotspot" (that's what the author of this program calls it, I prefer "registration point") one pixel above his feet, he walks like he does in the original SMB, but the collision is done against the sprites, so what would happen is he would trigger the coin and brick boxes if he walked above them. This could be fixed, but would need to add more objects then (which I can't as I reached the limit).
* The animated boxes/coins are not in sync. I can see a couple of reasons why that could be, but would probably not have been too difficult for the author to make them animate in sync.
* Can't control animation speed (only by repeating frames).
* I've placed the enemies at the right distance from each other, but unlike the original game where they spawn together (if they are a couple), in BB enemies spawn individually as soon as they are close enough to the screen, so the "couples" in my version could end up at any distance from each other depending on how fast you "discover" them. Well, this was expected, most games works like this, just felt like I would mention it anyway... So it's OK, BB :)
So exactly what does this game have that is sort of cool for a BB game?
- Fully working coin boxes. They animate in idle mode, they pop the coin when you hit them with your head from below, they also show the score you got. The coin + the score is added to the panel.
- Fully working tube system. You can go down, and you can exit.
- Features score, coins AND a timer (but could only make it go backwards, LOL!).
- Enemies which you can jump on. Enemies can't give you points in BB, they can only be made to leave an object, so I made them leave a collectible which gives the score (didn't want them to drop a lame coin, so they drop a collectible that look like themselves instead, hehe). So, if you jump on one and move on too fast, you need to go back to touch the corpse to get the points.
- And other things...
... threw in a plane at last second, so didn't make it work properly. You might notice if you see it and do the right/wrong things :)
What are some of the things you did not add?
- A way to finish the level cuz I reached the object limit. So entering the castle teleports your back to the beginning.
- Interaction with the flag pole, for the same reason mentioned above.
- Proper working timer.
- Death cuz the music can't be stopped, which I found very annoying as both death and ingame music will be played at the same time. I COULD actually make a game with music that CAN be paused while I play sampled tunes, but have to make the .mod a bit special then, so couldn't with this .mod I was using.
- No spawning mushroom that makes you bigger. I already knew how to make both these things work, but you would have to jump on the moving mushroom to get it :), or I could have made a grab animation which is a disguised shooting animation where the bullets doesn't go further than right in front of you, which when hitting the mushroom stops it, so you can walk on it to pick it up, which then makes you grow bigger and activates the grown Mario version.
Any final words?
If I really wanted to get into making games for the Amiga, I would learn Amos or Blitz (not the other ones as that's much more work). But don't have time for that, so if I make another game (a complete one this time), I might do it in BB, or learn to use the other much better (I've read) game creation kit: Reality. I've already made several games for the past 10 years, but in Flash on my PC and don't really feel like learning another programming language. If I made this Mario game in Flash, I could make it a perfect port.
I said it before, but I'll say it again - if you want to make games in BB, keep it to 8 or 16 colors and leave out scrolling if you can.
No one has done a full tutorial on Backbone. There's only a short and basic one by Cammy over at the English Amiga Board. "Why don't you make one, Ironclaw? Or maybe not, you type too much" - Well, if I did I would of course keep it as short and simple as possible with lots of screenshots... but I'm not motivated enough to do a full tutorial.
So... now when I'm done with my tests and know BB pretty well... time to come up with a game of my own (I borrow graphics of course, but make my own game, like Hipoonios' SuperTed).
If you have any questions, your best bet for me to notice is if you post it as a comment on this Mario video (link below). I don't really pay attention to this site or my twitter account as much as I should.
Video of this Mario experiment: https://www.youtube.com/watch?v=Wt_TuPk9Quo (it has a DL link to the game in the description)
Subscribe (YouTube): http://tinyurl.com/iamironclawsub
English Amiga Board: http://eab.abime.net (best Amiga forum on the internet)
Backbone DL link and basic tutorial: http://eab.abime.net/showthread.php?t=66632