diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2018-02-18 19:20:50 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-18 19:20:50 -0600 |
commit | 2e21a867487e2187a954a351f775bd3f3a9535b1 (patch) | |
tree | e57f9f6851404a7591cffa7bb7842d2fc6b2d8da /src/field/event_object_movement.c | |
parent | adac76c8370b86176a52d8ecb2e349e2be13f8ba (diff) | |
parent | b47dffc5df147adcd241df4bf11fa161d84af4f4 (diff) |
Merge pull request #564 from camthesaxman/decompile_debug
decompile debug code
Diffstat (limited to 'src/field/event_object_movement.c')
-rw-r--r-- | src/field/event_object_movement.c | 794 |
1 files changed, 99 insertions, 695 deletions
diff --git a/src/field/event_object_movement.c b/src/field/event_object_movement.c index 1236cd9b6..7a5f62456 100644 --- a/src/field/event_object_movement.c +++ b/src/field/event_object_movement.c @@ -1908,7 +1908,7 @@ static u16 gUnknown_030005A6; struct MapObject gMapObjects[16]; #if DEBUG -u8 gUnknown_Debug_03004BC0[4]; // unknown type +u8 gUnknown_Debug_03004BC0; #endif void npc_clear_ids_and_state(struct MapObject *mapObj) @@ -1920,48 +1920,16 @@ void npc_clear_ids_and_state(struct MapObject *mapObj) mapObj->mapobj_unk_1C = 0xFF; } -#if DEBUG -__attribute__((naked)) -void npcs_clear_ids_and_state() -{ - asm( - " push {r4, r5, lr}\n" - " mov r4, #0x0\n" - " ldr r5, ._2 @ gMapObjects\n" - "._1:\n" - " lsl r0, r4, #0x3\n" - " add r0, r0, r4\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r5\n" - " bl npc_clear_ids_and_state\n" - " add r0, r4, #1\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " cmp r4, #0xf\n" - " bls ._1 @cond_branch\n" - " ldr r1, ._2 + 4 @ gUnknown_Debug_03004BC0\n" - " mov r0, #0x0\n" - " strb r0, [r1]\n" - " pop {r4, r5}\n" - " pop {r0}\n" - " bx r0\n" - "._3:\n" - " .align 2, 0\n" - "._2:\n" - " .word gMapObjects\n" - " .word gUnknown_Debug_03004BC0\n" - "\n" - ); -} -#else void npcs_clear_ids_and_state(void) { u8 i; for (i = 0; i < 16; i++) npc_clear_ids_and_state(&gMapObjects[i]); -} +#if DEBUG + gUnknown_Debug_03004BC0 = 0; #endif +} void sub_805AA98(void) { @@ -2004,7 +1972,7 @@ u8 sub_805AB54(void) u8 GetFieldObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { - if (localId <= 0xFE) + if (localId < 255) return GetFieldObjectIdByLocalIdAndMapInternal(localId, mapNum, mapGroup); else return GetFieldObjectIdByLocalId(localId); @@ -2055,190 +2023,80 @@ u8 GetFieldObjectIdByLocalId(u8 localId) return 16; } -#if DEBUG -__attribute__((naked)) -u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r9\n" - " mov r6, r8\n" - " push {r6, r7}\n" - " add sp, sp, #0xfffffffc\n" - " add r5, r0, #0\n" - " lsl r1, r1, #0x18\n" - " lsr r6, r1, #0x18\n" - " lsl r2, r2, #0x18\n" - " lsr r7, r2, #0x18\n" - " ldrb r0, [r5]\n" - " add r1, r6, #0\n" - " add r2, r7, #0\n" - " mov r3, sp\n" - " bl GetAvailableFieldObjectSlot\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " beq ._35 @cond_branch\n" - " mov r0, #0x10\n" - " b ._36\n" - "._35:\n" - " mov r0, sp\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._40 @ gMapObjects\n" - " add r4, r0, r1\n" - " add r0, r4, #0\n" - " bl npc_clear_ids_and_state\n" - " ldrh r3, [r5, #0x4]\n" - " add r3, r3, #0x7\n" - " lsl r3, r3, #0x10\n" - " lsr r3, r3, #0x10\n" - " ldrh r2, [r5, #0x6]\n" - " add r2, r2, #0x7\n" - " lsl r2, r2, #0x10\n" - " lsr r2, r2, #0x10\n" - " ldrb r0, [r4]\n" - " mov r1, #0x1\n" - " orr r0, r0, r1\n" - " mov r1, #0x4\n" - " orr r0, r0, r1\n" - " strb r0, [r4]\n" - " ldrb r0, [r5, #0x1]\n" - " strb r0, [r4, #0x5]\n" - " ldrb r0, [r5, #0x9]\n" - " strb r0, [r4, #0x6]\n" - " ldrb r0, [r5]\n" - " strb r0, [r4, #0x8]\n" - " strb r6, [r4, #0x9]\n" - " strb r7, [r4, #0xa]\n" - " strh r3, [r4, #0xc]\n" - " strh r2, [r4, #0xe]\n" - " strh r3, [r4, #0x10]\n" - " strh r2, [r4, #0x12]\n" - " strh r3, [r4, #0x14]\n" - " strh r2, [r4, #0x16]\n" - " ldrb r0, [r5, #0x8]\n" - " mov r7, #0xf\n" - " add r1, r7, #0\n" - " and r1, r1, r0\n" - " ldrb r2, [r4, #0xb]\n" - " mov r0, #0x10\n" - " neg r0, r0\n" - " mov r8, r0\n" - " and r0, r0, r2\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0xb]\n" - " ldrb r1, [r5, #0x8]\n" - " lsl r1, r1, #0x4\n" - " and r0, r0, r7\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0xb]\n" - " ldrb r1, [r5, #0xa]\n" - " lsl r1, r1, #0x1c\n" - " mov r0, #0xf\n" - " mov r9, r0\n" - " lsr r1, r1, #0x1c\n" - " ldrb r2, [r4, #0x19]\n" - " mov r0, r8\n" - " and r0, r0, r2\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0x19]\n" - " ldrb r1, [r5, #0xa]\n" - " lsr r1, r1, #0x4\n" - " lsl r1, r1, #0x4\n" - " and r0, r0, r7\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0x19]\n" - " ldrh r0, [r5, #0xc]\n" - " strb r0, [r4, #0x7]\n" - " ldrh r0, [r5, #0xe]\n" - " strb r0, [r4, #0x1d]\n" - " ldr r1, ._40 + 4 @ gUnknown_0836DC09\n" - " ldrb r0, [r5, #0x9]\n" - " add r0, r0, r1\n" - " ldrb r1, [r0]\n" - " add r0, r4, #0\n" - " add r0, r0, #0x20\n" - " strb r1, [r0]\n" - " ldrb r1, [r0]\n" - " add r0, r4, #0\n" - " bl FieldObjectSetDirection\n" - " add r0, r4, #0\n" - " bl FieldObjectHandleDynamicGraphicsId\n" - " ldr r1, ._40 + 8 @ gUnknown_0836DBBC\n" - " ldrb r0, [r4, #0x6]\n" - " add r0, r0, r1\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " beq ._39 @cond_branch\n" - " ldrb r2, [r4, #0x19]\n" - " add r0, r7, #0\n" - " and r0, r0, r2\n" - " cmp r0, #0\n" - " bne ._38 @cond_branch\n" - " lsl r0, r2, #0x1c\n" - " lsr r0, r0, #0x1c\n" - " add r0, r0, #0x1\n" - " mov r1, r9\n" - " and r0, r0, r1\n" - " mov r1, r8\n" - " and r1, r1, r2\n" - " orr r1, r1, r0\n" - " strb r1, [r4, #0x19]\n" - "._38:\n" - " ldrb r2, [r4, #0x19]\n" - " mov r0, #0xf0\n" - " and r0, r0, r2\n" - " cmp r0, #0\n" - " bne ._39 @cond_branch\n" - " lsr r1, r2, #0x4\n" - " add r1, r1, #0x1\n" - " lsl r1, r1, #0x4\n" - " add r0, r7, #0\n" - " and r0, r0, r2\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0x19]\n" - "._39:\n" - " ldr r1, ._40 + 12 @ gUnknown_Debug_03004BC0\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " mov r0, sp\n" - " ldrb r0, [r0]\n" - "._36:\n" - " add sp, sp, #0x4\n" - " pop {r3, r4}\n" - " mov r8, r3\n" - " mov r9, r4\n" - " pop {r4, r5, r6, r7}\n" - " pop {r1}\n" - " bx r1\n" - "._41:\n" - " .align 2, 0\n" - "._40:\n" - " .word gMapObjects\n" - " .word gUnknown_0836DC09\n" - " .word gUnknown_0836DBBC\n" - " .word gUnknown_Debug_03004BC0\n" - "\n" - ); -} -#else -#ifdef NONMATCHING +// The bitfield at 0x18 needs to be u16 for this function to match +struct MapObjectAlt +{ + /*0x00*/ u32 active:1; + u32 mapobj_bit_1:1; + u32 mapobj_bit_2:1; + u32 mapobj_bit_3:1; + u32 mapobj_bit_4:1; + u32 mapobj_bit_5:1; + u32 mapobj_bit_6:1; + u32 mapobj_bit_7:1; + /*0x01*/ u32 mapobj_bit_8:1; + u32 mapobj_bit_9:1; + u32 mapobj_bit_10:1; + u32 mapobj_bit_11:1; + u32 mapobj_bit_12:1; + u32 mapobj_bit_13:1; + u32 mapobj_bit_14:1; + u32 mapobj_bit_15:1; + /*0x02*/ u32 mapobj_bit_16:1; + u32 mapobj_bit_17:1; + u32 mapobj_bit_18:1; + u32 mapobj_bit_19:1; + u32 mapobj_bit_20:1; + u32 mapobj_bit_21:1; + u32 mapobj_bit_22:1; + u32 mapobj_bit_23:1; + /*0x03*/ u32 mapobj_bit_24:1; + u32 mapobj_bit_25:1; + u32 mapobj_bit_26:1; + u32 mapobj_bit_27:1; + u32 mapobj_bit_28:1; + u32 mapobj_bit_29:1; + u32 mapobj_bit_30:1; + u32 mapobj_bit_31:1; + /*0x04*/ u8 spriteId; + /*0x05*/ u8 graphicsId; + /*0x06*/ u8 animPattern; + /*0x07*/ u8 trainerType; + /*0x08*/ u8 localId; + /*0x09*/ u8 mapNum; + /*0x0A*/ u8 mapGroup; + /*0x0B*/ u8 mapobj_unk_0B_0:4; + u8 elevation:4; + /*0x0C*/ struct Coords16 coords1; + /*0x10*/ struct Coords16 coords2; + /*0x14*/ struct Coords16 coords3; + /*0x18*/ u16 mapobj_unk_18:4; //current direction? + /*0x18*/ u16 placeholder18:4; + /*0x19*/ u16 rangeX:4; + /*0x19*/ u16 rangeY:4; + /*0x1A*/ u8 mapobj_unk_1A; + /*0x1B*/ u8 mapobj_unk_1B; + /*0x1C*/ u8 mapobj_unk_1C; + /*0x1D*/ u8 trainerRange_berryTreeId; + /*0x1E*/ u8 mapobj_unk_1E; + /*0x1F*/ u8 mapobj_unk_1F; + /*0x20*/ u8 mapobj_unk_20; + /*0x21*/ u8 mapobj_unk_21; + /*0x22*/ u8 animId; + /*size = 0x24*/ +}; + u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) { - struct MapObject *mapObj; //TODO: resolve the mapobj_unk_19b weirdness + struct MapObjectAlt *mapObj; //TODO: resolve the mapobj_unk_19b weirdness u8 var; - u16 r3; - u16 r2; + s16 r3; + s16 r2; - //asm("nop"::"r"(b)); if (GetAvailableFieldObjectSlot(template->localId, b, c, &var) != 0) return 16; - //_0805ACCE - mapObj = &gMapObjects[var]; - npc_clear_ids_and_state(mapObj); + mapObj = (void *)&gMapObjects[var]; + npc_clear_ids_and_state((struct MapObject *)mapObj); r3 = template->x + 7; r2 = template->y + 7; mapObj->active = TRUE; @@ -2247,6 +2105,7 @@ u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 mapObj->animPattern = template->movementType; mapObj->localId = template->localId; mapObj->mapNum = b; + asm("":::"r6"); mapObj->mapGroup = c; mapObj->coords1.x = r3; mapObj->coords1.y = r2; @@ -2256,186 +2115,26 @@ u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 mapObj->coords3.y = r2; mapObj->mapobj_unk_0B_0 = template->elevation; mapObj->elevation = template->elevation; - mapObj->range.as_nybbles.x = template->unkA_0; - mapObj->range.as_nybbles.y = template->unkA_4; + mapObj->rangeX = template->unkA_0; + mapObj->rangeY = template->unkA_4; mapObj->trainerType = template->unkC; mapObj->trainerRange_berryTreeId = template->unkE; mapObj->mapobj_unk_20 = gUnknown_0836DC09[template->movementType]; FieldObjectSetDirection((struct MapObject *)mapObj, mapObj->mapobj_unk_20); - FieldObjectHandleDynamicGraphicsId(mapObj); - //asm("":::"r5","r6"); + asm("":::"r5","r6"); + FieldObjectHandleDynamicGraphicsId((struct MapObject *)mapObj); if (gUnknown_0836DBBC[mapObj->animPattern] != 0) { - if (mapObj->range.as_nybbles.x == 0) - mapObj->range.as_nybbles.x++; - if (mapObj->range.as_nybbles.y == 0) - mapObj->range.as_nybbles.y++; + if (mapObj->rangeX == 0) + mapObj->rangeX++; + if (mapObj->rangeY == 0) + mapObj->rangeY++; } +#if DEBUG + gUnknown_Debug_03004BC0++; +#endif return var; } -#else -__attribute__((naked)) -u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - sub sp, 0x4\n\ - adds r5, r0, 0\n\ - lsls r1, 24\n\ - lsrs r6, r1, 24\n\ - lsls r2, 24\n\ - lsrs r7, r2, 24\n\ - ldrb r0, [r5]\n\ - adds r1, r6, 0\n\ - adds r2, r7, 0\n\ - mov r3, sp\n\ - bl GetAvailableFieldObjectSlot\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0805ACCE\n\ - movs r0, 0x10\n\ - b _0805ADC2\n\ -_0805ACCE:\n\ - mov r0, sp\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 3\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, _0805ADD0 @ =gMapObjects\n\ - adds r4, r0, r1\n\ - adds r0, r4, 0\n\ - bl npc_clear_ids_and_state\n\ - ldrh r3, [r5, 0x4]\n\ - adds r3, 0x7\n\ - lsls r3, 16\n\ - lsrs r3, 16\n\ - ldrh r2, [r5, 0x6]\n\ - adds r2, 0x7\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - ldrb r0, [r4]\n\ - movs r1, 0x1\n\ - orrs r0, r1\n\ - movs r1, 0x4\n\ - orrs r0, r1\n\ - strb r0, [r4]\n\ - ldrb r0, [r5, 0x1]\n\ - strb r0, [r4, 0x5]\n\ - ldrb r0, [r5, 0x9]\n\ - strb r0, [r4, 0x6]\n\ - ldrb r0, [r5]\n\ - strb r0, [r4, 0x8]\n\ - strb r6, [r4, 0x9]\n\ - strb r7, [r4, 0xA]\n\ - strh r3, [r4, 0xC]\n\ - strh r2, [r4, 0xE]\n\ - strh r3, [r4, 0x10]\n\ - strh r2, [r4, 0x12]\n\ - strh r3, [r4, 0x14]\n\ - strh r2, [r4, 0x16]\n\ - ldrb r0, [r5, 0x8]\n\ - movs r7, 0xF\n\ - adds r1, r7, 0\n\ - ands r1, r0\n\ - ldrb r2, [r4, 0xB]\n\ - movs r0, 0x10\n\ - negs r0, r0\n\ - mov r8, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r4, 0xB]\n\ - ldrb r1, [r5, 0x8]\n\ - lsls r1, 4\n\ - ands r0, r7\n\ - orrs r0, r1\n\ - strb r0, [r4, 0xB]\n\ - ldrb r1, [r5, 0xA]\n\ - lsls r1, 28\n\ - movs r0, 0xF\n\ - mov r9, r0\n\ - lsrs r1, 28\n\ - ldrb r2, [r4, 0x19]\n\ - mov r0, r8\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x19]\n\ - ldrb r1, [r5, 0xA]\n\ - lsrs r1, 4\n\ - lsls r1, 4\n\ - ands r0, r7\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x19]\n\ - ldrh r0, [r5, 0xC]\n\ - strb r0, [r4, 0x7]\n\ - ldrh r0, [r5, 0xE]\n\ - strb r0, [r4, 0x1D]\n\ - ldr r1, _0805ADD4 @ =gUnknown_0836DC09\n\ - ldrb r0, [r5, 0x9]\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - adds r0, r4, 0\n\ - adds r0, 0x20\n\ - strb r1, [r0]\n\ - ldrb r1, [r0]\n\ - adds r0, r4, 0\n\ - bl FieldObjectSetDirection\n\ - adds r0, r4, 0\n\ - bl FieldObjectHandleDynamicGraphicsId\n\ - ldr r1, _0805ADD8 @ =gUnknown_0836DBBC\n\ - ldrb r0, [r4, 0x6]\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _0805ADBE\n\ - ldrb r2, [r4, 0x19]\n\ - adds r0, r7, 0\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - bne _0805ADA6\n\ - lsls r0, r2, 28\n\ - lsrs r0, 28\n\ - adds r0, 0x1\n\ - mov r1, r9\n\ - ands r0, r1\n\ - mov r1, r8\n\ - ands r1, r2\n\ - orrs r1, r0\n\ - strb r1, [r4, 0x19]\n\ -_0805ADA6:\n\ - ldrb r2, [r4, 0x19]\n\ - movs r0, 0xF0\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - bne _0805ADBE\n\ - lsrs r1, r2, 4\n\ - adds r1, 0x1\n\ - lsls r1, 4\n\ - adds r0, r7, 0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x19]\n\ -_0805ADBE:\n\ - mov r0, sp\n\ - ldrb r0, [r0]\n\ -_0805ADC2:\n\ - add sp, 0x4\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_0805ADD0: .4byte gMapObjects\n\ -_0805ADD4: .4byte gUnknown_0836DC09\n\ -_0805ADD8: .4byte gUnknown_0836DBBC\n\ - .syntax divided\n"); -} -#endif -#endif u8 sub_805ADDC(u8 localId) { @@ -2475,38 +2174,14 @@ u8 GetAvailableFieldObjectSlot(u16 a, u8 b, u8 c, u8 *d) return 0; } -#if DEBUG -__attribute__((naked)) -void RemoveFieldObject(struct MapObject *mapObject) -{ - asm( - " push {lr}\n" - " ldrb r2, [r0]\n" - " mov r1, #0x2\n" - " neg r1, r1\n" - " and r1, r1, r2\n" - " strb r1, [r0]\n" - " bl RemoveFieldObjectInternal\n" - " ldr r1, ._72 @ gUnknown_Debug_03004BC0\n" - " ldrb r0, [r1]\n" - " sub r0, r0, #0x1\n" - " strb r0, [r1]\n" - " pop {r0}\n" - " bx r0\n" - "._73:\n" - " .align 2, 0\n" - "._72:\n" - " .word gUnknown_Debug_03004BC0\n" - "\n" - ); -} -#else void RemoveFieldObject(struct MapObject *mapObject) { mapObject->active = FALSE; RemoveFieldObjectInternal(mapObject); -} +#if DEBUG + gUnknown_Debug_03004BC0--; #endif +} void RemoveFieldObjectByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { @@ -2539,226 +2214,6 @@ void npc_hide_all_but_player(void) } } -#if DEBUG -__attribute__((naked)) -u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, u8 c, u8 d, s16 e, s16 f) -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, sl\n" - " mov r6, r9\n" - " mov r5, r8\n" - " push {r5, r6, r7}\n" - " add r7, r1, #0\n" - " add r1, r2, #0\n" - " add r2, r3, #0\n" - " ldr r3, [sp, #0x20]\n" - " ldr r4, [sp, #0x24]\n" - " lsl r1, r1, #0x18\n" - " lsr r1, r1, #0x18\n" - " lsl r2, r2, #0x18\n" - " lsr r2, r2, #0x18\n" - " lsl r3, r3, #0x10\n" - " lsr r3, r3, #0x10\n" - " mov r9, r3\n" - " lsl r4, r4, #0x10\n" - " lsr r4, r4, #0x10\n" - " mov sl, r4\n" - " bl InitFieldObjectStateFromTemplate\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " mov r8, r0\n" - " cmp r0, #0x10\n" - " bne ._83 @cond_branch\n" - " mov r0, #0x10\n" - " b ._92\n" - "._83:\n" - " mov r0, r8\n" - " lsl r4, r0, #0x3\n" - " add r0, r4, r0\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._87 @ gMapObjects\n" - " add r5, r0, r1\n" - " ldrb r0, [r5, #0x5]\n" - " bl GetFieldObjectGraphicsInfo\n" - " add r6, r0, #0\n" - " ldrb r1, [r6, #0xc]\n" - " mov r0, #0xf\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._85 @cond_branch\n" - " ldrh r0, [r6, #0x2]\n" - " lsl r1, r1, #0x1c\n" - " lsr r1, r1, #0x1c\n" - " bl npc_load_two_palettes__no_record\n" - " b ._89\n" - "._88:\n" - " .align 2, 0\n" - "._87:\n" - " .word gMapObjects\n" - "._85:\n" - " cmp r0, #0xa\n" - " bne ._89 @cond_branch\n" - " ldrh r0, [r6, #0x2]\n" - " lsl r1, r1, #0x1c\n" - " lsr r1, r1, #0x1c\n" - " bl npc_load_two_palettes__and_record\n" - "._89:\n" - " ldrb r0, [r5, #0x6]\n" - " cmp r0, #0x4c\n" - " bne ._90 @cond_branch\n" - " ldrb r0, [r5, #0x1]\n" - " mov r1, #0x20\n" - " orr r0, r0, r1\n" - " strb r0, [r5, #0x1]\n" - "._90:\n" - " ldr r1, ._93 @ 0xffff\n" - " add r0, r1, #0\n" - " strh r0, [r7, #0x2]\n" - " add r0, r7, #0\n" - " mov r1, #0x0\n" - " mov r2, #0x0\n" - " mov r3, #0x0\n" - " bl CreateSprite\n" - " lsl r0, r0, #0x18\n" - " lsr r7, r0, #0x18\n" - " cmp r7, #0x40\n" - " bne ._91 @cond_branch\n" - " ldr r1, ._93 + 4 @ gUnknown_Debug_03004BC0\n" - " ldrb r0, [r1]\n" - " sub r0, r0, #0x1\n" - " strb r0, [r1]\n" - " ldr r0, ._93 + 8 @ gMapObjects\n" - " mov r2, r8\n" - " add r1, r4, r2\n" - " lsl r1, r1, #0x2\n" - " add r1, r1, r0\n" - " ldrb r2, [r1]\n" - " mov r0, #0x2\n" - " neg r0, r0\n" - " and r0, r0, r2\n" - " strb r0, [r1]\n" - " mov r0, #0x10\n" - " b ._92\n" - "._94:\n" - " .align 2, 0\n" - "._93:\n" - " .word 0xffff\n" - " .word gUnknown_Debug_03004BC0\n" - " .word gMapObjects\n" - "._91:\n" - " lsl r0, r7, #0x4\n" - " add r0, r0, r7\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._96 @ gSprites\n" - " add r4, r0, r1\n" - " mov r1, r9\n" - " lsl r0, r1, #0x10\n" - " asr r0, r0, #0x10\n" - " ldrh r2, [r5, #0x10]\n" - " add r0, r0, r2\n" - " lsl r0, r0, #0x10\n" - " asr r0, r0, #0x10\n" - " mov r2, sl\n" - " lsl r1, r2, #0x10\n" - " asr r1, r1, #0x10\n" - " ldrh r2, [r5, #0x12]\n" - " add r1, r1, r2\n" - " lsl r1, r1, #0x10\n" - " asr r1, r1, #0x10\n" - " add r2, r4, #0\n" - " add r2, r2, #0x20\n" - " add r3, r4, #0\n" - " add r3, r3, #0x22\n" - " bl sub_8060388\n" - " ldrh r0, [r6, #0x8]\n" - " lsl r0, r0, #0x10\n" - " asr r0, r0, #0x11\n" - " neg r0, r0\n" - " add r1, r4, #0\n" - " add r1, r1, #0x28\n" - " strb r0, [r1]\n" - " ldrh r0, [r6, #0xa]\n" - " lsl r0, r0, #0x10\n" - " asr r0, r0, #0x11\n" - " neg r0, r0\n" - " add r2, r4, #0\n" - " add r2, r2, #0x29\n" - " strb r0, [r2]\n" - " ldrh r0, [r4, #0x20]\n" - " add r0, r0, #0x8\n" - " strh r0, [r4, #0x20]\n" - " ldrh r1, [r4, #0x22]\n" - " add r1, r1, #0x10\n" - " mov r0, #0x0\n" - " ldsb r0, [r2, r0]\n" - " add r0, r0, r1\n" - " strh r0, [r4, #0x22]\n" - " ldrb r1, [r6, #0xc]\n" - " lsl r1, r1, #0x1c\n" - " lsr r1, r1, #0x18\n" - " ldrb r2, [r4, #0x5]\n" - " mov r0, #0xf\n" - " and r0, r0, r2\n" - " orr r0, r0, r1\n" - " strb r0, [r4, #0x5]\n" - " add r2, r4, #0\n" - " add r2, r2, #0x3e\n" - " ldrb r0, [r2]\n" - " mov r1, #0x2\n" - " orr r0, r0, r1\n" - " strb r0, [r2]\n" - " mov r0, r8\n" - " strh r0, [r4, #0x2e]\n" - " strb r7, [r5, #0x4]\n" - " ldrb r1, [r6, #0xc]\n" - " lsl r1, r1, #0x19\n" - " lsr r1, r1, #0x1f\n" - " lsl r1, r1, #0x4\n" - " ldrb r2, [r5, #0x1]\n" - " mov r0, #0x11\n" - " neg r0, r0\n" - " and r0, r0, r2\n" - " orr r0, r0, r1\n" - " strb r0, [r5, #0x1]\n" - " lsl r0, r0, #0x1b\n" - " cmp r0, #0\n" - " blt ._95 @cond_branch\n" - " ldrb r0, [r5, #0x18]\n" - " lsl r0, r0, #0x1c\n" - " lsr r0, r0, #0x1c\n" - " bl FieldObjectDirectionToImageAnimId\n" - " add r1, r0, #0\n" - " lsl r1, r1, #0x18\n" - " lsr r1, r1, #0x18\n" - " add r0, r4, #0\n" - " bl StartSpriteAnim\n" - "._95:\n" - " ldrb r0, [r5, #0xb]\n" - " lsr r0, r0, #0x4\n" - " add r1, r4, #0\n" - " mov r2, #0x1\n" - " bl SetObjectSubpriorityByZCoord\n" - " add r0, r5, #0\n" - " add r1, r4, #0\n" - " bl sub_80634D0\n" - " mov r0, r8\n" - "._92:\n" - " pop {r3, r4, r5}\n" - " mov r8, r3\n" - " mov r9, r4\n" - " mov sl, r5\n" - " pop {r4, r5, r6, r7}\n" - " pop {r1}\n" - " bx r1\n" - "._97:\n" - " .align 2, 0\n" - "._96:\n" - " .word gSprites\n" - "\n" - ); -} -#else u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, u8 c, u8 d, s16 e, s16 f) { u8 mapObjectId; @@ -2788,6 +2243,9 @@ u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate * spriteId = CreateSprite(sprTemplate, 0, 0, 0); if (spriteId == 64) { +#if DEBUG + gUnknown_Debug_03004BC0--; +#endif gMapObjects[mapObjectId].active = FALSE; return 16; } @@ -2808,7 +2266,6 @@ u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate * sub_80634D0(mapObject, sprite); return mapObjectId; } -#endif u8 SpawnFieldObject(struct MapObjectTemplate *mapObjTemplate, u8 b, u8 c, s16 d, s16 e) { @@ -3031,79 +2488,26 @@ void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject) void sub_805B75C(u8, s16, s16); -#if DEBUG -__attribute__((naked)) -void sub_805B710(u16 u161, u16 u162) -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r8\n" - " push {r7}\n" - " add r4, r0, #0\n" - " add r5, r1, #0\n" - " lsl r4, r4, #0x10\n" - " lsr r4, r4, #0x10\n" - " lsl r5, r5, #0x10\n" - " lsr r5, r5, #0x10\n" - " ldr r6, ._153 @ gUnknown_Debug_03004BC0\n" - " mov r0, #0x0\n" - " strb r0, [r6]\n" - " bl ClearPlayerAvatarInfo\n" - " mov r7, #0x0\n" - " ldr r0, ._153 + 4 @ gMapObjects\n" - " mov r8, r0\n" - " lsl r4, r4, #0x10\n" - " lsl r5, r5, #0x10\n" - "._152:\n" - " lsl r0, r7, #0x3\n" - " add r0, r0, r7\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r8\n" - " ldrb r0, [r0]\n" - " lsl r0, r0, #0x1f\n" - " cmp r0, #0\n" - " beq ._151 @cond_branch\n" - " add r0, r7, #0\n" - " asr r1, r4, #0x10\n" - " asr r2, r5, #0x10\n" - " bl sub_805B75C\n" - " ldrb r0, [r6]\n" - " add r0, r0, #0x1\n" - " strb r0, [r6]\n" - "._151:\n" - " add r0, r7, #1\n" - " lsl r0, r0, #0x18\n" - " lsr r7, r0, #0x18\n" - " cmp r7, #0xf\n" - " bls ._152 @cond_branch\n" - " bl sub_805AAB0\n" - " pop {r3}\n" - " mov r8, r3\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._154:\n" - " .align 2, 0\n" - "._153:\n" - " .word gUnknown_Debug_03004BC0\n" - " .word gMapObjects\n" - "\n" - ); -} -#else void sub_805B710(u16 a, u16 b) { u8 i; +#if DEBUG + gUnknown_Debug_03004BC0 = 0; +#endif ClearPlayerAvatarInfo(); for (i = 0; i < 16; i++) { if (gMapObjects[i].active) + { sub_805B75C(i, a, b); +#if DEBUG + gUnknown_Debug_03004BC0++; +#endif + } } sub_805AAB0(); } -#endif extern void SetPlayerAvatarFieldObjectIdAndObjectId(u8, u8); extern void sub_805B914(struct MapObject *); |