some unknown, maybe fixed floors dung generation

This commit is contained in:
DizzyEggg
2024-11-18 09:27:57 +01:00
parent 973838de7a
commit 5fcb028d81
4 changed files with 54 additions and 223 deletions

View File

@@ -6,225 +6,6 @@
.text
thumb_func_start sub_8051288
sub_8051288:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0xC
str r0, [sp, 0x4]
ldr r0, _08051374
ldr r7, [r0]
ldr r0, _08051378
adds r3, r7, r0
ldr r0, [r3]
ldr r0, [r0, 0x4]
ldr r2, [sp, 0x4]
lsls r1, r2, 2
adds r0, r1, r0
ldr r0, [r0]
ldrb r2, [r0]
mov r10, r2
ldrb r0, [r0, 0x1]
mov r9, r0
ldr r2, _0805137C
adds r0, r7, r2
movs r4, 0
mov r2, r10
strh r2, [r0]
ldr r2, _08051380
adds r0, r7, r2
mov r2, r9
strh r2, [r0]
ldr r2, _08051384
ldr r0, [r3]
ldr r0, [r0, 0x4]
adds r1, r0
ldr r0, [r1]
adds r0, 0x3
str r0, [r2]
ldr r0, _08051388
strb r4, [r0]
movs r6, 0x5
mov r0, r9
adds r0, 0x5
cmp r6, r0
bge _0805132E
movs r1, 0x5
add r1, r10
mov r8, r1
str r0, [sp, 0x8]
_080512E8:
movs r5, 0x5
cmp r5, r8
bge _08051326
_080512EE:
bl sub_80511F0
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
adds r0, r5, 0
adds r1, r6, 0
bl GetTileSafe
movs r1, 0x1
str r1, [sp]
adds r1, r4, 0
adds r2, r5, 0
adds r3, r6, 0
bl sub_805124C
lsls r0, 24
cmp r0, 0
beq _08051320
ldr r2, _0805138C
adds r0, r7, r2
strh r5, [r0]
ldr r1, _08051390
adds r0, r7, r1
strh r6, [r0]
_08051320:
adds r5, 0x1
cmp r5, r8
blt _080512EE
_08051326:
adds r6, 0x1
ldr r2, [sp, 0x8]
cmp r6, r2
blt _080512E8
_0805132E:
movs r6, 0
ldr r0, _08051394
adds r7, r0, 0
_08051334:
movs r5, 0
adds r4, r6, 0x1
_08051338:
cmp r5, 0x4
ble _08051350
mov r0, r10
adds r0, 0x5
cmp r5, r0
bge _08051350
cmp r6, 0x4
ble _08051350
mov r0, r9
adds r0, 0x5
cmp r6, r0
blt _080513A0
_08051350:
adds r0, r5, 0
adds r1, r6, 0
bl GetTileSafe
adds r2, r0, 0
ldrh r1, [r2]
movs r0, 0x10
movs r3, 0
orrs r1, r0
strh r1, [r2]
ldr r0, _08051398
ldrb r0, [r0]
cmp r0, 0
beq _0805139C
ands r1, r7
movs r0, 0x3
orrs r1, r0
b _0805139E
.align 2, 0
_08051374: .4byte gDungeon
_08051378: .4byte 0x00013568
_0805137C: .4byte 0x0000e260
_08051380: .4byte 0x0000e262
_08051384: .4byte gUnknown_202F1DC
_08051388: .4byte gUnknown_202F1E1
_0805138C: .4byte 0x0000e21c
_08051390: .4byte 0x0000e21e
_08051394: .4byte 0x0000fffc
_08051398: .4byte gUnknown_202F1A8
_0805139C:
ands r1, r7
_0805139E:
strh r1, [r2]
_080513A0:
adds r5, 0x1
cmp r5, 0x37
ble _08051338
adds r6, r4, 0
cmp r6, 0x1F
ble _08051334
ldr r1, [sp, 0x4]
cmp r1, 0x4
bne _080513DA
movs r6, 0x5
ldr r2, _0805142C
adds r7, r2, 0
_080513B8:
movs r5, 0x2
adds r4, r6, 0x1
_080513BC:
adds r0, r5, 0
adds r1, r6, 0
bl GetTileSafe
ldrh r2, [r0]
movs r1, 0x10
orrs r1, r2
ands r1, r7
strh r1, [r0]
adds r5, 0x1
cmp r5, 0x4
ble _080513BC
adds r6, r4, 0
cmp r6, 0x10
ble _080513B8
_080513DA:
ldr r0, _08051430
ldr r0, [r0]
ldr r1, _08051434
adds r0, r1
movs r2, 0
ldrsh r0, [r0, r2]
cmp r0, 0x3F
ble _08051416
movs r6, 0
_080513EC:
movs r5, 0
adds r4, r6, 0x1
_080513F0:
adds r0, r5, 0
adds r1, r6, 0
bl GetTileSafe
adds r2, r0, 0
ldrh r1, [r2]
movs r0, 0x3
ands r0, r1
cmp r0, 0
bne _0805140A
movs r0, 0x10
orrs r0, r1
strh r0, [r2]
_0805140A:
adds r5, 0x1
cmp r5, 0x37
ble _080513F0
adds r6, r4, 0
cmp r6, 0x1F
ble _080513EC
_08051416:
bl sub_804E9DC
add sp, 0xC
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0805142C: .4byte 0x0000fffc
_08051430: .4byte gDungeon
_08051434: .4byte 0x00003a0e
thumb_func_end sub_8051288
thumb_func_start sub_8051438
sub_8051438:
push {r4-r7,lr}

