Jump to content
  • entries
    39
  • comments
    0
  • views
    820

About this blog

Behind the scenes of "Oh Shoot!" 

Entries in this blog

Screen Tool

Now lets get into how these screens are created!   Let's focus on one subbank or one screen set of 64 screens.   Step 1.  draw 64 screens.   I only had to draw half of each screen of course since the end result is mirrored on the Atari.  There are restrictions of course so I can't just draw whatever I want.  Here's the restrictions: -every screen is composed of chunks... every chunk must be stored in the chunk palette but can be reused many times -reusing chunk

Screen Compression

I want to go into more detail on my screen encoding (done in a C# app) and loading (done in the game).  Today I'll discuss screen loading.   This image is half of the 32KB ROM.  This is 4 banks of data containing the 1024 screens in the game and the loading code is duplicated in each bank.   Each bank is divided into 4 subbanks.  The loading code is in the first subbank cutting into the available screen data a bit.   An individual subbank holds 64 screen

Where are the Explosions?

Ya know... as important as the title screen is in a game... I think in this game the explosions were far more important since you see them ALL the time.  That's why I made so many versions until I finally made something I was happy with.   Hard to believe I actually thought this looked great at one time.   This one is bigger!  Had to cut a few frames though.  This is the only explosion where I had a special case to do integer scaling in the kernel giving me a larger exp

Piledriver

Piledriver in Art

Title Screen

I want to talk about my title screen next!   I had a code sample that draws a large object using the 6 character kernel.  I did some brainstorming on how I could use this in my title screen.  I came up with having large detailed (and animated!) versions of the ships menacing each other.   Here's the concept drawing vs the end result.   I developed the title screen as a standalone "tech demo" using a full 4KB!  Half the title screen bank is the graphics!  Most

More Banks

Most of my favorite 2600 games were 4KB - Adventure, Pitfall!, Space Invaders, Frostbite, and Frogger to name a few.  So in my mind a 4KB game is a "standard" 2600 game and that's what I wanted to make and I did.  I thought my final 4KB game was pretty good - I was able to get 64 screens into the game!  I read up on bank switching in my Steven Hugg 2600 programming book.  I had to try it out.  I was always curious how bank switching worked.  I'm glad I did because I could do WAY more with the ex

Main Kernel

Lets talk about the kernel (screen drawing code).  In this image you can see the relative size of the kernel code (yellow) compared to the total ROM.  This is the code that draws the score and the play area.   Although this is only a sliver of code... this is the only code that's executing 72% of the time during gameplay (according to my calculations).   Oh Shoot uses a 2 line kernel.  That means it takes the game 2 lines to update all the graphical elements of the game

Ram Screen Into RAM

For my compressed screens to work I needed to store an uncompressed copy of a screen in RAM.  I made an image showing the relative sizes of total RAM, available RAM, and how much RAM I needed to store the screen.   This was when I learned about Atari memory management and making every bit count.

Sketchy Start

Check out the very first sketches of Oh Shoot going back about 3 years now!  Back then I was only planning to make a simple "Combat ripoff".   Just for fun I cartoonified the original sketch.

Piledriver

Piledriver in Design

Sound

Early in this project I was interested in sound.  I didn't have a clue how things worked in Atari land and decided to make a feature rich sound engine.  The sound engine could load and play sounds in either channel (basic stuff), but I also allowed the sound frequency to in crease or decrease over time... I also allowed the volume of the sound to increase or decrease over time.  I even made "compound" sounds which would play back a list of sounds.  I think I was using 12 bytes of ram per sound c

ROM Visualizer

When developing Oh Shoot I got frustrated with running out of space all the time.  I created a "ROM visualizer" to keep tabs on how much space all my chunks of code and graphics were taking up visually.  I wrote some scripts to assemble every single code backup I made (I made a LOT of backups since it's easy to screw things up and introduce weird bugs that can be hard to track down).  I made another script to create a ROM visualization of each WIP ROM.  Then I made an animated gif out of it!  Th

Screen Compression Evolution

I got a bunch of questions about how I made 1024 screens for Oh Shoot!  I hope this answers those questions.   There were several iterations to my level storage solutions.   1.  Naïve level storage -store PF0, PF1, and PF2 for each of the 22 rows of a screen (66 bytes per screen - no compression) -screen drawn directly from ROM -I think this only allowed me 4 screens in my 4KB game?  Don't remember.   2.  Run length encoding -used 4 unused bits in PF0 to sto

"Oh Shoot!" Overview

Here's some basic info about my 2600 game "Oh Shoot!": -32K F4 bank switched 1v1 "Combat Killer!" -uses stock 2600 hardware - no extra RAM or arm processor -1, 2, or 0 player modes -multiple flight modes and speed options -4 ship types -1024 screens -flashy title screen -large flashy animated explosions -full screen scrolling, warping, and rumble effects -fully couch compliant with match tapout -user friendly game select screen -AI controlled players and "AI assistance" f

Development Overview

My first console was a Coleco Gemini!  I thought it was better than an Atari... not sure if that's true but it was really good!  I had a trading network so I could try lots of games without having to shell out a ton of cash.  My head is still full of memories of whose house I saw which games for the first time.  I was always very curious about how these games were made.  Over the years I heard strange things about the 2600 in magazines like it only had 128 bytes of RAM, 4KB games, ~1Mhz processo
×
×
  • Create New...