| Alien (BUGFIX 1.7) | Routines |
| Prev: 36793 | Up: Map | Next: 37018 |
|
Walks Jones the cat around the ship. JonesRoom is the cat's current room (255 = off-map / disabled); JonesMoveTimer is a frame countdown — when it hits zero (every 255 frames, ~5s) Jones takes one step along the corridor adjacency map (29171), steered by the ROM script via ScriptNibbleToDirection like every other wanderer.
House-keeping around each step:
|
||||
| 36859 | LD A,(33706) | A = Jones's room — | ||
| 36862 | CP 255 | 255 = caught / off the map: | ||
| 36864 | RET Z | nothing to walk | ||
| 36865 | LD HL,33707 | HL → JonesMoveTimer | ||
| 36868 | DEC (HL) | tick it down | ||
| 36869 | RET NZ | not yet zero: wait another frame | ||
| 36870 | LD (HL),255 | expired: next move in ~255 frames | ||
| 36872 | EX AF,AF' | keep the OLD room in A' | ||
| 36873 | LD A,(33706) | A = Jones's current room | ||
| 36876 | LD HL,29171 | corridor adjacency map (RoomAdjCorridors) | ||
| 36879 | LD E,A | |||
| 36880 | LD D,0 | |||
| 36882 | LD B,5 | |||
| 36884 | ADD HL,DE | |||
| 36885 | DJNZ 36884 | HL = map + room*5 | ||
| 36887 | PUSH HL | |||
| 36888 | CALL 33589 | AdvanceScriptPtr: next ROM script nibble | ||
| 36891 | CALL 36763 | ScriptNibbleToDirection: nibble -> slot 0-4 | ||
| 36894 | LD E,A | |||
| 36895 | POP HL | |||
| 36896 | ADD HL,DE | |||
| 36897 | LD A,(HL) | A = Jones's destination room | ||
| 36898 | LD HL,33706 | |||
| 36901 | LD (HL),A | JonesRoom = destination | ||
| 36902 | LD A,(31252) | |||
| 36905 | CP 1 | is the room view in corridor mode 1? | ||
| 36907 | JR NZ,36941 | no: skip the display update | ||
| 36909 | LD HL,31242 | HL -> currently viewed room | ||
| 36912 | EX AF,AF' | A = Jones's OLD room | ||
| 36913 | CP (HL) | did Jones just leave the viewed room? | ||
| 36914 | JR NZ,36941 | no: nothing to erase | ||
| 36916 | LD A,255 | |||
| 36918 | LD (29644),A | corridor cell 14 (Jones's slot) := empty | ||
| 36921 | LD HL,18678 | |||
| 36924 | LD (31257),HL | draw pointer -> cell 14's screen position | ||
| 36927 | CALL 31634 | blit blank strip (erase the cat) | ||
| 36930 | LD A,(33683) | |||
| 36933 | CP 14 | player cursor parked on Jones's cell? | ||
| 36935 | CALL Z,34743 | yes: nudge it forward one position | ||
| 36938 | CALL 39670 | one-shot Jones (tail) animation | ||
| 36941 | LD A,(33706) | A = Jones's new room | ||
| 36944 | LD HL,29567 | slot 0 byte +1: walk the +1 (room) column | ||
| 36947 | LD BC,2048 | B = 8 slots, C = slot counter (0) | ||
| 36950 | LD DE,8 | record stride | ||
| 36953 | CP (HL) | is this actor in Jones's room? | ||
| 36954 | JR Z,36961 | |||
| 36956 | INC C | |||
| 36957 | ADD HL,DE | |||
| 36958 | DJNZ 36953 | next slot | ||
| 36960 | RET | nobody shares Jones's room | ||
| 36961 | LD A,C | |||
| 36962 | AND A | slot 0 = the ALIEN's room: | ||
| 36963 | JR Z,36873 | the cat won't stay - re-roll the move | ||
| 36965 | PUSH HL | |||
| 36966 | PUSH DE | |||
| 36967 | LD E,6 | |||
| 36969 | ADD HL,DE | HL -> the slot's +7 status byte | ||
| 36970 | XOR A | |||
| 36971 | CP (HL) | alive (status 0)? | ||
| 36972 | POP DE | |||
| 36973 | POP HL | |||
| 36974 | LD A,(33706) | |||
| 36977 | JR NZ,36956 | not alive: keep scanning | ||
| 36979 | XOR A | A = message #0 | ||
| 36980 | LD L,C | L = witnessing crew slot | ||
| 36981 | LD H,0 | |||
| 36983 | CALL 37176 | enqueue "{actor} sees Jones the cat" | ||
| 36986 | LD A,(31252) | |||
| 36989 | CP 1 | corridor view mode? | ||
| 36991 | RET NZ | |||
| 36992 | LD A,(33706) | |||
| 36995 | LD HL,31242 | |||
| 36998 | CP (HL) | did Jones walk into the viewed room? | ||
| 36999 | RET NZ | |||
| 37000 | LD HL,18678 | yes: draw pointer -> corridor cell 14 | ||
| 37003 | LD (31257),HL | |||
| 37006 | LD A,51 | sprite strip 51 = Jones the cat | ||
| 37008 | LD (29644),A | corridor cell 14 := Jones | ||
| 37011 | CALL 31634 | blit the cat into the corridor | ||
| 37014 | CALL 39655 | start the Jones animation from frame 0 | ||
| 37017 | RET | |||
| Prev: 36793 | Up: Map | Next: 37018 |