Prev: 25180 Up: Map Next: 25368
25306: Collision: Cups
Used by the routine at 25180.
CollisionCup 25306 LD HL,(24069) HL=PlayerMapPosition.
25309 SLA L
25311 RL H
25313 CALL 25171 Call 25171.
25316 LD C,H
25317 LD HL,29215 HL=pointer to CupTable.
25320 LD B,8 B=8 (set a counter for the 8 cups).
Fetch the address of the cup from CupTable.
CollisionCup_Loop 25322 LD E,(HL) E=LSB of the cup map address.
25323 INC HL Increment HL by one.
25324 LD D,(HL) D=MSB of the cup map address.
25325 INC HL Increment HL by one, ready to process the next cup.
Check this is still a valid cup (that it hasn't been collected already).
25326 INC DE Increment DE by two (point to the sprite ID).
25327 INC DE
25328 LD A,(DE) If this is not a cup (the sprite ID is not 32), then jump to CollisionCup_Next.
25329 CP 32
25331 JR NZ,CollisionCup_Next
This is still a valid cup, so process it.
25333 DEC DE Decrease DE by two (go back to the start of the map record).
25334 DEC DE
25335 LD A,(DE) Fetch the cup X position.
25336 SUB C
25337 JR NC,CollisionCup_Test_X Make sure we have a positive byte.
25339 NEG
CollisionCup_Test_X 25341 CP 12 If 12 is jump to CollisionCup_Test_Y.
25343 JR C,CollisionCup_Test_Y
CollisionCup_Next 25345 DJNZ CollisionCup_Loop Decrease counter by one and loop back to CollisionCup_Loop until counter is zero.
25347 JP 25165 Jump to 25165.
CollisionCup_Test_Y 25350 LD A,(DE) Fetch the cup X position.
25351 INC DE Increment DE by one.
25352 LD H,A H=cup X position.
25353 LD A,(DE) Fetch the cup Y position.
25354 LD D,A D=cup Y position.
25355 CALL 27440 Call 27440.
25358 EX DE,HL Swap the DE and HL registers.
25359 CALL 27435 Call 27435.
25362 EX DE,HL Swap the DE and HL registers.
25363 LD B,H B=H.
25364 LD C,L C=L.
25365 JP 25106 Jump to 25106.
View the equivalent code in;
Prev: 25180 Up: Map Next: 25368