mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-26 18:55:56 -05:00
nonmatch sub_804FD30
This commit is contained in:
@@ -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}
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user