summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_setup.s10
-rw-r--r--asm/berry.s2
-rw-r--r--asm/bike.s130
-rw-r--r--asm/field_camera.s2
-rw-r--r--asm/field_control_avatar.s12
-rw-r--r--asm/field_effect.s188
-rw-r--r--asm/field_effect_helpers.s46
-rwxr-xr-x[-rw-r--r--]asm/field_map_obj.s4763
-rw-r--r--asm/field_player_avatar.s260
-rw-r--r--asm/field_tasks.s2
-rw-r--r--asm/fieldmap.s14
-rw-r--r--asm/fldeff_80F9BCC.s28
-rw-r--r--asm/fldeff_emotion.s8
-rw-r--r--asm/item_use.s8
-rw-r--r--asm/link.s8
-rw-r--r--asm/load_save.s4
-rw-r--r--asm/map_obj_8097404.s14
-rw-r--r--asm/map_obj_lock.s20
-rw-r--r--asm/porthole.s4
-rw-r--r--asm/rom4.s58
-rw-r--r--asm/rom6.s20
-rw-r--r--asm/rom_80AEFFC.s10
-rw-r--r--asm/rom_80C6FA0.s6
-rw-r--r--asm/rom_818CFC8.s1
-rw-r--r--asm/rom_818E9AC.s16
-rw-r--r--asm/rom_81BE66C.s54
-rw-r--r--asm/scrcmd.s10
-rw-r--r--asm/script_pokemon_util_80F87D8.s2
-rw-r--r--asm/secret_base.s4
-rw-r--r--asm/shop.s4
-rw-r--r--asm/trainer_see.s20
-rw-r--r--data/data3.s7
-rw-r--r--include/berry.h6
-rwxr-xr-xinclude/data3.h23
-rwxr-xr-xinclude/event_scripts.h11
-rw-r--r--include/field_effect_helpers.h15
-rw-r--r--include/field_ground_effect.h16
-rwxr-xr-xinclude/field_map_obj.h56
-rw-r--r--include/field_player_avatar.h14
-rw-r--r--include/global.fieldmap.h12
-rw-r--r--include/global.h8
-rw-r--r--include/malloc.h4
-rw-r--r--include/map_obj_8097404.h15
-rw-r--r--include/mauville_old_man.h2
-rw-r--r--include/rom4.h30
-rw-r--r--include/rom_818CFC8.h11
-rw-r--r--include/rom_81BE66C.h10
-rw-r--r--ld_script.txt1
-rwxr-xr-xsrc/field_map_obj.c1857
-rw-r--r--src/malloc.c5
-rw-r--r--sym_ewram.txt8
51 files changed, 2645 insertions, 5194 deletions
diff --git a/asm/battle_setup.s b/asm/battle_setup.s
index aea1be97c..9418c4d1d 100644
--- a/asm/battle_setup.s
+++ b/asm/battle_setup.s
@@ -1883,7 +1883,7 @@ SingleTrainerWantsBattle: @ 80B162C
ldr r2, =gUnknown_03005DF0
strb r0, [r2]
ldr r4, =gScriptLastTalked
- ldr r3, =gUnknown_02037350
+ ldr r3, =gMapObjects
lsls r2, r0, 3
adds r2, r0
lsls r2, 2
@@ -1911,7 +1911,7 @@ TwoTrainersWantBattle: @ 80B1670
ldr r2, =gUnknown_03005DF0
strb r0, [r2]
ldr r4, =gScriptLastTalked
- ldr r3, =gUnknown_02037350
+ ldr r3, =gMapObjects
lsls r2, r0, 3
adds r2, r0
lsls r2, 2
@@ -1965,7 +1965,7 @@ sub_80B16D8: @ 80B16D8
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
ldrb r0, [r4, 0x18]
lsls r0, 28
@@ -2341,7 +2341,7 @@ sub_80B1A14: @ 80B1A14
b _080B1AD8
.pool
_080B1A44:
- ldr r3, =gUnknown_02037350
+ ldr r3, =gMapObjects
ldr r2, =gUnknown_03006090
ldr r0, =gUnknown_02038BFC
ldrb r1, [r0]
@@ -2381,7 +2381,7 @@ _080B1A7C:
b _080B1AD8
.pool
_080B1AAC:
- ldr r3, =gUnknown_02037350
+ ldr r3, =gMapObjects
ldr r2, =gUnknown_03006090
ldr r0, =gUnknown_02038BFC
ldrb r1, [r0]
diff --git a/asm/berry.s b/asm/berry.s
index 54c4333d5..ec8f225cd 100644
--- a/asm/berry.s
+++ b/asm/berry.s
@@ -1065,7 +1065,7 @@ ResetBerryTreeSparkleFlags: @ 80E1D6C
lsls r2, 16
asrs r2, 16
mov r9, r2
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
lsls r3, 16
asrs r3, 16
mov r8, r3
diff --git a/asm/bike.s b/asm/bike.s
index bcb5177be..7ea4a4598 100644
--- a/asm/bike.s
+++ b/asm/bike.s
@@ -15,7 +15,7 @@ MovePlayerOnBike: @ 8119164
lsrs r4, r1, 16
lsls r2, 16
lsrs r2, 16
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0]
movs r0, 0x2
ands r0, r1
@@ -72,7 +72,7 @@ CheckMovementInputMachBike: @ 81191CC
cmp r1, 0
bne _081191F4
strb r0, [r4]
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r0, [r2, 0xB]
cmp r0, 0
bne _08119208
@@ -81,7 +81,7 @@ CheckMovementInputMachBike: @ 81191CC
b _0811921C
.pool
_081191F4:
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
cmp r1, r3
beq _08119218
ldrb r0, [r2, 0x2]
@@ -126,12 +126,12 @@ sub_8119238: @ 8119238
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
ldrb r1, [r4, 0x1E]
adds r0, r5, 0
@@ -161,12 +161,12 @@ sub_8119280: @ 8119280
lsls r0, 24
lsrs r5, r0, 24
adds r7, r5, 0
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r1, [r6, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
ldrb r1, [r4, 0x1E]
adds r0, r5, 0
@@ -255,7 +255,7 @@ sub_8119344: @ 8119344
lsls r0, 24
lsrs r5, r0, 24
adds r7, r5, 0
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r0, [r6, 0xB]
cmp r0, 0
beq _0811935A
@@ -352,7 +352,7 @@ CheckMovementInputAcroBike: @ 8119400
lsls r2, 16
lsrs r2, 16
ldr r4, =gUnknown_0859749C
- ldr r3, =gUnknown_02037590
+ ldr r3, =gPlayerAvatar
ldrb r3, [r3, 0x8]
lsls r3, 2
adds r3, r4
@@ -377,7 +377,7 @@ CheckMovementInputAcroBikeNormal: @ 811942C
bl player_get_direction_upper_nybble
lsls r0, 24
lsrs r3, r0, 24
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
movs r0, 0
strb r0, [r2, 0xA]
ldrb r1, [r4]
@@ -417,11 +417,11 @@ _0811946C:
b _081194C0
_0811948A:
ldrb r0, [r4]
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
cmp r0, r3
beq _081194BC
_08119492:
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x2]
adds r2, r0, 0
cmp r1, 0x2
@@ -453,7 +453,7 @@ _081194C0:
CheckMovementInputAcroBikeChangingDirection: @ 81194C8
push {r4-r6,lr}
adds r5, r0, 0
- ldr r4, =gUnknown_02037590
+ ldr r4, =gPlayerAvatar
ldrb r0, [r4, 0x9]
strb r0, [r5]
ldrb r0, [r4, 0xA]
@@ -520,12 +520,12 @@ CheckMovementInputAcroBikeStandingWheelie: @ 8119540
bl player_get_direction_upper_nybble
lsls r0, 24
lsrs r6, r0, 24
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
ldrb r1, [r5, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r1, r0, r1
movs r0, 0
strb r0, [r5, 0x2]
@@ -553,7 +553,7 @@ _08119594:
adds r0, 0x1
strb r0, [r5, 0xA]
_0811959A:
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r0, [r1, 0xA]
cmp r0, 0x27
bls _081195B4
@@ -608,12 +608,12 @@ CheckMovementInputAcroBikeBunnyHop: @ 81195E0
lsls r0, 24
lsrs r5, r0, 24
adds r2, r5, 0
- ldr r4, =gUnknown_02037590
+ ldr r4, =gPlayerAvatar
ldrb r1, [r4, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r7, r0, r1
movs r0, 0x2
mov r1, r8
@@ -661,7 +661,7 @@ _08119668:
movs r0, 0x6
b _08119676
_0811966E:
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0x2
strb r0, [r1, 0x2]
movs r0, 0x7
@@ -693,12 +693,12 @@ CheckMovementInputAcroBikeMovingWheelie: @ 8119688
lsls r0, 24
lsrs r5, r0, 24
adds r2, r5, 0
- ldr r4, =gUnknown_02037590
+ ldr r4, =gPlayerAvatar
ldrb r1, [r4, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r7, r0, r1
movs r0, 0x2
mov r9, r0
@@ -732,7 +732,7 @@ _081196F6:
movs r0, 0x4
b _08119750
_081196FC:
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0x2
strb r0, [r1, 0x2]
movs r0, 0xC
@@ -770,7 +770,7 @@ _08119736:
movs r0, 0x5
b _08119750
_08119748:
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0x2
strb r0, [r1, 0x2]
movs r0, 0xA
@@ -797,12 +797,12 @@ CheckMovementInputAcroBikeUnknownMode5: @ 8119764
lsrs r4, 16
lsls r5, 16
lsrs r5, 16
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r1, [r6, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldrb r2, [r0, 0x1]
movs r1, 0x3
@@ -836,7 +836,7 @@ CheckMovementInputAcroBikeUnknownMode6: @ 81197C0
lsrs r1, 16
lsls r2, 16
lsrs r2, 16
- ldr r4, =gUnknown_02037590
+ ldr r4, =gPlayerAvatar
movs r3, 0
strb r3, [r4, 0x8]
bl CheckMovementInputAcroBike
@@ -863,12 +863,12 @@ sub_81197F4: @ 81197F4
push {r4,r5,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrb r1, [r5, 0x1E]
adds r0, r4, 0
@@ -893,12 +893,12 @@ sub_8119830: @ 8119830
lsls r0, 24
lsrs r5, r0, 24
adds r6, r5, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
ldrb r1, [r4, 0x1E]
adds r0, r5, 0
@@ -961,12 +961,12 @@ sub_81198C0: @ 81198C0
push {r4,r5,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrb r1, [r5, 0x1E]
adds r0, r4, 0
@@ -990,12 +990,12 @@ sub_81198FC: @ 81198FC
push {r4,r5,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrb r1, [r5, 0x1E]
adds r0, r4, 0
@@ -1019,12 +1019,12 @@ sub_8119938: @ 8119938
push {r4,r5,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrb r1, [r5, 0x1E]
adds r0, r4, 0
@@ -1048,12 +1048,12 @@ sub_8119974: @ 8119974
push {r4,r5,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrb r1, [r5, 0x1E]
adds r0, r4, 0
@@ -1077,12 +1077,12 @@ sub_81199B0: @ 81199B0
push {r4,r5,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrb r1, [r5, 0x1E]
adds r0, r4, 0
@@ -1156,12 +1156,12 @@ _08119A50:
bl sub_81197F4
b _08119A84
_08119A58:
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
movs r0, 0x22
bl PlaySE
@@ -1198,12 +1198,12 @@ sub_8119AA4: @ 8119AA4
lsls r0, 24
lsrs r4, r0, 24
adds r6, r4, 0
- ldr r7, =gUnknown_02037590
+ ldr r7, =gPlayerAvatar
ldrb r1, [r7, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrb r1, [r5, 0x1E]
adds r0, r4, 0
@@ -1267,12 +1267,12 @@ sub_8119B34: @ 8119B34
lsls r0, 24
lsrs r4, r0, 24
adds r6, r4, 0
- ldr r7, =gUnknown_02037590
+ ldr r7, =gPlayerAvatar
ldrb r1, [r7, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrb r1, [r5, 0x1E]
adds r0, r4, 0
@@ -1336,12 +1336,12 @@ sub_8119BC4: @ 8119BC4
lsls r0, 24
lsrs r4, r0, 24
adds r6, r4, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrb r1, [r5, 0x1E]
adds r0, r4, 0
@@ -1396,7 +1396,7 @@ sub_8119C3C: @ 8119C3C
lsrs r3, r0, 16
lsls r1, 16
lsrs r2, r1, 16
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0]
movs r0, 0x4
ands r0, r1
@@ -1421,7 +1421,7 @@ sub_8119C64: @ 8119C64
bl sub_8119DF8
lsls r0, 24
lsrs r2, r0, 24
- ldr r4, =gUnknown_02037590
+ ldr r4, =gPlayerAvatar
ldr r0, [r4, 0xC]
movs r1, 0xF
ands r0, r1
@@ -1443,7 +1443,7 @@ _08119C9A:
movs r0, 0xF
adds r2, r5, 0
ands r2, r0
- ldr r4, =gUnknown_02037590
+ ldr r4, =gPlayerAvatar
ldr r0, [r4, 0x10]
movs r1, 0xF
ands r0, r1
@@ -1532,7 +1532,7 @@ sub_8119D30: @ 8119D30
_08119D36:
ldr r0, =gUnknown_085974C0
adds r4, r5, r0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldr r1, [r0, 0xC]
ldr r2, [r0, 0x10]
ldr r0, [r4, 0x8]
@@ -1570,7 +1570,7 @@ _08119D7A:
sub_8119D80: @ 8119D80
push {r4,lr}
lsls r0, 24
- ldr r3, =gUnknown_02037590
+ ldr r3, =gPlayerAvatar
ldr r2, [r3, 0xC]
lsls r2, 4
movs r1, 0xF0
@@ -1604,7 +1604,7 @@ _08119D9C:
sub_8119DBC: @ 8119DBC
push {r4,lr}
lsls r0, 24
- ldr r3, =gUnknown_02037590
+ ldr r3, =gPlayerAvatar
ldr r2, [r3, 0x10]
lsls r2, 4
movs r1, 0xF0
@@ -1681,12 +1681,12 @@ sub_8119E38: @ 8119E38
adds r6, r0, 0
lsls r6, 24
lsrs r6, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
ldrh r1, [r4, 0x10]
add r0, sp, 0x4
@@ -1922,7 +1922,7 @@ _08119FF2:
sub_8119FF8: @ 8119FF8
push {r4,lr}
sub sp, 0x4
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0]
movs r0, 0x18
ands r0, r1
@@ -1965,8 +1965,8 @@ player_should_look_direction_be_enforced_upon_movement: @ 811A044
lsls r0, 24
cmp r0, 0
beq _0811A078
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -1996,7 +1996,7 @@ GetOnOffBike: @ 811A080
ldr r1, =gUnknown_02037348
movs r0, 0
strb r0, [r1]
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0]
movs r0, 0x6
ands r0, r1
@@ -2026,7 +2026,7 @@ _0811A0C4:
thumb_func_start sub_811A0D0
sub_811A0D0: @ 811A0D0
push {lr}
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
movs r3, 0
strb r3, [r2, 0x8]
strb r3, [r2, 0x9]
@@ -2064,7 +2064,7 @@ _0811A0FA:
sub_811A114: @ 811A114
lsls r0, 24
lsrs r0, 24
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
strb r0, [r2, 0xA]
lsrs r1, r0, 1
adds r0, r1
@@ -2075,7 +2075,7 @@ sub_811A114: @ 811A114
thumb_func_start sub_811A128
sub_811A128: @ 811A128
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0
strb r0, [r1, 0xA]
strb r0, [r1, 0xB]
@@ -2091,7 +2091,7 @@ sub_811A138: @ 811A138
mov r0, sp
movs r2, 0x6
bl memcpy
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2]
movs r0, 0x2
ands r0, r1
@@ -2130,7 +2130,7 @@ _0811A182:
sub_811A188: @ 811A188
push {r4,r5,lr}
sub sp, 0x4
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
ldrb r1, [r5]
movs r0, 0x4
ands r0, r1
diff --git a/asm/field_camera.s b/asm/field_camera.s
index cead2954c..35359f444 100644
--- a/asm/field_camera.s
+++ b/asm/field_camera.s
@@ -1082,7 +1082,7 @@ CameraPanningCB_PanAhead: @ 808A360
b _0808A3FC
.pool
_0808A374:
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x3]
cmp r0, 0x1
bne _0808A394
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s
index f3321f27a..c44d77e3f 100644
--- a/asm/field_control_avatar.s
+++ b/asm/field_control_avatar.s
@@ -44,7 +44,7 @@ process_overworld_input: @ 809BF08
lsls r2, 16
lsrs r2, 16
mov r8, r2
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r6, [r0, 0x3]
ldrb r0, [r0, 0x2]
mov r9, r0
@@ -552,7 +552,7 @@ _0809C30E:
lsrs r3, r0, 24
cmp r3, 0x10
beq _0809C32E
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
lsls r2, r3, 3
adds r0, r2, r3
lsls r0, 2
@@ -567,7 +567,7 @@ _0809C32E:
.pool
_0809C33C:
movs r4, 0
- ldr r1, =gUnknown_02032308
+ ldr r1, =gLinkPlayerMapObjects
_0809C340:
ldrb r0, [r1]
cmp r0, 0x1
@@ -615,7 +615,7 @@ TryGetMapObjectScript: @ 809C384
lsrs r4, r0, 24
cmp r4, 0x10
beq _0809C3B4
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
lsls r2, r4, 3
adds r0, r2, r4
lsls r0, 2
@@ -652,7 +652,7 @@ _0809C3B4:
lsrs r4, r0, 24
cmp r4, 0x10
beq _0809C400
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
lsls r2, r4, 3
adds r0, r2, r4
lsls r0, 2
@@ -1368,7 +1368,7 @@ _0809CA04:
bl sub_80B215C
bl AdjustFriendship_step
bl sub_81D4998
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0]
movs r0, 0x40
ands r0, r1
diff --git a/asm/field_effect.s b/asm/field_effect.s
index c2f98a3e3..6277c127b 100644
--- a/asm/field_effect.s
+++ b/asm/field_effect.s
@@ -2032,8 +2032,8 @@ mapldr_08084390: @ 80B6AA4
ldr r0, =c3_080843F8
movs r1, 0
bl CreateTask
- ldr r4, =gUnknown_02037350
- ldr r3, =gUnknown_02037590
+ ldr r4, =gMapObjects
+ ldr r3, =gPlayerAvatar
ldrb r1, [r3, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -2163,12 +2163,12 @@ sub_80B6BCC: @ 80B6BCC
mov r5, r8
push {r5,r6}
mov r9, r0
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r0, [r6, 0x5]
lsls r5, r0, 3
adds r5, r0
lsls r5, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
mov r8, r0
add r5, r8
ldrb r0, [r6, 0x4]
@@ -2256,7 +2256,7 @@ _080B6C88:
sub_80B6C90: @ 80B6C90
push {r4-r6,lr}
adds r5, r0, 0
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r0, [r6, 0x4]
lsls r2, r0, 4
adds r2, r0
@@ -2282,7 +2282,7 @@ sub_80B6C90: @ 80B6C90
movs r0, 0x1
strh r0, [r5, 0xA]
strh r1, [r5, 0xC]
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldrb r0, [r6, 0x5]
lsls r1, r0, 3
adds r1, r0
@@ -2309,12 +2309,12 @@ sub_80B6C90: @ 80B6C90
sub_80B6D04: @ 80B6D04
push {r4-r6,lr}
adds r4, r0, 0
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r6, r0, r1
ldrb r1, [r2, 0x4]
lsls r0, r1, 4
@@ -2454,7 +2454,7 @@ _080B6E0E:
thumb_func_start sub_80B6E18
sub_80B6E18: @ 80B6E18
push {lr}
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0
strb r0, [r1, 0x6]
bl ScriptContext2_Disable
@@ -2551,12 +2551,12 @@ sub_80B6EC0: @ 80B6EC0
sub_80B6EE0: @ 80B6EE0
push {r4,r5,lr}
adds r5, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
@@ -2664,7 +2664,7 @@ sub_80B6FA8: @ 80B6FA8
sub_80B6FB8: @ 80B6FB8
push {r4,r5,lr}
adds r5, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x4]
lsls r4, r0, 4
adds r4, r0
@@ -2702,7 +2702,7 @@ _080B6FF6:
sub_80B7004: @ 80B7004
push {r4,r5,lr}
adds r5, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x4]
lsls r4, r0, 4
adds r4, r0
@@ -2828,12 +2828,12 @@ sub_80B7114: @ 80B7114
sub sp, 0x4
adds r5, r0, 0
bl CameraObjectReset2
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
movs r0, 0x4
bl GetFaceDirectionAnimId
@@ -2883,7 +2883,7 @@ _080B717E:
sub_80B7190: @ 80B7190
push {r4,r5,lr}
adds r5, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x4]
lsls r4, r0, 4
adds r4, r0
@@ -2914,7 +2914,7 @@ sub_80B7190: @ 80B7190
sub_80B71D0: @ 80B71D0
push {r4,r5,lr}
adds r4, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x4]
lsls r0, r1, 4
adds r0, r1
@@ -2962,7 +2962,7 @@ _080B721E:
sub_80B7230: @ 80B7230
push {r4,r5,lr}
adds r5, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x4]
lsls r4, r0, 4
adds r4, r0
@@ -2993,7 +2993,7 @@ sub_80B7230: @ 80B7230
sub_80B7270: @ 80B7270
push {r4,r5,lr}
adds r4, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x4]
lsls r0, r1, 4
adds r0, r1
@@ -3063,12 +3063,12 @@ _080B72EE:
thumb_func_start sub_80B72F4
sub_80B72F4: @ 80B72F4
push {r4,lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectClearAnimIfSpecialAnimFinished
@@ -3138,12 +3138,12 @@ _080B7396:
ldrsh r2, [r4, r0]
lsls r2, 2
adds r2, r5
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r1, r0
ldr r2, [r2]
adds r0, r4, 0
@@ -3162,7 +3162,7 @@ sub_80B73D0: @ 80B73D0
push {r4,lr}
adds r4, r0, 0
bl ScriptContext2_Enable
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0x1
strb r0, [r1, 0x6]
ldrh r0, [r4, 0x8]
@@ -3268,7 +3268,7 @@ _080B748E:
cmp r4, 0
bne _080B74C4
bl ScriptContext2_Disable
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
strb r4, [r0, 0x6]
ldr r0, =sub_80B7384
bl FindTaskIdByFunc
@@ -3347,7 +3347,7 @@ _080B751E:
thumb_func_start dive_1_lock
dive_1_lock: @ 80B7544
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
movs r1, 0x1
strb r1, [r2, 0x6]
ldrh r1, [r0, 0x8]
@@ -3392,8 +3392,8 @@ dive_3_unknown: @ 80B7580
lsls r0, 24
cmp r0, 0
bne _080B75C4
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -3437,7 +3437,7 @@ sub_80B75F0: @ 80B75F0
lsrs r0, 24
ldr r6, =gUnknown_0855C438
ldr r2, =gTasks
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
@@ -3451,7 +3451,7 @@ _080B7604:
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r1, r0
ldrb r0, [r5, 0x4]
lsls r2, r0, 4
@@ -3480,7 +3480,7 @@ sub_80B764C: @ 80B764C
bl CameraObjectReset2
movs r0, 0
bl SetCameraPanningCallback
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
movs r2, 0x1
strb r2, [r0, 0x6]
ldrb r0, [r5, 0x3]
@@ -3767,7 +3767,7 @@ sub_80B7890: @ 80B7890
lsrs r0, 24
ldr r6, =gUnknown_0855C450
ldr r2, =gTasks
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
@@ -3781,7 +3781,7 @@ _080B78A4:
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r1, r0
ldrb r0, [r5, 0x4]
lsls r2, r0, 4
@@ -3808,7 +3808,7 @@ sub_80B78EC: @ 80B78EC
adds r4, r1, 0
bl CameraObjectReset2
bl player_bitmagic
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0x1
strb r0, [r1, 0x6]
ldrb r0, [r4, 0x1]
@@ -3915,7 +3915,7 @@ sub_80B79BC: @ 80B79BC
lsls r0, 24
cmp r0, 0
beq _080B79E6
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0
strb r0, [r1, 0x6]
bl ScriptContext2_Disable
@@ -4016,7 +4016,7 @@ sub_80B7A8C: @ 80B7A8C
lsrs r0, 24
ldr r6, =gUnknown_0855C460
ldr r2, =gTasks
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
@@ -4030,7 +4030,7 @@ _080B7AA0:
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r1, r0
ldrb r0, [r5, 0x4]
lsls r2, r0, 4
@@ -4057,7 +4057,7 @@ sub_80B7AE8: @ 80B7AE8
adds r4, r1, 0
bl player_bitmagic
bl CameraObjectReset2
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0x1
strb r0, [r1, 0x6]
ldrb r0, [r4, 0x3]
@@ -4359,12 +4359,12 @@ sub_80B7D34: @ 80B7D34
bl music_something
bl sub_80AF0B4
_080B7D60:
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
adds r0, r5, 0
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
@@ -4465,8 +4465,8 @@ mapldr_080859D4: @ 80B7E48
ldr r1, =gUnknown_03005DAC
movs r0, 0
str r0, [r1]
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -4537,12 +4537,12 @@ sub_80B7EE8: @ 80B7EE8
mov r0, sp
movs r2, 0x5
bl memcpy
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r6, r0, r1
ldrh r1, [r5, 0xA]
movs r2, 0xA
@@ -4695,12 +4695,12 @@ sub_80B8034: @ 80B8034
mov r0, sp
movs r2, 0x5
bl memcpy
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrh r1, [r4, 0xA]
movs r2, 0xA
@@ -4765,12 +4765,12 @@ sub_80B80C4: @ 80B80C4
mov r0, sp
movs r2, 0x5
bl memcpy
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r3, r0, r1
ldrb r1, [r2, 0x4]
lsls r0, r1, 4
@@ -4910,8 +4910,8 @@ mapldr_08085D88: @ 80B8200
ldr r1, =gUnknown_03005DAC
movs r0, 0
str r0, [r1]
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -4961,7 +4961,7 @@ sub_80B8280: @ 80B8280
lsls r0, 24
cmp r0, 0
beq _080B82F6
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
ldrb r0, [r5, 0x4]
lsls r2, r0, 4
adds r2, r0
@@ -4983,7 +4983,7 @@ sub_80B8280: @ 80B8280
adds r0, r1
negs r0, r0
strh r0, [r2, 0x26]
- ldr r3, =gUnknown_02037350
+ ldr r3, =gMapObjects
ldrb r0, [r5, 0x5]
lsls r1, r0, 3
adds r1, r0
@@ -5027,12 +5027,12 @@ sub_80B830C: @ 80B830C
mov r0, sp
movs r2, 0x5
bl memcpy
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r6, r0, r1
ldrb r1, [r2, 0x4]
lsls r0, r1, 4
@@ -5156,12 +5156,12 @@ sub_80B8410: @ 80B8410
mov r0, sp
movs r2, 0x5
bl memcpy
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrh r0, [r4, 0xA]
subs r0, 0x1
@@ -6335,7 +6335,7 @@ sub_80B8DB4: @ 80B8DB4
adds r4, r0, 0
bl ScriptContext2_Enable
bl player_bitmagic
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
movs r0, 0x1
strb r0, [r5, 0x6]
movs r0, 0x8
@@ -6348,7 +6348,7 @@ sub_80B8DB4: @ 80B8DB4
adds r0, r6, 0
mov r1, r8
bl PlayerGetDestCoords
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldrb r1, [r5, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -6374,12 +6374,12 @@ sub_80B8DB4: @ 80B8DB4
sub_80B8E14: @ 80B8E14
push {r4,r5,lr}
adds r5, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
@@ -6410,12 +6410,12 @@ _080B8E50:
sub_80B8E60: @ 80B8E60
push {r4,lr}
adds r4, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
lsls r0, 24
@@ -6449,12 +6449,12 @@ sub_80B8EA8: @ 80B8EA8
lsls r0, 24
cmp r0, 0
bne _080B8F12
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
ldrb r0, [r5, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
movs r0, 0x3
bl GetPlayerAvatarGraphicsIdByStateId
@@ -6498,12 +6498,12 @@ _080B8F12:
thumb_func_start sub_80B8F24
sub_80B8F24: @ 80B8F24
push {r4,r5,lr}
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
ldrb r1, [r5, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectClearAnimIfSpecialAnimFinished
@@ -6829,12 +6829,12 @@ sub_80B91D4: @ 80B91D4
sub_80B9204: @ 80B9204
push {r4-r6,lr}
adds r5, r0, 0
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r1, [r6, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
@@ -6870,12 +6870,12 @@ _080B924C:
sub_80B925C: @ 80B925C
push {r4,lr}
adds r4, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectClearAnimIfSpecialAnimFinished
lsls r0, 24
@@ -6906,12 +6906,12 @@ sub_80B92A0: @ 80B92A0
lsls r0, 24
cmp r0, 0
bne _080B92E8
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrh r1, [r4, 0x26]
movs r0, 0x8
@@ -6955,12 +6955,12 @@ sub_80B92F8: @ 80B92F8
strh r0, [r4, 0xC]
movs r0, 0x1
bl SetPlayerAvatarTransitionFlags
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
movs r1, 0x2
bl FieldObjectSetSpecialAnim
@@ -6975,12 +6975,12 @@ _080B932C:
sub_80B933C: @ 80B933C
push {r4,lr}
adds r4, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r2, r0, r1
ldrh r1, [r4, 0xC]
movs r3, 0xC
@@ -7023,12 +7023,12 @@ sub_80B9390: @ 80B9390
asrs r0, 16
cmp r0, 0x7
ble _080B9406
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
movs r0, 0x3
bl GetPlayerAvatarGraphicsIdByStateId
@@ -7087,12 +7087,12 @@ sub_80B9418: @ 80B9418
asrs r0, 16
cmp r0, 0x9
ble _080B9464
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
adds r0, r4, 0
bl FieldObjectClearAnimIfSpecialAnimActive
@@ -7582,12 +7582,12 @@ sub_80B97D4: @ 80B97D4
sub_80B9804: @ 80B9804
push {r4-r6,lr}
adds r5, r0, 0
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r1, [r6, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
@@ -7673,12 +7673,12 @@ sub_80B98B8: @ 80B98B8
cmp r0, 0
bne _080B9910
_080B98D0:
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldrb r0, [r0, 0x4]
lsls r4, r0, 4
@@ -7720,7 +7720,7 @@ sub_80B9924: @ 80B9924
mov r0, sp
movs r2, 0x24
bl memcpy
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x4]
lsls r1, r0, 4
adds r1, r0
@@ -7760,12 +7760,12 @@ sub_80B9978: @ 80B9978
lsls r0, 24
cmp r0, 0
beq _080B99DC
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r5, r0, 3
adds r5, r0
lsls r5, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r5, r0
ldrb r0, [r5, 0x4]
lsls r4, r0, 4
@@ -7810,12 +7810,12 @@ _080B99DC:
sub_80B99F0: @ 80B99F0
push {r4,lr}
adds r4, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectClearAnimIfSpecialAnimFinished
lsls r0, 24
@@ -7872,12 +7872,12 @@ sub_80B9A60: @ 80B9A60
lsls r0, 16
cmp r0, 0
bne _080B9ACA
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r1, [r6, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
movs r7, 0
ldrh r1, [r5, 0x26]
@@ -8119,7 +8119,7 @@ sub_80B9C54: @ 80B9C54
asrs r0, 16
cmp r0, 0x78
ble _080B9CC2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
movs r1, 0x4
ldrsh r0, [r7, r1]
lsls r1, r0, 3
@@ -8357,7 +8357,7 @@ sub_80B9E28: @ 80B9E28
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
movs r0, 0x10
ldrsh r5, [r4, r0]
@@ -8507,7 +8507,7 @@ _080B9F7C:
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
ldrh r0, [r5, 0x4]
strh r0, [r6, 0x20]
diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s
index fc2a8682a..04307fde5 100644
--- a/asm/field_effect_helpers.s
+++ b/asm/field_effect_helpers.s
@@ -248,7 +248,7 @@ objc_reflection_maybe: @ 81540A8
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r7, r0, r1
ldrb r1, [r7, 0x4]
lsls r0, r1, 4
@@ -581,7 +581,7 @@ oei_shadow: @ 8154340
bl GetFieldObjectIdByLocalIdAndMap
lsls r0, 24
lsrs r0, 24
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
@@ -673,7 +673,7 @@ _08154412:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
ldrb r0, [r4, 0x4]
lsls r1, r0, 4
@@ -827,7 +827,7 @@ unc_grass_normal: @ 8154550
lsrs r4, r0, 8
lsls r0, 24
lsrs r7, r0, 24
- ldr r3, =gUnknown_02037334
+ ldr r3, =gCamera
ldrb r1, [r3]
movs r0, 0x1
ands r0, r1
@@ -909,7 +909,7 @@ _08154604:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r2, r0, r1
ldr r0, [r2, 0x10]
ldr r1, [r5, 0x30]
@@ -1166,7 +1166,7 @@ unc_grass_tall: @ 8154800
lsrs r7, r0, 8
lsls r0, 24
lsrs r6, r0, 24
- ldr r3, =gUnknown_02037334
+ ldr r3, =gCamera
ldrb r1, [r3]
movs r0, 0x1
ands r0, r1
@@ -1248,7 +1248,7 @@ _081548B4:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r2, r0, r1
ldr r0, [r2, 0x10]
ldr r1, [r5, 0x30]
@@ -1346,7 +1346,7 @@ sub_815496C: @ 815496C
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r5, r1, r0
ldr r0, =gFieldEffectObjectTemplatePointers
ldr r0, [r0, 0x78]
@@ -1432,7 +1432,7 @@ sub_8154A10: @ 8154A10
lsls r0, 24
cmp r0, 0
bne _08154A4E
- ldr r5, =gUnknown_02037350
+ ldr r5, =gMapObjects
mov r0, sp
ldrb r1, [r0]
lsls r0, r1, 3
@@ -1787,7 +1787,7 @@ sub_8154CEC: @ 8154CEC
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r5, r1, r0
ldr r0, =gFieldEffectObjectTemplatePointers
ldr r0, [r0, 0x34]
@@ -1881,7 +1881,7 @@ _08154DC0:
b _08154E0A
_08154DCA:
ldr r3, =gSprites
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
mov r0, sp
ldrb r1, [r0]
lsls r0, r1, 3
@@ -2040,7 +2040,7 @@ sub_8154EFC: @ 8154EFC
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r6, r1, r0
ldr r0, =gFieldEffectObjectTemplatePointers
ldr r0, [r0, 0x34]
@@ -2127,7 +2127,7 @@ sub_8154FB4: @ 8154FB4
lsls r0, 24
cmp r0, 0
bne _08154FEE
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
mov r0, sp
ldrb r1, [r0]
lsls r0, r1, 3
@@ -2248,7 +2248,7 @@ sub_81550B4: @ 81550B4
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r5, r1, r0
ldr r0, =gFieldEffectObjectTemplatePointers
ldr r0, [r0, 0x7C]
@@ -2332,7 +2332,7 @@ sub_8155158: @ 8155158
lsls r0, 24
cmp r0, 0
bne _08155192
- ldr r5, =gUnknown_02037350
+ ldr r5, =gMapObjects
mov r0, sp
ldrb r1, [r0]
lsls r0, r1, 3
@@ -2765,8 +2765,8 @@ sub_81554AC: @ 81554AC
movs r2, 0x32
ldrsh r1, [r4, r2]
bl CurrentMapDrawMetatileAt
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -2972,7 +2972,7 @@ sub_8155658: @ 8155658
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
ldrb r0, [r4, 0x4]
lsls r5, r0, 4
@@ -3325,7 +3325,7 @@ sub_8155900: @ 8155900
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r6, r1, r0
ldr r0, =gFieldEffectObjectTemplatePointers
ldr r0, [r0, 0x74]
@@ -3419,7 +3419,7 @@ sub_81559BC: @ 81559BC
lsls r0, 24
cmp r0, 0
bne _081559F6
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
mov r0, sp
ldrb r1, [r0]
lsls r0, r1, 3
@@ -3474,7 +3474,7 @@ _08155A46:
strh r6, [r4, 0x20]
strh r5, [r4, 0x22]
ldr r3, =gSprites
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
mov r0, sp
ldrb r1, [r0]
lsls r0, r1, 3
@@ -3793,7 +3793,7 @@ sub_8155C88: @ 8155C88
adds r0, r5, 0
bl FieldEffectStop
_08155CB8:
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
mov r0, sp
ldrb r1, [r0]
lsls r0, r1, 3
@@ -4514,7 +4514,7 @@ _08156212:
lsls r0, r7, 3
adds r0, r7
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
ldrb r0, [r4]
lsls r0, 31
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 468f859d8..3abd53321 100644..100755
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -5,4643 +5,6 @@
.text
- thumb_func_start npc_clear_ids_and_state
-npc_clear_ids_and_state: @ 808D3F0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0
- movs r2, 0x24
- bl memset
- movs r0, 0xFF
- strb r0, [r4, 0x8]
- movs r0, 0x1
- negs r0, r0
- strb r0, [r4, 0x9]
- strb r0, [r4, 0xA]
- strb r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end npc_clear_ids_and_state
-
- thumb_func_start npcs_clear_ids_and_state
-npcs_clear_ids_and_state: @ 808D410
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, =gUnknown_02037350
-_0808D416:
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- adds r0, r5
- bl npc_clear_ids_and_state
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _0808D416
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end npcs_clear_ids_and_state
-
- thumb_func_start sub_808D438
-sub_808D438: @ 808D438
- push {lr}
- bl strange_npc_table_clear
- bl npcs_clear_ids_and_state
- bl ClearPlayerAvatarInfo
- bl sub_808D450
- pop {r0}
- bx r0
- thumb_func_end sub_808D438
-
- thumb_func_start sub_808D450
-sub_808D450: @ 808D450
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- ldr r0, =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x54]
- mov r9, r0
- movs r1, 0
- movs r2, 0
- movs r3, 0x1F
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gSprites
- mov r10, r1
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- add r4, r10
- ldrb r1, [r4, 0x1]
- movs r5, 0x4
- negs r5, r5
- adds r0, r5, 0
- ands r0, r1
- movs r1, 0x1
- mov r8, r1
- mov r1, r8
- orrs r0, r1
- strb r0, [r4, 0x1]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- adds r4, 0x3E
- ldrb r0, [r4]
- movs r6, 0x4
- orrs r0, r6
- strb r0, [r4]
- mov r0, r9
- movs r1, 0
- movs r2, 0
- movs r3, 0x1F
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- add r4, r10
- ldrb r0, [r4, 0x1]
- ands r5, r0
- mov r0, r8
- orrs r5, r0
- strb r5, [r4, 0x1]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- adds r4, 0x3E
- ldrb r0, [r4]
- orrs r0, r6
- strb r0, [r4]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808D450
-
- thumb_func_start sub_808D4F4
-sub_808D4F4: @ 808D4F4
- push {lr}
- movs r1, 0
- ldr r2, =gUnknown_02037350
- ldrb r0, [r2]
- b _0808D518
- .pool
-_0808D504:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xF
- bhi _0808D51E
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0]
-_0808D518:
- lsls r0, 31
- cmp r0, 0
- bne _0808D504
-_0808D51E:
- adds r0, r1, 0
- pop {r1}
- bx r1
- thumb_func_end sub_808D4F4
-
- thumb_func_start GetFieldObjectIdByLocalIdAndMap
-@ u8 GetFieldObjectIdByLocalIdAndMap(u8 localId, u8 mapId, u8 mapGroupId)
-GetFieldObjectIdByLocalIdAndMap: @ 808D524
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- cmp r0, 0xFE
- bls _0808D53C
- bl GetFieldObjectIdByLocalId
- b _0808D540
-_0808D53C:
- bl GetFieldObjectIdByLocalIdAndMapInternal
-_0808D540:
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end GetFieldObjectIdByLocalIdAndMap
-
- thumb_func_start TryGetFieldObjectIdByLocalIdAndMap
-@ bool8 TryGetFieldObjectIdByLocalIdAndMap(u8 localId, u8 mapId, u8 mapGroupId, u8 *fieldObjectId)
-TryGetFieldObjectIdByLocalIdAndMap: @ 808D548
- push {r4,lr}
- adds r4, r3, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- bl GetFieldObjectIdByLocalIdAndMap
- strb r0, [r4]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x10
- beq _0808D56A
- movs r0, 0
- b _0808D56C
-_0808D56A:
- movs r0, 0x1
-_0808D56C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end TryGetFieldObjectIdByLocalIdAndMap
-
- thumb_func_start GetFieldObjectIdByXY
-@ u8 GetFieldObjectIdByXY(s16 x, s16 y)
-GetFieldObjectIdByXY: @ 808D574
- push {r4-r6,lr}
- movs r3, 0
- ldr r5, =gUnknown_02037350
- lsls r0, 16
- asrs r4, r0, 16
- lsls r1, 16
- asrs r1, 16
-_0808D582:
- lsls r0, r3, 3
- adds r0, r3
- lsls r0, 2
- adds r2, r0, r5
- ldrb r0, [r2]
- lsls r0, 31
- cmp r0, 0
- beq _0808D5A2
- movs r6, 0x10
- ldrsh r0, [r2, r6]
- cmp r0, r4
- bne _0808D5A2
- movs r6, 0x12
- ldrsh r0, [r2, r6]
- cmp r0, r1
- beq _0808D5AC
-_0808D5A2:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0xF
- bls _0808D582
-_0808D5AC:
- adds r0, r3, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetFieldObjectIdByXY
-
- thumb_func_start GetFieldObjectIdByLocalIdAndMapInternal
-@ u8 GetFieldObjectIdByLocalIdAndMapInternal(u8 localId, u8 mapId, u8 mapGroupId)
-GetFieldObjectIdByLocalIdAndMapInternal: @ 808D5B8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r2, 24
- lsrs r2, 24
- movs r1, 0
- ldr r6, =gUnknown_02037350
-_0808D5CA:
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r3, r0, r6
- ldrb r0, [r3]
- lsls r0, 31
- cmp r0, 0
- beq _0808D5F4
- ldrb r0, [r3, 0x8]
- cmp r0, r5
- bne _0808D5F4
- ldrb r0, [r3, 0x9]
- cmp r0, r4
- bne _0808D5F4
- ldrb r0, [r3, 0xA]
- cmp r0, r2
- bne _0808D5F4
- adds r0, r1, 0
- b _0808D600
- .pool
-_0808D5F4:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xF
- bls _0808D5CA
- movs r0, 0x10
-_0808D600:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end GetFieldObjectIdByLocalIdAndMapInternal
-
- thumb_func_start GetFieldObjectIdByLocalId
-@ u8 GetFieldObjectIdByLocalId(u8 localId)
-GetFieldObjectIdByLocalId: @ 808D608
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- movs r2, 0
- ldr r4, =gUnknown_02037350
-_0808D612:
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r4
- ldrb r0, [r1]
- lsls r0, 31
- cmp r0, 0
- beq _0808D630
- ldrb r0, [r1, 0x8]
- cmp r0, r3
- bne _0808D630
- adds r0, r2, 0
- b _0808D63C
- .pool
-_0808D630:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xF
- bls _0808D612
- movs r0, 0x10
-_0808D63C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetFieldObjectIdByLocalId
-
- thumb_func_start InitFieldObjectStateFromTemplate
-@ u8 InitFieldObjectStateFromTemplate(struct FieldObjectTemplate *fieldObjectTemplate, u8 mapId, u8 mapGroupId)
-InitFieldObjectStateFromTemplate: @ 808D644
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r7, r2, 24
- ldrb r0, [r5]
- adds r1, r6, 0
- adds r2, r7, 0
- mov r3, sp
- bl GetAvailableFieldObjectSlot
- lsls r0, 24
- cmp r0, 0
- beq _0808D66E
- movs r0, 0x10
- b _0808D762
-_0808D66E:
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r4, r0, r1
- adds r0, r4, 0
- bl npc_clear_ids_and_state
- ldrh r3, [r5, 0x4]
- adds r3, 0x7
- lsls r3, 16
- lsrs r3, 16
- ldrh r2, [r5, 0x6]
- adds r2, 0x7
- lsls r2, 16
- lsrs r2, 16
- ldrb r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4]
- ldrb r0, [r5, 0x1]
- strb r0, [r4, 0x5]
- ldrb r0, [r5, 0x9]
- strb r0, [r4, 0x6]
- ldrb r0, [r5]
- strb r0, [r4, 0x8]
- strb r6, [r4, 0x9]
- strb r7, [r4, 0xA]
- strh r3, [r4, 0xC]
- strh r2, [r4, 0xE]
- strh r3, [r4, 0x10]
- strh r2, [r4, 0x12]
- strh r3, [r4, 0x14]
- strh r2, [r4, 0x16]
- ldrb r0, [r5, 0x8]
- movs r7, 0xF
- adds r1, r7, 0
- ands r1, r0
- ldrb r2, [r4, 0xB]
- movs r0, 0x10
- negs r0, r0
- mov r8, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0xB]
- ldrb r1, [r5, 0x8]
- lsls r1, 4
- ands r0, r7
- orrs r0, r1
- strb r0, [r4, 0xB]
- ldrb r1, [r5, 0xA]
- lsls r1, 28
- movs r0, 0xF
- mov r9, r0
- lsrs r1, 28
- ldrb r2, [r4, 0x19]
- mov r0, r8
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x19]
- ldrb r1, [r5, 0xA]
- lsrs r1, 4
- lsls r1, 4
- ands r0, r7
- orrs r0, r1
- strb r0, [r4, 0x19]
- ldrh r0, [r5, 0xC]
- strb r0, [r4, 0x7]
- ldrh r0, [r5, 0xE]
- strb r0, [r4, 0x1D]
- ldr r1, =gUnknown_085055CD
- ldrb r0, [r5, 0x9]
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r4, 0
- adds r0, 0x20
- strb r1, [r0]
- ldrb r1, [r0]
- adds r0, r4, 0
- bl FieldObjectSetDirection
- adds r0, r4, 0
- bl FieldObjectHandleDynamicGraphicsId
- ldr r1, =gUnknown_0850557C
- ldrb r0, [r4, 0x6]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808D75E
- ldrb r2, [r4, 0x19]
- adds r0, r7, 0
- ands r0, r2
- cmp r0, 0
- bne _0808D746
- lsls r0, r2, 28
- lsrs r0, 28
- adds r0, 0x1
- mov r1, r9
- ands r0, r1
- mov r1, r8
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x19]
-_0808D746:
- ldrb r2, [r4, 0x19]
- movs r0, 0xF0
- ands r0, r2
- cmp r0, 0
- bne _0808D75E
- lsrs r1, r2, 4
- adds r1, 0x1
- lsls r1, 4
- adds r0, r7, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x19]
-_0808D75E:
- mov r0, sp
- ldrb r0, [r0]
-_0808D762:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end InitFieldObjectStateFromTemplate
-
- thumb_func_start sub_808D77C
-sub_808D77C: @ 808D77C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r4, =gMapHeader
- ldr r0, [r4, 0x4]
- cmp r0, 0
- beq _0808D7FE
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- beq _0808D7A8
- bl sub_81AAA40
- lsls r0, 24
- lsrs r6, r0, 24
- b _0808D7CA
- .pool
-_0808D7A8:
- bl InTrainerHill
- cmp r0, 0
- beq _0808D7C6
- movs r6, 0x2
- b _0808D7CA
-_0808D7B4:
- ldr r0, [r7]
- ldrb r1, [r0, 0x5]
- ldrb r2, [r0, 0x4]
- adds r0, r4, 0
- bl InitFieldObjectStateFromTemplate
- lsls r0, 24
- lsrs r0, 24
- b _0808D800
-_0808D7C6:
- ldr r0, [r4, 0x4]
- ldrb r6, [r0]
-_0808D7CA:
- movs r5, 0
- cmp r5, r6
- bcs _0808D7FE
- ldr r7, =gSaveBlock1Ptr
-_0808D7D2:
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 3
- movs r1, 0xC7
- lsls r1, 4
- adds r0, r1
- ldr r1, [r7]
- adds r4, r1, r0
- ldrb r0, [r4]
- cmp r0, r8
- bne _0808D7F4
- ldrh r0, [r4, 0x14]
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0808D7B4
-_0808D7F4:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, r6
- bcc _0808D7D2
-_0808D7FE:
- movs r0, 0x10
-_0808D800:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_808D77C
-
- thumb_func_start GetAvailableFieldObjectSlot
-@ bool8 GetAvailableFieldObjectSlot(u16 localId, u8 mapId, u8 mapGroupId, u8 *fieldObjectId)
-GetAvailableFieldObjectSlot: @ 808D810
- push {r4-r7,lr}
- mov r12, r3
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r2, 24
- lsrs r4, r2, 24
- movs r2, 0
- ldr r1, =gUnknown_02037350
- ldrb r0, [r1]
- lsls r0, 31
- adds r7, r1, 0
- cmp r0, 0
- beq _0808D864
- adds r3, r1, 0
-_0808D830:
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r3
- ldrb r0, [r1, 0x8]
- cmp r0, r6
- bne _0808D84A
- ldrb r0, [r1, 0x9]
- cmp r0, r5
- bne _0808D84A
- ldrb r0, [r1, 0xA]
- cmp r0, r4
- beq _0808D868
-_0808D84A:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xF
- bhi _0808D868
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- adds r0, r7
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- bne _0808D830
-_0808D864:
- cmp r2, 0xF
- bls _0808D870
-_0808D868:
- movs r0, 0x1
- b _0808D8A4
- .pool
-_0808D870:
- mov r0, r12
- strb r2, [r0]
- ldr r1, =gUnknown_02037350
-_0808D876:
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- adds r3, r0, r1
- ldrb r0, [r3]
- lsls r0, 31
- cmp r0, 0
- beq _0808D898
- ldrb r0, [r3, 0x8]
- cmp r0, r6
- bne _0808D898
- ldrb r0, [r3, 0x9]
- cmp r0, r5
- bne _0808D898
- ldrb r0, [r3, 0xA]
- cmp r0, r4
- beq _0808D868
-_0808D898:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xF
- bls _0808D876
- movs r0, 0
-_0808D8A4:
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetAvailableFieldObjectSlot
-
- thumb_func_start RemoveFieldObject
-@ void RemoveFieldObject(npc_state *fieldObject)
-RemoveFieldObject: @ 808D8B0
- push {lr}
- ldrb r2, [r0]
- movs r1, 0x2
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- bl RemoveFieldObjectInternal
- pop {r0}
- bx r0
- thumb_func_end RemoveFieldObject
-
- thumb_func_start RemoveFieldObjectByLocalIdAndMap
-@ void RemoveFieldObjectByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapBank)
-RemoveFieldObjectByLocalIdAndMap: @ 808D8C4
- push {lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808D902
- mov r0, sp
- ldrb r0, [r0]
- bl GetFieldObjectFlagIdByFieldObjectId
- lsls r0, 16
- lsrs r0, 16
- bl FlagSet
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r0, r1
- bl RemoveFieldObject
-_0808D902:
- add sp, 0x4
- pop {r0}
- bx r0
- .pool
- thumb_func_end RemoveFieldObjectByLocalIdAndMap
-
- thumb_func_start RemoveFieldObjectInternal
-@ void RemoveFieldObjectInternal(npc_state *fieldObject)
-RemoveFieldObjectInternal: @ 808D90C
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldrb r0, [r4, 0x5]
- bl GetFieldObjectGraphicsInfo
- ldrh r2, [r0, 0x6]
- ldr r1, =0xffff0000
- ldr r0, [sp, 0x4]
- ands r0, r1
- orrs r0, r2
- str r0, [sp, 0x4]
- ldr r2, =gSprites
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r2, 0
- adds r1, 0xC
- adds r0, r1
- mov r1, sp
- str r1, [r0]
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- bl DestroySprite
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RemoveFieldObjectInternal
-
- thumb_func_start sub_808D958
-sub_808D958: @ 808D958
- push {r4,lr}
- movs r4, 0
-_0808D95C:
- ldr r0, =gUnknown_02037590
- ldrb r0, [r0, 0x5]
- cmp r4, r0
- beq _0808D972
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r0, r1
- bl RemoveFieldObject
-_0808D972:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _0808D95C
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808D958
-
- thumb_func_start SpawnFieldObjectInternal
-@ u8 SpawnFieldObjectInternal(struct FieldObjectTemplate *romFieldObject, struct objtemplate *template, int mapId, int mapGroupId, u16 movingCameraOffsetX, u16 movingCameraOffsetY)
-SpawnFieldObjectInternal: @ 808D98C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r8, r1
- adds r1, r2, 0
- adds r2, r3, 0
- ldr r3, [sp, 0x24]
- ldr r4, [sp, 0x28]
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 16
- lsrs r3, 16
- mov r10, r3
- lsls r4, 16
- lsrs r4, 16
- str r4, [sp]
- bl InitFieldObjectStateFromTemplate
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- cmp r0, 0x10
- bne _0808D9C8
- movs r0, 0x10
- b _0808DB2C
-_0808D9C8:
- mov r0, r9
- lsls r4, r0, 3
- adds r0, r4, r0
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r6, r0, r1
- ldrb r0, [r6, 0x5]
- bl GetFieldObjectGraphicsInfo
- adds r7, r0, 0
- ldrb r0, [r7, 0xC]
- lsls r0, 28
- lsrs r5, r0, 28
- cmp r5, 0
- bne _0808D9F4
- ldrh r0, [r7, 0x2]
- movs r1, 0
- bl npc_load_two_palettes__no_record
- b _0808DA16
- .pool
-_0808D9F4:
- cmp r5, 0xA
- bne _0808DA02
- ldrh r0, [r7, 0x2]
- movs r1, 0xA
- bl npc_load_two_palettes__and_record
- b _0808DA16
-_0808DA02:
- cmp r5, 0xF
- bls _0808DA16
- adds r0, r5, 0
- subs r0, 0x10
- lsls r0, 24
- lsrs r5, r0, 24
- ldrh r0, [r7, 0x2]
- adds r1, r5, 0
- bl sub_808EAB0
-_0808DA16:
- ldrb r0, [r6, 0x6]
- cmp r0, 0x4C
- bne _0808DA24
- ldrb r0, [r6, 0x1]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r6, 0x1]
-_0808DA24:
- ldr r1, =0x0000ffff
- adds r0, r1, 0
- mov r2, r8
- strh r0, [r2, 0x2]
- mov r0, r8
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- cmp r0, 0x40
- bne _0808DA64
- ldr r0, =gUnknown_02037350
- mov r2, r9
- adds r1, r4, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- movs r0, 0x10
- b _0808DB2C
- .pool
-_0808DA64:
- mov r1, r8
- lsls r0, r1, 4
- add r0, r8
- lsls r0, 2
- ldr r1, =gSprites
- adds r4, r0, r1
- mov r2, r10
- lsls r0, r2, 16
- asrs r0, 16
- ldrh r1, [r6, 0x10]
- adds r0, r1
- lsls r0, 16
- asrs r0, 16
- ldr r2, [sp]
- lsls r1, r2, 16
- asrs r1, 16
- ldrh r2, [r6, 0x12]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- bl sub_8092FF0
- ldrh r0, [r7, 0x8]
- lsls r0, 16
- asrs r0, 17
- negs r0, r0
- adds r1, r4, 0
- adds r1, 0x28
- strb r0, [r1]
- ldrh r0, [r7, 0xA]
- lsls r0, 16
- asrs r0, 17
- negs r0, r0
- adds r2, r4, 0
- adds r2, 0x29
- strb r0, [r2]
- ldrh r0, [r4, 0x20]
- adds r0, 0x8
- strh r0, [r4, 0x20]
- ldrh r1, [r4, 0x22]
- adds r1, 0x10
- movs r0, 0
- ldrsb r0, [r2, r0]
- adds r0, r1
- strh r0, [r4, 0x22]
- lsls r2, r5, 4
- ldrb r1, [r4, 0x5]
- movs r0, 0xF
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x5]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- mov r0, r9
- strh r0, [r4, 0x2E]
- mov r1, r8
- strb r1, [r6, 0x4]
- ldrb r1, [r7, 0xC]
- lsls r1, 25
- lsrs r1, 31
- lsls r1, 4
- ldrb r2, [r6, 0x1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r6, 0x1]
- lsls r0, 27
- cmp r0, 0
- blt _0808DB16
- ldrb r0, [r6, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl FieldObjectDirectionToImageAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
-_0808DB16:
- ldrb r0, [r6, 0xB]
- lsrs r0, 4
- adds r1, r4, 0
- movs r2, 0x1
- bl SetObjectSubpriorityByZCoord
- adds r0, r6, 0
- adds r1, r4, 0
- bl sub_8096518
- mov r0, r9
-_0808DB2C:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end SpawnFieldObjectInternal
-
- thumb_func_start SpawnFieldObject
-@ u8 SpawnFieldObject(struct FieldObjectTemplate *romNpc, u8 mapId, u8 mapGroupId, u16 movingCameraOffsetX, u16 movingCameraOffsetY)
-SpawnFieldObject: @ 808DB40
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x2C
- mov r9, r0
- adds r6, r1, 0
- mov r8, r2
- adds r4, r3, 0
- ldr r5, [sp, 0x48]
- lsls r6, 24
- lsrs r6, 24
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- movs r0, 0
- str r0, [sp, 0x20]
- mov r1, r9
- ldrb r0, [r1, 0x1]
- bl GetFieldObjectGraphicsInfo
- adds r7, r0, 0
- add r2, sp, 0x20
- mov r0, r9
- add r1, sp, 0x8
- bl MakeObjectTemplateFromFieldObjectTemplate
- ldrh r3, [r7, 0x6]
- ldr r2, =0xffff0000
- add r1, sp, 0x24
- ldr r0, [r1, 0x4]
- ands r0, r2
- orrs r0, r3
- str r0, [r1, 0x4]
- str r1, [sp, 0x14]
- lsls r4, 16
- asrs r4, 16
- str r4, [sp]
- lsls r5, 16
- asrs r5, 16
- str r5, [sp, 0x4]
- mov r0, r9
- add r1, sp, 0x8
- adds r2, r6, 0
- mov r3, r8
- bl SpawnFieldObjectInternal
- lsls r0, 24
- lsrs r2, r0, 24
- adds r5, r2, 0
- cmp r2, 0x10
- bne _0808DBBC
- movs r0, 0x10
- b _0808DBF2
- .pool
-_0808DBBC:
- ldr r4, =gSprites
- ldr r1, =gUnknown_02037350
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- adds r3, r0, r1
- ldrb r1, [r3, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0xC
- adds r0, r1
- ldr r1, [r7, 0x1C]
- str r1, [r0]
- ldr r2, [sp, 0x20]
- cmp r2, 0
- beq _0808DBF0
- ldrb r1, [r3, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r1, r2, 0
- bl SetSubspriteTables
-_0808DBF0:
- adds r0, r5, 0
-_0808DBF2:
- add sp, 0x2C
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end SpawnFieldObject
-
- thumb_func_start SpawnSpecialFieldObject
-@ u8 SpawnSpecialFieldObject(struct FieldObjectTemplate *romFieldObject)
-SpawnSpecialFieldObject: @ 808DC08
- push {r4-r6,lr}
- sub sp, 0x8
- adds r5, r0, 0
- mov r4, sp
- adds r4, 0x6
- add r0, sp, 0x4
- adds r1, r4, 0
- bl GetFieldObjectMovingCameraOffset
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrb r1, [r0, 0x5]
- ldrb r2, [r0, 0x4]
- add r0, sp, 0x4
- movs r6, 0
- ldrsh r3, [r0, r6]
- movs r6, 0
- ldrsh r0, [r4, r6]
- str r0, [sp]
- adds r0, r5, 0
- bl SpawnFieldObject
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x8
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end SpawnSpecialFieldObject
-
- thumb_func_start SpawnSpecialFieldObjectParametrized
-@ u8 SpawnSpecialFieldObjectParametrized(u8 graphicsId, u8 movementBehavior, u8 localId, u16 x, u16 y, u8 z)
-SpawnSpecialFieldObjectParametrized: @ 808DC44
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x18
- ldr r4, [sp, 0x2C]
- ldr r5, [sp, 0x30]
- mov r8, r5
- lsls r0, 24
- lsrs r0, 24
- lsls r3, 16
- ldr r5, =0xfff90000
- adds r3, r5
- lsrs r3, 16
- lsls r4, 16
- adds r4, r5
- lsrs r4, 16
- mov r5, sp
- movs r6, 0
- strb r2, [r5]
- mov r2, sp
- strb r0, [r2, 0x1]
- mov r0, sp
- strb r6, [r0, 0x2]
- movs r5, 0
- strh r3, [r0, 0x4]
- strh r4, [r0, 0x6]
- mov r2, r8
- strb r2, [r0, 0x8]
- strb r1, [r0, 0x9]
- mov r2, sp
- ldrb r1, [r2, 0xA]
- movs r0, 0x10
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0xA]
- mov r0, sp
- strb r5, [r0, 0xA]
- strh r6, [r0, 0xC]
- strh r6, [r0, 0xE]
- bl SpawnSpecialFieldObject
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x18
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end SpawnSpecialFieldObjectParametrized
-
- thumb_func_start show_sprite
-show_sprite: @ 808DCAC
- push {r4-r7,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- adds r1, r7, 0
- adds r2, r6, 0
- bl GetFieldObjectTemplateByLocalIdAndMap
- adds r5, r0, 0
- cmp r5, 0
- beq _0808DCF2
- mov r4, sp
- adds r4, 0x6
- add r0, sp, 0x4
- adds r1, r4, 0
- bl GetFieldObjectMovingCameraOffset
- add r0, sp, 0x4
- movs r1, 0
- ldrsh r3, [r0, r1]
- movs r1, 0
- ldrsh r0, [r4, r1]
- str r0, [sp]
- adds r0, r5, 0
- adds r1, r7, 0
- adds r2, r6, 0
- bl SpawnFieldObject
- lsls r0, 24
- lsrs r0, 24
- b _0808DCF4
-_0808DCF2:
- movs r0, 0x10
-_0808DCF4:
- add sp, 0x8
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end show_sprite
-
- thumb_func_start MakeObjectTemplateFromFieldObjectGraphicsInfo
-@ void MakeObjectTemplateFromFieldObjectGraphicsInfo(u8 graphicsId, void ( *callback)(), struct objtemplate *objectTemplate, SpriteOamTable **spriteOamTables)
-MakeObjectTemplateFromFieldObjectGraphicsInfo: @ 808DCFC
- push {r4-r6,lr}
- adds r5, r1, 0
- adds r4, r2, 0
- adds r6, r3, 0
- lsls r0, 24
- lsrs r0, 24
- bl GetFieldObjectGraphicsInfo
- ldrh r1, [r0]
- strh r1, [r4]
- ldrh r1, [r0, 0x2]
- strh r1, [r4, 0x2]
- ldr r1, [r0, 0x10]
- str r1, [r4, 0x4]
- ldr r1, [r0, 0x18]
- str r1, [r4, 0x8]
- ldr r1, [r0, 0x1C]
- str r1, [r4, 0xC]
- ldr r1, [r0, 0x20]
- str r1, [r4, 0x10]
- str r5, [r4, 0x14]
- ldr r0, [r0, 0x14]
- str r0, [r6]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end MakeObjectTemplateFromFieldObjectGraphicsInfo
-
- thumb_func_start MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex
-@ void MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(u16 graphicsId, u16 callbackIndex, struct objtemplate *objectTemplate, SpriteOamTable **spriteOamTables)
-MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex: @ 808DD30
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- ldr r4, =gUnknown_08505438
- lsrs r1, 14
- adds r1, r4
- ldr r1, [r1]
- bl MakeObjectTemplateFromFieldObjectGraphicsInfo
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex
-
- thumb_func_start MakeObjectTemplateFromFieldObjectTemplate
-@ void MakeObjectTemplateFromFieldObjectTemplate(struct FieldObjectTemplate *fieldObjectTemplate, struct objtemplate *objectTemplate, SpriteOamTable **spriteOamTables)
-MakeObjectTemplateFromFieldObjectTemplate: @ 808DD50
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r3, r2, 0
- ldrb r0, [r4, 0x1]
- ldrb r1, [r4, 0x9]
- adds r2, r5, 0
- bl MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end MakeObjectTemplateFromFieldObjectTemplate
-
- thumb_func_start AddPseudoFieldObject
-@ void AddPseudoFieldObject(u8 graphicsId, void ( *callback)(), u16 x, u16 y, u8 subpriority)
-AddPseudoFieldObject: @ 808DD68
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, [sp, 0x20]
- lsls r4, 16
- lsrs r4, 16
- lsls r2, 16
- lsrs r2, 16
- mov r8, r2
- lsls r3, 16
- lsrs r7, r3, 16
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r0, 0x18
- bl Alloc
- adds r6, r0, 0
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- mov r3, sp
- bl MakeObjectTemplateFromFieldObjectGraphicsInfo
- ldrh r1, [r6, 0x2]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _0808DDAE
- adds r0, r1, 0
- bl sub_808E894
-_0808DDAE:
- mov r0, r8
- lsls r1, r0, 16
- asrs r1, 16
- lsls r2, r7, 16
- asrs r2, 16
- adds r0, r6, 0
- mov r3, r9
- bl CreateSprite
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r6, 0
- bl Free
- cmp r5, 0x40
- beq _0808DDF2
- ldr r1, [sp]
- cmp r1, 0
- beq _0808DDF2
- lsls r4, r5, 4
- adds r4, r5
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- adds r0, r4, 0
- bl SetSubspriteTables
- adds r4, 0x42
- ldrb r1, [r4]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r4]
-_0808DDF2:
- adds r0, r5, 0
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end AddPseudoFieldObject
-
- thumb_func_start sprite_new
-sprite_new: @ 808DE0C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- adds r5, r0, 0
- ldr r0, [sp, 0x40]
- ldr r4, [sp, 0x44]
- lsls r5, 24
- lsrs r5, 24
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- add r1, sp, 0x18
- mov r8, r1
- strh r2, [r1]
- mov r6, sp
- adds r6, 0x1A
- strh r3, [r6]
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r4, 24
- lsrs r4, 24
- mov r10, r4
- adds r0, r5, 0
- bl GetFieldObjectGraphicsInfo
- adds r4, r0, 0
- ldr r1, =sub_8097AC8
- add r3, sp, 0x1C
- adds r0, r5, 0
- mov r2, sp
- bl MakeObjectTemplateFromFieldObjectGraphicsInfo
- mov r1, sp
- ldr r2, =0x0000ffff
- adds r0, r2, 0
- strh r0, [r1, 0x2]
- mov r1, r8
- movs r2, 0
- ldrsh r0, [r1, r2]
- adds r0, 0x7
- strh r0, [r1]
- movs r1, 0
- ldrsh r0, [r6, r1]
- adds r0, 0x7
- strh r0, [r6]
- mov r0, r8
- adds r1, r6, 0
- movs r2, 0x8
- movs r3, 0x10
- bl sub_80930E0
- mov r2, r8
- movs r0, 0
- ldrsh r1, [r2, r0]
- movs r0, 0
- ldrsh r2, [r6, r0]
- mov r0, sp
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x40
- beq _0808DF6C
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- ldr r1, =gSprites
- adds r5, r0, r1
- ldrh r0, [r4, 0x8]
- lsls r0, 16
- asrs r0, 17
- negs r0, r0
- adds r1, r5, 0
- adds r1, 0x28
- strb r0, [r1]
- ldrh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 17
- negs r0, r0
- adds r1, 0x1
- strb r0, [r1]
- movs r0, 0
- ldrsb r0, [r1, r0]
- ldrh r1, [r5, 0x22]
- adds r0, r1
- strh r0, [r5, 0x22]
- ldrb r0, [r4, 0xC]
- lsls r0, 28
- lsrs r0, 24
- ldrb r1, [r5, 0x5]
- movs r3, 0xF
- adds r2, r3, 0
- ands r2, r1
- orrs r2, r0
- strb r2, [r5, 0x5]
- lsls r1, r2, 24
- lsrs r0, r1, 28
- cmp r0, 0xF
- bls _0808DEE4
- subs r0, 0x10
- lsls r0, 4
- ands r2, r3
- orrs r2, r0
- strb r2, [r5, 0x5]
-_0808DEE4:
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- mov r2, r9
- strh r2, [r5, 0x2E]
- strh r7, [r5, 0x30]
- ldrb r1, [r4, 0xC]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0xA
- bne _0808DF18
- ldrh r0, [r4, 0x2]
- lsls r1, 28
- lsrs r1, 28
- bl npc_load_two_palettes__and_record
- b _0808DF2C
- .pool
-_0808DF18:
- lsls r1, 28
- lsrs r0, r1, 28
- cmp r0, 0xF
- bls _0808DF2C
- ldrh r0, [r4, 0x2]
- lsrs r2, r1, 28
- movs r1, 0xF0
- orrs r1, r2
- bl sub_808EAB0
-_0808DF2C:
- ldr r1, [sp, 0x1C]
- cmp r1, 0
- beq _0808DF48
- adds r0, r5, 0
- bl SetSubspriteTables
- adds r2, r5, 0
- adds r2, 0x42
- ldrb r0, [r2]
- movs r1, 0x3F
- ands r1, r0
- movs r0, 0x80
- orrs r1, r0
- strb r1, [r2]
-_0808DF48:
- adds r0, r5, 0
- adds r1, r7, 0
- bl InitObjectPriorityByZCoord
- adds r0, r7, 0
- adds r1, r5, 0
- movs r2, 0x1
- bl SetObjectSubpriorityByZCoord
- mov r0, r10
- bl FieldObjectDirectionToImageAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl StartSpriteAnim
-_0808DF6C:
- adds r0, r6, 0
- add sp, 0x20
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sprite_new
-
- thumb_func_start SpawnFieldObjectsInView
-@ void SpawnFieldObjectsInView(u16 movingCameraOffsetX, u16 movingCameraOffsetY)
-SpawnFieldObjectsInView: @ 808DF80
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x4]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp, 0x8]
- ldr r5, =gMapHeader
- ldr r0, [r5, 0x4]
- cmp r0, 0
- beq _0808E078
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldrh r1, [r2]
- subs r0, r1, 0x2
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- adds r1, 0x11
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp, 0xC]
- ldrh r4, [r2, 0x2]
- adds r0, r4, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- beq _0808DFE0
- bl sub_81AAA40
- lsls r0, 24
- lsrs r6, r0, 24
- b _0808DFF0
- .pool
-_0808DFE0:
- bl InTrainerHill
- cmp r0, 0
- beq _0808DFEC
- movs r6, 0x2
- b _0808DFF0
-_0808DFEC:
- ldr r0, [r5, 0x4]
- ldrb r6, [r0]
-_0808DFF0:
- movs r5, 0
- cmp r5, r6
- bcs _0808E078
- lsls r0, r4, 16
- asrs r0, 16
- mov r9, r0
- mov r1, r8
- lsls r0, r1, 16
- asrs r0, 16
- mov r8, r0
-_0808E004:
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 3
- movs r2, 0xC7
- lsls r2, 4
- adds r0, r2
- ldr r3, =gSaveBlock1Ptr
- ldr r1, [r3]
- adds r4, r1, r0
- ldrh r0, [r4, 0x4]
- adds r0, 0x7
- lsls r0, 16
- lsrs r2, r0, 16
- ldrh r0, [r4, 0x6]
- adds r0, 0x7
- lsls r0, 16
- asrs r1, r0, 16
- cmp r9, r1
- bgt _0808E06E
- mov r7, r10
- lsls r0, r7, 16
- asrs r0, 16
- cmp r0, r1
- blt _0808E06E
- lsls r0, r2, 16
- asrs r1, r0, 16
- cmp r8, r1
- bgt _0808E06E
- ldr r2, [sp, 0xC]
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, r1
- blt _0808E06E
- ldrh r0, [r4, 0x14]
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _0808E06E
- ldr r3, =gSaveBlock1Ptr
- ldr r0, [r3]
- ldrb r1, [r0, 0x5]
- ldrb r2, [r0, 0x4]
- ldr r7, [sp, 0x4]
- lsls r3, r7, 16
- ldr r7, [sp, 0x8]
- lsls r0, r7, 16
- asrs r0, 16
- str r0, [sp]
- adds r0, r4, 0
- asrs r3, 16
- bl SpawnFieldObject
-_0808E06E:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, r6
- bcc _0808E004
-_0808E078:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end SpawnFieldObjectsInView
-
- thumb_func_start RemoveFieldObjectsOutsideView
-@ void RemoveFieldObjectsOutsideView()
-RemoveFieldObjectsOutsideView: @ 808E08C
- push {r4-r6,lr}
- movs r3, 0
- ldr r6, =gUnknown_02032308
-_0808E092:
- movs r2, 0
- movs r4, 0
- adds r5, r3, 0x1
-_0808E098:
- lsls r0, r2, 2
- adds r1, r0, r6
- ldrb r0, [r1]
- cmp r0, 0
- beq _0808E0AA
- ldrb r1, [r1, 0x2]
- cmp r3, r1
- bne _0808E0AA
- movs r4, 0x1
-_0808E0AA:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _0808E098
- cmp r4, 0
- bne _0808E0D2
- lsls r0, r3, 3
- adds r0, r3
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r2, r0, r1
- ldr r0, [r2]
- ldr r1, =0x00010001
- ands r0, r1
- cmp r0, 0x1
- bne _0808E0D2
- adds r0, r2, 0
- bl RemoveFieldObjectIfOutsideView
-_0808E0D2:
- lsls r0, r5, 24
- lsrs r3, r0, 24
- cmp r3, 0xF
- bls _0808E092
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RemoveFieldObjectsOutsideView
-
- thumb_func_start RemoveFieldObjectIfOutsideView
-@ void RemoveFieldObjectIfOutsideView(npc_state *fieldObject)
-RemoveFieldObjectIfOutsideView: @ 808E0EC
- push {r4-r7,lr}
- adds r3, r0, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldrh r0, [r2]
- subs r1, r0, 0x2
- lsls r1, 16
- adds r0, 0x11
- lsls r0, 16
- lsrs r5, r0, 16
- ldrh r4, [r2, 0x2]
- adds r0, r4, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r6, r0, 16
- movs r0, 0x10
- ldrsh r2, [r3, r0]
- lsrs r7, r1, 16
- asrs r1, 16
- cmp r2, r1
- blt _0808E132
- lsls r0, r5, 16
- asrs r0, 16
- cmp r2, r0
- bgt _0808E132
- movs r0, 0x12
- ldrsh r1, [r3, r0]
- lsls r0, r4, 16
- asrs r0, 16
- cmp r1, r0
- blt _0808E132
- lsls r0, r6, 16
- asrs r0, 16
- cmp r1, r0
- ble _0808E160
-_0808E132:
- movs r0, 0xC
- ldrsh r1, [r3, r0]
- lsls r0, r7, 16
- asrs r0, 16
- cmp r1, r0
- blt _0808E15A
- lsls r0, r5, 16
- asrs r0, 16
- cmp r1, r0
- bgt _0808E15A
- movs r0, 0xE
- ldrsh r1, [r3, r0]
- lsls r0, r4, 16
- asrs r0, 16
- cmp r1, r0
- blt _0808E15A
- lsls r0, r6, 16
- asrs r0, 16
- cmp r1, r0
- ble _0808E160
-_0808E15A:
- adds r0, r3, 0
- bl RemoveFieldObject
-_0808E160:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RemoveFieldObjectIfOutsideView
-
- thumb_func_start sub_808E16C
-sub_808E16C: @ 808E16C
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- bl ClearPlayerAvatarInfo
- movs r6, 0
- ldr r7, =gUnknown_02037350
- lsls r4, 16
- lsls r5, 16
-_0808E186:
- lsls r0, r6, 3
- adds r0, r6
- lsls r0, 2
- adds r0, r7
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _0808E1A0
- adds r0, r6, 0
- asrs r1, r4, 16
- asrs r2, r5, 16
- bl sub_808E1B8
-_0808E1A0:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0xF
- bls _0808E186
- bl sub_808D450
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808E16C
-
- thumb_func_start sub_808E1B8
-sub_808E1B8: @ 808E1B8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp, 0x24]
- movs r7, 0
- ldr r2, =gUnknown_02032308
-_0808E1DA:
- lsls r0, r7, 2
- adds r1, r0, r2
- ldrb r0, [r1]
- cmp r0, 0
- beq _0808E1EC
- ldrb r1, [r1, 0x2]
- cmp r9, r1
- bne _0808E1EC
- b _0808E374
-_0808E1EC:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0x3
- bls _0808E1DA
- mov r1, r9
- lsls r0, r1, 3
- add r0, r9
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r6, r0, r1
- movs r0, 0
- str r0, [sp, 0x20]
- ldrb r0, [r6, 0x5]
- bl GetFieldObjectGraphicsInfo
- adds r5, r0, 0
- ldrh r2, [r5, 0x6]
- ldr r1, =0xffff0000
- add r4, sp, 0x18
- ldr r0, [r4, 0x4]
- ands r0, r1
- orrs r0, r2
- str r0, [r4, 0x4]
- ldrb r0, [r6, 0x5]
- ldrb r1, [r6, 0x6]
- add r3, sp, 0x20
- mov r2, sp
- bl MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex
- str r4, [sp, 0xC]
- mov r1, sp
- ldr r2, =0x0000ffff
- adds r0, r2, 0
- strh r0, [r1, 0x2]
- ldrb r0, [r5, 0xC]
- lsls r1, r0, 28
- lsrs r0, r1, 28
- mov r8, r0
- cmp r0, 0
- bne _0808E258
- ldrh r0, [r5, 0x2]
- lsrs r1, 28
- bl npc_load_two_palettes__no_record
- b _0808E27E
- .pool
-_0808E258:
- mov r2, r8
- cmp r2, 0xA
- bne _0808E268
- ldrh r0, [r5, 0x2]
- lsrs r1, 28
- bl npc_load_two_palettes__and_record
- b _0808E27E
-_0808E268:
- mov r0, r8
- cmp r0, 0xF
- bls _0808E27E
- subs r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldrh r0, [r5, 0x2]
- mov r1, r8
- bl sub_808EAB0
-_0808E27E:
- mov r1, sp
- ldr r2, =0x0000ffff
- adds r0, r2, 0
- strh r0, [r1, 0x2]
- mov r0, sp
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0x40
- beq _0808E374
- lsls r0, r7, 4
- adds r0, r7
- lsls r0, 2
- ldr r1, =gSprites
- adds r4, r0, r1
- mov r1, r10
- lsls r0, r1, 16
- asrs r0, 16
- ldrh r2, [r6, 0x10]
- adds r0, r2
- lsls r0, 16
- asrs r0, 16
- ldr r2, [sp, 0x24]
- lsls r1, r2, 16
- asrs r1, 16
- ldrh r2, [r6, 0x12]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- bl sub_8092FF0
- ldrh r0, [r5, 0x8]
- lsls r0, 16
- asrs r0, 17
- negs r0, r0
- adds r1, r4, 0
- adds r1, 0x28
- strb r0, [r1]
- ldrh r0, [r5, 0xA]
- lsls r0, 16
- asrs r0, 17
- negs r0, r0
- adds r2, r4, 0
- adds r2, 0x29
- strb r0, [r2]
- ldrh r0, [r4, 0x20]
- adds r0, 0x8
- strh r0, [r4, 0x20]
- ldrh r1, [r4, 0x22]
- adds r1, 0x10
- movs r0, 0
- ldrsb r0, [r2, r0]
- adds r0, r1
- strh r0, [r4, 0x22]
- ldr r0, [r5, 0x1C]
- str r0, [r4, 0xC]
- ldrb r0, [r6, 0x6]
- cmp r0, 0xB
- bne _0808E312
- mov r0, r9
- adds r1, r7, 0
- bl SetPlayerAvatarFieldObjectIdAndObjectId
- bl sub_8154228
- strb r0, [r6, 0x1B]
-_0808E312:
- ldr r1, [sp, 0x20]
- cmp r1, 0
- beq _0808E31E
- adds r0, r4, 0
- bl SetSubspriteTables
-_0808E31E:
- mov r0, r8
- lsls r2, r0, 4
- ldrb r1, [r4, 0x5]
- movs r0, 0xF
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x5]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- mov r1, r9
- strh r1, [r4, 0x2E]
- strb r7, [r6, 0x4]
- ldrb r0, [r6, 0x1]
- lsls r0, 27
- cmp r0, 0
- blt _0808E362
- ldrb r0, [r6, 0x6]
- cmp r0, 0xB
- beq _0808E362
- ldrb r0, [r6, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl FieldObjectDirectionToImageAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
-_0808E362:
- adds r0, r6, 0
- bl sub_808E38C
- ldrb r0, [r6, 0xB]
- lsrs r0, 4
- adds r1, r4, 0
- movs r2, 0x1
- bl SetObjectSubpriorityByZCoord
-_0808E374:
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808E1B8
-
- thumb_func_start sub_808E38C
-@ void sub_808E38C(struct npc_state *fieldObject)
-sub_808E38C: @ 808E38C
- push {lr}
- ldrb r2, [r0]
- movs r3, 0x3
- negs r3, r3
- adds r1, r3, 0
- ands r1, r2
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- ldrb r2, [r0, 0x2]
- movs r1, 0x41
- negs r1, r1
- ands r1, r2
- ands r1, r3
- movs r2, 0x5
- negs r2, r2
- ands r1, r2
- subs r2, 0x4
- ands r1, r2
- subs r2, 0x8
- ands r1, r2
- subs r2, 0x10
- ands r1, r2
- strb r1, [r0, 0x2]
- bl FieldObjectClearAnim
- pop {r0}
- bx r0
- thumb_func_end sub_808E38C
-
- thumb_func_start SetPlayerAvatarFieldObjectIdAndObjectId
-@ void SetPlayerAvatarFieldObjectIdAndObjectId(u8 fieldObjectId, u8 objectId)
-SetPlayerAvatarFieldObjectIdAndObjectId: @ 808E3C4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, =gUnknown_02037590
- strb r0, [r5, 0x5]
- strb r1, [r5, 0x4]
- ldr r1, =gUnknown_02037350
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- adds r4, r1
- ldrb r0, [r4, 0x5]
- bl GetPlayerAvatarGenderByGraphicsId
- strb r0, [r5, 0x7]
- ldrb r0, [r4, 0x5]
- movs r1, 0x20
- bl SetPlayerAvatarExtraStateTransition
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end SetPlayerAvatarFieldObjectIdAndObjectId
-
- thumb_func_start FieldObjectSetGraphicsId
-@ void FieldObjectSetGraphicsId(npc_state *npcState, u8 graphicsId)
-FieldObjectSetGraphicsId: @ 808E3F8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- mov r0, r8
- bl GetFieldObjectGraphicsInfo
- adds r6, r0, 0
- ldrb r1, [r7, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r4, r0, r1
- ldrb r0, [r6, 0xC]
- lsls r1, r0, 28
- lsrs r5, r1, 28
- cmp r5, 0
- bne _0808E434
- ldrh r0, [r6, 0x2]
- adds r1, r5, 0
- bl pal_patch_for_npc
- b _0808E456
- .pool
-_0808E434:
- cmp r5, 0xA
- bne _0808E442
- ldrh r0, [r6, 0x2]
- lsrs r1, 28
- bl npc_load_two_palettes__and_record
- b _0808E456
-_0808E442:
- cmp r5, 0xF
- bls _0808E456
- adds r0, r5, 0
- subs r0, 0x10
- lsls r0, 24
- lsrs r5, r0, 24
- ldrh r0, [r6, 0x2]
- adds r1, r5, 0
- bl sub_808EAB0
-_0808E456:
- ldr r0, [r6, 0x10]
- ldrb r2, [r0, 0x1]
- lsrs r2, 6
- lsls r2, 6
- ldrb r3, [r4, 0x1]
- movs r1, 0x3F
- adds r0, r1, 0
- ands r0, r3
- orrs r0, r2
- strb r0, [r4, 0x1]
- ldr r0, [r6, 0x10]
- ldrb r0, [r0, 0x3]
- lsrs r0, 6
- lsls r0, 6
- ldrb r2, [r4, 0x3]
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x3]
- ldr r0, [r6, 0x1C]
- str r0, [r4, 0xC]
- ldr r0, [r6, 0x18]
- str r0, [r4, 0x8]
- ldr r0, [r6, 0x14]
- str r0, [r4, 0x18]
- lsls r2, r5, 4
- ldrb r1, [r4, 0x5]
- movs r0, 0xF
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x5]
- ldrb r1, [r6, 0xC]
- lsls r1, 25
- lsrs r1, 31
- lsls r1, 4
- ldrb r2, [r7, 0x1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r7, 0x1]
- mov r0, r8
- strb r0, [r7, 0x5]
- movs r1, 0x10
- ldrsh r0, [r7, r1]
- movs r2, 0x12
- ldrsh r1, [r7, r2]
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- bl sub_8093038
- ldrh r0, [r6, 0x8]
- lsls r0, 16
- asrs r0, 17
- negs r0, r0
- adds r1, r4, 0
- adds r1, 0x28
- strb r0, [r1]
- ldrh r0, [r6, 0xA]
- lsls r0, 16
- asrs r0, 17
- negs r0, r0
- adds r2, r4, 0
- adds r2, 0x29
- strb r0, [r2]
- ldrh r0, [r4, 0x20]
- adds r0, 0x8
- strh r0, [r4, 0x20]
- ldrh r1, [r4, 0x22]
- adds r1, 0x10
- movs r0, 0
- ldrsb r0, [r2, r0]
- adds r0, r1
- strh r0, [r4, 0x22]
- ldrb r0, [r7, 0x1]
- lsrs r0, 7
- cmp r0, 0
- beq _0808E4F8
- bl CameraObjectReset1
-_0808E4F8:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end FieldObjectSetGraphicsId
-
- thumb_func_start sub_808E504
-sub_808E504: @ 808E504
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r4, r3, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808E538
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r0, r1
- adds r1, r4, 0
- bl FieldObjectSetGraphicsId
-_0808E538:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808E504
-
- thumb_func_start FieldObjectTurn
-@ void FieldObjectTurn(struct npc_state *fieldObject, u8 direction)
-FieldObjectTurn: @ 808E544
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r1, 24
- lsrs r1, 24
- bl FieldObjectSetDirection
- ldrb r0, [r6, 0x1]
- lsls r0, 27
- cmp r0, 0
- blt _0808E58A
- ldrb r0, [r6, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r5, =gSprites
- adds r4, r5
- ldrb r0, [r6, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl FieldObjectDirectionToImageAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- ldrb r1, [r6, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0
- bl SeekSpriteAnim
-_0808E58A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end FieldObjectTurn
-
- thumb_func_start FieldObjectTurnByLocalIdAndMap
-@ void FieldObjectTurnByLocalIdAndMap(u8 localId, u8 mapId, u8 mapGroupId)
-FieldObjectTurnByLocalIdAndMap: @ 808E594
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r4, r3, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808E5C8
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r0, r1
- adds r1, r4, 0
- bl FieldObjectTurn
-_0808E5C8:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end FieldObjectTurnByLocalIdAndMap
-
- thumb_func_start sub_808E5D4
-sub_808E5D4: @ 808E5D4
- push {lr}
- lsls r1, 24
- lsrs r1, 24
- ldrb r2, [r0, 0x5]
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- ldr r2, =gUnknown_02037350
- adds r0, r2
- bl FieldObjectTurn
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808E5D4
-
- thumb_func_start get_berry_tree_graphics
-@ void get_berry_tree_graphics(npc_state *npcState, struct obj *obj)
-get_berry_tree_graphics: @ 808E5F4
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r7, r1, 0
- ldrb r0, [r5, 0x1]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r5, 0x1]
- adds r4, r7, 0
- adds r4, 0x3E
- ldrb r0, [r4]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4]
- ldrb r0, [r5, 0x1D]
- bl GetStageByBerryTreeId
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _0808E680
- ldrb r1, [r5, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r5, 0x1]
- ldrb r1, [r4]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r4]
- ldrb r0, [r5, 0x1D]
- bl GetBerryTypeByBerryTreeId
- subs r0, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- subs r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r4, 0x2B
- bls _0808E648
- movs r4, 0
-_0808E648:
- ldr r0, =gBerryTreeFieldObjectGraphicsIdTablePointers
- lsls r4, 2
- adds r0, r4, r0
- ldr r0, [r0]
- adds r0, r6
- ldrb r1, [r0]
- adds r0, r5, 0
- bl FieldObjectSetGraphicsId
- ldr r0, =gBerryTreePicTablePointers
- adds r0, r4, r0
- ldr r0, [r0]
- str r0, [r7, 0xC]
- ldr r0, =gBerryTreePaletteSlotTablePointers
- adds r4, r0
- ldr r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r1, 4
- ldrb r2, [r7, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r7, 0x5]
- adds r0, r7, 0
- adds r1, r6, 0
- bl StartSpriteAnim
-_0808E680:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end get_berry_tree_graphics
-
- thumb_func_start GetFieldObjectGraphicsInfo
-@ FieldObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8 graphicsId)
-GetFieldObjectGraphicsInfo: @ 808E694
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xEF
- bls _0808E6AC
- adds r0, r1, 0
- adds r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- bl VarGetFieldObjectGraphicsId
- adds r1, r0, 0
-_0808E6AC:
- cmp r1, 0x45
- bne _0808E6C4
- bl sub_81201C8
- lsls r0, 24
- ldr r1, =gMauvilleOldManGraphicsInfoPointers
- lsrs r0, 22
- adds r0, r1
- ldr r0, [r0]
- b _0808E6D2
- .pool
-_0808E6C4:
- cmp r1, 0xEE
- bls _0808E6CA
- movs r1, 0x5
-_0808E6CA:
- ldr r0, =gFieldObjectGraphicsInfoPointers
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
-_0808E6D2:
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetFieldObjectGraphicsInfo
-
- thumb_func_start FieldObjectHandleDynamicGraphicsId
-@ void FieldObjectHandleDynamicGraphicsId(struct npc_state *fieldObject)
-FieldObjectHandleDynamicGraphicsId: @ 808E6DC
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0x5]
- cmp r0, 0xEF
- bls _0808E6F2
- adds r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- bl VarGetFieldObjectGraphicsId
- strb r0, [r4, 0x5]
-_0808E6F2:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end FieldObjectHandleDynamicGraphicsId
-
- thumb_func_start npc_by_local_id_and_map_set_field_1_bit_x20
-npc_by_local_id_and_map_set_field_1_bit_x20: @ 808E6F8
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r4, r3, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808E73A
- ldr r2, =gUnknown_02037350
- mov r0, sp
- ldrb r0, [r0]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0x1
- adds r2, r4, 0
- ands r2, r0
- lsls r2, 5
- ldrb r3, [r1, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x1]
-_0808E73A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end npc_by_local_id_and_map_set_field_1_bit_x20
-
- thumb_func_start FieldObjectGetLocalIdAndMap
-@ void FieldObjectGetLocalIdAndMap(struct npc_state *fieldObject, u8 *localId, u8 *mapId, u8 *mapGroupId)
-FieldObjectGetLocalIdAndMap: @ 808E748
- push {r4,lr}
- ldrb r4, [r0, 0x8]
- strb r4, [r1]
- ldrb r1, [r0, 0x9]
- strb r1, [r2]
- ldrb r0, [r0, 0xA]
- strb r0, [r3]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end FieldObjectGetLocalIdAndMap
-
- thumb_func_start sub_808E75C
-sub_808E75C: @ 808E75C
- push {lr}
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- bl GetFieldObjectIdByXY
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x10
- beq _0808E784
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r0, r1
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_0808E784:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808E75C
-
- thumb_func_start sub_808E78C
-sub_808E78C: @ 808E78C
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r4, r3, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808E7D2
- mov r0, sp
- ldrb r0, [r0]
- lsls r2, r0, 3
- adds r2, r0
- lsls r2, 2
- ldr r0, =gUnknown_02037350
- adds r2, r0
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- ldrb r1, [r2, 0x3]
- movs r3, 0x4
- orrs r1, r3
- strb r1, [r2, 0x3]
- adds r0, 0x43
- strb r4, [r0]
-_0808E7D2:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808E78C
-
- thumb_func_start sub_808E7E4
-sub_808E7E4: @ 808E7E4
- push {lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808E820
- mov r0, sp
- ldrb r0, [r0]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, =gUnknown_02037350
- adds r1, r0
- ldrb r2, [r1, 0x3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x3]
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
-_0808E820:
- add sp, 0x4
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808E7E4
-
- thumb_func_start sub_808E82C
-sub_808E82C: @ 808E82C
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r4, [sp, 0x10]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 16
- lsrs r5, r3, 16
- lsls r4, 16
- lsrs r4, 16
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808E870
- ldr r2, =gUnknown_02037350
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- strh r5, [r0, 0x24]
- strh r4, [r0, 0x26]
-_0808E870:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808E82C
-
- thumb_func_start gpu_pal_allocator_reset__manage_upper_four
-gpu_pal_allocator_reset__manage_upper_four: @ 808E880
- push {lr}
- bl FreeAllSpritePalettes
- ldr r1, =gReservedSpritePaletteCount
- movs r0, 0xC
- strb r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end gpu_pal_allocator_reset__manage_upper_four
-
- thumb_func_start sub_808E894
-sub_808E894: @ 808E894
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl FindFieldObjectPaletteIndexByTag
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, =0x000011ff
- cmp r1, r0
- beq _0808E8B2
- lsls r0, r1, 3
- ldr r1, =gUnknown_0850BBC8
- adds r0, r1
- bl sub_808E8F4
-_0808E8B2:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808E894
-
- thumb_func_start sub_808E8C0
-sub_808E8C0: @ 808E8C0
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r4, 0
- ldrh r0, [r5]
- ldr r1, =0x000011ff
- cmp r0, r1
- beq _0808E8EA
- adds r6, r1, 0
-_0808E8D0:
- lsls r0, r4, 1
- adds r0, r5
- ldrh r0, [r0]
- bl sub_808E894
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 1
- adds r0, r5
- ldrh r0, [r0]
- cmp r0, r6
- bne _0808E8D0
-_0808E8EA:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808E8C0
-
- thumb_func_start sub_808E8F4
-@ u8 sub_808E8F4(struct TaggedObjectPalette *taggedPalette)
-sub_808E8F4: @ 808E8F4
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0808E912
- adds r0, r4, 0
- bl LoadSpritePalette
- lsls r0, 24
- lsrs r0, 24
- b _0808E914
-_0808E912:
- movs r0, 0xFF
-_0808E914:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_808E8F4
-
- thumb_func_start pal_patch_for_npc
-@ void pal_patch_for_npc(u16 tag, u8 slot)
-pal_patch_for_npc: @ 808E91C
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 24
- lsrs r4, 24
- bl FindFieldObjectPaletteIndexByTag
- lsls r0, 24
- ldr r1, =gUnknown_0850BBC8
- lsrs r0, 21
- adds r0, r1
- ldr r0, [r0]
- lsls r4, 20
- movs r1, 0x80
- lsls r1, 17
- adds r4, r1
- lsrs r4, 16
- adds r1, r4, 0
- movs r2, 0x20
- bl LoadPalette
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end pal_patch_for_npc
-
- thumb_func_start pal_patch_for_npc_range
-@ void pal_patch_for_npc_range(u16 *tags, u8 minSlot, u8 maxSlot)
-pal_patch_for_npc_range: @ 808E954
- push {r4-r6,lr}
- adds r5, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- cmp r4, r6
- bcs _0808E978
-_0808E964:
- ldrh r0, [r5]
- adds r1, r4, 0
- bl pal_patch_for_npc
- adds r5, 0x2
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, r6
- bcc _0808E964
-_0808E978:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end pal_patch_for_npc_range
-
- thumb_func_start FindFieldObjectPaletteIndexByTag
-@ u8 FindFieldObjectPaletteIndexByTag(u16 tag)
-FindFieldObjectPaletteIndexByTag: @ 808E980
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- movs r2, 0
- ldr r0, =gUnknown_0850BBC8
- ldrh r1, [r0, 0x4]
- ldr r3, =0x000011ff
- adds r4, r0, 0
- cmp r1, r3
- beq _0808E9C0
- adds r6, r4, 0
- adds r1, r3, 0
-_0808E998:
- lsls r0, r2, 3
- adds r0, r6
- ldrh r0, [r0, 0x4]
- cmp r0, r5
- bne _0808E9B0
- adds r0, r2, 0
- b _0808E9C2
- .pool
-_0808E9B0:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 3
- adds r0, r4
- ldrh r0, [r0, 0x4]
- cmp r0, r1
- bne _0808E998
-_0808E9C0:
- movs r0, 0xFF
-_0808E9C2:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end FindFieldObjectPaletteIndexByTag
-
- thumb_func_start npc_load_two_palettes__no_record
-@ void npc_load_two_palettes__no_record(u16 tag, u8 slot)
-npc_load_two_palettes__no_record: @ 808E9C8
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r1, 24
- lsrs r5, r1, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl pal_patch_for_npc
- movs r3, 0
- ldr r1, =gUnknown_0850BD00
- ldrh r0, [r1]
- ldr r2, =0x000011ff
- cmp r0, r2
- beq _0808EA30
- ldr r0, =gUnknown_084975C4
- adds r5, r0
- adds r6, r2, 0
-_0808E9EC:
- lsls r2, r3, 3
- adds r0, r2, r1
- ldrh r0, [r0]
- cmp r0, r4
- bne _0808EA20
- adds r1, 0x4
- adds r1, r2, r1
- ldr r0, =gUnknown_020375B4
- ldrb r0, [r0]
- ldr r1, [r1]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- ldrb r1, [r5]
- bl pal_patch_for_npc
- b _0808EA30
- .pool
-_0808EA20:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 3
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r6
- bne _0808E9EC
-_0808EA30:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end npc_load_two_palettes__no_record
-
- thumb_func_start npc_load_two_palettes__and_record
-@ void npc_load_two_palettes__and_record(u16 tag, u8 slot)
-npc_load_two_palettes__and_record: @ 808EA38
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, =gUnknown_020375B6
- strh r4, [r0]
- adds r0, r4, 0
- adds r1, r5, 0
- bl pal_patch_for_npc
- movs r3, 0
- ldr r1, =gUnknown_0850BD78
- ldrh r0, [r1]
- ldr r2, =0x000011ff
- cmp r0, r2
- beq _0808EAA8
- ldr r0, =gUnknown_084975C4
- adds r5, r0
- adds r6, r2, 0
-_0808EA60:
- lsls r2, r3, 3
- adds r0, r2, r1
- ldrh r0, [r0]
- cmp r0, r4
- bne _0808EA98
- adds r1, 0x4
- adds r1, r2, r1
- ldr r0, =gUnknown_020375B4
- ldrb r0, [r0]
- ldr r1, [r1]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- ldrb r1, [r5]
- bl pal_patch_for_npc
- b _0808EAA8
- .pool
-_0808EA98:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 3
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r6
- bne _0808EA60
-_0808EAA8:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end npc_load_two_palettes__and_record
-
- thumb_func_start sub_808EAB0
-sub_808EAB0: @ 808EAB0
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 24
- lsrs r1, 24
- bl pal_patch_for_npc
- pop {r0}
- bx r0
- thumb_func_end sub_808EAB0
-
- thumb_func_start sub_808EAC4
-sub_808EAC4: @ 808EAC4
- push {r4,lr}
- ldrh r3, [r0, 0x10]
- strh r3, [r0, 0x14]
- ldrh r4, [r0, 0x12]
- strh r4, [r0, 0x16]
- lsls r1, 16
- asrs r1, 16
- adds r1, r3
- strh r1, [r0, 0x10]
- lsls r2, 16
- asrs r2, 16
- adds r2, r4
- strh r2, [r0, 0x12]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_808EAC4
-
- thumb_func_start npc_coords_shift
-@ void npc_coords_shift(struct npc_state *fieldObject, u16 x, u16 y)
-npc_coords_shift: @ 808EAE4
- ldrh r3, [r0, 0x10]
- strh r3, [r0, 0x14]
- ldrh r3, [r0, 0x12]
- strh r3, [r0, 0x16]
- strh r1, [r0, 0x10]
- strh r2, [r0, 0x12]
- bx lr
- thumb_func_end npc_coords_shift
-
- thumb_func_start npc_coords_set
-@ void npc_coords_set(struct npc_state *fieldObject, u16 x, u16 y)
-npc_coords_set: @ 808EAF4
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- strh r1, [r0, 0x14]
- strh r2, [r0, 0x16]
- strh r1, [r0, 0x10]
- strh r2, [r0, 0x12]
- bx lr
- thumb_func_end npc_coords_set
-
- thumb_func_start sub_808EB08
-sub_808EB08: @ 808EB08
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- ldrb r1, [r6, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r7, r0, r1
- ldrb r0, [r6, 0x5]
- bl GetFieldObjectGraphicsInfo
- mov r8, r0
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl npc_coords_set
- movs r1, 0x10
- ldrsh r0, [r6, r1]
- movs r2, 0x12
- ldrsh r1, [r6, r2]
- adds r2, r7, 0
- adds r2, 0x20
- adds r3, r7, 0
- adds r3, 0x22
- bl sub_8093038
- mov r1, r8
- ldrh r0, [r1, 0x8]
- lsls r0, 16
- asrs r0, 17
- negs r0, r0
- adds r1, r7, 0
- adds r1, 0x28
- strb r0, [r1]
- mov r2, r8
- ldrh r0, [r2, 0xA]
- lsls r0, 16
- asrs r0, 17
- negs r0, r0
- adds r2, r7, 0
- adds r2, 0x29
- strb r0, [r2]
- ldrh r0, [r7, 0x20]
- adds r0, 0x8
- strh r0, [r7, 0x20]
- ldrh r1, [r7, 0x22]
- adds r1, 0x10
- movs r0, 0
- ldrsb r0, [r2, r0]
- adds r0, r1
- strh r0, [r7, 0x22]
- adds r0, r6, 0
- bl sub_808E38C
- ldrb r0, [r6, 0x1]
- lsrs r0, 7
- cmp r0, 0
- beq _0808EB9A
- bl CameraObjectReset1
-_0808EB9A:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808EB08
-
- thumb_func_start sub_808EBA8
-sub_808EBA8: @ 808EBA8
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r4, [sp, 0x10]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 16
- lsrs r5, r3, 16
- lsls r4, 16
- lsrs r4, 16
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808EBF0
- lsls r1, r5, 16
- lsls r2, r4, 16
- mov r0, sp
- ldrb r3, [r0]
- lsls r0, r3, 3
- adds r0, r3
- lsls r0, 2
- ldr r3, =gUnknown_02037350
- adds r0, r3
- movs r3, 0xE0
- lsls r3, 11
- adds r1, r3
- asrs r1, 16
- adds r2, r3
- asrs r2, 16
- bl sub_808EB08
-_0808EBF0:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808EBA8
-
- thumb_func_start npc_coords_shift_still
-@ void npc_coords_shift_still(struct npc_state *fieldObject)
-npc_coords_shift_still: @ 808EBFC
- push {lr}
- movs r2, 0x10
- ldrsh r1, [r0, r2]
- movs r3, 0x12
- ldrsh r2, [r0, r3]
- bl npc_coords_shift
- pop {r0}
- bx r0
- thumb_func_end npc_coords_shift_still
-
- thumb_func_start UpdateFieldObjectCoordsForCameraUpdate
-@ void UpdateFieldObjectCoordsForCameraUpdate()
-UpdateFieldObjectCoordsForCameraUpdate: @ 808EC10
- push {r4,r5,lr}
- ldr r2, =gUnknown_02037334
- ldrb r1, [r2]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0808EC68
- movs r3, 0
- ldr r5, =gUnknown_02037350
- movs r0, 0x4
- ldrsh r4, [r2, r0]
- movs r0, 0x8
- ldrsh r1, [r2, r0]
-_0808EC2A:
- lsls r0, r3, 3
- adds r0, r3
- lsls r0, 2
- adds r2, r0, r5
- ldrb r0, [r2]
- lsls r0, 31
- cmp r0, 0
- beq _0808EC5E
- ldrh r0, [r2, 0xC]
- subs r0, r4
- strh r0, [r2, 0xC]
- ldrh r0, [r2, 0xE]
- subs r0, r1
- strh r0, [r2, 0xE]
- ldrh r0, [r2, 0x10]
- subs r0, r4
- strh r0, [r2, 0x10]
- ldrh r0, [r2, 0x12]
- subs r0, r1
- strh r0, [r2, 0x12]
- ldrh r0, [r2, 0x14]
- subs r0, r4
- strh r0, [r2, 0x14]
- ldrh r0, [r2, 0x16]
- subs r0, r1
- strh r0, [r2, 0x16]
-_0808EC5E:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0xF
- bls _0808EC2A
-_0808EC68:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end UpdateFieldObjectCoordsForCameraUpdate
-
- thumb_func_start GetFieldObjectIdByXYZ
-@ u8 GetFieldObjectIdByXYZ(u16 x, u16 y, u8 z)
-GetFieldObjectIdByXYZ: @ 808EC78
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 24
- lsrs r5, r2, 24
- movs r4, 0
- ldr r0, =gUnknown_02037350
- mov r8, r0
-_0808EC90:
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- mov r2, r8
- adds r1, r0, r2
- ldrb r0, [r1]
- lsls r0, 31
- cmp r0, 0
- beq _0808ECC8
- movs r2, 0x10
- ldrsh r0, [r1, r2]
- cmp r0, r7
- bne _0808ECC8
- movs r2, 0x12
- ldrsh r0, [r1, r2]
- cmp r0, r6
- bne _0808ECC8
- adds r0, r1, 0
- adds r1, r5, 0
- bl FieldObjectDoesZCoordMatch
- lsls r0, 24
- cmp r0, 0
- beq _0808ECC8
- adds r0, r4, 0
- b _0808ECD4
- .pool
-_0808ECC8:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _0808EC90
- movs r0, 0x10
-_0808ECD4:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetFieldObjectIdByXYZ
-
- thumb_func_start FieldObjectDoesZCoordMatch
-@ bool8 FieldObjectDoesZCoordMatch(struct npc_state *fieldObject)
-FieldObjectDoesZCoordMatch: @ 808ECE0
- push {lr}
- lsls r1, 24
- lsrs r1, 24
- ldrb r2, [r0, 0xB]
- movs r0, 0xF
- ands r0, r2
- cmp r0, 0
- beq _0808ED00
- cmp r1, 0
- beq _0808ED00
- lsls r0, r2, 28
- lsrs r0, 28
- cmp r0, r1
- beq _0808ED00
- movs r0, 0
- b _0808ED02
-_0808ED00:
- movs r0, 0x1
-_0808ED02:
- pop {r1}
- bx r1
- thumb_func_end FieldObjectDoesZCoordMatch
-
- thumb_func_start UpdateFieldObjectsForCameraUpdate
-@ void UpdateFieldObjectsForCameraUpdate(u16 movingCameraOffsetX, u16 movingCameraOffsetY)
-UpdateFieldObjectsForCameraUpdate: @ 808ED08
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- bl UpdateFieldObjectCoordsForCameraUpdate
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- adds r0, r4, 0
- adds r1, r5, 0
- bl SpawnFieldObjectsInView
- bl RemoveFieldObjectsOutsideView
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end UpdateFieldObjectsForCameraUpdate
-
- thumb_func_start AddCameraObject
-@ u8 AddCameraObject(u8 followedObjectId)
-AddCameraObject: @ 808ED34
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gUnknown_084975D4
- movs r1, 0
- movs r2, 0
- movs r3, 0x4
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r2, 0x3E
- adds r2, r1
- mov r12, r2
- ldrb r2, [r2]
- movs r3, 0x4
- orrs r2, r3
- mov r3, r12
- strb r2, [r3]
- strh r4, [r1, 0x2E]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end AddCameraObject
-
- thumb_func_start ObjectCB_CameraObject
-@ void ObjectCB_CameraObject(struct obj *object)
-ObjectCB_CameraObject: @ 808ED78
- push {r4,r5,lr}
- sub sp, 0xC
- mov r2, sp
- ldr r1, =gUnknown_084975EC
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- movs r2, 0x30
- ldrsh r1, [r0, r2]
- lsls r1, 2
- add r1, sp
- ldr r1, [r1]
- bl _call_via_r1
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ObjectCB_CameraObject
-
- thumb_func_start CameraObject_0
-@ void CameraObject_0(struct obj *object)
-CameraObject_0: @ 808EDA0
- push {lr}
- ldr r3, =gSprites
- movs r1, 0x2E
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- ldrh r1, [r1, 0x20]
- strh r1, [r0, 0x20]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- ldrh r1, [r1, 0x22]
- strh r1, [r0, 0x22]
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r3]
- movs r1, 0x1
- strh r1, [r0, 0x30]
- bl CameraObject_1
- pop {r0}
- bx r0
- .pool
- thumb_func_end CameraObject_0
-
- thumb_func_start CameraObject_1
-@ void CameraObject_1(struct obj *object)
-CameraObject_1: @ 808EDDC
- push {r4,r5,lr}
- ldr r3, =gSprites
- movs r1, 0x2E
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- ldrh r3, [r1, 0x22]
- ldrh r2, [r0, 0x20]
- ldrh r4, [r1, 0x20]
- movs r5, 0x20
- ldrsh r1, [r1, r5]
- subs r1, r2
- strh r1, [r0, 0x32]
- ldrh r2, [r0, 0x22]
- lsls r1, r3, 16
- asrs r1, 16
- subs r1, r2
- strh r1, [r0, 0x34]
- strh r4, [r0, 0x20]
- strh r3, [r0, 0x22]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CameraObject_1
-
- thumb_func_start CameraObject_2
-@ void CameraObject_2(struct obj *object)
-CameraObject_2: @ 808EE14
- push {r4,lr}
- ldr r4, =gSprites
- movs r1, 0x2E
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x20]
- movs r3, 0
- strh r1, [r0, 0x20]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x22]
- strh r1, [r0, 0x22]
- strh r3, [r0, 0x32]
- strh r3, [r0, 0x34]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CameraObject_2
-
- thumb_func_start FindCameraObject
-@ struct obj *FindCameraObject()
-FindCameraObject: @ 808EE44
- push {r4,r5,lr}
- movs r3, 0
- ldr r4, =gSprites
- adds r5, r4, 0
- adds r5, 0x1C
-_0808EE4E:
- lsls r0, r3, 4
- adds r0, r3
- lsls r1, r0, 2
- adds r2, r1, r4
- adds r0, r2, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _0808EE78
- adds r0, r1, r5
- ldr r1, [r0]
- ldr r0, =ObjectCB_CameraObject
- cmp r1, r0
- bne _0808EE78
- adds r0, r2, 0
- b _0808EE84
- .pool
-_0808EE78:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3F
- bls _0808EE4E
- movs r0, 0
-_0808EE84:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end FindCameraObject
-
- thumb_func_start CameraObjectReset1
-@ void CameraObjectReset1()
-CameraObjectReset1: @ 808EE8C
- push {lr}
- bl FindCameraObject
- adds r2, r0, 0
- cmp r2, 0
- beq _0808EEA4
- movs r0, 0
- strh r0, [r2, 0x30]
- ldr r1, [r2, 0x1C]
- adds r0, r2, 0
- bl _call_via_r1
-_0808EEA4:
- pop {r0}
- bx r0
- thumb_func_end CameraObjectReset1
-
- thumb_func_start CameraObjectSetFollowedObjectId
-@ void CameraObjectSetFollowedObjectId(u8 objectId)
-CameraObjectSetFollowedObjectId: @ 808EEA8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl FindCameraObject
- cmp r0, 0
- beq _0808EEBC
- strh r4, [r0, 0x2E]
- bl CameraObjectReset1
-_0808EEBC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end CameraObjectSetFollowedObjectId
-
- thumb_func_start CameraObjectGetFollowedObjectId
-@ u8 CameraObjectGetFollowedObjectId()
-CameraObjectGetFollowedObjectId: @ 808EEC4
- push {lr}
- bl FindCameraObject
- cmp r0, 0
- beq _0808EED6
- ldrh r0, [r0, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- b _0808EED8
-_0808EED6:
- movs r0, 0x40
-_0808EED8:
- pop {r1}
- bx r1
- thumb_func_end CameraObjectGetFollowedObjectId
-
- thumb_func_start CameraObjectReset2
-@ void CameraObjectReset2()
-CameraObjectReset2: @ 808EEDC
- push {lr}
- bl FindCameraObject
- movs r1, 0x2
- strh r1, [r0, 0x30]
- pop {r0}
- bx r0
- thumb_func_end CameraObjectReset2
-
- thumb_func_start sub_808EEEC
-sub_808EEEC: @ 808EEEC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r12, r0
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- lsls r2, 16
- lsrs r6, r2, 16
- lsls r3, 24
- lsrs r7, r3, 24
- movs r5, 0
- ldr r1, =gSprites
-_0808EF06:
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r4, r0, r1
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- bne _0808EF38
- adds r0, r4, 0
- mov r1, r12
- movs r2, 0x44
- bl memcpy
- mov r0, r8
- strh r0, [r4, 0x20]
- strh r6, [r4, 0x22]
- adds r0, r4, 0
- adds r0, 0x43
- strb r7, [r0]
- b _0808EF42
- .pool
-_0808EF38:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3F
- bls _0808EF06
-_0808EF42:
- adds r0, r5, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_808EEEC
-
- thumb_func_start obj_unfreeze
-obj_unfreeze: @ 808EF50
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r12, r0
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- lsls r2, 16
- lsrs r6, r2, 16
- lsls r3, 24
- lsrs r7, r3, 24
- movs r5, 0x3F
- ldr r3, =gSprites
- movs r2, 0x1
- negs r2, r2
-_0808EF6E:
- lsls r0, r5, 16
- asrs r1, r0, 16
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r0, r3
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- bne _0808EFA8
- adds r0, r4, 0
- mov r1, r12
- movs r2, 0x44
- bl memcpy
- mov r0, r8
- strh r0, [r4, 0x20]
- strh r6, [r4, 0x22]
- adds r0, r4, 0
- adds r0, 0x43
- strb r7, [r0]
- lsls r0, r5, 24
- lsrs r0, 24
- b _0808EFB6
- .pool
-_0808EFA8:
- subs r0, r1, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- asrs r0, 16
- cmp r0, r2
- bgt _0808EF6E
- movs r0, 0x40
-_0808EFB6:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end obj_unfreeze
-
- thumb_func_start FieldObjectSetDirection
-@ void FieldObjectSetDirection(struct npc_state *fieldObject, u8 direction)
-FieldObjectSetDirection: @ 808EFC0
- push {r4,lr}
- adds r3, r0, 0
- lsls r1, 24
- lsrs r2, r1, 24
- adds r4, r2, 0
- ldrb r0, [r3, 0x18]
- lsls r0, 28
- lsrs r0, 28
- adds r1, r3, 0
- adds r1, 0x20
- strb r0, [r1]
- ldrb r0, [r3, 0x1]
- lsls r0, 30
- cmp r0, 0
- blt _0808EFF0
- movs r0, 0xF
- adds r1, r2, 0
- ands r1, r0
- ldrb r2, [r3, 0x18]
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x18]
-_0808EFF0:
- lsls r2, r4, 4
- ldrb r1, [r3, 0x18]
- movs r0, 0xF
- ands r0, r1
- orrs r0, r2
- strb r0, [r3, 0x18]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end FieldObjectSetDirection
-
- thumb_func_start GetFieldObjectScriptPointerByLocalIdAndMap
-@ u32 GetFieldObjectScriptPointerByLocalIdAndMap(u8 localId, u8 mapId, u8 mapGroupId)
-GetFieldObjectScriptPointerByLocalIdAndMap: @ 808F004
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- bl GetFieldObjectTemplateByLocalIdAndMap
- ldr r0, [r0, 0x10]
- pop {r1}
- bx r1
- thumb_func_end GetFieldObjectScriptPointerByLocalIdAndMap
-
- thumb_func_start GetFieldObjectScriptPointerByFieldObjectId
-@ u32 GetFieldObjectScriptPointerByFieldObjectId(u8 fieldObjectId)
-GetFieldObjectScriptPointerByFieldObjectId: @ 808F01C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_02037350
- lsls r2, r0, 3
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldrb r0, [r2, 0x8]
- ldrb r1, [r2, 0x9]
- ldrb r2, [r2, 0xA]
- bl GetFieldObjectScriptPointerByLocalIdAndMap
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetFieldObjectScriptPointerByFieldObjectId
-
- thumb_func_start GetFieldObjectFlagIdByLocalIdAndMap
-@ u16 GetFieldObjectFlagIdByLocalIdAndMap(u8 localId, u8 mapId, u8 mapGroupId)
-GetFieldObjectFlagIdByLocalIdAndMap: @ 808F040
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- bl GetFieldObjectTemplateByLocalIdAndMap
- ldrh r0, [r0, 0x14]
- pop {r1}
- bx r1
- thumb_func_end GetFieldObjectFlagIdByLocalIdAndMap
-
- thumb_func_start GetFieldObjectFlagIdByFieldObjectId
-@ u16 GetFieldObjectFlagIdByFieldObjectId(u8 fieldObjectId)
-GetFieldObjectFlagIdByFieldObjectId: @ 808F058
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_02037350
- lsls r2, r0, 3
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldrb r0, [r2, 0x8]
- ldrb r1, [r2, 0x9]
- ldrb r2, [r2, 0xA]
- bl GetFieldObjectFlagIdByLocalIdAndMap
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetFieldObjectFlagIdByFieldObjectId
-
- thumb_func_start sub_808F080
-sub_808F080: @ 808F080
- push {lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808F0B4
- ldr r2, =gUnknown_02037350
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x7]
- b _0808F0B6
- .pool
-_0808F0B4:
- movs r0, 0xFF
-_0808F0B6:
- add sp, 0x4
- pop {r1}
- bx r1
- thumb_func_end sub_808F080
-
- thumb_func_start sub_808F0BC
-sub_808F0BC: @ 808F0BC
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_02037350
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x7]
- bx lr
- .pool
- thumb_func_end sub_808F0BC
-
- thumb_func_start sub_808F0D4
-sub_808F0D4: @ 808F0D4
- push {lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808F108
- ldr r2, =gUnknown_02037350
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x1D]
- b _0808F10A
- .pool
-_0808F108:
- movs r0, 0xFF
-_0808F10A:
- add sp, 0x4
- pop {r1}
- bx r1
- thumb_func_end sub_808F0D4
-
- thumb_func_start FieldObjectGetBerryTreeId
-@ u8 FieldObjectGetBerryTreeId(u8 fieldObjectId)
-FieldObjectGetBerryTreeId: @ 808F110
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_02037350
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x1D]
- bx lr
- .pool
- thumb_func_end FieldObjectGetBerryTreeId
-
- thumb_func_start GetFieldObjectTemplateByLocalIdAndMap
-@ struct FieldObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8 localId, u8 mapId, u8 mapGroupId)
-GetFieldObjectTemplateByLocalIdAndMap: @ 808F128
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- lsls r2, 24
- lsrs r2, 24
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x5
- ldrsb r0, [r1, r0]
- cmp r0, r3
- bne _0808F160
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- cmp r0, r2
- bne _0808F160
- movs r0, 0xC7
- lsls r0, 4
- adds r1, r0
- ldr r0, =gMapHeader
- ldr r0, [r0, 0x4]
- b _0808F16C
- .pool
-_0808F160:
- adds r0, r2, 0
- adds r1, r3, 0
- bl get_mapheader_by_bank_and_number
- ldr r0, [r0, 0x4]
- ldr r1, [r0, 0x4]
-_0808F16C:
- ldrb r2, [r0]
- adds r0, r4, 0
- bl FindFieldObjectTemplateInArrayByLocalId
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetFieldObjectTemplateByLocalIdAndMap
-
- thumb_func_start FindFieldObjectTemplateInArrayByLocalId
-@ struct FieldObjectTemplate *FindFieldObjectTemplateInArrayByLocalId(u8 localId, struct FieldObjectTemplate *templates, u8 numTemplates)
-FindFieldObjectTemplateInArrayByLocalId: @ 808F17C
- push {r4,r5,lr}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r2, 24
- lsrs r2, 24
- movs r1, 0
- cmp r1, r2
- bcs _0808F1AA
-_0808F18E:
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r3, r0, r5
- ldrb r0, [r3]
- cmp r0, r4
- bne _0808F1A0
- adds r0, r3, 0
- b _0808F1AC
-_0808F1A0:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r2
- bcc _0808F18E
-_0808F1AA:
- movs r0, 0
-_0808F1AC:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end FindFieldObjectTemplateInArrayByLocalId
-
- thumb_func_start sub_808F1B4
-@ int sub_808F1B4(struct npc_state *fieldObject)
-sub_808F1B4: @ 808F1B4
- push {r4,r5,lr}
- adds r3, r0, 0
- ldrb r0, [r3, 0x9]
- ldr r1, =gSaveBlock1Ptr
- ldr r2, [r1]
- movs r1, 0x5
- ldrsb r1, [r2, r1]
- cmp r0, r1
- bne _0808F200
- ldrb r1, [r3, 0xA]
- movs r0, 0x4
- ldrsb r0, [r2, r0]
- cmp r1, r0
- beq _0808F1E2
- b _0808F200
- .pool
-_0808F1D8:
- movs r1, 0xC7
- lsls r1, 4
- adds r0, r1
- adds r0, r4, r0
- b _0808F202
-_0808F1E2:
- movs r1, 0
- adds r4, r2, 0
- ldrb r3, [r3, 0x8]
- movs r5, 0xC7
- lsls r5, 4
- adds r2, r4, r5
- movs r0, 0
-_0808F1F0:
- ldrb r5, [r2]
- cmp r3, r5
- beq _0808F1D8
- adds r2, 0x18
- adds r0, 0x18
- adds r1, 0x1
- cmp r1, 0x3F
- ble _0808F1F0
-_0808F200:
- movs r0, 0
-_0808F202:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_808F1B4
-
- thumb_func_start sub_808F208
-@ void sub_808F208(struct npc_state *fieldObject)
-sub_808F208: @ 808F208
- push {r4,lr}
- adds r4, r0, 0
- bl sub_808F1B4
- adds r1, r0, 0
- cmp r1, 0
- beq _0808F222
- ldrh r0, [r4, 0x10]
- subs r0, 0x7
- strh r0, [r1, 0x4]
- ldrh r0, [r4, 0x12]
- subs r0, 0x7
- strh r0, [r1, 0x6]
-_0808F222:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_808F208
-
- thumb_func_start sub_808F228
-sub_808F228: @ 808F228
- push {r4,lr}
- adds r4, r1, 0
- bl sub_808F1B4
- cmp r0, 0
- beq _0808F236
- str r4, [r0, 0x10]
-_0808F236:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_808F228
-
- thumb_func_start sub_808F23C
-sub_808F23C: @ 808F23C
- push {r4,lr}
- lsls r1, 24
- lsrs r4, r1, 24
- bl sub_808F1B4
- cmp r0, 0
- beq _0808F24C
- strb r4, [r0, 0x9]
-_0808F24C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_808F23C
-
- thumb_func_start sub_808F254
-@ void sub_808F254(u8 localId, u8 mapId, u8 mapGroupId)
-sub_808F254: @ 808F254
- push {lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808F282
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r0, r1
- bl sub_808F208
-_0808F282:
- add sp, 0x4
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808F254
-
- thumb_func_start sub_808F28C
-sub_808F28C: @ 808F28C
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r4, r3, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0808F2E8
- cmp r4, 0x6
- beq _0808F2B6
- cmp r4, 0x7
- beq _0808F2D4
- b _0808F2E8
-_0808F2B6:
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r0, r1
- ldr r1, =gUnknown_082766A2
- bl sub_808F228
- b _0808F2E8
- .pool
-_0808F2D4:
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gUnknown_02037350
- adds r0, r1
- ldr r1, =gUnknown_082766A6
- bl sub_808F228
-_0808F2E8:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808F28C
-
- thumb_func_start npc_paltag_set_load
-npc_paltag_set_load: @ 808F2F8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl gpu_pal_allocator_reset__manage_upper_four
- ldr r1, =gUnknown_020375B6
- ldr r2, =0x000011ff
- adds r0, r2, 0
- strh r0, [r1]
- ldr r2, =gUnknown_020375B4
- strb r4, [r2]
- cmp r4, 0x1
- bne _0808F344
- ldr r1, =gUnknown_0850BE38
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0x6
- bl pal_patch_for_npc_range
- ldr r1, =gReservedSpritePaletteCount
- movs r0, 0x8
- strb r0, [r1]
- b _0808F356
- .pool
-_0808F344:
- ldr r0, =gUnknown_0850BE38
- ldrb r1, [r2]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- movs r1, 0
- movs r2, 0xA
- bl pal_patch_for_npc_range
-_0808F356:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end npc_paltag_set_load
-
- thumb_func_start npc_paltag_by_palslot
-npc_paltag_by_palslot: @ 808F360
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x9
- bhi _0808F39C
- ldr r1, =gUnknown_0850BE38
- ldr r0, =gUnknown_020375B4
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- lsls r0, r2, 1
- b _0808F390
- .pool
-_0808F384:
- adds r1, r4, 0x4
- adds r1, r2, r1
- ldr r0, =gUnknown_020375B4
- ldrb r0, [r0]
- ldr r1, [r1]
- lsls r0, 1
-_0808F390:
- adds r0, r1
- ldrh r0, [r0]
- b _0808F3CE
- .pool
-_0808F39C:
- movs r3, 0
- ldr r0, =gUnknown_0850BD78
- ldrh r1, [r0]
- ldr r2, =0x000011ff
- adds r4, r0, 0
- cmp r1, r2
- beq _0808F3CC
- adds r6, r4, 0
- ldr r0, =gUnknown_020375B6
- ldrh r1, [r0]
- adds r5, r2, 0
-_0808F3B2:
- lsls r2, r3, 3
- adds r0, r2, r6
- ldrh r0, [r0]
- cmp r0, r1
- beq _0808F384
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 3
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, r5
- bne _0808F3B2
-_0808F3CC:
- ldr r0, =0x000011ff
-_0808F3CE:
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end npc_paltag_by_palslot
-
- thumb_func_start FieldObjectCB_NoMovement1
-FieldObjectCB_NoMovement1: @ 808F3E0
- push {lr}
- adds r1, r0, 0
- movs r0, 0x2E
- ldrsh r2, [r1, r0]
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- ldr r2, =gUnknown_02037350
- adds r0, r2
- ldr r2, =FieldObjectCB2_NoMovement1
- bl FieldObjectStep
- pop {r0}
- bx r0
- .pool
- thumb_func_end FieldObjectCB_NoMovement1
-
- thumb_func_start FieldObjectCB2_NoMovement1
-FieldObjectCB2_NoMovement1: @ 808F404
- movs r0, 0
- bx lr
- thumb_func_end FieldObjectCB2_NoMovement1
-
- thumb_func_start FieldObjectCB_GoRandomDirections
-FieldObjectCB_GoRandomDirections: @ 808F408
- push {lr}
- adds r1, r0, 0
- movs r0, 0x2E
- ldrsh r2, [r1, r0]
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- ldr r2, =gUnknown_02037350
- adds r0, r2
- ldr r2, =FieldObjectCB2_GoRandomDirections
- bl FieldObjectStep
- pop {r0}
- bx r0
- .pool
- thumb_func_end FieldObjectCB_GoRandomDirections
-
- thumb_func_start FieldObjectCB2_GoRandomDirections
-FieldObjectCB2_GoRandomDirections: @ 808F42C
- push {r4,lr}
- ldr r3, =gUnknown_0850D6F4
- movs r4, 0x30
- ldrsh r2, [r1, r4]
- lsls r2, 2
- adds r2, r3
- ldr r2, [r2]
- bl _call_via_r2
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end FieldObjectCB2_GoRandomDirections
-
- thumb_func_start sub_808F44C
-sub_808F44C: @ 808F44C
- push {r4,lr}
- adds r4, r1, 0
- bl npc_reset
- movs r0, 0x1
- strh r0, [r4, 0x30]
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_808F44C
-
- thumb_func_start sub_808F460
-sub_808F460: @ 808F460
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl GetFaceDirectionAnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldObjectSetRegularAnim
- movs r0, 0x2
- strh r0, [r5, 0x30]
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_808F460
-
- thumb_func_start sub_808F48C
-sub_808F48C: @ 808F48C
- push {r4-r6,lr}
- adds r6, r1, 0
- bl FieldObjectExecRegularAnim
- lsls r0, 24
- cmp r0, 0
- beq _0808F4C0
- ldr r5, =gUnknown_0850D6DC
- bl Random
- movs r4, 0x3
- adds r1, r4, 0
- ands r1, r0
- lsls r1, 1
- adds r1, r5
- movs r0, 0
- ldrsh r1, [r1, r0]
- adds r0, r6, 0
- bl sub_8097978
- strh r4, [r6, 0x30]
- movs r0, 0x1
- b _0808F4C2
- .pool
-_0808F4C0:
- movs r0, 0
-_0808F4C2:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_808F48C
-
- thumb_func_start sub_808F4C8
-sub_808F4C8: @ 808F4C8
- push {r4,lr}
- adds r4, r1, 0
- adds r0, r4, 0
- bl sub_809797C
- lsls r0, 24
- cmp r0, 0
- bne _0808F4DC
- movs r0, 0
- b _0808F4E2
-_0808F4DC:
- movs r0, 0x4
- strh r0, [r4, 0x30]
- movs r0, 0x1
-_0808F4E2:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_808F4C8
-
- thumb_func_start sub_808F4E8
-sub_808F4E8: @ 808F4E8
- push {r4-r6,lr}
- sub sp, 0x4
- adds r5, r0, 0
- adds r6, r1, 0
- ldr r1, =gUnknown_0850D710
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- bl Random
- movs r1, 0x3
- ands r1, r0
- mov r2, sp
- adds r0, r2, r1
- ldrb r4, [r0]
- adds r0, r5, 0
- adds r1, r4, 0
- bl FieldObjectSetDirection
- movs r0, 0x5
- strh r0, [r6, 0x30]
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_8092B88
- lsls r0, 24
- cmp r0, 0
- beq _0808F526
- movs r0, 0x1
- strh r0, [r6, 0x30]
-_0808F526:
- movs r0, 0x1
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_808F4E8
-
- thumb_func_start sub_808F534
-sub_808F534: @ 808F534
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x18]
- lsrs r0, 4
- bl GetGoSpeed0AnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldObjectSetRegularAnim
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x6
- strh r0, [r5, 0x30]
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_808F534
-
- thumb_func_start sub_808F564
-sub_808F564: @ 808F564
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl FieldObjectExecRegularAnim
- lsls r0, 24
- cmp r0, 0
- beq _0808F582
- ldrb r0, [r4]
- movs r1, 0x3
- negs r1, r1
- ands r1, r0
- strb r1, [r4]
- movs r0, 0x1
- strh r0, [r5, 0x30]
-_0808F582:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_808F564
-
- thumb_func_start FieldObjectIsTrainerAndCloseToPlayer
-@ bool8 FieldObjectIsTrainerAndCloseToPlayer(struct npc_state *fieldObject)
-FieldObjectIsTrainerAndCloseToPlayer: @ 808F58C
- push {r4-r7,lr}
- sub sp, 0x4
- adds r5, r0, 0
- movs r0, 0x80
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _0808F5F8
- ldrb r0, [r5, 0x7]
- cmp r0, 0x1
- beq _0808F5A8
- cmp r0, 0x3
- bne _0808F5F8
-_0808F5A8:
- mov r7, sp
- adds r7, 0x2
- mov r0, sp
- adds r1, r7, 0
- bl PlayerGetDestCoords
- ldrh r2, [r5, 0x10]
- ldrh r4, [r5, 0x12]
- ldrb r1, [r5, 0x1D]
- subs r3, r2, r1
- subs r0, r4, r1
- lsls r0, 16
- lsrs r5, r0, 16
- adds r2, r1, r2
- lsls r2, 16
- lsrs r2, 16
- adds r1, r4
- lsls r1, 16
- lsrs r6, r1, 16
- mov r0, sp
- lsls r3, 16
- asrs r3, 16
- movs r1, 0
- ldrsh r4, [r0, r1]
- cmp r3, r4
- bgt _0808F5F8
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, r4
- blt _0808F5F8
- lsls r0, r5, 16
- asrs r0, 16
- movs r2, 0
- ldrsh r1, [r7, r2]
- cmp r0, r1
- bgt _0808F5F8
- lsls r0, r6, 16
- asrs r0, 16
- cmp r0, r1
- bge _0808F5FC
-_0808F5F8:
- movs r0, 0
- b _0808F5FE
-_0808F5FC:
- movs r0, 0x1
-_0808F5FE:
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end FieldObjectIsTrainerAndCloseToPlayer
-
- thumb_func_start sub_808F608
-sub_808F608: @ 808F608
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r1, 16
- lsrs r0, r1, 16
- lsls r2, 16
- lsls r3, 16
- cmp r2, r3
- ble _0808F626
- movs r2, 0x4
- lsls r0, r4, 16
- cmp r0, 0
- bge _0808F630
- movs r2, 0x3
- b _0808F630
-_0808F626:
- movs r2, 0x1
- lsls r0, 16
- cmp r0, 0
- bge _0808F630
- movs r2, 0x2
-_0808F630:
- adds r0, r2, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_808F608
-
thumb_func_start sub_808F638
sub_808F638: @ 808F638
push {lr}
@@ -5082,7 +445,7 @@ FieldObjectCB_LookRandomDirections: @ 808F944
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =FieldObjectCB2_LookRandomDirections
bl FieldObjectStep
@@ -5256,7 +619,7 @@ FieldObjectCB_RandomlyGoNorthOrSouth: @ 808FA84
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =FieldObjectCB2_RandomlyGoNorthOrSouth
bl FieldObjectStep
@@ -5469,7 +832,7 @@ FieldObjectCB_RandomlyGoEastOrWest: @ 808FC08
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =FieldObjectCB2_RandomlyGoEastOrWest
bl FieldObjectStep
@@ -5679,7 +1042,7 @@ FieldObjectCB_FaceFixedDirection: @ 808FD8C
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =FieldObjectCB2_FaceFixedDirection
bl FieldObjectStep
@@ -5773,7 +1136,7 @@ FieldObjectCB_BerryTree: @ 808FE2C
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrh r1, [r4, 0x3C]
movs r0, 0x1
@@ -6071,7 +1434,7 @@ FieldObjectCB_RandomlyLookNorthOrSouth: @ 8090050
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =FieldObjectCB2_RandomlyLookNorthOrSouth
bl FieldObjectStep
@@ -6239,7 +1602,7 @@ FieldObjectCB_RandomlyLookEastOrWest: @ 8090190
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =FieldObjectCB2_RandomlyLookEastOrWest
bl FieldObjectStep
@@ -6407,7 +1770,7 @@ FieldObjectCB_RandomlyLookNorthOrWest: @ 80902D0
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =FieldObjectCB2_RandomlyLookNorthOrWest
bl FieldObjectStep
@@ -6575,7 +1938,7 @@ FieldObjectCB_RandomlyLookNorthOrEast: @ 8090410
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8090434
bl FieldObjectStep
@@ -6743,7 +2106,7 @@ FieldObjectCB_RandomlyLookSouthOrWest: @ 8090550
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8090574
bl FieldObjectStep
@@ -6911,7 +2274,7 @@ FieldObjectCB_RandomlyLookSouthOrEast: @ 8090690
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80906B4
bl FieldObjectStep
@@ -7079,7 +2442,7 @@ FieldObjectCB_RandomlyLookNorthOrSouthOrWest: @ 80907D0
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80907F4
bl FieldObjectStep
@@ -7247,7 +2610,7 @@ FieldObjectCB_RandomlyLookNorthOrSouthOrEast: @ 8090910
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8090934
bl FieldObjectStep
@@ -7415,7 +2778,7 @@ FieldObjectCB_RandomlyLookNorthOrEastOrWest: @ 8090A50
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8090A74
bl FieldObjectStep
@@ -7583,7 +2946,7 @@ FieldObjectCB_RandomlyLookSouthOrEastOrWest: @ 8090B90
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8090BB4
bl FieldObjectStep
@@ -7751,7 +3114,7 @@ FieldObjectCB_LookAroundCounterclockwise: @ 8090CD0
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8090CF4
bl FieldObjectStep
@@ -7891,7 +3254,7 @@ FieldObjectCB_LookAroundClockwise: @ 8090DD4
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8090DF8
bl FieldObjectStep
@@ -8030,7 +3393,7 @@ FieldObjectCB_AlternatelyGoInOppositeDirections: @ 8090ED8
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8090EFC
bl FieldObjectStep
@@ -8348,7 +3711,7 @@ FieldObjectCB_GoInDirectionSequence1: @ 8091138
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_809115C
bl FieldObjectStep
@@ -8421,7 +3784,7 @@ FieldObjectCB_GoInDirectionSequence2: @ 80911C4
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80911E8
bl FieldObjectStep
@@ -8494,7 +3857,7 @@ FieldObjectCB_GoInDirectionSequence3: @ 8091250
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091274
bl FieldObjectStep
@@ -8567,7 +3930,7 @@ FieldObjectCB_GoInDirectionSequence4: @ 80912DC
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091300
bl FieldObjectStep
@@ -8640,7 +4003,7 @@ FieldObjectCB_GoInDirectionSequence5: @ 8091368
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_809138C
bl FieldObjectStep
@@ -8714,7 +4077,7 @@ FieldObjectCB_GoInDirectionSequence6: @ 80913F4
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091418
bl FieldObjectStep
@@ -8787,7 +4150,7 @@ FieldObjectCB_GoInDirectionSequence7: @ 8091480
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80914A4
bl FieldObjectStep
@@ -8860,7 +4223,7 @@ FieldObjectCB_GoInDirectionSequence8: @ 809150C
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091530
bl FieldObjectStep
@@ -8933,7 +4296,7 @@ FieldObjectCB_GoInDirectionSequence9: @ 8091598
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80915BC
bl FieldObjectStep
@@ -9006,7 +4369,7 @@ FieldObjectCB_GoInDirectionSequence10: @ 8091624
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091648
bl FieldObjectStep
@@ -9079,7 +4442,7 @@ FieldObjectCB_GoInDirectionSequence11: @ 80916B0
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80916D4
bl FieldObjectStep
@@ -9152,7 +4515,7 @@ FieldObjectCB_GoInDirectionSequence12: @ 809173C
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091760
bl FieldObjectStep
@@ -9225,7 +4588,7 @@ FieldObjectCB_GoInDirectionSequence13: @ 80917C8
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80917EC
bl FieldObjectStep
@@ -9298,7 +4661,7 @@ FieldObjectCB_GoInDirectionSequence14: @ 8091854
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091878
bl FieldObjectStep
@@ -9371,7 +4734,7 @@ FieldObjectCB_GoInDirectionSequence15: @ 80918E0
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091904
bl FieldObjectStep
@@ -9444,7 +4807,7 @@ FieldObjectCB_GoInDirectionSequence16: @ 809196C
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091990
bl FieldObjectStep
@@ -9517,7 +4880,7 @@ FieldObjectCB_GoInDirectionSequence17: @ 80919F8
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091A1C
bl FieldObjectStep
@@ -9590,7 +4953,7 @@ FieldObjectCB_GoInDirectionSequence18: @ 8091A84
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091AA8
bl FieldObjectStep
@@ -9663,7 +5026,7 @@ FieldObjectCB_GoInDirectionSequence19: @ 8091B10
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091B34
bl FieldObjectStep
@@ -9736,7 +5099,7 @@ FieldObjectCB_GoInDirectionSequence20: @ 8091B9C
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091BC0
bl FieldObjectStep
@@ -9809,7 +5172,7 @@ FieldObjectCB_GoInDirectionSequence21: @ 8091C28
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091C4C
bl FieldObjectStep
@@ -9882,7 +5245,7 @@ FieldObjectCB_GoInDirectionSequence22: @ 8091CB4
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091CD8
bl FieldObjectStep
@@ -9955,7 +5318,7 @@ FieldObjectCB_GoInDirectionSequence23: @ 8091D40
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091D64
bl FieldObjectStep
@@ -10028,7 +5391,7 @@ FieldObjectCB_GoInDirectionSequence24: @ 8091DCC
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091DF0
bl FieldObjectStep
@@ -10101,7 +5464,7 @@ FieldObjectCB_CopyPlayer1: @ 8091E58
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8091E7C
bl FieldObjectStep
@@ -10155,8 +5518,8 @@ sub_8091EC0: @ 8091EC0
push {r4-r7,lr}
adds r6, r0, 0
adds r7, r1, 0
- ldr r2, =gUnknown_02037350
- ldr r3, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r3, =gPlayerAvatar
ldrb r1, [r3, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -10878,7 +6241,7 @@ FieldObjectCB_CopyPlayer2: @ 8092494
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80924B8
bl FieldObjectStep
@@ -10910,8 +6273,8 @@ mss_08062EA4: @ 80924D8
push {r4-r7,lr}
adds r6, r0, 0
adds r7, r1, 0
- ldr r2, =gUnknown_02037350
- ldr r3, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r3, =gPlayerAvatar
ldrb r1, [r3, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -10962,7 +6325,7 @@ FieldObjectCB_TreeDisguise: @ 809253C
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r1, r0
adds r6, r4, 0
adds r6, 0x21
@@ -10996,7 +6359,7 @@ _08092584:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldr r2, =sub_80925AC
adds r1, r5, 0
@@ -11025,7 +6388,7 @@ FieldObjectCB_MountainDisguise: @ 80925B8
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r1, r0
adds r6, r4, 0
adds r6, 0x21
@@ -11059,7 +6422,7 @@ _08092600:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldr r2, =sub_80925AC
adds r1, r5, 0
@@ -11077,7 +6440,7 @@ FieldObjectCB_Hidden1: @ 8092628
adds r3, r0, 0
movs r1, 0x3C
ldrsh r0, [r3, r1]
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
cmp r0, 0
bne _08092668
movs r0, 0x2E
@@ -11175,7 +6538,7 @@ FieldObjectCB_WalkInPlace1: @ 80926D4
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80926F8
bl FieldObjectStep
@@ -11234,7 +6597,7 @@ FieldObjectCB_WalkInPlace4: @ 8092744
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8092768
bl FieldObjectStep
@@ -11293,7 +6656,7 @@ FieldObjectCB_WalkInPlace2: @ 80927B4
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80927D8
bl FieldObjectStep
@@ -11353,7 +6716,7 @@ FieldObjectCB_WalkInPlace3: @ 8092824
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_8092848
bl FieldObjectStep
@@ -11412,7 +6775,7 @@ FieldObjectCB_Hidden2: @ 8092894
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =sub_80928B8
bl FieldObjectStep
@@ -12234,7 +7597,7 @@ _08092E2E:
lsls r0, r4, 3
adds r0, r4
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r2, r0, r1
ldrb r0, [r2]
lsls r0, 31
@@ -12304,7 +7667,7 @@ sub_8092E9C: @ 8092E9C
cmp r0, 0
bne _08092EE8
ldr r3, =gSprites
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
mov r0, sp
ldrb r1, [r0]
lsls r0, r1, 3
@@ -12348,7 +7711,7 @@ sub_8092EF0: @ 8092EF0
cmp r0, 0
bne _08092F2E
ldr r3, =gSprites
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
mov r0, sp
ldrb r1, [r0]
lsls r0, r1, 3
@@ -16972,7 +12335,7 @@ sub_8094F38: @ 8094F38
ldrsh r0, [r5, r1]
movs r2, 0x12
ldrsh r1, [r5, r2]
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
mov r2, sp
ldrb r2, [r2]
lsls r3, r2, 3
@@ -17018,7 +12381,7 @@ sub_8094F94: @ 8094F94
ldrsh r0, [r5, r1]
movs r2, 0x12
ldrsh r1, [r5, r2]
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
mov r2, sp
ldrb r2, [r2]
lsls r3, r2, 3
diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s
index 6947746ef..f21fdacae 100644
--- a/asm/field_player_avatar.s
+++ b/asm/field_player_avatar.s
@@ -15,7 +15,7 @@ FieldObjectCB_NoMovement2: @ 808A998
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldr r2, =FieldObjectCB2_NoMovement2
bl FieldObjectStep
@@ -43,12 +43,12 @@ player_step: @ 808A9C0
lsrs r7, r1, 16
lsls r2, 16
lsrs r6, r2, 16
- ldr r4, =gUnknown_02037590
+ ldr r4, =gPlayerAvatar
ldrb r1, [r4, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
adds r0, r5, 0
bl sub_808C280
@@ -153,7 +153,7 @@ npc_clear_strange_bits: @ 808AA9C
adds r2, 0x2
ands r1, r2
strb r1, [r0, 0x1]
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2]
movs r0, 0x7F
ands r0, r1
@@ -172,7 +172,7 @@ MovePlayerAvatarUsingKeypadInput: @ 808AAC0
lsrs r4, r1, 16
lsls r2, 16
lsrs r2, 16
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0]
movs r0, 0x6
ands r0, r1
@@ -197,7 +197,7 @@ _0808AAF0:
@ void PlayerAllowForcedMovementIfMovingSameDirection()
PlayerAllowForcedMovementIfMovingSameDirection: @ 808AAF8
push {lr}
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r0, [r2, 0x2]
cmp r0, 0x2
bne _0808AB0A
@@ -234,13 +234,13 @@ TryDoMetatileBehaviorForcedMovment: @ 808AB14
@ u8 GetForcedMovementByMetatileBehavior()
GetForcedMovementByMetatileBehavior: @ 808AB38
push {r4-r6,lr}
- ldr r3, =gUnknown_02037590
+ ldr r3, =gPlayerAvatar
ldrb r1, [r3]
movs r0, 0x20
ands r0, r1
cmp r0, 0
bne _0808AB8A
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldrb r1, [r3, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -280,7 +280,7 @@ _0808AB8C:
thumb_func_start ForcedMovement_None
ForcedMovement_None: @ 808AB94
push {r4,lr}
- ldr r4, =gUnknown_02037590
+ ldr r4, =gPlayerAvatar
ldrb r1, [r4]
movs r0, 0x40
ands r0, r1
@@ -290,7 +290,7 @@ ForcedMovement_None: @ 808AB94
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldrb r2, [r0, 0x1]
movs r1, 0x3
@@ -325,7 +325,7 @@ DoForcedMovement: @ 808ABE0
mov r9, r1
lsls r0, 24
lsrs r5, r0, 24
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
adds r0, r5, 0
bl CheckForPlayerAvatarCollision
lsls r0, 24
@@ -381,12 +381,12 @@ _0808AC48:
DoForcedMovementInCurrentDirection: @ 808AC58
push {lr}
adds r1, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r2, [r0, 0x5]
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
ldrb r2, [r0, 0x1]
movs r3, 0x4
@@ -523,12 +523,12 @@ ForcedMovement_Slide: @ 808AD60
push {r4,lr}
lsls r0, 24
lsrs r0, 24
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r3, [r2, 0x5]
lsls r2, r3, 3
adds r2, r3
lsls r2, 2
- ldr r3, =gUnknown_02037350
+ ldr r3, =gMapObjects
adds r2, r3
ldrb r3, [r2, 0x1]
movs r4, 0x4
@@ -618,12 +618,12 @@ ForcedMovement_0xBC: @ 808AE04
thumb_func_start ForcedMovement_MuddySlope
ForcedMovement_MuddySlope: @ 808AE10
push {r4,lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
ldrb r1, [r4, 0x18]
movs r0, 0xF0
@@ -691,7 +691,7 @@ CheckMovementInputNotOnBike: @ 808AE98
lsrs r4, r0, 24
cmp r4, 0
bne _0808AEB0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
strb r4, [r0, 0x2]
movs r0, 0
b _0808AED2
@@ -702,7 +702,7 @@ _0808AEB0:
lsrs r0, 24
cmp r4, r0
beq _0808AECC
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r0, [r1, 0x2]
cmp r0, 0x2
beq _0808AECC
@@ -710,7 +710,7 @@ _0808AEB0:
b _0808AED0
.pool
_0808AECC:
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0x2
_0808AED0:
strb r0, [r1, 0x2]
@@ -784,7 +784,7 @@ _0808AF3C:
bl PlayerNotOnBikeCollide
b _0808AFB6
_0808AF4E:
- ldr r4, =gUnknown_02037590
+ ldr r4, =gPlayerAvatar
ldrb r1, [r4]
movs r0, 0x8
ands r0, r1
@@ -809,7 +809,7 @@ _0808AF68:
lsls r0, 24
cmp r0, 0
beq _0808AFB0
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldrb r1, [r4, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -843,12 +843,12 @@ CheckForPlayerAvatarCollision: @ 808AFBC
adds r6, r0, 0
lsls r6, 24
lsrs r6, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
ldrh r1, [r4, 0x10]
add r0, sp, 0x4
@@ -894,12 +894,12 @@ sub_808B028: @ 808B028
adds r6, r0, 0
lsls r6, 24
lsrs r6, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
ldrh r1, [r4, 0x10]
add r0, sp, 0x4
@@ -1102,7 +1102,7 @@ sub_808B1BC: @ 808B1BC
lsrs r4, r1, 16
lsls r2, 24
lsrs r6, r2, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0]
movs r0, 0x8
ands r0, r1
@@ -1187,7 +1187,7 @@ sub_808B238: @ 808B238
lsrs r6, r0, 24
cmp r6, 0x10
beq _0808B2D8
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
lsls r1, r6, 3
adds r1, r6
lsls r1, 2
@@ -1285,12 +1285,12 @@ IsPlayerCollidingWithFarawayIslandMew: @ 808B324
sub sp, 0x4
lsls r0, 24
lsrs r0, 24
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r2, [r1, 0x5]
lsls r1, r2, 3
adds r1, r2
lsls r1, 2
- ldr r5, =gUnknown_02037350
+ ldr r5, =gMapObjects
adds r3, r1, r5
ldrh r2, [r3, 0x10]
mov r1, sp
@@ -1369,7 +1369,7 @@ SetPlayerAvatarTransitionFlags: @ 808B3CC
push {lr}
lsls r0, 16
lsrs r0, 16
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2, 0x1]
orrs r0, r1
strb r0, [r2, 0x1]
@@ -1383,7 +1383,7 @@ SetPlayerAvatarTransitionFlags: @ 808B3CC
@ void DoPlayerAvatarTransition()
DoPlayerAvatarTransition: @ 808B3E8
push {r4,r5,lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r4, [r0, 0x1]
cmp r4, 0
beq _0808B428
@@ -1396,12 +1396,12 @@ _0808B3F4:
ldr r0, =gUnknown_084974B8
lsls r2, r5, 2
adds r2, r0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldr r1, [r2]
bl _call_via_r1
@@ -1412,7 +1412,7 @@ _0808B416:
lsrs r4, 1
cmp r5, 0x7
bls _0808B3F4
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0
strb r0, [r1, 0x1]
_0808B428:
@@ -1529,7 +1529,7 @@ PlayerAvatarTransition_Surfing: @ 808B4D8
movs r2, 0x12
ldrsh r0, [r4, r2]
str r0, [r1, 0x4]
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
str r0, [r1, 0x8]
movs r0, 0x8
@@ -1574,7 +1574,7 @@ PlayerAvatarTransition_Underwater: @ 808B534
thumb_func_start PlayerAvatarTransition_ReturnToField
@ void PlayerAvatarTransition_ReturnToField(struct npc_state *fieldObject)
PlayerAvatarTransition_ReturnToField: @ 808B568
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2]
movs r0, 0x20
orrs r0, r1
@@ -1586,7 +1586,7 @@ PlayerAvatarTransition_ReturnToField: @ 808B568
thumb_func_start sub_808B578
sub_808B578: @ 808B578
push {r4,lr}
- ldr r4, =gUnknown_02037590
+ ldr r4, =gPlayerAvatar
movs r0, 0
strb r0, [r4, 0x3]
bl PlayerIsAnimActive
@@ -1621,8 +1621,8 @@ _0808B5B6:
thumb_func_start player_is_anim_in_certain_ranges
player_is_anim_in_certain_ranges: @ 808B5BC
push {lr}
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -1673,7 +1673,7 @@ sub_808B618: @ 808B618
lsls r0, 24
cmp r0, 0
beq _0808B634
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x2]
cmp r0, 0x1
beq _0808B634
@@ -1691,12 +1691,12 @@ _0808B636:
@ bool8 PlayerIsAnimActive()
PlayerIsAnimActive: @ 808B63C
push {lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
lsls r0, 24
@@ -1710,12 +1710,12 @@ PlayerIsAnimActive: @ 808B63C
@ bool8 PlayerCheckIfAnimFinishedOrInactive()
PlayerCheckIfAnimFinishedOrInactive: @ 808B660
push {lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
lsls r0, 24
@@ -1727,8 +1727,8 @@ PlayerCheckIfAnimFinishedOrInactive: @ 808B660
thumb_func_start player_set_x22
player_set_x22: @ 808B684
- ldr r3, =gUnknown_02037350
- ldr r1, =gUnknown_02037590
+ ldr r3, =gMapObjects
+ ldr r1, =gPlayerAvatar
ldrb r2, [r1, 0x5]
lsls r1, r2, 3
adds r1, r2
@@ -1742,8 +1742,8 @@ player_set_x22: @ 808B684
thumb_func_start player_get_x22
player_get_x22: @ 808B6A0
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -1761,12 +1761,12 @@ sub_808B6BC: @ 808B6BC
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r2, [r0, 0x5]
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r0, r2
bl FieldObjectForceSetSpecialAnim
pop {r0}
@@ -1788,12 +1788,12 @@ player_npc_set_state_and_x22_etc: @ 808B6E4
bne _0808B712
adds r0, r4, 0
bl player_set_x22
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
adds r1, r5, 0
bl FieldObjectSetSpecialAnim
@@ -2002,7 +2002,7 @@ PlayerJumpLedge: @ 808B840
thumb_func_start sub_808B864
sub_808B864: @ 808B864
push {r4,lr}
- ldr r4, =gUnknown_02037590
+ ldr r4, =gPlayerAvatar
ldrb r0, [r4, 0x3]
cmp r0, 0x2
beq _0808B872
@@ -2013,7 +2013,7 @@ _0808B872:
lsls r0, 24
cmp r0, 0
beq _0808B89A
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldrb r1, [r4, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -2219,8 +2219,8 @@ PlayCollisionSoundIfNotFacingWarp: @ 808B9EC
sub sp, 0x4
lsls r0, 24
lsrs r4, r0, 24
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -2275,8 +2275,8 @@ GetXYCoordsOneStepInFrontOfPlayer: @ 808BA68
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
- ldr r3, =gUnknown_02037350
- ldr r2, =gUnknown_02037590
+ ldr r3, =gMapObjects
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -2307,8 +2307,8 @@ GetXYCoordsOneStepInFrontOfPlayer: @ 808BA68
@ void PlayerGetDestCoords(u16 *x, u16 *y)
PlayerGetDestCoords: @ 808BAAC
push {r4,r5,lr}
- ldr r5, =gUnknown_02037350
- ldr r4, =gUnknown_02037590
+ ldr r5, =gMapObjects
+ ldr r4, =gPlayerAvatar
ldrb r3, [r4, 0x5]
lsls r2, r3, 3
adds r2, r3
@@ -2334,12 +2334,12 @@ plaer_get_pos_including_state_based_drift: @ 808BADC
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r3, r0, r1
ldrb r1, [r3]
movs r0, 0xC0
@@ -2465,8 +2465,8 @@ _0808BC30:
thumb_func_start player_get_direction_lower_nybble
@ u8 player_get_direction_lower_nybble()
player_get_direction_lower_nybble: @ 808BC38
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -2482,8 +2482,8 @@ player_get_direction_lower_nybble: @ 808BC38
thumb_func_start player_get_direction_upper_nybble
@ u8 player_get_direction_upper_nybble()
player_get_direction_upper_nybble: @ 808BC58
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -2498,8 +2498,8 @@ player_get_direction_upper_nybble: @ 808BC58
thumb_func_start PlayerGetZCoord
@ u8 PlayerGetZCoord()
PlayerGetZCoord: @ 808BC74
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -2516,12 +2516,12 @@ sub_808BC90: @ 808BC90
push {lr}
adds r3, r0, 0
adds r2, r1, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
lsls r3, 16
asrs r3, 16
@@ -2537,7 +2537,7 @@ sub_808BC90: @ 808BC90
thumb_func_start TestPlayerAvatarFlags
@ u32 TestPlayerAvatarFlags(u32 mask)
TestPlayerAvatarFlags: @ 808BCC0
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r1, [r1]
ands r1, r0
adds r0, r1, 0
@@ -2547,7 +2547,7 @@ TestPlayerAvatarFlags: @ 808BCC0
thumb_func_start sub_808BCD0
sub_808BCD0: @ 808BCD0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0]
bx lr
.pool
@@ -2556,7 +2556,7 @@ sub_808BCD0: @ 808BCD0
thumb_func_start GetPlayerAvatarObjectId
@ u8 GetPlayerAvatarObjectId()
GetPlayerAvatarObjectId: @ 808BCDC
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x4]
bx lr
.pool
@@ -2573,12 +2573,12 @@ sub_808BCE8: @ 808BCE8
thumb_func_start sub_808BCF4
sub_808BCF4: @ 808BCF4
push {r4,lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
adds r0, r4, 0
bl npc_clear_strange_bits
@@ -2659,7 +2659,7 @@ GetPlayerAvatarGraphicsIdByStateId: @ 808BD8C
push {lr}
lsls r0, 24
lsrs r0, 24
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r1, [r1, 0x7]
bl GetPlayerAvatarGraphicsIdByStateIdAndGender
lsls r0, 24
@@ -2804,12 +2804,12 @@ _0808BE70:
IsPlayerFacingSurfableFishableWater: @ 808BE74
push {r4,r5,lr}
sub sp, 0x4
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
ldrh r1, [r4, 0x10]
mov r0, sp
@@ -2871,7 +2871,7 @@ _0808BEF6:
@ void ClearPlayerAvatarInfo()
ClearPlayerAvatarInfo: @ 808BF00
push {lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
movs r1, 0
movs r2, 0x24
bl memset
@@ -2885,7 +2885,7 @@ ClearPlayerAvatarInfo: @ 808BF00
SetPlayerAvatarStateMask: @ 808BF14
lsls r0, 24
lsrs r0, 24
- ldr r3, =gUnknown_02037590
+ ldr r3, =gPlayerAvatar
ldrb r2, [r3]
movs r1, 0xE0
ands r1, r2
@@ -2937,7 +2937,7 @@ _0808BF64:
@ u8 GetPlayerAvatarGraphicsIdByCurrentState()
GetPlayerAvatarGraphicsIdByCurrentState: @ 808BF6C
push {r4-r6,lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r5, [r0]
movs r2, 0
ldr r3, =gUnknown_0849750C
@@ -2980,7 +2980,7 @@ SetPlayerAvatarExtraStateTransition: @ 808BFB0
lsrs r0, 24
lsls r4, 24
lsrs r4, 24
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
ldrb r1, [r5, 0x7]
bl GetPlayerAvatarStateTransitionByGraphicsId
lsls r0, 24
@@ -3060,7 +3060,7 @@ InitPlayerAvatar: @ 808BFE0
lsls r4, r5, 3
adds r4, r5
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
ldrb r0, [r4, 0x2]
movs r1, 0x1
@@ -3072,7 +3072,7 @@ InitPlayerAvatar: @ 808BFE0
mov r1, r9
bl FieldObjectTurn
bl ClearPlayerAvatarInfo
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
strb r6, [r0, 0x2]
strb r6, [r0, 0x3]
strb r5, [r0, 0x5]
@@ -3097,8 +3097,8 @@ sub_808C0A8: @ 808C0A8
push {r4-r6,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r6, =gUnknown_02037350
- ldr r5, =gUnknown_02037590
+ ldr r6, =gMapObjects
+ ldr r5, =gPlayerAvatar
ldrb r0, [r5, 0x5]
lsls r1, r0, 3
adds r1, r0
@@ -3147,12 +3147,12 @@ _0808C100:
thumb_func_start sub_808C114
sub_808C114: @ 808C114
push {r4,r5,lr}
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
ldrb r0, [r5, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
movs r0, 0x5
bl GetPlayerAvatarGraphicsIdByStateId
@@ -3181,12 +3181,12 @@ sub_808C15C: @ 808C15C
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r0, [r6, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
movs r0, 0x6
bl GetPlayerAvatarGraphicsIdByStateId
@@ -3222,12 +3222,12 @@ sub_808C1B4: @ 808C1B4
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r0, [r6, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
movs r0, 0x2
bl GetPlayerAvatarGraphicsIdByStateId
@@ -3271,12 +3271,12 @@ sub_808C228: @ 808C228
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r0, [r6, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
movs r0, 0x7
bl GetPlayerAvatarGraphicsIdByStateId
@@ -3414,7 +3414,7 @@ taskFF_bump_boulder: @ 808C34C
lsrs r0, 24
ldr r6, =gUnknown_08497530
ldr r2, =gTasks
- ldr r5, =gUnknown_02037350
+ ldr r5, =gMapObjects
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
@@ -3424,7 +3424,7 @@ _0808C360:
ldrsh r3, [r4, r0]
lsls r3, 2
adds r3, r6
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r1, r0, 3
adds r1, r0
@@ -3453,7 +3453,7 @@ sub_808C3A4: @ 808C3A4
push {r4,lr}
adds r4, r0, 0
bl ScriptContext2_Enable
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0x1
strb r0, [r1, 0x6]
ldrh r0, [r4, 0x8]
@@ -3571,7 +3571,7 @@ sub_808C484: @ 808C484
bl FieldObjectClearAnimIfSpecialAnimFinished
adds r0, r5, 0
bl FieldObjectClearAnimIfSpecialAnimFinished
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0
strb r0, [r1, 0x6]
bl ScriptContext2_Disable
@@ -3620,12 +3620,12 @@ _0808C50A:
ldrsh r2, [r4, r0]
lsls r2, 2
adds r2, r5
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r1, r0
ldr r2, [r2]
adds r0, r4, 0
@@ -3644,7 +3644,7 @@ sub_808C544: @ 808C544
push {r4-r6,lr}
adds r6, r0, 0
adds r4, r1, 0
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
movs r0, 0x1
strb r0, [r5, 0x6]
adds r0, r4, 0
@@ -3721,12 +3721,12 @@ _0808C5E2:
ldrsh r2, [r4, r0]
lsls r2, 2
adds r2, r5
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r1, r0
ldr r2, [r2]
adds r0, r4, 0
@@ -3749,7 +3749,7 @@ sub_808C61C: @ 808C61C
ldrb r1, [r1, 0x18]
lsrs r1, 4
strh r1, [r0, 0xA]
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0x1
strb r0, [r1, 0x6]
bl ScriptContext2_Enable
@@ -3873,7 +3873,7 @@ sub_808C6FC: @ 808C6FC
adds r0, r5, 0
bl FieldObjectSetSpecialAnim
bl ScriptContext2_Disable
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0
strb r0, [r1, 0x6]
ldr r0, =sub_808C5D0
@@ -3898,7 +3898,7 @@ sub_808C750: @ 808C750
bl ScriptContext2_Enable
bl sav1_reset_battle_music_maybe
bl sub_8085898
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2]
movs r0, 0xF7
ands r0, r1
@@ -3931,12 +3931,12 @@ taskFF_0805D1D4: @ 808C7A8
push {r4-r6,lr}
lsls r0, 24
lsrs r6, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
adds r0, r5, 0
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
@@ -3978,12 +3978,12 @@ sub_808C814: @ 808C814
push {r4-r6,lr}
lsls r0, 24
lsrs r5, r0, 24
- ldr r6, =gUnknown_02037590
+ ldr r6, =gPlayerAvatar
ldrb r1, [r6, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectClearAnimIfSpecialAnimFinished
@@ -4083,7 +4083,7 @@ fish0: @ 808C8F8
push {r4,lr}
adds r4, r0, 0
bl ScriptContext2_Enable
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0x1
strb r0, [r1, 0x6]
ldrh r0, [r4, 0x8]
@@ -4127,8 +4127,8 @@ fish1: @ 808C918
ldrh r1, [r6]
adds r1, r0
strh r1, [r5, 0x22]
- ldr r3, =gUnknown_02037350
- ldr r2, =gUnknown_02037590
+ ldr r3, =gMapObjects
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -4366,7 +4366,7 @@ _0808CB30:
_0808CB32:
cmp r6, 0x1
bne _0808CB5C
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x4]
lsls r4, r0, 4
adds r4, r0
@@ -4574,12 +4574,12 @@ _0808CCBC:
lsrs r6, r0, 16
cmp r6, 0
bne _0808CD50
- ldr r7, =gUnknown_02037590
+ ldr r7, =gPlayerAvatar
ldrb r0, [r7, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
mov r8, r0
add r4, r8
ldrh r1, [r5, 0x24]
@@ -4633,7 +4633,7 @@ _0808CD50:
cmp r0, 0
beq _0808CD80
_0808CD58:
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0
strb r0, [r1, 0x6]
bl ScriptContext2_Disable
@@ -4664,7 +4664,7 @@ fishB: @ 808CD94
sub sp, 0x10
adds r5, r0, 0
bl sub_808CF78
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x4]
lsls r4, r0, 4
adds r4, r0
@@ -4712,7 +4712,7 @@ fishC: @ 808CE04
sub sp, 0x10
adds r5, r0, 0
bl sub_808CF78
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x4]
lsls r4, r0, 4
adds r4, r0
@@ -4777,7 +4777,7 @@ fishE: @ 808CE8C
adds r6, r0, 0
bl sub_808CF78
ldr r7, =gSprites
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
ldrb r0, [r5, 0x4]
lsls r1, r0, 4
adds r1, r0
@@ -4792,7 +4792,7 @@ fishE: @ 808CE8C
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
mov r8, r0
add r4, r8
ldrh r1, [r6, 0x24]
@@ -4855,7 +4855,7 @@ fishF: @ 808CF2C
lsrs r1, r0, 16
cmp r1, 0
bne _0808CF68
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
strb r1, [r0, 0x6]
bl ScriptContext2_Disable
bl sub_809757C
@@ -4879,7 +4879,7 @@ _0808CF68:
thumb_func_start sub_808CF78
sub_808CF78: @ 808CF78
push {r4-r7,lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x4]
lsls r0, r1, 4
adds r0, r1
@@ -4978,13 +4978,13 @@ _0808D02A:
movs r0, 0x8
strh r0, [r4, 0x26]
_0808D03A:
- ldr r3, =gUnknown_02037590
+ ldr r3, =gPlayerAvatar
ldrb r1, [r3]
movs r0, 0x8
ands r0, r1
cmp r0, 0
beq _0808D05E
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldrb r1, [r3, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -5032,12 +5032,12 @@ sub_808D094: @ 808D094
lsls r0, 24
lsrs r0, 24
adds r2, r0, 0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
ldrb r1, [r4, 0x4]
lsls r0, r1, 4
@@ -5212,12 +5212,12 @@ sub_808D1FC: @ 808D1FC
lsls r0, 24
lsrs r0, 24
mov r8, r0
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
ldrb r1, [r4, 0x4]
lsls r0, r1, 4
diff --git a/asm/field_tasks.s b/asm/field_tasks.s
index 0abd11da4..26761b8d1 100644
--- a/asm/field_tasks.s
+++ b/asm/field_tasks.s
@@ -1858,7 +1858,7 @@ _0809E6F8:
cmp r6, 0xD
ble _0809E6F8
_0809E708:
- ldr r2, =gUnknown_02037334
+ ldr r2, =gCamera
ldrb r1, [r2]
movs r0, 0x1
ands r0, r1
diff --git a/asm/fieldmap.s b/asm/fieldmap.s
index d2416248f..dbb8a3fa3 100644
--- a/asm/fieldmap.s
+++ b/asm/fieldmap.s
@@ -1508,12 +1508,12 @@ CameraMove: @ 808887C
push {r5-r7}
mov r10, r0
mov r9, r1
- ldr r1, =gUnknown_02037334
+ ldr r1, =gCamera
ldrb r0, [r1]
movs r1, 0x2
negs r1, r1
ands r1, r0
- ldr r2, =gUnknown_02037334
+ ldr r2, =gCamera
strb r1, [r2]
mov r0, r10
mov r1, r9
@@ -1556,23 +1556,23 @@ _080888C4:
ldrb r0, [r4, 0x8]
ldrb r1, [r4, 0x9]
bl mliX_load_map
- ldr r1, =gUnknown_02037334
+ ldr r1, =gCamera
ldrb r0, [r1]
movs r1, 0x1
orrs r0, r1
- ldr r2, =gUnknown_02037334
+ ldr r2, =gCamera
strb r0, [r2]
ldr r0, =gSaveBlock1Ptr
ldr r1, [r0]
movs r2, 0
ldrsh r0, [r1, r2]
subs r5, r0
- ldr r0, =gUnknown_02037334
+ ldr r0, =gCamera
str r5, [r0, 0x4]
movs r2, 0x2
ldrsh r0, [r1, r2]
subs r6, r0
- ldr r0, =gUnknown_02037334
+ ldr r0, =gCamera
str r6, [r0, 0x8]
ldrh r0, [r1]
add r0, r10
@@ -1583,7 +1583,7 @@ _080888C4:
mov r0, r8
bl sub_80885C4
_08088932:
- ldr r0, =gUnknown_02037334
+ ldr r0, =gCamera
ldrb r0, [r0]
lsls r0, 31
lsrs r0, 31
diff --git a/asm/fldeff_80F9BCC.s b/asm/fldeff_80F9BCC.s
index dffc7c780..e332a8841 100644
--- a/asm/fldeff_80F9BCC.s
+++ b/asm/fldeff_80F9BCC.s
@@ -480,7 +480,7 @@ sub_80F9F5C: @ 80F9F5C
thumb_func_start sub_80F9F78
sub_80F9F78: @ 80F9F78
push {lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0]
movs r0, 0x6
ands r0, r1
@@ -692,7 +692,7 @@ sub_80FA13C: @ 80FA13C
bl sub_80F9F78
ldr r0, =gUnknown_0858E600
ldr r3, =gSprites
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r1, [r1, 0x4]
lsls r2, r1, 4
adds r2, r1
@@ -849,7 +849,7 @@ _080FA274:
bl sub_80F9F78
ldr r0, =gUnknown_0858E618
ldr r3, =gSprites
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r1, [r1, 0x4]
lsls r2, r1, 4
adds r2, r1
@@ -1000,7 +1000,7 @@ sub_80FA3AC: @ 80FA3AC
bl sub_80F9F78
ldr r0, =gUnknown_0858E630
ldr r3, =gSprites
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r1, [r1, 0x4]
lsls r2, r1, 4
adds r2, r1
@@ -1722,8 +1722,8 @@ _080FA9CA:
sub_80FA9D0: @ 80FA9D0
push {r4,lr}
sub sp, 0x4
- ldr r3, =gUnknown_02037350
- ldr r2, =gUnknown_02037590
+ ldr r3, =gMapObjects
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -1835,7 +1835,7 @@ _080FAABC:
_080FAAC6:
ldr r0, =gUnknown_0858E68C
ldr r3, =gSprites
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r1, [r1, 0x4]
lsls r2, r1, 4
adds r2, r1
@@ -1857,7 +1857,7 @@ _080FAAC6:
_080FAAFC:
ldr r0, =gUnknown_0858E68C
ldr r3, =gSprites
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r1, [r1, 0x4]
lsls r2, r1, 4
adds r2, r1
@@ -1876,7 +1876,7 @@ _080FAAFC:
_080FAB2C:
ldr r0, =gUnknown_0858E68C
ldr r3, =gSprites
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r1, [r1, 0x4]
lsls r2, r1, 4
adds r2, r1
@@ -1898,7 +1898,7 @@ _080FAB4C:
_080FAB64:
ldr r0, =gUnknown_0858E68C
ldr r3, =gSprites
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
ldrb r1, [r1, 0x4]
lsls r2, r1, 4
adds r2, r1
@@ -2307,12 +2307,12 @@ sub_80FAEF0: @ 80FAEF0
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
@@ -2357,12 +2357,12 @@ sub_80FAF64: @ 80FAF64
push {r4,r5,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
adds r0, r5, 0
bl FieldObjectClearAnimIfSpecialAnimFinished
diff --git a/asm/fldeff_emotion.s b/asm/fldeff_emotion.s
index 845f5618f..dce540074 100644
--- a/asm/fldeff_emotion.s
+++ b/asm/fldeff_emotion.s
@@ -167,7 +167,7 @@ _080B4756:
bl FieldEffectStop
b _080B47B2
_080B4764:
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
mov r0, sp
ldrb r1, [r0]
lsls r0, r1, 3
@@ -274,7 +274,7 @@ sub_80B4808: @ 80B4808
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldrb r0, [r0, 0x18]
lsls r0, 28
@@ -296,12 +296,12 @@ sub_80B4808: @ 80B4808
b _080B489E
.pool
_080B4870:
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldrb r0, [r0, 0x18]
lsls r0, 28
diff --git a/asm/item_use.s b/asm/item_use.s
index 733b24470..442b5681a 100644
--- a/asm/item_use.s
+++ b/asm/item_use.s
@@ -1306,7 +1306,7 @@ sub_80FDA24: @ 80FDA24
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
adds r0, r4
bl FieldObjectClearAnimIfSpecialAnimFinished
movs r0, 0xFF
@@ -1356,7 +1356,7 @@ sub_80FDA94: @ 80FDA94
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
lsls r0, 24
@@ -1395,7 +1395,7 @@ sub_80FDADC: @ 80FDADC
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
lsls r0, 24
@@ -1759,7 +1759,7 @@ sub_80FDE2C: @ 80FDE2C
lsrs r2, r0, 24
cmp r2, 0x10
beq _080FDE68
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
lsls r1, r2, 3
adds r1, r2
lsls r1, 2
diff --git a/asm/link.s b/asm/link.s
index e052aec63..76f5058eb 100644
--- a/asm/link.s
+++ b/asm/link.s
@@ -27235,7 +27235,7 @@ sub_8017940: @ 8017940
ldrsh r0, [r4, r1]
cmp r0, 0x8
bne _08017978
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x3]
cmp r0, 0x2
beq _0801796E
@@ -31141,7 +31141,7 @@ bgid_upload_textbox_1: @ 8019938
thumb_func_start is_walking_or_running
is_walking_or_running: @ 8019958
push {lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x3]
cmp r0, 0x2
beq _08019966
@@ -31367,7 +31367,7 @@ sub_8019AD8: @ 8019AD8
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
@@ -31413,7 +31413,7 @@ sub_8019B3C: @ 8019B3C
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectClearAnimIfSpecialAnimFinished
diff --git a/asm/load_save.s b/asm/load_save.s
index 08170b446..2b4be8e67 100644
--- a/asm/load_save.s
+++ b/asm/load_save.s
@@ -244,7 +244,7 @@ save_serialize_npcs: @ 8076E1C
movs r5, 0xA3
lsls r5, 4
mov r8, r5
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
movs r3, 0
movs r2, 0xF
_08076E32:
@@ -282,7 +282,7 @@ save_deserialize_npcs: @ 8076E64
movs r5, 0xA3
lsls r5, 4
mov r8, r5
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
movs r3, 0
movs r2, 0xF
_08076E7A:
diff --git a/asm/map_obj_8097404.s b/asm/map_obj_8097404.s
index 404ae3675..6bc74d0e5 100644
--- a/asm/map_obj_8097404.s
+++ b/asm/map_obj_8097404.s
@@ -87,7 +87,7 @@ _0809748E:
player_bitmagic: @ 8097494
push {r4,r5,lr}
movs r4, 0
- ldr r5, =gUnknown_02037350
+ ldr r5, =gMapObjects
_0809749A:
lsls r0, r4, 3
adds r0, r4
@@ -97,7 +97,7 @@ _0809749A:
lsls r0, 31
cmp r0, 0
beq _080974B8
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
cmp r4, r0
beq _080974B8
@@ -121,7 +121,7 @@ sub_80974D0: @ 80974D0
lsls r0, 24
lsrs r5, r0, 24
movs r4, 0
- ldr r6, =gUnknown_02037350
+ ldr r6, =gMapObjects
_080974DA:
cmp r4, r5
beq _080974FC
@@ -133,7 +133,7 @@ _080974DA:
lsls r0, 31
cmp r0, 0
beq _080974FC
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
cmp r4, r0
beq _080974FC
@@ -209,7 +209,7 @@ _0809756C:
sub_809757C: @ 809757C
push {r4,r5,lr}
movs r4, 0
- ldr r5, =gUnknown_02037350
+ ldr r5, =gMapObjects
_08097582:
lsls r0, r4, 3
adds r0, r4
@@ -1757,7 +1757,7 @@ sub_8098074: @ 8098074
lsls r1, 24
lsrs r5, r1, 24
movs r4, 0
- ldr r7, =gUnknown_02037350
+ ldr r7, =gMapObjects
_08098082:
cmp r4, r6
beq _080980A8
@@ -1771,7 +1771,7 @@ _08098082:
lsls r0, 31
cmp r0, 0
beq _080980A8
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
cmp r4, r0
beq _080980A8
diff --git a/asm/map_obj_lock.s b/asm/map_obj_lock.s
index 7547f23c0..f02f8526b 100644
--- a/asm/map_obj_lock.s
+++ b/asm/map_obj_lock.s
@@ -8,7 +8,7 @@
thumb_func_start walkrun_is_standing_still
walkrun_is_standing_still: @ 8098388
push {lr}
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x3]
cmp r0, 0x1
beq _0809839C
@@ -97,7 +97,7 @@ _0809842A:
ldrsh r0, [r5, r1]
cmp r0, 0
bne _08098452
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldr r0, =gUnknown_03005DF0
ldrb r1, [r0]
lsls r0, r1, 3
@@ -160,7 +160,7 @@ sub_80984A0: @ 80984A0
bl CreateTask
lsls r0, 24
lsrs r5, r0, 24
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldrb r1, [r4]
lsls r0, r1, 3
adds r0, r1
@@ -199,7 +199,7 @@ sub_80984F4: @ 80984F4
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectClearAnimIfSpecialAnimFinished
bl sub_80D338C
@@ -212,7 +212,7 @@ sub_80984F4: @ 80984F4
thumb_func_start sub_8098524
sub_8098524: @ 8098524
push {r4,lr}
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
ldr r0, =gUnknown_03005DF0
ldrb r1, [r0]
lsls r0, r1, 3
@@ -254,7 +254,7 @@ sub_8098574: @ 8098574
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldr r1, =gScriptFacing
ldrb r1, [r1]
@@ -272,7 +272,7 @@ sub_809859C: @ 809859C
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectClearAnimIfSpecialAnimActive
pop {r0}
@@ -307,7 +307,7 @@ _080985E8:
ldrsh r0, [r5, r1]
cmp r0, 0
bne _0809860C
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
lsls r1, r7, 3
adds r1, r7
lsls r1, 2
@@ -374,7 +374,7 @@ sub_8098630: @ 8098630
mov r1, r9
adds r6, r0, r1
strh r4, [r6, 0xC]
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
mov r8, r2
lsls r0, r4, 3
adds r0, r4
@@ -429,7 +429,7 @@ _080986E0:
lsls r0, 3
adds r5, r0, r1
strh r4, [r5, 0xC]
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
lsls r0, r4, 3
adds r0, r4
lsls r0, 2
diff --git a/asm/porthole.s b/asm/porthole.s
index 0efe88773..282f6f584 100644
--- a/asm/porthole.s
+++ b/asm/porthole.s
@@ -231,8 +231,8 @@ _080FB75E:
sub_80FB768: @ 80FB768
push {lr}
bl sub_80FB6EC
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
diff --git a/asm/rom4.s b/asm/rom4.s
index 9acdbec0a..a3125efc4 100644
--- a/asm/rom4.s
+++ b/asm/rom4.s
@@ -4395,8 +4395,8 @@ sub_8086A68: @ 8086A68
thumb_func_start sub_8086A80
sub_8086A80: @ 8086A80
push {lr}
- ldr r2, =gUnknown_02037350
- ldr r3, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r3, =gPlayerAvatar
ldrb r1, [r3, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -5480,7 +5480,7 @@ sub_80872D8: @ 80872D8
movs r0, 0x1
_080872EA:
strb r0, [r6, 0x1]
- ldr r1, =gUnknown_02032308
+ ldr r1, =gLinkPlayerMapObjects
lsls r0, r4, 2
adds r0, r1
ldrb r0, [r0, 0x3]
@@ -5977,7 +5977,7 @@ sub_80876C4: @ 80876C4
thumb_func_start strange_npc_table_clear
strange_npc_table_clear: @ 80876CC
push {lr}
- ldr r0, =gUnknown_02032308
+ ldr r0, =gLinkPlayerMapObjects
movs r1, 0
movs r2, 0x10
bl memset
@@ -6025,12 +6025,12 @@ sub_80876F0: @ 80876F0
lsls r6, 24
lsrs r6, 24
lsls r4, r7, 2
- ldr r0, =gUnknown_02032308
+ ldr r0, =gLinkPlayerMapObjects
adds r4, r0
lsls r5, r6, 3
adds r5, r6
lsls r5, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r5, r0
adds r0, r4, 0
bl sub_80876C4
@@ -6118,7 +6118,7 @@ sub_80877DC: @ 80877DC
lsls r0, 24
lsls r1, 24
lsrs r2, r1, 24
- ldr r1, =gUnknown_02032308
+ ldr r1, =gLinkPlayerMapObjects
lsrs r0, 22
adds r1, r0, r1
ldrb r0, [r1]
@@ -6128,7 +6128,7 @@ sub_80877DC: @ 80877DC
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r1, r0
strb r2, [r1, 0x19]
_080877FE:
@@ -6142,13 +6142,13 @@ sub_808780C: @ 808780C
push {r4,r5,lr}
lsls r0, 24
lsrs r0, 22
- ldr r1, =gUnknown_02032308
+ ldr r1, =gLinkPlayerMapObjects
adds r5, r0, r1
ldrb r1, [r5, 0x2]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
ldrb r0, [r4, 0x4]
cmp r0, 0x40
@@ -6176,14 +6176,14 @@ _08087838:
thumb_func_start sub_8087858
sub_8087858: @ 8087858
lsls r0, 24
- ldr r1, =gUnknown_02032308
+ ldr r1, =gLinkPlayerMapObjects
lsrs r0, 22
adds r0, r1
ldrb r1, [r0, 0x2]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldrb r0, [r0, 0x4]
bx lr
@@ -6193,14 +6193,14 @@ sub_8087858: @ 8087858
thumb_func_start sub_8087878
sub_8087878: @ 8087878
lsls r0, 24
- ldr r3, =gUnknown_02032308
+ ldr r3, =gLinkPlayerMapObjects
lsrs r0, 22
adds r0, r3
ldrb r3, [r0, 0x2]
lsls r0, r3, 3
adds r0, r3
lsls r0, 2
- ldr r3, =gUnknown_02037350
+ ldr r3, =gMapObjects
adds r0, r3
ldrh r3, [r0, 0x10]
strh r3, [r1]
@@ -6213,14 +6213,14 @@ sub_8087878: @ 8087878
thumb_func_start sub_80878A0
sub_80878A0: @ 80878A0
lsls r0, 24
- ldr r1, =gUnknown_02032308
+ ldr r1, =gLinkPlayerMapObjects
lsrs r0, 22
adds r0, r1
ldrb r1, [r0, 0x2]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldrb r0, [r0, 0x19]
bx lr
@@ -6230,14 +6230,14 @@ sub_80878A0: @ 80878A0
thumb_func_start sub_80878C0
sub_80878C0: @ 80878C0
lsls r0, 24
- ldr r1, =gUnknown_02032308
+ ldr r1, =gLinkPlayerMapObjects
lsrs r0, 22
adds r0, r1
ldrb r1, [r0, 0x2]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
ldrb r0, [r0, 0xB]
lsls r0, 28
@@ -6249,14 +6249,14 @@ sub_80878C0: @ 80878C0
thumb_func_start sub_80878E4
sub_80878E4: @ 80878E4
lsls r0, 24
- ldr r1, =gUnknown_02032308
+ ldr r1, =gLinkPlayerMapObjects
lsrs r0, 22
adds r0, r1
ldrb r1, [r0, 0x2]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
adds r0, 0x21
movs r1, 0
@@ -6271,7 +6271,7 @@ sub_80878E4: @ 80878E4
sub_808790C: @ 808790C
push {r4-r6,lr}
movs r2, 0
- ldr r5, =gUnknown_02032308
+ ldr r5, =gLinkPlayerMapObjects
lsls r0, 16
asrs r4, r0, 16
lsls r1, 16
@@ -6292,7 +6292,7 @@ _0808792E:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r1, r0, r1
movs r6, 0x10
ldrsh r0, [r1, r6]
@@ -6326,13 +6326,13 @@ sub_808796C: @ 808796C
lsrs r3, r1, 24
adds r2, r3, 0
lsrs r0, 22
- ldr r1, =gUnknown_02032308
+ ldr r1, =gLinkPlayerMapObjects
adds r5, r0, r1
ldrb r1, [r5, 0x2]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r6, r0, r1
ldrb r0, [r5]
cmp r0, 0
@@ -6584,7 +6584,7 @@ npc_080587EC: @ 8087B40
mov r12, r2
lsls r3, 16
movs r4, 0
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
mov r9, r0
lsrs r2, r3, 16
mov r10, r2
@@ -6654,13 +6654,13 @@ sub_8087BCC: @ 8087BCC
lsls r1, 24
lsrs r3, r1, 24
lsls r2, r5, 2
- ldr r0, =gUnknown_02032308
+ ldr r0, =gLinkPlayerMapObjects
adds r2, r0
ldrb r1, [r2, 0x2]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
ldrb r0, [r2]
cmp r0, 0
@@ -6742,13 +6742,13 @@ sub_8087C8C: @ 8087C8C
movs r0, 0x2E
ldrsh r4, [r5, r0]
lsls r4, 2
- ldr r0, =gUnknown_02032308
+ ldr r0, =gLinkPlayerMapObjects
adds r4, r0
ldrb r1, [r4, 0x2]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r6, r0, r1
ldrh r0, [r6, 0xC]
strh r0, [r5, 0x20]
diff --git a/asm/rom6.s b/asm/rom6.s
index 65b3d9b94..18de40366 100644
--- a/asm/rom6.s
+++ b/asm/rom6.s
@@ -23,7 +23,7 @@ npc_before_player_of_type: @ 8135424
bl GetFieldObjectIdByXYZ
lsls r0, 24
lsrs r0, 24
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
@@ -68,14 +68,14 @@ task08_080C9820: @ 813549C
lsrs r5, r0, 24
adds r6, r5, 0
bl ScriptContext2_Enable
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0x1
strb r0, [r1, 0x6]
ldrb r1, [r1, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
@@ -127,12 +127,12 @@ sub_813552C: @ 813552C
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
lsls r0, 24
@@ -191,12 +191,12 @@ _081355B0:
movs r0, 0x3
str r0, [r6, 0x8]
_081355B8:
- ldr r5, =gUnknown_02037590
+ ldr r5, =gPlayerAvatar
ldrb r0, [r5, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
bl GetPlayerAvatarGraphicsIdByCurrentState
adds r1, r0, 0
@@ -244,7 +244,7 @@ sub_813561C: @ 813561C
ldrh r0, [r0, 0x1A]
orrs r1, r0
bl _call_via_r1
- ldr r1, =gUnknown_02037590
+ ldr r1, =gPlayerAvatar
movs r0, 0
strb r0, [r1, 0x6]
adds r0, r4, 0
@@ -5673,7 +5673,7 @@ _08138454:
lsrs r2, r0, 24
cmp r2, 0x10
beq _081384E6
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
@@ -7257,7 +7257,7 @@ SpawnScriptFieldObject: @ 8139158
bl SpawnSpecialFieldObjectParametrized
lsls r0, 24
lsrs r0, 24
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
diff --git a/asm/rom_80AEFFC.s b/asm/rom_80AEFFC.s
index 566947ba3..23926a93e 100644
--- a/asm/rom_80AEFFC.s
+++ b/asm/rom_80AEFFC.s
@@ -599,7 +599,7 @@ _080AF4A4:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
movs r1, 0x8
bl FieldObjectSetSpecialAnim
@@ -630,7 +630,7 @@ _080AF4DC:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectClearAnimIfSpecialAnimFinished
movs r0, 0x3
@@ -719,7 +719,7 @@ _080AF5A2:
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
bl player_get_direction_lower_nybble
lsls r0, 24
@@ -1370,7 +1370,7 @@ _080AFB26:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
adds r0, r4
bl FieldObjectClearAnimIfSpecialAnimActive
movs r0, 0xFF
@@ -1414,7 +1414,7 @@ _080AFB6C:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectClearAnimIfSpecialAnimFinished
movs r0, 0
diff --git a/asm/rom_80C6FA0.s b/asm/rom_80C6FA0.s
index 570116cd3..4c3ada218 100644
--- a/asm/rom_80C6FA0.s
+++ b/asm/rom_80C6FA0.s
@@ -23955,7 +23955,7 @@ _080D3630:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl npc_sync_anim_pause_bits
_080D3646:
@@ -24023,7 +24023,7 @@ sub_80D36A4: @ 80D36A4
lsls r0, r2, 3
adds r0, r2
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectIsSpecialAnimActive
@@ -24601,7 +24601,7 @@ _080D3B64:
movs r6, 0
ldr r5, =gSprites
_080D3BA0:
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x4]
lsls r0, r1, 4
adds r0, r1
diff --git a/asm/rom_818CFC8.s b/asm/rom_818CFC8.s
index cd738c640..7a703aca4 100644
--- a/asm/rom_818CFC8.s
+++ b/asm/rom_818CFC8.s
@@ -1277,5 +1277,4 @@ _0818D9A2:
bx r1
.pool
thumb_func_end sub_818D97C
-
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/rom_818E9AC.s b/asm/rom_818E9AC.s
index 3fac8c672..8363e1308 100644
--- a/asm/rom_818E9AC.s
+++ b/asm/rom_818E9AC.s
@@ -14292,7 +14292,7 @@ sub_81963F0: @ 81963F0
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectClearAnimIfSpecialAnimFinished
bl sub_80D338C
@@ -49829,7 +49829,7 @@ _081A896E:
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectClearAnimIfSpecialAnimFinished
bl sub_80D338C
@@ -50127,7 +50127,7 @@ _081A8BB4:
bne _081A8BDC
b _081A8D32
_081A8BDC:
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
lsls r1, r2, 3
adds r1, r2
lsls r1, 2
@@ -51130,7 +51130,7 @@ sub_81A9424: @ 81A9424
lsls r1, 4
adds r1, r0
mov r8, r1
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldr r0, =gUnknown_03005DF0
ldrb r1, [r0]
lsls r0, r1, 3
@@ -51178,7 +51178,7 @@ _081A9488:
mov r9, r0
_081A94AE:
ldr r3, =gUnknown_08613ED8
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldr r0, =gUnknown_03005DF0
ldrb r1, [r0]
lsls r0, r1, 3
@@ -51790,7 +51790,7 @@ sub_81A9998: @ 81A9998
mov r8, r0
ldr r1, =0x0000028e
mov r12, r1
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
mov r9, r0
_081A99CC:
movs r2, 0
@@ -51931,7 +51931,7 @@ GetBattlePyramidTrainerFlag: @ 81A9AC4
ldr r1, =0x00000e2a
adds r2, r1
ldr r4, =gBitTable
- ldr r3, =gUnknown_02037350
+ ldr r3, =gMapObjects
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
@@ -51985,7 +51985,7 @@ sub_81A9B44: @ 81A9B44
lsls r0, 16
lsrs r5, r0, 16
movs r3, 0
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
mov r12, r0
ldr r6, =gUnknown_03005DF0
ldr r1, =gSaveBlock1Ptr
diff --git a/asm/rom_81BE66C.s b/asm/rom_81BE66C.s
index 119556f70..46d95ac40 100644
--- a/asm/rom_81BE66C.s
+++ b/asm/rom_81BE66C.s
@@ -225,7 +225,7 @@ sub_81BE808: @ 81BE808
lsls r2, r0, 3
adds r2, r0
lsls r2, 2
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
adds r2, r4
ldr r3, =gSprites
ldrb r1, [r2, 0x4]
@@ -236,7 +236,7 @@ sub_81BE808: @ 81BE808
ldrh r1, [r0, 0x26]
adds r1, 0x4
strh r1, [r0, 0x26]
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r1, r0, 3
adds r1, r0
@@ -42692,10 +42692,10 @@ sub_81D427C: @ 81D427C
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
adds r5, r1, r2
ldr r4, =gUnknown_030012F8
- ldr r3, =gUnknown_02037590
+ ldr r3, =gPlayerAvatar
ldrb r1, [r3, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -42730,8 +42730,8 @@ _081D42CA:
mov r8, r0
cmp r0, 0x3
bls _081D42CA
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -42786,10 +42786,10 @@ _081D4356:
_081D4360:
movs r4, 0
mov r8, r4
- ldr r6, =gUnknown_02037350
+ ldr r6, =gMapObjects
mov r10, r6
_081D4368:
- ldr r3, =gUnknown_02037590
+ ldr r3, =gPlayerAvatar
ldrb r1, [r3, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -42804,7 +42804,7 @@ _081D4368:
ldrsh r2, [r4, r6]
movs r6, 0
ldrsh r0, [r0, r6]
- ldr r6, =gUnknown_02037350
+ ldr r6, =gMapObjects
mov r9, r6
mov r12, r3
adds r7, r1, 0
@@ -42896,7 +42896,7 @@ _081D4410:
beq _081D4446
b _081D45AA
_081D4446:
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -42938,7 +42938,7 @@ _081D4488:
cmp r0, 0
bne _081D4538
_081D449E:
- ldr r2, =gUnknown_02037590
+ ldr r2, =gPlayerAvatar
ldrb r1, [r2, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -42952,7 +42952,7 @@ _081D449E:
ldrsh r1, [r4, r3]
movs r3, 0
ldrsh r0, [r0, r3]
- ldr r3, =gUnknown_02037350
+ ldr r3, =gMapObjects
mov r9, r3
mov r12, r2
cmp r1, r0
@@ -43042,7 +43042,7 @@ _081D4540:
beq _081D4576
b _081D447C
_081D4576:
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -43210,8 +43210,8 @@ _081D46D0:
ldrsh r0, [r0, r3]
cmp r0, 0
bne _081D476E
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -43235,8 +43235,8 @@ _081D46D0:
beq _081D470C
b _081D447C
_081D470C:
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -43289,8 +43289,8 @@ _081D476E:
ldrsh r0, [r0, r2]
cmp r0, 0
bne _081D480C
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -43314,8 +43314,8 @@ _081D476E:
beq _081D47AA
b _081D45AA
_081D47AA:
- ldr r2, =gUnknown_02037350
- ldr r0, =gUnknown_02037590
+ ldr r2, =gMapObjects
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
@@ -43385,8 +43385,8 @@ sub_81D4834: @ 81D4834
lsls r0, 16
lsls r1, 16
lsrs r4, r1, 16
- ldr r3, =gUnknown_02037350
- ldr r1, =gUnknown_02037590
+ ldr r3, =gMapObjects
+ ldr r1, =gPlayerAvatar
ldrb r2, [r1, 0x5]
lsls r1, r2, 3
adds r1, r2
@@ -43436,7 +43436,7 @@ sub_81D4890: @ 81D4890
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r1, r0
movs r1, 0
ldr r3, =gUnknown_030012FC
@@ -43684,7 +43684,7 @@ sub_81D4A90: @ 81D4A90
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r5, r1, r0
ldrb r1, [r5, 0x1]
movs r0, 0x21
@@ -46426,7 +46426,7 @@ GetTrainerHillTrainerFlag: @ 81D619C
bl sub_81D5520
lsls r0, 24
lsrs r0, 23
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
lsls r1, r4, 3
adds r1, r4
lsls r1, 2
@@ -56756,4 +56756,4 @@ _081DB66C:
.align 2, 0 @ Don't pad with nop.
- \ No newline at end of file
+
diff --git a/asm/scrcmd.s b/asm/scrcmd.s
index 2cef4b0b0..ccfa0074a 100644
--- a/asm/scrcmd.s
+++ b/asm/scrcmd.s
@@ -2987,7 +2987,7 @@ sA9_unknown: @ 809A974
thumb_func_start s5A_face_player
s5A_face_player: @ 809A9A4
push {r4,lr}
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldr r0, =gUnknown_03005DF0
ldrb r1, [r0]
lsls r0, r1, 3
@@ -3163,7 +3163,7 @@ sub_809AAEC: @ 809AAEC
movs r0, 0
b _0809AB3A
_0809AAFC:
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldr r0, =gUnknown_03005DF0
ldrb r1, [r0]
lsls r0, r1, 3
@@ -3208,7 +3208,7 @@ s6B_release: @ 809AB44
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl FieldObjectClearAnimIfSpecialAnimFinished
bl sub_80D338C
@@ -3223,7 +3223,7 @@ s6B_release: @ 809AB44
s6C_release_2: @ 809AB7C
push {r4,lr}
bl textbox_close
- ldr r4, =gUnknown_02037350
+ ldr r4, =gMapObjects
ldr r0, =gUnknown_03005DF0
ldrb r1, [r0]
lsls r0, r1, 3
@@ -5397,7 +5397,7 @@ sub_809BBFC: @ 809BBFC
movs r0, 0
b _0809BC30
_0809BC0C:
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
ldr r0, =gUnknown_03005DF0
ldrb r1, [r0]
lsls r0, r1, 3
diff --git a/asm/script_pokemon_util_80F87D8.s b/asm/script_pokemon_util_80F87D8.s
index c0bcb5a6e..e5193c4d2 100644
--- a/asm/script_pokemon_util_80F87D8.s
+++ b/asm/script_pokemon_util_80F87D8.s
@@ -508,7 +508,7 @@ _080F8BBA:
bl GetFieldObjectIdByLocalIdAndMap
lsls r0, 24
lsrs r0, 24
- ldr r2, =gUnknown_02037350
+ ldr r2, =gMapObjects
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
diff --git a/asm/secret_base.s b/asm/secret_base.s
index 286033edd..77e71580a 100644
--- a/asm/secret_base.s
+++ b/asm/secret_base.s
@@ -751,12 +751,12 @@ sub_80E90C8: @ 80E90C8
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
movs r1, 0x2
bl FieldObjectTurn
diff --git a/asm/shop.s b/asm/shop.s
index e5be4cd20..268f5911a 100644
--- a/asm/shop.s
+++ b/asm/shop.s
@@ -1633,7 +1633,7 @@ _080E07AA:
lsrs r0, 24
mov r1, r12
strh r0, [r1]
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
lsls r0, r6, 3
adds r0, r6
lsls r0, 2
@@ -1730,7 +1730,7 @@ BuyMenuDrawFieldObjects: @ 80E08F0
movs r7, 0
ldr r0, =gUnknown_02039F70
mov r8, r0
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
mov r10, r1
ldr r2, =gSprites
mov r9, r2
diff --git a/asm/trainer_see.s b/asm/trainer_see.s
index cd9715a5c..ac2528cd8 100644
--- a/asm/trainer_see.s
+++ b/asm/trainer_see.s
@@ -15,7 +15,7 @@ CheckForTrainersWantingBattle: @ 80B3BE8
ldr r0, =gUnknown_02038BFC
strb r1, [r0]
movs r4, 0
- ldr r6, =gUnknown_02037350
+ ldr r6, =gMapObjects
_080B3BF8:
lsls r0, r4, 3
adds r0, r4
@@ -180,7 +180,7 @@ _080B3D56:
lsls r4, r5, 3
adds r0, r4, r5
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
bl CheckIfTrainerCanApproachPlayer
lsls r0, 24
@@ -227,7 +227,7 @@ _080B3D8A:
mov r1, r8
adds r0, r1, r5
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r0, r1
subs r1, r6, 0x1
lsls r1, 24
@@ -691,7 +691,7 @@ c3_8081EDC: @ 80B4118
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r5, r0, r1
ldrb r0, [r5]
lsls r0, 31
@@ -882,12 +882,12 @@ _080B427A:
bl sub_808F23C
adds r0, r5, 0
bl sub_808F208
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
@@ -901,12 +901,12 @@ _080B427A:
beq _080B4308
_080B42D2:
bl sub_808BCE8
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r0, [r0, 0x5]
lsls r4, r0, 3
adds r4, r0
lsls r4, 2
- ldr r0, =gUnknown_02037350
+ ldr r0, =gMapObjects
adds r4, r0
ldrb r0, [r5, 0x18]
lsls r0, 28
@@ -936,12 +936,12 @@ sub_80B4318: @ 80B4318
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
- ldr r0, =gUnknown_02037590
+ ldr r0, =gPlayerAvatar
ldrb r1, [r0, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
- ldr r1, =gUnknown_02037350
+ ldr r1, =gMapObjects
adds r4, r0, r1
adds r0, r4, 0
bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
diff --git a/data/data3.s b/data/data3.s
index ee981ac4f..aa51f1d5f 100644
--- a/data/data3.s
+++ b/data/data3.s
@@ -632,6 +632,8 @@ gUnknown_084975B0:: @ 84975B0
gUnknown_084975BC:: @ 84975BC
.incbin "baserom.gba", 0x4975bc, 0x8
+// data/field_map_obj.s
+
gUnknown_084975C4:: @ 84975C4
.incbin "baserom.gba", 0x4975c4, 0x10
@@ -651,8 +653,9 @@ gUnknown_0850557C:: @ 850557C
.incbin "baserom.gba", 0x50557c, 0x51
gUnknown_085055CD:: @ 85055CD
- .incbin "baserom.gba", 0x5055cd, 0x53
+ .incbin "baserom.gba", 0x5055cd, 0x51
+ .align 2, 0
@ 8505620
.include "data/graphics/field_objects/field_object_graphics_info_pointers.inc"
@@ -1126,6 +1129,8 @@ gUnknown_0850DFBC:: @ 850DFBC
gUnknown_0850DFC2:: @ 850DFC2
.incbin "baserom.gba", 0x50dfc2, 0x61a
+// end data/field_map_obj.s
+
gUnknown_0850E5DC:: @ 850E5DC
.incbin "baserom.gba", 0x50e5dc, 0x8
diff --git a/include/berry.h b/include/berry.h
index f0acbe0ad..e9f0f8de9 100644
--- a/include/berry.h
+++ b/include/berry.h
@@ -11,6 +11,12 @@ enum
BERRY_FIRMNESS_SUPER_HARD,
};
+#define NUM_BERRIES 44
+
+extern const u8 *const gBerryTreeFieldObjectGraphicsIdTablePointers[NUM_BERRIES];
+extern const struct SpriteFrameImage *const gBerryTreePicTablePointers[NUM_BERRIES];
+extern const u8 *const gBerryTreePaletteSlotTablePointers[NUM_BERRIES];
+
void ClearEnigmaBerries(void);
void SetEnigmaBerry(u8 *src);
u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry);
diff --git a/include/data3.h b/include/data3.h
new file mode 100755
index 000000000..35dba5942
--- /dev/null
+++ b/include/data3.h
@@ -0,0 +1,23 @@
+//
+// Created by Scott Norton on 9/8/17.
+//
+
+#ifndef POKEEMERALD_DATA3_H
+#define POKEEMERALD_DATA3_H
+
+struct PairedPalettes {
+ u16 tag;
+ const u16 *data;
+};
+
+extern u8 gUnknown_084975C4[0x10];
+extern const struct SpriteTemplate gUnknown_084975D4;
+extern void (*const gUnknown_084975EC[3])(struct Sprite *);
+extern const struct SpritePalette gUnknown_0850BBC8[];
+extern const struct PairedPalettes gUnknown_0850BD00[15];
+extern const struct PairedPalettes gUnknown_0850BD78[15];
+extern const u16 *const gUnknown_0850BE38[2];
+extern const s16 gUnknown_0850D6DC[4];
+extern const u8 gUnknown_0850D710[4];
+
+#endif //POKEEMERALD_DATA3_H
diff --git a/include/event_scripts.h b/include/event_scripts.h
new file mode 100755
index 000000000..967bc196a
--- /dev/null
+++ b/include/event_scripts.h
@@ -0,0 +1,11 @@
+//
+// Created by scott on 9/12/2017.
+//
+
+#ifndef POKEEMERALD_EVENT_SCRIPTS_H
+#define POKEEMERALD_EVENT_SCRIPTS_H
+
+extern const u8 gUnknown_082766A2[];
+extern const u8 gUnknown_082766A6[];
+
+#endif //POKEEMERALD_EVENT_SCRIPTS_H
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
new file mode 100644
index 000000000..673d59139
--- /dev/null
+++ b/include/field_effect_helpers.h
@@ -0,0 +1,15 @@
+//
+// Created by scott on 9/7/2017.
+//
+
+#ifndef POKEEMERALD_FIELD_EFFECT_HELPERS_H
+#define POKEEMERALD_FIELD_EFFECT_HELPERS_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+u8 sub_8154228(void);
+
+#endif //POKEEMERALD_FIELD_EFFECT_HELPERS_H
diff --git a/include/field_ground_effect.h b/include/field_ground_effect.h
new file mode 100644
index 000000000..0c90f50dc
--- /dev/null
+++ b/include/field_ground_effect.h
@@ -0,0 +1,16 @@
+//
+// Created by scott on 9/6/2017.
+//
+
+#ifndef POKEEMERALD_FIELD_GROUND_EFFECT_H
+#define POKEEMERALD_FIELD_GROUND_EFFECT_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8);
+void InitObjectPriorityByZCoord(struct Sprite *, u8);
+
+#endif //POKEEMERALD_FIELD_GROUND_EFFECT_H
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
new file mode 100755
index 000000000..f91b8f9e3
--- /dev/null
+++ b/include/field_map_obj.h
@@ -0,0 +1,56 @@
+#ifndef POKEEMERALD_FIELD_MAP_OBJ_H
+#define POKEEMERALD_FIELD_MAP_OBJ_H
+
+#define NUM_OBJECT_GRAPHICS_INFO 239
+#define SPRITE_VAR 240
+
+// Exported struct declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+void sub_808D438(void);
+u8 GetFieldObjectIdByLocalIdAndMap(u8, u8, u8);
+bool8 TryGetFieldObjectIdByLocalIdAndMap(u8, u8, u8, u8 *);
+u8 GetFieldObjectIdByXY(s16, s16);
+void FieldObjectSetDirection(struct MapObject *, u8);
+u8 sub_808D4F4(void);
+void RemoveFieldObjectByLocalIdAndMap(u8, u8, u8);
+void npc_load_two_palettes__no_record(u16, u8);
+void npc_load_two_palettes__and_record(u16, u8);
+void pal_patch_for_npc(u16, u8);
+void sub_808E16C(s16, s16);
+void sub_8092FF0(s16, s16, s16 *, s16 *);
+u8 FieldObjectDirectionToImageAnimId(u8);
+void sub_80930E0(s16 *, s16 *, u8, u8);
+void FieldObjectClearAnim(struct MapObject *);
+void SpawnFieldObjectsInView(s16, s16);
+u8 sprite_new(u8, u8, s16, s16, u8, u8);
+u8 AddPseudoFieldObject(u16, void (*)(struct Sprite *), s16, s16, u8);
+u8 show_sprite(u8, u8, u8);
+u8 SpawnSpecialFieldObjectParametrized(u8, u8, u8, s16, s16, u8);
+u8 SpawnSpecialFieldObject(struct MapObjectTemplate *);
+void sub_8093038(s16, s16, s16 *, s16 *);
+void CameraObjectReset1(void);
+void FieldObjectSetGraphicsId(struct MapObject *, u8);
+void FieldObjectTurn(struct MapObject *, u8);
+void FieldObjectTurnByLocalIdAndMap(u8, u8, u8, u8);
+const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8);
+void npc_by_local_id_and_map_set_field_1_bit_x20(u8, u8, u8, u8);
+void gpu_pal_allocator_reset__manage_upper_four(void);
+void sub_808E82C(u8, u8, u8, s16, s16);
+void sub_808E7E4(u8, u8, u8);
+void sub_808E78C(u8, u8, u8, u8);
+void sub_808E75C(s16, s16);
+void FieldObjectGetLocalIdAndMap(struct MapObject *, u8 *, u8 *, u8 *);
+void npc_coords_shift(struct MapObject *, s16, s16);
+void sub_808EB08(struct MapObject *, s16, s16);
+void sub_808F254(u8, u8, u8);
+void FieldObjectStep(struct MapObject *, struct Sprite *, bool8(struct MapObject *, struct Sprite *));
+
+// Exported data declarations
+
+extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
+
+#endif //POKEEMERALD_FIELD_MAP_OBJ_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
new file mode 100644
index 000000000..3a74b3b10
--- /dev/null
+++ b/include/field_player_avatar.h
@@ -0,0 +1,14 @@
+//
+// Created by Scott Norton on 9/6/17.
+//
+
+#ifndef POKEEMERALD_FIELD_PLAYER_AVATAR_H
+#define POKEEMERALD_FIELD_PLAYER_AVATAR_H
+
+void ClearPlayerAvatarInfo(void);
+void SetPlayerAvatarExtraStateTransition(u8, u8);
+u8 GetPlayerAvatarGenderByGraphicsId(u8);
+bool8 TestPlayerAvatarFlags(u8);
+void PlayerGetDestCoords(s16 *, s16 *);
+
+#endif //POKEEMERALD_FIELD_PLAYER_AVATAR_H
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 4029132e8..f8955b9fd 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -1,6 +1,8 @@
#ifndef GUARD_GLOBAL_FIELDMAP_H
#define GUARD_GLOBAL_FIELDMAP_H
+#define NUM_FIELD_OBJECTS 16
+
enum
{
CONNECTION_SOUTH = 1,
@@ -84,7 +86,7 @@ struct MapObjectTemplate
///*0x0B*/ u8 fillerB[1];
/*0x0C*/ u16 unkC;
/*0x0E*/ u16 unkE;
- /*0x10*/ u8 *script;
+ /*0x10*/ const u8 *script;
/*0x14*/ u16 flagId;
/*0x16*/ u8 filler_16[2];
}; /*size = 0x18*/
@@ -224,7 +226,8 @@ struct MapObject
/*0x14*/ struct Coords16 coords3;
/*0x18*/ u8 mapobj_unk_18:4; //current direction?
/*0x18*/ u8 placeholder18:4;
- /*0x19*/ u8 mapobj_unk_19;
+ /*0x19*/ u8 mapobj_unk_19:4;
+ /*0x19*/ u8 mapobj_unk_19b:4;
/*0x1A*/ u8 mapobj_unk_1A;
/*0x1B*/ u8 mapobj_unk_1B;
/*0x1C*/ u8 mapobj_unk_1C;
@@ -376,14 +379,15 @@ struct PlayerAvatar /* 0x202E858 */
struct Camera
{
- bool8 field_0:1;
+ bool8 active:1;
s32 x;
s32 y;
};
-extern struct MapObject gMapObjects[];
+extern struct MapObject gMapObjects[NUM_FIELD_OBJECTS];
extern u8 gSelectedMapObject;
extern struct MapHeader gMapHeader;
extern struct PlayerAvatar gPlayerAvatar;
+extern struct Camera gCamera;
#endif // GUARD_GLOBAL_FIELDMAP_H
diff --git a/include/global.h b/include/global.h
index 32c13d86c..5e39e7ce8 100644
--- a/include/global.h
+++ b/include/global.h
@@ -9,6 +9,12 @@
// to help in decompiling
#define asm_comment(x) asm volatile("@ -- " x " -- ")
+#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided")
+
+#if defined (__APPLE__) || defined (__CYGWIN__)
+void memset(void *, int, size_t);
+void memcpy(void *, const void *, size_t);
+#endif // __APPLE__
#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0]))
@@ -748,4 +754,6 @@ struct Bitmap // TODO: Find a better spot for this
u32 height:16;
};
+extern u8 gReservedSpritePaletteCount;
+
#endif // GUARD_GLOBAL_H
diff --git a/include/malloc.h b/include/malloc.h
index bd870ede3..b3216b05c 100644
--- a/include/malloc.h
+++ b/include/malloc.h
@@ -1,6 +1,10 @@
#ifndef GUARD_MALLOC_H
#define GUARD_MALLOC_H
+#define malloc Alloc
+#define calloc AllocZeroed
+#define free Free
+
void *Alloc(u32 size);
void *AllocZeroed(u32 size);
void Free(void *pointer);
diff --git a/include/map_obj_8097404.h b/include/map_obj_8097404.h
new file mode 100644
index 000000000..6296febe4
--- /dev/null
+++ b/include/map_obj_8097404.h
@@ -0,0 +1,15 @@
+//
+// Created by scott on 9/7/2017.
+//
+
+#ifndef POKEEMERALD_MAP_OBJ_8097404_H
+#define POKEEMERALD_MAP_OBJ_8097404_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void sub_8097AC8(struct Sprite *);
+
+#endif //POKEEMERALD_MAP_OBJ_8097404_H
diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h
index d0526db88..aefc76083 100644
--- a/include/mauville_old_man.h
+++ b/include/mauville_old_man.h
@@ -1,6 +1,8 @@
+
#ifndef GUARD_MAUVILLE_OLD_MAN_H
#define GUARD_MAUVILLE_OLD_MAN_H
void SetMauvilleOldMan(void);
+u8 sub_81201C8(void);
#endif // GUARD_MAUVILLE_OLD_MAN_H
diff --git a/include/rom4.h b/include/rom4.h
new file mode 100644
index 000000000..0c7b87353
--- /dev/null
+++ b/include/rom4.h
@@ -0,0 +1,30 @@
+
+#ifndef POKEEMERALD_ROM4_H
+#define POKEEMERALD_ROM4_H
+
+struct UnkPlayerStruct
+{
+ u8 player_field_0;
+ u8 player_field_1;
+};
+
+struct LinkPlayerMapObject
+{
+ u8 active;
+ u8 linkPlayerId;
+ u8 mapObjId;
+ u8 mode;
+};
+
+struct UCoords32
+{
+ u32 x, y;
+};
+
+
+extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4];
+
+void strange_npc_table_clear(void);
+const struct MapHeader *get_mapheader_by_bank_and_number(u8, u8);
+
+#endif //POKEEMERALD_ROM4_H
diff --git a/include/rom_818CFC8.h b/include/rom_818CFC8.h
new file mode 100644
index 000000000..9b6f96893
--- /dev/null
+++ b/include/rom_818CFC8.h
@@ -0,0 +1,11 @@
+//
+// Created by Scott Norton on 9/6/17.
+//
+
+#ifndef POKEEMERALD_ROM_818CFC8_H
+#define POKEEMERALD_ROM_818CFC8_H
+
+bool8 InBattlePyramid(void);
+u8 sub_81AAA40(void);
+
+#endif //POKEEMERALD_ROM_818CFC8_H
diff --git a/include/rom_81BE66C.h b/include/rom_81BE66C.h
new file mode 100644
index 000000000..d92c500d6
--- /dev/null
+++ b/include/rom_81BE66C.h
@@ -0,0 +1,10 @@
+//
+// Created by Scott Norton on 9/6/17.
+//
+
+#ifndef POKEEMERALD_ROM_81BE66C_H
+#define POKEEMERALD_ROM_81BE66C_H
+
+bool32 InTrainerHill(void);
+
+#endif //POKEEMERALD_ROM_81BE66C_H
diff --git a/ld_script.txt b/ld_script.txt
index 4a5bb643a..702c51ec2 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -93,6 +93,7 @@ SECTIONS {
asm/field_camera.o(.text);
asm/field_door.o(.text);
asm/field_player_avatar.o(.text);
+ src/field_map_obj.o(.text);
asm/field_map_obj.o(.text);
asm/field_ground_effect.o(.text);
asm/map_obj_8097404.o(.text);
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
new file mode 100755
index 000000000..fd3cc7967
--- /dev/null
+++ b/src/field_map_obj.c
@@ -0,0 +1,1857 @@
+// Includes
+
+#include "global.h"
+#include "malloc.h"
+#include "sprite.h"
+#include "rom4.h"
+#include "rng.h"
+#include "data3.h"
+#include "event_scripts.h"
+#include "berry.h"
+#include "palette.h"
+#include "field_player_avatar.h"
+#include "event_data.h"
+#include "rom_818CFC8.h"
+#include "rom_81BE66C.h"
+#include "field_ground_effect.h"
+#include "map_obj_8097404.h"
+#include "mauville_old_man.h"
+#include "field_effect_helpers.h"
+#include "field_map_obj.h"
+
+#define NUM_FIELD_MAP_OBJECT_TEMPLATES 0x51
+
+#define null_object_step(name, retval) \
+static bool8 FieldObjectCB2_##name(struct MapObject *, struct Sprite *);\
+void FieldObjectCB_##name(struct Sprite *sprite)\
+{\
+ FieldObjectStep(&gMapObjects[sprite->data0], sprite, FieldObjectCB2_##name);\
+}\
+static bool8 FieldObjectCB2_##name(struct MapObject *mapObject, struct Sprite *sprite)\
+{\
+ return (retval);\
+}
+
+#define field_object_step(name, table) \
+extern bool8 (*const (table)[])(struct MapObject *, struct Sprite *);\
+static bool8 FieldObjectCB2_##name(struct MapObject *, struct Sprite *);\
+void FieldObjectCB_##name(struct Sprite *sprite)\
+{\
+ FieldObjectStep(&gMapObjects[sprite->data0], sprite, FieldObjectCB2_##name);\
+}\
+static bool8 FieldObjectCB2_##name(struct MapObject *mapObject, struct Sprite *sprite)\
+{\
+ return (table)[sprite->data1](mapObject, sprite);\
+}
+
+// Static struct declarations
+
+// Static RAM declarations
+
+extern u8 gUnknown_020375B4;
+extern u16 gUnknown_020375B6;
+
+// Static ROM declarations
+
+static void sub_808D450(void);
+static u8 GetFieldObjectIdByLocalId(u8);
+static u8 GetFieldObjectIdByLocalIdAndMapInternal(u8, u8, u8);
+static bool8 GetAvailableFieldObjectSlot(u16, u8, u8, u8 *);
+static void FieldObjectHandleDynamicGraphicsId(struct MapObject *);
+static void RemoveFieldObjectInternal (struct MapObject *);
+/*static*/ u16 GetFieldObjectFlagIdByFieldObjectId(u8);
+void sub_8096518(struct MapObject *, struct Sprite *);
+static void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *, struct SpriteTemplate *, const struct SubspriteTable **);
+/*static*/ void GetFieldObjectMovingCameraOffset(s16 *, s16 *);
+/*static*/ struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8, u8, u8);
+static void sub_808E894(u16);
+static void RemoveFieldObjectIfOutsideView(struct MapObject *);
+static void sub_808E1B8(u8, s16, s16);
+static void SetPlayerAvatarFieldObjectIdAndObjectId(u8, u8);
+/*static*/ void sub_808E38C(struct MapObject *);
+static u8 sub_808E8F4(const struct SpritePalette *);
+static u8 FindFieldObjectPaletteIndexByTag(u16);
+static void sub_808EAB0(u16, u8);
+static bool8 FieldObjectDoesZCoordMatch(struct MapObject *, u8);
+//static void CameraObject_0(struct Sprite *);
+/*static*/ void CameraObject_1(struct Sprite *);
+//static void CameraObject_2(struct Sprite *);
+/*static*/ struct MapObjectTemplate *FindFieldObjectTemplateInArrayByLocalId(u8 localId, struct MapObjectTemplate *templates, u8 count);
+void npc_reset(struct MapObject *, struct Sprite *);
+void FieldObjectSetRegularAnim(struct MapObject *, struct Sprite *, u8);
+u8 GetFaceDirectionAnimId(u8);
+bool8 FieldObjectExecRegularAnim(struct MapObject *, struct Sprite *);
+void sub_8097978(struct Sprite *, s16);
+bool8 sub_809797C(struct Sprite *);
+bool8 sub_8092B88(struct MapObject *, u8);
+u8 GetGoSpeed0AnimId(u8);
+
+// ROM data
+
+void (*const gUnknown_08505438[NUM_FIELD_MAP_OBJECT_TEMPLATES])(struct Sprite *);
+const u8 gUnknown_0850557C[NUM_FIELD_MAP_OBJECT_TEMPLATES];
+const u8 gUnknown_085055CD[NUM_FIELD_MAP_OBJECT_TEMPLATES];
+const struct MapObjectGraphicsInfo *const gMauvilleOldManGraphicsInfoPointers[7];
+const struct MapObjectGraphicsInfo *const gFieldObjectGraphicsInfoPointers[0xEF];
+
+// Code
+
+static void npc_clear_ids_and_state(struct MapObject *mapObject)
+{
+ *mapObject = (struct MapObject){};
+ mapObject->localId = 0xFF;
+ mapObject->mapNum = -1;
+ mapObject->mapGroup = -1;
+ mapObject->mapobj_unk_1C = -1;
+}
+
+static void npcs_clear_ids_and_state(void)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
+ {
+ npc_clear_ids_and_state(&gMapObjects[i]);
+ }
+}
+
+void sub_808D438(void)
+{
+ strange_npc_table_clear();
+ npcs_clear_ids_and_state();
+ ClearPlayerAvatarInfo();
+ sub_808D450();
+}
+
+static void sub_808D450(void)
+{
+ u8 spriteIdx;
+
+ spriteIdx = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 31);
+ gSprites[spriteIdx].oam.affineMode = 1;
+ InitSpriteAffineAnim(&gSprites[spriteIdx]);
+ StartSpriteAffineAnim(&gSprites[spriteIdx], 0);
+ gSprites[spriteIdx].invisible = TRUE;
+
+ spriteIdx = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 31);
+ gSprites[spriteIdx].oam.affineMode = 1;
+ InitSpriteAffineAnim(&gSprites[spriteIdx]);
+ StartSpriteAffineAnim(&gSprites[spriteIdx], 1);
+ gSprites[spriteIdx].invisible = TRUE;
+}
+
+u8 sub_808D4F4(void)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
+ {
+ if (!gMapObjects[i].active)
+ {
+ break;
+ }
+ }
+ return i;
+}
+
+u8 GetFieldObjectIdByLocalIdAndMap(u8 localId, u8 mapId, u8 mapGroupId)
+{
+ if (localId < 0xff)
+ {
+ return GetFieldObjectIdByLocalIdAndMapInternal(localId, mapId, mapGroupId);
+ }
+ return GetFieldObjectIdByLocalId(localId);
+}
+
+bool8 TryGetFieldObjectIdByLocalIdAndMap(u8 localId, u8 mapId, u8 mapGroupId, u8 *fieldObjectId)
+{
+ *fieldObjectId = GetFieldObjectIdByLocalIdAndMap(localId, mapId, mapGroupId);
+ if (*fieldObjectId == NUM_FIELD_OBJECTS)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+u8 GetFieldObjectIdByXY(s16 x, s16 y)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
+ {
+ if (gMapObjects[i].active && gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y)
+ {
+ break;
+ }
+ }
+ return i;
+}
+
+static u8 GetFieldObjectIdByLocalIdAndMapInternal(u8 localId, u8 mapId, u8 mapGroupId)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
+ {
+ if (gMapObjects[i].active && gMapObjects[i].localId == localId && gMapObjects[i].mapNum == mapId && gMapObjects[i].mapGroup == mapGroupId)
+ {
+ return i;
+ }
+ }
+ return NUM_FIELD_OBJECTS;
+}
+
+static u8 GetFieldObjectIdByLocalId(u8 localId)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
+ {
+ if (gMapObjects[i].active && gMapObjects[i].localId == localId)
+ {
+ return i;
+ }
+ }
+ return NUM_FIELD_OBJECTS;
+}
+
+// This function has the same nonmatching quirk as in Ruby/Sapphire.
+#ifdef NONMATCHING
+static u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 mapId, u8 mapGroupId)
+{
+ u8 slot;
+ struct MapObject *mapObject;
+ u16 x;
+ u16 y;
+
+ if (GetAvailableFieldObjectSlot(template->localId, mapId, mapGroupId, &slot))
+ {
+ return NUM_FIELD_OBJECTS;
+ }
+ mapObject = &gMapObjects[slot];
+ npc_clear_ids_and_state(mapObject);
+ x = template->x + 7;
+ y = template->y + 7;
+ mapObject->active = TRUE;
+ mapObject->mapobj_bit_2 = TRUE;
+ mapObject->graphicsId = template->graphicsId;
+ mapObject->animPattern = template->movementType;
+ mapObject->localId = template->localId;
+ mapObject->mapNum = mapId;
+ mapObject->mapGroup = mapGroupId;
+ mapObject->coords1.x = x;
+ mapObject->coords1.y = y;
+ mapObject->coords2.x = x;
+ mapObject->coords2.y = y;
+ mapObject->coords3.x = x;
+ mapObject->coords3.y = y;
+ mapObject->mapobj_unk_0B_0 = template->elevation;
+ mapObject->elevation = template->elevation;
+ mapObject->mapobj_unk_19 = template->unkA_0;
+ mapObject->mapobj_unk_19b = template->unkA_4;
+ mapObject->trainerType = template->unkC;
+ mapObject->trainerRange_berryTreeId = template->unkE;
+ mapObject->mapobj_unk_20 = gUnknown_085055CD[template->movementType];
+ FieldObjectSetDirection(mapObject, mapObject->mapobj_unk_20);
+ FieldObjectHandleDynamicGraphicsId(mapObject);
+
+ // This block is the culprit
+ if (gUnknown_0850557C[mapObject->animPattern])
+ {
+ if (mapObject->mapobj_unk_19 == 0)
+ {
+ mapObject->mapobj_unk_19 ++;
+ }
+ if (mapObject->mapobj_unk_19b == 0)
+ {
+ mapObject->mapobj_unk_19b ++;
+ }
+ }
+ return slot;
+}
+#else
+static __attribute__((naked)) u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 mapId, u8 mapGroupId)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r9\n"
+ "\tmov r6, r8\n"
+ "\tpush {r6,r7}\n"
+ "\tsub sp, 0x4\n"
+ "\tadds r5, r0, 0\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r6, r1, 24\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r7, r2, 24\n"
+ "\tldrb r0, [r5]\n"
+ "\tadds r1, r6, 0\n"
+ "\tadds r2, r7, 0\n"
+ "\tmov r3, sp\n"
+ "\tbl GetAvailableFieldObjectSlot\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0808D66E\n"
+ "\tmovs r0, 0x10\n"
+ "\tb _0808D762\n"
+ "_0808D66E:\n"
+ "\tmov r0, sp\n"
+ "\tldrb r1, [r0]\n"
+ "\tlsls r0, r1, 3\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, =gMapObjects\n"
+ "\tadds r4, r0, r1\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl npc_clear_ids_and_state\n"
+ "\tldrh r3, [r5, 0x4]\n"
+ "\tadds r3, 0x7\n"
+ "\tlsls r3, 16\n"
+ "\tlsrs r3, 16\n"
+ "\tldrh r2, [r5, 0x6]\n"
+ "\tadds r2, 0x7\n"
+ "\tlsls r2, 16\n"
+ "\tlsrs r2, 16\n"
+ "\tldrb r0, [r4]\n"
+ "\tmovs r1, 0x1\n"
+ "\torrs r0, r1\n"
+ "\tmovs r1, 0x4\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r4]\n"
+ "\tldrb r0, [r5, 0x1]\n"
+ "\tstrb r0, [r4, 0x5]\n"
+ "\tldrb r0, [r5, 0x9]\n"
+ "\tstrb r0, [r4, 0x6]\n"
+ "\tldrb r0, [r5]\n"
+ "\tstrb r0, [r4, 0x8]\n"
+ "\tstrb r6, [r4, 0x9]\n"
+ "\tstrb r7, [r4, 0xA]\n"
+ "\tstrh r3, [r4, 0xC]\n"
+ "\tstrh r2, [r4, 0xE]\n"
+ "\tstrh r3, [r4, 0x10]\n"
+ "\tstrh r2, [r4, 0x12]\n"
+ "\tstrh r3, [r4, 0x14]\n"
+ "\tstrh r2, [r4, 0x16]\n"
+ "\tldrb r0, [r5, 0x8]\n"
+ "\tmovs r7, 0xF\n"
+ "\tadds r1, r7, 0\n"
+ "\tands r1, r0\n"
+ "\tldrb r2, [r4, 0xB]\n"
+ "\tmovs r0, 0x10\n"
+ "\tnegs r0, r0\n"
+ "\tmov r8, r0\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r4, 0xB]\n"
+ "\tldrb r1, [r5, 0x8]\n"
+ "\tlsls r1, 4\n"
+ "\tands r0, r7\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r4, 0xB]\n"
+ "\tldrb r1, [r5, 0xA]\n"
+ "\tlsls r1, 28\n"
+ "\tmovs r0, 0xF\n"
+ "\tmov r9, r0\n"
+ "\tlsrs r1, 28\n"
+ "\tldrb r2, [r4, 0x19]\n"
+ "\tmov r0, r8\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r4, 0x19]\n"
+ "\tldrb r1, [r5, 0xA]\n"
+ "\tlsrs r1, 4\n"
+ "\tlsls r1, 4\n"
+ "\tands r0, r7\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r4, 0x19]\n"
+ "\tldrh r0, [r5, 0xC]\n"
+ "\tstrb r0, [r4, 0x7]\n"
+ "\tldrh r0, [r5, 0xE]\n"
+ "\tstrb r0, [r4, 0x1D]\n"
+ "\tldr r1, =gUnknown_085055CD\n"
+ "\tldrb r0, [r5, 0x9]\n"
+ "\tadds r0, r1\n"
+ "\tldrb r1, [r0]\n"
+ "\tadds r0, r4, 0\n"
+ "\tadds r0, 0x20\n"
+ "\tstrb r1, [r0]\n"
+ "\tldrb r1, [r0]\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl FieldObjectSetDirection\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl FieldObjectHandleDynamicGraphicsId\n"
+ "\tldr r1, =gUnknown_0850557C\n"
+ "\tldrb r0, [r4, 0x6]\n"
+ "\tadds r0, r1\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0808D75E\n"
+ "\tldrb r2, [r4, 0x19]\n"
+ "\tadds r0, r7, 0\n"
+ "\tands r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0808D746\n"
+ "\tlsls r0, r2, 28\n"
+ "\tlsrs r0, 28\n"
+ "\tadds r0, 0x1\n"
+ "\tmov r1, r9\n"
+ "\tands r0, r1\n"
+ "\tmov r1, r8\n"
+ "\tands r1, r2\n"
+ "\torrs r1, r0\n"
+ "\tstrb r1, [r4, 0x19]\n"
+ "_0808D746:\n"
+ "\tldrb r2, [r4, 0x19]\n"
+ "\tmovs r0, 0xF0\n"
+ "\tands r0, r2\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0808D75E\n"
+ "\tlsrs r1, r2, 4\n"
+ "\tadds r1, 0x1\n"
+ "\tlsls r1, 4\n"
+ "\tadds r0, r7, 0\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r4, 0x19]\n"
+ "_0808D75E:\n"
+ "\tmov r0, sp\n"
+ "\tldrb r0, [r0]\n"
+ "_0808D762:\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r3,r4}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ ".pool");
+}
+#endif
+
+u8 unref_sub_808D77C(u8 localId)
+{
+ u8 i;
+ u8 nObjects;
+ struct MapObjectTemplate *template;
+
+ if (gMapHeader.events != NULL)
+ {
+ if (InBattlePyramid())
+ {
+ nObjects = sub_81AAA40();
+ }
+ else if (InTrainerHill())
+ {
+ nObjects = 2;
+ }
+ else
+ {
+ nObjects = gMapHeader.events->mapObjectCount;
+ }
+ for (i = 0; i < nObjects; i ++)
+ {
+ template = &gSaveBlock1Ptr->mapObjectTemplates[i];
+ if (template->localId == localId && !FlagGet(template->flagId))
+ {
+ return InitFieldObjectStateFromTemplate(template, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
+ }
+ }
+ }
+ return NUM_FIELD_OBJECTS;
+}
+
+static bool8 GetAvailableFieldObjectSlot(u16 localId, u8 mapNum, u8 mapGroup, u8 *result)
+// Looks for an empty slot.
+// Returns FALSE and the location of the available slot
+// in *result.
+// If no slots are available, or if the object is already
+// loaded, returns TRUE.
+{
+ u8 i = 0;
+
+ for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
+ {
+ if (!gMapObjects[i].active)
+ break;
+ if (gMapObjects[i].localId == localId && gMapObjects[i].mapNum == mapNum && gMapObjects[i].mapGroup == mapGroup)
+ return TRUE;
+ }
+ if (i >= NUM_FIELD_OBJECTS)
+ return TRUE;
+ *result = i;
+ do
+ {
+ if (gMapObjects[i].active && gMapObjects[i].localId == localId && gMapObjects[i].mapNum == mapNum && gMapObjects[i].mapGroup == mapGroup)
+ return TRUE;
+ i ++;
+ } while (i < NUM_FIELD_OBJECTS);
+ return FALSE;
+}
+
+static void RemoveFieldObject(struct MapObject *mapObject)
+{
+ mapObject->active = FALSE;
+ RemoveFieldObjectInternal(mapObject);
+}
+
+void RemoveFieldObjectByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
+{
+ u8 index;
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &index))
+ {
+ FlagSet(GetFieldObjectFlagIdByFieldObjectId(index));
+ RemoveFieldObject(&gMapObjects[index]);
+ }
+}
+
+static void RemoveFieldObjectInternal(struct MapObject *mapObject)
+{
+ struct SpriteFrameImage image;
+ image.size = GetFieldObjectGraphicsInfo(mapObject->graphicsId)->size;
+ gSprites[mapObject->spriteId].images = &image;
+ DestroySprite(&gSprites[mapObject->spriteId]);
+}
+
+void unref_sub_808D958(void)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
+ {
+ if (i != gPlayerAvatar.mapObjectId)
+ {
+ RemoveFieldObject(&gMapObjects[i]);
+ }
+ }
+}
+
+static u8 SpawnFieldObjectInternal(struct MapObjectTemplate *mapObjectTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY)
+{
+ struct MapObject *mapObject;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct Sprite *sprite;
+ u8 mapObjectId;
+ u8 paletteSlot;
+ u8 spriteId;
+
+ mapObjectId = InitFieldObjectStateFromTemplate(mapObjectTemplate, mapNum, mapGroup);
+ if (mapObjectId == NUM_FIELD_OBJECTS)
+ {
+ return NUM_FIELD_OBJECTS;
+ }
+ mapObject = &gMapObjects[mapObjectId];
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ paletteSlot = graphicsInfo->paletteSlot;
+ if (paletteSlot == 0)
+ {
+ npc_load_two_palettes__no_record(graphicsInfo->paletteTag1, 0);
+ }
+ else if (paletteSlot == 10)
+ {
+ npc_load_two_palettes__and_record(graphicsInfo->paletteTag1, 10);
+ }
+ else if (paletteSlot >= 16)
+ {
+ paletteSlot -= 16;
+ sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot);
+ }
+ if (mapObject->animPattern == 0x4c)
+ {
+ mapObject->mapobj_bit_13 = TRUE;
+ }
+ *(u16 *)&spriteTemplate->paletteTag = 0xFFFF;
+ spriteId = CreateSprite(spriteTemplate, 0, 0, 0);
+ if (spriteId == MAX_SPRITES)
+ {
+ gMapObjects[mapObjectId].active = FALSE;
+ return NUM_FIELD_OBJECTS;
+ }
+ sprite = &gSprites[spriteId];
+ sub_8092FF0(mapObject->coords2.x + cameraX, mapObject->coords2.y + cameraY, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
+ sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
+ sprite->pos1.x += 8;
+ sprite->pos1.y += 16 + sprite->centerToCornerVecY;
+ sprite->oam.paletteNum = paletteSlot;
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->data0 = mapObjectId;
+ mapObject->spriteId = spriteId;
+ mapObject->mapobj_bit_12 = graphicsInfo->inanimate;
+ if (!mapObject->mapobj_bit_12)
+ {
+ StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18));
+ }
+ SetObjectSubpriorityByZCoord(mapObject->elevation, sprite, 1);
+ sub_8096518(mapObject, sprite);
+ return mapObjectId;
+}
+
+static u8 SpawnFieldObject(struct MapObjectTemplate *mapObjectTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY)
+{
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct SpriteTemplate spriteTemplate;
+ const struct SubspriteTable *subspriteTables;
+ struct SpriteFrameImage spriteFrameImage;
+ u8 mapObjectId;
+
+ subspriteTables = NULL;
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObjectTemplate->graphicsId);
+ MakeObjectTemplateFromFieldObjectTemplate(mapObjectTemplate, &spriteTemplate, &subspriteTables);
+ spriteFrameImage.size = graphicsInfo->size;
+ spriteTemplate.images = &spriteFrameImage;
+ mapObjectId = SpawnFieldObjectInternal(mapObjectTemplate, &spriteTemplate, mapNum, mapGroup, cameraX, cameraY);
+ if (mapObjectId == NUM_FIELD_OBJECTS)
+ {
+ return NUM_FIELD_OBJECTS;
+ }
+ gSprites[gMapObjects[mapObjectId].spriteId].images = graphicsInfo->images;
+ if (subspriteTables != NULL)
+ {
+ SetSubspriteTables(&gSprites[gMapObjects[mapObjectId].spriteId], subspriteTables);
+ }
+ return mapObjectId;
+}
+
+u8 SpawnSpecialFieldObject(struct MapObjectTemplate *mapObjectTemplate)
+{
+ s16 cameraX;
+ s16 cameraY;
+
+ GetFieldObjectMovingCameraOffset(&cameraX, &cameraY);
+ return SpawnFieldObject(mapObjectTemplate, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, cameraX, cameraY);
+}
+
+u8 SpawnSpecialFieldObjectParametrized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z)
+{
+ struct MapObjectTemplate mapObjectTemplate;
+
+ x -= 7;
+ y -= 7;
+ mapObjectTemplate.localId = localId;
+ mapObjectTemplate.graphicsId = graphicsId;
+ mapObjectTemplate.unk2 = 0;
+ mapObjectTemplate.x = x;
+ mapObjectTemplate.y = y;
+ mapObjectTemplate.elevation = z;
+ mapObjectTemplate.movementType = movementBehavior;
+ mapObjectTemplate.unkA_0 = 0;
+ mapObjectTemplate.unkA_4 = 0;
+ mapObjectTemplate.unkC = 0;
+ mapObjectTemplate.unkE = 0;
+ return SpawnSpecialFieldObject(&mapObjectTemplate);
+}
+
+u8 show_sprite(u8 localId, u8 mapNum, u8 mapGroup)
+{
+ struct MapObjectTemplate *mapObjectTemplate;
+ s16 cameraX;
+ s16 cameraY;
+
+ mapObjectTemplate = GetFieldObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup);
+ if (mapObjectTemplate == NULL)
+ {
+ return NUM_FIELD_OBJECTS;
+ }
+ GetFieldObjectMovingCameraOffset(&cameraX, &cameraY);
+ return SpawnFieldObject(mapObjectTemplate, mapNum, mapGroup, cameraX, cameraY);
+}
+
+static void MakeObjectTemplateFromFieldObjectGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables)
+{
+ const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(graphicsId);
+
+ sprTemplate->tileTag = gfxInfo->tileTag;
+ sprTemplate->paletteTag = gfxInfo->paletteTag1;
+ sprTemplate->oam = gfxInfo->oam;
+ sprTemplate->anims = gfxInfo->anims;
+ sprTemplate->images = gfxInfo->images;
+ sprTemplate->affineAnims = gfxInfo->affineAnims;
+ sprTemplate->callback = callback;
+ *subspriteTables = gfxInfo->subspriteTables;
+}
+
+static void MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(u16 graphicsId, u16 callbackIndex, struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables)
+{
+ MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, gUnknown_08505438[callbackIndex], sprTemplate, subspriteTables);
+}
+
+static void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *mapObjectTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables)
+{
+ MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(mapObjectTemplate->graphicsId, mapObjectTemplate->movementType, spriteTemplate, subspriteTables);
+}
+
+u8 AddPseudoFieldObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
+{
+ struct SpriteTemplate *spriteTemplate;
+ const struct SubspriteTable *subspriteTables;
+ struct Sprite *sprite;
+ u8 spriteIdx;
+
+ spriteTemplate = malloc(sizeof(struct SpriteTemplate));
+ MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, callback, spriteTemplate, &subspriteTables);
+ if (spriteTemplate->paletteTag != 0xffff)
+ {
+ sub_808E894(spriteTemplate->paletteTag);
+ }
+ spriteIdx = CreateSprite(spriteTemplate, x, y, subpriority);
+ free(spriteTemplate);
+
+ if (spriteIdx != MAX_SPRITES && subspriteTables != NULL)
+ {
+ sprite = &gSprites[spriteIdx];
+ SetSubspriteTables(sprite, subspriteTables);
+ sprite->subspriteMode = 2;
+ }
+ return spriteIdx;
+}
+
+u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
+{
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct SpriteTemplate spriteTemplate;
+ const struct SubspriteTable *subspriteTables;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ graphicsInfo = GetFieldObjectGraphicsInfo(graphicsId);
+ MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, sub_8097AC8, &spriteTemplate, &subspriteTables);
+ *(u16 *)&spriteTemplate.paletteTag = 0xffff;
+ x += 7;
+ y += 7;
+ sub_80930E0(&x, &y, 8, 16);
+ spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
+ sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
+ sprite->pos1.y += sprite->centerToCornerVecY;
+ sprite->oam.paletteNum = graphicsInfo->paletteSlot;
+ if (sprite->oam.paletteNum >= 16)
+ {
+ sprite->oam.paletteNum -= 16;
+ }
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->data0 = a1;
+ sprite->data1 = z;
+ if (graphicsInfo->paletteSlot == 10)
+ {
+ npc_load_two_palettes__and_record(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
+ }
+ else if (graphicsInfo->paletteSlot >= 16)
+ {
+ sub_808EAB0(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot | 0xf0);
+ }
+ if (subspriteTables != NULL)
+ {
+ SetSubspriteTables(sprite, subspriteTables);
+ sprite->subspriteMode = 2;
+ }
+ InitObjectPriorityByZCoord(sprite, z);
+ SetObjectSubpriorityByZCoord(z, sprite, 1);
+ StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(direction));
+ }
+ return spriteId;
+}
+
+void SpawnFieldObjectsInView(s16 cameraX, s16 cameraY)
+{
+ u8 i;
+ s16 left;
+ s16 right;
+ s16 top;
+ s16 bottom;
+ u8 objectCount;
+ s16 npcX;
+ s16 npcY;
+
+ if (gMapHeader.events != NULL)
+ {
+ left = gSaveBlock1Ptr->pos.x - 2;
+ right = gSaveBlock1Ptr->pos.x + 17;
+ top = gSaveBlock1Ptr->pos.y;
+ bottom = gSaveBlock1Ptr->pos.y + 16;
+
+ if (InBattlePyramid())
+ {
+ objectCount = sub_81AAA40();
+ }
+ else if (InTrainerHill())
+ {
+ objectCount = 2;
+ }
+ else
+ {
+ objectCount = gMapHeader.events->mapObjectCount;
+ }
+
+ for (i = 0; i < objectCount; i++)
+ {
+ struct MapObjectTemplate *template = &gSaveBlock1Ptr->mapObjectTemplates[i];
+ npcX = template->x + 7;
+ npcY = template->y + 7;
+
+ if (top <= npcY && bottom >= npcY && left <= npcX && right >= npcX
+ && !FlagGet(template->flagId))
+ SpawnFieldObject(template, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, cameraX, cameraY);
+ }
+ }
+}
+
+/*static*/ void RemoveFieldObjectsOutsideView(void)
+{
+ u8 i;
+ u8 j;
+ bool8 isActiveLinkPlayer;
+ struct MapObject *mapObject;
+
+ for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
+ {
+ for (j = 0, isActiveLinkPlayer = FALSE; j < ARRAY_COUNT(gLinkPlayerMapObjects); j ++)
+ {
+ if (gLinkPlayerMapObjects[j].active && i == gLinkPlayerMapObjects[j].mapObjId)
+ isActiveLinkPlayer = TRUE;
+ }
+ if (!isActiveLinkPlayer)
+ {
+ mapObject = &gMapObjects[i];
+
+ if (mapObject->active && !mapObject->mapobj_bit_16)
+ RemoveFieldObjectIfOutsideView(mapObject);
+ }
+ }
+}
+
+static void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject)
+{
+ s16 left;
+ s16 right;
+ s16 top;
+ s16 bottom;
+
+ left = gSaveBlock1Ptr->pos.x - 2;
+ right = gSaveBlock1Ptr->pos.x + 17;
+ top = gSaveBlock1Ptr->pos.y;
+ bottom = gSaveBlock1Ptr->pos.y + 16;
+
+ if (mapObject->coords2.x >= left && mapObject->coords2.x <= right
+ && mapObject->coords2.y >= top && mapObject->coords2.y <= bottom)
+ return;
+ if (mapObject->coords1.x >= left && mapObject->coords1.x <= right
+ && mapObject->coords1.y >= top && mapObject->coords1.y <= bottom)
+ return;
+ RemoveFieldObject(mapObject);
+}
+
+void sub_808E16C(s16 x, s16 y)
+{
+ u8 i;
+
+ ClearPlayerAvatarInfo();
+ for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
+ {
+ if (gMapObjects[i].active)
+ {
+ sub_808E1B8(i, x, y);
+ }
+ }
+ sub_808D450();
+}
+
+static void sub_808E1B8(u8 mapObjectId, s16 x, s16 y)
+{
+ u8 spriteId;
+ u8 paletteSlot;
+ struct MapObject *mapObject;
+ const struct SubspriteTable *subspriteTables;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct SpriteFrameImage spriteFrameImage;
+ struct SpriteTemplate spriteTemplate;
+ struct Sprite *sprite;
+
+#define i spriteId
+ for (i = 0; i < ARRAY_COUNT(gLinkPlayerMapObjects); i ++)
+ {
+ if (gLinkPlayerMapObjects[i].active && mapObjectId == gLinkPlayerMapObjects[i].mapObjId)
+ {
+ return;
+ }
+ }
+#undef i
+
+ mapObject = &gMapObjects[mapObjectId];
+ subspriteTables = NULL;
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ spriteFrameImage.size = graphicsInfo->size;
+ MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(mapObject->graphicsId, mapObject->animPattern, &spriteTemplate, &subspriteTables);
+ spriteTemplate.images = &spriteFrameImage;
+ *(u16 *)&spriteTemplate.paletteTag = 0xffff;
+ paletteSlot = graphicsInfo->paletteSlot;
+ if (paletteSlot == 0)
+ {
+ npc_load_two_palettes__no_record(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
+ }
+ else if (paletteSlot == 10)
+ {
+ npc_load_two_palettes__and_record(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
+ }
+ else if (paletteSlot >= 16)
+ {
+ paletteSlot -= 16;
+ sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot);
+ }
+ *(u16 *)&spriteTemplate.paletteTag = 0xffff;
+ spriteId = CreateSprite(&spriteTemplate, 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sub_8092FF0(x + mapObject->coords2.x, y + mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
+ sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
+ sprite->pos1.x += 8;
+ sprite->pos1.y += 16 + sprite->centerToCornerVecY;
+ sprite->images = graphicsInfo->images;
+ if (mapObject->animPattern == 0x0b)
+ {
+ SetPlayerAvatarFieldObjectIdAndObjectId(mapObjectId, spriteId);
+ mapObject->mapobj_unk_1B = sub_8154228();
+ }
+ if (subspriteTables != NULL)
+ {
+ SetSubspriteTables(sprite, subspriteTables);
+ }
+ sprite->oam.paletteNum = paletteSlot;
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->data0 = mapObjectId;
+ mapObject->spriteId = spriteId;
+ if (!mapObject->mapobj_bit_12 && mapObject->animPattern != 0x0b)
+ {
+ StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18));
+ }
+ sub_808E38C(mapObject);
+ SetObjectSubpriorityByZCoord(mapObject->elevation, sprite, 1);
+ }
+}
+
+/*static*/ void sub_808E38C(struct MapObject *mapObject)
+{
+ mapObject->mapobj_bit_1 = FALSE;
+ mapObject->mapobj_bit_2 = TRUE;
+ mapObject->mapobj_bit_22 = FALSE;
+ mapObject->mapobj_bit_17 = FALSE;
+ mapObject->mapobj_bit_18 = FALSE;
+ mapObject->mapobj_bit_19 = FALSE;
+ mapObject->mapobj_bit_20 = FALSE;
+ mapObject->mapobj_bit_21 = FALSE;
+ FieldObjectClearAnim(mapObject);
+}
+
+static void SetPlayerAvatarFieldObjectIdAndObjectId(u8 mapObjectId, u8 spriteId)
+{
+ gPlayerAvatar.mapObjectId = mapObjectId;
+ gPlayerAvatar.spriteId = spriteId;
+ gPlayerAvatar.gender = GetPlayerAvatarGenderByGraphicsId(gMapObjects[mapObjectId].graphicsId);
+ SetPlayerAvatarExtraStateTransition(gMapObjects[mapObjectId].graphicsId, 0x20);
+}
+
+void FieldObjectSetGraphicsId(struct MapObject *mapObject, u8 graphicsId)
+{
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct Sprite *sprite;
+ u8 paletteSlot;
+
+ graphicsInfo = GetFieldObjectGraphicsInfo(graphicsId);
+ sprite = &gSprites[mapObject->spriteId];
+ paletteSlot = graphicsInfo->paletteSlot;
+ if (paletteSlot == 0)
+ {
+ pal_patch_for_npc(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
+ }
+ else if (paletteSlot == 10)
+ {
+ npc_load_two_palettes__and_record(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
+ }
+ else if (paletteSlot >= 16)
+ {
+ paletteSlot -= 16;
+ sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot);
+ }
+ sprite->oam.shape = graphicsInfo->oam->shape;
+ sprite->oam.size = graphicsInfo->oam->size;
+ sprite->images = graphicsInfo->images;
+ sprite->anims = graphicsInfo->anims;
+ sprite->subspriteTables = graphicsInfo->subspriteTables;
+ sprite->oam.paletteNum = paletteSlot;
+ mapObject->mapobj_bit_12 = graphicsInfo->inanimate;
+ mapObject->graphicsId = graphicsId;
+ sub_8093038(mapObject->coords2.x, mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
+ sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
+ sprite->pos1.x += 8;
+ sprite->pos1.y += 16 + sprite->centerToCornerVecY;
+ if (mapObject->mapobj_bit_15)
+ {
+ CameraObjectReset1();
+ }
+}
+
+void FieldObjectSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 graphicsId)
+{
+ u8 mapObjectId;
+
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ FieldObjectSetGraphicsId(&gMapObjects[mapObjectId], graphicsId);
+ }
+}
+
+void FieldObjectTurn(struct MapObject *mapObject, u8 direction)
+{
+ FieldObjectSetDirection(mapObject, direction);
+ if (!mapObject->mapobj_bit_12)
+ {
+ StartSpriteAnim(&gSprites[mapObject->spriteId], FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18));
+ SeekSpriteAnim(&gSprites[mapObject->spriteId], 0);
+ }
+}
+
+void FieldObjectTurnByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 direction)
+{
+ u8 mapObjectId;
+
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ FieldObjectTurn(&gMapObjects[mapObjectId], direction);
+ }
+}
+
+void PlayerObjectTurn(struct PlayerAvatar *playerAvatar, u8 direction)
+{
+ FieldObjectTurn(&gMapObjects[playerAvatar->mapObjectId], direction);
+}
+
+/*static*/ void get_berry_tree_graphics(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ u8 berryStage;
+ u8 berryId;
+
+ mapObject->mapobj_bit_13 = TRUE;
+ sprite->invisible = TRUE;
+ berryStage = GetStageByBerryTreeId(mapObject->trainerRange_berryTreeId);
+ if (berryStage != 0)
+ {
+ mapObject->mapobj_bit_13 = FALSE;
+ sprite->invisible = FALSE;
+ berryId = GetBerryTypeByBerryTreeId(mapObject->trainerRange_berryTreeId) - 1;
+ berryStage -= 1;
+ if (berryId >= NUM_BERRIES)
+ {
+ berryId = 0;
+ }
+ FieldObjectSetGraphicsId(mapObject, gBerryTreeFieldObjectGraphicsIdTablePointers[berryId][berryStage]);
+ sprite->images = gBerryTreePicTablePointers[berryId];
+ sprite->oam.paletteNum = gBerryTreePaletteSlotTablePointers[berryId][berryStage];
+ StartSpriteAnim(sprite, berryStage);
+ }
+}
+
+const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8 graphicsId)
+{
+ u8 bard;
+
+ if (graphicsId >= SPRITE_VAR)
+ {
+ graphicsId = VarGetFieldObjectGraphicsId(graphicsId - SPRITE_VAR);
+ }
+ if (graphicsId == 0x45)
+ {
+ bard = sub_81201C8();
+ return gMauvilleOldManGraphicsInfoPointers[bard];
+ }
+ if (graphicsId >= NUM_OBJECT_GRAPHICS_INFO)
+ {
+ graphicsId = 0x05; // LittleBoy1
+ }
+ return gFieldObjectGraphicsInfoPointers[graphicsId];
+}
+
+static void FieldObjectHandleDynamicGraphicsId(struct MapObject *mapObject)
+{
+ if (mapObject->graphicsId >= SPRITE_VAR)
+ {
+ mapObject->graphicsId = VarGetFieldObjectGraphicsId(mapObject->graphicsId - SPRITE_VAR);
+ }
+}
+
+void npc_by_local_id_and_map_set_field_1_bit_x20(u8 localId, u8 mapNum, u8 mapGroup, u8 state)
+{
+ u8 mapObjectId;
+
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ gMapObjects[mapObjectId].mapobj_bit_13 = state;
+ }
+}
+
+void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, u8 *localId, u8 *mapNum, u8 *mapGroup)
+{
+ *localId = mapObject->localId;
+ *mapNum = mapObject->mapNum;
+ *mapGroup = mapObject->mapGroup;
+}
+
+void sub_808E75C(s16 x, s16 y)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+
+ mapObjectId = GetFieldObjectIdByXY(x, y);
+ if (mapObjectId != NUM_FIELD_OBJECTS)
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ mapObject->mapobj_bit_2 = TRUE;
+ }
+}
+
+void sub_808E78C(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ struct Sprite *sprite;
+
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ sprite = &gSprites[mapObject->spriteId];
+ mapObject->mapobj_bit_26 = TRUE;
+ sprite->subpriority = subpriority;
+ }
+}
+
+void sub_808E7E4(u8 localId, u8 mapNum, u8 mapGroup)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ mapObject->mapobj_bit_26 = FALSE;
+ mapObject->mapobj_bit_2 = TRUE;
+ }
+}
+
+void sub_808E82C(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y)
+{
+ u8 mapObjectId;
+ struct Sprite *sprite;
+
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ sprite = &gSprites[gMapObjects[mapObjectId].spriteId];
+ sprite->pos2.x = x;
+ sprite->pos2.y = y;
+ }
+}
+
+void gpu_pal_allocator_reset__manage_upper_four(void)
+{
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 12;
+}
+
+static void sub_808E894(u16 paletteTag)
+{
+ u16 paletteSlot;
+
+ paletteSlot = FindFieldObjectPaletteIndexByTag(paletteTag);
+ if (paletteSlot != 0x11ff) // always true
+ {
+ sub_808E8F4(&gUnknown_0850BBC8[paletteSlot]);
+ }
+}
+
+void sub_808E8C0(u16 *paletteTags)
+{
+ u8 i;
+
+ for (i = 0; paletteTags[i] != 0x11ff; i ++)
+ {
+ sub_808E894(paletteTags[i]);
+ }
+}
+
+static u8 sub_808E8F4(const struct SpritePalette *spritePalette)
+{
+ if (IndexOfSpritePaletteTag(spritePalette->tag) != 0xff)
+ {
+ return 0xff;
+ }
+ return LoadSpritePalette(spritePalette);
+}
+
+void pal_patch_for_npc(u16 paletteTag, u8 paletteSlot)
+{
+ u16 paletteIdx;
+
+ paletteIdx = FindFieldObjectPaletteIndexByTag(paletteTag);
+ LoadPalette(gUnknown_0850BBC8[paletteIdx].data, 16 * paletteSlot + 256, 0x20);
+}
+
+void pal_patch_for_npc_range(const u16 *paletteTags, u8 minSlot, u8 maxSlot)
+{
+ while (minSlot < maxSlot)
+ {
+ pal_patch_for_npc(*paletteTags, minSlot);
+ paletteTags ++;
+ minSlot ++;
+ }
+}
+
+static u8 FindFieldObjectPaletteIndexByTag(u16 tag)
+{
+ u8 i;
+
+ for (i = 0; gUnknown_0850BBC8[i].tag != 0x11ff; i ++)
+ {
+ if (gUnknown_0850BBC8[i].tag == tag)
+ {
+ return i;
+ }
+ }
+ return 0xff;
+}
+
+void npc_load_two_palettes__no_record(u16 tag, u8 slot)
+{
+ u8 i;
+
+ pal_patch_for_npc(tag, slot);
+ for (i = 0; gUnknown_0850BD00[i].tag != 0x11ff; i ++)
+ {
+ if (gUnknown_0850BD00[i].tag == tag)
+ {
+ pal_patch_for_npc(gUnknown_0850BD00[i].data[gUnknown_020375B4], gUnknown_084975C4[slot]);
+ return;
+ }
+ }
+}
+
+void npc_load_two_palettes__and_record(u16 tag, u8 slot)
+{
+ u8 i;
+
+ gUnknown_020375B6 = tag;
+ pal_patch_for_npc(tag, slot);
+ for (i = 0; gUnknown_0850BD78[i].tag != 0x11ff; i ++)
+ {
+ if (gUnknown_0850BD78[i].tag == tag)
+ {
+ pal_patch_for_npc(gUnknown_0850BD78[i].data[gUnknown_020375B4], gUnknown_084975C4[slot]);
+ return;
+ }
+ }
+}
+
+static void sub_808EAB0(u16 tag, u8 slot)
+{
+ pal_patch_for_npc(tag, slot);
+}
+
+void unref_sub_808EAC4(struct MapObject *mapObject, s16 x, s16 y)
+{
+ mapObject->coords3.x = mapObject->coords2.x;
+ mapObject->coords3.y = mapObject->coords2.y;
+ mapObject->coords2.x += x;
+ mapObject->coords2.y += y;
+}
+
+void npc_coords_shift(struct MapObject *mapObject, s16 x, s16 y)
+{
+ mapObject->coords3.x = mapObject->coords2.x;
+ mapObject->coords3.y = mapObject->coords2.y;
+ mapObject->coords2.x = x;
+ mapObject->coords2.y = y;
+}
+
+/*static*/ void npc_coords_set(struct MapObject *mapObject, s16 x, s16 y)
+{
+ mapObject->coords3.x = x;
+ mapObject->coords3.y = y;
+ mapObject->coords2.x = x;
+ mapObject->coords2.y = y;
+}
+
+void sub_808EB08(struct MapObject *mapObject, s16 x, s16 y)
+{
+ struct Sprite *sprite;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+
+ sprite = &gSprites[mapObject->spriteId];
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ npc_coords_set(mapObject, x, y);
+ sub_8093038(mapObject->coords2.x, mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
+ sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
+ sprite->pos1.x += 8;
+ sprite->pos1.y += 16 + sprite->centerToCornerVecY;
+ sub_808E38C(mapObject);
+ if (mapObject->mapobj_bit_15)
+ {
+ CameraObjectReset1();
+ }
+}
+
+void sub_808EBA8(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y)
+{
+ u8 mapObjectId;
+
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ x += 7;
+ y += 7;
+ sub_808EB08(&gMapObjects[mapObjectId], x, y);
+ }
+}
+
+void npc_coords_shift_still(struct MapObject *mapObject)
+{
+ npc_coords_shift(mapObject, mapObject->coords2.x, mapObject->coords2.y);
+}
+
+void UpdateFieldObjectCoordsForCameraUpdate(void)
+{
+ u8 i;
+ s16 dx;
+ s16 dy;
+
+ if (gCamera.active)
+ {
+ dx = gCamera.x;
+ dy = gCamera.y;
+ for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
+ {
+ if (gMapObjects[i].active)
+ {
+ gMapObjects[i].coords1.x -= dx;
+ gMapObjects[i].coords1.y -= dy;
+ gMapObjects[i].coords2.x -= dx;
+ gMapObjects[i].coords2.y -= dy;
+ gMapObjects[i].coords3.x -= dx;
+ gMapObjects[i].coords3.y -= dy;
+ }
+ }
+ }
+}
+
+u8 GetFieldObjectIdByXYZ(u16 x, u16 y, u8 z)
+{
+ u8 i;
+ for (i = 0; i < NUM_FIELD_OBJECTS; i ++)
+ {
+ if (gMapObjects[i].active)
+ {
+ if (gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y && FieldObjectDoesZCoordMatch(&gMapObjects[i], z))
+ {
+ return i;
+ }
+ }
+ }
+ return NUM_FIELD_OBJECTS;
+}
+
+static bool8 FieldObjectDoesZCoordMatch(struct MapObject *mapObject, u8 z)
+{
+ if (mapObject->mapobj_unk_0B_0 != 0 && z != 0 && mapObject->mapobj_unk_0B_0 != z)
+ {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void UpdateFieldObjectsForCameraUpdate(s16 x, s16 y)
+{
+ UpdateFieldObjectCoordsForCameraUpdate();
+ SpawnFieldObjectsInView(x, y);
+ RemoveFieldObjectsOutsideView();
+}
+
+u8 AddCameraObject(u8 linkedSpriteId)
+{
+ u8 spriteId;
+
+ spriteId = CreateSprite(&gUnknown_084975D4, 0, 0, 4);
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].data0 = linkedSpriteId;
+ return spriteId;
+}
+
+void ObjectCB_CameraObject(struct Sprite *sprite)
+{
+ void (*callbacks[ARRAY_COUNT(gUnknown_084975EC)])(struct Sprite *);
+
+ memcpy(callbacks, gUnknown_084975EC, sizeof gUnknown_084975EC);
+ callbacks[sprite->data1](sprite);
+}
+
+/*static*/ void CameraObject_0(struct Sprite *sprite)
+{
+ sprite->pos1.x = gSprites[sprite->data0].pos1.x;
+ sprite->pos1.y = gSprites[sprite->data0].pos1.y;
+ sprite->invisible = TRUE;
+ sprite->data1 = 1;
+ CameraObject_1(sprite);
+}
+
+/*static*/ void CameraObject_1(struct Sprite *sprite)
+{
+ s16 x;
+ s16 y;
+
+ y = gSprites[sprite->data0].pos1.y;
+ x = gSprites[sprite->data0].pos1.x;
+ sprite->data2 = x - sprite->pos1.x;
+ sprite->data3 = y - sprite->pos1.y;
+ sprite->pos1.x = x;
+ sprite->pos1.y = y;
+}
+
+/*static*/ void CameraObject_2(struct Sprite *sprite)
+{
+ sprite->pos1.x = gSprites[sprite->data0].pos1.x;
+ sprite->pos1.y = gSprites[sprite->data0].pos1.y;
+ sprite->data2 = 0;
+ sprite->data3 = 0;
+}
+
+static struct Sprite *FindCameraObject(void)
+{
+ u8 spriteId;
+
+ for (spriteId = 0; spriteId < MAX_SPRITES; spriteId ++)
+ {
+ if (gSprites[spriteId].inUse && gSprites[spriteId].callback == ObjectCB_CameraObject)
+ {
+ return &gSprites[spriteId];
+ }
+ }
+ return NULL;
+}
+
+void CameraObjectReset1(void)
+{
+ struct Sprite *cameraObject;
+
+ cameraObject = FindCameraObject();
+ if (cameraObject != NULL)
+ {
+ cameraObject->data1 = 0;
+ cameraObject->callback(cameraObject);
+ }
+}
+
+void CameraObjectSetFollowedObjectId(u8 objectId)
+{
+ struct Sprite *cameraObject;
+
+ cameraObject = FindCameraObject();
+ if (cameraObject != NULL)
+ {
+ cameraObject->data0 = objectId;
+ CameraObjectReset1();
+ }
+}
+
+u8 CameraObjectGetFollowedObjectId(void)
+{
+ struct Sprite *cameraObject;
+
+ cameraObject = FindCameraObject();
+ if (cameraObject == NULL)
+ {
+ return MAX_SPRITES;
+ }
+ return cameraObject->data0;
+}
+
+void CameraObjectReset2(void)
+{
+ FindCameraObject()->data1 = 2;
+}
+
+u8 CopySprite(struct Sprite *sprite, s16 x, s16 y, u8 subpriority)
+{
+ u8 i;
+
+ for (i = 0; i < MAX_SPRITES; i ++)
+ {
+ if (!gSprites[i].inUse)
+ {
+ gSprites[i] = *sprite;
+ gSprites[i].pos1.x = x;
+ gSprites[i].pos1.y = y;
+ gSprites[i].subpriority = subpriority;
+ break;
+ }
+ }
+ return i;
+}
+
+u8 obj_unfreeze(struct Sprite *sprite, s16 x, s16 y, u8 subpriority)
+{
+ s16 i;
+
+ for (i = MAX_SPRITES - 1; i > -1; i --)
+ {
+ if (!gSprites[i].inUse)
+ {
+ gSprites[i] = *sprite;
+ gSprites[i].pos1.x = x;
+ gSprites[i].pos1.y = y;
+ gSprites[i].subpriority = subpriority;
+ return i;
+ }
+ }
+ return MAX_SPRITES;
+}
+
+void FieldObjectSetDirection(struct MapObject *mapObject, u8 direction)
+{
+ s8 d2;
+ mapObject->mapobj_unk_20 = mapObject->mapobj_unk_18;
+ if (!mapObject->mapobj_bit_9)
+ {
+ d2 = direction;
+ mapObject->mapobj_unk_18 = d2;
+ }
+ mapObject->placeholder18 = direction;
+}
+
+static const u8 *GetFieldObjectScriptPointerByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
+{
+ return GetFieldObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->script;
+}
+
+const u8 *GetFieldObjectScriptPointerByFieldObjectId(u8 mapObjectId)
+{
+ return GetFieldObjectScriptPointerByLocalIdAndMap(gMapObjects[mapObjectId].localId, gMapObjects[mapObjectId].mapNum, gMapObjects[mapObjectId].mapGroup);
+}
+
+static u16 GetFieldObjectFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
+{
+ return GetFieldObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->flagId;
+}
+
+u16 GetFieldObjectFlagIdByFieldObjectId(u8 mapObjectId)
+{
+ return GetFieldObjectFlagIdByLocalIdAndMap(gMapObjects[mapObjectId].localId, gMapObjects[mapObjectId].mapNum, gMapObjects[mapObjectId].mapGroup);
+}
+
+u8 sub_808F080(u8 localId, u8 mapNum, u8 mapGroup)
+{
+ u8 mapObjectId;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ return 0xFF;
+ }
+ return gMapObjects[mapObjectId].trainerType;
+}
+
+u8 sub_808F0BC(u8 mapObjectId)
+{
+ return gMapObjects[mapObjectId].trainerType;
+}
+
+u8 sub_808F0D4(u8 localId, u8 mapNum, u8 mapGroup)
+{
+ u8 mapObjectId;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ return 0xFF;
+ }
+ return gMapObjects[mapObjectId].trainerRange_berryTreeId;
+}
+
+u8 FieldObjectGetBerryTreeId(u8 mapObjectId)
+{
+ return gMapObjects[mapObjectId].trainerRange_berryTreeId;
+}
+
+struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
+{
+ struct MapObjectTemplate *templates;
+ const struct MapHeader *mapHeader;
+ u8 count;
+
+ if (gSaveBlock1Ptr->location.mapNum == mapNum && gSaveBlock1Ptr->location.mapGroup == mapGroup)
+ {
+ templates = gSaveBlock1Ptr->mapObjectTemplates;
+ count = gMapHeader.events->mapObjectCount;
+ }
+ else
+ {
+ mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum);
+ templates = mapHeader->events->mapObjects;
+ count = mapHeader->events->mapObjectCount;
+ }
+ return FindFieldObjectTemplateInArrayByLocalId(localId, templates, count);
+}
+
+struct MapObjectTemplate *FindFieldObjectTemplateInArrayByLocalId(u8 localId, struct MapObjectTemplate *templates, u8 count)
+{
+ u8 i;
+
+ for (i = 0; i < count; i ++)
+ {
+ if (templates[i].localId == localId)
+ {
+ return &templates[i];
+ }
+ }
+ return NULL;
+}
+
+struct MapObjectTemplate *sub_808F1B4(const struct MapObject *mapObject)
+{
+ int i;
+
+ if (mapObject->mapNum != gSaveBlock1Ptr->location.mapNum || mapObject->mapGroup != gSaveBlock1Ptr->location.mapGroup)
+ {
+ return NULL;
+ }
+ for (i = 0; i < 64; i ++) // Using ARRAY_COUNT here results in the wrong conditional branch instruction (bls instead of ble)
+ {
+ if (mapObject->localId == gSaveBlock1Ptr->mapObjectTemplates[i].localId)
+ {
+ return &gSaveBlock1Ptr->mapObjectTemplates[i];
+ }
+ }
+ return NULL;
+}
+
+void sub_808F208(const struct MapObject *mapObject)
+{
+ struct MapObjectTemplate *mapObjectTemplate;
+
+ mapObjectTemplate = sub_808F1B4(mapObject);
+ if (mapObjectTemplate != NULL)
+ {
+ mapObjectTemplate->x = mapObject->coords2.x - 7;
+ mapObjectTemplate->y = mapObject->coords2.y - 7;
+ }
+}
+
+void sub_808F228(const struct MapObject *mapObject, const u8 *script)
+{
+ struct MapObjectTemplate *mapObjectTemplate;
+
+ mapObjectTemplate = sub_808F1B4(mapObject);
+ if (mapObjectTemplate != NULL)
+ {
+ mapObjectTemplate->script = script;
+ }
+}
+
+void sub_808F23C(const struct MapObject *mapObject, u8 movementType)
+{
+ struct MapObjectTemplate *mapObjectTemplate;
+
+ mapObjectTemplate = sub_808F1B4(mapObject);
+ if (mapObjectTemplate != NULL)
+ {
+ mapObjectTemplate->movementType = movementType;
+ }
+}
+
+void sub_808F254(u8 localId, u8 mapNum, u8 mapGroup)
+{
+ u8 mapObjectId;
+
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ sub_808F208(&gMapObjects[mapObjectId]);
+ }
+}
+
+void sub_808F28C(u8 localId, u8 mapNum, u8 mapGroup, u8 action)
+{
+ u8 mapObjectId;
+
+ if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId))
+ {
+ switch (action)
+ {
+ case 6:
+ sub_808F228(&gMapObjects[mapObjectId], gUnknown_082766A2);
+ break;
+ case 7:
+ sub_808F228(&gMapObjects[mapObjectId], gUnknown_082766A6);
+ break;
+ }
+ }
+}
+
+void npc_paltag_set_load(u8 palSlot)
+{
+ gpu_pal_allocator_reset__manage_upper_four();
+ gUnknown_020375B6 = 0x11ff;
+ gUnknown_020375B4 = palSlot;
+ if (palSlot == 1)
+ {
+ pal_patch_for_npc_range(gUnknown_0850BE38[gUnknown_020375B4], 0, 6);
+ gReservedSpritePaletteCount = 8;
+ }
+ else
+ {
+ pal_patch_for_npc_range(gUnknown_0850BE38[gUnknown_020375B4], 0, 10);
+ }
+}
+
+u16 npc_paltag_by_palslot(u8 palSlot)
+{
+ u8 i;
+
+ if (palSlot < 10)
+ {
+ return gUnknown_0850BE38[gUnknown_020375B4][palSlot];
+ }
+ for (i = 0; gUnknown_0850BD78[i].tag != 0x11ff; i ++)
+ {
+ if (gUnknown_0850BD78[i].tag == gUnknown_020375B6)
+ {
+ return gUnknown_0850BD78[i].data[gUnknown_020375B4];
+ }
+ }
+ return 0x11ff;
+}
+
+// Map Object Step Callbacks
+
+null_object_step(NoMovement1, FALSE)
+
+field_object_step(GoRandomDirections, gUnknown_0850D6F4)
+
+bool8 sub_808F44C(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ npc_reset(mapObject, sprite);
+ sprite->data1 = 1;
+ return TRUE;
+}
+
+bool8 sub_808F460(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18));
+ sprite->data1 = 2;
+ return TRUE;
+}
+
+bool8 sub_808F48C(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (!FieldObjectExecRegularAnim(mapObject, sprite))
+ {
+ return FALSE;
+ }
+ sub_8097978(sprite, gUnknown_0850D6DC[Random() & 0x03]);
+ sprite->data1 = 3;
+ return TRUE;
+}
+
+bool8 sub_808F4C8(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (sub_809797C(sprite))
+ {
+ sprite->data1 = 4;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_808F4E8(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ u8 directions[4];
+ u8 chosenDirection;
+
+ memcpy(directions, gUnknown_0850D710, sizeof directions);
+ chosenDirection = directions[Random() & 0x03];
+ FieldObjectSetDirection(mapObject, chosenDirection);
+ sprite->data1 = 5;
+ if (sub_8092B88(mapObject, chosenDirection))
+ {
+ sprite->data1 = 1;
+ }
+ return TRUE;
+}
+
+bool8 sub_808F534(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18));
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 6;
+ return TRUE;
+}
+
+bool8 sub_808F564(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (FieldObjectExecRegularAnim(mapObject, sprite))
+ {
+ mapObject->mapobj_bit_1 = FALSE;
+ sprite->data1 = 1;
+ }
+ return FALSE;
+}
+
+bool8 FieldObjectIsTrainerAndCloseToPlayer(struct MapObject *mapObject)
+{
+ s16 playerX;
+ s16 playerY;
+ s16 objX;
+ s16 objY;
+ s16 minX;
+ s16 maxX;
+ s16 minY;
+ s16 maxY;
+
+ if (!TestPlayerAvatarFlags(0x80))
+ {
+ return FALSE;
+ }
+ if (mapObject->trainerType != 1 && mapObject->trainerType != 3)
+ {
+ return FALSE;
+ }
+ PlayerGetDestCoords(&playerX, &playerY);
+ objX = mapObject->coords2.x;
+ objY = mapObject->coords2.y;
+ minX = objX - mapObject->trainerRange_berryTreeId;
+ minY = objY - mapObject->trainerRange_berryTreeId;
+ maxX = objX + mapObject->trainerRange_berryTreeId;
+ maxY = objY + mapObject->trainerRange_berryTreeId;
+ if (minX > playerX || maxX < playerX || minY > playerY || maxY < playerY)
+ {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+u8 sub_808F608(s16 x1, s16 x2, s16 y1, s16 y2)
+{
+ u8 retval;
+
+ if (y1 > y2)
+ {
+ retval = DIR_EAST;
+ if (x1 < 0)
+ {
+ retval = DIR_WEST;
+ }
+ }
+ else
+ {
+ retval = DIR_SOUTH;
+ if (x2 < 0)
+ {
+ retval = DIR_NORTH;
+ }
+ }
+ return retval;
+}
diff --git a/src/malloc.c b/src/malloc.c
index 3901c5a35..ccb2f7d20 100644
--- a/src/malloc.c
+++ b/src/malloc.c
@@ -38,7 +38,7 @@ void PutMemBlockHeader(void *block, struct MemBlock *prev, struct MemBlock *next
void PutFirstMemBlockHeader(void *block, u32 size)
{
- PutMemBlockHeader(block, (struct MemBlock *)block, (struct MemBlock *)block, size - 16);
+ PutMemBlockHeader(block, (struct MemBlock *)block, (struct MemBlock *)block, size - sizeof(struct MemBlock));
}
void *AllocInternal(void *heapStart, u32 size)
@@ -48,6 +48,7 @@ void *AllocInternal(void *heapStart, u32 size)
struct MemBlock *splitBlock;
u32 foundBlockSize;
+ // Alignment
if (size & 3)
size = 4 * ((size / 4) + 1);
@@ -58,7 +59,7 @@ void *AllocInternal(void *heapStart, u32 size)
foundBlockSize = pos->size;
if (foundBlockSize >= size) {
- if (foundBlockSize - size <= 31) {
+ if (foundBlockSize - size < 2 * sizeof(struct MemBlock)) {
// The block isn't much bigger than the requested size,
// so just use it.
pos->flag = TRUE;
diff --git a/sym_ewram.txt b/sym_ewram.txt
index dda072481..b9d1f6650 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -654,7 +654,7 @@ gUnknown_02032304: @ 2032304
gUnknown_02032306: @ 2032306
.space 0x2
-gUnknown_02032308: @ 2032308
+gLinkPlayerMapObjects: @ 2032308
.space 0x10
gUnknown_02032318: @ 2032318
@@ -663,7 +663,7 @@ gUnknown_02032318: @ 2032318
gMapHeader: @ 2037318
.space 0x1C
-gUnknown_02037334: @ 2037334
+gCamera: @ 2037334
.space 0xC
gUnknown_02037340: @ 2037340
@@ -675,10 +675,10 @@ gUnknown_02037348: @ 2037348
gUnknown_0203734C: @ 203734C
.space 0x4
-gUnknown_02037350: @ 2037350
+gMapObjects: @ 2037350
.space 0x240
-gUnknown_02037590: @ 2037590
+gPlayerAvatar: @ 2037590
.space 0x14
gUnknown_020375A4: @ 20375A4