Merge pull request #3 from PikalaxALT/master

ModifyPikachuHappiness
This commit is contained in:
luckytyphlosion 2015-10-11 23:56:16 -04:00
commit 9b2c58dfd3
13 changed files with 159 additions and 110 deletions

View File

@ -196,3 +196,16 @@ LINK_STATE_START_BATTLE EQU $03 ; pre-battle initialisation
LINK_STATE_BATTLING EQU $04 ; in a link battle
LINK_STATE_RESET EQU $05 ; reset game (unused)
LINK_STATE_TRADING EQU $32 ; in a link trade
const_value set 1
const PIKAHAPPY_LEVELUP
const PIKAHAPPY_USEDITEM
const PIKAHAPPY_USEDXITEM
const PIKAHAPPY_GYMLEADER
const PIKAHAPPY_USEDTMHM
const PIKAHAPPY_WALKING
const PIKAHAPPY_DEPOSITED
const PIKAHAPPY_FAINTED
const PIKAHAPPY_PSNFNT
const PIKAHAPPY_10
const PIKAHAPPY_11

View File

@ -48,10 +48,12 @@ asm_f601d: ; f601d (f:601d)
ld [wEnemyMonPartyPos], a
ld a, $2
ld [W_ISINBATTLE], a
; Is this a major story battle?
ld a,[W_LONEATTACKNO]
and a
jp z,InitBattle_Common
callabd_Func_f430a $4 ; useless since already in bank3d
callabd_ModifyPikachuHappiness PIKAHAPPY_GYMLEADER ; useless since already in bank3d
jp InitBattle_Common
InitWildBattle: ; f607c (3d:607c)

View File

@ -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"

View File

@ -10,7 +10,7 @@ Func_fc4dd:: ; fc4dd (3f:44dd)
ld a,[wd430]
bit 7,a
jr nz,.asm_fc4f8
call Func_fcdb8
call IsPikachuInOurParty
jr nc,.asm_fc4f8
ld a,[wWalkBikeSurfState]
and a
@ -1470,14 +1470,14 @@ Func_fcd83: ; fcd83 (3f:4d83)
Func_fcdad: ; fcdad (3f:4dad)
push bc
push af
ld a,[wd470]
ld a,[wPikachuHappiness]
cp $50
pop bc
ld a,b
pop bc
ret
Func_fcdb8:: ; fcdb8 (3f:4db8)
IsPikachuInOurParty:: ; fcdb8 (3f:4db8)
ld hl,wPartySpecies
ld de,wPartyMon1OTID
ld bc,wPartyMonOT
@ -1547,7 +1547,7 @@ Func_fce0d:: ; fce0d (3f:4e0d)
ld de,wBoxMonOT
jr asm_fce21
Func_fce18:: ; fce18 (3f:4e18)
IsThisPartymonOurPikachu:: ; fce18 (3f:4e18)
ld hl,wPartyMon1
ld bc,wPartyMon2 - wPartyMon1
ld de,wPartyMonOT
@ -1590,12 +1590,12 @@ asm_fce21: ; fce21 (3f:4e21)
Func_fce5a:: ; fce5a (3f:4e5a)
push de
call Func_fcdb8
call IsPikachuInOurParty
pop de
ret nc
ld a,d
cp $80
ld a,[wd471]
ld a,[wPikachuMood]
jr c,.asm_fce6c
cp d
jr c,.asm_fce6e
@ -1605,7 +1605,7 @@ Func_fce5a:: ; fce5a (3f:4e5a)
ret c
.asm_fce6e
ld a,d
ld [wd471],a
ld [wPikachuMood],a
ret
Func_fce73:: ; fce73 (3f:4e73)
@ -1619,7 +1619,7 @@ Func_fce73:: ; fce73 (3f:4e73)
cp $ff
jr z,.asm_fcea9
push hl
call Func_fce18
call IsThisPartymonOurPikachu
pop hl
jr nc,.asm_fce9e
ld a,[wWhichPokemon]

View File

@ -156,7 +156,7 @@ HoFDisplayAndRecordMonInfo: ; 7030e (1c:430e)
call HoFDisplayMonInfo
ld a, [wHoFPartyMonIndex]
ld [wWhichPokemon], a
callab Func_fce18 ; 3f:4e18
callab IsThisPartymonOurPikachu ; 3f:4e18
jr nc, .asm_70336
ld e, $22
callab Func_f0000

View File

