diff options
Diffstat (limited to 'engine/events/happiness_egg.asm')
-rwxr-xr-x | engine/events/happiness_egg.asm | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/engine/events/happiness_egg.asm b/engine/events/happiness_egg.asm new file mode 100755 index 000000000..a4ae8b7e6 --- /dev/null +++ b/engine/events/happiness_egg.asm @@ -0,0 +1,223 @@ +GetFirstPokemonHappiness: ; 718d + ld hl, PartyMon1Happiness + ld bc, PARTYMON_STRUCT_LENGTH + ld de, PartySpecies +.loop + ld a, [de] + cp EGG + jr nz, .done + inc de + add hl, bc + jr .loop + +.done + ld [wd265], a + ld a, [hl] + ld [ScriptVar], a + call GetPokemonName + jp CopyPokemonName_Buffer1_Buffer3 + +CheckFirstMonIsEgg: ; 71ac + ld a, [PartySpecies] + ld [wd265], a + cp EGG + ld a, $1 + jr z, .egg + xor a + +.egg + ld [ScriptVar], a + call GetPokemonName + jp CopyPokemonName_Buffer1_Buffer3 + +ChangeHappiness: ; 71c2 +; Perform happiness action c on CurPartyMon + + ld a, [CurPartyMon] + inc a + ld e, a + ld d, 0 + ld hl, PartySpecies - 1 + add hl, de + ld a, [hl] + cp EGG + ret z + + push bc + ld hl, PartyMon1Happiness + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + pop bc + + ld d, h + ld e, l + + push de + ld a, [de] + cp HAPPINESS_THRESHOLD_1 + ld e, 0 + jr c, .ok + inc e + cp HAPPINESS_THRESHOLD_2 + jr c, .ok + inc e + +.ok + dec c + ld b, 0 + ld hl, HappinessChanges + add hl, bc + add hl, bc + add hl, bc + ld d, 0 + add hl, de + ld a, [hl] + cp $64 ; why not $80? + pop de + + ld a, [de] + jr nc, .negative + add [hl] + jr nc, .done + ld a, -1 + jr .done + +.negative + add [hl] + jr c, .done + xor a + +.done + ld [de], a + ld a, [wBattleMode] + and a + ret z + ld a, [CurPartyMon] + ld b, a + ld a, [wPartyMenuCursor] + cp b + ret nz + ld a, [de] + ld [BattleMonHappiness], a + ret + + +INCLUDE "data/happiness_changes.asm" + + +StepHappiness:: ; 725a +; Raise the party's happiness by 1 point every other step cycle. + + ld hl, wHappinessStepCount + ld a, [hl] + inc a + and 1 + ld [hl], a + ret nz + + ld de, PartyCount + ld a, [de] + and a + ret z + + ld c, a + ld hl, PartyMon1Happiness +.loop + inc de + ld a, [de] + cp EGG + jr z, .next + inc [hl] + jr nz, .next + ld [hl], $ff + +.next + push de + ld de, PARTYMON_STRUCT_LENGTH + add hl, de + pop de + dec c + jr nz, .loop + ret + + +DayCareStep:: ; 7282 +; Raise the experience of Day-Care Pokémon every step cycle. + + ld a, [wDayCareMan] + bit 0, a + jr z, .day_care_lady + + ld a, [wBreedMon1Level] ; level + cp MAX_LEVEL + jr nc, .day_care_lady + ld hl, wBreedMon1Exp + 2 ; exp + inc [hl] + jr nz, .day_care_lady + dec hl + inc [hl] + jr nz, .day_care_lady + dec hl + inc [hl] + ld a, [hl] + cp HIGH(MAX_DAY_CARE_EXP >> 8) + jr c, .day_care_lady + ld a, HIGH(MAX_DAY_CARE_EXP >> 8) + ld [hl], a + +.day_care_lady + ld a, [wDayCareLady] + bit 0, a + jr z, .check_egg + + ld a, [wBreedMon2Level] ; level + cp MAX_LEVEL + jr nc, .check_egg + ld hl, wBreedMon2Exp + 2 ; exp + inc [hl] + jr nz, .check_egg + dec hl + inc [hl] + jr nz, .check_egg + dec hl + inc [hl] + ld a, [hl] + cp HIGH(MAX_DAY_CARE_EXP >> 8) + jr c, .check_egg + ld a, HIGH(MAX_DAY_CARE_EXP >> 8) + ld [hl], a + +.check_egg + ld hl, wDayCareMan + bit 5, [hl] ; egg + ret z + ld hl, wStepsToEgg + dec [hl] + ret nz + + call Random + ld [hl], a + callfar CheckBreedmonCompatibility + ld a, [wd265] + cp 230 + ld b, 32 percent - 1 + jr nc, .okay + ld a, [wd265] + cp 170 + ld b, 16 percent + jr nc, .okay + ld a, [wd265] + cp 110 + ld b, 12 percent + jr nc, .okay + ld b, 4 percent + +.okay + call Random + cp b + ret nc + ld hl, wDayCareMan + res 5, [hl] + set 6, [hl] + ret |