diff options
Diffstat (limited to 'engine/bank3d/main.asm')
-rw-r--r-- | engine/bank3d/main.asm | 158 |
1 files changed, 96 insertions, 62 deletions
diff --git a/engine/bank3d/main.asm b/engine/bank3d/main.asm index 52603517..3855d096 100644 --- a/engine/bank3d/main.asm +++ b/engine/bank3d/main.asm @@ -53,90 +53,124 @@ Func_f42c2:: ; f42c2 (3d:f42c2) INCLUDE "engine/battle/decrement_pp.asm" -Func_f430a:: ; f430a (3d:430a) - ld a,d - cp $4 - jr z,.asm_f4320 - cp $6 - jr z,.asm_f4320 +ModifyPikachuHappiness:: ; f430a (3d:430a) + ld a, d + cp PIKAHAPPY_GYMLEADER + jr z, .checkanywhereinparty + cp PIKAHAPPY_WALKING + jr z, .checkanywhereinparty push de - callab Func_fce18 + callab IsThisPartymonOurPikachu pop de ret nc - jr .asm_f432b -.asm_f4320 + jr .proceed + +.checkanywhereinparty push de - callab Func_fcdb8 + callab IsPikachuInOurParty pop de ret nc -.asm_f432b + +.proceed push de - ld e,$0 - ld a,[wd470] - cp $64 - jr c,.asm_f433b + ; Divide [wPikachuHappiness] by 100. Hold the integer part in e. + ld e, $0 + ld a, [wPikachuHappiness] + cp 100 + jr c, .wPikachuHappiness_div_100 inc e - cp $c8 - jr c,.asm_f433b + cp 200 + jr c, .wPikachuHappiness_div_100 inc e -.asm_f433b - ld c,d +.wPikachuHappiness_div_100 + ; Get the (d, e) entry from .HappinessChangeTable. + ld c, d dec c - ld b,$0 - ld hl,Pointer_f4385 - add hl,bc - add hl,bc - add hl,bc - ld d,$0 - add hl,de - ld a,[hl] - cp $64 - ld a,[wd470] - jr nc,.asm_f4357 + ld b, $0 + ld hl, .HappinessChangeTable + add hl, bc + add hl, bc + add hl, bc + ld d, $0 + add hl, de + ld a, [hl] + ; If [hl] is positive, take min(0xff, [hl] + [wPikachuHappiness]). + ; If [hl] is negative, take max(0x00, [hl] + [wPikachuHappiness]). + ; Inexplicably, we're using 100 as the threshold for comparison. + cp 100 + ld a, [wPikachuHappiness] + jr nc, .negative add [hl] - jr nc,.asm_f435b - ld a,$ff - jr .asm_f435b -.asm_f4357 + jr nc, .okay + ld a, -1 + jr .okay + +.negative add [hl] - jr c,.asm_f435b + jr c, .okay xor a -.asm_f435b - ld [wd470],a +.okay + ld [wPikachuHappiness], a + + ; Restore d and get the d'th entry in .Moods. pop de dec d - ld hl,Pointer_f43a6 - ld e,d - ld d,$0 - add hl,de - ld a,[hl] - ld b,a + ld hl, .Moods + ld e, d + ld d, $0 + add hl, de + ld a, [hl] + ld b, a + ; Modify Pikachu's mood cp $80 - jr z,.asm_f4384 - ld a,[wd471] - jr c,.asm_f437d + jr z, .done + ld a, [wPikachuMood] + jr c, .decreased cp b - jr nc,.asm_f4384 - ld a,[wd49c] + jr nc, .done + ld a, [wd49c] and a - jr nz,.asm_f4384 - jr .asm_f4380 -.asm_f437d + jr nz, .done + jr .update_mood + +.decreased cp b - jr c,.asm_f4384 -.asm_f4380 - ld a,b - ld [wd471],a -.asm_f4384 + jr c, .done +.update_mood + ld a, b + ld [wPikachuMood], a +.done ret -Pointer_f4385:: ; f4385 (3d:4385) - db $05,$03,$02,$05,$03,$02,$01,$01,$00,$03,$02,$01,$01,$01,$00,$02,$01,$01 - db $fd,$fd,$fb,$ff,$ff,$ff,$fb,$fb,$f6,$fb,$fb,$f6,$f6,$f6,$ec +.HappinessChangeTable: ; f4385 (3d:4385) + ; Increase + db 5, 3, 2 ; Gained a level + db 5, 3, 2 ; HP restore + db 1, 1, 0 ; Unknown (d = 3) + db 3, 2, 1 ; Challenged Gym Leader + db 1, 1, 0 ; Teach TM/HM + db 2, 1, 1 ; Walking around + ; Decrease + db -3, -3, -5 ; Deposited + db -1, -1, -1 ; Fainted in battle + db -5, -5, -10 ; Fainted due to Poison outside of battle + db -5, -5, -10 ; Unknown (d = 10) + db -10, -10, -20 ; Unknown (d = 11) -Pointer_f43a6:: ; f43a6 (3d:43a6) - db $8a,$83,$80,$80,$94,$80,$62,$6c,$62,$6c - db $00 +.Moods: ; f43a6 (3d:43a6) + ; Increase + db $8a ; Gained a level + db $83 ; HP restore + db $80 ; Teach TM/HM + db $80 ; Challenged Gym Leader + db $94 ; Unknown (d = 5) + db $80 ; Unknown (d = 6) + ; Decrease + db $62 ; Deposited + db $6c ; Fainted + db $62 ; Unknown (d = 9) + db $6c ; Unknown (d = 10) + db $00 ; Unknown (d = 11) ; f43b1 (3d:43b1) RedPicBack:: INCBIN "pic/trainer/redb.pic" |