Jump to content
IGNORED

Armageddon Complex


jrok

Recommended Posts

EDT: This game has changed completely since I first started working on it, so I've ammended my first post accordingly.

 

"Armageddon Complex" is a sci-fi action-adventure set on a massive space station that has been taken over by a marauding band of alien terrorists. The aliens are trying to gain access to the station's "Inifinity Collider" - a doomsday device deployed by the Earth's governments as the ultimate peacekeeper. You are humanity's last hope. You must locate and activate the station's auto-destruct system and, if possible escape before the Complex explodes. Along the way, you may also accomplish additional objective that will increase your final ranking.

 

HUD:

At the bottom of the screen, the score area displays your current inventory and shield strength. You can hold up to three items in your inventory at a time, and can have a maximum of up to three shields.

 

CONTROLS (Adenturing Mode):

Left Joystick - Move hero in 8 directions

Left Fire Button - Activate a computer terminal or Aim/Use the active item in your inventory, as follows:

  • Laser Sword - While holding the button down, tap the Left Joystick left or right to slash in that direction.
  • Gun - Move the Left Joystick in one of 8 directions to aim the gun that way. Release the Fire Button to shoot.
  • Bomb - If you can find this, you can blow holes in interior walls.

RightJoystick - Tap left or right to change your active Inventory item.

 

CONTROLS (Puzzling Mode):

Left Joystick - Move move cursor in four directions

