Jump to content
IGNORED

Mega Italian Twins (2600 W.I.P.)


jrok

Recommended Posts

I've decided to take a stab at a Super-Mario port. I'm not a big fan of using unlicensed stuff in games. I can appreciate all points of view on this, but part of the fun of programming a game for me has always been trying to come up with unique mechanics, rather than trying to simulate other games.

 

SMB is a really interesting and tempting challenge, though. The core mechanics were devious, simple, fun and addictive. So my goal here is not going to try to model the actual world maps, but rather to see how much of the core gameplay and "feel" I can mimic on the 2600.

 

Here's what I will try to squeeze in:

 

- A smoothly scrolling gameworld

- A time limit

- Solid jump-and-run mechanics

- Coin-collecting

- Platform interactivity (i.e. bumping platforms for bonuses/ tripping enemies, etc)

- Super Growth Mushroom (add brick-breaking power)

- Fire Flower (add fireball power)

- Flagpole level bonus

- Four Enemy types

- Multiple Levels/Worlds

 

I've attached a small demo of world movement, jump/run mechanics. This is still a rough draft, but so far it feels a little bit like SMB to me. The player sprite has limited bi-directional movement (like Mario). The world scrolls in from the right when he reaches his bounding box at mid-screen, but leftward movement is sprite-based and limited to left edge of the screen. I think my next steps will be to generalize the platform logic a bit so I can begin to build platforms of different lengths and compositions. Screenshots and current BIN below.

 

post-21152-1250192137_thumb.pngpost-21152-1250192181_thumb.pngpost-21152-1250192188_thumb.png

 

MIS.bas.bin

MIS.bas.zip

 

Latest version (16k + Superchip):

MIT6.bas.bin

MIT6.bas.zip

Edited by jrok
Link to comment
Share on other sites

This is fantastic!

 

Thanks!

 

After a while of going right, though, it began to emit a strange, high pitched tone (like AUDF0 or AUDF1 was at 0) In-game music would probably solve that problem.

 

Weird. I have no audio at the moment, so I can't troubleshoot. The strange thing is, I don't remember setting any audio channels at all, so I'm not sure how this woudl be possible.

 

Keep going with this, although I do wonder whatever happened to Charge!

 

Actually, programming this is helping me with Charge. I've been having a few issues with getting my groups of enemy soldiers to clear smoothly at both screen edges, so I'm sort of hoping that a fresh perpective on the problem might lead to one of those "Eureka" moments.

 

Cheers,

Jarod.

Link to comment
Share on other sites

This is fantastic! After a while of going right, though, it began to emit a strange, high pitched tone (like AUDF0 or AUDF1 was at 0) In-game music would probably solve that problem. Keep going with this, although I do wonder whatever happened to Charge!

 

Okay, you were right! The problem was that I cannibalized a lot of the Charge code for this, and I had a few sound triggers that were pointed at altered operations. I just zero'd all channels for now (fixed BIN is in OP).

 

Thanks,

Jarod.

Edited by jrok
Link to comment
Share on other sites

*Update*

 

Okay, I think I've got a good, somewhat elegant tile-drawing system in place. The platforms now vary in size from 1 tile to 6 tiles. Basically, I've reserved 6 bits each to draw a top-tier tile and a mid-tier tile. New platform sizes are pulled out of a pair of tables as the previous ones are cleared left. The bounds for each tile are drawn by multiplying the size indicated in the table by 8.

 

The good thing about this system is that it makes level generation a breeze. It's fairly tight right now, although it could do with a little more tightening at edge clearance. I think the next step will be to draw intermediate platforms to help with designing jumping puzzles. I'm considering flickering P0 to accomplish this. I've disabled the "mystery tiles" in this build while I make some decisions about how they should be accessed in memory. With a little work, I think I can make a pretty straightforward method of defining the look and function of individual tiles in a platform (like "The Magic Mushroom), and even define things like moving platforms on the fly. If I can generalize and document this engine well enough, I think it might even be a neat platforming template to release to the bB community someday.

 

