A343: Move the active ball and detect bounces
| move_ball |
A343 |
LD A,$FF |
|
A345 |
LD (bounce_x_code),A |
|
A348 |
LD (bounce_y_code),A |
|
A34B |
XOR A |
|
A34C |
LD (bounce_axis_count),A |
|
A34F |
LD A,(active_ball) |
|
A352 |
OR A |
|
A353 |
JR NZ,move_ball_use_b |
|
A355 |
LD IY,ball_a_x_accum |
|
A359 |
JR move_ball_probe_x |
| move_ball_use_b |
A35B |
LD IY,ball_b_x_accum |
| move_ball_probe_x |
A35F |
LD A,(active_ball) |
|
A362 |
LD B,A |
|
A363 |
INC B |
|
A364 |
CALL ball_tile_cell |
|
A367 |
LD (ball_cell_ptr),HL |
|
A36A |
LD A,(IY+$04) |
|
A36D |
OR A |
|
A36E |
JR NZ,move_ball_probe_x_pos |
|
A370 |
LD B,$20 |
|
A372 |
CALL collision_probe |
|
A375 |
OR A |
|
A376 |
JR Z,move_ball_check_y |
|
A378 |
LD A,$02 |
|
A37A |
LD (bounce_x_code),A |
|
A37D |
LD HL,bounce_axis_count |
|
A380 |
INC (HL) |
|
A381 |
JR move_ball_check_y |
| move_ball_probe_x_pos |
A383 |
LD B,$22 |
|
A385 |
CALL collision_probe |
|
A388 |
OR A |
|
A389 |
JR Z,move_ball_check_y |
|
A38B |
XOR A |
|
A38C |
LD (bounce_x_code),A |
|
A38F |
LD HL,bounce_axis_count |
|
A392 |
INC (HL) |
| move_ball_check_y |
A393 |
LD A,(active_ball) |
|
A396 |
OR A |
|
A397 |
JR Z,move_ball_probe_y |
|
A399 |
LD A,(missile_shot) |
|
A39C |
OR A |
|
A39D |
RET NZ |
| move_ball_probe_y |
A39E |
LD A,(IY+$05) |
|
A3A1 |
OR A |
|
A3A2 |
JR NZ,move_ball_probe_y_pos |
|
A3A4 |
LD B,$01 |
|
A3A6 |
CALL collision_probe |
|
A3A9 |
OR A |
|
A3AA |
JR Z,move_ball_resolve |
|
A3AC |
LD A,$01 |
|
A3AE |
LD (bounce_y_code),A |
|
A3B1 |
LD HL,bounce_axis_count |
|
A3B4 |
INC (HL) |
|
A3B5 |
JR move_ball_resolve |
| move_ball_probe_y_pos |
A3B7 |
LD B,$41 |
|
A3B9 |
CALL collision_probe |
|
A3BC |
OR A |
|
A3BD |
JR Z,move_ball_resolve |
|
A3BF |
LD A,$03 |
|
A3C1 |
LD (bounce_y_code),A |
|
A3C4 |
LD HL,bounce_axis_count |
|
A3C7 |
INC (HL) |
| move_ball_resolve |
A3C8 |
LD A,(bounce_axis_count) |
|
A3CB |
OR A |
|
A3CC |
RET Z |
|
A3CD |
CP $02 |
|
A3CF |
JR Z,move_ball_corner |
|
A3D1 |
LD A,(bounce_x_code) |
|
A3D4 |
OR A |
|
A3D5 |
JP P,move_ball_reflect |
|
A3D8 |
LD A,(bounce_y_code) |
|
A3DB |
JP move_ball_reflect |
| move_ball_corner |
A3DE |
LD B,$04 |
|
A3E0 |
LD HL,corner_bounce_codes |
| move_ball_corner_loop |
A3E3 |
LD A,(bounce_x_code) |
|
A3E6 |
CP (HL) |
|
A3E7 |
JR NZ,move_ball_corner_skip |
|
A3E9 |
INC HL |
|
A3EA |
LD A,(bounce_y_code) |
|
A3ED |
CP (HL) |
|
A3EE |
JR NZ,move_ball_corner_next |
|
A3F0 |
INC HL |
|
A3F1 |
LD A,(HL) |
|
A3F2 |
JP move_ball_reflect |
| move_ball_corner_skip |
A3F5 |
INC HL |
| move_ball_corner_next |
A3F6 |
INC HL |
|
A3F7 |
INC HL |
|
A3F8 |
DJNZ move_ball_corner_loop |
| move_ball_reflect |
A3FA |
EX AF,AF' |
|
A3FB |
LD HL,ball_a_heading |
|
A3FE |
LD A,(active_ball) |
|
A401 |
LD E,A |
|
A402 |
LD D,$00 |
|
A404 |
ADD HL,DE |
|
A405 |
LD B,(HL) |
|
A406 |
PUSH HL |
|
A407 |
EX AF,AF' |
|
A408 |
LD HL,bounce_axis_dirs |
|
A40B |
LD E,A |
|
A40C |
LD D,$00 |
|
A40E |
ADD HL,DE |
|
A40F |
LD A,(HL) |
|
A410 |
SUB B |
|
A411 |
LD B,(HL) |
|
A412 |
ADD A,B |
| move_ball_adj_quadrant |
A413 |
ADD A,$24 |
|
A415 |
CP $48 |
|
A417 |
JR NC,move_ball_0 |
|
A419 |
ADD A,$48 |
|
A41B |
JR move_ball_1 |
| move_ball_0 |
A41D |
CP $90 |
|
A41F |
JR C,move_ball_1 |
|
A421 |
SUB $48 |
| move_ball_1 |
A423 |
POP HL |
| move_ball_q48 |
A424 |
LD C,A |
|
A425 |
LD A,B |
|
A426 |
CP $48 |
|
A428 |
JR NZ,move_ball_q5a |
|
A42A |
LD A,C |
|
A42B |
CP $5A |
|
A42D |
JR C,move_ball_2 |
|
A42F |
CP $7E |
|
A431 |
JP C,move_ball_store |
| move_ball_2 |
A434 |
SUB $24 |
|
A436 |
CP $48 |
|
A438 |
JP NC,move_ball_store |
|
A43B |
ADD A,$48 |
|
A43D |
JP move_ball_store |
| move_ball_q5a |
A440 |
CP $5A |
|
A442 |
JR NZ,move_ball_q6c |
|
A444 |
LD A,C |
|
A445 |
CP $6C |
|
A447 |
JP NC,move_ball_store |
|
A44A |
SUB $24 |
|
A44C |
CP $48 |
|
A44E |
JP NC,move_ball_store |
|
A451 |
ADD A,$48 |
|
A453 |
JP move_ball_store |
| move_ball_q6c |
A456 |
CP $6C |
|
A458 |
JR NZ,move_ball_q7e |
|
A45A |
LD A,C |
|
A45B |
CP $5A |
|
A45D |
JR C,move_ball_store |
|
A45F |
CP $7E |
|
A461 |
JR NC,move_ball_store |
|
A463 |
SUB $24 |
|
A465 |
CP $48 |
|
A467 |
JR NC,move_ball_store |
|
A469 |
ADD A,$48 |
|
A46B |
JR move_ball_store |
| move_ball_q7e |
A46D |
CP $7E |
|
A46F |
JR NZ,move_ball_q51 |
|
A471 |
LD A,C |
|
A472 |
CP $6C |
|
A474 |
JR C,move_ball_store |
|
A476 |
SUB $24 |
|
A478 |
CP $48 |
|
A47A |
JR NC,move_ball_store |
|
A47C |
ADD A,$48 |
|
A47E |
JR move_ball_store |
| move_ball_q51 |
A480 |
CP $51 |
|
A482 |
JR NZ,move_ball_q63 |
|
A484 |
LD A,C |
|
A485 |
CP $63 |
|
A487 |
JR C,move_ball_q51_wrap |
|
A489 |
CP $87 |
|
A48B |
JR C,move_ball_store |
| move_ball_q51_wrap |
A48D |
SUB $24 |
|
A48F |
CP $48 |
|
A491 |
JR NC,move_ball_store |
|
A493 |
ADD A,$48 |
|
A495 |
JR move_ball_store |
| move_ball_q63 |
A497 |
CP $63 |
|
A499 |
JR NZ,move_ball_q75 |
|
A49B |
LD A,C |
|
A49C |
CP $75 |
|
A49E |
JR NC,move_ball_store |
|
A4A0 |
CP $51 |
|
A4A2 |
JR C,move_ball_store |
|
A4A4 |
SUB $24 |
|
A4A6 |
CP $48 |
|
A4A8 |
JR NC,move_ball_store |
|
A4AA |
ADD A,$48 |
|
A4AC |
JR move_ball_store |
| move_ball_q75 |
A4AE |
CP $75 |
|
A4B0 |
JR NZ,move_ball_q87 |
|
A4B2 |
LD A,C |
|
A4B3 |
CP $63 |
|
A4B5 |
JR C,move_ball_store |
|
A4B7 |
CP $87 |
|
A4B9 |
JR NC,move_ball_store |
|
A4BB |
SUB $24 |
|
A4BD |
CP $48 |
|
A4BF |
JR NC,move_ball_store |
|
A4C1 |
ADD A,$48 |
|
A4C3 |
JR move_ball_store |
| move_ball_q87 |
A4C5 |
CP $87 |
|
A4C7 |
JR Z,move_ball_q87b |
|
A4C9 |
LD A,C |
|
A4CA |
JR move_ball_store |
| move_ball_q87b |
A4CC |
LD A,C |
|
A4CD |
CP $75 |
|
A4CF |
JR NC,move_ball_clamp_final |
|
A4D1 |
CP $51 |
|
A4D3 |
JR NC,move_ball_store |
| move_ball_clamp_final |
A4D5 |
SUB $24 |
|
A4D7 |
CP $48 |
|
A4D9 |
JR NC,move_ball_store |
|
A4DB |
ADD A,$48 |
| move_ball_store |
A4DD |
LD (HL),A |
|
A4DE |
LD (IY+$08),$01 |
|
A4E2 |
CALL set_ball_velocity |
|
A4E5 |
RET |
Fork me on GitHub