Left Fire Button - Press a colored button (or submit the code by selecting the Enter key at the bottom of the monitor.

 

ENEMIES & OBSTACLES (only two at the moment):

Killer Robot: Garden variety evil robot. They turn up randomly in rooms that you enter, and can be dispatched with a single shot or a swing of your sword.

Mutant X: This is a persistent character that will serve much of the function that the Dragons did in Adventure, relentlessly pursuing you around the complex. You can mangle him with a sword strike or a bullet, but after a few seconds he will re-constitute himself and continue hunting you down.

Computer Terminal: A security computer linked in to the Armageddon Complex security network. Can be used to disable Force Fields or trigger other events.

Force Field: A barrier which must be disabled by entering the proper code in a computer terminal.

 

Cheers,

Jarod.

 

Latest Version:

Armageddon_Complex_v2.bas.bin

Edited by jrok
Link to comment
Share on other sites

Looking nice so far. Can you make the guy walk faster? Speaking of needing as many variables as you can get, have you seen the following post about using one variable as two when you don't need to go over 15:

 

http://www.atariage.com/forums/index.php?s...t&p=1571406

 

Between that and bit operations, we can squeeze in a lot of variables.

Link to comment
Share on other sites

Looking nice so far. Can you make the guy walk faster?

Yeah that's a good point. I think 1 pixel is to slow, and 2 pixels is a little too fast. I think eventually I'll have to uses fractional speeds for everything here (which would be nice because then I could do friction too).

Speaking of needing as many variables as you can get, have you seen the following post about using one variable as two when you don't need to go over 15:

 

http://www.atariage.com/forums/index.php?s...t&p=1571406

 

Aha! No I missed that one somehow. It looks like a bit of reading, so I'll probably tuck into it tonight after work. Thanks very much for the tip... this would make my life much, much simpler!

 

What I'm also really in the market for is a good bB bankswitching tutorial... right now I'm cramming the entire game (sans title screen and sprite graphics) into a single bank. I'm working on slimming down the current demo code, but it it seems that even at its most optimized it's going to need about 3000 bytes to run, which doesn't leave much room for things like collisions, enemy behaviors, player inventory, etc. But of course, when I try to dump some functions into another bank, the program compiles into some insane Dada-esque nightmare. Do you know of any good bankswitch threads?

Link to comment
Share on other sites

Haven't had a chance to check it out yet, but the title alone is one of the cooler ones I've seen.

 

Thanks man! Yeah, I tried to go for a sort of double-meaning thing there. "Armageddon Complex" is the name of the station, but I think it would also work as the mental neurosis of the game's main villain, General Gog, who has a nasty habit of blowing up planets.

Link to comment
Share on other sites

Yeah that's a good point. I think 1 pixel is to slow, and 2 pixels is a little too fast. I think eventually I'll have to uses fractional speeds for everything here (which would be nice because then I could do friction too).

I tried fixed point variables (wasted an extra precious variable) in the latest Pac-Man-like program I was messing around with and then discovered that the following would do the same as the fixed point variables I was using:

 

  rem  *  3=fastest, pcount+2=medium speed, and pcount+1=slowest speed
 if joy0fire then pcount=3 : goto skippcount
 pcount=pcount+2
skippcount

 if pcount>2 then goto movep
movepdone

 

That saved a precious variable. (Since pcount never goes over 15, I could also turn it into two nybble variables and end up with an extra variable instead wasting two full variables doing the fixed point thing.) MausGames mentioned something not that many weeks ago that he simulated fixed point variables and what I did must be the same kind of thing he does.

 

 

What I'm also really in the market for is a good bB bankswitching tutorial... right now I'm cramming the entire game (sans title screen and sprite graphics) into a single bank. I'm working on slimming down the current demo code, but it it seems that even at its most optimized it's going to need about 3000 bytes to run, which doesn't leave much room for things like collisions, enemy behaviors, player inventory, etc. But of course, when I try to dump some functions into another bank, the program compiles into some insane Dada-esque nightmare. Do you know of any good bankswitch threads?

I haven't moved up to bank switching yet, so I haven't added any extra info to the bank switching section of my version of the bB page. The following post by SeaGtGruff seems to explain a lot about bankswitching:

 

http://www.atariage.com/forums/index.php?s...t&p=1456132

 

If that post helps you, please let me know which parts were helpful and I'll add the info to the bB pages since SeaGtGruff has said that I can use anything he posts.

Link to comment
Share on other sites

Just got a chance to check this out today. It's freakin great! That thing on the first stage looks like the Purple Tenticle (was it purple?) from the Maniac Mansion type games.

 

Thanks man! LOL, I think there was actually a green one AND a purple one.

Link to comment
Share on other sites

What are you doing to get three multicolored characters on the screen where one doesn't flicker at all and the other two don't seem to flicker that much? That seems like a useful thing to know how to do.

 

Well right now I'm just using the playercolors player1colors option in the standard kernel, and using 30hz flicker for player1 to draw the two enemies.

 

gameloop

fspeed = fspeed + 1
if fspeed=6 then gameFrame=gameFrame + 1 : fspeed=0
if gameFrame = 8 then gameFrame = 0

temp1 = fspeed & 1

updateHero
player0x=x :  player0y=y
gosub Hero

updateObs
gosub AssignObs

if temp1 then updateSprite2

updateSprite1
temp1 = gameFrame & 3
gosub Sprite1
goto DrawFrame

updateSprite2 
gosub Sprite2

DrawFrame
drawscreen

goto gameloop

 

So in the above, I set up a framerate (fspeed) that cycles at an interval of 6, and a flicker rate (gameFrame) that cycles at an interval of 8 and then use temp1 to determine whether the current loop is even or odd to update the approriate sprite.

 

In the "Hero", "Sprite1" and "Sprite2" subroutines, I do all of the marlarkey to update their x, y, collisions, etc, and also include some animation subroutines for each. For example

 

Hero
if...goto HeroStand
if...goto HeroKneel
if...goto HeroLoop

Sprite1
if...goto MutantLoop
if...goto TentacleLoop
if...goto OffScreen

 

Then I made all of my sprites right now have 8 frames of animation, whether the shape was actually "animating" or not.

 

HeroLoop
temp3 = gameFrame 
on temp3 goto Hero0 Hero1 Hero2 Hero3 Hero4 Hero5 Hero6 Hero7

MutantLoop
temp2 = gameFrame 
on temp2 goto Mutant0 Mutant1 Mutant2 Mutant3 Mutant4 Mutant5 Mutant6 Mutant7

TentacleLoop
temp2 = gameFrame 
on temp2 goto Tentacle0 Tentacle1 Tentacle2 Tentacle3 Tentacle4 Tentacle5 Tentacle6 Tentacle7

OffScreen
temp2 = gameFrame 
on temp2 goto OffScreen0 OffScreen0 OffScreen0 OffScreen0 OffScreen0 OffScreen0 OffScreen0 OffScreen0

 

There are probably be better, cleaner ways to do this, but I found this has worked pretty good for me so far. At first I experimented with the bB multisprite kernel for awhile, but it seemed a little limited for what I wanted to do both visually and in terms of gameplay (though I think it would be great for a fast and furious two-player game).

 

Eventually I'll be flickering player0 as well, and probably do away with player colors and flicker a multicolor player sprite and up to one multicolor enemy or item, then use player1 to flicker two monotone enemies/items. The good news is that right now when I have the phospor turned up at 70 or above in x26 or Stella, there's absolutely no flicker at all, which is pretty neat to look at.

Edited by jrok
Link to comment
Share on other sites

Jrok this is fantastic! The demo was more fun than many games. It reminds me of Xenophobe, except that your game is fun.

 

What else do you plan the hero to do in this game? If you gave up missiles for the multi-color graphics, you still will have a ball. And since you seem to do flickering really well, that gives you two balls.... :D

Link to comment
Share on other sites

Jrok this is fantastic! The demo was more fun than many games. It reminds me of Xenophobe, except that your game is fun.

 

What else do you plan the hero to do in this game? If you gave up missiles for the multi-color graphics, you still will have a ball. And since you seem to do flickering really well, that gives you two balls.... :D

 

Thanks Piggles!

 

I'm working hard at a new version of this. When I reviewed my code I realized I was doing some things in a pretty boneheaded way. In the next build everything will move much faster, and I've implented gravity and a jump function for the hero.

 

In total, I am trying to have a maximum of 6 objects per room (platforms, walls, doors or transporters) drawn out of my data array. Also some transporter pads will (hopefully) not just take him up and down, but also sideways and room-to-room. The problem I'm trying to solve right now was that in the original, I was serializing the playfield objects individually, instead of doing them on the fly with one function (that's also what was making everything update soooo sloooooowwww).

 

