summaryrefslogtreecommitdiff
path: root/src/field_map_obj_helpers.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/field_map_obj_helpers.c')
-rwxr-xr-xsrc/field_map_obj_helpers.c201
1 files changed, 31 insertions, 170 deletions
diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c
index de26cb034..b8efcfe72 100755
--- a/src/field_map_obj_helpers.c
+++ b/src/field_map_obj_helpers.c
@@ -529,16 +529,17 @@ void DoRippleFieldEffect(struct MapObject *mapObject, struct Sprite *sprite)
FieldEffectStart(FLDEFF_RIPPLE);
}
-#ifdef NONMATCHING
bool32 sub_8097E50(struct MapObject *mapObject, struct Sprite *sprite)
{
+ u32 one;
bool32 ableToStore = FALSE;
if (gUnknown_020375B8 == NULL)
{
gUnknown_020375B8 = AllocZeroed(0x14);
gUnknown_020375B8[0] = mapObject->localId;
- gUnknown_020375B8[16] = 1;
- ableToStore = TRUE;
+ // needed to match
+ gUnknown_020375B8[16] = (one = 1);
+ ableToStore = one;
}
else
{
@@ -561,7 +562,7 @@ bool32 sub_8097E50(struct MapObject *mapObject, struct Sprite *sprite)
{
gUnknown_020375B8[firstFreeSlot] = mapObject->localId;
gUnknown_020375B8[16]++;
- ableToStore = TRUE; // the nonmatching problem is that ableToStore == TRUE isnt being merged with the above ableToStore = TRUE assignment.
+ ableToStore = TRUE;
}
}
@@ -574,174 +575,34 @@ bool32 sub_8097E50(struct MapObject *mapObject, struct Sprite *sprite)
sprite->data[2] = 1;
return TRUE;
}
-#else
-__attribute__((naked))
-bool32 sub_8097E50(struct MapObject *mapObject, struct Sprite *sprite)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- adds r4, r0, 0\n\
- mov r8, r1\n\
- movs r0, 0\n\
- mov r12, r0\n\
- ldr r0, =gUnknown_020375B8\n\
- ldr r1, [r0]\n\
- adds r6, r0, 0\n\
- cmp r1, 0\n\
- bne _08097E80\n\
- movs r0, 0x14\n\
- bl AllocZeroed\n\
- str r0, [r6]\n\
- ldrb r1, [r4, 0x8]\n\
- strb r1, [r0]\n\
- ldr r1, [r6]\n\
- movs r0, 0x1\n\
- strb r0, [r1, 0x10]\n\
- b _08097ECC\n\
- .pool\n\
-_08097E80:\n\
- movs r2, 0x10\n\
- movs r5, 0\n\
- movs r1, 0\n\
- adds r3, r6, 0\n\
- b _08097E90\n\
-_08097E8A:\n\
- adds r0, r1, 0x1\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
-_08097E90:\n\
- cmp r1, 0xF\n\
- bhi _08097EB2\n\
- cmp r2, 0x10\n\
- bne _08097EA4\n\
- ldr r0, [r3]\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _08097EA4\n\
- adds r2, r1, 0\n\
-_08097EA4:\n\
- ldr r0, [r3]\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- ldrb r7, [r4, 0x8]\n\
- cmp r0, r7\n\
- bne _08097E8A\n\
- movs r5, 0x1\n\
-_08097EB2:\n\
- cmp r5, 0\n\
- bne _08097ECE\n\
- cmp r2, 0x10\n\
- beq _08097ECE\n\
- ldr r0, [r6]\n\
- adds r0, r2\n\
- ldrb r1, [r4, 0x8]\n\
- strb r1, [r0]\n\
- ldr r1, [r6]\n\
- ldrb r0, [r1, 0x10]\n\
- adds r0, 0x1\n\
- strb r0, [r1, 0x10]\n\
- movs r0, 0x1\n\
-_08097ECC:\n\
- mov r12, r0\n\
-_08097ECE:\n\
- mov r1, r12\n\
- cmp r1, 0x1\n\
- bne _08097EE0\n\
- ldrb r0, [r4, 0x1]\n\
- movs r1, 0x10\n\
- orrs r0, r1\n\
- movs r1, 0x2\n\
- orrs r0, r1\n\
- strb r0, [r4, 0x1]\n\
-_08097EE0:\n\
- movs r0, 0x1\n\
- mov r7, r8\n\
- strh r0, [r7, 0x32]\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided");
-}
-#endif
-
-// this function is very similar to the above one and I don't want to decompile this one until the above is matching.
-__attribute__((naked))
+
bool32 sub_8097EF0(struct MapObject *mapObject, struct Sprite *sprite)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- adds r6, r0, 0\n\
- mov r8, r1\n\
- movs r0, 0x1\n\
- strh r0, [r1, 0x32]\n\
- ldr r5, =gUnknown_020375B8\n\
- ldr r0, [r5]\n\
- cmp r0, 0\n\
- beq _08097F68\n\
- movs r7, 0\n\
- adds r0, r6, 0\n\
- bl sub_8097F78\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x10\n\
- beq _08097F28\n\
- ldr r0, [r5]\n\
- adds r0, r1\n\
- movs r1, 0\n\
- strb r1, [r0]\n\
- ldr r1, [r5]\n\
- ldrb r0, [r1, 0x10]\n\
- subs r0, 0x1\n\
- strb r0, [r1, 0x10]\n\
- movs r7, 0x1\n\
-_08097F28:\n\
- ldr r0, [r5]\n\
- ldrb r4, [r0, 0x10]\n\
- cmp r4, 0\n\
- bne _08097F36\n\
- bl Free\n\
- str r4, [r5]\n\
-_08097F36:\n\
- cmp r7, 0x1\n\
- bne _08097F68\n\
- ldrb r0, [r6, 0x5]\n\
- bl GetFieldObjectGraphicsInfo\n\
- ldrb r1, [r0, 0xC]\n\
- lsls r1, 25\n\
- lsrs r1, 31\n\
- lsls r1, 4\n\
- ldrb r2, [r6, 0x1]\n\
- movs r0, 0x11\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- movs r1, 0x3\n\
- negs r1, r1\n\
- ands r0, r1\n\
- strb r0, [r6, 0x1]\n\
- mov r2, r8\n\
- adds r2, 0x2C\n\
- ldrb r1, [r2]\n\
- movs r0, 0x41\n\
- negs r0, r0\n\
- ands r0, r1\n\
- strb r0, [r2]\n\
-_08097F68:\n\
- movs r0, 0x1\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .pool\n\
- .syntax divided");
+ bool32 ableToStore;
+ u8 id;
+
+ sprite->data[2] = 1;
+ if (gUnknown_020375B8 != NULL)
+ {
+ ableToStore = FALSE;
+ id = sub_8097F78(mapObject);
+ if (id != 16)
+ {
+ gUnknown_020375B8[id] = 0;
+ gUnknown_020375B8[16]--;
+ ableToStore = TRUE;
+ }
+ if (gUnknown_020375B8[16] == 0)
+ FREE_AND_SET_NULL(gUnknown_020375B8);
+ if (ableToStore == TRUE)
+ {
+ mapObject->mapobj_bit_12 = GetFieldObjectGraphicsInfo(mapObject->graphicsId)->inanimate;
+ mapObject->mapobj_bit_9 = 0;
+ sprite->animPaused = 0;
+ }
+ }
+
+ return TRUE;
}
u8 sub_8097F78(struct MapObject *mapObject)