-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathgetRookieEvolutionTarget.asm
285 lines (271 loc) · 7.31 KB
/
getRookieEvolutionTarget.asm
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
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
int getRookieEvolutionTarget(digimonType) {
score = 0
bestScore = 0
bestDigimon = -1
count = 0
for(i = 0; i < 6; i++) {
targetType = load(0x12B671 + (digimonType - 1) * 11 + i)
if(targetType == -1)
continue
reqFlag = load(0x12AC06 + targetType * 0x1C)
isMaxCM = reqFlag & 0x10
isMaxBattles = reqFlag & 0x01
requirementScore = calculateRequirementScore(digimonType, targetType, isMaxCM, isMaxBattles, bestDigimon)
if(requirementScore < 3) // Digimon not enabled
continue
// add required stats to priority score, increase counter per stat
if(load(0x12ABEE + targetType * 0x1C) != -1) { // HP
score += load(0x1557F0) / 10
count++
}
if(load(0x12ABF0 + targetType * 0x1C) != -1) { // MP
score += load(0x1557F2) / 10
count++
}
if(load(0x12ABF2 + targetType * 0x1C) != -1) { // Offense
score += load(0x1557E0)
count++
}
if(load(0x12ABF4 + targetType * 0x1C) != -1) { // Defense
score += load(0x1557E2)
count++
}
if(load(0x12ABF6 + targetType * 0x1C) != -1) { // Speed
score += load(0x1557E4)
count++
}
if(load(0x12ABF8 + targetType * 0x1C) != -1) { // Brains
score += load(0x1557E6)
count++
}
// divide score by counter
score = score / count
// if the score is better than the old best, overwrite it
// Bug: Only reset score and count when this is the case, should reset all the time
if(bestScore < score) {
bestScore = score
bestDigimon = targetType
count = 0
score = 0
}
}
if(bestDigimon != -1)
return bestDigimon
// no Digimon enabled, evolve to Numemon
if(load(0x1384B6) >= 96)
return 11
return bestDigimon
}
0x000e2bb4 addiu r29,r29,0xffc8
0x000e2bb8 sw r31,0x0034(r29)
0x000e2bbc sw r22,0x0030(r29)
0x000e2bc0 sw r21,0x002c(r29)
0x000e2bc4 sw r20,0x0028(r29)
0x000e2bc8 sw r19,0x0024(r29)
0x000e2bcc addu r22,r4,r0
0x000e2bd0 addi r3,r22,-0x0001
0x000e2bd4 sll r2,r3,0x02
0x000e2bd8 add r2,r2,r3
0x000e2bdc sll r2,r2,0x01
0x000e2be0 sw r18,0x0020(r29)
0x000e2be4 sw r17,0x001c(r29)
0x000e2be8 add r3,r2,r3
0x000e2bec lui r2,0x8013
0x000e2bf0 sw r16,0x0018(r29)
0x000e2bf4 addiu r2,r2,0xb66c
0x000e2bf8 addu r2,r2,r3
0x000e2bfc sll r16,r0,0x10
0x000e2c00 sll r19,r0,0x10
0x000e2c04 addiu r18,r2,0x0005
0x000e2c08 addiu r20,r0,0xffff
0x000e2c0c addu r17,r0,r0
0x000e2c10 sra r16,r16,0x10
0x000e2c14 sra r19,r19,0x10
0x000e2c18 beq r0,r0,0x000e2ea4
0x000e2c1c addu r21,r0,r0
0x000e2c20 lb r2,0x0000(r18)
0x000e2c24 addiu r1,r0,0xffff
0x000e2c28 bne r2,r1,0x000e2c38
0x000e2c2c addu r5,r2,r0
0x000e2c30 beq r0,r0,0x000e2ea0
0x000e2c34 addiu r18,r18,0x0001
0x000e2c38 sll r2,r5,0x03
0x000e2c3c sub r2,r2,r5
0x000e2c40 sll r3,r2,0x02
0x000e2c44 lui r2,0x8013
0x000e2c48 addiu r2,r2,0xac06
0x000e2c4c addu r2,r2,r3
0x000e2c50 lb r3,0x0000(r2)
0x000e2c54 addu r4,r22,r0
0x000e2c58 sll r2,r20,0x18
0x000e2c5c sra r2,r2,0x18
0x000e2c60 sw r2,0x0010(r29)
0x000e2c64 andi r2,r3,0x0010
0x000e2c68 sra r2,r2,0x04
0x000e2c6c sll r6,r2,0x18
0x000e2c70 andi r2,r3,0x0001
0x000e2c74 sll r7,r2,0x18
0x000e2c78 sra r6,r6,0x18
0x000e2c7c jal 0x000e26b8
0x000e2c80 sra r7,r7,0x18
0x000e2c84 slti r1,r2,0x0003
0x000e2c88 bne r1,r0,0x000e2e9c
0x000e2c8c nop
0x000e2c90 lb r4,0x0000(r18)
0x000e2c94 addiu r1,r0,0xffff
0x000e2c98 sll r2,r4,0x03
0x000e2c9c sub r2,r2,r4
0x000e2ca0 addu r3,r4,r0
0x000e2ca4 lui r4,0x8013
0x000e2ca8 sll r5,r2,0x02
0x000e2cac addiu r4,r4,0xabee
0x000e2cb0 addu r4,r4,r5
0x000e2cb4 lh r4,0x0000(r4)
0x000e2cb8 nop
0x000e2cbc beq r4,r1,0x000e2d08
0x000e2cc0 addu r2,r5,r0
0x000e2cc4 lui r1,0x8015
0x000e2cc8 lui r4,0x6666
0x000e2ccc lh r5,0x57f0(r1)
0x000e2cd0 ori r4,r4,0x6667
0x000e2cd4 mult r4,r5
0x000e2cd8 mfhi r4
0x000e2cdc srl r5,r5,0x1f
0x000e2ce0 sra r4,r4,0x02
0x000e2ce4 addu r4,r4,r5
0x000e2ce8 sll r4,r4,0x10
0x000e2cec sra r4,r4,0x10
0x000e2cf0 add r4,r16,r4
0x000e2cf4 sll r16,r4,0x10
0x000e2cf8 addi r4,r17,0x0001
0x000e2cfc sll r17,r4,0x10
0x000e2d00 sra r16,r16,0x10
0x000e2d04 sra r17,r17,0x10
0x000e2d08 lui r4,0x8013
0x000e2d0c addiu r4,r4,0xabf0
0x000e2d10 addu r4,r4,r2
0x000e2d14 lh r4,0x0000(r4)
0x000e2d18 addiu r1,r0,0xffff
0x000e2d1c beq r4,r1,0x000e2d68
0x000e2d20 nop
0x000e2d24 lui r1,0x8015
0x000e2d28 lui r4,0x6666
0x000e2d2c lh r5,0x57f2(r1)
0x000e2d30 ori r4,r4,0x6667
0x000e2d34 mult r4,r5
0x000e2d38 mfhi r4
0x000e2d3c srl r5,r5,0x1f
0x000e2d40 sra r4,r4,0x02
0x000e2d44 addu r4,r4,r5
0x000e2d48 sll r4,r4,0x10
0x000e2d4c sra r4,r4,0x10
0x000e2d50 add r4,r16,r4
0x000e2d54 sll r16,r4,0x10
0x000e2d58 addi r4,r17,0x0001
0x000e2d5c sll r17,r4,0x10
0x000e2d60 sra r16,r16,0x10
0x000e2d64 sra r17,r17,0x10
0x000e2d68 lui r4,0x8013
0x000e2d6c addiu r4,r4,0xabf2
0x000e2d70 addu r4,r4,r2
0x000e2d74 lh r4,0x0000(r4)
0x000e2d78 addiu r1,r0,0xffff
0x000e2d7c beq r4,r1,0x000e2da8
0x000e2d80 nop
0x000e2d84 lui r1,0x8015
0x000e2d88 lh r4,0x57e0(r1)
0x000e2d8c nop
0x000e2d90 add r4,r16,r4
0x000e2d94 sll r16,r4,0x10
0x000e2d98 addi r4,r17,0x0001
0x000e2d9c sll r17,r4,0x10
0x000e2da0 sra r16,r16,0x10
0x000e2da4 sra r17,r17,0x10
0x000e2da8 lui r4,0x8013
0x000e2dac addiu r4,r4,0xabf4
0x000e2db0 addu r4,r4,r2
0x000e2db4 lh r4,0x0000(r4)
0x000e2db8 addiu r1,r0,0xffff
0x000e2dbc beq r4,r1,0x000e2de8
0x000e2dc0 nop
0x000e2dc4 lui r1,0x8015
0x000e2dc8 lh r4,0x57e2(r1)
0x000e2dcc nop
0x000e2dd0 add r4,r16,r4
0x000e2dd4 sll r16,r4,0x10
0x000e2dd8 addi r4,r17,0x0001
0x000e2ddc sll r17,r4,0x10
0x000e2de0 sra r16,r16,0x10
0x000e2de4 sra r17,r17,0x10
0x000e2de8 lui r4,0x8013
0x000e2dec addiu r4,r4,0xabf6
0x000e2df0 addu r4,r4,r2
0x000e2df4 lh r4,0x0000(r4)
0x000e2df8 addiu r1,r0,0xffff
0x000e2dfc beq r4,r1,0x000e2e28
0x000e2e00 nop
0x000e2e04 lui r1,0x8015
0x000e2e08 lh r4,0x57e4(r1)
0x000e2e0c nop
0x000e2e10 add r4,r16,r4
0x000e2e14 sll r16,r4,0x10
0x000e2e18 addi r4,r17,0x0001
0x000e2e1c sll r17,r4,0x10
0x000e2e20 sra r16,r16,0x10
0x000e2e24 sra r17,r17,0x10
0x000e2e28 lui r4,0x8013
0x000e2e2c addiu r4,r4,0xabf8
0x000e2e30 addu r2,r4,r2
0x000e2e34 lh r2,0x0000(r2)
0x000e2e38 addiu r1,r0,0xffff
0x000e2e3c beq r2,r1,0x000e2e68
0x000e2e40 nop
0x000e2e44 lui r1,0x8015
0x000e2e48 lh r2,0x57e6(r1)
0x000e2e4c nop
0x000e2e50 add r2,r16,r2
0x000e2e54 sll r16,r2,0x10
0x000e2e58 addi r2,r17,0x0001
0x000e2e5c sll r17,r2,0x10
0x000e2e60 sra r16,r16,0x10
0x000e2e64 sra r17,r17,0x10
0x000e2e68 div r16,r17
0x000e2e6c mflo r2
0x000e2e70 sll r16,r2,0x10
0x000e2e74 sra r16,r16,0x10
0x000e2e78 slt r1,r19,r16
0x000e2e7c beq r1,r0,0x000e2e9c
0x000e2e80 nop
0x000e2e84 sll r19,r16,0x10
0x000e2e88 sll r16,r0,0x10
0x000e2e8c addu r20,r3,r0
0x000e2e90 sra r19,r19,0x10
0x000e2e94 addu r17,r0,r0
0x000e2e98 sra r16,r16,0x10
0x000e2e9c addiu r18,r18,0x0001
0x000e2ea0 addi r21,r21,0x0001
0x000e2ea4 slti r1,r21,0x0006
0x000e2ea8 bne r1,r0,0x000e2c20
0x000e2eac nop
0x000e2eb0 addiu r1,r0,0xffff
0x000e2eb4 bne r20,r1,0x000e2ed8
0x000e2eb8 nop
0x000e2ebc lui r1,0x8014
0x000e2ec0 lh r2,-0x7b4a(r1)
0x000e2ec4 nop
0x000e2ec8 slti r1,r2,0x0060
0x000e2ecc bne r1,r0,0x000e2ed8
0x000e2ed0 nop
0x000e2ed4 addiu r20,r0,0x000b
0x000e2ed8 sll r2,r20,0x10
0x000e2edc lw r31,0x0034(r29)
0x000e2ee0 lw r22,0x0030(r29)
0x000e2ee4 lw r21,0x002c(r29)
0x000e2ee8 lw r20,0x0028(r29)
0x000e2eec lw r19,0x0024(r29)
0x000e2ef0 lw r18,0x0020(r29)
0x000e2ef4 lw r17,0x001c(r29)
0x000e2ef8 lw r16,0x0018(r29)
0x000e2efc sra r2,r2,0x10
0x000e2f00 jr r31
0x000e2f04 addiu r29,r29,0x0038