summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/braille_puzzles.c212
-rw-r--r--src/decoration.c111
-rwxr-xr-xsrc/field_map_obj_helpers.c201
-rw-r--r--src/tv.c158
4 files changed, 80 insertions, 602 deletions
diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c
index 55e75bfbf..35277fe87 100644
--- a/src/braille_puzzles.c
+++ b/src/braille_puzzles.c
@@ -25,7 +25,7 @@ enum
};
extern u8 gBraillePuzzleCallbackFlag;
-extern u8 gUnknown_085EFE74[][2];
+extern const u8 gUnknown_085EFE74[][2];
void SealedChamberShakingEffect(u8);
void sub_8179860(void);
@@ -375,37 +375,49 @@ bool8 FldEff_UsePuzzleEffect(void)
return FALSE;
}
-// can't get this one to match due to the weird macro-like varsets with strange bitshifting.
-// to note: 0x10000 is loaded in, and its obviously supposed to be 1, but i cant get 0x80 << 9 to be loaded in without using it directly.
-// maybe there's some way of writing it that works?
-#ifdef NONMATCHING
-// ShouldDoBrailleRegicePuzzle
bool8 ShouldDoBrailleRegicePuzzle(void)
{
u8 i;
- if (gSaveBlock1Ptr->location.mapGroup == 0x18 && gSaveBlock1Ptr->location.mapNum == 0x43)
+ if (gSaveBlock1Ptr->location.mapGroup == 0x18
+ && gSaveBlock1Ptr->location.mapNum == 0x43)
{
- // _08179A1A
if (FlagGet(FLAG_SYS_BRAILLE_WAIT) != FALSE)
return FALSE;
- if (FlagGet(2) == FALSE)
+ if (FlagGet(FLAG_0x002) == FALSE)
return FALSE;
- if (FlagGet(3) == TRUE)
+ if (FlagGet(FLAG_0x003) == TRUE)
return FALSE;
for (i = 0; i < 36; i++)
{
- if (gSaveBlock1Ptr->pos.x == gUnknown_085EFE74[i][0] && gSaveBlock1Ptr->pos.y == gUnknown_085EFE74[i][1])
+ u8 xPos = gUnknown_085EFE74[i][0];
+ u8 yPos = gUnknown_085EFE74[i][1];
+ if (gSaveBlock1Ptr->pos.x == xPos && gSaveBlock1Ptr->pos.y == yPos)
{
+ u16 varValue;
+
if (i < 16)
- VarSet(0x403B, (0x10000 << i | VarGet(0x403B) << 16) >> 16); // correct
+ {
+ u16 val = VarGet(0x403B);
+ val |= 1 << i;
+ VarSet(0x403B, val);
+ }
else if (i < 32)
- VarSet(0x403C, (0x10000 << (i - 16) | VarGet(0x403C) << 16) >> 16); // hmm?
+ {
+ u16 val = VarGet(0x403C);
+ val |= 1 << (i - 16);
+ VarSet(0x403C, val);
+ }
else
- VarSet(0x403D, (0x10000 << (i - 32) | VarGet(0x403D) << 16) >> 16); // hmm?
-
- if (VarGet(0x403B) != 0xFFFF || VarGet(0x403C) != 0xFF || VarGet(0x403D) != 0xF)
+ {
+ u16 val = VarGet(0x403D);
+ val |= 1 << (i - 32);
+ VarSet(0x403D, val);
+ }
+
+ varValue = VarGet(0x403B);
+ if (varValue != 0xFFFF || VarGet(0x403C) != varValue || VarGet(0x403D) != 0xF)
return FALSE;
if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 21)
@@ -414,170 +426,10 @@ bool8 ShouldDoBrailleRegicePuzzle(void)
return FALSE;
}
}
+
+ FlagSet(FLAG_0x003);
+ FlagClear(FLAG_0x002);
}
- // TODO: Find what flags 2 and 3 are.
- FlagSet(3);
- FlagClear(2);
+
return FALSE;
}
-#else
-ASM_DIRECT
-bool8 ShouldDoBrailleRegicePuzzle(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- ldr r4, =gSaveBlock1Ptr\n\
- ldr r0, [r4]\n\
- ldrh r1, [r0, 0x4]\n\
- ldr r0, =0x00004318\n\
- cmp r1, r0\n\
- beq _08179A1A\n\
- b _08179B5A\n\
-_08179A1A:\n\
- ldr r0, =0x000008b1\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08179A28\n\
- b _08179B5A\n\
-_08179A28:\n\
- movs r0, 0x2\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08179A36\n\
- b _08179B5A\n\
-_08179A36:\n\
- movs r0, 0x3\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _08179A58\n\
- b _08179B5A\n\
- .pool\n\
-_08179A54:\n\
- movs r0, 0x1\n\
- b _08179B5C\n\
-_08179A58:\n\
- movs r5, 0\n\
- mov r8, r4\n\
- ldr r4, =gUnknown_085EFE74\n\
- adds r0, r4, 0x1\n\
- mov r12, r0\n\
- ldr r6, =0x0000403b\n\
- ldr r1, =0x0000403c\n\
- mov r9, r1\n\
-_08179A68:\n\
- lsls r0, r5, 1\n\
- adds r1, r0, r4\n\
- add r0, r12\n\
- ldrb r3, [r0]\n\
- mov r7, r8\n\
- ldr r2, [r7]\n\
- movs r7, 0\n\
- ldrsh r0, [r2, r7]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bne _08179B44\n\
- movs r1, 0x2\n\
- ldrsh r0, [r2, r1]\n\
- cmp r0, r3\n\
- bne _08179B44\n\
- cmp r5, 0xF\n\
- bhi _08179AB0\n\
- adds r0, r6, 0\n\
- bl VarGet\n\
- lsls r0, 16\n\
- movs r1, 0x80\n\
- lsls r1, 9\n\
- lsls r1, r5\n\
- orrs r1, r0\n\
- lsrs r1, 16\n\
- adds r0, r6, 0\n\
- bl VarSet\n\
- b _08179AF0\n\
- .pool\n\
-_08179AB0:\n\
- cmp r5, 0x1F\n\
- bhi _08179AD2\n\
- mov r0, r9\n\
- bl VarGet\n\
- lsls r0, 16\n\
- adds r2, r5, 0\n\
- subs r2, 0x10\n\
- movs r1, 0x80\n\
- lsls r1, 9\n\
- lsls r1, r2\n\
- orrs r1, r0\n\
- lsrs r1, 16\n\
- mov r0, r9\n\
- bl VarSet\n\
- b _08179AF0\n\
-_08179AD2:\n\
- ldr r4, =0x0000403d\n\
- adds r0, r4, 0\n\
- bl VarGet\n\
- lsls r0, 16\n\
- adds r2, r5, 0\n\
- subs r2, 0x20\n\
- movs r1, 0x80\n\
- lsls r1, 9\n\
- lsls r1, r2\n\
- orrs r1, r0\n\
- lsrs r1, 16\n\
- adds r0, r4, 0\n\
- bl VarSet\n\
-_08179AF0:\n\
- ldr r0, =0x0000403b\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- ldr r0, =0x0000ffff\n\
- cmp r4, r0\n\
- bne _08179B5A\n\
- ldr r0, =0x0000403c\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, r4\n\
- bne _08179B5A\n\
- ldr r0, =0x0000403d\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0xF\n\
- bne _08179B5A\n\
- ldr r0, =gSaveBlock1Ptr\n\
- ldr r0, [r0]\n\
- ldr r1, [r0]\n\
- ldr r0, =0x00150008\n\
- cmp r1, r0\n\
- beq _08179A54\n\
- b _08179B5A\n\
- .pool\n\
-_08179B44:\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x23\n\
- bls _08179A68\n\
- movs r0, 0x3\n\
- bl FlagSet\n\
- movs r0, 0x2\n\
- bl FlagClear\n\
-_08179B5A:\n\
- movs r0, 0\n\
-_08179B5C:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided");
-}
-#endif
diff --git a/src/decoration.c b/src/decoration.c
index c1b12a4d3..e4d867a34 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -2507,30 +2507,27 @@ void sub_812A040(u8 left, u8 top, u8 right, u8 bottom)
}
}
-#ifdef NONMATCHING
void sub_812A0E8(u8 taskId)
{
u8 i;
u8 xOff;
u8 yOff;
- u8 decor;
- register u8 decor asm("r1");
- struct DecorRearrangementDataBuffer *data;
+ u8 var1;
+ u32 var2;
sCurDecorSelectedInRearrangement = 0;
if (sub_8129FC8(taskId) != TRUE)
{
- for (i = 0; i < gUnknown_0203A17C.size; i ++)
+ for (i = 0; i < gUnknown_0203A17C.size; i++)
{
- decor = gUnknown_0203A17C.items[i];
- if (decor != DECOR_NONE)
+ var1 = gUnknown_0203A17C.items[i];
+ if (var1 != DECOR_NONE)
{
- data = &sDecorRearrangementDataBuffer[0];
- sub_8129D8C(decor, data);
- if (sub_8129E74(taskId, i, data) == TRUE)
+ sub_8129D8C(var1, &sDecorRearrangementDataBuffer[0]);
+ if (sub_8129E74(taskId, i, &sDecorRearrangementDataBuffer[0]) == TRUE)
{
- data->idx = i;
- sCurDecorSelectedInRearrangement ++;
+ sDecorRearrangementDataBuffer[0].idx = i;
+ sCurDecorSelectedInRearrangement++;
break;
}
}
@@ -2539,95 +2536,13 @@ void sub_812A0E8(u8 taskId)
{
xOff = gUnknown_0203A17C.pos[sDecorRearrangementDataBuffer[0].idx] >> 4;
yOff = gUnknown_0203A17C.pos[sDecorRearrangementDataBuffer[0].idx] & 0x0F;
- sub_812A040(xOff, yOff - sDecorRearrangementDataBuffer[0].height + 1, xOff + sDecorRearrangementDataBuffer[0].width - 1, yOff); // Arithmetic register swap at the r2 argument: `add r2, r0, r2` instead of `add r2, r2, r0`
+ var1 = yOff - sDecorRearrangementDataBuffer[0].height + 1;
+ var2 = sDecorRearrangementDataBuffer[0].width + xOff - 1;
+
+ sub_812A040(xOff, var1, var2, yOff);
}
}
}
-#else
-ASM_DIRECT void sub_812A0E8(u8 taskId)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r4, =sCurDecorSelectedInRearrangement\n"
- "\tmovs r0, 0\n"
- "\tstrb r0, [r4]\n"
- "\tadds r0, r6, 0\n"
- "\tbl sub_8129FC8\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x1\n"
- "\tbeq _0812A18C\n"
- "\tmovs r5, 0\n"
- "\tldr r0, =gUnknown_0203A17C\n"
- "\tldrb r1, [r0, 0x8]\n"
- "\tcmp r5, r1\n"
- "\tbcs _0812A15A\n"
- "\tadds r7, r4, 0\n"
- "_0812A10E:\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, r5\n"
- "\tldrb r1, [r0]\n"
- "\tcmp r1, 0\n"
- "\tbeq _0812A14C\n"
- "\tldr r4, =sDecorRearrangementDataBuffer\n"
- "\tadds r0, r1, 0\n"
- "\tadds r1, r4, 0\n"
- "\tbl sub_8129D8C\n"
- "\tadds r0, r6, 0\n"
- "\tadds r1, r5, 0\n"
- "\tadds r2, r4, 0\n"
- "\tbl sub_8129E74\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x1\n"
- "\tbne _0812A14C\n"
- "\tstrb r5, [r4]\n"
- "\tldrb r0, [r7]\n"
- "\tadds r0, 0x1\n"
- "\tstrb r0, [r7]\n"
- "\tb _0812A15A\n"
- "\t.pool\n"
- "_0812A14C:\n"
- "\tadds r0, r5, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tldr r0, =gUnknown_0203A17C\n"
- "\tldrb r1, [r0, 0x8]\n"
- "\tcmp r5, r1\n"
- "\tbcc _0812A10E\n"
- "_0812A15A:\n"
- "\tldr r0, =sCurDecorSelectedInRearrangement\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbeq _0812A18C\n"
- "\tldr r0, =gUnknown_0203A17C\n"
- "\tldr r2, =sDecorRearrangementDataBuffer\n"
- "\tldrb r1, [r2]\n"
- "\tldr r0, [r0, 0x4]\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tlsrs r0, r1, 4\n"
- "\tmovs r3, 0xF\n"
- "\tands r3, r1\n"
- "\tldrb r1, [r2, 0x2]\n"
- "\tsubs r1, r3, r1\n"
- "\tadds r1, 0x1\n"
- "\tlsls r1, 24\n"
- "\tlsrs r1, 24\n"
- "\tldrb r2, [r2, 0x1]\n"
- "\tadds r2, r0\n"
- "\tsubs r2, 0x1\n"
- "\tlsls r2, 24\n"
- "\tlsrs r2, 24\n"
- "\tbl sub_812A040\n"
- "_0812A18C:\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.pool");
-}
-#endif
void sub_812A1A0(u8 taskId)
{
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)
diff --git a/src/tv.c b/src/tv.c
index 112f2b041..83cb18b3f 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -2088,7 +2088,6 @@ void sub_80EDE84(u16 nCoinsSpent)
sFindThatGamerCoinsSpent = nCoinsSpent;
}
-#ifdef NONMATCHING // FIXME: Register allocation shenanigans
void sub_80EDE98(TVShow *show)
{
u8 i;
@@ -2140,11 +2139,11 @@ void sub_80EDE98(TVShow *show)
default:
for (k = 0; k < n * n; k ++)
{
- i = Random() % n;
+ deco = Random() % n;
j = Random() % n;
- x = sTV_DecorationsBuffer[i];
- sTV_DecorationsBuffer[i] = sTV_DecorationsBuffer[j];
- sTV_DecorationsBuffer[j] = x;
+ i = sTV_DecorationsBuffer[deco];
+ sTV_DecorationsBuffer[deco] = sTV_DecorationsBuffer[j];
+ sTV_DecorationsBuffer[j] = i;
}
for (i = 0; i < show->secretBaseVisit.nDecorations; i ++)
{
@@ -2153,155 +2152,6 @@ void sub_80EDE98(TVShow *show)
break;
}
}
-#else
-ASM_DIRECT
-void sub_80EDE98(TVShow *show)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r9\n"
- "\tmov r6, r8\n"
- "\tpush {r6,r7}\n"
- "\tmov r8, r0\n"
- "\tmovs r3, 0\n"
- "\tldr r6, =sTV_DecorationsBuffer\n"
- "\tldr r7, =gSaveBlock1Ptr\n"
- "\tadds r2, r6, 0\n"
- "\tmovs r1, 0\n"
- "_080EDEAC:\n"
- "\tadds r0, r3, r2\n"
- "\tstrb r1, [r0]\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tcmp r3, 0xF\n"
- "\tbls _080EDEAC\n"
- "\tmovs r3, 0\n"
- "\tmovs r5, 0\n"
- "_080EDEBE:\n"
- "\tldr r0, [r7]\n"
- "\tldr r1, =0x00001aae\n"
- "\tadds r0, r1\n"
- "\tadds r0, r3\n"
- "\tldrb r4, [r0]\n"
- "\tadds r3, 0x1\n"
- "\tcmp r4, 0\n"
- "\tbeq _080EDF0A\n"
- "\tmovs r1, 0\n"
- "\tldrb r0, [r6]\n"
- "\tcmp r0, 0\n"
- "\tbne _080EDEE8\n"
- "\tstrb r4, [r6]\n"
- "\tb _080EDF04\n"
- "\t.pool\n"
- "_080EDEE8:\n"
- "\tadds r0, r1, r6\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, r4\n"
- "\tbeq _080EDF0A\n"
- "\tadds r0, r1, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r1, r0, 24\n"
- "\tcmp r1, 0xF\n"
- "\tbhi _080EDF0A\n"
- "\tadds r2, r1, r6\n"
- "\tldrb r0, [r2]\n"
- "\tcmp r0, 0\n"
- "\tbne _080EDEE8\n"
- "\tstrb r4, [r2]\n"
- "_080EDF04:\n"
- "\tadds r0, r5, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "_080EDF0A:\n"
- "\tlsls r0, r3, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tcmp r3, 0xF\n"
- "\tbls _080EDEBE\n"
- "\tcmp r5, 0x4\n"
- "\tbls _080EDF1E\n"
- "\tmovs r0, 0x4\n"
- "\tmov r1, r8\n"
- "\tstrb r0, [r1, 0x3]\n"
- "\tb _080EDF22\n"
- "_080EDF1E:\n"
- "\tmov r0, r8\n"
- "\tstrb r5, [r0, 0x3]\n"
- "_080EDF22:\n"
- "\tmov r1, r8\n"
- "\tldrb r0, [r1, 0x3]\n"
- "\tcmp r0, 0\n"
- "\tbeq _080EDFA4\n"
- "\tcmp r0, 0x1\n"
- "\tbne _080EDF34\n"
- "\tldrb r0, [r6]\n"
- "\tstrb r0, [r1, 0x4]\n"
- "\tb _080EDFA4\n"
- "_080EDF34:\n"
- "\tmovs r6, 0\n"
- "\tadds r7, r5, 0\n"
- "\tmuls r7, r5\n"
- "\tcmp r6, r7\n"
- "\tbge _080EDF7E\n"
- "\tldr r0, =sTV_DecorationsBuffer\n"
- "\tmov r9, r0\n"
- "_080EDF42:\n"
- "\tbl Random\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tadds r1, r5, 0\n"
- "\tbl __modsi3\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tbl Random\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tadds r1, r5, 0\n"
- "\tbl __modsi3\n"
- "\tlsls r0, 24\n"
- "\tlsrs r1, r0, 24\n"
- "\tmov r0, r9\n"
- "\tadds r2, r4, r0\n"
- "\tldrb r3, [r2]\n"
- "\tadd r1, r9\n"
- "\tldrb r0, [r1]\n"
- "\tstrb r0, [r2]\n"
- "\tstrb r3, [r1]\n"
- "\tadds r0, r6, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r6, r0, 16\n"
- "\tcmp r6, r7\n"
- "\tblt _080EDF42\n"
- "_080EDF7E:\n"
- "\tmovs r3, 0\n"
- "\tmov r1, r8\n"
- "\tldrb r1, [r1, 0x3]\n"
- "\tcmp r3, r1\n"
- "\tbcs _080EDFA4\n"
- "\tmov r2, r8\n"
- "\tadds r2, 0x4\n"
- "\tldr r4, =sTV_DecorationsBuffer\n"
- "_080EDF8E:\n"
- "\tadds r1, r2, r3\n"
- "\tadds r0, r3, r4\n"
- "\tldrb r0, [r0]\n"
- "\tstrb r0, [r1]\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tmov r0, r8\n"
- "\tldrb r0, [r0, 0x3]\n"
- "\tcmp r3, r0\n"
- "\tbcc _080EDF8E\n"
- "_080EDFA4:\n"
- "\tpop {r3,r4}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.pool");
-}
-#endif
void sub_80EDFB4(TVShow *show)
{