Prev: 45598 Up: Map Next: 45675
45621: 1UP/ 2UP Swapper
Used by the routines at 45524 and 45573.
This routine "swaps" the data between DE and HL.
ChangePlayer 45621 LD A,(38558) A=Flag_ActivePlayer.
45624 CPL Flip the bits.
45625 LD (38558),A Write this back to Flag_ActivePlayer.
These are all the player states.
45628 LD HL,38588 HL=38588
45631 LD DE,38623 DE=38623.
45634 LD BC,35 BC=35 (counter).
45637 CALL ChangePlayer_Loop Call ChangePlayer_Loop.
This is the current "map".
45640 LD HL,56812 HL=56812.
45643 LD DE,57324 DE=57324.
45646 LD BC,512 BC=512 (counter).
45649 CALL ChangePlayer_Loop Call ChangePlayer_Loop.
And this is the active sprites.
45652 LD HL,38658 HL=ImmortalData.
45655 LD DE,38958 DE=38958.
45658 LD BC,300 BC=300 (counter).
This looks complicated but it's just grabbing the data from DE, grabbing the data from HL, and writing the others data to each one.
ChangePlayer_Loop 45661 LD A,(DE) Fetch a byte from DE and store it in A.
45662 EX AF,AF' Switch to the shadow AF register.
45663 LD A,(HL) Copy a byte from HL and write it to DE.
45664 LD (DE),A
45665 EX AF,AF' Switch back to the normal AF register.
45666 LD (HL),A Write the byte held in A (orginally from DE) into HL.
45667 INC DE Increment DE by one.
45668 INC HL Increment HL by one.
45669 DEC BC Decrease C by one.
45670 LD A,B Loop back to ChangePlayer_Loop until the counter in BC is zero.
45671 OR C
45672 JR NZ,ChangePlayer_Loop
45674 RET Return.
View the equivalent code in;
Prev: 45598 Up: Map Next: 45675