Cheers,

Jarod.

 

EDT: I fixed a bug that prevented you from leaping on the top platforms.

 

MIS2.bas.bin

MIS2.bas.zip

Edited by jrok
Link to comment
Share on other sites

*Update*

 

Here's a version that includes a "flex" tier for the platforms. Of course, its not very "flexible" right now :), since it just sits halfway between the top and middle tiers (or halfway between the bottom and middle tiers). I'm using the multisprite P1 to draw all the platforms right now, so the vertical sprite layout for platforms is:

 

P4(Clouds)

--

P1(Top Tier)

---

P3(Flex Tier)

---

P2(Bottom Tier)

---

P3(Flex Tier)

---

GROUND

 

Even the above seems a little restrictive for my taste, though, so I'm considering alternatives. Right now I'm using P0 to draw the unrestricted player's sprite, but I'm leaning towards either using an alternate frame of P0 and the missiles to draw the limited flex platform (three tiles max), or maybe even using the missiles to draw the player's sprite so I can have an unrestricted flex platform that could be *anywhere* (i.e. not just in one of two possible Y positions). What would be interesting about either of these solutions is that I could use the free-moving P0 platforms to make interesting kinds of platforms, like elevators that float up and down.

 

Also, considering all the fixed-point math going on here, I'm seriously considering switching to the Super Chip. It would make life a whole lot easier :lol:

 

EDT: Implemented upper and lower flex platforms

EDT: Re-enabled Mystery tiles

MIS4.bas.bin

Edited by jrok
Link to comment
Share on other sites

*Update*

 

I've upgraded the program to use the SARA chip RAM. It works fine in Z26, automatically detecting the bankswitching routine and the SC RAM. But for some reason the program will not load in my copy of Stella 2.6.1, whether I set it to auto-detect the cartridge or manually set the cartridge to F6SC. I've noticed a few other "quirks" with my personal version of Stella, so I'm curious whether this is a real bug or just a problem with my setup. If anyone downloads this version and tests it in Stella, could you let me know if you can reproduce this bug?

 

Otherwise, the main change I've made is that the level now "ends." Once you've reach the extent of the world data, the world stops moving and player sprite can run rightwards past its bounding box. If the player reaches the right end of the screen, the game reboots. Not a huge change but its an important part of the gameplay. I've also reorganized the memory to map all non-fixed-point variables to SARA addresses, so I can write some fixed point enemies and powerups to populate the world. I've left my standard "Running Guy" sprite in place for now, although at some point I will redesign the sprite to be more "Mario-esque." I'm still working on a way to incorporate the music, so hopefully that will be in the next build, along with a few enemies.

 

Cheers,

Jarod.

 

MIS5.bas.bin

MIS5.bas.zip

Edited by jrok
Link to comment
Share on other sites

I've upgraded the program to use the SARA chip RAM. It works fine in Z26, automatically detecting the bankswitching routine and the SC RAM. But for some reason the program will not load in my copy of Stella 2.6.1, whether I set it to auto-detect the cartridge or manually set the cartridge to F6SC. I've noticed a few other "quirks" with my personal version of Stella, so I'm curious whether this is a real bug or just a problem with my setup. If anyone downloads this version and tests it in Stella, could you let me know if you can reproduce this bug?

This ROM doesn't seem to work in the latest released version of Stella (2.8.4), or in the internal test builds (3.0alpha2). And it doesn't work for me on a KrokCart either, so I'm inclined to think that the ROM has a problem, and z26 is 'incorrectly' showing it as working.

 

Also, you should probably upgrade to Stella 2.8.4, as version 2.6.1 is quite old. As for what's going on, I can't really say. Perhaps you're mistakenly reading from write port addresses, which will actually erase whatever is stored in that location.

 

EDIT: Correction, it seems you're starting in bank 0, but the instructions I see in the PC in the debugger don't correspond to the disassembly. As for why that's happening, I don't know.

