nonmatch sub_804FD30

This commit is contained in:
Seth Barberee
2023-12-31 10:06:19 -08:00
parent f405238e0d
commit 70db368a34
3 changed files with 299 additions and 236 deletions

View File

@@ -5,240 +5,6 @@
.text
thumb_func_start sub_804FD30
sub_804FD30:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x4
movs r6, 0
_0804FD3A:
movs r7, 0
adds r4, r6, 0x1
_0804FD3E:
adds r0, r6, 0
adds r1, r7, 0
bl GetTileSafe
bl sub_804FD10
subs r3, r7, 0x1
cmp r6, 0
blt _0804FD5C
cmp r3, 0
blt _0804FD5C
cmp r6, 0x37
bgt _0804FD5C
cmp r3, 0x1F
ble _0804FD60
_0804FD5C:
movs r0, 0x1
b _0804FD62
_0804FD60:
movs r0, 0
_0804FD62:
cmp r0, 0
bne _0804FE24
cmp r4, 0
blt _0804FD76
cmp r3, 0
blt _0804FD76
cmp r4, 0x37
bgt _0804FD76
cmp r3, 0x1F
ble _0804FD7A
_0804FD76:
movs r0, 0x1
b _0804FD7C
_0804FD7A:
movs r0, 0
_0804FD7C:
cmp r0, 0
bne _0804FE24
cmp r4, 0
blt _0804FD90
cmp r3, 0
blt _0804FD90
cmp r4, 0x37
bgt _0804FD90
cmp r3, 0x1F
ble _0804FD94
_0804FD90:
movs r0, 0x1
b _0804FD96
_0804FD94:
movs r0, 0
_0804FD96:
cmp r0, 0
bne _0804FE24
adds r2, r7, 0x1
cmp r4, 0
blt _0804FDAC
cmp r2, 0
blt _0804FDAC
cmp r4, 0x37
bgt _0804FDAC
cmp r2, 0x1F
ble _0804FDB0
_0804FDAC:
movs r0, 0x1
b _0804FDB2
_0804FDB0:
movs r0, 0
_0804FDB2:
cmp r0, 0
bne _0804FE24
cmp r6, 0
blt _0804FDC6
cmp r2, 0
blt _0804FDC6
cmp r6, 0x37
bgt _0804FDC6
cmp r2, 0x1F
ble _0804FDCA
_0804FDC6:
movs r0, 0x1
b _0804FDCC
_0804FDCA:
movs r0, 0
_0804FDCC:
cmp r0, 0
bne _0804FE24
adds r0, r2, 0
subs r1, r6, 0x1
cmp r1, 0
blt _0804FDE4
cmp r0, 0
blt _0804FDE4
cmp r1, 0x37
bgt _0804FDE4
cmp r2, 0x1F
ble _0804FDE8
_0804FDE4:
movs r0, 0x1
b _0804FDEA
_0804FDE8:
movs r0, 0
_0804FDEA:
cmp r0, 0
bne _0804FE24
cmp r1, 0
blt _0804FDFE
cmp r7, 0
blt _0804FDFE
cmp r1, 0x37
bgt _0804FDFE
cmp r7, 0x1F
ble _0804FE02
_0804FDFE:
movs r0, 0x1
b _0804FE04
_0804FE02:
movs r0, 0
_0804FE04:
cmp r0, 0
bne _0804FE24
adds r0, r3, 0
cmp r1, 0
blt _0804FE1A
cmp r0, 0
blt _0804FE1A
cmp r1, 0x37
bgt _0804FE1A
cmp r3, 0x1F
ble _0804FE1E
_0804FE1A:
movs r0, 0x1
b _0804FE20
_0804FE1E:
movs r0, 0
_0804FE20:
cmp r0, 0
beq _0804FE34
_0804FE24:
adds r0, r6, 0
adds r1, r7, 0
bl GetTileSafe
ldrh r2, [r0]
movs r1, 0x10
orrs r1, r2
strh r1, [r0]
_0804FE34:
adds r7, 0x1
cmp r7, 0x1F
ble _0804FD3E
adds r6, 0x1
cmp r6, 0x37
bgt _0804FE42
b _0804FD3A
_0804FE42:
ldr r3, _0804FEB4
ldr r1, [r3]
ldr r0, _0804FEB8
adds r2, r1, r0
ldr r0, _0804FEBC
strh r0, [r2]
ldr r2, _0804FEC0
adds r1, r2
movs r0, 0x1
negs r0, r0
strh r0, [r1]
movs r6, 0
mov r8, r3
ldr r1, _0804FEC4
_0804FE5E:
adds r5, r1, 0
movs r4, 0
movs r7, 0x7
_0804FE64:
mov r2, r8
ldr r0, [r2]
adds r0, r5
adds r0, r4
str r1, [sp]
bl sub_804FD10
adds r4, 0x18
subs r7, 0x1
ldr r1, [sp]
cmp r7, 0
bge _0804FE64
adds r1, 0xC0
adds r6, 0x1
cmp r6, 0x7
ble _0804FE5E
ldr r0, _0804FEB4
ldr r1, [r0]
ldr r2, _0804FEC8
adds r1, r2
movs r2, 0
strh r2, [r1]
movs r6, 0
adds r4, r0, 0
ldr r3, _0804FECC
_0804FE96:
ldr r0, [r4]
lsls r1, r6, 2
adds r0, r3
adds r0, r1
ldr r0, [r0]
str r2, [r0]
adds r6, 0x1
cmp r6, 0x3F
ble _0804FE96
add sp, 0x4
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0804FEB4: .4byte gDungeon
_0804FEB8: .4byte 0x0000e21c
_0804FEBC: .4byte 0x0000ffff
_0804FEC0: .4byte 0x0000e21e
_0804FEC4: .4byte 0x0000e27c
_0804FEC8: .4byte 0x00003904
_0804FECC: .4byte 0x0001371c
thumb_func_end sub_804FD30
thumb_func_start sub_804FED0
sub_804FED0:
push {r4-r7,lr}

