Prev: 35578 Up: Map Next: 36457
35973: Routine at 35973
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
This entry point is used by the routines at 37490, 40319, 42821, 44561 and 44880.
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