Jump to content
  • entries
    73
  • comments
    133
  • views
    82,991

Ooze Lives!

Sign in to follow this  
Guest

294 views

But I'm just hammered right now. This is a quickie post for those following the game. It will get finished and it won't be too long before it does. So, read on for a little news and some brief thoughts I wanted to record today for consideration in the near future... or not! --> Go play some Atari!On a personal note, I've been an application engineer in the MCAD industry for the last 8 years or so. Really love the products, challenges and sys-admin that goes with the whole package. (Why won't anybody besides PTC port to Linux dammit?)Anyway, the company I used to work for went under (not my fault!) and I ended up going solo for the last year or so. Hardest year of my life to date. Keeping the fam fed, while juggling billing & other messy small business issues has not been easy for me. Ooze was a very welcome distraction during one of the few quiet times. Can't wait to get back to it. (And I will very soon!)Anyway, the old sales manager has revived the company name to the point where it makes sense to do this dance again. Who knows? Perhaps I'll have another great 8 years! Either way, this is gonna free up some valuable time, some of which will go into completing Ooze.I've just re-read the stuff I wrote earlier. Thank you, thank you Kirk for advocating the development logs! I would have completely lost the spirit of this little game had I not heeded your advice and started entries about Ooze and it's development here. Code comments (and I do comment the hell out of my code) are just not enough. ---thanks again!I'm gonna stick with Bb 0.3x. The space issues are a bit worrysome, but I've some new options that should balance out.This next pass is gonna nail the gameplay, clean up little bugs and apply polish toward actually considering the "get it on a dang cart" process. I guess maybe two or three iterations, plus a final tweak or two.When I started this project, I really wanted to stay within the Bb environment and take it all the way to a cart (if possible for me and Bb). Looks like both are clearly possible. Kernel stuff is very interesting, but I'm gonna let it pass until this is finished. I think Bb could use a coupla cart ready games to build Interest. Hoping Ooze will end up being one of those.Ramblings..... (Non Ooze related stuff for the future past!)After that, I'm eyeing supercats new cart with great Interest.Getting Bb onto that cart is going to really make some interesting development possible. The increased RAM and overall address space could carve an interesting niche for Bb where it really does not have one now. Clearly this is future stuff, but I didn't want to forget it.The games written to date in assembly are simply wonderful pieces of work, but they took a long time. After reading a few logs and some Stella digests, I realize the Kernel is perhaps one of the biggest time sinks to really get right. Time will be an issue for me, that means either getting good at assembly again (which might happen on it's own), or leveraging Bb somehow to put the time where it can really count --and that's probably on kernels.In many respects it *is* the game. (The kernel that is.) That's the difference between the 2600 and every thing else. That kind of makes the 7800 less attractive right now as well because it just does not work this way --nothing else does. I'm all about the classic Atari look and feel, but always had a hard time defining it. My shallow entry into things on the 2600 have solved that problem.That classic look and feel means the machines that contain video chips built by Jay Miner, not anyone else. Sorry 7800, maybe some other time. Really what I want to do is mix the two. Bb for lots of interaction, game content, etc... Assembly for varied and interesting kernels for use in the same game, taking advantage of the address space on the new cart. Multi-screen games, perhaps ones that tell stories or that have visual content that actually depends on the player action early on... All of that stuff is unexplored territory, IMHO. The added ram is going to bring yet another round of interesting and distinct visuals to the 2600 too. Can't wait for that. It's just the coolest thing about the machine, IMHO.The above is just some musings that might spark something creative in the future.. take your grain of salt right now --thank you.

Sign in to follow this  


4 Comments


Recommended Comments

In my (limitted) experience 2600 kernels don't have to be time sinks. IIRC for Skeleton I spent a bunch of time trying to figure out how to convert the maze to something a 2600 kernel could display. Then there was some time getting the actual kernel working, i.e. figuring out the timing constraints. Later, I spent time doing some space optimization and squeezing in additional features.

 

