summaryrefslogtreecommitdiff
path: root/engine/bank3d/main.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/bank3d/main.asm')
-rw-r--r--engine/bank3d/main.asm158
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"