I now have all the objects that aren't related to the player rendering and animating - including the end of game 'base' which is an otherwise unremarkable so-called ground object.
UFO stage |
There's a fair bit of near-identical code in the object handlers, so today was more cut and paste and creating tables rather than implementing new behaviours.
Fireball stage |
I've added a few build options to the C code, such as the ability to jump straight to the demo in attract mode and also select the starting stage in the demo. No doubt I'll also add options such as infinite fuel, player invincibility and/or infinite lives to facilitate play testing.
The base at the end the final stage |
This really has been a staightforward transcode and now, roughly 50% through the code, I don't see any surprises to come. The code structure accomodates a C translation very nicely indeed.
In fact I took another quick look at Scott's Galaxian disassembly today and Scramble is undoubtedly derived from the Galaxian code base, despite the fact that Galaxian was released in 1979 by Namco and Scramble in 1981 by Konami. Galaxian would also be another straightforward transcode, and I'm tempted to work on it sooner rather than later whilst the project is fresh in my mind.
Next up is animating the player and fuel gauge, scores, mission flags etc. Since the player is inevitably destroyed by a rocket early in the demo, I'll have to also implement at least some of the explosion routines sooner rather than later.
I'm starting to consider which platform(s) I'll target for this transcode. I think Neo Geo will (still) be my preferred target, even if in rotated (vertical) mode initially. I'm trying to work out how difficult it will be to convert to horizontal - likely a lot easier than Space Invaders has proved to be - but I probably won't really know until I try.
I'm impressed by how fast this is coming together. I've spent some time with this code and made a level generator like this in preparation for my own port. I've studied Super Cobra as well and you will not be surprised to learn that it shares a lot of Scramble's code although the level generation is significantly more complex.
ReplyDeleteIt's the most straigthforward transcode I've done so far, thanks to both the code structure and Scott's excellent RE.
ReplyDeleteGood to hear about Super Cobra, I might also take a look at that some time.
May I ask what platform you're porting Scramble to? And which language you'll be using? Are you doing a faithful port or more of a homage?
Ultimately I want to port it to 6502 assembly running on an Apple II. It is going to be a significant challenge. For many reasons the machine is totally unsuited for it but I think it is possible to create something fairly faithful. If you eliminate tile detail it makes it easier but games like that already exist.
DeleteMy preparation work has been done with GameMaker Studio 2. It is limited to extracting the tiles, generating the terrain and ground objects, and altering the layout to fit the Apple II display.
Remaining challenges are recreating the tiles as 7x8 blocks that resemble the originals, developing a system that can scroll the screen fast enough and with a tolerable amount of smoothness, and of course the game logic.
http://www.xotmatrix.com/scramble/
Wow, that's awesome! I'm definitely interested in your progress on the Apple II port. I'm yet to tackle anything to the Apple, other than Asteroids which was alrady 6502, but my first major transcode was Lode Runner to 6809.
DeleteI agree it's a significant challenge to get the Apple scrolling and running at full speed.
I've been thinking of how to port this to horizontal displays and your layout on your website interests me. Sockmaster did a trasncode of Donkey Kong arcade to the CoCo3 using 7x8 blocks and it turned out amazing; you wouldn't know the difference unless you knew to look for it.
Will you be faithfully translating the Z80 code to 6502 or simply using it as a guide?
Good luck and feel free to ask questions etc if I may be able to help. I'm going to release the C code for this one fairly early on in the process, but TBH Scott's disassembly is so good the C code probably won't offer any more insight.
Once you get a 6502 core a C64 port would be nice! If possible try to keep a generic 'core' that can be ported to other platforms... that's what I'm doing with the C code.