Prev: 46540 Up: Map Next: 46789
46588: Handler: New High Score
Used by the routine at GameOver_1UP.
NewHighScore 46588 LD HL,38552 HL=1UP_Score_1.
46591 LD DE,38555 DE=2UP_Score_1.
46594 CALL NewHighScore_Compare Call NewHighScore_Compare.
46597 LD A,0 Write 0 to 38586.
46599 LD (38586),A
46602 JR Z,NewHighScore_Process If there's either any carry or the zero flag is set then jump to NewHighScore_Process.
46604 JR C,NewHighScore_Process
46606 CPL Flip the bits.
46607 EX DE,HL Switch the registers containing the 1UP and 2UP score.
NewHighScore_Process 46608 LD (38558),A Write A to Flag_ActivePlayer.
46611 CALL NewHighScore_0 Call NewHighScore_0.
46614 EX DE,HL Switch back the registers containing the 1UP and 2UP score.
46615 LD A,(38558) A=Flag_ActivePlayer.
46618 CPL Flip the bits.
46619 LD (38558),A Write A to Flag_ActivePlayer.
NewHighScore_0 46622 PUSH DE Stash DE and HL on the stack.
46623 PUSH HL
We hold six high scores.
46624 LD B,6 B=6.
46626 LD DE,45858 DE=Pos_6_HighScore_1.
NewHighScore_1 46629 CALL NewHighScore_Compare Call NewHighScore_Compare.
46632 JR NC,NewHighScore_2
46634 CALL NewHighScore_Next Call NewHighScore_Next.
46637 DJNZ NewHighScore_1
NewHighScore_2 46639 LD A,B
46640 CP 6
46642 JR Z,NewHighScore_5
46644 LD HL,45858 HL=Pos_6_HighScore_1.
46647 LD DE,45864 DE=New_HighScore_1.
46650 LD A,B A=B.
46651 NEG
46653 ADD A,6 A=A+6.
46655 LD (38587),A Store the result at HighScorePosition.
NewHighScore_3 46658 LD BC,6 BC=0006.
46661 PUSH HL Stash HL on the stack.
46662 LDIR
46664 POP DE Restore DE from the stack.
46665 LD L,E HL=DE.
46666 LD H,D
46667 CALL NewHighScore_Next Call NewHighScore_Next.
46670 EX DE,HL
46671 DEC A Decrease A by one.
46672 JR NZ,NewHighScore_3
46674 POP HL
46675 PUSH HL
46676 LD BC,3 BC=0003.
46679 LDIR
46681 PUSH DE
46682 CALL Score_HI Call Score_HI.
46685 LD A,(38586) If 38586 is not zero, jump to NewHighScore_4.
46688 AND A
46689 JR NZ,NewHighScore_4
46691 INC A Increment A by one.
46692 LD (38586),A Write A to 38586.
46695 LD HL,25030 HL=Room_Special_MainMenu.
46698 CALL DrawRoom Call DrawRoom.
NewHighScore_4 46701 CALL HallOfFame_Clear Call HallOfFame_Clear.
Updates the text for the appropriate player number.
46704 LD A,(38558) A=Flag_ActivePlayer.
46707 AND A Is this 1UP or 2UP?
46708 LD A,177 A=177 (ASCII "1"+128).
46710 JR Z,NewHighScore_Update_Player Jump to NewHighScore_Update_Player if the current player is 1UP.
46712 INC A Else, A=178 (ASCII "2"+128).
Overwrite the copy:
Byte Copy
177 "PLAYER 1"
178 "PLAYER 2"
NewHighScore_Update_Player 46713 LD (46979),A Write A to 46979.
Work out which of the HighScore_Suffixes to use.
46716 LD A,(38587) B=HighScorePosition.
46719 LD B,A
46720 LD A,253 A=253 (as 253+3=0 - so the offset is then pointing at the base address).
NewHighScore_Suffix_Loop 46722 ADD A,3 A=A+3.
46724 DJNZ NewHighScore_Suffix_Loop Decrease the position counter by one and loop back to NewHighScore_Suffix_Loop until the counter is zero.
Fetch the appropriate position suffix.
46726 LD C,A Create an offset in BC.
46727 LD B,0
46729 LD HL,46789 HL=HighScore_Suffixes + offset.
46732 ADD HL,BC
46733 LD DE,47004 DE=47004.
46736 LD BC,3 BC=3 (counter).
Overwrite the copy:
Byte Copy
0 "TODAYS 6TH HIGHEST"
1 "TODAYS 5TH HIGHEST"
2 "TODAYS 4TH HIGHEST"
3 "TODAYS 3RD HIGHEST"
4 "TODAYS 2ND HIGHEST"
46739 LDIR Copy 3 bytes of data from HL to 47004.
Print the messaging to the screen.
46741 LD DE,46933 DE=NewHighScore_Attributes.
46744 EXX Switch to the shadow registers.
46745 LD HL,46941 HL'=NewHighScore_Position.
46748 LD DE,46957 DE'=NewHighScore_Text.
There are eight lines of text.
46751 LD B,8 B=8.
46753 CALL GameMenu_Loop Call GameMenu_Loop.
46756 POP DE Restore DE from the stack.
46757 CALL 46807 Call 46807.
NewHighScore_5 46760 POP HL Restore HL and DE from the stack.
46761 POP DE
46762 RET Return.
Moves the High Score pointer to the next entry (we move from 6th to 1st).
NewHighScore_Next 46763 DEC DE Decrease DE by six.
46764 DEC DE
46765 DEC DE
46766 DEC DE
46767 DEC DE
46768 DEC DE
46769 RET Return.
Compares the scores pointed to by DE and HL.
NewHighScore_Compare 46770 PUSH BC Stash BC, DE and HL on the stack.
46771 PUSH DE
46772 PUSH HL
Scores are held in three bytes.
46773 LD B,3 B=3 (counter).
NewHighScore_Compare_Loop 46775 LD A,(DE) A=the score digit held at DE.
46776 CP (HL) Compare this against the score digit held at HL.
46777 JR C,NewHighScore_Compare_Return If there's any carry over then jump to NewHighScore_Compare_Return to return.
46779 JR NZ,NewHighScore_Compare_Return If the result is non-zero then jump to NewHighScore_Compare_Return to return.
46781 INC HL Increment both HL and DE by one.
46782 INC DE
46783 DJNZ NewHighScore_Compare_Loop Decrease the score digit counter by one and loop back to NewHighScore_Compare_Loop until the counter is zero.
NewHighScore_Compare_Return 46785 POP HL Restore HL, DE and BC from the stack.
46786 POP DE
46787 POP BC
46788 RET Return.
Prev: 46540 Up: Map Next: 46789