Prev: 8F0F Up: Map Next: 8FED
8F55: Display mines
Used by the routine at create_or_display_mines.
display_mines 8F55 CALL create_shot_from_mine Create shot from mine
8F58 LD IY,mines_background_data Mine data
8F5C LD B,$03 3 mines
display_mines_0 8F5E PUSH BC Save counter
8F5F LD L,(IY+$04) Get patterns address LSB
8F62 LD H,(IY+$05) Get patterns address MSB
8F65 LD A,H If zero
8F66 OR L ...
8F67 JR Z,display_mines_2 Then return
8F69 LD A,(status_flags) Test died flag
8F6C BIT 2,A ...
8F6E JR NZ,destroy_mine If we died then destroy mine
8F70 LD A,(destroy_mines_flag) Test flag
8F73 BIT 0,A If set
8F75 JR NZ,destroy_mine Then destroy mine
8F77 LD A,(frame_counter) Frame counter
8F7A AND $07 If not every 8th frame
8F7C JR NZ,display_mines_2 Then skip to next mine
8F7E LD A,(mines_movement_table_offset) Get table offset
8F81 LD C,A BC = A
8F82 LD B,$00 ...
8F84 LD HL,mines_movement_table Table base address
8F87 ADD HL,BC Add offset
8F88 LD A,(HL) Get table byte
8F89 ADD A,(IY+$07) Add to polar y
8F8C LD (IY+$07),A ...
8F8F INC HL Next table address
8F90 LD A,(HL) Get table byte
8F91 ADD A,(IY+$08) Add to polar x
8F94 LD (IY+$08),A ...
8F97 LD L,(IY+$04) Get patterns address
8F9A LD H,(IY+$05) ...
8F9D LD DE,three_spheres_graphics 3 spheres graphics
8FA0 XOR A Patterns offset
8FA1 SBC HL,DE ...
8FA3 LD A,L Flip bit value 32 (animate)
8FA4 XOR $20 ...
8FA6 LD L,A ...
8FA7 ADD HL,DE New patterns address
8FA8 LD (IY+$04),L Save in structure
8FAB LD (IY+$05),H ...
This entry point is used by the routine at destroy_mine.
display_mines_1 8FAE LD D,(IY+$07) Polar y
8FB1 LD E,(IY+$08) Polar x
8FB4 CALL polar_to_screen Polar to screen
8FB7 LD A,D Screen y
8FB8 SUB $04 Screen y - 4
8FBA LD (IY+$01),A Save in structure
8FBD LD A,E Screen x
8FBE SUB $04 Screen x - 4
8FC0 LD (IY+$00),A Save in structure
8FC3 CALL display_background_patterns Display background patterns
display_mines_2 8FC6 LD BC,$0009 Next mine
8FC9 ADD IY,BC ...
8FCB POP BC Restore counter
8FCC DJNZ display_mines_0 Loop for 3 mines
8FCE LD A,(frame_counter) Frame counter
8FD1 AND $07 If not the 8th frame
8FD3 RET NZ Then return
8FD4 LD HL,mines_time_left Get countdown
8FD7 DEC (HL) Decrement it
8FD8 JR NZ,display_mines_3 Return if not zero
8FDA LD HL,destroy_mines_flag Set flag to destroy mines
8FDD SET 0,(HL) ...
display_mines_3 8FDF LD A,(mines_movement_table_offset) Offset movement table offset
8FE2 ADD A,$02 Add 2
8FE4 CP $10 If < 16
8FE6 JR C,display_mines_4 Then update
8FE8 XOR A Else reset
display_mines_4 8FE9 LD (mines_movement_table_offset),A Save offset
8FEC RET
Prev: 8F0F Up: Map Next: 8FED