@ -440,7 +440,7 @@ ItemUseBall: ; d3ad (3:53ad)
ld a, $1
ld [wd49c], a
ld a, $85
ld [wd471], a
ld [wPikachuMood], a
ld a,[wPartyCount]
cp PARTY_LENGTH ;is party full?
jr z,.sendToBox
@ -673,7 +673,7 @@ ItemUseEvoStone: ; d7d0 (3:57d0)
ld [wcf91],a
call Func_d85d
jr nc, .noEffect
callab Func_fce18
callab IsThisPartymonOurPikachu
jr nc, .notPlayerPikachu
ld e, $1b
callab Func_f0000
@ -685,7 +685,7 @@ ItemUseEvoStone: ; d7d0 (3:57d0)
ld a, $4
ld [wd49c], a
ld a, $82
ld [wd471], a
ld [wPikachuMood], a
jr .canceledItemUse
.notPlayerPikachu
ld a,SFX_HEAL_AILMENT
@ -799,7 +799,7 @@ ItemUseMedicine: ; d8ae (3:58ae)
jr nc, .asm_d906
push hl
push de
callabd_Func_f430a $2
callabd_ModifyPikachuHappiness PIKAHAPPY_USEDITEM
pop de
pop hl
.asm_d906
@ -1383,7 +1383,7 @@ ItemUseMedicine: ; d8ae (3:58ae)
xor a
ld [wForceEvolution],a
callabd_Func_f430a $1
callabd_ModifyPikachuHappiness PIKAHAPPY_LEVELUP
ld a, [wWhichPokemon]
push af
ld a, [wUsedItemOnWhichPokemon]
@ -1538,7 +1538,7 @@ ItemUseXAccuracy: ; de3e (3:5e3e)
jp z,ItemUseNotTime
ld hl,W_PLAYERBATTSTATUS2
set UsingXAccuracy,[hl] ; X Accuracy bit
callabd_Func_f430a $3
callabd_ModifyPikachuHappiness PIKAHAPPY_USEDXITEM
jp PrintItemUseTextAndRemoveItem
; This function is bugged and never works. It always jumps to ItemUseNotTime.
@ -1651,7 +1651,7 @@ ItemUseGuardSpec: ; df11 (3:5f11)
push af
ld a, [wPlayerMonNumber]
ld [wWhichPokemon], a
callabd_Func_f430a $3
callabd_ModifyPikachuHappiness PIKAHAPPY_USEDXITEM
pop af
ld [wWhichPokemon], a
@ -1676,7 +1676,7 @@ ItemUseDireHit: ; df42 (3:5f42)
push af
ld a, [wPlayerMonNumber]
ld [wWhichPokemon], a
callabd_Func_f430a $3
callabd_ModifyPikachuHappiness PIKAHAPPY_USEDXITEM
pop af
ld [wWhichPokemon], a
@ -1715,7 +1715,7 @@ ItemUseXStat: ; df69 (3:df69)
push af
ld a, [wPlayerMonNumber]
ld [wWhichPokemon], a
callabd_Func_f430a $3
callabd_ModifyPikachuHappiness PIKAHAPPY_USEDXITEM
pop af
ld [wWhichPokemon], a
@ -2012,7 +2012,7 @@ FishingInit: ; e182 (3:6182)
ld a, $2
ld [wd49c], a
ld a, $81
ld [wd471], a
ld [wPikachuMood], a
ld c,80
call DelayFrames
and a
@ -2372,8 +2372,8 @@ ItemUseTMHM: ; e374 (3:6374)
push af
ld a,d
ld [wWhichPokemon],a
callabd_Func_f430a $5
callab Func_fce18
callabd_ModifyPikachuHappiness PIKAHAPPY_USEDTMHM
callab IsThisPartymonOurPikachu
jr nc,.notTeachingThunderboltOrThunderToPikachu
ld a,[wcf91]
cp a,TM_24 ; are we teaching thunderbolt to the player pikachu?
@ -2384,7 +2384,7 @@ ItemUseTMHM: ; e374 (3:6374)
ld a, $5
ld [wd49c], a
ld a, $85
ld [wd471], a
ld [wPikachuMood], a
.notTeachingThunderboltOrThunderToPikachu
pop af
ld [wWhichPokemon], a

View File

@ -228,7 +228,7 @@ BillsPCDeposit: ; 2156d (8:556d)
ld hl, wPartyCount
call DisplayMonListMenu
jp c, BillsPCMenu
callab Func_fce18
callab IsThisPartymonOurPikachu
jr nc, .asm_215ad
call Func_154a
jr z, .asm_215ad
@ -238,7 +238,7 @@ BillsPCDeposit: ; 2156d (8:556d)
.asm_215ad
call DisplayDepositWithdrawMenu
jp nc, BillsPCMenu
callab Func_fce18
callab IsThisPartymonOurPikachu
jr nc, .asm_215c9
ld e, $1b
callab Func_f0000
@ -247,7 +247,7 @@ BillsPCDeposit: ; 2156d (8:556d)
ld a, [wcf91]
call PlayCry
.asm_215cf
callabd_Func_f430a $7
callabd_ModifyPikachuHappiness PIKAHAPPY_DEPOSITED
ld a, PARTY_TO_BOX
ld [wMoveMonType], a
call MoveMon
@ -257,7 +257,7 @@ BillsPCDeposit: ; 2156d (8:556d)
call WaitForSoundToFinish
ld hl, wBoxNumString
ld a, [wCurrentBoxNum]
and $7f
and " "
cp 9
jr c, .singleDigitBoxNum
sub 9
@ -269,7 +269,7 @@ BillsPCDeposit: ; 2156d (8:556d)
add "1"
.next
ld [hli], a
ld [hl], $50
ld [hl], "@"
ld hl, MonWasStoredText
call PrintText
jp BillsPCMenu

