1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
|
GetFirstPokemonHappiness:
ld hl, wPartyMon1Happiness
ld bc, PARTYMON_STRUCT_LENGTH
ld de, wPartySpecies
.loop
ld a, [de]
cp EGG
jr nz, .done
inc de
add hl, bc
jr .loop
.done
ld [wNamedObjectIndex], a
ld a, [hl]
ld [wScriptVar], a
call GetPokemonName
jp CopyPokemonName_Buffer1_Buffer3
CheckFirstMonIsEgg:
ld a, [wPartySpecies]
ld [wNamedObjectIndex], a
cp EGG
ld a, TRUE
jr z, .egg
xor a
.egg
ld [wScriptVar], a
call GetPokemonName
jp CopyPokemonName_Buffer1_Buffer3
ChangeHappiness:
; Perform happiness action c on wCurPartyMon
ld a, [wCurPartyMon]
inc a
ld e, a
ld d, 0
ld hl, wPartySpecies - 1
add hl, de
ld a, [hl]
cp EGG
ret z
push bc
ld hl, wPartyMon1Happiness
ld bc, PARTYMON_STRUCT_LENGTH
ld a, [wCurPartyMon]
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, [wCurPartyMon]
ld b, a
ld a, [wPartyMenuCursor]
cp b
ret nz
ld a, [de]
ld [wBattleMonHappiness], a
ret
INCLUDE "data/events/happiness_changes.asm"
StepHappiness::
; 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, wPartyCount
ld a, [de]
and a
ret z
ld c, a
ld hl, wPartyMon1Happiness
.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::
; Raise the experience of Day-Care Pokémon every step cycle.
ld a, [wDayCareMan]
bit DAYCAREMAN_HAS_MON_F, 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 DAYCARELADY_HAS_MON_F, 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 DAYCAREMAN_MONS_COMPATIBLE_F, [hl]
ret z
ld hl, wStepsToEgg
dec [hl]
ret nz
call Random
ld [hl], a
callfar CheckBreedmonCompatibility
ld a, [wBreedingCompatibility]
cp 230
ld b, 31 percent + 1
jr nc, .okay
ld a, [wBreedingCompatibility]
cp 170
ld b, 16 percent
jr nc, .okay
ld a, [wBreedingCompatibility]
cp 110
ld b, 12 percent
jr nc, .okay
ld b, 4 percent
.okay
call Random
cp b
ret nc
ld hl, wDayCareMan
res DAYCAREMAN_MONS_COMPATIBLE_F, [hl]
set DAYCAREMAN_HAS_EGG_F, [hl]
ret
|