• Advertisement
  • entries
    104
  • comments
    101
  • views
    257776

A C64 Game - Step 79

Sign in to follow this  

1288 views

Almost a new feature: For the final level range the enemies spawn in waves. In this level, after beating the wolfmen two more waves of other enemies come in. And all without any more memory in the level data!

step79.png

The key is in the previously used SPAWN_SPOT_SPAWN_COUNT. We use the upper 4 bits to contain the wave the spawn spots is part of. This limits us to 15 enemies per spawn spot which we were never even close to.

We add a new counter named NUMBER_DELAYED_SPAWN_SPOTS_ALIVE. This contains the number of spawn spots that are currently not active (future waves). SPAWN_SPOT_LEVEL holds the wave number (in the upper for bits, that's why we add 16)

The ProcessSpawnSpots routine is enhanced thusly:

          lda NUMBER_ENEMIES_ALIVE
          ora NUMBER_SPAWN_SPOTS_ALIVE
          bne .NoDelayedSpawnSpots

          lda NUMBER_DELAYED_SPAWN_SPOTS_ALIVE
          beq .NoDelayedSpawnSpots

          ;undelay them now
          lda SPAWN_SPOT_LEVEL
          clc
          adc #16
          sta SPAWN_SPOT_LEVEL

          ;check all spots
          ldx #0
-
          lda SPAWN_SPOT_ACTIVE,x
          beq +

          lda SPAWN_SPOT_SPAWN_COUNT,x
          and #$f0
          cmp SPAWN_SPOT_LEVEL
          bne +

          ;undelay now
          lda SPAWN_SPOT_SPAWN_COUNT,x
          and #$0f
          sta SPAWN_SPOT_SPAWN_COUNT,x

          dec NUMBER_DELAYED_SPAWN_SPOTS_ALIVE
          inc NUMBER_SPAWN_SPOTS_ALIVE

+
          inx
          cpx #SPAWN_SPOT_COUNT
          bne -
.NoDelayedSpawnSpots


Obviously in the spawn spot update loop we need to skip any spawn spots where the upper four bits are set:

          lda SPAWN_SPOT_SPAWN_COUNT,x
          and #$f0
          bne .NextSpawnSpot


Also, during level buildup we need to increment the correct counter depending on the upper four bits again:

          ;count
          iny
          lda (ZEROPAGE_POINTER_1),y
          sta SPAWN_SPOT_SPAWN_COUNT,x

          ;upper 4 bits set? then it's a delayed spawn spot!
          and #$f0
          bne +
          inc NUMBER_SPAWN_SPOTS_ALIVE
          jmp ++
          
+
          inc NUMBER_DELAYED_SPAWN_SPOTS_ALIVE
++


Have fun surviving!

step79.zip

Previous Step Next Step

 
Sign in to follow this  


0 Comments


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Advertisement