| alien | Routines |
| Prev: 35578 | Up: Map | Next: 36457 |
|
Used by the routine at 36457.
|
||||
| 35973 | PUSH IX | |||
| 35975 | XOR A | |||
| 35976 | LD (33700),A | |||
| 35979 | LD IX,29566 | |||
| 35983 | LD B,8 | |||
| 35985 | PUSH BC | |||
| 35986 | LD A,(IX+0) | |||
| 35989 | AND A | |||
| 35990 | JR Z,35999 | |||
| 35992 | DEC A | |||
| 35993 | LD (IX+0),A | |||
| 35996 | CALL 45232 | |||
| 35999 | LD DE,8 | |||
| 36002 | ADD IX,DE | |||
| 36004 | LD HL,33700 | |||
| 36007 | INC (HL) | |||
| 36008 | POP BC | |||
| 36009 | DJNZ 35985 | |||
| 36011 | POP IX | |||
| 36013 | RET | |||
|
DispatchCrewAction Dispatches one crew/alien actor through 33876 (CrewActionDispatch) based on (IX+3). Action 0 returns early. Otherwise jumps to the per-action handler via JP (HL). Used by the per-frame status panel update at 44880.
|
||||
| 36014 | CALL 36579 | preliminary actor update | ||
| 36017 | AND A | A = current action state from caller | ||
| 36018 | RET Z | action 0: nothing more to do | ||
| 36019 | LD E,(IX+3) | E = action state (1..7) | ||
| 36022 | LD D,0 | |||
| 36024 | LD HL,33876 | HL = CrewActionDispatch base | ||
| 36027 | ADD HL,DE | HL += action*2 (16-bit-pointer stride) | ||
| 36028 | ADD HL,DE | |||
| 36029 | LD A,(HL) | HL = *(table + action*2) | ||
| 36030 | INC HL | |||
| 36031 | LD H,(HL) | |||
| 36032 | LD L,A | |||
| 36033 | JP (HL) | tail-call into action handler | ||
|
CrewAction1_Idle — dispatched via CrewActionDispatch entry 1. This entry point is used by the routine at 37490.
|
||||
| 36034 | LD A,(IX+2) | |||
| 36037 | CP (IX+1) | |||
| 36040 | RET Z | |||
| 36041 | LD (IX+1),A | |||
| 36044 | BIT 6,A | |||
| 36046 | JR NZ,36053 | |||
| 36048 | LD A,1 | |||
| 36050 | LD (33699),A | |||
| 36053 | CALL 36187 | |||
| 36056 | LD A,(IX+1) | |||
| 36059 | LD E,2 | |||
| 36061 | AND A | |||
| 36062 | JR Z,36070 | |||
| 36064 | CP 1 | |||
| 36066 | JR NZ,36081 | |||
| 36068 | LD E,4 | |||
| 36070 | LD A,E | |||
| 36071 | LD HL,31253 | |||
| 36074 | AND (HL) | |||
| 36075 | JR Z,36081 | |||
| 36077 | LD (IX+1),13 | |||
| 36081 | LD A,(31252) | |||
| 36084 | CP 1 | |||
| 36086 | RET NZ | |||
| 36087 | LD A,(33700) | |||
| 36090 | LD HL,31241 | |||
| 36093 | CP (HL) | |||
| 36094 | JP Z,32719 | |||
| 36097 | CALL 45338 | |||
| 36100 | RET | |||
|
CrewAction2_Move — dispatched via CrewActionDispatch entry 2.
|
||||
| 36101 | LD E,(IX+1) | |||
| 36104 | LD A,(IX+5) | |||
| 36107 | BIT 6,E | |||
| 36109 | JR NZ,36113 | |||
| 36111 | DEC A | |||
| 36112 | DEC A | |||
| 36113 | INC A | |||
| 36114 | CP 127 | |||
| 36116 | JR C,36119 | |||
| 36118 | XOR A | |||
| 36119 | LD (IX+5),A | |||
| 36122 | LD A,E | |||
| 36123 | XOR 64 | |||
| 36125 | LD (IX+1),A | |||
| 36128 | CALL 36187 | |||
| 36131 | LD A,(31252) | |||
| 36134 | CP 1 | |||
| 36136 | RET NZ | |||
| 36137 | LD A,(33700) | |||
| 36140 | LD HL,31241 | |||
| 36143 | CP (HL) | |||
| 36144 | JP Z,32719 | |||
| 36147 | JP 45338 | |||
|
This entry point is used by the routine at 36457. CrewAction3_RemoveGrille — dispatched via CrewActionDispatch entry 3. Fires when a crew member's timed "RmveGrille" job completes (queued by the AI at $90EE or by the action-menu Special handler at $8BD3): clears the actor's room's byte in RoomGrilleState (30076), queues a sound effect, and rebuilds the room view if that room is on screen.
|
||||
| 36150 | LD A,1 | queue a sound effect for PlayMusic | ||
| 36152 | LD (33705),A | |||
| 36155 | LD A,(IX+1) | E = actor's current room | ||
| 36158 | AND 63 | (mask off the in-ducts flag, bit 6) | ||
| 36160 | LD HL,30076 | |||
| 36163 | LD E,A | |||
| 36164 | LD D,0 | |||
| 36166 | ADD HL,DE | |||
| 36167 | LD (HL),0 | RoomGrilleState[room] = 0: grille removed | ||
| 36169 | LD A,(31252) | room mode 1 (normal room view)? | ||
| 36172 | CP 1 | |||
| 36174 | RET NZ | |||
| 36175 | LD A,(31242) | is the actor's room the one on screen? | ||
| 36178 | AND 63 | |||
| 36180 | CP E | |||
| 36181 | JP Z,32719 | yes: full room-view rebuild | ||
| 36184 | JP 36793 | |||
| 36187 | LD HL,65535 | |||
| 36190 | LD (31250),HL | |||
| 36193 | LD HL,29575 | |||
| 36196 | LD C,1 | |||
| 36198 | LD A,(33700) | |||
| 36201 | AND A | |||
| 36202 | RET Z | |||
| 36203 | EX AF,AF' | |||
| 36204 | LD DE,31250 | |||
| 36207 | LD A,(IX+1) | |||
| 36210 | LD B,7 | |||
| 36212 | CP (HL) | |||
| 36213 | JR NZ,36224 | |||
| 36215 | EX AF,AF' | |||
| 36216 | CP C | |||
| 36217 | JR Z,36223 | |||
| 36219 | EX DE,HL | |||
| 36220 | LD (HL),C | |||
| 36221 | EX DE,HL | |||
| 36222 | INC DE | |||
| 36223 | EX AF,AF' | |||
| 36224 | PUSH DE | |||
| 36225 | LD DE,8 | |||
| 36228 | ADD HL,DE | |||
| 36229 | POP DE | |||
| 36230 | INC C | |||
| 36231 | DJNZ 36212 | |||
| 36233 | PUSH IX | |||
| 36235 | LD A,(33700) | |||
| 36238 | LD (33695),A | |||
| 36241 | LD HL,(31250) | |||
| 36244 | LD (33696),HL | |||
| 36247 | CALL 36283 | |||
| 36250 | LD HL,(33696) | |||
| 36253 | LD A,(33695) | |||
| 36256 | LD (33697),A | |||
| 36259 | LD (33695),HL | |||
| 36262 | CALL 36283 | |||
| 36265 | LD HL,(33696) | |||
| 36268 | LD A,(33695) | |||
| 36271 | LD (33697),A | |||
| 36274 | LD (33695),HL | |||
| 36277 | CALL 36283 | |||
| 36280 | POP IX | |||
| 36282 | RET | |||
| 36283 | XOR A | |||
| 36284 | LD (33698),A | |||
| 36287 | LD A,(33695) | |||
| 36290 | CP 255 | |||
| 36292 | RET Z | |||
| 36293 | LD B,A | |||
| 36294 | LD IX,29566 | |||
| 36298 | LD DE,8 | |||
| 36301 | ADD IX,DE | |||
| 36303 | DJNZ 36301 | |||
| 36305 | XOR A | |||
| 36306 | CP (IX+7) | |||
| 36309 | RET NZ | |||
| 36310 | PUSH IX | |||
| 36312 | LD B,2 | |||
| 36314 | LD DE,33696 | |||
| 36317 | PUSH BC | |||
| 36318 | PUSH DE | |||
| 36319 | LD A,(DE) | |||
| 36320 | CP 255 | |||
| 36322 | JR Z,36385 | |||
| 36324 | LD IX,29566 | |||
| 36328 | LD DE,8 | |||
| 36331 | ADD IX,DE | |||
| 36333 | DEC A | |||
| 36334 | JR NZ,36331 | |||
| 36336 | CP (IX+7) | |||
| 36339 | JR Z,36372 | |||
| 36341 | INC A | |||
| 36342 | CP (IX+7) | |||
| 36345 | JR NZ,36366 | |||
| 36347 | CALL 36428 | |||
| 36350 | POP DE | |||
| 36351 | PUSH DE | |||
| 36352 | LD A,(DE) | |||
| 36353 | LD H,A | |||
| 36354 | LD A,(33695) | |||
| 36357 | LD L,A | L = the discovering crew slot | ||
| 36358 | LD A,20 | msg #20 "{actor} finds {target}'s body" | ||
| 36360 | CALL 37176 | |||
| 36363 | INC (IX+7) | |||
| 36366 | LD HL,33698 | |||
| 36369 | DEC (HL) | |||
| 36370 | JR 36385 | |||
| 36372 | LD A,(IX+5) | |||
| 36375 | SUB 2 | |||
| 36377 | LD E,A | |||
| 36378 | LD A,(33698) | |||
| 36381 | ADD A,E | |||
| 36382 | LD (33698),A | |||
| 36385 | POP DE | |||
| 36386 | INC DE | |||
| 36387 | POP BC | |||
| 36388 | DJNZ 36317 | |||
| 36390 | POP IX | |||
| 36392 | LD B,3 | |||
| 36394 | LD HL,33692 | |||
| 36397 | LD A,(IX+1) | |||
| 36400 | CP (HL) | |||
| 36401 | JR Z,36408 | |||
| 36403 | INC HL | |||
| 36404 | DJNZ 36400 | |||
| 36406 | JR 36412 | |||
| 36408 | LD HL,33698 | |||
| 36411 | INC (HL) | |||
| 36412 | LD HL,33698 | |||
| 36415 | LD A,(IX+5) | |||
| 36418 | ADD A,(HL) | |||
| 36419 | CP 127 | |||
| 36421 | JR C,36424 | |||
| 36423 | XOR A | |||
| 36424 | LD (IX+6),A | |||
| 36427 | RET | |||
|
This entry point is used by the routine at 45401.
|
||||
| 36428 | LD HL,29579 | |||
| 36431 | LD DE,8 | |||
| 36434 | LD B,7 | |||
|
This entry point is used by the routine at 45401.
|
||||
| 36436 | DEC (HL) | |||
| 36437 | LD A,127 | |||
| 36439 | CP (HL) | |||
| 36440 | JR NC,36444 | |||
| 36442 | LD (HL),0 | |||
| 36444 | JP 45539 | |||
| 36447 | RET | |||
| 36448 | LD BC,4863 | |||
| 36451 | DEC BC | |||
| 36452 | LD A,C | |||
| 36453 | OR B | |||
| 36454 | JR NZ,36451 | |||
| 36456 | RET | |||
| Prev: 35578 | Up: Map | Next: 36457 |