sub_8049BB0

This commit is contained in:
DizzyEggg
2024-09-18 11:52:23 +02:00
parent 5bb84ee604
commit acfc20d06d
2 changed files with 105 additions and 430 deletions

View File

@@ -5,431 +5,6 @@
.text
thumb_func_start sub_8049BB0
sub_8049BB0:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x44
mov r10, r0
str r1, [sp, 0x40]
movs r0, 0
str r0, [sp]
str r0, [sp, 0x4]
str r0, [sp, 0x8]
str r0, [sp, 0xC]
adds r0, r1, 0
adds r0, 0x1
mov r9, r0
mov r0, r10
mov r1, r9
bl GetTile
ldrh r1, [r0]
movs r4, 0x3
adds r0, r4, 0
ands r0, r1
add r6, sp, 0x18
str r0, [sp, 0x18]
mov r5, r10
adds r5, 0x1
adds r0, r5, 0
mov r1, r9
bl GetTile
ldrh r1, [r0]
adds r0, r4, 0
ands r0, r1
str r0, [r6, 0x4]
adds r0, r5, 0
ldr r1, [sp, 0x40]
bl GetTile
ldrh r1, [r0]
adds r0, r4, 0
ands r0, r1
str r0, [r6, 0x8]
ldr r0, [sp, 0x40]
subs r0, 0x1
mov r8, r0
adds r0, r5, 0
mov r1, r8
bl GetTile
ldrh r1, [r0]
adds r0, r4, 0
ands r0, r1
str r0, [r6, 0xC]
mov r0, r10
mov r1, r8
bl GetTile
ldrh r1, [r0]
adds r0, r4, 0
ands r0, r1
str r0, [r6, 0x10]
subs r5, 0x2
adds r0, r5, 0
mov r1, r8
bl GetTile
ldrh r1, [r0]
adds r0, r4, 0
ands r0, r1
str r0, [r6, 0x14]
adds r0, r5, 0
ldr r1, [sp, 0x40]
bl GetTile
ldrh r1, [r0]
adds r0, r4, 0
ands r0, r1
str r0, [r6, 0x18]
adds r0, r5, 0
mov r1, r9
bl GetTile
ldrh r0, [r0]
ands r4, r0
str r4, [r6, 0x1C]
ldr r1, [sp, 0x18]
cmp r1, 0x1
bne _08049C6A
ldr r0, [sp]
orrs r0, r1
str r0, [sp]
_08049C6A:
ldr r0, [r6, 0x8]
cmp r0, 0x1
bne _08049C78
ldr r0, [sp]
movs r1, 0x4
orrs r0, r1
str r0, [sp]
_08049C78:
ldr r0, [r6, 0x10]
cmp r0, 0x1
bne _08049C86
ldr r0, [sp]
movs r1, 0x10
orrs r0, r1
str r0, [sp]
_08049C86:
ldr r0, [r6, 0x18]
cmp r0, 0x1
bne _08049C94
ldr r0, [sp]
movs r1, 0x40
orrs r0, r1
str r0, [sp]
_08049C94:
ldr r2, [sp, 0x18]
cmp r2, 0
beq _08049CAE
ldr r0, [r6, 0x4]
cmp r0, 0x1
bne _08049CAE
ldr r0, [r6, 0x8]
cmp r0, 0
beq _08049CC8
ldr r0, [sp]
movs r1, 0x2
orrs r0, r1
str r0, [sp]
_08049CAE:
ldr r0, [r6, 0x8]
cmp r0, 0
beq _08049CC8
ldr r0, [r6, 0xC]
cmp r0, 0x1
bne _08049CC8
ldr r0, [r6, 0x10]
cmp r0, 0
beq _08049CE2
ldr r0, [sp]
movs r1, 0x8
orrs r0, r1
str r0, [sp]
_08049CC8:
ldr r0, [r6, 0x10]
cmp r0, 0
beq _08049CE2
ldr r0, [r6, 0x14]
cmp r0, 0x1
bne _08049CE2
ldr r0, [r6, 0x18]
cmp r0, 0
beq _08049CFA
ldr r0, [sp]
movs r1, 0x20
orrs r0, r1
str r0, [sp]
_08049CE2:
ldr r0, [r6, 0x18]
cmp r0, 0
beq _08049CFA
ldr r0, [r6, 0x1C]
cmp r0, 0x1
bne _08049CFA
cmp r2, 0
beq _08049CFA
ldr r0, [sp]
movs r1, 0x80
orrs r0, r1
str r0, [sp]
_08049CFA:
add r4, sp, 0x38
movs r7, 0x1
adds r2, r4, 0
adds r1, r6, 0
movs r5, 0
movs r3, 0x7
_08049D06:
ldr r0, [r1]
subs r0, 0x1
cmp r0, 0x1
bhi _08049D12
strb r7, [r2]
b _08049D14
_08049D12:
strb r5, [r2]
_08049D14:
adds r2, 0x1
adds r1, 0x4
subs r3, 0x1
cmp r3, 0
bge _08049D06
ldrb r0, [r4]
cmp r0, 0
beq _08049D2C
ldr r0, [sp, 0x4]
movs r1, 0x1
orrs r0, r1
str r0, [sp, 0x4]
_08049D2C:
ldrb r0, [r4, 0x2]
cmp r0, 0
beq _08049D3A
ldr r0, [sp, 0x4]
movs r1, 0x4
orrs r0, r1
str r0, [sp, 0x4]
_08049D3A:
ldrb r0, [r4, 0x4]
cmp r0, 0
beq _08049D48
ldr r0, [sp, 0x4]
movs r1, 0x10
orrs r0, r1
str r0, [sp, 0x4]
_08049D48:
ldrb r0, [r4, 0x6]
cmp r0, 0
beq _08049D56
ldr r0, [sp, 0x4]
movs r1, 0x40
orrs r0, r1
str r0, [sp, 0x4]
_08049D56:
ldr r2, [sp, 0x18]
cmp r2, 0
beq _08049D70
ldrb r0, [r4, 0x1]
cmp r0, 0
beq _08049D70
ldr r0, [r6, 0x8]
cmp r0, 0
beq _08049D8A
ldr r0, [sp, 0x4]
movs r1, 0x2
orrs r0, r1
str r0, [sp, 0x4]
_08049D70:
ldr r0, [r6, 0x8]
cmp r0, 0
beq _08049D8A
ldrb r0, [r4, 0x3]
cmp r0, 0
beq _08049D8A
ldr r0, [r6, 0x10]
cmp r0, 0
beq _08049DA4
ldr r0, [sp, 0x4]
movs r1, 0x8
orrs r0, r1
str r0, [sp, 0x4]
_08049D8A:
ldr r0, [r6, 0x10]
cmp r0, 0
beq _08049DA4
ldrb r0, [r4, 0x5]
cmp r0, 0
beq _08049DA4
ldr r0, [r6, 0x18]
cmp r0, 0
beq _08049DBC
ldr r0, [sp, 0x4]
movs r1, 0x20
orrs r0, r1
str r0, [sp, 0x4]
_08049DA4:
ldr r0, [r6, 0x18]
cmp r0, 0
beq _08049DBC
ldrb r0, [r4, 0x7]
cmp r0, 0
beq _08049DBC
cmp r2, 0
beq _08049DC8
ldr r0, [sp, 0x4]
movs r1, 0x80
orrs r0, r1
str r0, [sp, 0x4]
_08049DBC:
cmp r2, 0
beq _08049DC8
ldr r0, [sp, 0x8]
movs r1, 0x1
orrs r0, r1
str r0, [sp, 0x8]
_08049DC8:
ldr r0, [r6, 0x8]
cmp r0, 0
beq _08049DD6
ldr r0, [sp, 0x8]
movs r1, 0x4
orrs r0, r1
str r0, [sp, 0x8]
_08049DD6:
ldr r0, [r6, 0x10]
cmp r0, 0
beq _08049DE4
ldr r0, [sp, 0x8]
movs r1, 0x10
orrs r0, r1
str r0, [sp, 0x8]
_08049DE4:
ldr r0, [r6, 0x18]
cmp r0, 0
beq _08049DF2
ldr r0, [sp, 0x8]
movs r1, 0x40
orrs r0, r1
str r0, [sp, 0x8]
_08049DF2:
cmp r2, 0
beq _08049E0A
ldr r0, [r6, 0x4]
cmp r0, 0
beq _08049E0A
ldr r0, [r6, 0x8]
cmp r0, 0
beq _08049E24
ldr r0, [sp, 0x8]
movs r1, 0x2
orrs r0, r1
str r0, [sp, 0x8]
_08049E0A:
ldr r0, [r6, 0x8]
cmp r0, 0
beq _08049E24
ldr r0, [r6, 0xC]
cmp r0, 0
beq _08049E24
ldr r0, [r6, 0x10]
cmp r0, 0
beq _08049E3E
ldr r0, [sp, 0x8]
movs r1, 0x8
orrs r0, r1
str r0, [sp, 0x8]
_08049E24:
ldr r0, [r6, 0x10]
cmp r0, 0
beq _08049E3E
ldr r0, [r6, 0x14]
cmp r0, 0
beq _08049E3E
ldr r0, [r6, 0x18]
cmp r0, 0
beq _08049E56
ldr r0, [sp, 0x8]
movs r1, 0x20
orrs r0, r1
str r0, [sp, 0x8]
_08049E3E:
ldr r0, [r6, 0x18]
cmp r0, 0
beq _08049E56
ldr r0, [r6, 0x1C]
cmp r0, 0
beq _08049E56
cmp r2, 0
beq _08049E56
ldr r0, [sp, 0x8]
movs r1, 0x80
orrs r0, r1
str r0, [sp, 0x8]
_08049E56:
movs r0, 0xFF
str r0, [sp, 0xC]
mov r0, r10
cmp r0, 0x1
bgt _08049E64
movs r0, 0x1F
str r0, [sp, 0xC]
_08049E64:
ldr r0, [sp, 0x40]
cmp r0, 0x1
bgt _08049E74
ldr r0, [sp, 0xC]
movs r1, 0x39
negs r1, r1
ands r0, r1
str r0, [sp, 0xC]
_08049E74:
mov r0, r10
cmp r0, 0x35
ble _08049E84
ldr r0, [sp, 0xC]
movs r1, 0xF
negs r1, r1
ands r0, r1
str r0, [sp, 0xC]
_08049E84:
ldr r0, [sp, 0x40]
cmp r0, 0x1D
ble _08049E94
ldr r0, [sp, 0xC]
movs r1, 0x84
negs r1, r1
ands r0, r1
str r0, [sp, 0xC]
_08049E94:
mov r0, r10
ldr r1, [sp, 0x40]
bl GetTileSafe
ldr r1, [sp]
strb r1, [r0, 0xA]
mov r0, r10
ldr r1, [sp, 0x40]
bl GetTileSafe
ldr r1, [sp, 0x4]
strb r1, [r0, 0xB]
mov r0, r10
ldr r1, [sp, 0x40]
bl GetTileSafe
ldr r1, [sp, 0x8]
strb r1, [r0, 0xC]
mov r0, r10
ldr r1, [sp, 0x40]
bl GetTileSafe
ldr r1, [sp, 0xC]
strb r1, [r0, 0xD]
add sp, 0x44
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8049BB0
thumb_func_start sub_8049ED4
sub_8049ED4:
push {r4-r7,lr}

