+Propane13 Posted November 7, 2009 Share Posted November 7, 2009 So, while scrounging on my old Tower computer, I found some files that may be of interest to the community. I was doing some 7800 programming back in the day. I'd like to share my journey from 2001 to 2003. First, we have the "Hello World" demo. Honestly, I think this was someone else's code, just my verification that I can compile it. Maybe I added a word in it or something, but it's pretty lame. No credit for me on this one. 20010525_hello_world.a78 Next, we have a color demo. At the time, remember, emulator support was very, very low (MESS, which did not run well on my slow computer), and there were no cuttle carts. So, I did EPROM burning tests a lot. So, I made a "color cart" as a permanent addition to my cartridges. Here it is: 20010804_color01.a78 After that, I decided it was time to make a game. I wanted to write a zelda-like game. Here it is: 20020623_zelda.a78 It was during this stage that "Mister Purple Pants" was born. I liked the demo, but I ran out of graphics space. My general thought was that I wanted to see the limit of overlapping sprites. Apparently, it hit me too fast before I could do other interesting things, so I had to abandon that kernel in favor of another one. So, this brings me to one of my more favorite demos. 20020721_falling_demo.a78 I thought I needed to learn about graphics compression techniques. So, I did. I learned how Mega Man did its graphics, as well as Metroid. I put "Mister Purple Pants" in a one-room world where there was constant gravity. He can jump from item to item, so this is just a demo, but it seemed to be going in the right direction. But, it was then that I wanted to try another project. I was thinking "What is the one game that the 7800 doesn't have that it really should?" The answer was Frogger. 20030101_frogger_nosound.a78 Writing this frogger demo got me excited (it could have gone somewhere), bit I also got really, really bored after writing this one screen. I thought it was a great demo, but I had so many things to worry about at this stage. Do I be arcade-perfect? If so, will that bore me, or would I rather do my own game? How will I deal with all of the collision detection? These questions haunted me for some time, and I decided to abandon the work done so far, and go back to Mister Purple Pants. And, here is Mister Purple Pants in his last appearance. 20030728_purplepants.a78 This is what I ideally would have turned into a Mega Man style game. Scrolling is complete, and there's a few screens worth of world defined. I was quite happy with it. But, then, real life got in the way. There wasn't a lot of knowledge or tools for the 7800 back then, so I typically found myself striving to get one demo done at a time. And, with this final demo, I gave up. Now, it's neat to see that the community has gotten through some of the major issues that were headaches for me back in the day. I was really, really secretive about these in the past. I really wanted to drum up excitement about releasing a 7800 game, since none were created for a very long time. But, now that I look at it, these things are probably better shared with everyone. Maybe they'll be of interest. Best regards, -John Quote Link to comment Share on other sites More sharing options...
+Mitch Posted November 7, 2009 Share Posted November 7, 2009 I remember testing a few of those demos for you. Mitch Quote Link to comment Share on other sites More sharing options...
gambler172 Posted November 7, 2009 Share Posted November 7, 2009 Hi John Thanks for sharing. greetings Walter Quote Link to comment Share on other sites More sharing options...
DracIsBack Posted November 7, 2009 Share Posted November 7, 2009 Neat! Are there Cuttle Cart versions that can run on a real 7800? Quote Link to comment Share on other sites More sharing options...
+Propane13 Posted November 7, 2009 Author Share Posted November 7, 2009 Neat! Are there Cuttle Cart versions that can run on a real 7800? If anyone wants to make them, feel free. I'm not quite sure how to do that. -John Quote Link to comment Share on other sites More sharing options...
Mord Posted November 8, 2009 Share Posted November 8, 2009 Woops. Reflex! Quote Link to comment Share on other sites More sharing options...
+Propane13 Posted November 8, 2009 Author Share Posted November 8, 2009 Woops. Reflex! Mord, that just made my day. -John Quote Link to comment Share on other sites More sharing options...
GroovyBee Posted November 9, 2009 Share Posted November 9, 2009 I just ran them through my header stripping utility. Not tested them, but here they are :- 20010525_hello_world.bin 20010804_color01.bin 20020623_zelda.bin 20020721_falling_demo.bin 20030101_frogger_nosound.bin 20030728_purplepants.bin Quote Link to comment Share on other sites More sharing options...
+Propane13 Posted November 10, 2009 Author Share Posted November 10, 2009 Out of my own curiosity, I looked into the source code from the last demo a little bit. It seems that the graphic generation / mapping code tables were really easy to tweak. The internal logic though, is crazy. I can wrap my head around a little bit of it, but most of it is foreign to me. Anyway, I added 5 screens more of length, just for fun. 20091102_scrolldemo.a78 Obviously, it's not that exciting. But, it kind of makes me remember just how dynamic this engine could be. Oh, yeah, and apparently late in 2003 I changed the main sprite. The last compiling version had "this new guy" in it. I think this was an early rendition of Steam Tunnel Bob, the sprite I tried using in a 2600 homebrew project that was put on hold when I worked on Mean Santa (2600). If I can figure it out, maybe I'll see about making the main sprite animate and change direction. If I can't, well... hey, at least I was able to share some stuff of interest, which was the main goal. -John Quote Link to comment Share on other sites More sharing options...
+Propane13 Posted November 13, 2009 Author Share Posted November 13, 2009 Here's a new version, where I animate the main sprite. 20091113_animation.a78 Here is the sprite table (obviously, some states have redundancy): Seemed like a fun, short exercise to do. -John Quote Link to comment Share on other sites More sharing options...
Mord Posted November 14, 2009 Share Posted November 14, 2009 Speaking of fun, short exercises... Quote Link to comment Share on other sites More sharing options...
DracIsBack Posted November 14, 2009 Share Posted November 14, 2009 Finally was able to get these up and running on an emulator. MacMess fails on some of them but ProSystem on Windows played them all. Thanks for sharing John. I got goosebumps playing your Mega-Man and Zelda experiments. Perhaps U and Groovy Bee should collaborate! 1 Quote Link to comment Share on other sites More sharing options...
+Propane13 Posted November 19, 2009 Author Share Posted November 19, 2009 (edited) New version today. Honestly speaking, I'm actually surprised that I'm working on this project. The code to this project is 6 years old and cryptic. And, I recall that my last update to this program 6 years ago involved a very late night crawl through code to get collision detection working. All I remembered when I started looking at the code again was that it was a rough night with a great sense of accomplishment. Though that was indeed true, I'm now realizing that I must have been drinking or something that night-- the code is definitely functional, but it's uncommented, structurally poor, and has Spanish comments (and, I can't really explain that part). But all of that amusement aside, I figure-- I very much would like to do something with this code. It's solid code that I think could be pretty useful stuff. The current plan is just to add a few little features here and there, and maybe end up with something that has some gameplay value. That would be nice. This version introduces the "spike" element familiar in Mega Man games. Touch a spike, and you die. I only have the player have one life, so touch a spike, and blammo-- game over. Once this happens you can either 1) hit reset or 2) hit select which will restore your one life back. However, if you use select, note that you may have to use it a few times while you remove yourself from the spike. Here is is: 20091118_spikesadded.a78 Comments always appreciated-- though it may not appear like much has changed, these are huge code overhauls. Thanks! -John Edited November 19, 2009 by Propane13 Quote Link to comment Share on other sites More sharing options...
gambler172 Posted November 19, 2009 Share Posted November 19, 2009 Hi John Would be great,if you can finish one of your projects..... The demos are really great. greetings Walter Quote Link to comment Share on other sites More sharing options...
+Propane13 Posted November 21, 2009 Author Share Posted November 21, 2009 We now have ladder support, with a new 2-frame character animation for ladder climbing. In addition, I've added support for holes that kill you. And, the player can jump off the top of the screen without weird things happening (dying or getting stuck on invisible walls). Also, the number of screens to scroll visibly has a set limit. In this version, there are 12 screens total. So, when you get to the "final" screen , it'll stop scrolling so that you know you have to go up the ladder to continue. At the moment, the down-ladder at the beginning of the level and the up-ladder at the end are climbable, but they don't get you to another screen, although in the future, they could/would. I've doubled the main character's speed, since the level's changed a little-- it's the only way to make it fair, and I think it's fun just to change things up. Oh, if you die in a hole, hitting select really isn't of much use, since you can't get out of the pit once you're in. If you fall in a hole, you'll need to hit reset for now. Have fun! 20091121_ladders.a78 Quote Link to comment Share on other sites More sharing options...
Mord Posted November 21, 2009 Share Posted November 21, 2009 We now have ladder support, with a new 2-frame character animation for ladder climbing. Ladder support was going to be one of my next suggestions. Would it be possible to make the code a little more forgiving in where you have to be to climb up/down on a ladder? Meaning if you're at the top of the ladder but not standing perfectly above it, it would still let you jump onto the ladder by correcting your position a little for you. For instance, standing where I am in this picture, I would expect the code to let me still jump onto the ladder by pressing down. Right now it demands I move just a liiiiittle bit more. Also, the number of screens to scroll visibly has a set limit. In this version, there are 12 screens total. I suspect I have an idea of how you pull that off in the code, based on a few calculations I did when pondering scrolling engines for the 7800 a few months back. What size are you using for DLLs? 8 or 16 lines? I'm sure I could guess by looking at the screenshots, but I'm too tired right now to go counting pixels, and I still need to find me an image that shows all the possible colors on the 7800. Quote Link to comment Share on other sites More sharing options...
+Propane13 Posted November 21, 2009 Author Share Posted November 21, 2009 We now have ladder support, with a new 2-frame character animation for ladder climbing. Ladder support was going to be one of my next suggestions. Would it be possible to make the code a little more forgiving in where you have to be to climb up/down on a ladder? Meaning if you're at the top of the ladder but not standing perfectly above it, it would still let you jump onto the ladder by correcting your position a little for you. For instance, standing where I am in this picture, I would expect the code to let me still jump onto the ladder by pressing down. Right now it demands I move just a liiiiittle bit more. Sure; I think I can manage something like this. I had a similar dilemma in Steam Tunnel Bob. One way to program it is to allow the user to just stand there nearby and press up/down, and it'll move the user and grab the ladder. Another solution is to allow for diagonal pushes (so, based on your screenshot, if you press down and right together, you grab the ladder. That's the solution currently implemented. Perhaps I need some combo of both, for the best user experience? I think I need to play a few old-school NES games that had a good feel for these things, and maybe I can share my findings. I think Mega Man allowed the "nearby" as well as diagonal, but I think Goonies 2 was just a strict diagonal grab. I'll go see, and report back. I'm definitely up for opinions of what works better (I'm thinking the combo of both is best). Also, the number of screens to scroll visibly has a set limit. In this version, there are 12 screens total. I suspect I have an idea of how you pull that off in the code, based on a few calculations I did when pondering scrolling engines for the 7800 a few months back. What size are you using for DLLs? 8 or 16 lines? I'm sure I could guess by looking at the screenshots, but I'm too tired right now to go counting pixels, and I still need to find me an image that shows all the possible colors on the 7800. I have 12 16-line DLL's, which make for 192 scanlines. For the image, is this what you're looking for? Surprisingly I found this yesterday: http://www.atariage.com/forums/topic/143720-7800-ntsc-colour-bitmap/ -John Quote Link to comment Share on other sites More sharing options...
Mord Posted November 21, 2009 Share Posted November 21, 2009 One way to program it is to allow the user to just stand there nearby and press up/down, and it'll move the user and grab the ladder. Another solution is to allow for diagonal pushes (so, based on your screenshot, if you press down and right together, you grab the ladder. That's the solution currently implemented. Perhaps I need some combo of both, for the best user experience? I think I need to play a few old-school NES games that had a good feel for these things, and maybe I can share my findings. I think Mega Man allowed the "nearby" as well as diagonal, but I think Goonies 2 was just a strict diagonal grab. I'll go see, and report back. I'm definitely up for opinions of what works better (I'm thinking the combo of both is best). Checking out Megaman 1 just then, it looks like the code probably keeps track of where the center of the sprite is with respect to the display. If the middle of the sprite is inside a ladder sprite, it'll do the auto-move and let you start climbing it. With that kind of checking, odds are diagonal checking might be wasted time since even going diagonal, you'll still eventually trigger the other method once you're close enough. Being able to just press down when close enough avoids the need to be going diagonal - and running the risk of overstepping it and dropping off an edge instead! You could try to implement both methods at the same time to see how it works, then try removing the diagonal to see there's a noticable difference. If not then you can just stick with the down-adjustment method and free up some cycles. I have 12 16-line DLL's, which make for 192 scanlines. For the image, is this what you're looking for? Surprisingly I found this yesterday: http://www.atariage.com/forums/topic/143720-7800-ntsc-colour-bitmap/ That's exactly what I was looking for. Quote Link to comment Share on other sites More sharing options...
+Mitch Posted November 21, 2009 Share Posted November 21, 2009 For the image, is this what you're looking for? Surprisingly I found this yesterday: http://www.atariage.com/forums/topic/143720-7800-ntsc-colour-bitmap/ That's exactly what I was looking for. And here are some really old and not very good screen captures of basically the same thing. http://www.atari7800.org/screenshots/Colorscreen.htm Mitch Quote Link to comment Share on other sites More sharing options...
+Propane13 Posted November 23, 2009 Author Share Posted November 23, 2009 (edited) Mord's suggested ladder improvement has been made. Of note-- the way the engine is implemented, you cannot jump and grab a ladder. BUT, you can "fall" and grab a ladder. What this means is-- if you're holding down the button, and pass a ladder, you won't grab onto it. Let go of the button, and hey! You grab the ladder just fine. This may seem weird, but it's because I'm experimenting with some design elements. Here's the 2 games I'm looking at for reference. MegaMan = you can jump and grab ladders Goonies 2 = you cannot jump and grab ladders (note that in Castlevania, you can't jump onto staircases). I'm not sure which method I like better, so I created a combo for now (plus it masks a hard bug to fix) . Preferences/suggestions? I think something like this *could* work, and may promote interesting level design. 20091123_ladders2.a78 -John Edited November 23, 2009 by Propane13 Quote Link to comment Share on other sites More sharing options...
DracIsBack Posted November 23, 2009 Share Posted November 23, 2009 Mord's suggested ladder improvement has been made. Of note-- the way the engine is implemented, you cannot jump and grab a ladder. BUT, you can "fall" and grab a ladder. What this means is-- if you're holding down the button, and pass a ladder, you won't grab onto it. Let go of the button, and hey! You grab the ladder just fine. This may seem weird, but it's because I'm experimenting with some design elements. Here's the 2 games I'm looking at for reference. MegaMan = you can jump and grab ladders Goonies 2 = you cannot jump and grab ladders (note that in Castlevania, you can't jump onto staircases). I'm not sure which method I like better, so I created a combo for now (plus it masks a hard bug to fix) . Preferences/suggestions? I think something like this *could* work, and may promote interesting level design. 20091123_ladders2.a78 -John Awesome! Are you able to run these at .a78 and .bin files? MacMess doesn't like the files, but I think my Cuttle Cart might. Quote Link to comment Share on other sites More sharing options...
GroovyBee Posted November 23, 2009 Share Posted November 23, 2009 Awesome! Are you able to run these at .a78 and .bin files? MacMess doesn't like the files, but I think my Cuttle Cart might. Its not been signed. Quote Link to comment Share on other sites More sharing options...
+Propane13 Posted November 23, 2009 Author Share Posted November 23, 2009 Awesome! Are you able to run these at .a78 and .bin files? MacMess doesn't like the files, but I think my Cuttle Cart might. Its not been signed. Holy crap! I guess that's what I get for using a 6-year old makefile system. Thanks for pointing that out. Here's a bin and an a78 file that are fixed. 20091123_ladders3.a78 20091123_ladders3.bin I'd definitely be interested to hear if this works on real hardware. Best regards! -John Quote Link to comment Share on other sites More sharing options...
DracIsBack Posted November 24, 2009 Share Posted November 24, 2009 (edited) I'd definitely be interested to hear if this works on real hardware. Best regards! -John I was able to get it running on the CC2 with no problems using 7800QUICK and the 32K banking. It runs quite smoothly. Also tried out your Zelda engine, which was a rush! Like most 7800 games, I like to look of it better on real hardware vs. the emulator. Great work Edited November 24, 2009 by DracIsBack 1 Quote Link to comment Share on other sites More sharing options...
DracIsBack Posted December 3, 2009 Share Posted December 3, 2009 I'd definitely be interested to hear if this works on real hardware. Best regards! -John A few more pictures using real hardware. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.