DUKE NUKEM I
For TI-89, TI-92+, Voyage 200
Malcolm Smith

For more info and a discussion on this project, see this topic on the TICT Forums.

To help me out, fill out this short survey about your in-game preferences.
Note - I've decided that many of the things this survey asked (HUD preference, etc) will be more user-customizable, based on config file settings.

CURRENT VERSION (not finished) (current) (11/5/06)

11/5/06:
SIZE: ~34387 bytes
I haven't touched this in a (apparently very) long time, so I can't really say that it's likely that I'll finish it. If anyone's interested in downloading the current binaries, see the link above. Also, if you're interested in having the complete source code, contact me by email.

8/2/04:
SIZE: ~32953 bytes
- Been a while since an update, but I'm still planning on finishing it ;-) Hopefully before school starts on the 30th...
- Fixed the mirrored mercury floors (there was a bug)
- Ingame menu started (options/ highscores not implemented yet) - but ingame help and the story are (scrolling text)
- Guncar and snake techbots are added. I was really proud I could get the snake one to work ;-)
           

3/28/04:
SIZE: 28050 bytes
- Yep, more work on it ;-)
- Implemented conveyor belts.
- Looked at the PC sound format; made a converter to change to PolySnd format. So now the oncalc game will even have all of the original sounds!

12/27/03:
SIZE: 27573 bytes (I hope I'm under the 64k limit once everything is implemented)
- More in-game work.
- Simple techbots, hovering techbots, and crawling techbots implemented.
- Game stats and a simple HUD at the bottom implemented
- Elevator, BG game pieces (windows, etc), and reactor implemented
- Cola/ turkey/ bonus items work as expected (give points and health)
- More special FX for those implemented things (crystals, etc)
- Enemies take away health
- Oh, and Duke flips randomly now ;-)
           

12/24/03:
- Thanks to JimRandomH, I've implemented a way to only worry about a subset of all the sprites each frame.
- The mercury/ mirror floor tiles are now implemented. It looks pretty cool :-)
- Made enumerations for all of the anim and object sprites. Basically, this tells me what index in the gfx file corresponds to what sprite.
- I'm slowly implementing all the game features. Duke's gun can fire, but the gun pickups don't work yet, so his gun always fires very fast. The shots are now visible and are stopped by walls, and 'shootable' sprites though.
- A good number of the item sprites are added, except for the points Duke gets when he picks them up.
For example: now, Duke can see a black box, shoot it to find a joystick inside, and pick up the joystick.
   

12/13/03:
- I went through the levels, correcting a few problems from the original. In the original Duke I, gray solid tiles and gray background tiles were used interchangeably sometimes when the tiles couldn't be reached directly. However, in my high-contrast version, these tiles are different colors (light gray/ white), so I had to correct all these places in the levels.
- I added an Apogee splash screen, and placed "Ported by Malcolm Smith" where the episode screen used to mention Apogee. The Apogee splash even has the Apogee fanfare music... brings back a lot of memories, at least for me :-)
- I also added 7 in-game (monophonic) music titles into the game. Music is stored in an external, compressed file (only about 6k compressed). Eventually, I would also like to add sound effects to the game.
- Of course, the most time-consuming part of this project will be implementing enemy logic. All of the active sprites have an array of pointers to four functions; Init(ialize), Draw, Run (execute), and Kill. I think this structure will make it the easiest to add new types.  For instance, here is one function:

SPRITEFUNC(runItemsFall)
short x = (s->x)>>4;
short y = (s->y+16)>>4;
if(!isSolid(m->data[y*MAPWIDTH+x])) s->y += JUMPSTART;
else s->y &= ~15; //Reset to a multiple of 16
ENDSPRITEFUNC

11/29/03:
- Original game's title screen implemented, which lets the user choose the episode (instead of having 3 separate executables like the original)
- Map Engine with Changing Backdrops. Only one backdrop can be shown onscreen at a time, unlike the original. This means the backdrop can suddenly switch, but it shouldn't be a problem.
- Duke (partial, no shooting or backflips)
- Beginning of object implementation - only a static sprite is shown, no interaction (picking up for points, etc)
- No enemies yet, but their graphics have now been converted.
- Sprite system. The sprite system uses linked lists, and an array of SpriteFunc structures for every active sprite type. The SpriteFunc structure stores 4 pointers: each to a function (Init, Run, Draw, and Kill). Most pointers point to a dummy function right now, but this system is very easy to customize for all of the sprites.
                     

 

10/26/03:
- Basic Map Engine
- No Duke
- No items
- No Enemies
- BTW, the contrast for the tiles was accidentally inverted.