Jump to content
IGNORED

A silly little project


mzxrules

Recommended Posts

A short story:

 

A few years back I was browsing r/speedrun when I stumbled on the Dragster drama. Someone looked at the assembly of Dragster and created a sim in an attempt to figure out if a certain someone's world record time was actually achievable. Having done quite a bit reverse engineering of Ocarina of Time, and dabbled for a day or so reversing The Legend of Zelda for the NES to figure out the heart container glitch, I figured I'd might try my own hand at it despite never having played an Atari game in my life before. Though I never got too far into understanding the code, I was amazed at how you can print the entire game on only a few pages of paper, and finally understood how it was possible to do animated sprites with so little ram.

 

Fast forward to this year. I'd just replayed The Legend of Zelda on the switch (both quests of course), and I got it in my head that I wanted to make an Atari 2600 port. 

 

So here's how far I've gotten: 

 

The game is written in 6502 assembly. To create the sprites I use a GCS program called MegaZeux, which has a pretty nice built-in 1 bit sprite editor. I also coded my world editor in MegaZeux, using it's "robotic" language. "Robotic" can be fairly esoteric at times, but it's the first programming language I ever learned and it was the easiest thing I could think of to use without rolling my own rendering code. I also use Python 3 for data manipulation purposes. For example, in order to save rom space I use a superstring algorithm to pack the sprite data for the text kernel tighter. Additionally, the music sequence data is completely generated by Python, so that I could write music using proper notes instead of numbers.

 

I can't say for sure that I will continue working on it, as I hit a bit of a wall and decided to switch gears to a different thing I'm working on. But I don't think I'll stop working on it for good just yet.

Edited by mzxrules
  • Like 23
Link to comment
Share on other sites

  • 3 weeks later...
  • 3 weeks later...

Progress has been a bit slow. Been just doing minor refactoring and tweaked my world kernel so that ball sprites can be drawn on grid:

 

 

I've also been trying to implement different enemies. I've got two more enemy types mostly implemented: Wallmasters and Like Likes (both rather annoying to deal with). I've also got Octoroks walking around, but haven't implemented their attack yet. I've also implemented dying: 

One thing that's kind of got me struggling is figuring out how best code enemies to maximize code reusability, while also being able to tweak minor stuff like health/enemy color.

  • Like 6
Link to comment
Share on other sites

  • 1 month later...

Still plugging away at this. It took me way too long to figure out how to add in random item drops, but once I had a plan, coding it wasn't too bad. One thing I haven't figured out is why the audio seems to cut out randomly.

 

 

Edited by mzxrules
  • Like 11
Link to comment
Share on other sites

  • 1 year later...

impressive! my favourite game of all time being ported to 2600, can't wait to play it

 

but the enemies look even tougher than NES version, even you keep losing your hearts regularly in the above video. Consider making it N*ntendo hard, not frustratingly hard :)

Link to comment
Share on other sites

Looks great!  As a relative noob to the 2600 homebrew scene who just came in this year, finding a 2600 equivalent of the original Zelda has been an informal goal of mine.  It looks and sounds great!  Are you using the stock hardware or some of the additional cart based add ons to get this all to work (besides bank switching of course which I'd expect regardless)?   I love that you've got sword and shooting mechanics built in; are you using the missile or ball to accomplish that and how much wiggle room do you have in terms of CPU cycles to do it?   The bomb wall explosions/entrances and moveable blocks are a great (and unexpected surprise!) addition as well; are all walls explodable if they don't have a doorway or will you be overlaying a sprite for a cracked wall in the future to indicate which ones are?

Edited by LatchKeyKid
Link to comment
Share on other sites

5 hours ago, mika said:

impressive! my favourite game of all time being ported to 2600, can't wait to play it

 

but the enemies look even tougher than NES version, even you keep losing your hearts regularly in the above video. Consider making it N*ntendo hard, not frustratingly hard :)

Enemy combat is a space that is still very much a work in progress and I've probably been avoiding doing real work on it for too long. There is a bit of work that needs to be done in a few systems to get rid of some cheap hits, and perhaps it might be a little too hard to position yourself to safely attack enemies since knockback isn't implemented. 

