A couple more map object callbacks

This commit is contained in:
PikalaxALT
2017-05-25 08:46:38 -04:00
parent e033d2ba14
commit fc8cc3767f
3 changed files with 88 additions and 317 deletions

View File

@@ -629,316 +629,6 @@ _0805F8DC: .4byte gUnknown_0836DC09
.section .text_fmocb2_asm
thumb_func_start sub_805F8E0
sub_805F8E0: @ 805F8E0
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, _0805F8FC @ =gMapObjects
adds r0, r2
ldr r2, _0805F900 @ =sub_805F904
bl meta_step
pop {r0}
bx r0
.align 2, 0
_0805F8FC: .4byte gMapObjects
_0805F900: .4byte sub_805F904
thumb_func_end sub_805F8E0
thumb_func_start sub_805F904
sub_805F904: @ 805F904
push {r4,lr}
ldr r3, _0805F920 @ =gUnknown_083755C0
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
.align 2, 0
_0805F920: .4byte gUnknown_083755C0
thumb_func_end sub_805F904
thumb_func_start mss_08062EA4
mss_08062EA4: @ 805F924
push {r4-r7,lr}
adds r6, r0, 0
adds r7, r1, 0
ldr r2, _0805F948 @ =gMapObjects
ldr r3, _0805F94C @ =gPlayerAvatar
ldrb r1, [r3, 0x5]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
adds r0, r2
ldrb r0, [r0, 0x1C]
cmp r0, 0xFF
beq _0805F944
ldrb r0, [r3, 0x3]
cmp r0, 0x2
bne _0805F950
_0805F944:
movs r0, 0
b _0805F978
.align 2, 0
_0805F948: .4byte gMapObjects
_0805F94C: .4byte gPlayerAvatar
_0805F950:
ldr r5, _0805F980 @ =gUnknown_08375594
bl player_get_x22
adds r4, r0, 0
lsls r4, 24
lsrs r4, 22
adds r4, r5
bl player_get_direction_upper_nybble
adds r2, r0, 0
lsls r2, 24
lsrs r2, 24
ldr r3, _0805F984 @ =MetatileBehavior_IsPokeGrass
ldr r4, [r4]
adds r0, r6, 0
adds r1, r7, 0
bl _call_via_r4
lsls r0, 24
lsrs r0, 24
_0805F978:
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0805F980: .4byte gUnknown_08375594
_0805F984: .4byte MetatileBehavior_IsPokeGrass
thumb_func_end mss_08062EA4
thumb_func_start FieldObjectCB_TreeDisguise
FieldObjectCB_TreeDisguise: @ 805F988
push {r4-r6,lr}
adds r5, r0, 0
movs r1, 0x2E
ldrsh r0, [r5, r1]
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
ldr r0, _0805F9EC @ =gMapObjects
adds r4, r1, r0
adds r6, r4, 0
adds r6, 0x21
ldrb r0, [r6]
cmp r0, 0
beq _0805F9B0
cmp r0, 0x1
bne _0805F9D0
movs r1, 0x3C
ldrsh r0, [r5, r1]
cmp r0, 0
bne _0805F9D0
_0805F9B0:
ldr r1, _0805F9F0 @ =gUnknown_0202FF84
adds r2, r1, 0x4
adds r3, r1, 0
adds r3, 0x8
adds r0, r4, 0
bl FieldObjectGetLocalIdAndMap
movs r0, 0x1C
bl FieldEffectStart
strb r0, [r4, 0x1A]
movs r0, 0x1
strb r0, [r6]
ldrh r0, [r5, 0x3C]
adds r0, 0x1
strh r0, [r5, 0x3C]
_0805F9D0:
movs r0, 0x2E
ldrsh r1, [r5, r0]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
ldr r1, _0805F9EC @ =gMapObjects
adds r0, r1
ldr r2, _0805F9F4 @ =sub_805F9F8
adds r1, r5, 0
bl meta_step
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0805F9EC: .4byte gMapObjects
_0805F9F0: .4byte gUnknown_0202FF84
_0805F9F4: .4byte sub_805F9F8
thumb_func_end FieldObjectCB_TreeDisguise
thumb_func_start sub_805F9F8
sub_805F9F8: @ 805F9F8
push {lr}
bl npc_reset
movs r0, 0
pop {r1}
bx r1
thumb_func_end sub_805F9F8
thumb_func_start FieldObjectCB_MountainDisguise
FieldObjectCB_MountainDisguise: @ 805FA04
push {r4-r6,lr}
adds r5, r0, 0
movs r1, 0x2E
ldrsh r0, [r5, r1]
lsls r1, r0, 3
adds r1, r0
lsls r1, 2
ldr r0, _0805FA68 @ =gMapObjects
adds r4, r1, r0
adds r6, r4, 0
adds r6, 0x21
ldrb r0, [r6]
cmp r0, 0
beq _0805FA2C
cmp r0, 0x1
bne _0805FA4C
movs r1, 0x3C
ldrsh r0, [r5, r1]
cmp r0, 0
bne _0805FA4C
_0805FA2C:
ldr r1, _0805FA6C @ =gUnknown_0202FF84
adds r2, r1, 0x4
adds r3, r1, 0
adds r3, 0x8
adds r0, r4, 0
bl FieldObjectGetLocalIdAndMap
movs r0, 0x1D
bl FieldEffectStart
strb r0, [r4, 0x1A]
movs r0, 0x1
strb r0, [r6]
ldrh r0, [r5, 0x3C]
adds r0, 0x1
strh r0, [r5, 0x3C]
_0805FA4C:
movs r0, 0x2E
ldrsh r1, [r5, r0]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
ldr r1, _0805FA68 @ =gMapObjects
adds r0, r1
ldr r2, _0805FA70 @ =sub_805F9F8
adds r1, r5, 0
bl meta_step
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0805FA68: .4byte gMapObjects
_0805FA6C: .4byte gUnknown_0202FF84
_0805FA70: .4byte sub_805F9F8
thumb_func_end FieldObjectCB_MountainDisguise
thumb_func_start FieldObjectCB_Hidden1
FieldObjectCB_Hidden1: @ 805FA74
push {r4,lr}
adds r3, r0, 0
movs r1, 0x3C
ldrsh r0, [r3, r1]
ldr r4, _0805FAD0 @ =gMapObjects
cmp r0, 0
bne _0805FAB4
movs r0, 0x2E
ldrsh r1, [r3, r0]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
adds r0, r4
ldrb r1, [r0, 0x3]
movs r2, 0x4
orrs r1, r2
strb r1, [r0, 0x3]
adds r2, r3, 0
adds r2, 0x42
ldrb r1, [r2]
movs r0, 0x3F
ands r0, r1
movs r1, 0x80
orrs r0, r1
strb r0, [r2]
ldrb r0, [r3, 0x5]
movs r1, 0xC
orrs r0, r1
strb r0, [r3, 0x5]
ldrh r0, [r3, 0x3C]
adds r0, 0x1
strh r0, [r3, 0x3C]
_0805FAB4:
movs r0, 0x2E
ldrsh r1, [r3, r0]
lsls r0, r1, 3
adds r0, r1
lsls r0, 2
adds r0, r4
ldr r2, _0805FAD4 @ =sub_805FAD8
adds r1, r3, 0
bl meta_step
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0805FAD0: .4byte gMapObjects
_0805FAD4: .4byte sub_805FAD8
thumb_func_end FieldObjectCB_Hidden1
thumb_func_start sub_805FAD8
sub_805FAD8: @ 805FAD8
push {r4,lr}
ldr r3, _0805FAF4 @ =gUnknown_083755CC
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
.align 2, 0
_0805FAF4: .4byte gUnknown_083755CC
thumb_func_end sub_805FAD8
thumb_func_start sub_805FAF8
sub_805FAF8: @ 805FAF8
push {lr}
bl npc_reset
movs r0, 0
pop {r1}
bx r1
thumb_func_end sub_805FAF8
thumb_func_start sub_805FB04
sub_805FB04: @ 805FB04
push {r4,lr}
adds r4, r1, 0
bl FieldObjectExecRegularAnim
lsls r0, 24
cmp r0, 0
beq _0805FB16
movs r0, 0
strh r0, [r4, 0x30]
_0805FB16:
movs r0, 0
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_805FB04
thumb_func_start sub_805FB20
sub_805FB20: @ 805FB20
push {lr}