For Leprechaun, again I had to spend some time figuring out how to store the level & player data in RAM/ROM so the kernel could efficiently use it. That then leads to actually creating the kernel. Again, I might try to add some optimizations or features, but this one is fairly tight already.

 

But in both cases the kernel is less than half of the story. Coding the rest of the gameplay code for Leprechaun is taking easily several times what the kernel did.

 

Now, for some games kernel related coding may take more time, especially if you are continually adding more features, changing the kernel data structures or optimizing. But I still don't think it's going to take 50% of the time.

 

Now the 7800 doesn't have a display kernel like the 2600, the MARIA GPU handles that part. (Well, there are uses for a psuedo kernel, like reading paddles, but they aren't as complex as a 2600 kernel.) But instead, you have a display list creation kernel, which takes the game data structures and creates the display lists which the MARIA GPU parses into the actual display. But this 7800 kernel doesn't have the timing constraints that a 2600 kernel lives & dies by. No chasing the raster here. So, again, most of the coding time is spent on gameplay logic.

Share this comment


Link to comment

I'll agree with Eric and say that the kernel is probably the trickiest (and most fun!) part of a 2600 game to write, but it usually isn't the biggest time sink. The biggest time sink is all the game logic and other parts.

Share this comment


Link to comment
I'll agree with Eric and say that the kernel is probably the trickiest (and most fun!) part of a 2600 game to write, but it usually isn't the biggest time sink.  The biggest time sink is all the game logic and other parts.

 

Thanks guys!

 

I was kind of thinking outloud --didn't expect an answer really. Glad you both commented. Later when I re-read this stuff, it's going to spark some ideas. In that vein, I find your perspective valuable. It puts options on the table now, that would not have otherwise been discussed. Thanks again!

Share this comment


Link to comment
I'll agree with Eric and say that the kernel is probably the trickiest (and most fun!) part of a 2600 game to write, but it usually isn't the biggest time sink.  The biggest time sink is all the game logic and other parts.

 

Kernels can be hard or easy, quick or slow to write, and rewarding or not, probably in just about any combination. :sad: Along with the kernel, some games require a "pre-kernel" which runs each frame and prepares data for the kernel to use. Something like Ms. Pacman, for example, probably uses a pre-kernel to determine which sprites are in which zones and how they should flicker.

 

The real challenge for a 2600 game is often not just designing a kernel that works, but designing a kernel whose data structures can be manipulated with acceptable speed by the game itself. Interestingly, this is where I got tripped up in the first 2600 game I started to write (since abandoned, but I may pick it up sometime). The game was to be an implementation of Columns (similar to Salu's Acid Drop, but better) in which there is a 6x20 grid that fills up with gems. The gems come in six different colors, and getting three or more gems in a row vertically, horizontally, will cause them to disappear; any gems over them will then fall down, possibly triggering further reactions.

 

The kernel itself looks pretty good, especially for a first attempt (the scan line count is way off, because I had no facility for measuring it--this was years before any emulators were on the market). The gems appear with nice color shading and the kernel supports sixteen colors of gems which may be solid or shaded. The plan was to use solid black for non-gems, six colors for gems, and then have "brighter" versions of those colors for exploding gems, and make the remaining three colors show shades of grey, used to further animate the exploding gems. All that's implemented and works great.

 

The problem is that the data is stored sorta goofy. The upper-left gem's color is stored in bits 0, 2, 4, and 6 of address $C0. The gem to its right is stored in bits 1, 3, 5, and 7 of that byte. The next gem is in bits 0, 2, 4, and 6 of address $D4 [i.e. twenty bytes after the first one]. Then bits 1, 3, 5, and 7 of that byte. Then $E8 [bits 0, 2, 4, and 6; then 1, 3, 5, and 7]. The next row starts at $C1, etc.

 

Not the worst way to store things, perhaps, but I was unable to figure any good and fast way to do the checks for adjacent dots being the same color. Perhaps I should revisit that, because I've learned a few tricks since then.

Share this comment


Link to comment
Guest
Add a comment...

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