diff options
author | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-04-29 13:57:08 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-29 13:57:08 -0700 |
commit | db789b296cd739964c53cd60d4673238a175837a (patch) | |
tree | c8b14e64de99cc017d301bcec4201d418b9d6678 | |
parent | 8cb59c9783ec33d8feac475a6259aec240fd2234 (diff) | |
parent | bb433954d014b0c13b3f7a1f16f8fa9fdf76fbe9 (diff) |
Merge pull request #249 from yenatch/master
(Almost) decompile util.s.
-rw-r--r-- | asm/util.s | 478 | ||||
-rw-r--r-- | constants/item_constants.inc | 695 | ||||
-rw-r--r-- | data/data2.s | 5 | ||||
-rw-r--r-- | include/items.h | 693 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/decompress.c | 4 | ||||
-rw-r--r-- | src/util.c | 389 |
7 files changed, 1162 insertions, 1104 deletions
diff --git a/asm/util.s b/asm/util.s deleted file mode 100644 index f204eac43..000000000 --- a/asm/util.s +++ /dev/null @@ -1,478 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start CreateInvisibleSpriteWithCallback -CreateInvisibleSpriteWithCallback: @ 8040EB4 - push {r4-r6,lr} - adds r6, r0, 0 - ldr r0, _08040EE8 @ =gSpriteTemplate_82087AC - movs r1, 0xF8 - movs r2, 0xA8 - movs r3, 0xE - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08040EEC @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r3, r2, r5 - adds r3, 0x3E - ldrb r1, [r3] - movs r4, 0x4 - orrs r1, r4 - strb r1, [r3] - adds r5, 0x1C - adds r2, r5 - str r6, [r2] - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08040EE8: .4byte gSpriteTemplate_82087AC -_08040EEC: .4byte gSprites - thumb_func_end CreateInvisibleSpriteWithCallback - - thumb_func_start StoreWordInTwoHalfwords -StoreWordInTwoHalfwords: @ 8040EF0 - strh r1, [r0] - lsrs r1, 16 - strh r1, [r0, 0x2] - bx lr - thumb_func_end StoreWordInTwoHalfwords - - thumb_func_start LoadWordFromTwoHalfwords -LoadWordFromTwoHalfwords: @ 8040EF8 - ldrh r2, [r0] - movs r3, 0x2 - ldrsh r0, [r0, r3] - lsls r0, 16 - orrs r2, r0 - str r2, [r1] - bx lr - thumb_func_end LoadWordFromTwoHalfwords - - thumb_func_start SetBgAffineStruct -SetBgAffineStruct: @ 8040F08 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r4, [sp, 0x18] - ldr r5, [sp, 0x1C] - ldr r6, [sp, 0x20] - ldr r7, [sp, 0x24] - mov r8, r7 - str r1, [r0] - str r2, [r0, 0x4] - strh r3, [r0, 0x8] - strh r4, [r0, 0xA] - strh r5, [r0, 0xC] - strh r6, [r0, 0xE] - mov r1, r8 - strh r1, [r0, 0x10] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end SetBgAffineStruct - - thumb_func_start DoBgAffineSet -DoBgAffineSet: @ 8040F34 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x24 - mov r8, r0 - ldr r0, [sp, 0x38] - ldr r4, [sp, 0x3C] - ldr r5, [sp, 0x40] - ldr r6, [sp, 0x44] - lsls r6, 16 - lsrs r6, 16 - lsls r3, 16 - asrs r3, 16 - lsls r0, 16 - asrs r0, 16 - str r0, [sp] - lsls r4, 16 - asrs r4, 16 - str r4, [sp, 0x4] - lsls r5, 16 - asrs r5, 16 - str r5, [sp, 0x8] - str r6, [sp, 0xC] - add r0, sp, 0x10 - bl SetBgAffineStruct - add r0, sp, 0x10 - mov r1, r8 - movs r2, 0x1 - bl BgAffineSet - add sp, 0x24 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end DoBgAffineSet - - thumb_func_start CopySpriteTiles -CopySpriteTiles: @ 8040F80 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x3C - str r2, [sp, 0x20] - adds r4, r3, 0 - ldr r7, [sp, 0x5C] - lsls r0, 24 - lsls r1, 24 - ldr r2, _08041008 @ =gUnknown_082087C4 - lsrs r1, 23 - lsrs r0, 21 - adds r1, r0 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - str r0, [sp, 0x24] - adds r1, r2 - ldrb r1, [r1] - str r1, [sp, 0x28] - movs r1, 0 - cmp r1, r0 - bcc _08040FB4 - b _08041136 -_08040FB4: - movs r0, 0x20 - ldr r2, [sp, 0x28] - subs r0, r2 - lsls r0, 1 - str r0, [sp, 0x2C] -_08040FBE: - movs r2, 0 - adds r1, 0x1 - str r1, [sp, 0x34] - ldr r3, [sp, 0x28] - cmp r2, r3 - bcc _08040FCC - b _08041124 -_08040FCC: - ldr r0, _0804100C @ =0x040000d4 - mov r8, r0 -_08040FD0: - ldrh r1, [r4] - ldr r0, _08041010 @ =0x000003ff - ands r0, r1 - lsls r0, 5 - mov r12, r0 - movs r0, 0xC0 - lsls r0, 4 - ands r0, r1 - mov r3, sp - strh r1, [r3, 0x38] - cmp r0, 0 - bne _08041018 - ldr r0, [sp, 0x20] - add r0, r12 - mov r1, r8 - str r0, [r1] - str r7, [r1, 0x4] - ldr r3, _08041014 @ =0x84000008 - str r3, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r4, 0x2 - str r4, [sp, 0x30] - adds r7, 0x20 - mov r10, r7 - adds r2, 0x1 - mov r9, r2 - b _08041112 - .align 2, 0 -_08041008: .4byte gUnknown_082087C4 -_0804100C: .4byte 0x040000d4 -_08041010: .4byte 0x000003ff -_08041014: .4byte 0x84000008 -_08041018: - movs r1, 0x80 - lsls r1, 4 - cmp r0, r1 - bne _08041068 - movs r3, 0 - adds r4, 0x2 - str r4, [sp, 0x30] - movs r0, 0x20 - adds r0, r7 - mov r10, r0 - adds r2, 0x1 - mov r9, r2 - ldr r4, _08041060 @ =0x040000d4 - ldr r6, _08041064 @ =0x84000001 - movs r5, 0x7 -_08041036: - lsls r2, r3, 24 - asrs r2, 24 - subs r0, r5, r2 - lsls r0, 2 - add r0, r12 - ldr r1, [sp, 0x20] - adds r0, r1, r0 - lsls r1, r2, 2 - adds r1, r7, r1 - str r0, [r4] - str r1, [r4, 0x4] - str r6, [r4, 0x8] - ldr r0, [r4, 0x8] - adds r2, 0x1 - lsls r2, 24 - lsrs r3, r2, 24 - asrs r2, 24 - cmp r2, 0x7 - ble _08041036 - b _08041112 - .align 2, 0 -_08041060: .4byte 0x040000d4 -_08041064: .4byte 0x84000001 -_08041068: - movs r3, 0 - adds r4, 0x2 - str r4, [sp, 0x30] - movs r0, 0x20 - adds r0, r7 - mov r10, r0 - adds r2, 0x1 - mov r9, r2 -_08041078: - movs r2, 0 - lsls r4, r3, 24 - lsls r0, r4, 2 - lsrs r0, 24 - adds r6, r0, 0x3 - mov r1, r12 - adds r5, r1, r0 -_08041086: - lsls r1, r2, 24 - asrs r1, 24 - subs r0, r6, r1 - mov r2, sp - adds r3, r2, r0 - adds r0, r5, r1 - ldr r2, [sp, 0x20] - adds r0, r2, r0 - ldrb r2, [r0] - movs r0, 0xF - ands r0, r2 - lsls r0, 4 - lsrs r2, 4 - orrs r0, r2 - strb r0, [r3] - adds r1, 0x1 - lsls r1, 24 - lsrs r2, r1, 24 - asrs r1, 24 - cmp r1, 0x3 - ble _08041086 - movs r3, 0x80 - lsls r3, 17 - adds r0, r4, r3 - lsrs r3, r0, 24 - asrs r0, 24 - cmp r0, 0x7 - ble _08041078 - movs r0, 0x80 - lsls r0, 4 - mov r1, sp - ldrh r1, [r1, 0x38] - ands r0, r1 - cmp r0, 0 - beq _08041104 - movs r3, 0 - ldr r4, _080410FC @ =0x040000d4 - ldr r6, _08041100 @ =0x84000001 - movs r5, 0x7 -_080410D4: - lsls r1, r3, 24 - asrs r1, 24 - subs r0, r5, r1 - lsls r0, 2 - mov r3, sp - adds r2, r3, r0 - lsls r0, r1, 2 - adds r0, r7, r0 - str r2, [r4] - str r0, [r4, 0x4] - str r6, [r4, 0x8] - ldr r0, [r4, 0x8] - adds r1, 0x1 - lsls r1, 24 - lsrs r3, r1, 24 - asrs r1, 24 - cmp r1, 0x7 - ble _080410D4 - b _08041112 - .align 2, 0 -_080410FC: .4byte 0x040000d4 -_08041100: .4byte 0x84000001 -_08041104: - mov r0, sp - mov r1, r8 - str r0, [r1] - str r7, [r1, 0x4] - ldr r2, _08041148 @ =0x84000008 - str r2, [r1, 0x8] - ldr r0, [r1, 0x8] -_08041112: - ldr r4, [sp, 0x30] - mov r7, r10 - mov r3, r9 - lsls r0, r3, 24 - lsrs r2, r0, 24 - ldr r0, [sp, 0x28] - cmp r2, r0 - bcs _08041124 - b _08040FD0 -_08041124: - ldr r1, [sp, 0x2C] - adds r4, r1 - ldr r2, [sp, 0x34] - lsls r0, r2, 24 - lsrs r1, r0, 24 - ldr r3, [sp, 0x24] - cmp r1, r3 - bcs _08041136 - b _08040FBE -_08041136: - add sp, 0x3C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08041148: .4byte 0x84000008 - thumb_func_end CopySpriteTiles - - thumb_func_start CountTrailingZeroBits -CountTrailingZeroBits: @ 804114C - push {lr} - adds r2, r0, 0 - movs r1, 0 - movs r3, 0x1 -_08041154: - adds r0, r2, 0 - ands r0, r3 - cmp r0, 0 - beq _08041160 - adds r0, r1, 0 - b _0804116E -_08041160: - lsrs r2, 1 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x1F - bls _08041154 - movs r0, 0 -_0804116E: - pop {r1} - bx r1 - thumb_func_end CountTrailingZeroBits - - thumb_func_start CalcCRC16 -CalcCRC16: @ 8041174 - push {r4-r7,lr} - adds r7, r0, 0 - adds r4, r1, 0 - ldr r2, _080411A4 @ =0x00001121 - movs r3, 0 - cmp r3, r4 - bge _080411C0 - movs r6, 0x1 - ldr r0, _080411A8 @ =0x00008408 - adds r5, r0, 0 -_08041188: - adds r0, r7, r3 - ldrb r0, [r0] - eors r2, r0 - movs r1, 0 - adds r3, 0x1 -_08041192: - adds r0, r2, 0 - ands r0, r6 - cmp r0, 0 - beq _080411AC - lsrs r0, r2, 1 - eors r0, r5 - lsls r0, 16 - lsrs r2, r0, 16 - b _080411AE - .align 2, 0 -_080411A4: .4byte 0x00001121 -_080411A8: .4byte 0x00008408 -_080411AC: - lsrs r2, 1 -_080411AE: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x7 - bls _08041192 - lsls r0, r3, 16 - lsrs r3, r0, 16 - cmp r3, r4 - blt _08041188 -_080411C0: - mvns r0, r2 - lsls r0, 16 - lsrs r0, 16 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end CalcCRC16 - - thumb_func_start CalcCRC16WithTable -CalcCRC16WithTable: @ 80411CC - push {r4-r6,lr} - adds r5, r0, 0 - adds r4, r1, 0 - ldr r2, _08041208 @ =0x00001121 - movs r3, 0 - cmp r3, r4 - bge _080411FA - ldr r6, _0804120C @ =gCrc16Table -_080411DC: - lsrs r1, r2, 8 - adds r0, r5, r3 - ldrb r0, [r0] - eors r2, r0 - lsls r0, r2, 24 - lsrs r0, 23 - adds r0, r6 - ldrh r0, [r0] - adds r2, r0, 0 - eors r2, r1 - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, r4 - blt _080411DC -_080411FA: - mvns r0, r2 - lsls r0, 16 - lsrs r0, 16 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08041208: .4byte 0x00001121 -_0804120C: .4byte gCrc16Table - thumb_func_end CalcCRC16WithTable - - .align 2, 0 @ Don't pad with nop. diff --git a/constants/item_constants.inc b/constants/item_constants.inc index 934ebd798..46b84d681 100644 --- a/constants/item_constants.inc +++ b/constants/item_constants.inc @@ -1,310 +1,385 @@ - .set ITEM_NONE, 0x000 - .set ITEM_MASTER_BALL, 0x001 - .set ITEM_ULTRA_BALL, 0x002 - .set ITEM_GREAT_BALL, 0x003 - .set ITEM_POKE_BALL, 0x004 - .set ITEM_SAFARI_BALL, 0x005 - .set ITEM_NET_BALL, 0x006 - .set ITEM_DIVE_BALL, 0x007 - .set ITEM_NEST_BALL, 0x008 - .set ITEM_REPEAT_BALL, 0x009 - .set ITEM_TIMER_BALL, 0x00a - .set ITEM_LUXURY_BALL, 0x00b - .set ITEM_PREMIER_BALL, 0x00c - .set ITEM_POTION, 0x00d - .set ITEM_ANTIDOTE, 0x00e - .set ITEM_BURN_HEAL, 0x00f - .set ITEM_ICE_HEAL, 0x010 - .set ITEM_AWAKENING, 0x011 - .set ITEM_PARALYZE_HEAL, 0x012 - .set ITEM_FULL_RESTORE, 0x013 - .set ITEM_MAX_POTION, 0x014 - .set ITEM_HYPER_POTION, 0x015 - .set ITEM_SUPER_POTION, 0x016 - .set ITEM_FULL_HEAL, 0x017 - .set ITEM_REVIVE, 0x018 - .set ITEM_MAX_REVIVE, 0x019 - .set ITEM_FRESH_WATER, 0x01a - .set ITEM_SODA_POP, 0x01b - .set ITEM_LEMONADE, 0x01c - .set ITEM_MOOMOO_MILK, 0x01d - .set ITEM_ENERGY_POWDER, 0x01e - .set ITEM_ENERGY_ROOT, 0x01f - .set ITEM_HEAL_POWDER, 0x020 - .set ITEM_REVIVAL_HERB, 0x021 - .set ITEM_ETHER, 0x022 - .set ITEM_MAX_ETHER, 0x023 - .set ITEM_ELIXIR, 0x024 - .set ITEM_MAX_ELIXIR, 0x025 - .set ITEM_LAVA_COOKIE, 0x026 - .set ITEM_BLUE_FLUTE, 0x027 - .set ITEM_YELLOW_FLUTE, 0x028 - .set ITEM_RED_FLUTE, 0x029 - .set ITEM_BLACK_FLUTE, 0x02a - .set ITEM_WHITE_FLUTE, 0x02b - .set ITEM_BERRY_JUICE, 0x02c - .set ITEM_SACRED_ASH, 0x02d - .set ITEM_SHOAL_SALT, 0x02e - .set ITEM_SHOAL_SHELL, 0x02f - .set ITEM_RED_SHARD, 0x030 - .set ITEM_BLUE_SHARD, 0x031 - .set ITEM_YELLOW_SHARD, 0x032 - .set ITEM_GREEN_SHARD, 0x033 - .set ITEM_HP_UP, 0x03f - .set ITEM_PROTEIN, 0x040 - .set ITEM_IRON, 0x041 - .set ITEM_CARBOS, 0x042 - .set ITEM_CALCIUM, 0x043 - .set ITEM_RARE_CANDY, 0x044 - .set ITEM_PP_UP, 0x045 - .set ITEM_ZINC, 0x046 - .set ITEM_PP_MAX, 0x047 - .set ITEM_GUARD_SPEC, 0x049 - .set ITEM_DIRE_HIT, 0x04a - .set ITEM_X_ATTACK, 0x04b - .set ITEM_X_DEFEND, 0x04c - .set ITEM_X_SPEED, 0x04d - .set ITEM_X_ACCURACY, 0x04e - .set ITEM_X_SPECIAL, 0x04f - .set ITEM_POKE_DOLL, 0x050 - .set ITEM_FLUFFY_TAIL, 0x051 - .set ITEM_SUPER_REPEL, 0x053 - .set ITEM_MAX_REPEL, 0x054 - .set ITEM_ESCAPE_ROPE, 0x055 - .set ITEM_REPEL, 0x056 - .set ITEM_SUN_STONE, 0x05d - .set ITEM_MOON_STONE, 0x05e - .set ITEM_FIRE_STONE, 0x05f - .set ITEM_THUNDER_STONE, 0x060 - .set ITEM_WATER_STONE, 0x061 - .set ITEM_LEAF_STONE, 0x062 - .set ITEM_TINY_MUSHROOM, 0x067 - .set ITEM_BIG_MUSHROOM, 0x068 - .set ITEM_PEARL, 0x06a - .set ITEM_BIG_PEARL, 0x06b - .set ITEM_STARDUST, 0x06c - .set ITEM_STAR_PIECE, 0x06d - .set ITEM_NUGGET, 0x06e - .set ITEM_HEART_SCALE, 0x06f - .set ITEM_ORANGE_MAIL, 0x079 - .set ITEM_HARBOR_MAIL, 0x07a - .set ITEM_GLITTER_MAIL, 0x07b - .set ITEM_MECH_MAIL, 0x07c - .set ITEM_WOOD_MAIL, 0x07d - .set ITEM_WAVE_MAIL, 0x07e - .set ITEM_BEAD_MAIL, 0x07f - .set ITEM_SHADOW_MAIL, 0x080 - .set ITEM_TROPIC_MAIL, 0x081 - .set ITEM_DREAM_MAIL, 0x082 - .set ITEM_FAB_MAIL, 0x083 - .set ITEM_RETRO_MAIL, 0x084 - .set ITEM_CHERI_BERRY, 0x085 - .set ITEM_CHESTO_BERRY, 0x086 - .set ITEM_PECHA_BERRY, 0x087 - .set ITEM_RAWST_BERRY, 0x088 - .set ITEM_ASPEAR_BERRY, 0x089 - .set ITEM_LEPPA_BERRY, 0x08a - .set ITEM_ORAN_BERRY, 0x08b - .set ITEM_PERSIM_BERRY, 0x08c - .set ITEM_LUM_BERRY, 0x08d - .set ITEM_SITRUS_BERRY, 0x08e - .set ITEM_FIGY_BERRY, 0x08f - .set ITEM_WIKI_BERRY, 0x090 - .set ITEM_MAGO_BERRY, 0x091 - .set ITEM_AGUAV_BERRY, 0x092 - .set ITEM_IAPAPA_BERRY, 0x093 - .set ITEM_RAZZ_BERRY, 0x094 - .set ITEM_BLUK_BERRY, 0x095 - .set ITEM_NANAB_BERRY, 0x096 - .set ITEM_WEPEAR_BERRY, 0x097 - .set ITEM_PINAP_BERRY, 0x098 - .set ITEM_POMEG_BERRY, 0x099 - .set ITEM_KELPSY_BERRY, 0x09a - .set ITEM_QUALOT_BERRY, 0x09b - .set ITEM_HONDEW_BERRY, 0x09c - .set ITEM_GREPA_BERRY, 0x09d - .set ITEM_TAMATO_BERRY, 0x09e - .set ITEM_CORNN_BERRY, 0x09f - .set ITEM_MAGOST_BERRY, 0x0a0 - .set ITEM_RABUTA_BERRY, 0x0a1 - .set ITEM_NOMEL_BERRY, 0x0a2 - .set ITEM_SPELON_BERRY, 0x0a3 - .set ITEM_PAMTRE_BERRY, 0x0a4 - .set ITEM_WATMEL_BERRY, 0x0a5 - .set ITEM_DURIN_BERRY, 0x0a6 - .set ITEM_BELUE_BERRY, 0x0a7 - .set ITEM_LIECHI_BERRY, 0x0a8 - .set ITEM_GANLON_BERRY, 0x0a9 - .set ITEM_SALAC_BERRY, 0x0aa - .set ITEM_PETAYA_BERRY, 0x0ab - .set ITEM_APICOT_BERRY, 0x0ac - .set ITEM_LANSAT_BERRY, 0x0ad - .set ITEM_STARF_BERRY, 0x0ae - .set ITEM_ENIGMA_BERRY, 0x0af - .set ITEM_BRIGHT_POWDER, 0x0b3 - .set ITEM_WHITE_HERB, 0x0b4 - .set ITEM_MACHO_BRACE, 0x0b5 - .set ITEM_EXP_SHARE, 0x0b6 - .set ITEM_QUICK_CLAW, 0x0b7 - .set ITEM_SOOTHE_BELL, 0x0b8 - .set ITEM_MENTAL_HERB, 0x0b9 - .set ITEM_CHOICE_BAND, 0x0ba - .set ITEM_KINGS_ROCK, 0x0bb - .set ITEM_SILVER_POWDER, 0x0bc - .set ITEM_AMULET_COIN, 0x0bd - .set ITEM_CLEANSE_TAG, 0x0be - .set ITEM_SOUL_DEW, 0x0bf - .set ITEM_DEEP_SEA_TOOTH, 0x0c0 - .set ITEM_DEEP_SEA_SCALE, 0x0c1 - .set ITEM_SMOKE_BALL, 0x0c2 - .set ITEM_EVERSTONE, 0x0c3 - .set ITEM_FOCUS_BAND, 0x0c4 - .set ITEM_LUCKY_EGG, 0x0c5 - .set ITEM_SCOPE_LENS, 0x0c6 - .set ITEM_METAL_COAT, 0x0c7 - .set ITEM_LEFTOVERS, 0x0c8 - .set ITEM_DRAGON_SCALE, 0x0c9 - .set ITEM_LIGHT_BALL, 0x0ca - .set ITEM_SOFT_SAND, 0x0cb - .set ITEM_HARD_STONE, 0x0cc - .set ITEM_MIRACLE_SEED, 0x0cd - .set ITEM_BLACK_GLASSES, 0x0ce - .set ITEM_BLACK_BELT, 0x0cf - .set ITEM_MAGNET, 0x0d0 - .set ITEM_MYSTIC_WATER, 0x0d1 - .set ITEM_SHARP_BEAK, 0x0d2 - .set ITEM_POISON_BARB, 0x0d3 - .set ITEM_NEVER_MELT_ICE, 0x0d4 - .set ITEM_SPELL_TAG, 0x0d5 - .set ITEM_TWISTED_SPOON, 0x0d6 - .set ITEM_CHARCOAL, 0x0d7 - .set ITEM_DRAGON_FANG, 0x0d8 - .set ITEM_SILK_SCARF, 0x0d9 - .set ITEM_UP_GRADE, 0x0da - .set ITEM_SHELL_BELL, 0x0db - .set ITEM_SEA_INCENSE, 0x0dc - .set ITEM_LAX_INCENSE, 0x0dd - .set ITEM_LUCKY_PUNCH, 0x0de - .set ITEM_METAL_POWDER, 0x0df - .set ITEM_THICK_CLUB, 0x0e0 - .set ITEM_STICK, 0x0e1 - .set ITEM_RED_SCARF, 0x0fe - .set ITEM_BLUE_SCARF, 0x0ff - .set ITEM_PINK_SCARF, 0x100 - .set ITEM_GREEN_SCARF, 0x101 - .set ITEM_YELLOW_SCARF, 0x102 - .set ITEM_MACH_BIKE, 0x103 - .set ITEM_COIN_CASE, 0x104 - .set ITEM_ITEMFINDER, 0x105 - .set ITEM_OLD_ROD, 0x106 - .set ITEM_GOOD_ROD, 0x107 - .set ITEM_SUPER_ROD, 0x108 - .set ITEM_SS_TICKET, 0x109 - .set ITEM_CONTEST_PASS, 0x10a - .set ITEM_WAILMER_PAIL, 0x10c - .set ITEM_DEVON_GOODS, 0x10d - .set ITEM_SOOT_SACK, 0x10e - .set ITEM_BASEMENT_KEY, 0x10f - .set ITEM_ACRO_BIKE, 0x110 - .set ITEM_POKEBLOCK_CASE, 0x111 - .set ITEM_LETTER, 0x112 - .set ITEM_EON_TICKET, 0x113 - .set ITEM_RED_ORB, 0x114 - .set ITEM_BLUE_ORB, 0x115 - .set ITEM_SCANNER, 0x116 - .set ITEM_GO_GOGGLES, 0x117 - .set ITEM_METEORITE, 0x118 - .set ITEM_ROOM_1_KEY, 0x119 - .set ITEM_ROOM_2_KEY, 0x11a - .set ITEM_ROOM_4_KEY, 0x11b - .set ITEM_ROOM_6_KEY, 0x11c - .set ITEM_STORAGE_KEY, 0x11d - .set ITEM_ROOT_FOSSIL, 0x11e - .set ITEM_CLAW_FOSSIL, 0x11f - .set ITEM_DEVON_SCOPE, 0x120 - .set ITEM_TM01, 0x121 - .set ITEM_TM02, 0x122 - .set ITEM_TM03, 0x123 - .set ITEM_TM04, 0x124 - .set ITEM_TM05, 0x125 - .set ITEM_TM06, 0x126 - .set ITEM_TM07, 0x127 - .set ITEM_TM08, 0x128 - .set ITEM_TM09, 0x129 - .set ITEM_TM10, 0x12a - .set ITEM_TM11, 0x12b - .set ITEM_TM12, 0x12c - .set ITEM_TM13, 0x12d - .set ITEM_TM14, 0x12e - .set ITEM_TM15, 0x12f - .set ITEM_TM16, 0x130 - .set ITEM_TM17, 0x131 - .set ITEM_TM18, 0x132 - .set ITEM_TM19, 0x133 - .set ITEM_TM20, 0x134 - .set ITEM_TM21, 0x135 - .set ITEM_TM22, 0x136 - .set ITEM_TM23, 0x137 - .set ITEM_TM24, 0x138 - .set ITEM_TM25, 0x139 - .set ITEM_TM26, 0x13a - .set ITEM_TM27, 0x13b - .set ITEM_TM28, 0x13c - .set ITEM_TM29, 0x13d - .set ITEM_TM30, 0x13e - .set ITEM_TM31, 0x13f - .set ITEM_TM32, 0x140 - .set ITEM_TM33, 0x141 - .set ITEM_TM34, 0x142 - .set ITEM_TM35, 0x143 - .set ITEM_TM36, 0x144 - .set ITEM_TM37, 0x145 - .set ITEM_TM38, 0x146 - .set ITEM_TM39, 0x147 - .set ITEM_TM40, 0x148 - .set ITEM_TM41, 0x149 - .set ITEM_TM42, 0x14a - .set ITEM_TM43, 0x14b - .set ITEM_TM44, 0x14c - .set ITEM_TM45, 0x14d - .set ITEM_TM46, 0x14e - .set ITEM_TM47, 0x14f - .set ITEM_TM48, 0x150 - .set ITEM_TM49, 0x151 - .set ITEM_TM50, 0x152 - .set ITEM_HM01, 0x153 - .set ITEM_HM02, 0x154 - .set ITEM_HM03, 0x155 - .set ITEM_HM04, 0x156 - .set ITEM_HM05, 0x157 - .set ITEM_HM06, 0x158 - .set ITEM_HM07, 0x159 - .set ITEM_HM08, 0x15a - .set ITEM_OAKS_PARCEL, 0x15d - .set ITEM_POKE_FLUTE, 0x15e - .set ITEM_SECRET_KEY, 0x15f - .set ITEM_BIKE_VOUCHER, 0x160 - .set ITEM_GOLD_TEETH, 0x161 - .set ITEM_OLD_AMBER, 0x162 - .set ITEM_CARD_KEY, 0x163 - .set ITEM_LIFT_KEY, 0x164 - .set ITEM_HELIX_FOSSIL, 0x165 - .set ITEM_DOME_FOSSIL, 0x166 - .set ITEM_SILPH_SCOPE, 0x167 - .set ITEM_BICYCLE, 0x168 - .set ITEM_TOWN_MAP, 0x169 - .set ITEM_VS_SEEKER, 0x16a - .set ITEM_FAME_CHECKER, 0x16b - .set ITEM_TM_CASE, 0x16c - .set ITEM_BERRY_POUCH, 0x16d - .set ITEM_TEACHY_TV, 0x16e - .set ITEM_TRI_PASS, 0x16f - .set ITEM_RAINBOW_PASS, 0x170 - .set ITEM_TEA, 0x171 - .set ITEM_MYSTIC_TICKET, 0x172 - .set ITEM_AURORA_TICKET, 0x173 - .set ITEM_POWDER_JAR, 0x174 - .set ITEM_RUBY, 0x175 - .set ITEM_SAPPHIRE, 0x176 - .set ITEM_MAGMA_EMBLEM, 0x177 - .set ITEM_OLD_SEA_MAP, 0x178 + .include "asm/macros/asm.inc" + + enum_start + + enum ITEM_NONE @ 0x000 + enum ITEM_MASTER_BALL @ 0x001 + enum ITEM_ULTRA_BALL @ 0x002 + enum ITEM_GREAT_BALL @ 0x003 + enum ITEM_POKE_BALL @ 0x004 + enum ITEM_SAFARI_BALL @ 0x005 + enum ITEM_NET_BALL @ 0x006 + enum ITEM_DIVE_BALL @ 0x007 + enum ITEM_NEST_BALL @ 0x008 + enum ITEM_REPEAT_BALL @ 0x009 + enum ITEM_TIMER_BALL @ 0x00a + enum ITEM_LUXURY_BALL @ 0x00b + enum ITEM_PREMIER_BALL @ 0x00c + enum ITEM_POTION @ 0x00d + enum ITEM_ANTIDOTE @ 0x00e + enum ITEM_BURN_HEAL @ 0x00f + enum ITEM_ICE_HEAL @ 0x010 + enum ITEM_AWAKENING @ 0x011 + enum ITEM_PARALYZE_HEAL @ 0x012 + enum ITEM_FULL_RESTORE @ 0x013 + enum ITEM_MAX_POTION @ 0x014 + enum ITEM_HYPER_POTION @ 0x015 + enum ITEM_SUPER_POTION @ 0x016 + enum ITEM_FULL_HEAL @ 0x017 + enum ITEM_REVIVE @ 0x018 + enum ITEM_MAX_REVIVE @ 0x019 + enum ITEM_FRESH_WATER @ 0x01a + enum ITEM_SODA_POP @ 0x01b + enum ITEM_LEMONADE @ 0x01c + enum ITEM_MOOMOO_MILK @ 0x01d + enum ITEM_ENERGY_POWDER @ 0x01e + enum ITEM_ENERGY_ROOT @ 0x01f + enum ITEM_HEAL_POWDER @ 0x020 + enum ITEM_REVIVAL_HERB @ 0x021 + enum ITEM_ETHER @ 0x022 + enum ITEM_MAX_ETHER @ 0x023 + enum ITEM_ELIXIR @ 0x024 + enum ITEM_MAX_ELIXIR @ 0x025 + enum ITEM_LAVA_COOKIE @ 0x026 + enum ITEM_BLUE_FLUTE @ 0x027 + enum ITEM_YELLOW_FLUTE @ 0x028 + enum ITEM_RED_FLUTE @ 0x029 + enum ITEM_BLACK_FLUTE @ 0x02a + enum ITEM_WHITE_FLUTE @ 0x02b + enum ITEM_BERRY_JUICE @ 0x02c + enum ITEM_SACRED_ASH @ 0x02d + enum ITEM_SHOAL_SALT @ 0x02e + enum ITEM_SHOAL_SHELL @ 0x02f + enum ITEM_RED_SHARD @ 0x030 + enum ITEM_BLUE_SHARD @ 0x031 + enum ITEM_YELLOW_SHARD @ 0x032 + enum ITEM_GREEN_SHARD @ 0x033 + enum ITEM_034 + enum ITEM_035 + enum ITEM_036 + enum ITEM_037 + enum ITEM_038 + enum ITEM_039 + enum ITEM_03A + enum ITEM_03B + enum ITEM_03C + enum ITEM_03D + enum ITEM_03E + enum ITEM_HP_UP @ 0x03f + enum ITEM_PROTEIN @ 0x040 + enum ITEM_IRON @ 0x041 + enum ITEM_CARBOS @ 0x042 + enum ITEM_CALCIUM @ 0x043 + enum ITEM_RARE_CANDY @ 0x044 + enum ITEM_PP_UP @ 0x045 + enum ITEM_ZINC @ 0x046 + enum ITEM_PP_MAX @ 0x047 + enum ITEM_048 + enum ITEM_GUARD_SPEC @ 0x049 + enum ITEM_DIRE_HIT @ 0x04a + enum ITEM_X_ATTACK @ 0x04b + enum ITEM_X_DEFEND @ 0x04c + enum ITEM_X_SPEED @ 0x04d + enum ITEM_X_ACCURACY @ 0x04e + enum ITEM_X_SPECIAL @ 0x04f + enum ITEM_POKE_DOLL @ 0x050 + enum ITEM_FLUFFY_TAIL @ 0x051 + enum ITEM_052 + enum ITEM_SUPER_REPEL @ 0x053 + enum ITEM_MAX_REPEL @ 0x054 + enum ITEM_ESCAPE_ROPE @ 0x055 + enum ITEM_REPEL @ 0x056 + enum ITEM_057 + enum ITEM_058 + enum ITEM_059 + enum ITEM_05A + enum ITEM_05B + enum ITEM_05C + enum ITEM_SUN_STONE @ 0x05d + enum ITEM_MOON_STONE @ 0x05e + enum ITEM_FIRE_STONE @ 0x05f + enum ITEM_THUNDER_STONE @ 0x060 + enum ITEM_WATER_STONE @ 0x061 + enum ITEM_LEAF_STONE @ 0x062 + enum ITEM_063 + enum ITEM_064 + enum ITEM_065 + enum ITEM_066 + enum ITEM_TINY_MUSHROOM @ 0x067 + enum ITEM_BIG_MUSHROOM @ 0x068 + enum ITEM_069 + enum ITEM_PEARL @ 0x06a + enum ITEM_BIG_PEARL @ 0x06b + enum ITEM_STARDUST @ 0x06c + enum ITEM_STAR_PIECE @ 0x06d + enum ITEM_NUGGET @ 0x06e + enum ITEM_HEART_SCALE @ 0x06f + enum ITEM_070 + enum ITEM_071 + enum ITEM_072 + enum ITEM_073 + enum ITEM_074 + enum ITEM_075 + enum ITEM_076 + enum ITEM_077 + enum ITEM_078 + enum ITEM_ORANGE_MAIL @ 0x079 + enum ITEM_HARBOR_MAIL @ 0x07a + enum ITEM_GLITTER_MAIL @ 0x07b + enum ITEM_MECH_MAIL @ 0x07c + enum ITEM_WOOD_MAIL @ 0x07d + enum ITEM_WAVE_MAIL @ 0x07e + enum ITEM_BEAD_MAIL @ 0x07f + enum ITEM_SHADOW_MAIL @ 0x080 + enum ITEM_TROPIC_MAIL @ 0x081 + enum ITEM_DREAM_MAIL @ 0x082 + enum ITEM_FAB_MAIL @ 0x083 + enum ITEM_RETRO_MAIL @ 0x084 + enum ITEM_CHERI_BERRY @ 0x085 + enum ITEM_CHESTO_BERRY @ 0x086 + enum ITEM_PECHA_BERRY @ 0x087 + enum ITEM_RAWST_BERRY @ 0x088 + enum ITEM_ASPEAR_BERRY @ 0x089 + enum ITEM_LEPPA_BERRY @ 0x08a + enum ITEM_ORAN_BERRY @ 0x08b + enum ITEM_PERSIM_BERRY @ 0x08c + enum ITEM_LUM_BERRY @ 0x08d + enum ITEM_SITRUS_BERRY @ 0x08e + enum ITEM_FIGY_BERRY @ 0x08f + enum ITEM_WIKI_BERRY @ 0x090 + enum ITEM_MAGO_BERRY @ 0x091 + enum ITEM_AGUAV_BERRY @ 0x092 + enum ITEM_IAPAPA_BERRY @ 0x093 + enum ITEM_RAZZ_BERRY @ 0x094 + enum ITEM_BLUK_BERRY @ 0x095 + enum ITEM_NANAB_BERRY @ 0x096 + enum ITEM_WEPEAR_BERRY @ 0x097 + enum ITEM_PINAP_BERRY @ 0x098 + enum ITEM_POMEG_BERRY @ 0x099 + enum ITEM_KELPSY_BERRY @ 0x09a + enum ITEM_QUALOT_BERRY @ 0x09b + enum ITEM_HONDEW_BERRY @ 0x09c + enum ITEM_GREPA_BERRY @ 0x09d + enum ITEM_TAMATO_BERRY @ 0x09e + enum ITEM_CORNN_BERRY @ 0x09f + enum ITEM_MAGOST_BERRY @ 0x0a0 + enum ITEM_RABUTA_BERRY @ 0x0a1 + enum ITEM_NOMEL_BERRY @ 0x0a2 + enum ITEM_SPELON_BERRY @ 0x0a3 + enum ITEM_PAMTRE_BERRY @ 0x0a4 + enum ITEM_WATMEL_BERRY @ 0x0a5 + enum ITEM_DURIN_BERRY @ 0x0a6 + enum ITEM_BELUE_BERRY @ 0x0a7 + enum ITEM_LIECHI_BERRY @ 0x0a8 + enum ITEM_GANLON_BERRY @ 0x0a9 + enum ITEM_SALAC_BERRY @ 0x0aa + enum ITEM_PETAYA_BERRY @ 0x0ab + enum ITEM_APICOT_BERRY @ 0x0ac + enum ITEM_LANSAT_BERRY @ 0x0ad + enum ITEM_STARF_BERRY @ 0x0ae + enum ITEM_ENIGMA_BERRY @ 0x0af + enum ITEM_0B0 + enum ITEM_0B1 + enum ITEM_0B2 + enum ITEM_BRIGHT_POWDER @ 0x0b3 + enum ITEM_WHITE_HERB @ 0x0b4 + enum ITEM_MACHO_BRACE @ 0x0b5 + enum ITEM_EXP_SHARE @ 0x0b6 + enum ITEM_QUICK_CLAW @ 0x0b7 + enum ITEM_SOOTHE_BELL @ 0x0b8 + enum ITEM_MENTAL_HERB @ 0x0b9 + enum ITEM_CHOICE_BAND @ 0x0ba + enum ITEM_KINGS_ROCK @ 0x0bb + enum ITEM_SILVER_POWDER @ 0x0bc + enum ITEM_AMULET_COIN @ 0x0bd + enum ITEM_CLEANSE_TAG @ 0x0be + enum ITEM_SOUL_DEW @ 0x0bf + enum ITEM_DEEP_SEA_TOOTH @ 0x0c0 + enum ITEM_DEEP_SEA_SCALE @ 0x0c1 + enum ITEM_SMOKE_BALL @ 0x0c2 + enum ITEM_EVERSTONE @ 0x0c3 + enum ITEM_FOCUS_BAND @ 0x0c4 + enum ITEM_LUCKY_EGG @ 0x0c5 + enum ITEM_SCOPE_LENS @ 0x0c6 + enum ITEM_METAL_COAT @ 0x0c7 + enum ITEM_LEFTOVERS @ 0x0c8 + enum ITEM_DRAGON_SCALE @ 0x0c9 + enum ITEM_LIGHT_BALL @ 0x0ca + enum ITEM_SOFT_SAND @ 0x0cb + enum ITEM_HARD_STONE @ 0x0cc + enum ITEM_MIRACLE_SEED @ 0x0cd + enum ITEM_BLACK_GLASSES @ 0x0ce + enum ITEM_BLACK_BELT @ 0x0cf + enum ITEM_MAGNET @ 0x0d0 + enum ITEM_MYSTIC_WATER @ 0x0d1 + enum ITEM_SHARP_BEAK @ 0x0d2 + enum ITEM_POISON_BARB @ 0x0d3 + enum ITEM_NEVER_MELT_ICE @ 0x0d4 + enum ITEM_SPELL_TAG @ 0x0d5 + enum ITEM_TWISTED_SPOON @ 0x0d6 + enum ITEM_CHARCOAL @ 0x0d7 + enum ITEM_DRAGON_FANG @ 0x0d8 + enum ITEM_SILK_SCARF @ 0x0d9 + enum ITEM_UP_GRADE @ 0x0da + enum ITEM_SHELL_BELL @ 0x0db + enum ITEM_SEA_INCENSE @ 0x0dc + enum ITEM_LAX_INCENSE @ 0x0dd + enum ITEM_LUCKY_PUNCH @ 0x0de + enum ITEM_METAL_POWDER @ 0x0df + enum ITEM_THICK_CLUB @ 0x0e0 + enum ITEM_STICK @ 0x0e1 + enum ITEM_0E2 + enum ITEM_0E3 + enum ITEM_0E4 + enum ITEM_0E5 + enum ITEM_0E6 + enum ITEM_0E7 + enum ITEM_0E8 + enum ITEM_0E9 + enum ITEM_0EA + enum ITEM_0EB + enum ITEM_0EC + enum ITEM_0ED + enum ITEM_0EE + enum ITEM_0EF + enum ITEM_0F0 + enum ITEM_0F1 + enum ITEM_0F2 + enum ITEM_0F3 + enum ITEM_0F4 + enum ITEM_0F5 + enum ITEM_0F6 + enum ITEM_0F7 + enum ITEM_0F8 + enum ITEM_0F9 + enum ITEM_0FA + enum ITEM_0FB + enum ITEM_0FC + enum ITEM_0FD + enum ITEM_RED_SCARF @ 0x0fe + enum ITEM_BLUE_SCARF @ 0x0ff + enum ITEM_PINK_SCARF @ 0x100 + enum ITEM_GREEN_SCARF @ 0x101 + enum ITEM_YELLOW_SCARF @ 0x102 + enum ITEM_MACH_BIKE @ 0x103 + enum ITEM_COIN_CASE @ 0x104 + enum ITEM_ITEMFINDER @ 0x105 + enum ITEM_OLD_ROD @ 0x106 + enum ITEM_GOOD_ROD @ 0x107 + enum ITEM_SUPER_ROD @ 0x108 + enum ITEM_SS_TICKET @ 0x109 + enum ITEM_CONTEST_PASS @ 0x10a + enum ITEM_10B + enum ITEM_WAILMER_PAIL @ 0x10c + enum ITEM_DEVON_GOODS @ 0x10d + enum ITEM_SOOT_SACK @ 0x10e + enum ITEM_BASEMENT_KEY @ 0x10f + enum ITEM_ACRO_BIKE @ 0x110 + enum ITEM_POKEBLOCK_CASE @ 0x111 + enum ITEM_LETTER @ 0x112 + enum ITEM_EON_TICKET @ 0x113 + enum ITEM_RED_ORB @ 0x114 + enum ITEM_BLUE_ORB @ 0x115 + enum ITEM_SCANNER @ 0x116 + enum ITEM_GO_GOGGLES @ 0x117 + enum ITEM_METEORITE @ 0x118 + enum ITEM_ROOM_1_KEY @ 0x119 + enum ITEM_ROOM_2_KEY @ 0x11a + enum ITEM_ROOM_4_KEY @ 0x11b + enum ITEM_ROOM_6_KEY @ 0x11c + enum ITEM_STORAGE_KEY @ 0x11d + enum ITEM_ROOT_FOSSIL @ 0x11e + enum ITEM_CLAW_FOSSIL @ 0x11f + enum ITEM_DEVON_SCOPE @ 0x120 + enum ITEM_TM01 @ 0x121 + enum ITEM_TM02 @ 0x122 + enum ITEM_TM03 @ 0x123 + enum ITEM_TM04 @ 0x124 + enum ITEM_TM05 @ 0x125 + enum ITEM_TM06 @ 0x126 + enum ITEM_TM07 @ 0x127 + enum ITEM_TM08 @ 0x128 + enum ITEM_TM09 @ 0x129 + enum ITEM_TM10 @ 0x12a + enum ITEM_TM11 @ 0x12b + enum ITEM_TM12 @ 0x12c + enum ITEM_TM13 @ 0x12d + enum ITEM_TM14 @ 0x12e + enum ITEM_TM15 @ 0x12f + enum ITEM_TM16 @ 0x130 + enum ITEM_TM17 @ 0x131 + enum ITEM_TM18 @ 0x132 + enum ITEM_TM19 @ 0x133 + enum ITEM_TM20 @ 0x134 + enum ITEM_TM21 @ 0x135 + enum ITEM_TM22 @ 0x136 + enum ITEM_TM23 @ 0x137 + enum ITEM_TM24 @ 0x138 + enum ITEM_TM25 @ 0x139 + enum ITEM_TM26 @ 0x13a + enum ITEM_TM27 @ 0x13b + enum ITEM_TM28 @ 0x13c + enum ITEM_TM29 @ 0x13d + enum ITEM_TM30 @ 0x13e + enum ITEM_TM31 @ 0x13f + enum ITEM_TM32 @ 0x140 + enum ITEM_TM33 @ 0x141 + enum ITEM_TM34 @ 0x142 + enum ITEM_TM35 @ 0x143 + enum ITEM_TM36 @ 0x144 + enum ITEM_TM37 @ 0x145 + enum ITEM_TM38 @ 0x146 + enum ITEM_TM39 @ 0x147 + enum ITEM_TM40 @ 0x148 + enum ITEM_TM41 @ 0x149 + enum ITEM_TM42 @ 0x14a + enum ITEM_TM43 @ 0x14b + enum ITEM_TM44 @ 0x14c + enum ITEM_TM45 @ 0x14d + enum ITEM_TM46 @ 0x14e + enum ITEM_TM47 @ 0x14f + enum ITEM_TM48 @ 0x150 + enum ITEM_TM49 @ 0x151 + enum ITEM_TM50 @ 0x152 + enum ITEM_HM01 @ 0x153 + enum ITEM_HM02 @ 0x154 + enum ITEM_HM03 @ 0x155 + enum ITEM_HM04 @ 0x156 + enum ITEM_HM05 @ 0x157 + enum ITEM_HM06 @ 0x158 + enum ITEM_HM07 @ 0x159 + enum ITEM_HM08 @ 0x15a + enum ITEM_15B + enum ITEM_15C + + @ FireRed/LeafGreen + enum ITEM_OAKS_PARCEL @ 0x15d + enum ITEM_POKE_FLUTE @ 0x15e + enum ITEM_SECRET_KEY @ 0x15f + enum ITEM_BIKE_VOUCHER @ 0x160 + enum ITEM_GOLD_TEETH @ 0x161 + enum ITEM_OLD_AMBER @ 0x162 + enum ITEM_CARD_KEY @ 0x163 + enum ITEM_LIFT_KEY @ 0x164 + enum ITEM_HELIX_FOSSIL @ 0x165 + enum ITEM_DOME_FOSSIL @ 0x166 + enum ITEM_SILPH_SCOPE @ 0x167 + enum ITEM_BICYCLE @ 0x168 + enum ITEM_TOWN_MAP @ 0x169 + enum ITEM_VS_SEEKER @ 0x16a + enum ITEM_FAME_CHECKER @ 0x16b + enum ITEM_TM_CASE @ 0x16c + enum ITEM_BERRY_POUCH @ 0x16d + enum ITEM_TEACHY_TV @ 0x16e + enum ITEM_TRI_PASS @ 0x16f + enum ITEM_RAINBOW_PASS @ 0x170 + enum ITEM_TEA @ 0x171 + enum ITEM_MYSTIC_TICKET @ 0x172 + enum ITEM_AURORA_TICKET @ 0x173 + enum ITEM_POWDER_JAR @ 0x174 + enum ITEM_RUBY @ 0x175 + enum ITEM_SAPPHIRE @ 0x176 + + @ Emerald + enum ITEM_MAGMA_EMBLEM @ 0x177 + enum ITEM_OLD_SEA_MAP @ 0x178 diff --git a/data/data2.s b/data/data2.s index fd1fcc0a4..873679c95 100644 --- a/data/data2.s +++ b/data/data2.s @@ -2030,12 +2030,11 @@ gBitTable:: @ 820872C .4byte 0x80000000 .align 2 -gSpriteTemplate_82087AC:: @ 82087AC +gInvisibleSpriteTemplate:: @ 82087AC spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy -@ sprite dimensions .align 2 -gUnknown_082087C4:: @ 82087C4 +gSpriteDimensions:: @ 82087C4 @ square .byte 1, 1 .byte 2, 2 diff --git a/include/items.h b/include/items.h index 8f6dceb6a..11cc2113c 100644 --- a/include/items.h +++ b/include/items.h @@ -1,315 +1,388 @@ #ifndef GUARD_ITEMS_H #define GUARD_ITEMS_H -#define ITEM_NONE 0x000 -#define ITEM_MASTER_BALL 0x001 -#define ITEM_ULTRA_BALL 0x002 -#define ITEM_GREAT_BALL 0x003 -#define ITEM_POKE_BALL 0x004 -#define ITEM_SAFARI_BALL 0x005 -#define ITEM_NET_BALL 0x006 -#define ITEM_DIVE_BALL 0x007 -#define ITEM_NEST_BALL 0x008 -#define ITEM_REPEAT_BALL 0x009 -#define ITEM_TIMER_BALL 0x00a -#define ITEM_LUXURY_BALL 0x00b -#define ITEM_PREMIER_BALL 0x00c -#define ITEM_POTION 0x00d -#define ITEM_ANTIDOTE 0x00e -#define ITEM_BURN_HEAL 0x00f -#define ITEM_ICE_HEAL 0x010 -#define ITEM_AWAKENING 0x011 -#define ITEM_PARALYZE_HEAL 0x012 -#define ITEM_FULL_RESTORE 0x013 -#define ITEM_MAX_POTION 0x014 -#define ITEM_HYPER_POTION 0x015 -#define ITEM_SUPER_POTION 0x016 -#define ITEM_FULL_HEAL 0x017 -#define ITEM_REVIVE 0x018 -#define ITEM_MAX_REVIVE 0x019 -#define ITEM_FRESH_WATER 0x01a -#define ITEM_SODA_POP 0x01b -#define ITEM_LEMONADE 0x01c -#define ITEM_MOOMOO_MILK 0x01d -#define ITEM_ENERGY_POWDER 0x01e -#define ITEM_ENERGY_ROOT 0x01f -#define ITEM_HEAL_POWDER 0x020 -#define ITEM_REVIVAL_HERB 0x021 -#define ITEM_ETHER 0x022 -#define ITEM_MAX_ETHER 0x023 -#define ITEM_ELIXIR 0x024 -#define ITEM_MAX_ELIXIR 0x025 -#define ITEM_LAVA_COOKIE 0x026 -#define ITEM_BLUE_FLUTE 0x027 -#define ITEM_YELLOW_FLUTE 0x028 -#define ITEM_RED_FLUTE 0x029 -#define ITEM_BLACK_FLUTE 0x02a -#define ITEM_WHITE_FLUTE 0x02b -#define ITEM_BERRY_JUICE 0x02c -#define ITEM_SACRED_ASH 0x02d -#define ITEM_SHOAL_SALT 0x02e -#define ITEM_SHOAL_SHELL 0x02f -#define ITEM_RED_SHARD 0x030 -#define ITEM_BLUE_SHARD 0x031 -#define ITEM_YELLOW_SHARD 0x032 -#define ITEM_GREEN_SHARD 0x033 -#define ITEM_HP_UP 0x03f -#define ITEM_PROTEIN 0x040 -#define ITEM_IRON 0x041 -#define ITEM_CARBOS 0x042 -#define ITEM_CALCIUM 0x043 -#define ITEM_RARE_CANDY 0x044 -#define ITEM_PP_UP 0x045 -#define ITEM_ZINC 0x046 -#define ITEM_PP_MAX 0x047 -#define ITEM_GUARD_SPEC 0x049 -#define ITEM_DIRE_HIT 0x04a -#define ITEM_X_ATTACK 0x04b -#define ITEM_X_DEFEND 0x04c -#define ITEM_X_SPEED 0x04d -#define ITEM_X_ACCURACY 0x04e -#define ITEM_X_SPECIAL 0x04f -#define ITEM_POKE_DOLL 0x050 -#define ITEM_FLUFFY_TAIL 0x051 -#define ITEM_SUPER_REPEL 0x053 -#define ITEM_MAX_REPEL 0x054 -#define ITEM_ESCAPE_ROPE 0x055 -#define ITEM_REPEL 0x056 -#define ITEM_SUN_STONE 0x05d -#define ITEM_MOON_STONE 0x05e -#define ITEM_FIRE_STONE 0x05f -#define ITEM_THUNDER_STONE 0x060 -#define ITEM_WATER_STONE 0x061 -#define ITEM_LEAF_STONE 0x062 -#define ITEM_TINY_MUSHROOM 0x067 -#define ITEM_BIG_MUSHROOM 0x068 -#define ITEM_PEARL 0x06a -#define ITEM_BIG_PEARL 0x06b -#define ITEM_STARDUST 0x06c -#define ITEM_STAR_PIECE 0x06d -#define ITEM_NUGGET 0x06e -#define ITEM_HEART_SCALE 0x06f -#define ITEM_ORANGE_MAIL 0x079 -#define ITEM_HARBOR_MAIL 0x07a -#define ITEM_GLITTER_MAIL 0x07b -#define ITEM_MECH_MAIL 0x07c -#define ITEM_WOOD_MAIL 0x07d -#define ITEM_WAVE_MAIL 0x07e -#define ITEM_BEAD_MAIL 0x07f -#define ITEM_SHADOW_MAIL 0x080 -#define ITEM_TROPIC_MAIL 0x081 -#define ITEM_DREAM_MAIL 0x082 -#define ITEM_FAB_MAIL 0x083 -#define ITEM_RETRO_MAIL 0x084 -#define ITEM_CHERI_BERRY 0x085 -#define ITEM_CHESTO_BERRY 0x086 -#define ITEM_PECHA_BERRY 0x087 -#define ITEM_RAWST_BERRY 0x088 -#define ITEM_ASPEAR_BERRY 0x089 -#define ITEM_LEPPA_BERRY 0x08a -#define ITEM_ORAN_BERRY 0x08b -#define ITEM_PERSIM_BERRY 0x08c -#define ITEM_LUM_BERRY 0x08d -#define ITEM_SITRUS_BERRY 0x08e -#define ITEM_FIGY_BERRY 0x08f -#define ITEM_WIKI_BERRY 0x090 -#define ITEM_MAGO_BERRY 0x091 -#define ITEM_AGUAV_BERRY 0x092 -#define ITEM_IAPAPA_BERRY 0x093 -#define ITEM_RAZZ_BERRY 0x094 -#define ITEM_BLUK_BERRY 0x095 -#define ITEM_NANAB_BERRY 0x096 -#define ITEM_WEPEAR_BERRY 0x097 -#define ITEM_PINAP_BERRY 0x098 -#define ITEM_POMEG_BERRY 0x099 -#define ITEM_KELPSY_BERRY 0x09a -#define ITEM_QUALOT_BERRY 0x09b -#define ITEM_HONDEW_BERRY 0x09c -#define ITEM_GREPA_BERRY 0x09d -#define ITEM_TAMATO_BERRY 0x09e -#define ITEM_CORNN_BERRY 0x09f -#define ITEM_MAGOST_BERRY 0x0a0 -#define ITEM_RABUTA_BERRY 0x0a1 -#define ITEM_NOMEL_BERRY 0x0a2 -#define ITEM_SPELON_BERRY 0x0a3 -#define ITEM_PAMTRE_BERRY 0x0a4 -#define ITEM_WATMEL_BERRY 0x0a5 -#define ITEM_DURIN_BERRY 0x0a6 -#define ITEM_BELUE_BERRY 0x0a7 -#define ITEM_LIECHI_BERRY 0x0a8 -#define ITEM_GANLON_BERRY 0x0a9 -#define ITEM_SALAC_BERRY 0x0aa -#define ITEM_PETAYA_BERRY 0x0ab -#define ITEM_APICOT_BERRY 0x0ac -#define ITEM_LANSAT_BERRY 0x0ad -#define ITEM_STARF_BERRY 0x0ae -#define ITEM_ENIGMA_BERRY 0x0af -#define ITEM_BRIGHT_POWDER 0x0b3 -#define ITEM_WHITE_HERB 0x0b4 -#define ITEM_MACHO_BRACE 0x0b5 -#define ITEM_EXP_SHARE 0x0b6 -#define ITEM_QUICK_CLAW 0x0b7 -#define ITEM_SOOTHE_BELL 0x0b8 -#define ITEM_MENTAL_HERB 0x0b9 -#define ITEM_CHOICE_BAND 0x0ba -#define ITEM_KINGS_ROCK 0x0bb -#define ITEM_SILVER_POWDER 0x0bc -#define ITEM_AMULET_COIN 0x0bd -#define ITEM_CLEANSE_TAG 0x0be -#define ITEM_SOUL_DEW 0x0bf -#define ITEM_DEEP_SEA_TOOTH 0x0c0 -#define ITEM_DEEP_SEA_SCALE 0x0c1 -#define ITEM_SMOKE_BALL 0x0c2 -#define ITEM_EVERSTONE 0x0c3 -#define ITEM_FOCUS_BAND 0x0c4 -#define ITEM_LUCKY_EGG 0x0c5 -#define ITEM_SCOPE_LENS 0x0c6 -#define ITEM_METAL_COAT 0x0c7 -#define ITEM_LEFTOVERS 0x0c8 -#define ITEM_DRAGON_SCALE 0x0c9 -#define ITEM_LIGHT_BALL 0x0ca -#define ITEM_SOFT_SAND 0x0cb -#define ITEM_HARD_STONE 0x0cc -#define ITEM_MIRACLE_SEED 0x0cd -#define ITEM_BLACK_GLASSES 0x0ce -#define ITEM_BLACK_BELT 0x0cf -#define ITEM_MAGNET 0x0d0 -#define ITEM_MYSTIC_WATER 0x0d1 -#define ITEM_SHARP_BEAK 0x0d2 -#define ITEM_POISON_BARB 0x0d3 -#define ITEM_NEVER_MELT_ICE 0x0d4 -#define ITEM_SPELL_TAG 0x0d5 -#define ITEM_TWISTED_SPOON 0x0d6 -#define ITEM_CHARCOAL 0x0d7 -#define ITEM_DRAGON_FANG 0x0d8 -#define ITEM_SILK_SCARF 0x0d9 -#define ITEM_UP_GRADE 0x0da -#define ITEM_SHELL_BELL 0x0db -#define ITEM_SEA_INCENSE 0x0dc -#define ITEM_LAX_INCENSE 0x0dd -#define ITEM_LUCKY_PUNCH 0x0de -#define ITEM_METAL_POWDER 0x0df -#define ITEM_THICK_CLUB 0x0e0 -#define ITEM_STICK 0x0e1 -#define ITEM_RED_SCARF 0x0fe -#define ITEM_BLUE_SCARF 0x0ff -#define ITEM_PINK_SCARF 0x100 -#define ITEM_GREEN_SCARF 0x101 -#define ITEM_YELLOW_SCARF 0x102 -#define ITEM_MACH_BIKE 0x103 -#define ITEM_COIN_CASE 0x104 -#define ITEM_ITEMFINDER 0x105 -#define ITEM_OLD_ROD 0x106 -#define ITEM_GOOD_ROD 0x107 -#define ITEM_SUPER_ROD 0x108 -#define ITEM_SS_TICKET 0x109 -#define ITEM_CONTEST_PASS 0x10a -#define ITEM_WAILMER_PAIL 0x10c -#define ITEM_DEVON_GOODS 0x10d -#define ITEM_SOOT_SACK 0x10e -#define ITEM_BASEMENT_KEY 0x10f -#define ITEM_ACRO_BIKE 0x110 -#define ITEM_POKEBLOCK_CASE 0x111 -#define ITEM_LETTER 0x112 -#define ITEM_EON_TICKET 0x113 -#define ITEM_RED_ORB 0x114 -#define ITEM_BLUE_ORB 0x115 -#define ITEM_SCANNER 0x116 -#define ITEM_GO_GOGGLES 0x117 -#define ITEM_METEORITE 0x118 -#define ITEM_ROOM_1_KEY 0x119 -#define ITEM_ROOM_2_KEY 0x11a -#define ITEM_ROOM_4_KEY 0x11b -#define ITEM_ROOM_6_KEY 0x11c -#define ITEM_STORAGE_KEY 0x11d -#define ITEM_ROOT_FOSSIL 0x11e -#define ITEM_CLAW_FOSSIL 0x11f -#define ITEM_DEVON_SCOPE 0x120 -#define ITEM_TM01 0x121 -#define ITEM_TM02 0x122 -#define ITEM_TM03 0x123 -#define ITEM_TM04 0x124 -#define ITEM_TM05 0x125 -#define ITEM_TM06 0x126 -#define ITEM_TM07 0x127 -#define ITEM_TM08 0x128 -#define ITEM_TM09 0x129 -#define ITEM_TM10 0x12a -#define ITEM_TM11 0x12b -#define ITEM_TM12 0x12c -#define ITEM_TM13 0x12d -#define ITEM_TM14 0x12e -#define ITEM_TM15 0x12f -#define ITEM_TM16 0x130 -#define ITEM_TM17 0x131 -#define ITEM_TM18 0x132 -#define ITEM_TM19 0x133 -#define ITEM_TM20 0x134 -#define ITEM_TM21 0x135 -#define ITEM_TM22 0x136 -#define ITEM_TM23 0x137 -#define ITEM_TM24 0x138 -#define ITEM_TM25 0x139 -#define ITEM_TM26 0x13a -#define ITEM_TM27 0x13b -#define ITEM_TM28 0x13c -#define ITEM_TM29 0x13d -#define ITEM_TM30 0x13e -#define ITEM_TM31 0x13f -#define ITEM_TM32 0x140 -#define ITEM_TM33 0x141 -#define ITEM_TM34 0x142 -#define ITEM_TM35 0x143 -#define ITEM_TM36 0x144 -#define ITEM_TM37 0x145 -#define ITEM_TM38 0x146 -#define ITEM_TM39 0x147 -#define ITEM_TM40 0x148 -#define ITEM_TM41 0x149 -#define ITEM_TM42 0x14a -#define ITEM_TM43 0x14b -#define ITEM_TM44 0x14c -#define ITEM_TM45 0x14d -#define ITEM_TM46 0x14e -#define ITEM_TM47 0x14f -#define ITEM_TM48 0x150 -#define ITEM_TM49 0x151 -#define ITEM_TM50 0x152 -#define ITEM_HM01 0x153 -#define ITEM_HM02 0x154 -#define ITEM_HM03 0x155 -#define ITEM_HM04 0x156 -#define ITEM_HM05 0x157 -#define ITEM_HM06 0x158 -#define ITEM_HM07 0x159 -#define ITEM_HM08 0x15a -#define ITEM_OAKS_PARCEL 0x15d -#define ITEM_POKE_FLUTE 0x15e -#define ITEM_SECRET_KEY 0x15f -#define ITEM_BIKE_VOUCHER 0x160 -#define ITEM_GOLD_TEETH 0x161 -#define ITEM_OLD_AMBER 0x162 -#define ITEM_CARD_KEY 0x163 -#define ITEM_LIFT_KEY 0x164 -#define ITEM_HELIX_FOSSIL 0x165 -#define ITEM_DOME_FOSSIL 0x166 -#define ITEM_SILPH_SCOPE 0x167 -#define ITEM_BICYCLE 0x168 -#define ITEM_TOWN_MAP 0x169 -#define ITEM_VS_SEEKER 0x16a -#define ITEM_FAME_CHECKER 0x16b -#define ITEM_TM_CASE 0x16c -#define ITEM_BERRY_POUCH 0x16d -#define ITEM_TEACHY_TV 0x16e -#define ITEM_TRI_PASS 0x16f -#define ITEM_RAINBOW_PASS 0x170 -#define ITEM_TEA 0x171 -#define ITEM_MYSTIC_TICKET 0x172 -#define ITEM_AURORA_TICKET 0x173 -#define ITEM_POWDER_JAR 0x174 -#define ITEM_RUBY 0x175 -#define ITEM_SAPPHIRE 0x176 -#define ITEM_MAGMA_EMBLEM 0x177 -#define ITEM_OLD_SEA_MAP 0x178 +enum { + ITEM_NONE, // 0x000 + ITEM_MASTER_BALL, // 0x001 + ITEM_ULTRA_BALL, // 0x002 + ITEM_GREAT_BALL, // 0x003 + ITEM_POKE_BALL, // 0x004 + ITEM_SAFARI_BALL, // 0x005 + ITEM_NET_BALL, // 0x006 + ITEM_DIVE_BALL, // 0x007 + ITEM_NEST_BALL, // 0x008 + ITEM_REPEAT_BALL, // 0x009 + ITEM_TIMER_BALL, // 0x00a + ITEM_LUXURY_BALL, // 0x00b + ITEM_PREMIER_BALL, // 0x00c + ITEM_POTION, // 0x00d + ITEM_ANTIDOTE, // 0x00e + ITEM_BURN_HEAL, // 0x00f + ITEM_ICE_HEAL, // 0x010 + ITEM_AWAKENING, // 0x011 + ITEM_PARALYZE_HEAL, // 0x012 + ITEM_FULL_RESTORE, // 0x013 + ITEM_MAX_POTION, // 0x014 + ITEM_HYPER_POTION, // 0x015 + ITEM_SUPER_POTION, // 0x016 + ITEM_FULL_HEAL, // 0x017 + ITEM_REVIVE, // 0x018 + ITEM_MAX_REVIVE, // 0x019 + ITEM_FRESH_WATER, // 0x01a + ITEM_SODA_POP, // 0x01b + ITEM_LEMONADE, // 0x01c + ITEM_MOOMOO_MILK, // 0x01d + ITEM_ENERGY_POWDER, // 0x01e + ITEM_ENERGY_ROOT, // 0x01f + ITEM_HEAL_POWDER, // 0x020 + ITEM_REVIVAL_HERB, // 0x021 + ITEM_ETHER, // 0x022 + ITEM_MAX_ETHER, // 0x023 + ITEM_ELIXIR, // 0x024 + ITEM_MAX_ELIXIR, // 0x025 + ITEM_LAVA_COOKIE, // 0x026 + ITEM_BLUE_FLUTE, // 0x027 + ITEM_YELLOW_FLUTE, // 0x028 + ITEM_RED_FLUTE, // 0x029 + ITEM_BLACK_FLUTE, // 0x02a + ITEM_WHITE_FLUTE, // 0x02b + ITEM_BERRY_JUICE, // 0x02c + ITEM_SACRED_ASH, // 0x02d + ITEM_SHOAL_SALT, // 0x02e + ITEM_SHOAL_SHELL, // 0x02f + ITEM_RED_SHARD, // 0x030 + ITEM_BLUE_SHARD, // 0x031 + ITEM_YELLOW_SHARD, // 0x032 + ITEM_GREEN_SHARD, // 0x033 + ITEM_034, + ITEM_035, + ITEM_036, + ITEM_037, + ITEM_038, + ITEM_039, + ITEM_03A, + ITEM_03B, + ITEM_03C, + ITEM_03D, + ITEM_03E, + ITEM_HP_UP, // 0x03f + ITEM_PROTEIN, // 0x040 + ITEM_IRON, // 0x041 + ITEM_CARBOS, // 0x042 + ITEM_CALCIUM, // 0x043 + ITEM_RARE_CANDY, // 0x044 + ITEM_PP_UP, // 0x045 + ITEM_ZINC, // 0x046 + ITEM_PP_MAX, // 0x047 + ITEM_048, + ITEM_GUARD_SPEC, // 0x049 + ITEM_DIRE_HIT, // 0x04a + ITEM_X_ATTACK, // 0x04b + ITEM_X_DEFEND, // 0x04c + ITEM_X_SPEED, // 0x04d + ITEM_X_ACCURACY, // 0x04e + ITEM_X_SPECIAL, // 0x04f + ITEM_POKE_DOLL, // 0x050 + ITEM_FLUFFY_TAIL, // 0x051 + ITEM_052, + ITEM_SUPER_REPEL, // 0x053 + ITEM_MAX_REPEL, // 0x054 + ITEM_ESCAPE_ROPE, // 0x055 + ITEM_REPEL, // 0x056 + ITEM_057, + ITEM_058, + ITEM_059, + ITEM_05A, + ITEM_05B, + ITEM_05C, + ITEM_SUN_STONE, // 0x05d + ITEM_MOON_STONE, // 0x05e + ITEM_FIRE_STONE, // 0x05f + ITEM_THUNDER_STONE, // 0x060 + ITEM_WATER_STONE, // 0x061 + ITEM_LEAF_STONE, // 0x062 + ITEM_063, + ITEM_064, + ITEM_065, + ITEM_066, + ITEM_TINY_MUSHROOM, // 0x067 + ITEM_BIG_MUSHROOM, // 0x068 + ITEM_069, + ITEM_PEARL, // 0x06a + ITEM_BIG_PEARL, // 0x06b + ITEM_STARDUST, // 0x06c + ITEM_STAR_PIECE, // 0x06d + ITEM_NUGGET, // 0x06e + ITEM_HEART_SCALE, // 0x06f + ITEM_070, + ITEM_071, + ITEM_072, + ITEM_073, + ITEM_074, + ITEM_075, + ITEM_076, + ITEM_077, + ITEM_078, + ITEM_ORANGE_MAIL, // 0x079 + ITEM_HARBOR_MAIL, // 0x07a + ITEM_GLITTER_MAIL, // 0x07b + ITEM_MECH_MAIL, // 0x07c + ITEM_WOOD_MAIL, // 0x07d + ITEM_WAVE_MAIL, // 0x07e + ITEM_BEAD_MAIL, // 0x07f + ITEM_SHADOW_MAIL, // 0x080 + ITEM_TROPIC_MAIL, // 0x081 + ITEM_DREAM_MAIL, // 0x082 + ITEM_FAB_MAIL, // 0x083 + ITEM_RETRO_MAIL, // 0x084 + ITEM_CHERI_BERRY, // 0x085 + ITEM_CHESTO_BERRY, // 0x086 + ITEM_PECHA_BERRY, // 0x087 + ITEM_RAWST_BERRY, // 0x088 + ITEM_ASPEAR_BERRY, // 0x089 + ITEM_LEPPA_BERRY, // 0x08a + ITEM_ORAN_BERRY, // 0x08b + ITEM_PERSIM_BERRY, // 0x08c + ITEM_LUM_BERRY, // 0x08d + ITEM_SITRUS_BERRY, // 0x08e + ITEM_FIGY_BERRY, // 0x08f + ITEM_WIKI_BERRY, // 0x090 + ITEM_MAGO_BERRY, // 0x091 + ITEM_AGUAV_BERRY, // 0x092 + ITEM_IAPAPA_BERRY, // 0x093 + ITEM_RAZZ_BERRY, // 0x094 + ITEM_BLUK_BERRY, // 0x095 + ITEM_NANAB_BERRY, // 0x096 + ITEM_WEPEAR_BERRY, // 0x097 + ITEM_PINAP_BERRY, // 0x098 + ITEM_POMEG_BERRY, // 0x099 + ITEM_KELPSY_BERRY, // 0x09a + ITEM_QUALOT_BERRY, // 0x09b + ITEM_HONDEW_BERRY, // 0x09c + ITEM_GREPA_BERRY, // 0x09d + ITEM_TAMATO_BERRY, // 0x09e + ITEM_CORNN_BERRY, // 0x09f + ITEM_MAGOST_BERRY, // 0x0a0 + ITEM_RABUTA_BERRY, // 0x0a1 + ITEM_NOMEL_BERRY, // 0x0a2 + ITEM_SPELON_BERRY, // 0x0a3 + ITEM_PAMTRE_BERRY, // 0x0a4 + ITEM_WATMEL_BERRY, // 0x0a5 + ITEM_DURIN_BERRY, // 0x0a6 + ITEM_BELUE_BERRY, // 0x0a7 + ITEM_LIECHI_BERRY, // 0x0a8 + ITEM_GANLON_BERRY, // 0x0a9 + ITEM_SALAC_BERRY, // 0x0aa + ITEM_PETAYA_BERRY, // 0x0ab + ITEM_APICOT_BERRY, // 0x0ac + ITEM_LANSAT_BERRY, // 0x0ad + ITEM_STARF_BERRY, // 0x0ae + ITEM_ENIGMA_BERRY, // 0x0af + ITEM_0B0, + ITEM_0B1, + ITEM_0B2, + ITEM_BRIGHT_POWDER, // 0x0b3 + ITEM_WHITE_HERB, // 0x0b4 + ITEM_MACHO_BRACE, // 0x0b5 + ITEM_EXP_SHARE, // 0x0b6 + ITEM_QUICK_CLAW, // 0x0b7 + ITEM_SOOTHE_BELL, // 0x0b8 + ITEM_MENTAL_HERB, // 0x0b9 + ITEM_CHOICE_BAND, // 0x0ba + ITEM_KINGS_ROCK, // 0x0bb + ITEM_SILVER_POWDER, // 0x0bc + ITEM_AMULET_COIN, // 0x0bd + ITEM_CLEANSE_TAG, // 0x0be + ITEM_SOUL_DEW, // 0x0bf + ITEM_DEEP_SEA_TOOTH, // 0x0c0 + ITEM_DEEP_SEA_SCALE, // 0x0c1 + ITEM_SMOKE_BALL, // 0x0c2 + ITEM_EVERSTONE, // 0x0c3 + ITEM_FOCUS_BAND, // 0x0c4 + ITEM_LUCKY_EGG, // 0x0c5 + ITEM_SCOPE_LENS, // 0x0c6 + ITEM_METAL_COAT, // 0x0c7 + ITEM_LEFTOVERS, // 0x0c8 + ITEM_DRAGON_SCALE, // 0x0c9 + ITEM_LIGHT_BALL, // 0x0ca + ITEM_SOFT_SAND, // 0x0cb + ITEM_HARD_STONE, // 0x0cc + ITEM_MIRACLE_SEED, // 0x0cd + ITEM_BLACK_GLASSES, // 0x0ce + ITEM_BLACK_BELT, // 0x0cf + ITEM_MAGNET, // 0x0d0 + ITEM_MYSTIC_WATER, // 0x0d1 + ITEM_SHARP_BEAK, // 0x0d2 + ITEM_POISON_BARB, // 0x0d3 + ITEM_NEVER_MELT_ICE, // 0x0d4 + ITEM_SPELL_TAG, // 0x0d5 + ITEM_TWISTED_SPOON, // 0x0d6 + ITEM_CHARCOAL, // 0x0d7 + ITEM_DRAGON_FANG, // 0x0d8 + ITEM_SILK_SCARF, // 0x0d9 + ITEM_UP_GRADE, // 0x0da + ITEM_SHELL_BELL, // 0x0db + ITEM_SEA_INCENSE, // 0x0dc + ITEM_LAX_INCENSE, // 0x0dd + ITEM_LUCKY_PUNCH, // 0x0de + ITEM_METAL_POWDER, // 0x0df + ITEM_THICK_CLUB, // 0x0e0 + ITEM_STICK, // 0x0e1 + ITEM_0E2, + ITEM_0E3, + ITEM_0E4, + ITEM_0E5, + ITEM_0E6, + ITEM_0E7, + ITEM_0E8, + ITEM_0E9, + ITEM_0EA, + ITEM_0EB, + ITEM_0EC, + ITEM_0ED, + ITEM_0EE, + ITEM_0EF, + ITEM_0F0, + ITEM_0F1, + ITEM_0F2, + ITEM_0F3, + ITEM_0F4, + ITEM_0F5, + ITEM_0F6, + ITEM_0F7, + ITEM_0F8, + ITEM_0F9, + ITEM_0FA, + ITEM_0FB, + ITEM_0FC, + ITEM_0FD, + ITEM_RED_SCARF, // 0x0fe + ITEM_BLUE_SCARF, // 0x0ff + ITEM_PINK_SCARF, // 0x100 + ITEM_GREEN_SCARF, // 0x101 + ITEM_YELLOW_SCARF, // 0x102 + ITEM_MACH_BIKE, // 0x103 + ITEM_COIN_CASE, // 0x104 + ITEM_ITEMFINDER, // 0x105 + ITEM_OLD_ROD, // 0x106 + ITEM_GOOD_ROD, // 0x107 + ITEM_SUPER_ROD, // 0x108 + ITEM_SS_TICKET, // 0x109 + ITEM_CONTEST_PASS, // 0x10a + ITEM_10B, + ITEM_WAILMER_PAIL, // 0x10c + ITEM_DEVON_GOODS, // 0x10d + ITEM_SOOT_SACK, // 0x10e + ITEM_BASEMENT_KEY, // 0x10f + ITEM_ACRO_BIKE, // 0x110 + ITEM_POKEBLOCK_CASE, // 0x111 + ITEM_LETTER, // 0x112 + ITEM_EON_TICKET, // 0x113 + ITEM_RED_ORB, // 0x114 + ITEM_BLUE_ORB, // 0x115 + ITEM_SCANNER, // 0x116 + ITEM_GO_GOGGLES, // 0x117 + ITEM_METEORITE, // 0x118 + ITEM_ROOM_1_KEY, // 0x119 + ITEM_ROOM_2_KEY, // 0x11a + ITEM_ROOM_4_KEY, // 0x11b + ITEM_ROOM_6_KEY, // 0x11c + ITEM_STORAGE_KEY, // 0x11d + ITEM_ROOT_FOSSIL, // 0x11e + ITEM_CLAW_FOSSIL, // 0x11f + ITEM_DEVON_SCOPE, // 0x120 + ITEM_TM01, // 0x121 + ITEM_TM02, // 0x122 + ITEM_TM03, // 0x123 + ITEM_TM04, // 0x124 + ITEM_TM05, // 0x125 + ITEM_TM06, // 0x126 + ITEM_TM07, // 0x127 + ITEM_TM08, // 0x128 + ITEM_TM09, // 0x129 + ITEM_TM10, // 0x12a + ITEM_TM11, // 0x12b + ITEM_TM12, // 0x12c + ITEM_TM13, // 0x12d + ITEM_TM14, // 0x12e + ITEM_TM15, // 0x12f + ITEM_TM16, // 0x130 + ITEM_TM17, // 0x131 + ITEM_TM18, // 0x132 + ITEM_TM19, // 0x133 + ITEM_TM20, // 0x134 + ITEM_TM21, // 0x135 + ITEM_TM22, // 0x136 + ITEM_TM23, // 0x137 + ITEM_TM24, // 0x138 + ITEM_TM25, // 0x139 + ITEM_TM26, // 0x13a + ITEM_TM27, // 0x13b + ITEM_TM28, // 0x13c + ITEM_TM29, // 0x13d + ITEM_TM30, // 0x13e + ITEM_TM31, // 0x13f + ITEM_TM32, // 0x140 + ITEM_TM33, // 0x141 + ITEM_TM34, // 0x142 + ITEM_TM35, // 0x143 + ITEM_TM36, // 0x144 + ITEM_TM37, // 0x145 + ITEM_TM38, // 0x146 + ITEM_TM39, // 0x147 + ITEM_TM40, // 0x148 + ITEM_TM41, // 0x149 + ITEM_TM42, // 0x14a + ITEM_TM43, // 0x14b + ITEM_TM44, // 0x14c + ITEM_TM45, // 0x14d + ITEM_TM46, // 0x14e + ITEM_TM47, // 0x14f + ITEM_TM48, // 0x150 + ITEM_TM49, // 0x151 + ITEM_TM50, // 0x152 + ITEM_HM01, // 0x153 + ITEM_HM02, // 0x154 + ITEM_HM03, // 0x155 + ITEM_HM04, // 0x156 + ITEM_HM05, // 0x157 + ITEM_HM06, // 0x158 + ITEM_HM07, // 0x159 + ITEM_HM08, // 0x15a + ITEM_15B, + ITEM_15C, + + // FireRed/LeafGreen + ITEM_OAKS_PARCEL, // 0x15d + ITEM_POKE_FLUTE, // 0x15e + ITEM_SECRET_KEY, // 0x15f + ITEM_BIKE_VOUCHER, // 0x160 + ITEM_GOLD_TEETH, // 0x161 + ITEM_OLD_AMBER, // 0x162 + ITEM_CARD_KEY, // 0x163 + ITEM_LIFT_KEY, // 0x164 + ITEM_HELIX_FOSSIL, // 0x165 + ITEM_DOME_FOSSIL, // 0x166 + ITEM_SILPH_SCOPE, // 0x167 + ITEM_BICYCLE, // 0x168 + ITEM_TOWN_MAP, // 0x169 + ITEM_VS_SEEKER, // 0x16a + ITEM_FAME_CHECKER, // 0x16b + ITEM_TM_CASE, // 0x16c + ITEM_BERRY_POUCH, // 0x16d + ITEM_TEACHY_TV, // 0x16e + ITEM_TRI_PASS, // 0x16f + ITEM_RAINBOW_PASS, // 0x170 + ITEM_TEA, // 0x171 + ITEM_MYSTIC_TICKET, // 0x172 + ITEM_AURORA_TICKET, // 0x173 + ITEM_POWDER_JAR, // 0x174 + ITEM_RUBY, // 0x175 + ITEM_SAPPHIRE, // 0x176 + + // Emerald + ITEM_MAGMA_EMBLEM, // 0x177 + ITEM_OLD_SEA_MAP, // 0x178 +}; #endif // GUARD_ITEMS_H diff --git a/ld_script.txt b/ld_script.txt index 7628830cd..c5c665163 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -68,7 +68,7 @@ SECTIONS { asm/pokemon_3.o(.text); src/trig.o(.text); src/rng.o(.text); - asm/util.o(.text); + src/util.o(.text); src/blend_palette.o(.text); src/daycare.o(.text); asm/daycare.o(.text); diff --git a/src/decompress.c b/src/decompress.c index fb91ebd67..12be8a055 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -91,11 +91,11 @@ void LoadSpecialPokePic(const struct SpriteSheet *spriteSheet, u32 b, u32 c, u32 { u16 i = (((g & 0x3000000) >> 18) | ((g & 0x30000) >> 12) | ((g & 0x300) >> 6) | (g & 3)) % 0x1C; - // if it is Unown A, set the index to where Unown begins, otherwise add the egg index to get the correct letter to load. + // The other Unowns are separate from Unown A. if (i == 0) i = SPECIES_UNOWN; else - i += SPECIES_EGG; + i += SPECIES_UNOWN_B - 1; if (frontOrBack8 == 0) LZ77UnCompWram(gMonBackPicTable[i].data, dest); diff --git a/src/util.c b/src/util.c new file mode 100644 index 000000000..2278c50fe --- /dev/null +++ b/src/util.c @@ -0,0 +1,389 @@ +#include "global.h" +#include "sprite.h" + +extern const struct SpriteTemplate gInvisibleSpriteTemplate; +extern const u8 gSpriteDimensions[3][4][2]; +extern const u16 gCrc16Table[]; + +u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *)) { + u8 sprite = CreateSprite(&gInvisibleSpriteTemplate, 248, 168, 14); + gSprites[sprite].invisible = TRUE; + gSprites[sprite].callback = callback; + return sprite; +} + +void StoreWordInTwoHalfwords(u16 *h, u32 w) { + h[0] = (u16)(w); + h[1] = (u16)(w >> 16); +} + +void LoadWordFromTwoHalfwords(u16 *h, u32 *w) { + *w = h[0] | (s16)h[1] << 16; +} + +void SetBgAffineStruct(struct BgAffineSrcData *src, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha) { + src->texX = texX; + src->texY = texY; + src->scrX = scrX; + src->scrY = scrY; + src->sx = sx; + src->sy = sy; + src->alpha = alpha; +} + +void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha) { + struct BgAffineSrcData src; + SetBgAffineStruct( + &src, + texX, texY, + scrX, scrY, + sx, sy, + alpha + ); + BgAffineSet(&src, dest, 1); +} + +#ifdef NONMATCHING + +// Functionally equivalent. +// Only the two yflip loops don't match. +void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output) { + u8 x, y; + s8 i, j; + u8 xflip[32]; + u8 h = gSpriteDimensions[shape][size][1]; + u8 w = gSpriteDimensions[shape][size][0]; + for (y = 0; y < h; y++) { + int filler = 32 - w; + for (x = 0; x < w; x++) { + int tile = (*tilemap & 0x3ff) * 32; + int attr = *tilemap & 0xc00; + if (attr == 0) { + void *src = tiles + tile; + void *dest = output; + int length = 32; + DmaCopy32(3, src, dest, length); + } else if (attr == 0x800) { // yflip + for (i = 0; i < 8; i++) { + void *src = tiles; + void *dest = output; + int length = 4; + // this is likely wrong, but makes it closer to matching + src += tile + (7 - i) * 4; + dest += i * 4; + DmaCopy32(3, src, dest, length); + } + } else { // xflip + for (i = 0; i < 8; i++) { + for (j = 0; j < 4; j++) { + u8 i2 = i * 4; + xflip[i2 + (3-j)] = (tiles[tile + i2 + j] & 0xf) << 4; + xflip[i2 + (3-j)] |= tiles[tile + i2 + j] >> 4; + } + } + if (*tilemap & 0x800) { // yflip + for (i = 0; i < 8; i++) { + void *src = xflip + (7-i) * 4; + void *dest = output + i*4; + int length = 4; + DmaCopy32(3, src, dest, length); + } + } else { + void *src = xflip; + void *dest = output; + int length = 32; + DmaCopy32(3, src, dest, length); + } + } + tilemap++; + output += 32; + } + tilemap += filler; + } +} + +#else + +__attribute__((naked)) void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output) { + asm("\n" + " .syntax unified\n" + " push {r4-r7,lr}\n" + " mov r7, r10\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5-r7}\n" + " sub sp, 0x3C\n" + " str r2, [sp, 0x20]\n" + " adds r4, r3, 0\n" + " ldr r7, [sp, 0x5C]\n" + " lsls r0, 24\n" + " lsls r1, 24\n" + " ldr r2, _08041008 @ =gSpriteDimensions\n" + " lsrs r1, 23\n" + " lsrs r0, 21\n" + " adds r1, r0\n" + " adds r0, r2, 0x1\n" + " adds r0, r1, r0\n" + " ldrb r0, [r0]\n" + " str r0, [sp, 0x24]\n" + " adds r1, r2\n" + " ldrb r1, [r1]\n" + " str r1, [sp, 0x28]\n" + " movs r1, 0\n" + " cmp r1, r0\n" + " bcc _08040FB4\n" + " b _08041136\n" + "_08040FB4:\n" + " movs r0, 0x20\n" + " ldr r2, [sp, 0x28]\n" + " subs r0, r2\n" + " lsls r0, 1\n" + " str r0, [sp, 0x2C]\n" + "_08040FBE:\n" + " movs r2, 0\n" + " adds r1, 0x1\n" + " str r1, [sp, 0x34]\n" + " ldr r3, [sp, 0x28]\n" + " cmp r2, r3\n" + " bcc _08040FCC\n" + " b _08041124\n" + "_08040FCC:\n" + " ldr r0, _0804100C @ =0x040000d4\n" + " mov r8, r0\n" + "_08040FD0:\n" + " ldrh r1, [r4]\n" + " ldr r0, _08041010 @ =0x000003ff\n" + " ands r0, r1\n" + " lsls r0, 5\n" + " mov r12, r0\n" + " movs r0, 0xC0\n" + " lsls r0, 4\n" + " ands r0, r1\n" + " mov r3, sp\n" + " strh r1, [r3, 0x38]\n" + " cmp r0, 0\n" + " bne _08041018\n" + " ldr r0, [sp, 0x20]\n" + " add r0, r12\n" + " mov r1, r8\n" + " str r0, [r1]\n" + " str r7, [r1, 0x4]\n" + " ldr r3, _08041014 @ =0x84000008\n" + " str r3, [r1, 0x8]\n" + " ldr r0, [r1, 0x8]\n" + " adds r4, 0x2\n" + " str r4, [sp, 0x30]\n" + " adds r7, 0x20\n" + " mov r10, r7\n" + " adds r2, 0x1\n" + " mov r9, r2\n" + " b _08041112\n" + " .align 2, 0\n" + "_08041008: .4byte gSpriteDimensions\n" + "_0804100C: .4byte 0x040000d4\n" + "_08041010: .4byte 0x000003ff\n" + "_08041014: .4byte 0x84000008\n" + "_08041018:\n" + " movs r1, 0x80\n" + " lsls r1, 4\n" + " cmp r0, r1\n" + " bne _08041068\n" + " movs r3, 0\n" + " adds r4, 0x2\n" + " str r4, [sp, 0x30]\n" + " movs r0, 0x20\n" + " adds r0, r7\n" + " mov r10, r0\n" + " adds r2, 0x1\n" + " mov r9, r2\n" + " ldr r4, _08041060 @ =0x040000d4\n" + " ldr r6, _08041064 @ =0x84000001\n" + " movs r5, 0x7\n" + "_08041036:\n" + " lsls r2, r3, 24\n" + " asrs r2, 24\n" + " subs r0, r5, r2\n" + " lsls r0, 2\n" + " add r0, r12\n" + " ldr r1, [sp, 0x20]\n" + " adds r0, r1, r0\n" + " lsls r1, r2, 2\n" + " adds r1, r7, r1\n" + " str r0, [r4]\n" + " str r1, [r4, 0x4]\n" + " str r6, [r4, 0x8]\n" + " ldr r0, [r4, 0x8]\n" + " adds r2, 0x1\n" + " lsls r2, 24\n" + " lsrs r3, r2, 24\n" + " asrs r2, 24\n" + " cmp r2, 0x7\n" + " ble _08041036\n" + " b _08041112\n" + " .align 2, 0\n" + "_08041060: .4byte 0x040000d4\n" + "_08041064: .4byte 0x84000001\n" + "_08041068:\n" + " movs r3, 0\n" + " adds r4, 0x2\n" + " str r4, [sp, 0x30]\n" + " movs r0, 0x20\n" + " adds r0, r7\n" + " mov r10, r0\n" + " adds r2, 0x1\n" + " mov r9, r2\n" + "_08041078:\n" + " movs r2, 0\n" + " lsls r4, r3, 24\n" + " lsls r0, r4, 2\n" + " lsrs r0, 24\n" + " adds r6, r0, 0x3\n" + " mov r1, r12\n" + " adds r5, r1, r0\n" + "_08041086:\n" + " lsls r1, r2, 24\n" + " asrs r1, 24\n" + " subs r0, r6, r1\n" + " mov r2, sp\n" + " adds r3, r2, r0\n" + " adds r0, r5, r1\n" + " ldr r2, [sp, 0x20]\n" + " adds r0, r2, r0\n" + " ldrb r2, [r0]\n" + " movs r0, 0xF\n" + " ands r0, r2\n" + " lsls r0, 4\n" + " lsrs r2, 4\n" + " orrs r0, r2\n" + " strb r0, [r3]\n" + " adds r1, 0x1\n" + " lsls r1, 24\n" + " lsrs r2, r1, 24\n" + " asrs r1, 24\n" + " cmp r1, 0x3\n" + " ble _08041086\n" + " movs r3, 0x80\n" + " lsls r3, 17\n" + " adds r0, r4, r3\n" + " lsrs r3, r0, 24\n" + " asrs r0, 24\n" + " cmp r0, 0x7\n" + " ble _08041078\n" + " movs r0, 0x80\n" + " lsls r0, 4\n" + " mov r1, sp\n" + " ldrh r1, [r1, 0x38]\n" + " ands r0, r1\n" + " cmp r0, 0\n" + " beq _08041104\n" + " movs r3, 0\n" + " ldr r4, _080410FC @ =0x040000d4\n" + " ldr r6, _08041100 @ =0x84000001\n" + " movs r5, 0x7\n" + "_080410D4:\n" + " lsls r1, r3, 24\n" + " asrs r1, 24\n" + " subs r0, r5, r1\n" + " lsls r0, 2\n" + " mov r3, sp\n" + " adds r2, r3, r0\n" + " lsls r0, r1, 2\n" + " adds r0, r7, r0\n" + " str r2, [r4]\n" + " str r0, [r4, 0x4]\n" + " str r6, [r4, 0x8]\n" + " ldr r0, [r4, 0x8]\n" + " adds r1, 0x1\n" + " lsls r1, 24\n" + " lsrs r3, r1, 24\n" + " asrs r1, 24\n" + " cmp r1, 0x7\n" + " ble _080410D4\n" + " b _08041112\n" + " .align 2, 0\n" + "_080410FC: .4byte 0x040000d4\n" + "_08041100: .4byte 0x84000001\n" + "_08041104:\n" + " mov r0, sp\n" + " mov r1, r8\n" + " str r0, [r1]\n" + " str r7, [r1, 0x4]\n" + " ldr r2, _08041148 @ =0x84000008\n" + " str r2, [r1, 0x8]\n" + " ldr r0, [r1, 0x8]\n" + "_08041112:\n" + " ldr r4, [sp, 0x30]\n" + " mov r7, r10\n" + " mov r3, r9\n" + " lsls r0, r3, 24\n" + " lsrs r2, r0, 24\n" + " ldr r0, [sp, 0x28]\n" + " cmp r2, r0\n" + " bcs _08041124\n" + " b _08040FD0\n" + "_08041124:\n" + " ldr r1, [sp, 0x2C]\n" + " adds r4, r1\n" + " ldr r2, [sp, 0x34]\n" + " lsls r0, r2, 24\n" + " lsrs r1, r0, 24\n" + " ldr r3, [sp, 0x24]\n" + " cmp r1, r3\n" + " bcs _08041136\n" + " b _08040FBE\n" + "_08041136:\n" + " add sp, 0x3C\n" + " pop {r3-r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov r10, r5\n" + " pop {r4-r7}\n" + " pop {r0}\n" + " bx r0\n" + " .align 2, 0\n" + "_08041148: .4byte 0x84000008\n" + " .syntax divided\n" + ); +} + +#endif + +int CountTrailingZeroBits(u32 value) { + u8 i; + for (i = 0; i < 32; i++) { + if ((value & 1) == 0) { + value >>= 1; + } else { + return i; + } + } + return 0; +} + +u16 CalcCRC16(u8 *data, int length) { + u16 i, j; + u16 crc = 0x1121; + for (i = 0; i < length; i++) { + crc ^= data[i]; + for (j = 0; j < 8; j++) { + if (crc & 1) { + crc = (crc >> 1) ^ 0x8408; + } else { + crc >>= 1; + } + } + } + return ~crc; +} + +u16 CalcCRC16WithTable(u8 *data, int length) { + u16 i; + u16 crc = 0x1121; + u8 byte; + for (i = 0; i < length; i++) { + byte = crc >> 8; + crc ^= data[i]; + crc = byte ^ gCrc16Table[(u8)crc]; + } + return ~crc; +} |