Routines |
Prev: 53080 | Up: Map | Next: 53273 |
Used by the routine at 52616.
|
||||
Materialization or disintegration routine - warlocks/demons materializing, or creatures disintegrating.
This routine determines the post-materialization/disintegration actions to take. This information is held in bits 5-7 of the creature properties byte (60238).
|
||||
53145 | LD A,(60240) | Graphic frame number/offset | ||
53148 | AND 7 | Only bits 0-2 (values 0-7) needed for the number of frames | ||
53150 | CP 7 | There are 6 animation frames in the materialization graphics (43079). Have we reached frame #7? | ||
53152 | JP NZ,53885 | If not, jump out of routine at this point | ||
Final materialization/disintegration frame has been reached.
|
||||
53155 | LD A,(60238) | Creature/room item properties byte | ||
53158 | LD C,A | Temp store in C register | ||
53159 | AND 7 | Filter out/resets bits 4-7 | ||
53161 | OR 5 | Set bits 0 (indicating creature is on-screen) and 2 (indicating creature will need to be erased before drawing) | ||
53163 | LD (60238),A | ...and re-store. | ||
This routine is running because bit 5, 6 or 7 of the item (creature) properties byte (60238) is set. This bit indicates what action to take after a creature materialization or disintegration animation.
|
||||
53166 | LD A,C | Retrieve item (creature) properties byte | ||
53167 | AND 128 | Bit 7 of properties byte set = trigger WARLOCK/DEMON APPEARANCE after materialization animation is complete | ||
53169 | JR NZ,53178 | |||
53171 | LD A,C | |||
53172 | AND 64 | Bit 6 of properties byte set = trigger warlock DISAPPEARANCE post-materialization animation (52873) - e.g. successful object trade | ||
53174 | JR NZ,53192 | |||
53176 | JR 53232 | (If not either of the above) - Bit 5 of properties byte set = trigger CREATURE REMOVAL post-disintegration animation | ||
Creature has just materialized - setup graphic for this creature:
|
||||
53178 | LD A,1 | Set graphic frame number/offset at 1 (first frame/no frame offset) | ||
53180 | LD (60240),A | |||
53183 | LD A,(60331) | Graphic number (offset for address pointers in table at 38851) | ||
53186 | CALL 57538 | Set up creature graphics | ||
53189 | JP 53885 | |||
Warlock has been successfully traded with - remove warlock and initialize object trade
|
||||
53192 | LD A,0 | Set creature type to 0 (nothing to setup/draw) | ||
53194 | LD (60227),A | |||
53197 | LD A,224 | Timer indicating how long before a warlock is likely to materialize in the current room | ||
53199 | LD (60340),A | The warlocks will still appear again after a successful trade, but it'll be some time | ||
Warlock has gone - either off-screen, or disappeared after being traded an object successfully:
|
||||
53202 | LD A,0 | |||
53204 | LD (60333),A | Set warlock 'aggression' (likelihood of firing a missile at Maroc) to 0 (as it's gone) | ||
53207 | LD A,(60342) | Count of creatures in current room | ||
53210 | DEC A | ...reduce by 1... | ||
53211 | LD (60342),A | ...and re-store. | ||
53214 | LD A,(60334) | Check if the warlock is carrying an object | ||
53217 | CP 0 | |||
53219 | JP Z,53885 | |||
53222 | LD (60230),A | ...If so, copy the item set number into the warlock's data set | ||
53225 | LD A,0 | |||
53227 | LD (60334),A | ...and set the held item data buffer byte to 0 | ||
53230 | JR 53273 | ...then skip over to the next routine | ||
Creature has been destroyed - remove from existence:
|
||||
53232 | LD A,0 | |||
53234 | LD (60227),A | Set creature type to 0 (no creature to deal with any more) | ||
53237 | LD HL,(60228) | Get address pointer to relevant creature/warlock data set at 27772 | ||
53240 | INC HL | |||
53241 | INC (HL) | Increment the second byte of the set. This byte holds the number of these creatures Maroc has destroyed | ||
53242 | LD A,(60342) | Reduce count of creatures in current room by 1 | ||
53245 | DEC A | |||
53246 | LD (60342),A | Get creature type | ||
53249 | LD A,(60230) | |||
53252 | CP 8 | |||
53254 | JP NC,53885 | If creature >=8, it's not a warlock so jump out of the routine here | ||
53257 | LD A,0 | Creature destroyed is a warlock. Set warlock 'aggression' (likelihood of firing a missile at Maroc) to 0, as the warlock is no more. | ||
53259 | LD (60333),A | |||
If a warlock is destroyed, it will drop the object it's carrying
|
||||
53262 | LD A,(60328) | Get object number carried by the warlock | ||
53265 | CP 0 | |||
53267 | LD (60230),A | ...Copy this value into the warlock's data buffer | ||
53270 | JP Z,53885 | If the warlock isn't carrying anything, can jump out at this point |
Prev: 53080 | Up: Map | Next: 53273 |