As soon as I get that solved, I'll probably add a shoot function for the hero (using the ball). At that point, I'll likely be all out of ROM in my main game bank, and will need to learn bank-switching to proceed with development.

 

By the end, I hope to have the hero do the following:

- Draw and holster his laser pistol (to switch between jumping and shooting)

- Select items from an inventory screen and use them (keys, shields, gadgets, etc)

- Tuck and roll to dodge things while on the move

- Interact with non-enemy sprites and background objects when he stands on their active x,y position.

- Die!

 

It's a lot to jam in, but I guess the whole thrust of my experiment is, once I get my map array working the way I want, to write a little level editor in some other language to see if I can make designing this sort of game simpler.

Link to comment
Share on other sites

There are probably be better, cleaner ways to do this, but I found this has worked pretty good for me so far. At first I experimented with the bB multisprite kernel for awhile, but it seemed a little limited for what I wanted to do both visually and in terms of gameplay (though I think it would be great for a fast and furious two-player game).

 

Eventually I'll be flickering player0 as well, and probably do away with player colors and flicker a multicolor player sprite and up to one multicolor enemy or item, then use player1 to flicker two monotone enemies/items. The good news is that right now when I have the phospor turned up at 70 or above in x26 or Stella, there's absolutely no flicker at all, which is pretty neat to look at.

Thanks. Before I saw the game you're working on, I tried to have more enemies on the screen using the standard kernel, but no matter what I tried, it flickered too much. I could stand the type of flicker that you're game has, though. It doesn't make me want to rip my eyeballs out. I'll do a test demo after I'm done with the new VbB page.

 

 

