mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
Re-rip Gen III contest effects
Gen III contest effects were part of the initial data import from brown veekun and so have probably never gotten a proper rip. This commit re-rips contest effect stats, types, combos, and the mapping between contest effects and moves. None of the stats changed (jam & appeal); a few moves got assigned different contest effects (specifically: smokescreen, flash, spite, and shadow ball); and several combos changed. For example, Hail was listed as comboing into the following moves (this is also what Bulbapedia says): Ice Beam, Blizzard, Aurora Beam, Haze, Powder Snow, Icy Wind, Ice Ball, Weather Ball, Sheer Cold, Icicle Spear However, the actual list is much shorter: Blizzard, Powder Snow, Weather Ball I verified on my Ruby cart that Hail->Ice Beam and Hail->Icy Wind are not real combos, and that Hail->Blizzard is. n.b. There are a bunch of unused contest effects in the game: out of 48 effects, 15 are not used by any move. The pokedex doesn't currently include these. I elected not to add them, partly because i didn't want to have to rip flavor text for them, but mostly because if i were going to go that route i would probably reassign contest_effects.id to match their internal ids, which would have made for uglier diffs. Fixes #280
This commit is contained in:
parent
cc2ad50752
commit
9c1d1828c9
3 changed files with 123 additions and 21 deletions
|
@ -1,6 +1,6 @@
|
||||||
first_move_id,second_move_id
|
first_move_id,second_move_id
|
||||||
1,3
|
1,3
|
||||||
1,29
|
1,21
|
||||||
1,185
|
1,185
|
||||||
7,8
|
7,8
|
||||||
7,9
|
7,9
|
||||||
|
@ -37,7 +37,6 @@ first_move_id,second_move_id
|
||||||
74,22
|
74,22
|
||||||
74,71
|
74,71
|
||||||
74,72
|
74,72
|
||||||
74,73
|
|
||||||
74,75
|
74,75
|
||||||
74,76
|
74,76
|
||||||
74,80
|
74,80
|
||||||
|
@ -45,6 +44,7 @@ first_move_id,second_move_id
|
||||||
74,331
|
74,331
|
||||||
74,338
|
74,338
|
||||||
74,345
|
74,345
|
||||||
|
81,169
|
||||||
82,225
|
82,225
|
||||||
82,337
|
82,337
|
||||||
82,349
|
82,349
|
||||||
|
@ -77,8 +77,8 @@ first_move_id,second_move_id
|
||||||
111,205
|
111,205
|
||||||
116,2
|
116,2
|
||||||
116,5
|
116,5
|
||||||
116,21
|
|
||||||
116,25
|
116,25
|
||||||
|
116,29
|
||||||
116,36
|
116,36
|
||||||
116,38
|
116,38
|
||||||
116,167
|
116,167
|
||||||
|
@ -108,8 +108,6 @@ first_move_id,second_move_id
|
||||||
170,66
|
170,66
|
||||||
170,136
|
170,136
|
||||||
170,223
|
170,223
|
||||||
170,276
|
|
||||||
170,329
|
|
||||||
174,180
|
174,180
|
||||||
174,194
|
174,194
|
||||||
174,212
|
174,212
|
||||||
|
@ -132,10 +130,8 @@ first_move_id,second_move_id
|
||||||
199,276
|
199,276
|
||||||
201,28
|
201,28
|
||||||
201,189
|
201,189
|
||||||
201,300
|
|
||||||
201,311
|
201,311
|
||||||
201,328
|
201,328
|
||||||
201,341
|
|
||||||
203,175
|
203,175
|
||||||
203,179
|
203,179
|
||||||
203,194
|
203,194
|
||||||
|
@ -155,17 +151,18 @@ first_move_id,second_move_id
|
||||||
230,77
|
230,77
|
||||||
230,78
|
230,78
|
||||||
230,79
|
230,79
|
||||||
240,3
|
|
||||||
240,55
|
240,55
|
||||||
240,56
|
240,56
|
||||||
240,57
|
240,57
|
||||||
240,61
|
240,61
|
||||||
240,87
|
240,87
|
||||||
|
240,110
|
||||||
240,127
|
240,127
|
||||||
240,128
|
240,128
|
||||||
240,145
|
240,145
|
||||||
240,152
|
240,152
|
||||||
240,190
|
240,190
|
||||||
|
240,250
|
||||||
240,291
|
240,291
|
||||||
240,308
|
240,308
|
||||||
240,311
|
240,311
|
||||||
|
@ -174,7 +171,6 @@ first_move_id,second_move_id
|
||||||
240,346
|
240,346
|
||||||
240,352
|
240,352
|
||||||
241,7
|
241,7
|
||||||
241,27
|
|
||||||
241,52
|
241,52
|
||||||
241,53
|
241,53
|
||||||
241,76
|
241,76
|
||||||
|
@ -186,6 +182,7 @@ first_move_id,second_move_id
|
||||||
241,235
|
241,235
|
||||||
241,236
|
241,236
|
||||||
241,257
|
241,257
|
||||||
|
241,261
|
||||||
241,284
|
241,284
|
||||||
241,299
|
241,299
|
||||||
241,307
|
241,307
|
||||||
|
@ -198,22 +195,14 @@ first_move_id,second_move_id
|
||||||
252,292
|
252,292
|
||||||
254,255
|
254,255
|
||||||
254,256
|
254,256
|
||||||
258,58
|
|
||||||
258,59
|
258,59
|
||||||
258,62
|
|
||||||
258,114
|
|
||||||
258,181
|
258,181
|
||||||
258,196
|
|
||||||
258,301
|
|
||||||
258,311
|
258,311
|
||||||
258,329
|
|
||||||
258,333
|
|
||||||
268,9
|
268,9
|
||||||
268,84
|
268,84
|
||||||
268,85
|
268,85
|
||||||
268,86
|
268,86
|
||||||
268,87
|
268,87
|
||||||
268,192
|
|
||||||
268,209
|
268,209
|
||||||
268,344
|
268,344
|
||||||
268,351
|
268,351
|
||||||
|
|
|
|
@ -106,7 +106,7 @@ id,identifier,generation_id,type_id,power,pp,accuracy,priority,target_id,damage_
|
||||||
105,recover,1,1,,10,,0,7,1,33,,4,23,8
|
105,recover,1,1,,10,,0,7,1,33,,4,23,8
|
||||||
106,harden,1,1,,30,,0,7,1,12,,5,16,13
|
106,harden,1,1,,30,,0,7,1,12,,5,16,13
|
||||||
107,minimize,1,1,,10,,0,7,1,109,,3,16,13
|
107,minimize,1,1,,10,,0,7,1,109,,3,16,13
|
||||||
108,smokescreen,1,1,,20,100,0,10,1,24,,4,21,10
|
108,smokescreen,1,1,,20,100,0,10,1,24,,4,22,10
|
||||||
109,confuse-ray,1,8,,10,100,0,10,1,50,,4,21,10
|
109,confuse-ray,1,8,,10,100,0,10,1,50,,4,21,10
|
||||||
110,withdraw,1,11,,40,,0,7,1,12,,3,15,13
|
110,withdraw,1,11,,40,,0,7,1,12,,3,15,13
|
||||||
111,defense-curl,1,1,,40,,0,7,1,157,,3,16,13
|
111,defense-curl,1,1,,40,,0,7,1,157,,3,16,13
|
||||||
|
@ -146,7 +146,7 @@ id,identifier,generation_id,type_id,power,pp,accuracy,priority,target_id,damage_
|
||||||
145,bubble,1,11,40,30,100,0,11,3,71,10,3,8,2
|
145,bubble,1,11,40,30,100,0,11,3,71,10,3,8,2
|
||||||
146,dizzy-punch,1,1,70,10,100,0,10,2,77,20,1,4,16
|
146,dizzy-punch,1,1,70,10,100,0,10,2,77,20,1,4,16
|
||||||
147,spore,1,12,,15,100,0,10,1,2,,2,5,10
|
147,spore,1,12,,15,100,0,10,1,2,,2,5,10
|
||||||
148,flash,1,1,,20,100,0,10,1,24,,2,21,10
|
148,flash,1,1,,20,100,0,10,1,24,,2,22,10
|
||||||
149,psywave,1,14,,15,100,0,10,3,89,,4,14,5
|
149,psywave,1,14,,15,100,0,10,3,89,,4,14,5
|
||||||
150,splash,1,1,,40,,0,7,1,86,,3,28,16
|
150,splash,1,1,,40,,0,7,1,86,,3,28,16
|
||||||
151,acid-armor,1,4,,20,,0,7,1,52,,5,32,11
|
151,acid-armor,1,4,,20,,0,7,1,52,,5,32,11
|
||||||
|
@ -178,7 +178,7 @@ id,identifier,generation_id,type_id,power,pp,accuracy,priority,target_id,damage_
|
||||||
177,aeroblast,2,3,100,5,95,0,10,3,44,,1,2,22
|
177,aeroblast,2,3,100,5,95,0,10,3,44,,1,2,22
|
||||||
178,cotton-spore,2,12,,40,100,0,11,1,61,,2,10,1
|
178,cotton-spore,2,12,,40,100,0,11,1,61,,2,10,1
|
||||||
179,reversal,2,2,,15,100,0,10,2,100,,1,28,15
|
179,reversal,2,2,,15,100,0,10,2,100,,1,28,15
|
||||||
180,spite,2,8,,10,100,0,10,1,101,,5,28,19
|
180,spite,2,8,,10,100,0,10,1,101,,5,26,19
|
||||||
181,powder-snow,2,15,40,25,100,0,11,3,6,10,2,1,5
|
181,powder-snow,2,15,40,25,100,0,11,3,6,10,2,1,5
|
||||||
182,protect,2,1,,10,,4,7,1,112,,3,15,16
|
182,protect,2,1,,10,,4,7,1,112,,3,15,16
|
||||||
183,mach-punch,2,2,40,30,100,1,10,2,104,,1,30,1
|
183,mach-punch,2,2,40,30,100,1,10,2,104,,1,30,1
|
||||||
|
@ -245,7 +245,7 @@ id,identifier,generation_id,type_id,power,pp,accuracy,priority,target_id,damage_
|
||||||
244,psych-up,2,1,,10,,0,10,1,144,,4,12,11
|
244,psych-up,2,1,,10,,0,10,1,144,,4,12,11
|
||||||
245,extreme-speed,2,1,80,5,100,2,10,2,104,,1,30,1
|
245,extreme-speed,2,1,80,5,100,2,10,2,104,,1,30,1
|
||||||
246,ancient-power,2,6,60,5,100,0,10,3,141,10,5,32,18
|
246,ancient-power,2,6,60,5,100,0,10,3,141,10,5,32,18
|
||||||
247,shadow-ball,2,8,80,15,100,0,10,3,73,20,4,21,17
|
247,shadow-ball,2,8,80,15,100,0,10,3,73,20,4,22,17
|
||||||
248,future-sight,2,14,120,10,100,0,10,3,149,,4,24,17
|
248,future-sight,2,14,120,10,100,0,10,3,149,,4,24,17
|
||||||
249,rock-smash,2,2,40,15,100,0,10,2,70,50,5,29,18
|
249,rock-smash,2,2,40,15,100,0,10,2,70,50,5,29,18
|
||||||
250,whirlpool,2,11,35,15,85,0,10,3,262,100,2,24,21
|
250,whirlpool,2,11,35,15,85,0,10,3,262,100,2,24,21
|
||||||
|
|
|
113
scripts/gen-iii-contest-effects.py
Normal file
113
scripts/gen-iii-contest-effects.py
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
This is an unmaintained one-shot script, only included in the repo for
|
||||||
|
reference.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import struct
|
||||||
|
|
||||||
|
def main():
|
||||||
|
NUM_MOVES = 354
|
||||||
|
with open("pokeruby.gba", 'rb') as f:
|
||||||
|
f.seek(0x3cf594 )
|
||||||
|
data = f.read(8 * (NUM_MOVES + 1))
|
||||||
|
|
||||||
|
|
||||||
|
effects = []
|
||||||
|
combo_id_map = {} # combo_id => move_id
|
||||||
|
combo_pairs = [] # [(combo starter, move id)]
|
||||||
|
|
||||||
|
with open("update_contest_effect_ids.sql", "w") as f:
|
||||||
|
for i in range(NUM_MOVES+1):
|
||||||
|
effect, type, combo_id, *combo_prev = struct.unpack("<BBBBBBBx", data[i*8:(i+1)*8])
|
||||||
|
print(i, idmap[effect], type, combo_id, combo_prev)
|
||||||
|
if i:
|
||||||
|
print("UPDATE moves SET contest_effect_id = %d, contest_type_id = %d WHERE id = %d;" % (idmap[effect], type+1, i), file=f)
|
||||||
|
effects.append(effect)
|
||||||
|
if combo_id:
|
||||||
|
combo_id_map.setdefault(combo_id, []).append(i)
|
||||||
|
for c in combo_prev:
|
||||||
|
combo_pairs.append((c, i))
|
||||||
|
|
||||||
|
move_pairs = []
|
||||||
|
for combo_id, second_move_id in combo_pairs:
|
||||||
|
for id1 in combo_id_map.get(combo_id, ()):
|
||||||
|
move_pairs.append((id1, second_move_id))
|
||||||
|
move_pairs.sort()
|
||||||
|
with open("contest_combos.csv", "w") as f:
|
||||||
|
print("first_move_id,second_move_id", file=f)
|
||||||
|
for first, second in move_pairs:
|
||||||
|
print(first, second, sep=",", file=f)
|
||||||
|
|
||||||
|
|
||||||
|
num_effects = max(effects)+1
|
||||||
|
with open("pokeruby.gba", 'rb') as f:
|
||||||
|
f.seek(0x3d00ac)
|
||||||
|
data = f.read(4 * num_effects)
|
||||||
|
|
||||||
|
with open("contest_effects.csv", "w") as f:
|
||||||
|
print("id,effect_type,appeal,jam", file=f)
|
||||||
|
for i in range(num_effects):
|
||||||
|
if i not in effects:
|
||||||
|
continue
|
||||||
|
effectType, appeal, jam = struct.unpack("<BBBx", data[i*4:(i+1)*4])
|
||||||
|
#print(idmap[i],effectType, appeal//10, jam//10, sep=",")
|
||||||
|
print(idmap[i], appeal//10, jam//10, sep=",", file=f)
|
||||||
|
|
||||||
|
idmap = {
|
||||||
|
0: 1, # CONTEST_EFFECT_HIGHLY_APPEALING
|
||||||
|
1: 3, # CONTEST_EFFECT_USER_MORE_EASILY_STARTLED
|
||||||
|
2: 7, # CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES
|
||||||
|
3: 17, # CONTEST_EFFECT_REPETITION_NOT_BORING
|
||||||
|
4: 16, # CONTEST_EFFECT_AVOID_STARTLE_ONCE
|
||||||
|
5: 15, # CONTEST_EFFECT_AVOID_STARTLE
|
||||||
|
#6: # CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY
|
||||||
|
#7: # CONTEST_EFFECT_USER_LESS_EASILY_STARTLED
|
||||||
|
#8: # CONTEST_EFFECT_STARTLE_FRONT_MON
|
||||||
|
#9: # CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS
|
||||||
|
10: 9, # CONTEST_EFFECT_STARTLE_PREV_MON
|
||||||
|
11: 8, # CONTEST_EFFECT_STARTLE_PREV_MONS
|
||||||
|
12: 4, # CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON
|
||||||
|
13: 5, # CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS
|
||||||
|
#14: # CONTEST_EFFECT_STARTLE_PREV_MON_2
|
||||||
|
#15: # CONTEST_EFFECT_STARTLE_PREV_MONS_2
|
||||||
|
16: 22, # CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION
|
||||||
|
17: 10, # CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION
|
||||||
|
18: 6, # CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN
|
||||||
|
19: 23, # CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL
|
||||||
|
#20: 0, # CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL
|
||||||
|
#21: 0, # CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL
|
||||||
|
#22: 0, # CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL
|
||||||
|
#23: 0, # CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL
|
||||||
|
#24: 0, # CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL
|
||||||
|
#25: # CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS
|
||||||
|
26: 18, # CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS
|
||||||
|
27: 33, # CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS
|
||||||
|
#28: # CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION
|
||||||
|
29: 27, # CONTEST_EFFECT_BETTER_IF_FIRST
|
||||||
|
30: 28, # CONTEST_EFFECT_BETTER_IF_LAST
|
||||||
|
31: 20, # CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES
|
||||||
|
32: 19, # CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE
|
||||||
|
33: 26, # CONTEST_EFFECT_BETTER_WHEN_LATER
|
||||||
|
34: 25, # CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING
|
||||||
|
35: 12, # CONTEST_EFFECT_BETTER_IF_SAME_TYPE
|
||||||
|
#36: # CONTEST_EFFECT_BETTER_IF_DIFF_TYPE
|
||||||
|
37: 2, # CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL
|
||||||
|
38: 32, # CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS
|
||||||
|
39: 29, # CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION
|
||||||
|
40: 30, # CONTEST_EFFECT_NEXT_APPEAL_EARLIER
|
||||||
|
41: 31, # CONTEST_EFFECT_NEXT_APPEAL_LATER
|
||||||
|
#42: # CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER
|
||||||
|
43: 21, # CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER
|
||||||
|
44: 13, # CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST
|
||||||
|
45: 14, # CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS
|
||||||
|
46: 11, # CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED
|
||||||
|
47: 24, # CONTEST_EFFECT_DONT_EXCITE_AUDIENCE
|
||||||
|
}
|
||||||
|
|
||||||
|
from collections import Counter
|
||||||
|
c = Counter(idmap.values())
|
||||||
|
print([v for v in c if c[v] > 1])
|
||||||
|
assert len(idmap) == len(set(idmap.values()))
|
||||||
|
|
||||||
|
main()
|
Loading…
Reference in a new issue