1#![allow(non_camel_case_types)]
2#![allow(clippy::upper_case_acronyms)]
3
4use strum_macros::{Display, EnumString, FromRepr, IntoStaticStr};
7
8#[derive(Debug, Clone, Copy, EnumString, IntoStaticStr, Display, FromRepr, PartialEq, Eq)]
9#[repr(u16)]
10pub enum Item {
11 UNKNOWN = u16::MAX,
13
14 CAPSULE = 0x00,
16 BOX = 0x01,
17 BARREL = 0x02,
18 EGG = 0x03,
19 PARTY_BALL = 0x04,
20 BARREL_CANNON = 0x05,
21 BOB_OMB = 0x06,
22 MR_SATURN = 0x07,
23 HEART_CONTAINER = 0x08,
24 MAXIM_TOMATO = 0x09,
25 STARMAN = 0x0A,
26 HOME_RUN_BAT = 0x0B,
27 BEAM_SWORD = 0x0C,
28 PARASOL = 0x0D,
29 GREEN_SHELL_1 = 0x0E,
30 RED_SHELL_1 = 0x0F,
31 RAY_GUN = 0x10,
32 FREEZIE = 0x11,
33 FOOD = 0x12,
34 PROXIMITY_MINE = 0x13,
35 FLIPPER = 0x14,
36 SUPER_SCOPE = 0x15,
37 STAR_ROD = 0x16,
38 LIP_STICK = 0x17,
39 FAN = 0x18,
40 FIRE_FLOWER = 0x19,
41 SUPER_MUSHROOM = 0x1A,
42 POISON_MUSHROOM = 0x1B,
43 HAMMER = 0x1C,
44 WARP_STAR = 0x1D,
45 SCREW_ATTACK = 0x1E,
46 BUNNY_HOOD = 0x1F,
47 METAL_BOX = 0x20,
48 CLOAKING_DEVICE = 0x21,
49 POKE_BALL = 0x22,
50
51 RAY_GUN_RECOIL_EFFECT = 0x23,
53 STAR_ROD_STAR = 0x24,
54 LIP_STICK_DUST = 0x25,
55 SUPER_SCOPE_BEAM = 0x26,
56 RAY_GUN_BEAM = 0x27,
57 HAMMER_HEAD = 0x28,
58 FLOWER = 0x29,
59 YOSHI_EGG_1 = 0x2A,
60
61 GOOMBA = 0x2B,
63 REDEAD = 0x2C,
64 OCTAROK = 0x2D,
65 OTTOSEA = 0x2E,
66 STONE = 0x2F,
67
68 MARIO_FIRE = 0x30,
70 DR_MARIO_PILL = 0x31,
71 KIRBY_CUTTER_BEAM = 0x32,
72 KIRBY_HAMMER = 0x33,
73 UNKNOWN_1 = 0x34,
75 UNKNOWN_2 = 0x35,
76 FOX_LASER = 0x36,
77 FALCO_LASER = 0x37,
78 FOX_SHADOW = 0x38,
79 FALCO_SHADOW = 0x39,
80 LINK_BOMB = 0x3A,
81 YOUNG_LINK_BOMB = 0x3B,
82 LINK_BOOMERANG = 0x3C,
83 YOUNG_LINK_BOOMERANG = 0x3D,
84 LINK_HOOKSHOT = 0x3E,
85 YOUNG_LINK_HOOKSHOT = 0x3F,
86 LINK_ARROW_1 = 0x40,
87 YOUNG_LINK_FIRE_ARROW = 0x41,
88 NESS_PK_FIRE = 0x42,
90 NESS_PK_FIRE_PILLAR = 0x43,
92 NESS_PK_FLASH_CHARGE = 0x44,
93 NESS_PK_THUNDER = 0x45,
95 NESS_PK_THUNDER_1 = 0x46,
97 NESS_PK_THUNDER_2 = 0x47,
99 NESS_PK_THUNDER_3 = 0x48,
101 NESS_PK_THUNDER_4 = 0x49,
103 FOX_BLASTER = 0x4A,
104 FALCO_BLASTER = 0x4B,
105 LINK_BOW = 0x4C,
106 YOUNG_LINK_BOW = 0x4D,
107 NESS_PK_FLASH_EXPLODE = 0x4E,
108 SHEIK_NEEDLE_THROWN = 0x4F,
109 SHEIK_NEEDLE_HELD = 0x50,
110 PIKACHU_THUNDER = 0x51,
111 PICHU_THUNDER = 0x52,
112 MARIO_CAPE = 0x53,
113 DR_MARIO_CAPE = 0x54,
114 SHEIK_SMOKE = 0x55,
115 YOSHI_EGG_THROW = 0x56,
116 YOSHI_EGGLAY = 0x57,
117 YOSHI_STAR = 0x58,
118 PIKACHU_TJOLT_GROUND = 0x59,
119 PIKACHU_TJOLT_AIR = 0x5A,
120 PICHU_TJOLT_GROUND = 0x5B,
121 PICHU_TJOLT_AIR = 0x5C,
122 SAMUS_BOMB = 0x5D,
123 SAMUS_CHARGESHOT = 0x5E,
124 SAMUS_MISSILE = 0x5F,
125 SAMUS_GRAPPLE_BEAM = 0x60,
126 SHEIK_CHAIN = 0x61,
127 PEACH_BOMBER_EXPLODE = 0x62,
128 PEACH_TURNIP = 0x63,
129 BOWSER_FLAME = 0x64,
130 NESS_BAT = 0x65,
131 NESS_YOYO = 0x66,
132 PEACH_PARASOL = 0x67,
133 PEACH_TOAD = 0x68,
134 LUIGI_FIRE = 0x69,
135 ICE_CLIMBERS_ICE = 0x6A,
136 ICE_CLIMBERS_BLIZZARD = 0x6B,
137 ZELDA_FIRE = 0x6C,
138 ZELDA_FIRE_EXPLODE = 0x6D,
139 MEWTWO_DISABLE = 0x6E,
140 PEACH_TOAD_SPORE = 0x6F,
141 MEWTWO_SHADOWBALL = 0x70,
142 ICE_CLIMBERS_UP_B_STRING = 0x71,
143 GAME_AND_WATCH_PESTICIDE = 0x72,
144 GAME_AND_WATCH_MANHOLE = 0x73,
145 GAME_AND_WATCH_FIRE = 0x74,
146 GAME_AND_WATCH_PARACHUTE = 0x75,
147 GAME_AND_WATCH_TURTLE = 0x76,
148 GAME_AND_WATCH_SPARKY = 0x77,
149 GAME_AND_WATCH_JUDGE = 0x78,
150 GAME_AND_WATCH_OIL = 0x79,
151 GAME_AND_WATCH_SAUSAGE = 0x7A,
152 YOUNG_LINK_MILK = 0x7B,
153 GAME_AND_WATCH_FIREFIGHTER = 0x7C,
154 MASTER_HAND_LASER = 0x7D,
155 MASTER_HAND_BULLET = 0x7E,
156 CRAZY_HAND_LASER = 0x7F,
157 CRAZY_HAND_BULLET = 0x80,
158 CRAZY_HAND_BOMB = 0x81,
159 KIRBY_COPY_MARIO_FIRE = 0x82,
160 KIRBY_COPY_DR_MARIO_PILL = 0x83,
161 KIRBY_COPY_LUIGI_FIRE = 0x84,
162 KIRBY_COPY_ICE_CLIMBERS_ICE = 0x85,
163 KIRBY_COPY_PEACH_TOAD = 0x86,
164 KIRBY_COPY_TOAD_SPORE = 0x87,
165 KIRBY_COPY_FOX_LASER = 0x88,
166 KIRBY_COPY_FALCO_LASER = 0x89,
167 KIRBY_COPY_FOX_BLASTER = 0x8A,
168 KIRBY_COPY_FALCO_BLASTER = 0x8B,
169 KIRBY_COPY_LINK_ARROW = 0x8C,
170 KIRBY_COPY_YOUNG_LINK_ARROW = 0x8D,
171 KIRBY_COPY_LINK_BOW = 0x8E,
172 KIRBY_COPY_YOUNG_LINK_BOW = 0x8F,
173 KIRBY_COPY_MEWTWO_SHADOWBALL = 0x90,
174 KIRBY_COPY_PK_FLASH = 0x91,
175 KIRBY_COPY_PK_FLASH_EXPLOSION = 0x92,
176 KIRBY_COPY_PIKACHU_TJOLT_GROUND = 0x93,
177 KIRBY_COPY_PIKACHU_TJOLT_AIR = 0x94,
178 KIRBY_COPY_PICHU_TJOLT_GROUND = 0x95,
179 KIRBY_COPY_PICHU_TJOLT_AIR = 0x96,
180 KIRBY_COPY_SAMUS_CHARGESHOT = 0x97,
181 KIRBY_COPY_SHEIK_NEEDLE_THROWN = 0x98,
182 KIRBY_COPY_SHEIK_NEEDLE_HELD = 0x99,
183 KIRBY_COPY_BOWSER_FLAME = 0x9A,
184 KIRBY_COPY_GAME_AND_WATCH_SAUSAGE = 0x9B,
185 KIRBY_COPY_YOSHI_EGGLAY = 0x9D,
186 UNKNOWN_3 = 0x9E,
187 MARIO_LUIGI_COIN = 0x9F,
188
189 RANDOM_POKEMON = 0xA0,
191 GOLDEEN = 0xA1,
192 CHICORITA = 0xA2,
193 SNORLAX = 0xA3,
194 BLASTOISE = 0xA4,
195 WEEZING = 0xA5,
196 CHARIZARD = 0xA6,
197 MOLTRES = 0xA7,
198 ZAPDOS = 0xA8,
199 ARTICUNO = 0xA9,
200 WOBBUFFET = 0xAA,
201 SCIZOR = 0xAB,
202 UNOWN = 0xAC,
203 ENTEI = 0xAD,
204 RAIKOU = 0xAE,
205 SUICUNE = 0xAF,
206 BELLOSSOM = 0xB0,
207 ELECTRODE = 0xB1,
208 LUGIA = 0xB2,
209 HO_OH = 0xB3,
210 DITTO = 0xB4,
211 CLEFAIRY = 0xB5,
212 TOGEPI = 0xB6,
213 MEW = 0xB7,
214 CELEBI = 0xB8,
215 STARYU = 0xB9,
216 CHANSEY = 0xBA,
217 PORYGON2 = 0xBB,
218 CYNDAQUIL = 0xBC,
219 MARILL = 0xBD,
220 VENUSAUR = 0xBE,
221
222 CHICORITA_LEAF = 0xBF,
224 BLASTOISE_WATER = 0xC0,
225 WEEZING_GAS_1 = 0xC1,
226 WEEZING_GAS_2 = 0xC2,
227 CHARIZARD_BREATH_1 = 0xC3,
228 CHARIZARD_BREATH_2 = 0xC4,
229 CHARIZARD_BREATH_3 = 0xC5,
230 CHARIZARD_BREATH_4 = 0xC6,
231 MINI_UNOWNS = 0xC7,
232 LUGIA_AEROBLAST_1 = 0xC8,
233 LUGIA_AEROBLAST_2 = 0xC9,
234 LUGIA_AEROBLAST_3 = 0xCA,
235 HO_OH_FLAME = 0xCB,
236 STARYU_STAR = 0xCC,
237 HEALING_EGG = 0xCD,
238 CYNDAQUIL_FIRE = 0xCE,
239 UNKNOWN_4 = 0xCF,
240
241 OLD_GOOMBA = 0xD0,
243 TARGET = 0xD1,
244 SHYGUY = 0xD2,
245 KOOPA_GREEN = 0xD3,
246 KOOPA_RED = 0xD4,
247 LIKE_LIKE = 0xD5,
248 OLD_REDEAD = 0xD6,
250 OLD_OCTAROK = 0xD7,
252 OLD_OTTOSEA = 0xD8,
253 WHITE_BEAR = 0xD9,
254 KLAP = 0xDA,
255 Z_GREEN_SHELL = 0xDB,
256 Z_RED_SHELL = 0xDC,
257
258 TINGLE = 0xDD,
260 INVALID_1 = 0xDE,
261 INVALID_2 = 0xDF,
262 INVALID_3 = 0xE0,
263 APPLE = 0xE1,
264 HEALING_APPLE = 0xE2,
265 INVALID_4 = 0xE3,
266 INVALID_5 = 0xE4,
267 INVALID_6 = 0xE5,
268 TOOL = 0xE6,
270 INVALID_7 = 0xE7,
271 INVALID_8 = 0xE8,
272 BIRDO = 0xE9,
273 ARWING_LASER = 0xEA,
274 GREAT_FOX_LASER = 0xEB,
275 BIRDO_EGG = 0xEC,
276
277 TURNIP_SMILEY = 1000,
285 TURNIP_BORED,
286 TURNIP_SLEEPY,
287 TURNIP_SHOCKED,
288 TURNIP_LAUGHING,
289 TURNIP_WINK,
290 TURNIP_DOT,
291 TURNIP_STITCH,
292
293 HOMING_MISSILE,
295 SUPER_MISSILE,
296}
297
298impl Item {
299 pub fn resolve_subitem(&self, subitem: u8) -> Item {
302 match self {
303 Item::PEACH_TURNIP => match subitem {
304 0 => Item::TURNIP_SMILEY,
305 1 => Item::TURNIP_BORED,
306 2 => Item::TURNIP_SLEEPY,
307 3 => Item::TURNIP_SHOCKED,
308 4 => Item::TURNIP_LAUGHING,
309 5 => Item::TURNIP_WINK,
310 6 => Item::TURNIP_DOT,
311 7 => Item::TURNIP_STITCH,
312 _ => panic!("Invalid turnip type {subitem}. Expected value 0-7 inclusive"),
313 },
314 Item::SAMUS_MISSILE => match subitem {
315 0 => Item::HOMING_MISSILE,
316 1 => Item::SUPER_MISSILE,
317 _ => panic!("Invalid missile type {subitem}. Expected value 0 or 1"),
318 },
319
320 _ => *self,
321 }
322 }
323}
324
325#[derive(Debug, Clone, Copy, EnumString, IntoStaticStr, Display, FromRepr, PartialEq, Eq)]
326#[repr(u8)]
327pub enum TurnipFace {
328 SMILEY = 0,
330 BORED = 1,
331 SLEEPY = 2,
332 SHOCKED = 3,
333 LAUGHING = 4,
334 WINK = 5,
335 DOT = 6,
336 STITCH = 7,
337}
338
339#[derive(Debug, Clone, Copy, EnumString, IntoStaticStr, Display, FromRepr, PartialEq, Eq)]
340#[repr(u8)]
341pub enum MissileType {
342 HOMING = 0,
343 SUPER = 1,
344}
345
346