summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <YamaArashi@users.noreply.github.com>2017-04-29 13:57:08 -0700
committerGitHub <noreply@github.com>2017-04-29 13:57:08 -0700
commitdb789b296cd739964c53cd60d4673238a175837a (patch)
treec8b14e64de99cc017d301bcec4201d418b9d6678
parent8cb59c9783ec33d8feac475a6259aec240fd2234 (diff)
parentbb433954d014b0c13b3f7a1f16f8fa9fdf76fbe9 (diff)
Merge pull request #249 from yenatch/master
(Almost) decompile util.s.
-rw-r--r--asm/util.s478
-rw-r--r--constants/item_constants.inc695
-rw-r--r--data/data2.s5
-rw-r--r--include/items.h693
-rw-r--r--ld_script.txt2
-rw-r--r--src/decompress.c4
-rw-r--r--src/util.c389
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;
+}