Prev: 55508 Up: Map Next: 55594
55522: Goldfish Game: Animate Sand
Used by the routine at GoldfishGame.
sand-animation
Set the attributes.
GoldfishGame_AnimateSand 55522 LD A,17 Set PAPER: BLUE (1).
55524 RST 16
55525 LD A,1
55527 RST 16
55528 LD HL,56098 Write 56098 (Buffer_SandAnimation) to *CHARS.
55531 LD (23606),HL
55534 LD A,16 Set INK: YELLOW (6).
55536 RST 16
55537 LD A,6
55539 RST 16
Set the co-ordinates of where we're going to PRINT AT.
55540 LD B,4 Set up the screen buffer location 33/4 using CL_SET.
55542 LD C,33
55544 CALL 3545
Print the current sand UDGs to the screen buffer.
55547 LD A,32 A=32 (base sprite ID).
PrintSand_Loop 55549 PUSH AF Stash the current sand sprite ID on the stack.
55550 CALL GoldfishGame_PrintColourUDG Call GoldfishGame_PrintColourUDG.
55553 POP AF Restore the current sand sprite ID from the stack.
55554 INC A Move onto the next sand sprite ID.
55555 CP 64 Keep looping back to PrintSand_Loop until the sand sprite ID is equal to 64.
55557 JR NZ,PrintSand_Loop
Now move all the UDGs one pixel to the right. The next time this routine is called, the sand will appear to have moved when it's printed to the screen.
55559 LD DE,56354 DE=Buffer_SandAnimation.
55562 LD B,8 B=8 (line counter; each sand UDG is 8 bytes).
AnimateSandLine_Loop 55564 PUSH BC Stash the line counter and the sand UDG buffer pointer on the stack.
55565 PUSH DE
55566 LD HL,248 HL=DE+0248.
55569 ADD HL,DE
55570 LD A,(HL) A=*HL.
55571 RRA Rotate A right one position.
55572 POP HL Restore the sand buffer pointer from the stack.
55573 PUSH HL But keep a copy of it (the sand buffer position) on the stack still.
55574 LD DE,8 DE=0008.
55577 LD B,32 B=32 (UDG counter; the total number of sand UDGs in the row).
55579 PUSH AF Stash AF on the stack.
AnimateSandUDG_Loop 55580 POP AF Restore AF from the stack.
55581 RR (HL) Rotate *HL right.
55583 PUSH AF Stash AF on the stack.
55584 ADD HL,DE HL+=DE.
55585 DJNZ AnimateSandUDG_Loop Decrease counter by one and loop back to AnimateSandUDG_Loop until counter is zero.
55587 POP AF Restore AF and DE from the stack.
55588 POP DE
55589 INC DE Increment DE by one.
55590 POP BC Restore the line counter from the stack.
55591 DJNZ AnimateSandLine_Loop Decrease the line counter by one and loop back to AnimateSandLine_Loop until all lines have been rotated.
55593 RET Return.
Prev: 55508 Up: Map Next: 55594