Prev: 59424 Up: Map Next: 59865
59425: Handler: Lifts
Used by the routine at InitialiseGame.
Only action lifts every other frame.
Handler_Lifts 59425 LD A,(62260) A=*LiftsPiratesFrameSkip.
59428 INC A Increment A by one.
59429 AND %00000001 Ensure A is either 0 or 1.
59431 LD (62260),A Write A back to *LiftsPiratesFrameSkip.
59434 CP 1 Return if A is not equal to 1.
59436 RET NZ
Set the UDG graphics pointer.
59437 LD HL,61819 Write 61819 (Graphics_Lifts) to *CHARS.
59440 LD (23606),HL
Find active lifts.
59443 LD IX,(23524) IX=*ReferenceLifts.
Are we done?
Handler_Lifts_Loop 59447 LD A,(IX+0) Return if the terminator character has been received instead of a co-ordinate (255).
59450 CP 255
59452 RET Z
59453 LD A,(IX+4) Jump to Handler_Lifts_11 if *IX+4 is equal to 0.
59456 CP 0
59458 JP Z,Handler_Lifts_11
59461 LD A,(62016) Jump to Handler_Lifts_Next if *62016 is not equal to 3.
59464 CP 3
59466 JR NZ,Handler_Lifts_Next
59468 LD E,(IX+7) E=*IX+7.
59471 LD C,(IX+0) C=*IX+0.
59474 LD B,(IX+1) B=*IX+1.
59477 LD A,(62015) A=*62015.
59480 SUB 3 A-=3.
59482 CP B Jump to Handler_Lifts_Next if A is not equal to B.
59483 JR NZ,Handler_Lifts_Next
59485 LD C,(IX+0) C=*IX+0.
59488 LD B,(IX+1) B=*IX+1.
59491 PUSH BC Stash BC on the stack.
59492 CALL 3545 Call CL_SET.
59495 LD HL,(23684) HL=*DF_CC.
59498 POP BC Restore BC from the stack.
59499 INC B Increment B by one.
59500 PUSH HL Stash HL on the stack.
59501 CALL 3545 Call CL_SET.
59504 POP HL Restore HL from the stack.
59505 LD DE,(23684) DE=*DF_CC.
59509 LD A,D D+=7.
59510 ADD A,7
59512 LD D,A
59513 LD B,(IX+7) B=*IX+7.
59516 LD A,(IX+2) Jump to Handler_Lifts_0 if *IX+2 is higher than 2.
59519 CP 2
59521 JR NC,Handler_Lifts_0
59523 INC B Increment B by one.
Handler_Lifts_0 59524 LD A,(DE) A=*DE.
59525 AND (HL) Merge the bits from *HL.
59526 JR NZ,Handler_Lifts_1 Jump to Handler_Lifts_1 if the result is not zero.
59528 INC HL Increment HL by one.
59529 INC DE Increment DE by one.
59530 DJNZ Handler_Lifts_0 Decrease counter by one and loop back to Handler_Lifts_0 until counter is zero.
59532 JR Handler_Lifts_Next Jump to Handler_Lifts_Next.
Handler_Lifts_1 59534 LD A,2 Write 2 to *59424.
59536 LD (59424),A
59539 LD A,(IX+4) Jump to Handler_Lifts_2 if *IX+4 is equal to 0.
59542 CP 0
59544 JR Z,Handler_Lifts_2
59546 CP 255 Compare A with 255.
59548 PUSH AF Stash AF on the stack.
59549 CALL Z,Handler_Lifts_8 Call Handler_Lifts_8 zero.
59552 POP AF Restore AF from the stack.
59553 CALL NZ,Handler_Lifts_7 Call Handler_Lifts_7 not zero.
Handler_Lifts_2 59556 LD A,(IX+5) Jump to Handler_Lifts_Next if *IX+5 is equal to 0.
59559 CP 0
59561 JR Z,Handler_Lifts_Next
59563 CP 255 Compare A with 255.
59565 PUSH AF Stash AF on the stack.
59566 CALL Z,Handler_Lifts_10 Call Handler_Lifts_10 if A was equal to 255 on line 59563.
59569 POP AF Restore AF from the stack.
59570 CALL NZ,Handler_Lifts_9 Call Handler_Lifts_9 if A was not equal to 255 on line 59563.
Handler_Lifts_Next 59573 CALL 61094 Call 61094.
59576 LD A,(IX+4) Compare *IX+4 with 0.
59579 CP 0
59581 PUSH AF Stash AF on the stack.
59582 CALL Z,Handler_Lifts_5 Call Handler_Lifts_5 if *IX+4 was equal to 0 on line 59579.
59585 POP AF Restore AF from the stack.
59586 CALL NZ,Handler_Lifts_3 Call Handler_Lifts_3 if *IX+4 was not equal to 0 on line 59579.
59589 LD (IX+0),C Write C to *IX+0.
59592 LD (IX+1),B Write B to *IX+1.
59595 LD (IX+2),E Write E to *IX+2.
59598 LD (IX+3),D Write D to *IX+3.
59601 CALL 61143 Call 61143.
59604 LD DE,16 IX+=0016.
59607 ADD IX,DE
59609 JP Handler_Lifts_Loop Jump to Handler_Lifts_Loop.
Handler_Lifts_3 59612 LD A,(IX+4) Jump to Handler_Lifts_4 if *IX+4 is equal to 255.
59615 CP 255
59617 JR Z,Handler_Lifts_4
59619 LD A,(IX+10) Return if *IX+10 is not equal to C.
59622 CP C
59623 RET NZ
59624 LD A,(IX+11) Return if *IX+11 is not equal to E.
59627 CP E
59628 RET NZ
59629 LD (IX+4),255 Write 255 to *IX+4.
59633 RET Return.
Handler_Lifts_4 59634 LD A,(IX+12) Return if *IX+12 is not equal to C.
59637 CP C
59638 RET NZ
59639 LD A,(IX+13) Return if *IX+13 is not equal to E.
59642 CP E
59643 RET NZ
59644 LD (IX+4),1 Write 1 to *IX+4.
59648 RET Return.
Handler_Lifts_5 59649 LD A,(IX+5) Jump to Handler_Lifts_6 if *IX+5 is equal to 255.
59652 CP 255
59654 JR Z,Handler_Lifts_6
59656 LD A,(IX+10) Return if *IX+10 is not equal to B.
59659 CP B
59660 RET NZ
59661 LD A,(IX+11) Return if *IX+11 is not equal to D.
59664 CP D
59665 RET NZ
59666 LD (IX+5),255 Write 255 to *IX+5.
59670 RET Return.
Handler_Lifts_6 59671 LD A,(IX+12) Return if *IX+12 is not equal to B.
59674 CP B
59675 RET NZ
59676 LD A,(IX+13) Return if *IX+13 is not equal to D.
59679 CP D
59680 RET NZ
59681 LD (IX+5),1 Write 1 to *IX+5.
59685 RET Return.
Handler_Lifts_7 59686 LD A,(62005) Increment *62005 by one.
59689 INC A
59690 LD (62005),A
59693 RET Return.
Handler_Lifts_8 59694 LD A,(62005) Decrease *62005 by one.
59697 DEC A
59698 LD (62005),A
59701 RET Return.
Handler_Lifts_9 59702 LD A,(62006) Increment *62006 by one.
59705 INC A
59706 LD (62006),A
59709 RET Return.
Handler_Lifts_10 59710 LD A,(62006) Decrease *62006 by one.
59713 DEC A
59714 LD (62006),A
59717 RET Return.
Handler_Lifts_11 59718 LD A,(62016) A=*62016.
59721 INC A Increment A by one.
59722 AND %00000011 Keep only bits 0-1.
59724 CP (IX+3) Jump to Handler_Lifts_Next if A is not equal to *IX+3.
59727 JP NZ,Handler_Lifts_Next
59730 LD C,(IX+0) C=*IX+0.
59733 LD B,(IX+1) B=*IX+1.
59736 LD A,(IX+3) A=*IX+3.
59739 CP 0 Compare A with 0.
59741 LD A,(62015) A=*62015.
59744 JR Z,Handler_Lifts_12 Jump to Handler_Lifts_12 if A was equal to 0 on line 59739.
59746 DEC A Decrease A by one.
Handler_Lifts_12 59747 SUB 2 A-=2.
59749 CP B Jump to Handler_Lifts_Next if A is not equal to B.
59750 JP NZ,Handler_Lifts_Next
59753 LD A,(IX+3) A=*IX+3.
59756 LD C,(IX+0) C=*IX+0.
59759 LD B,(IX+1) B=*IX+1.
59762 PUSH AF Stash AF on the stack.
59763 CP 3 Call Handler_Lifts_16 if A is equal to 3.
59765 CALL Z,Handler_Lifts_16
59768 POP AF Restore AF from the stack.
59769 PUSH AF Stash AF on the stack.
59770 CP 2 Call Handler_Lifts_15 if A is equal to 2.
59772 CALL Z,Handler_Lifts_15
59775 POP AF Restore AF from the stack.
59776 PUSH AF Stash AF on the stack.
59777 CP 1 Call Handler_Lifts_14 if A is equal to 1.
59779 CALL Z,Handler_Lifts_14
59782 POP AF Restore AF from the stack.
59783 CP 0 Call Handler_Lifts_17 if A is equal to 0.
59785 CALL Z,Handler_Lifts_17
59788 LD B,(IX+7) B=*IX+7.
Handler_Lifts_13 59791 LD A,(DE) A=*DE.
59792 AND (HL) Merge the bits from *HL.
59793 JP NZ,Handler_Lifts_1 Jump to Handler_Lifts_1 if the result is not zero.
59796 INC HL Increment HL by one.
59797 INC DE Increment DE by one.
59798 DJNZ Handler_Lifts_13 Decrease counter by one and loop back to Handler_Lifts_13 until counter is zero.
59800 JP Handler_Lifts_Next Jump to Handler_Lifts_Next.
Handler_Lifts_14 59803 CALL 3545 Call CL_SET.
59806 LD HL,(23684) HL=*DF_CC.
59809 INC H Increment H by five.
59810 INC H
59811 INC H
59812 INC H
59813 INC H
59814 PUSH HL DE=HL (using the stack).
59815 POP DE
59816 INC H Increment H by one.
59817 RET Return.
Handler_Lifts_15 59818 CALL 3545 Call CL_SET.
59821 LD HL,(23684) HL=*DF_CC.
59824 INC H Increment H by three.
59825 INC H
59826 INC H
59827 PUSH HL DE=HL (using the stack).
59828 POP DE
59829 INC H Increment H by one.
59830 RET Return.
Handler_Lifts_16 59831 CALL 3545 Call CL_SET.
59834 LD HL,(23684) HL=*DF_CC.
59837 INC H Increment H by one.
59838 PUSH HL DE=HL (using the stack).
59839 POP DE
59840 INC H Increment H by one.
59841 RET Return.
Handler_Lifts_17 59842 PUSH BC Stash BC on the stack.
59843 CALL 3545 Call CL_SET.
59846 POP BC Restore BC from the stack.
59847 LD DE,(23684) DE=*DF_CC.
59851 LD A,D D+=7.
59852 ADD A,7
59854 LD D,A
59855 PUSH DE Stash DE on the stack.
59856 DEC B Decrease B by one.
59857 CALL 3545 Call CL_SET.
59860 POP DE Restore DE from the stack.
59861 LD HL,(23684) HL=*DF_CC.
59864 RET Return.
Prev: 59424 Up: Map Next: 59865