View File

@@ -89,5 +89,7 @@ extern struct CameraSomething gUnknown_03004880;
extern u16 gUnknown_03004898;
extern u16 gUnknown_0300489C;
extern u32 gUnknown_0202FF84[];
int state_to_direction(u8, u8, u8);
#endif // GUARD_FIELD_MAP_OBJ_H

View File

@@ -13,6 +13,7 @@
#include "rng.h"
#include "sprite.h"
#include "field_camera.h"
#include "metatile_behavior.h"
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36];
@@ -3195,7 +3196,7 @@ u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite
return 1;
}
extern u8 (*const gUnknown_08375594[])(struct MapObject *, struct Sprite *, u8, u8);
extern u8 (*const gUnknown_08375594[])(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -3203,7 +3204,7 @@ u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite)
{
return 0;
}
return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), 0);
return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), NULL);
}
u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite)
@@ -3251,12 +3252,90 @@ u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3
}
#endif
void FieldObjectCB_TreeDisguise(struct Sprite *sprite);
void FieldObjectCB_MountainDisguise(struct Sprite *sprite);
asm(".section .text_fmocb2_c\n");
void sub_805F8E0(struct Sprite *sprite);
void FieldObjectCB_Hidden1(struct Sprite *sprite);
fieldmap_object_cb(sub_805F8E0, sub_805F904, gUnknown_083755C0);
u8 mss_08062EA4(struct MapObject *mapObject, struct Sprite *sprite)
{
if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2)
{
return 0;
}
return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), MetatileBehavior_IsPokeGrass);
}
u8 sub_805F9F8(struct MapObject *, struct Sprite *);
void FieldObjectCB_TreeDisguise(struct Sprite *sprite)
{
struct MapObject *mapObject;
mapObject = &gMapObjects[sprite->data0];
if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0))
{
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]);
mapObject->mapobj_unk_1A = FieldEffectStart(0x1c);
mapObject->mapobj_unk_21 = 1;
sprite->data7 ++;
}
meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8);
}
u8 sub_805F9F8(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
return 0;
}
void FieldObjectCB_MountainDisguise(struct Sprite *sprite)
{
struct MapObject *mapObject;
mapObject = &gMapObjects[sprite->data0];
if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0))
{
FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]);
mapObject->mapobj_unk_1A = FieldEffectStart(0x1d);
mapObject->mapobj_unk_21 = 1;
sprite->data7 ++;
}
meta_step(&gMapObjects[sprite->data0], sprite, sub_805F9F8);
}
u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite);
extern u8 (*const gUnknown_083755CC[])(struct MapObject *, struct Sprite *);
void FieldObjectCB_Hidden1(struct Sprite *sprite)
{
if (sprite->data7 == 0)
{
gMapObjects[sprite->data0].mapobj_bit_26 = 1;
sprite->subspriteMode = 2;
sprite->oam.priority = 3;
sprite->data7 ++;
}
meta_step(&gMapObjects[sprite->data0], sprite, sub_805FAD8);
}
u8 sub_805FAD8(struct MapObject *mapObject, struct Sprite *sprite)
{
return gUnknown_083755CC[sprite->data1](mapObject, sprite);
}
u8 sub_805FAF8(struct MapObject *mapObject, struct Sprite *sprite)
{
npc_reset(mapObject, sprite);
return 0;
}
u8 sub_805FB04(struct MapObject *mapObject, struct Sprite *sprite)
{
if (FieldObjectExecRegularAnim(mapObject, sprite))
{
sprite->data1 = 0;
}
return 0;
}
void sub_805FB20(struct Sprite *sprite);
void sub_805FB90(struct Sprite *sprite);
void sub_805FC00(struct Sprite *sprite);