View File

@@ -150,7 +150,9 @@ typedef struct Dungeon
u8 fill3A10[0x3A14 - 0x3A12];
/* 0x3A14 */ s16 bossBattleIndex;
/* 0x3A18 */ Tile tiles[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X];
u8 fillE218[0xE220 - 0xE218];
u8 fillE218[0xE21C - 0xE218];
u16 unkE21C;
u16 unkE21E;
Position unkE220[4];
u8 unkE230[0xE23C - 0xE230];
s16 unkE23C; // x coord of some kind
@@ -169,7 +171,9 @@ typedef struct Dungeon
/* 0xE277 */ u8 mudSportTurns;
/* 0xE278 */ u8 waterSportTurns;
/* 0xE279 */ bool8 nullifyWeather; // Air Lock and Cloud Nine toggle this to disable weather effects
u8 fillE27A[0xE8C0 - 0xE27A];
u8 fillE27A[0xE27C - 0xE27A];
/* 0xE27C */ Tile unkE27C[8][8];
/* 0xE87C */ u8 fillE87C[68];
/* 0xE8C0 */ Tile *tilePointers[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X];
u8 unk104C0;
/* 0x104C4 */ RoomData roomData[MAX_ROOM_COUNT];

View File

@@ -82,3 +82,296 @@ void sub_804FD10(Tile *tile)
tile->monster = NULL;
tile->object = NULL;
}
bool8 static inline boundsCheck(s32 x, s32 y)
{
if ((((x < 0 || (y < 0)) || (DUNGEON_MAX_SIZE_X <= x)) || (DUNGEON_MAX_SIZE_Y <= y)))
{
return TRUE;
}
else
return FALSE;
}
// https://decomp.me/scratch/w591w (98.17% matching - Seth)
// r6 and r7 are swapped
#ifdef NONMATCHING
void sub_804FD30(void)
{
int x;
int y;
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
{
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
{
sub_804FD10(GetTileSafe(x,y));
if ((boundsCheck(x, y - 1)) ||
(boundsCheck(x + 1, y - 1)) ||
(boundsCheck(x + 1, y - 1)) ||
(boundsCheck(x + 1, y + 1)) ||
(boundsCheck(x, y + 1)) ||
(boundsCheck(x - 1, y + 1)) ||
(boundsCheck(x - 1, y)) ||
(boundsCheck(x - 1, y - 1)))
{
GetTileSafe(x,y)->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
}
}
}
gDungeon->unkE21C = -1;
gDungeon->unkE21E = -1;
for(x = 0; x < 8; x++)
{
for(y = 0; y < 8; y++)
{
sub_804FD10(&gDungeon->unkE27C[x][y]);
}
}
gDungeon->unk3904 = 0;
for(x = 0; x < 0x40; x++)
{
gDungeon->unk1371C[x]->type = 0;
}
}
#else
NAKED
void sub_804FD30(void)
{
asm_unified(
"\tpush {r4-r7,lr}\n"
"\tmov r7, r8\n"
"\tpush {r7}\n"
"\tsub sp, 0x4\n"
"\tmovs r6, 0\n"
"_0804FD3A:\n"
"\tmovs r7, 0\n"
"\tadds r4, r6, 0x1\n"
"_0804FD3E:\n"
"\tadds r0, r6, 0\n"
"\tadds r1, r7, 0\n"
"\tbl GetTileSafe\n"
"\tbl sub_804FD10\n"
"\tsubs r3, r7, 0x1\n"
"\tcmp r6, 0\n"
"\tblt _0804FD5C\n"
"\tcmp r3, 0\n"
"\tblt _0804FD5C\n"
"\tcmp r6, 0x37\n"
"\tbgt _0804FD5C\n"
"\tcmp r3, 0x1F\n"
"\tble _0804FD60\n"
"_0804FD5C:\n"
"\tmovs r0, 0x1\n"
"\tb _0804FD62\n"
"_0804FD60:\n"
"\tmovs r0, 0\n"
"_0804FD62:\n"
"\tcmp r0, 0\n"
"\tbne _0804FE24\n"
"\tcmp r4, 0\n"
"\tblt _0804FD76\n"
"\tcmp r3, 0\n"
"\tblt _0804FD76\n"
"\tcmp r4, 0x37\n"
"\tbgt _0804FD76\n"
"\tcmp r3, 0x1F\n"
"\tble _0804FD7A\n"
"_0804FD76:\n"
"\tmovs r0, 0x1\n"
"\tb _0804FD7C\n"
"_0804FD7A:\n"
"\tmovs r0, 0\n"
"_0804FD7C:\n"
"\tcmp r0, 0\n"
"\tbne _0804FE24\n"
"\tcmp r4, 0\n"
"\tblt _0804FD90\n"
"\tcmp r3, 0\n"
"\tblt _0804FD90\n"
"\tcmp r4, 0x37\n"
"\tbgt _0804FD90\n"
"\tcmp r3, 0x1F\n"
"\tble _0804FD94\n"
"_0804FD90:\n"
"\tmovs r0, 0x1\n"
"\tb _0804FD96\n"
"_0804FD94:\n"
"\tmovs r0, 0\n"
"_0804FD96:\n"
"\tcmp r0, 0\n"
"\tbne _0804FE24\n"
"\tadds r2, r7, 0x1\n"
"\tcmp r4, 0\n"
"\tblt _0804FDAC\n"
"\tcmp r2, 0\n"
"\tblt _0804FDAC\n"
"\tcmp r4, 0x37\n"
"\tbgt _0804FDAC\n"
"\tcmp r2, 0x1F\n"
"\tble _0804FDB0\n"
"_0804FDAC:\n"
"\tmovs r0, 0x1\n"
"\tb _0804FDB2\n"
"_0804FDB0:\n"
"\tmovs r0, 0\n"
"_0804FDB2:\n"
"\tcmp r0, 0\n"
"\tbne _0804FE24\n"
"\tcmp r6, 0\n"
"\tblt _0804FDC6\n"
"\tcmp r2, 0\n"
"\tblt _0804FDC6\n"
"\tcmp r6, 0x37\n"
"\tbgt _0804FDC6\n"
"\tcmp r2, 0x1F\n"
"\tble _0804FDCA\n"
"_0804FDC6:\n"
"\tmovs r0, 0x1\n"
"\tb _0804FDCC\n"
"_0804FDCA:\n"
"\tmovs r0, 0\n"
"_0804FDCC:\n"
"\tcmp r0, 0\n"
"\tbne _0804FE24\n"
"\tadds r0, r2, 0\n"
"\tsubs r1, r6, 0x1\n"
"\tcmp r1, 0\n"
"\tblt _0804FDE4\n"
"\tcmp r0, 0\n"
"\tblt _0804FDE4\n"
"\tcmp r1, 0x37\n"
"\tbgt _0804FDE4\n"
"\tcmp r2, 0x1F\n"
"\tble _0804FDE8\n"
"_0804FDE4:\n"
"\tmovs r0, 0x1\n"
"\tb _0804FDEA\n"
"_0804FDE8:\n"
"\tmovs r0, 0\n"
"_0804FDEA:\n"
"\tcmp r0, 0\n"
"\tbne _0804FE24\n"
"\tcmp r1, 0\n"
"\tblt _0804FDFE\n"
"\tcmp r7, 0\n"
"\tblt _0804FDFE\n"
"\tcmp r1, 0x37\n"
"\tbgt _0804FDFE\n"
"\tcmp r7, 0x1F\n"
"\tble _0804FE02\n"
"_0804FDFE:\n"
"\tmovs r0, 0x1\n"
"\tb _0804FE04\n"
"_0804FE02:\n"
"\tmovs r0, 0\n"
"_0804FE04:\n"
"\tcmp r0, 0\n"
"\tbne _0804FE24\n"
"\tadds r0, r3, 0\n"
"\tcmp r1, 0\n"
"\tblt _0804FE1A\n"
"\tcmp r0, 0\n"
"\tblt _0804FE1A\n"
"\tcmp r1, 0x37\n"
"\tbgt _0804FE1A\n"
"\tcmp r3, 0x1F\n"
"\tble _0804FE1E\n"
"_0804FE1A:\n"
"\tmovs r0, 0x1\n"
"\tb _0804FE20\n"
"_0804FE1E:\n"
"\tmovs r0, 0\n"
"_0804FE20:\n"
"\tcmp r0, 0\n"
"\tbeq _0804FE34\n"
"_0804FE24:\n"
"\tadds r0, r6, 0\n"
"\tadds r1, r7, 0\n"
"\tbl GetTileSafe\n"
"\tldrh r2, [r0]\n"
"\tmovs r1, 0x10\n"
"\torrs r1, r2\n"
"\tstrh r1, [r0]\n"
"_0804FE34:\n"
"\tadds r7, 0x1\n"
"\tcmp r7, 0x1F\n"
"\tble _0804FD3E\n"
"\tadds r6, 0x1\n"
"\tcmp r6, 0x37\n"
"\tbgt _0804FE42\n"
"\tb _0804FD3A\n"
"_0804FE42:\n"
"\tldr r3, _0804FEB4\n"
"\tldr r1, [r3]\n"
"\tldr r0, _0804FEB8\n"
"\tadds r2, r1, r0\n"
"\tldr r0, _0804FEBC\n"
"\tstrh r0, [r2]\n"
"\tldr r2, _0804FEC0\n"
"\tadds r1, r2\n"
"\tmovs r0, 0x1\n"
"\tnegs r0, r0\n"
"\tstrh r0, [r1]\n"
"\tmovs r6, 0\n"
"\tmov r8, r3\n"
"\tldr r1, _0804FEC4\n"
"_0804FE5E:\n"
"\tadds r5, r1, 0\n"
"\tmovs r4, 0\n"
"\tmovs r7, 0x7\n"
"_0804FE64:\n"
"\tmov r2, r8\n"
"\tldr r0, [r2]\n"
"\tadds r0, r5\n"
"\tadds r0, r4\n"
"\tstr r1, [sp]\n"
"\tbl sub_804FD10\n"
"\tadds r4, 0x18\n"
"\tsubs r7, 0x1\n"
"\tldr r1, [sp]\n"
"\tcmp r7, 0\n"
"\tbge _0804FE64\n"
"\tadds r1, 0xC0\n"
"\tadds r6, 0x1\n"
"\tcmp r6, 0x7\n"
"\tble _0804FE5E\n"
"\tldr r0, _0804FEB4\n"
"\tldr r1, [r0]\n"
"\tldr r2, _0804FEC8\n"
"\tadds r1, r2\n"
"\tmovs r2, 0\n"
"\tstrh r2, [r1]\n"
"\tmovs r6, 0\n"
"\tadds r4, r0, 0\n"
"\tldr r3, _0804FECC\n"
"_0804FE96:\n"
"\tldr r0, [r4]\n"
"\tlsls r1, r6, 2\n"
"\tadds r0, r3\n"
"\tadds r0, r1\n"
"\tldr r0, [r0]\n"
"\tstr r2, [r0]\n"
"\tadds r6, 0x1\n"
"\tcmp r6, 0x3F\n"
"\tble _0804FE96\n"
"\tadd sp, 0x4\n"
"\tpop {r3}\n"
"\tmov r8, r3\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_0804FEB4: .4byte gDungeon\n"
"_0804FEB8: .4byte 0x0000e21c\n"
"_0804FEBC: .4byte 0x0000ffff\n"
"_0804FEC0: .4byte 0x0000e21e\n"
"_0804FEC4: .4byte 0x0000e27c\n"
"_0804FEC8: .4byte 0x00003904\n"
"_0804FECC: .4byte 0x0001371c\n");
#endif
}