Prev: DD89 Up: Map Next: DDC0
DD97: Handler: Add Points To Score
Used by the routines at F450, F4E6 and Handler_CollisionMonsters.
Input
A Monster ID
D Points to add to score digit
E Digit to update
Derive pointer to monster score messaging from the given ID.
Handler_AddPoints DD97 CP $01 Jump to AddPoints_CheckLizzy if A is not targeting George (01).
DD99 JR NZ,AddPoints_CheckLizzy
George:
DD9B LD HL,$D066 HL=Messaging_GeorgeScore.
DD9E JR AddPointsToScore Jump to AddPointsToScore.
Ralph:
AddPoints_CheckLizzy DDA0 LD HL,$D082 HL=Messaging_RalphScore.
DDA3 CP $02 Jump to AddPointsToScore if A is not targeting Lizzy (02) (i.e. keep Ralph which was set above).
DDA5 JR NZ,AddPointsToScore
Lizzy:
DDA7 LD HL,$D074 HL=Messaging_LizzyScore.
Apply points to score.
AddPointsToScore DDAA LD A,E Work out which digit to update.
DDAB XOR %00000111
DDAD DEC A
DDAE LD E,A
DDAF LD A,D A=points to add.
DDB0 LD D,$00 Move HL to the appropriate score digit.
DDB2 ADD HL,DE
AddPointsToScore_Loop DDB3 ADD A,(HL) A=*HL+point value held in A.
DDB4 LD (HL),A Write A to *HL.
DDB5 CP $3A Return if A is lower than 3A (ASCII 39 is "9").
DDB7 RET C
This digit is higher than "9" so subtract 10 to make it a valid number again.
DDB8 SUB $0A A-=0A.
DDBA LD (HL),A Update the current score digit.
We work backwards here, as the smaller units are on the right-hand side. So now we want to add "1" to the next digit. At it's simplest; 19+01 would first set "10" then move the pointer to the "tens" and add one to it to equal 20.
DDBB DEC HL Decrease the score pointer by one.
DDBC LD A,$01 A=01.
DDBE JR AddPointsToScore_Loop Jump to AddPointsToScore_Loop.
Prev: DD89 Up: Map Next: DDC0