Prev: 9F8F Up: Map Next: A0A5
9F9B: Handle Rex atoms flush during teleporting
Used by the routine at 9470.
9F9B LD A,($A1F8) Return if atoms are not flushing on teleporting
9F9E OR A
9F9F RET Z
9FA0 LD IY,$A0AD Set IY to the address for the Rex atoms data buffer during teleporting
9FA4 LD B,$14 Set BC to the number of 'Rex atoms' (20)
This entry point is used by the routine at 9FEB.
9FA6 PUSH BC Save BC
9FA7 LD A,(IY+$00) If atom is not configured jump to iniciatise atom data
9FAA OR A
9FAB JP Z,$A023
9FAE LD A,($A24F) Set A093 the x-position of the atom, based on x-offset of atom and x-position of Rex
9FB1 ADD A,(IY+$01)
9FB4 LD ($A22C),A
9FB7 AND $07 Set A the graphic data for atom based on bit2-0 x-position of atom
9FB9 LD E,A
9FBA LD D,$00
9FBC LD HL,$A0A5
9FBF ADD HL,DE
9FC0 LD A,(HL)
9FC1 PUSH AF Save AF
9FC2 LD A,(IY+$02) Computes into HL the address into room graphic data of the atom
9FC5 LD L,A
9FC6 LD H,$00
9FC8 ADD HL,HL
9FC9 ADD HL,HL
9FCA ADD HL,HL
9FCB ADD HL,HL
9FCC ADD HL,HL
9FCD LD A,($A22C)
9FD0 SRL A
9FD2 SRL A
9FD4 SRL A
9FD6 LD E,A
9FD7 LD D,$00
9FD9 ADD HL,DE
9FDA LD DE,$EAFF
9FDD ADD HL,DE
9FDE POP AF Restore AF
9FDF OR (HL) Put the graphic data atom in this location
9FE0 LD (HL),A
9FE1 LD A,($A1FB) if teleporting Rex at game begin jump to update atom position
9FE4 OR A
9FE5 JP Z,$A070
9FE8 JP $A08D Jump to update atom position
Process another atom
9FEB LD DE,$0003 Point IY to the next atom into Rex atom data table
9FEE ADD IY,DE
9FF0 POP BC Restore BC
9FF1 DJNZ $9FA6 Jump back until all atoms has been processed
All atoms processed
9FF3 LD A,($A1FB) Jump forward if Rex is teleporing on init game
9FF6 OR A
9FF7 JP Z,$A006
9FFA LD A,($A250) Decrement y-position of Rex if y-position less than 24
9FFD DEC A
9FFE CP $18
A000 JP C,$A006
A003 LD ($A250),A
A006 LD A,($A1FA) Decrement teleporting loop counter
A009 DEC A
A00A LD ($A1FA),A
A00D OR A Return if loop counter is not zero
A00E RET NZ
Loop counter for teleporting finished
A00F LD A,$01 Set Rex visible
A011 LD ($A1F6),A
A014 XOR A Finish teleporting
A015 LD ($A1F8),A
A018 LD ($A1F9),A
A01B LD A,($A1EE) Jump to resume game after Rex is dead
A01E OR A
A01F JP NZ,$9D68
A022 RET
Initialise data for Rex atoms during teleporting
A023 LD A,($A1FB) Jump forward if teleporting Rex after dead
A026 OR A
A027 JP NZ,$A04B
Rex is teleporting on game begin
A02A LD A,($A1FA) If teleporting loop counter < 50 jump to process next atom
A02D CP $32
A02F JP C,$9FEB
A032 CALL $A530 Set A a random number between 4 and 19
A035 AND $0F
A037 ADD A,$04
A039 LD (IY+$00),A Set this number as y-delta into data buffer for atom y-position variation
A03C CALL $A530 Set A a random number between 0 and 15
A03F AND $0F
A041 LD (IY+$01),A Set this number as x-offset into the teleporting data buffer
A044 LD (IY+$02),$00 Set 0 as y-position of Rex atoms into the teleporting data buffer
A048 JP $9FEB Jump to process next atom
Rex is teleporting after dead
A04B LD A,($A1FA) If teleporting loop counter < 50 jump to process next atom
A04E CP $32
A050 JP C,$9FEB
A053 CALL $A530 Set A a random number between 4 and 19
A056 AND $0F
A058 ADD A,$04
A05A LD (IY+$00),A Set this number as y-delta into data buffer for atom y-position variation
A05D CALL $A530 Set A a random number between 0 and 15
A060 AND $0F
A062 LD (IY+$01),A Set this number as x-offset into the teleporting data buffer
A065 LD A,($A250) Set the y-position of Rex minus 4 the y-position for Rex atoms during teleporting
A068 SUB $04
A06A LD (IY+$02),A
A06D JP $9FEB Jump to process next atom
Update data for the atom when teleporting Rex at game begin
A070 LD A,(IY+$02) Set A the y-position of atom
A073 ADD A,(IY+$00) Add to A the y-offset of atom
A076 LD HL,$A250 Compare atom y-position with Rex y-position
A079 CP (HL)
A07A JP C,$A087 Jump forward if Rex y-position is greater than y-position of atom
A07D LD (IY+$00),$00 Reset y-offset
A081 CALL $9E05 Set Rex visible
A084 JP $9FEB Jump to process next atom
A087 LD (IY+$02),A Set the new y-position for the atom
A08A JP $9FEB Jump to process next atom
Update data for the atom when teleporting Rex afer dead
A08D LD A,(IY+$02) Set A the y-position of atom
A090 SUB (IY+$00) substract to A the y-offset of atom
A093 CP $DF Jump forward if atom y-position greater than 32
A095 JP C,$A09F
A098 LD (IY+$00),$00 Reset y-offset
A09C JP $9FEB Jump to process next atom
A09F LD (IY+$02),A Set the new y-position for the atom
A0A2 JP $9FEB Jump to process next atom
Prev: 9F8F Up: Map Next: A0A5