View File

@ -248,7 +248,7 @@ SaveSAVtoSRAM2: ; 73b56 (1c:7b56)
ld de, sMainData
ld bc, wPokedexSeenEnd - wPokedexOwned
call CopyData
ld hl, wd470
ld hl, wPikachuHappiness
ld de, sMainData + $179
ld a, [hli]
ld [de], a

View File

@ -475,7 +475,7 @@ HandlePartyMenuInput:: ; 1226 (0:1226)
jr nz,.asm_1258
ld a,[wCurrentMenuItem]
ld [wWhichPokemon],a
callab Func_fce18 ; 3f:4e18
callab IsThisPartymonOurPikachu ; 3f:4e18
jr nc,.asm_1258
call Func_154a
jr nz,.asm_128f
@ -2958,7 +2958,7 @@ IsItemInBag:: ; 3422 (0:3422)
IsSurfingPikachuInParty:: ; 342a (0:342a)
; set bit 6 of wd472 if true
; also calls Func_3467, which is a bankswitch to Func_fcdb8
; also calls Func_3467, which is a bankswitch to IsPikachuInOurParty
ld a,[wd472]
and $3f
ld [wd472],a
@ -3001,7 +3001,7 @@ IsSurfingPikachuInParty:: ; 342a (0:342a)
Func_3467:: ; 3467 (0:3467)
push hl
push bc
callab Func_fcdb8
callab IsPikachuInOurParty
pop bc
pop hl
ret nc

View File

@ -97,16 +97,16 @@ callab: MACRO
call Bankswitch
ENDM
calladb_Func_f430a: MACRO
ld hl, Func_f430a
calladb_ModifyPikachuHappiness: MACRO
ld hl, ModifyPikachuHappiness
ld d, \1
ld b, BANK(Func_f430a)
ld b, BANK(ModifyPikachuHappiness)
call Bankswitch
ENDM
callabd_Func_f430a: MACRO
ld hl, Func_f430a
ld b, BANK(Func_f430a)
callabd_ModifyPikachuHappiness: MACRO
ld hl, ModifyPikachuHappiness
ld b, BANK(ModifyPikachuHappiness)
ld d, \1
call Bankswitch
ENDM

View File

@ -2537,11 +2537,11 @@ ApplyOutOfBattlePoisonDamage: ; c3de (3:43de)
ld a, $d0
ld [hSpriteIndexOrTextID], a
call DisplayTextID
callab Func_fce18
callab IsThisPartymonOurPikachu
jr nc, .curMonNotPlayerPikachu
ld e, $3
callab Func_f0000
callab_Func_f430a_ld_d $9
callab_ModifyPikachuHappiness_ld_d PIKAHAPPY_PSNFNT
.curMonNotPlayerPikachu
pop de
pop hl
@ -2607,9 +2607,9 @@ Func_c4c7: ; c4c7 (3:44c7)
call Random
and $1
jr z, .asm_c4de
callab_Func_f430a_ld_d $6
callab_ModifyPikachuHappiness_ld_d PIKAHAPPY_WALKING
.asm_c4de
ld hl, wd471
ld hl, wPikachuMood
ld a, [hl]
cp $80
jr z, .asm_c4ef

View File

@ -2523,8 +2523,8 @@ wd44b:: ds 1
ds 36
wd470:: ds 1
wd471:: ds 1
wPikachuHappiness:: ds 1
wPikachuMood:: ds 1
wd472:: ds 1
wd473:: ds 1

View File

@ -628,11 +628,11 @@ ApplyOutOfBattlePoisonDamage: ; c3de (3:43de)
ld a, $d0
ld [hSpriteIndexOrTextID], a
call DisplayTextID
callab Func_fce18
callab IsThisPartymonOurPikachu
jr nc, .curMonNotPlayerPikachu
ld e, $3
callab Func_f0000
calladb_Func_f430a $9
calladb_ModifyPikachuHappiness PIKAHAPPY_PSNFNT
.curMonNotPlayerPikachu
pop de
pop hl
@ -698,9 +698,9 @@ Func_c4c7: ; c4c7 (3:44c7)
call Random
and $1
jr z, .asm_c4de
calladb_Func_f430a $6
calladb_ModifyPikachuHappiness $6
.asm_c4de
ld hl, wd471
ld hl, wPikachuMood
ld a, [hl]
cp $80
jr z, .asm_c4ef