Edited by stephena
Link to comment
Share on other sites

This ROM doesn't seem to work in the latest released version of Stella (2.8.4), or in the internal test builds (3.0alpha2). And it doesn't work for me on a KrokCart either, so I'm inclined to think that the ROM has a problem, and z26 is 'incorrectly' showing it as working.

 

Also, you should probably upgrade to Stella 2.8.4, as version 2.6.1 is quite old. As for what's going on, I can't really say. Perhaps you're mistakenly reading from write port addresses, which will actually erase whatever is stored in that location.

 

EDIT: Correction, it seems you're starting in bank 0, but the instructions I see in the PC in the debugger don't correspond to the disassembly. As for why that's happening, I don't know.

 

Thanks for the report. I suspect that it has to do with the order of the modules I am including, but I'm not sure.

Link to comment
Share on other sites

It just displays a frozen screen on my Stella

 

Yes, it is a confirmed bug with the superchip version (MIS5.bas.bin). That version works in Z26, but this seems to have something to do with an emulation error in Z26 that allows the program to run correctly.

 

I'm reviewing my code, but I can rule out something as simple as reading from write port addresses (or vice versa). I've been very careful about using the read and write addresses. I'm almost positive that the problem is either somehow related to bankswitching routine itself, or with the way I am using the vertical blank. As soon as I sort it out, I'll post a fixed version and describe the fix as best I can.

Edited by jrok
Link to comment
Share on other sites

*Update*

 

Okay, I believe I've sorted out the issue with the superchip version. I've tested the below in Stella 2.8 and it runs fine.

 

After reorganizing my vblank and rechecking every read/write on my superchip variables, it turned out that the solution was quite simple, although I couldn't find the issue documented anywhere so I'm not sure what the proper explanation would be. Apparently, in addition to the other listed restrictions on SARA address usage, you cannot use a SARA read variable for an "on" statement. I have suspicions about why this is, but it would be great if someone could explain exactly why this is the case.

 

Here's the fixed binary:

MIT6.bas.bin

MIT6.bas.zip

 

Now I just have to figure out a good way to use all this RAM :ponder:

 

Cheers,

Jarod.

Edited by jrok
Link to comment
Share on other sites

This looks wonderful so far, but IMO there are a few things missing: Holes and enemies.

 

Oh crap, I forgot! :lol:

 

Yes adding both those are are the next step. Funny you should mention it, since as I am typing this, I'm working on the "holes" part. Basically, I'm turning those bottom tier platforms into gaps. It's just a matter of inverting a couple of ops; before, if you were within the bounds of the lower platform it would stop your movement. In the build I'm working on now, your movement is only stopped if you are outside those same bounds. The visual trick here will be to try to make a somewhat solid "hole" from available sprite flickers and/or other objects.

 

Do you plan on adding Goombas to the game? Also, there should be a flag to jump on at the end.

 

Goombas and Koopa Troopas are going in for sure. I'm also going to try to work in the Venus Flytrap monster and Bob-Bomb... (mainly because I like saying "Bob-Bomb" :))

 

The flag at the end is going in for sure, as soon as I can decide on a nice object implementation for it.

 

Cheers,

Jarod.

Link to comment
Share on other sites

Nice to hear. Will there be different types of levels, like a cave level (like 1-2 in SMB), a swimming level (like 2-2), etc.? If this is going to be on a cart, I would definitely buy this.

 

It would be interesting to to see how many of these elements are workable. in the original you had Overworld, Underworld, Swimming and Castle levels, but it seems to me that the core engine didn't really change for the most part. Only the swimming portions were different, and even those weren't that different. I'm fairly confident I can throw some of that variety into the mix. I think most difficulty will be in things like the rotating fire windwmills in the castles. The most important thing for me right now is to get the platforming rock-solid and the world generation flexible and easy on the backend. Then I can figure out what else can be fit in.

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...