Thanks again.

Link to comment
Share on other sites

Thanks. Before I saw the game you're working on, I tried to have more enemies on the screen using the standard kernel, but no matter what I tried, it flickered too much. I could stand the type of flicker that you're game has, though. It doesn't make me want to rip my eyeballs out. I'll do a test demo after I'm done with the new VbB page.

 

Thanks again.

 

No problem. I plan on posting my BAS file for this as soon as I can get the next build done. As I was telling someone else it moves really slowly in the currently posted build because of the way I was testing collisions. It's much "peppier" with the way I'm doing things now, and a lot more flexible in terms of how the map data is structured. I also included gravity and a jump for the next build, so if I can get the map functions solid it might be the beginning of a halfway decent platform-game engine.

Link to comment
Share on other sites

Okay, I have a heavily revised build. I go into a bit more depth about the changes on my blog, but here's the basic rundown:

 

  • Flickering four sprites at 30hz (no visible flicker with phospor in Stella or x26)
  • Generalized room drawing function to build objects from the data set no matter what order they are written in (which is key for building my level editor, as well as saving tons of ROM)
  • Limited the max number of room objects to 5 (whilst fishing for extra variables, of course!
  • Included semi-natural gravity and a "Jump" function for joyfire0, thanks to more awesome help from the amazing Mr. SeaGtGruff.
  • Monsters now recognized floors and walls, turning around if they bump a wall or reach the edge of a platform.
  • I took the teleporters out of this build so I could focus more on streamling my map drawing and flickering 4 sprites.

 

I optimized my code extensively, and this build moves much, much faster/smoother than my original newbie effort. However, I only have 33 bytes left in my game bank and I maxed out all my supercharger variables on this build, so for the next build I will definitely have to use extensive bit operations and *some* sort of bankswitching.

 

EDT: Whoops, wrong BIN. New one attached.

Armageddon_Complex_flicker4.bas.bin

Edited by jrok
Link to comment
Share on other sites

That's a better speed. I don't feel like I'm stuck in molasses anymore. I noticed how your character flickers on the first screen, even when there is only that red bad guy on the screen, but if you go to the second screen and two bad guys are on the screen with you, your character doesn't flicker at all. I wonder why?

Link to comment
Share on other sites

Okay, I have a heavily revised build. I go into a bit more depth about the changes on my blog, but here's the basic rundown:

 

  • Flickering four sprites at 30hz (no visible flicker with phospor in Stella or x26)
  • Generalized room drawing function to build objects from the data set no matter what order they are written in (which is key for building my level editor, as well as saving tons of ROM)
  • Limited the max number of room objects to 5 (whilst fishing for extra variables, of course!
  • Included semi-natural gravity and a "Jump" function for joyfire0, thanks to more awesome help from the amazing Mr. SeaGtGruff.
  • Monsters now recognized floors and walls, turning around if they bump a wall or reach the edge of a platform.
  • I took the teleporters out of this build so I could focus more on streamling my map drawing and flickering 4 sprites.

 

I optimized my code extensively, and this build moves much, much faster/smoother than my original newbie effort. However, I only have 33 bytes left in my game bank and I maxed out all my supercharger variables on this build, so for the next build I will definitely have to use extensive bit operations and *some* sort of bankswitching.

 

EDT: Whoops, wrong BIN. New one attached.

 

I notice when I press down and left, I turn into the red bouncy thing. Is that a feature or a bug?

 

I still think this is more fun than Xenophobe.

Link to comment
Share on other sites

I notice when I press down and left, I turn into the red bouncy thing. Is that a feature or a bug?

 

I still think this is more fun than Xenophobe.

 

Heheh, yup that was a bug. Thanks, man, I think I squashed it now. I also added a few new things, including a Spaceship (for escaping the game, eventually). Check it out.

Armageddon_Complex_a0_8.bin

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