2 hours ago, LatchKeyKid said:

Looks great!  As a relative noob to the 2600 homebrew scene who just came in this year, finding a 2600 equivalent of the original Zelda has been an informal goal of mine.  It looks and sounds great!  Are you using the stock hardware or some of the additional cart based add ons to get this all to work (besides bank switching of course which I'd expect regardless)?   I love that you've got sword and shooting mechanics built in; are you using the missile or ball to accomplish that and how much wiggle room do you have in terms of CPU cycles to do it?   The bomb wall explosions/entrances and moveable blocks are a great (and unexpected surprise!) addition as well; are all walls explodable if they don't have a doorway or will you be overlaying a sprite for a cracked wall in the future to indicate which ones are?

I'd argue I'm still a noob as well, as I started with 2600 homebrew only last year.

 

Development has moved to an 3E+ cart, so the only extra gizmo is ram; everything else should be stock hardware aside from the controller since atm you need a second button to pause the game. Sword/Bombs/Arrows/Flute all use the player missile sprite, while the ball is reserved for push blocks and other planned elements due to the fact that the ball shares the same color as the playfield. The world kernel is stored in the cart's ram so that sprite heights can be rewritten, which saves a few cycles over loading the data from a zeropage variable. 

 

Walls that are bombable just look like regular walls. Atm I don't intend to add cracked wall sprites to match the original game, partially because the rom bank that handles that is near max capacity.

  • Like 1
Link to comment
Share on other sites

2 hours ago, mzxrules said:

Development has moved to an 3E+ cart, so the only extra gizmo is ram; everything else should be stock hardware aside from the controller since atm you need a second button to pause the game. Sword/Bombs/Arrows/Flute all use the player missile sprite, while the ball is reserved for push blocks and other planned elements due to the fact that the ball shares the same color as the playfield. The world kernel is stored in the cart's ram so that sprite heights can be rewritten, which saves a few cycles over loading the data from a zeropage variable. 

 

Walls that are bombable just look like regular walls. Atm I don't intend to add cracked wall sprites to match the original game, partially because the rom bank that handles that is near max capacity.

 

Thanks!  Great work regardless.  If you don't mind a programming noob asking potentially stupid questions, what do you mean by world kernel?   The screen world you're playing on or the minimap world above the play area?  Also, are you using both missiles or just one?  If only one, what is the other being used for?  I'm fascinated with what folks like yourself can squeeze out of the 2600 in terms of technical capability and fun as I'm not knowledgeable or creative enough myself.

Edited by LatchKeyKid
Link to comment
Share on other sites

  • 4 months later...

I must not be smart enough or be missing some files. I downloaded what he has on his GitHub because his videos says Public Binary 3. I download DASM and followed instructions but it tells me it's missing files and cannot compile (in a nice way). Was going to compile and upload here so we could play with it. Anyone else want to attempt and see what I'm overlooking?

 

https://github.com/mzxrules/za2600

 

  • Like 4
Link to comment
Share on other sites

7 hours ago, Prizrak said:

I must not be smart enough or be missing some files. I downloaded what he has on his GitHub because his videos says Public Binary 3. I download DASM and followed instructions but it tells me it's missing files and cannot compile (in a nice way). Was going to compile and upload here so we could play with it. Anyone else want to attempt and see what I'm overlooking?

 

https://github.com/mzxrules/za2600

 

There is a Makefile in the repro, so it looks like you need to Install "make" in your system too

  • Like 1
Link to comment
Share on other sites

9 hours ago, Prizrak said:

I must not be smart enough or be missing some files. I downloaded what he has on his GitHub because his videos says Public Binary 3. I download DASM and followed instructions but it tells me it's missing files and cannot compile (in a nice way). Was going to compile and upload here so we could play with it. Anyone else want to attempt and see what I'm overlooking?

 

https://github.com/mzxrules/za2600

 

 

1 hour ago, Al_Nafuur said:

There is a Makefile in the repro, so it looks like you need to Install "make" in your system too

There are also some Python Scripts that generate asm files, so you need Python too. A few folders are missing for the build process (/gen and /gen/world). I am away from my main PC, so I currently install the missing tools on my traveling laptop to build.

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...