View File

@@ -365,7 +365,7 @@ typedef struct Dungeon
struct MinMaxPosition kecleonShopPos;
u32 unkE250;
u8 fillE254[0xE260 - 0xE254];
u32 unkE260;
Position unkE260;
/* 0xE264 */ Weather weather; // Uses the weather constants in weather.h.
/* 0xE27C */ Tile unkE27C[8][8];
/* 0xE87C */ u8 unkE87C[8][8];

View File

@@ -6422,11 +6422,61 @@ bool8 sub_805124C(Tile *tile, u8 a1, s32 x, s32 y, u8 a5)
return sub_8051A74(tile, a1, x, y, a5);
}
/*
void sub_8051288(s32 fixedRoomId)
{
s32 x, y;
Dungeon *dungeon = gDungeon;
struct PositionU8 **fileData = (void *) dungeon->unk13568->data;
s32 fixedRoomSizeX = fileData[fixedRoomId]->x;
s32 fixedRoomSizeY = fileData[fixedRoomId]->y;
dungeon->unkE260.x = fixedRoomSizeX;
dungeon->unkE260.y = fixedRoomSizeY;
// FIX ME
gUnknown_202F1DC = ((u8 **)(dungeon->unk13568->data))[fixedRoomId] + 3;
gUnknown_202F1E1 = 0;
for (x = 5; x < fixedRoomSizeX + 5; x++) {
for (y = 5; y < fixedRoomSizeY + 5; y++) {
u8 unk = sub_80511F0();
if (sub_805124C(GetTileSafe(x, y), unk, x, y, 1)) {
dungeon->unkE260.x = x;
dungeon->unkE260.y = y;
}
}
}
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
if (y > 4)
Tile *tile = GetTileSafe(x, y);
if (GetTerrainType(tile) == TERRAIN_TYPE_WALL) {
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
}
}
}
if (fixedRoomId != 4) {
for (x = 0; x < 17; x++) {
for (y = 0; y < 5; y++) {
Tile *tile = GetTileSafe(x, y);
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
}
}
}
if (gDungeon->tileset < 64) {
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
Tile *tile = GetTileSafe(x, y);
if (GetTerrainType(tile) == TERRAIN_TYPE_WALL) {
tile->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
}
}
}
}
sub_804E9DC();
}
*/
//

View File

@@ -18,7 +18,7 @@ extern void sub_8082FA8(unkStruct_8094924 *, void *, s32);
void SaveTile(unkStruct_8094924 *r0, Tile *tile);
void sub_80830F8(void * , void*);
void sub_808312C(void *, u32 *);
void sub_808312C(void *, void *);
void SaveDungeonWeather(unkStruct_8094924 *r0, Weather *weather);
void sub_8083078(void *, u32);
void sub_80830B4(void *, u8);