Prev: 57631 Up: Map Next: 57901
57642: Animals Event Timing
Used by the routine at Handler_Animals.
*PlayerBooty starts at 0000 and counts up for every item of booty collected. This means that, the chance that animals appear increases when the player has collected over 100 items (of booty, not treasure - which counts down from 0125).
AnimalsEventTiming 57642 LD BC,(23540) If the player has collected over 100 items of booty (in *PlayerBooty) then jump to IncreasedFrequencyAnimalsEventTiming.
57646 LD A,C
57647 CP 100
57649 JR NC,IncreasedFrequencyAnimalsEventTiming
57651 LD HL,(23672) Return if *FRAMES is lower than 1400.
57654 LD DE,1400
57657 SBC HL,DE
57659 RET C
Use FRAMES as a counter.
StartAnimalsEvent 57660 LD HL,0 Reset *FRAMES to 0000 to start a new event cycle.
57663 LD (23672),HL
57666 CALL GetRandomNumber Call GetRandomNumber.
57669 AND %00000011 Ensure the random number is between 0 and 3.
57671 LD HL,62231 HL=62231+the random number.
57674 LD E,A
57675 LD D,0
57677 ADD HL,DE
57678 PUSH HL Stash HL on the stack.
57679 INC HL Increment HL by one.
57680 LD A,(HL) A=*HL.
57681 LD IX,(23514) IX=*ReferenceKeysAndLockedDoors.
57685 LD B,A B=A.
AnimalsEventTiming_0 57686 LD A,(IX+0) Jump to AnimalsEventTiming_2 if *IX+0 is equal to 255.
57689 CP 255
57691 JR Z,AnimalsEventTiming_2
57693 LD A,(IX+1) Jump to AnimalsEventTiming_1 if *IX+1 is not equal to B.
57696 CP B
57697 JR NZ,AnimalsEventTiming_1
57699 LD A,(IX+5) Jump to 57624 if *IX+5 is not equal to 0.
57702 CP 0
57704 JP NZ,57624
AnimalsEventTiming_1 57707 LD DE,6 IX+=0006.
57710 ADD IX,DE
57712 JR AnimalsEventTiming_0 Jump to AnimalsEventTiming_0.
AnimalsEventTiming_2 57714 LD IX,62236 IX=62236.
57718 CALL GetRandomNumber Call GetRandomNumber.
57721 BIT 3,A Test bit 3 of A.
57723 JR Z,AnimalsEventTiming_3 Jump to AnimalsEventTiming_3 if {} is zero.
57725 LD (IX+0),2 Write 2 to *IX+0.
57729 LD (IX+2),1 Write 1 to *IX+2.
57733 LD (IX+4),1 Write 1 to *IX+4.
57737 LD (IX+5),0 Write 0 to *IX+5.
57741 LD (IX+11),1 Write 1 to *IX+11.
57745 LD (IX+13),2 Write 2 to *IX+13.
57749 JR AnimalsEventTiming_4 Jump to AnimalsEventTiming_4.
AnimalsEventTiming_3 57751 LD (IX+0),37 Write 37 to *IX+0.
57755 LD (IX+2),0 Write 0 to *IX+2.
57759 LD (IX+4),255 Write 255 to *IX+4.
57763 LD (IX+5),0 Write 0 to *IX+5.
57767 LD (IX+11),0 Write 0 to *IX+11.
57771 LD (IX+13),36 Write 36 to *IX+13.
AnimalsEventTiming_4 57775 CALL GetRandomNumber Call GetRandomNumber.
57778 BIT 5,A Test bit 5 of A.
57780 JR Z,AnimalsEventTiming_6 Jump to AnimalsEventTiming_6 if {} is zero.
57782 POP HL Restore HL from the stack.
57783 PUSH HL Stash HL on the stack.
57784 LD A,(HL) Set up the screen buffer location 33/*HL using CL_SET.
57785 LD B,A
57786 LD C,33
57788 CALL 3545
57791 LD HL,(23684) HL=*DF_CC.
57794 LD B,32 B=32.
AnimalsEventTiming_5 57796 LD A,(HL) A=*HL.
57797 INC HL Increment HL by one.
57798 CP 255 Jump to 57624 if A is not equal to 255.
57800 JP NZ,57624
57803 DJNZ AnimalsEventTiming_5 Decrease counter by one and loop back to AnimalsEventTiming_5 until counter is zero.
57805 POP HL Restore HL from the stack.
57806 LD A,(HL) A=*HL.
57807 INC A Increment A by one.
57808 LD (IX+1),A Write A to *IX+1.
57811 LD (IX+14),A Write A to *IX+14.
57814 LD (IX+3),3 Write 3 to *IX+3.
57818 LD (IX+15),3 Write 3 to *IX+15.
57822 LD (IX+6),32 Write 32 to *IX+6.
57826 LD (IX+9),3 Write 3 to *IX+9.
57830 LD (IX+7),4 Write 4 to *IX+7.
57834 LD (IX+8),1 Write 1 to *IX+8.
57838 LD A,1 Write 1 to *SoundFlag_Animal.
57840 LD (65535),A
57843 LD A,(IX+4) Return if *IX+4 is equal to 1.
57846 CP 1
57848 RET Z
57849 LD (IX+6),36 Write 36 to *IX+6.
57853 RET Return.
AnimalsEventTiming_6 57854 POP HL Restore HL from the stack.
57855 LD A,(HL) A=*HL.
57856 INC A Increment A by three.
57857 INC A
57858 INC A
57859 LD (IX+1),A Write A to *IX+1.
57862 LD (IX+14),A Write A to *IX+14.
57865 LD (IX+3),3 Write 3 to *IX+3.
57869 LD (IX+6),40 Write 40 to *IX+6.
57873 LD (IX+9),6 Write 6 to *IX+9.
57877 LD (IX+7),2 Write 2 to *IX+7.
57881 LD (IX+8),2 Write 2 to *IX+8.
57885 LD A,2 Write 2 to *SoundFlag_Animal.
57887 LD (65535),A
57890 LD A,(IX+4) Return if *IX+4 is equal to 255.
57893 CP 255
57895 RET Z
57896 LD (IX+6),44 Write 44 to *IX+6.
57900 RET Return.
Prev: 57631 Up: Map Next: 57901