Routines |
Prev: 55068 | Up: Map | Next: 55188 |
|
||||||||
The previous routine has decided to generate a creature in the tunnel.
First check that there aren't already too many creatures (3). If not, generate one (50/50 chance of SPIDER/BAT):
|
||||||||
55088 | LD A,(60573) | Number of creatures currently on-screen in the tunnel | ||||||
55091 | INC A | Increase by 1 | ||||||
55092 | CP 3 | There's a limit of 3 creatures on-screen | ||||||
55094 | JR NC,55188 | If adding this creature would make it 4, skip the routine. | ||||||
It's OK to generate a creature:
|
||||||||
55096 | LD (60573),A | It's < 3 creatures. Store the creature count byte | ||||||
55099 | LD A,14 | Item type #14 designates a tunnel object - boundary wall, bat or spider (creatures are later differentiated from walls using the byte at stored 60230) | ||||||
55101 | LD (60227),A | |||||||
55104 | LD A,1 | Starting frame offset (no offset) | ||||||
55106 | LD (60240),A | |||||||
Randomize starting position of creature in relation to tunnel wall:
|
||||||||
55109 | LD A,C | Retrieve random number generated earlier | ||||||
55110 | AND 15 | Keep bits 0-4 (values = 0-15) | ||||||
55112 | SUB 7 | Subtract 7 (value range now between -7 and +8) | ||||||
55114 | LD B,A | Store in B register | ||||||
55115 | LD A,(60574) | Get tunnel horizontal position | ||||||
55118 | ADD A,B | Add the random offset calculated earlier (-7 to +8) | ||||||
55119 | LD (60232),A | Store as graphic's horizontal position (in half character/4-pixel steps) | ||||||
55122 | LD B,A | Put in B register | ||||||
Determine whether the creature will be a SPIDER or a BAT:
|
||||||||
55123 | LD A,C | Retrieve random number | ||||||
55124 | AND 1 | Check bit 1 for 0 or 1 (50/50) - to run one of the next two sections. | ||||||
55126 | JR Z,55145 | |||||||
Generate a SPIDER
|
||||||||
55128 | LD A,4 | Creature type = 4 | ||||||
55130 | LD (60230),A | |||||||
55133 | LD A,(60574) | Horizontal tunnel wall position (half-character/4-pixel steps) | ||||||
55136 | SUB B | Subtract the graphic's horizontal position calculated earlier | ||||||
55137 | ADD A,A | ...Double it... | ||||||
55138 | LD (60236),A | ...and store as position (movement) offset | ||||||
55141 | LD A,125 | Graphic number for spider graphic address at 39099 | ||||||
55143 | JR 55165 | |||||||
Generate a BAT
|
||||||||
55145 | LD A,8 | Creature type = 8 | ||||||
55147 | LD (60230),A | |||||||
55150 | LD A,C | Retrieve random number generated earlier | ||||||
55151 | AND 127 | Filter out bit 7, giving a random number in the range of 0-127 | ||||||
55153 | SUB 63 | ...And subtract 63, giving a random number in the range of -63 to +64 | ||||||
55155 | LD (60236),A | Store as horizontal position (movement) speed/offset | ||||||
55158 | LD A,36 | Set vertical position (movement) speed/offset (36 pixels). This will cause the bat to start by moving quickly down the screen. | ||||||
55160 | LD (60237),A | |||||||
55163 | LD A,127 | Graphic number for bat graphic address at 39103 | ||||||
Set up creature graphic
|
||||||||
55165 | LD C,A | Temporarily store the graphic number in C register | ||||||
55166 | LD A,254 | Tunnel item identifier (boundary wall, bat or spider) - ends up in byte 9 of data set at 31744 | ||||||
55168 | LD (60235),A | |||||||
55171 | LD A,8 | Set vertical position (8 pixels from top of screen) | ||||||
55173 | LD (60234),A | |||||||
55176 | LD A,C | Retrieve graphic number | ||||||
55177 | CALL 57538 | Set up the graphics | ||||||
55180 | CALL 57520 | ...and copy into room data set at 31744 | ||||||
55183 | LD (HL),255 | Set end-of-data marker at start of next data set | ||||||
55185 | LD (60274),HL | ...And store the address pointer to it. |
Prev: 55068 | Up: Map | Next: 55188 |