View File

@@ -57,7 +57,7 @@ void sub_80495E4(void)
{
s32 YCoord;
s32 XCoord;
for(YCoord = 0; YCoord < DUNGEON_MAX_SIZE_Y; YCoord++)
{
for(XCoord = 0; XCoord < DUNGEON_MAX_SIZE_X; XCoord++)
@@ -75,7 +75,7 @@ void LoadDungeonTilesetAssets(void)
OpenedFile *file;
OpenedFile *file_1;
u8 fileName [12];
sprintf(fileName,gUnknown_80F6A04,gUnknown_8108EC0[gDungeon->tileset]); // b%02dfon
file = OpenFileAndGetFileDataPtr(fileName,&gDungeonFileArchive);
DecompressATGlobalFile((u32 *)0x06008000,0,file);
@@ -142,7 +142,7 @@ void sub_8049884(void)
{
s32 XCoord;
s32 YCoord;
for(YCoord = 0; YCoord < DUNGEON_MAX_SIZE_Y; YCoord++)
{
for(XCoord = 0; XCoord < DUNGEON_MAX_SIZE_X; XCoord++) {
@@ -165,7 +165,7 @@ void sub_80498A8(int x,int y)
u16 sp_0x20; // sp 0x20
int r4;
s32 r7; // r7
if (x < 0) {
return;
}
@@ -325,7 +325,7 @@ void sub_8049B8C(void)
{
s32 XCoord;
s32 YCoord;
for(YCoord = 0; YCoord < DUNGEON_MAX_SIZE_Y; YCoord++)
{
for(XCoord = 0; XCoord < DUNGEON_MAX_SIZE_X; XCoord++) {
@@ -333,3 +333,103 @@ void sub_8049B8C(void)
}
}
}
void sub_8049BB0(s32 x, s32 y)
{
s32 terrainFlags;
s32 i;
s32 flags[6];
s32 var_4C[8];
bool8 var_2C[8];
flags[0] = 0;
flags[1] = 0;
flags[2] = 0;
flags[3] = 0;
terrainFlags = GetTile(x, y+1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[0] = terrainFlags;
var_4C[1] = GetTile(x+1, y+1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[2] = GetTile(x+1, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[3] = GetTile(x+1, y-1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[4] = GetTile(x, y-1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[5] = GetTile(x-1, y-1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[6] = GetTile(x-1, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
var_4C[7] = GetTile(x-1, y+1)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
if (var_4C[0] == TERRAIN_TYPE_NORMAL)
flags[CROSSABLE_TERRAIN_REGULAR] |= 1;
if (var_4C[2] == TERRAIN_TYPE_NORMAL)
flags[CROSSABLE_TERRAIN_REGULAR] |= 4;
if (var_4C[4] == TERRAIN_TYPE_NORMAL)
flags[CROSSABLE_TERRAIN_REGULAR] |= 0x10;
if (var_4C[6] == TERRAIN_TYPE_NORMAL)
flags[CROSSABLE_TERRAIN_REGULAR] |= 0x40;
if (var_4C[0] != 0 && var_4C[1] == TERRAIN_TYPE_NORMAL && var_4C[2] != 0)
flags[CROSSABLE_TERRAIN_REGULAR] |= 2;
if (var_4C[2] != 0 && var_4C[3] == TERRAIN_TYPE_NORMAL && var_4C[4] != 0)
flags[CROSSABLE_TERRAIN_REGULAR] |= 8;
if (var_4C[4] != 0 && var_4C[5] == TERRAIN_TYPE_NORMAL && var_4C[6] != 0)
flags[CROSSABLE_TERRAIN_REGULAR] |= 0x20;
if (var_4C[6] != 0 && var_4C[7] == TERRAIN_TYPE_NORMAL && var_4C[0] != 0)
flags[CROSSABLE_TERRAIN_REGULAR] |= 0x80;
for (i = 0; i < 8; i++) {
if (var_4C[i] == TERRAIN_TYPE_NORMAL || var_4C[i] == TERRAIN_TYPE_SECONDARY)
var_2C[i] = TRUE;
else
var_2C[i] = FALSE;
}
if (var_2C[0])
flags[CROSSABLE_TERRAIN_LIQUID] |= 1;
if (var_2C[2])
flags[CROSSABLE_TERRAIN_LIQUID] |= 4;
if (var_2C[4])
flags[CROSSABLE_TERRAIN_LIQUID] |= 0x10;
if (var_2C[6])
flags[CROSSABLE_TERRAIN_LIQUID] |= 0x40;
if (var_4C[0] != 0 && var_2C[1] && var_4C[2] != 0)
flags[CROSSABLE_TERRAIN_LIQUID] |= 2;
if (var_4C[2] != 0 && var_2C[3] && var_4C[4] != 0)
flags[CROSSABLE_TERRAIN_LIQUID] |= 8;
if (var_4C[4] != 0 && var_2C[5] && var_4C[6] != 0)
flags[CROSSABLE_TERRAIN_LIQUID] |= 0x20;
if (var_4C[6] != 0 && var_2C[7] && var_4C[0] != 0)
flags[CROSSABLE_TERRAIN_LIQUID] |= 0x80;
if (var_4C[0] != 0)
flags[2] |= 1;
if (var_4C[2] != 0)
flags[2] |= 4;
if (var_4C[4] != 0)
flags[2] |= 0x10;
if (var_4C[6] != 0)
flags[2] |= 0x40;
if (var_4C[0] != 0 && var_4C[1] != 0 && var_4C[2] != 0)
flags[CROSSABLE_TERRAIN_CREVICE] |= 2;
if (var_4C[2] != 0 && var_4C[3] != 0 && var_4C[4] != 0)
flags[CROSSABLE_TERRAIN_CREVICE] |= 8;
if (var_4C[4] != 0 && var_4C[5] != 0 && var_4C[6] != 0)
flags[CROSSABLE_TERRAIN_CREVICE] |= 0x20;
if (var_4C[6] != 0 && var_4C[7] != 0 && var_4C[0] != 0)
flags[CROSSABLE_TERRAIN_CREVICE] |= 0x80;
flags[3] = 0xFF;
if (x <= 1)
flags[CROSSABLE_TERRAIN_WALL] = 0x1F;
if (y <= 1)
flags[CROSSABLE_TERRAIN_WALL] &= ~(0x8 | 0x10 | 0x20);
if (x > 53)
flags[CROSSABLE_TERRAIN_WALL] &= ~(0x2 | 0x4 | 0x8);
if (y > 29)
flags[CROSSABLE_TERRAIN_WALL] &= ~(0x80 | 0x1 | 0x2);
GetTileSafe(x, y)->walkableNeighborFlags[CROSSABLE_TERRAIN_REGULAR] = flags[CROSSABLE_TERRAIN_REGULAR];
GetTileSafe(x, y)->walkableNeighborFlags[CROSSABLE_TERRAIN_LIQUID] = flags[CROSSABLE_TERRAIN_LIQUID];
GetTileSafe(x, y)->walkableNeighborFlags[CROSSABLE_TERRAIN_CREVICE] = flags[CROSSABLE_TERRAIN_CREVICE];
GetTileSafe(x, y)->walkableNeighborFlags[CROSSABLE_TERRAIN_WALL] = flags[CROSSABLE_TERRAIN_WALL];
}