mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-26 00:15:48 -05:00
sub_805124C
This commit is contained in:
parent
cf71f88356
commit
973838de7a
|
|
@ -5,410 +5,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8050F90
|
||||
sub_8050F90:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x3C
|
||||
str r0, [sp]
|
||||
str r1, [sp, 0x4]
|
||||
str r2, [sp, 0x8]
|
||||
str r3, [sp, 0xC]
|
||||
movs r0, 0
|
||||
str r0, [sp, 0x10]
|
||||
movs r1, 0
|
||||
str r1, [sp, 0x14]
|
||||
movs r2, 0
|
||||
b _080511D0
|
||||
_08050FB0:
|
||||
movs r4, 0
|
||||
str r4, [sp, 0x18]
|
||||
ldr r5, [sp, 0x1C]
|
||||
adds r5, 0x1
|
||||
str r5, [sp, 0x28]
|
||||
ldr r6, [sp, 0x4]
|
||||
cmp r4, r6
|
||||
blt _08050FC2
|
||||
b _080511CE
|
||||
_08050FC2:
|
||||
ldr r1, [sp, 0x18]
|
||||
lsls r0, r1, 2
|
||||
ldr r2, [sp, 0xC]
|
||||
adds r0, r2
|
||||
ldr r3, [r0]
|
||||
adds r4, r3, 0x2
|
||||
mov r9, r4
|
||||
ldr r5, [sp, 0x1C]
|
||||
lsls r1, r5, 2
|
||||
ldr r6, [sp, 0x5C]
|
||||
adds r1, r6
|
||||
ldr r2, [r1]
|
||||
adds r4, r2, 0x2
|
||||
mov r10, r4
|
||||
ldr r0, [r0, 0x4]
|
||||
subs r0, r3
|
||||
subs r4, r0, 0x4
|
||||
ldr r0, [r1, 0x4]
|
||||
subs r0, r2
|
||||
subs r7, r0, 0x4
|
||||
movs r3, 0x5
|
||||
movs r5, 0x5
|
||||
ldr r6, [sp, 0x4]
|
||||
cmp r6, 0x2
|
||||
bgt _08050FF8
|
||||
movs r3, 0xA
|
||||
movs r4, 0xE
|
||||
_08050FF8:
|
||||
ldr r0, [sp, 0x8]
|
||||
cmp r0, 0x1
|
||||
bne _08051002
|
||||
movs r5, 0x10
|
||||
movs r7, 0x18
|
||||
_08051002:
|
||||
ldr r2, [sp, 0x1C]
|
||||
lsls r1, r2, 5
|
||||
ldr r6, [sp, 0x18]
|
||||
lsls r2, r6, 4
|
||||
subs r0, r2, r6
|
||||
lsls r0, 5
|
||||
ldr r6, [sp]
|
||||
adds r0, r6
|
||||
adds r6, r1, r0
|
||||
ldrb r0, [r6, 0xA]
|
||||
str r1, [sp, 0x30]
|
||||
str r2, [sp, 0x2C]
|
||||
cmp r0, 0
|
||||
bne _08051020
|
||||
b _08051130
|
||||
_08051020:
|
||||
ldr r0, [sp, 0x14]
|
||||
ldr r1, [sp, 0x60]
|
||||
cmp r0, r1
|
||||
beq _0805108C
|
||||
adds r0, r3, 0
|
||||
adds r1, r4, 0
|
||||
bl DungeonRandRange
|
||||
adds r6, r0, 0
|
||||
adds r0, r5, 0
|
||||
adds r1, r7, 0
|
||||
bl DungeonRandRange
|
||||
adds r5, r0, 0
|
||||
movs r1, 0x1
|
||||
adds r0, r6, 0
|
||||
orrs r0, r1
|
||||
cmp r0, r4
|
||||
bge _08051048
|
||||
adds r6, r0, 0
|
||||
_08051048:
|
||||
adds r0, r5, 0
|
||||
orrs r0, r1
|
||||
cmp r0, r7
|
||||
bge _08051052
|
||||
adds r5, r0, 0
|
||||
_08051052:
|
||||
lsls r0, r5, 1
|
||||
adds r0, r5
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
cmp r6, r0
|
||||
ble _08051062
|
||||
adds r6, r0, 0
|
||||
_08051062:
|
||||
lsls r0, r6, 1
|
||||
adds r0, r6
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r0, 1
|
||||
cmp r5, r0
|
||||
ble _08051072
|
||||
adds r5, r0, 0
|
||||
_08051072:
|
||||
subs r0, r4, r6
|
||||
bl DungeonRandInt
|
||||
mov r2, r9
|
||||
adds r4, r0, r2
|
||||
subs r0, r7, r5
|
||||
bl DungeonRandInt
|
||||
mov r3, r10
|
||||
adds r7, r0, r3
|
||||
adds r3, r4, r6
|
||||
adds r6, r7, r5
|
||||
b _08051098
|
||||
_0805108C:
|
||||
mov r4, r9
|
||||
mov r7, r10
|
||||
ldr r5, [sp, 0x64]
|
||||
adds r3, r4, r5
|
||||
ldr r0, [sp, 0x68]
|
||||
adds r6, r7, r0
|
||||
_08051098:
|
||||
ldr r1, [sp, 0x2C]
|
||||
ldr r2, [sp, 0x18]
|
||||
subs r0, r1, r2
|
||||
lsls r0, 5
|
||||
ldr r5, [sp]
|
||||
adds r0, r5
|
||||
ldr r1, [sp, 0x30]
|
||||
adds r0, r1, r0
|
||||
strh r4, [r0]
|
||||
strh r3, [r0, 0x4]
|
||||
strh r7, [r0, 0x2]
|
||||
strh r6, [r0, 0x6]
|
||||
adds r5, r4, 0
|
||||
ldr r2, [sp, 0x10]
|
||||
adds r2, 0x1
|
||||
str r2, [sp, 0x20]
|
||||
ldr r4, [sp, 0x14]
|
||||
adds r4, 0x1
|
||||
str r4, [sp, 0x24]
|
||||
ldr r0, [sp, 0x18]
|
||||
adds r0, 0x1
|
||||
mov r10, r0
|
||||
cmp r5, r3
|
||||
bge _08051108
|
||||
_080510C8:
|
||||
adds r4, r7, 0
|
||||
adds r1, r5, 0x1
|
||||
mov r8, r1
|
||||
cmp r4, r6
|
||||
bge _08051102
|
||||
ldr r2, _0805112C
|
||||
mov r9, r2
|
||||
_080510D6:
|
||||
adds r0, r5, 0
|
||||
adds r1, r4, 0
|
||||
str r3, [sp, 0x38]
|
||||
bl GetTileSafe
|
||||
ldrh r1, [r0]
|
||||
mov r2, r9
|
||||
ands r1, r2
|
||||
movs r2, 0x1
|
||||
orrs r1, r2
|
||||
strh r1, [r0]
|
||||
adds r0, r5, 0
|
||||
adds r1, r4, 0
|
||||
bl GetTileSafe
|
||||
mov r1, sp
|
||||
ldrb r1, [r1, 0x10]
|
||||
strb r1, [r0, 0x9]
|
||||
adds r4, 0x1
|
||||
ldr r3, [sp, 0x38]
|
||||
cmp r4, r6
|
||||
blt _080510D6
|
||||
_08051102:
|
||||
mov r5, r8
|
||||
cmp r5, r3
|
||||
blt _080510C8
|
||||
_08051108:
|
||||
ldr r2, [sp, 0x14]
|
||||
ldr r3, [sp, 0x60]
|
||||
cmp r2, r3
|
||||
beq _08051124
|
||||
ldr r4, [sp, 0x2C]
|
||||
ldr r5, [sp, 0x18]
|
||||
subs r0, r4, r5
|
||||
lsls r0, 5
|
||||
ldr r6, [sp]
|
||||
adds r0, r6
|
||||
ldr r1, [sp, 0x30]
|
||||
adds r0, r1, r0
|
||||
movs r1, 0x1
|
||||
strb r1, [r0, 0x1D]
|
||||
_08051124:
|
||||
ldr r2, [sp, 0x20]
|
||||
str r2, [sp, 0x10]
|
||||
b _080511BE
|
||||
.align 2, 0
|
||||
_0805112C: .4byte 0x0000fffc
|
||||
_08051130:
|
||||
movs r1, 0x2
|
||||
movs r3, 0x4
|
||||
movs r2, 0x2
|
||||
mov r8, r3
|
||||
ldr r5, [sp, 0x18]
|
||||
cmp r5, 0
|
||||
bne _08051140
|
||||
movs r1, 0x1
|
||||
_08051140:
|
||||
ldr r0, [sp, 0x1C]
|
||||
cmp r0, 0
|
||||
bne _08051148
|
||||
movs r2, 0x1
|
||||
_08051148:
|
||||
ldr r0, [sp, 0x4]
|
||||
subs r0, 0x1
|
||||
ldr r5, [sp, 0x18]
|
||||
cmp r5, r0
|
||||
bne _08051154
|
||||
movs r3, 0x2
|
||||
_08051154:
|
||||
ldr r0, [sp, 0x8]
|
||||
subs r0, 0x1
|
||||
ldr r5, [sp, 0x1C]
|
||||
cmp r5, r0
|
||||
bne _08051162
|
||||
movs r0, 0x2
|
||||
mov r8, r0
|
||||
_08051162:
|
||||
mov r5, r9
|
||||
adds r0, r5, r1
|
||||
adds r1, r5, r4
|
||||
subs r1, r3
|
||||
str r2, [sp, 0x34]
|
||||
bl DungeonRandRange
|
||||
adds r5, r0, 0
|
||||
ldr r2, [sp, 0x34]
|
||||
mov r1, r10
|
||||
adds r0, r1, r2
|
||||
adds r1, r7
|
||||
mov r2, r8
|
||||
subs r1, r2
|
||||
bl DungeonRandRange
|
||||
adds r4, r0, 0
|
||||
strh r5, [r6]
|
||||
adds r0, r5, 0x1
|
||||
strh r0, [r6, 0x4]
|
||||
strh r4, [r6, 0x2]
|
||||
adds r0, r4, 0x1
|
||||
strh r0, [r6, 0x6]
|
||||
adds r0, r5, 0
|
||||
adds r1, r4, 0
|
||||
bl GetTileSafe
|
||||
ldrh r1, [r0]
|
||||
ldr r3, _080511EC
|
||||
adds r2, r3, 0
|
||||
ands r1, r2
|
||||
movs r2, 0x1
|
||||
orrs r1, r2
|
||||
strh r1, [r0]
|
||||
adds r0, r5, 0
|
||||
adds r1, r4, 0
|
||||
bl GetTileSafe
|
||||
movs r1, 0xFF
|
||||
strb r1, [r0, 0x9]
|
||||
ldr r4, [sp, 0x14]
|
||||
adds r4, 0x1
|
||||
str r4, [sp, 0x24]
|
||||
ldr r5, [sp, 0x18]
|
||||
adds r5, 0x1
|
||||
mov r10, r5
|
||||
_080511BE:
|
||||
ldr r6, [sp, 0x24]
|
||||
str r6, [sp, 0x14]
|
||||
mov r0, r10
|
||||
str r0, [sp, 0x18]
|
||||
ldr r1, [sp, 0x4]
|
||||
cmp r0, r1
|
||||
bge _080511CE
|
||||
b _08050FC2
|
||||
_080511CE:
|
||||
ldr r2, [sp, 0x28]
|
||||
_080511D0:
|
||||
str r2, [sp, 0x1C]
|
||||
ldr r3, [sp, 0x8]
|
||||
cmp r2, r3
|
||||
bge _080511DA
|
||||
b _08050FB0
|
||||
_080511DA:
|
||||
add sp, 0x3C
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080511EC: .4byte 0x0000fffc
|
||||
thumb_func_end sub_8050F90
|
||||
|
||||
thumb_func_start sub_80511F0
|
||||
sub_80511F0:
|
||||
push {r4-r6,lr}
|
||||
ldr r6, _08051204
|
||||
ldrb r0, [r6]
|
||||
cmp r0, 0
|
||||
beq _0805120C
|
||||
subs r0, 0x1
|
||||
strb r0, [r6]
|
||||
ldr r0, _08051208
|
||||
ldrb r0, [r0]
|
||||
b _08051244
|
||||
.align 2, 0
|
||||
_08051204: .4byte gUnknown_202F1E1
|
||||
_08051208: .4byte gUnknown_202F1E0
|
||||
_0805120C:
|
||||
ldr r1, _0805122C
|
||||
ldr r5, _08051230
|
||||
ldr r2, [r5]
|
||||
ldrb r3, [r2]
|
||||
strb r3, [r1]
|
||||
adds r4, r2, 0x1
|
||||
str r4, [r5]
|
||||
lsls r0, r3, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0xE
|
||||
bne _08051234
|
||||
ldrb r0, [r2, 0x1]
|
||||
strb r0, [r1]
|
||||
adds r0, r4, 0x1
|
||||
str r0, [r5]
|
||||
b _08051242
|
||||
.align 2, 0
|
||||
_0805122C: .4byte gUnknown_202F1E0
|
||||
_08051230: .4byte gUnknown_202F1DC
|
||||
_08051234:
|
||||
movs r0, 0xF
|
||||
ands r0, r3
|
||||
strb r0, [r6]
|
||||
movs r0, 0xF0
|
||||
ands r0, r3
|
||||
lsrs r0, 4
|
||||
strb r0, [r1]
|
||||
_08051242:
|
||||
ldrb r0, [r1]
|
||||
_08051244:
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80511F0
|
||||
|
||||
thumb_func_start sub_805124C
|
||||
sub_805124C:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x4
|
||||
ldr r5, [sp, 0x1C]
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
lsls r5, 24
|
||||
lsrs r5, 24
|
||||
ldrh r6, [r0]
|
||||
movs r7, 0x80
|
||||
lsls r7, 1
|
||||
adds r4, r7, 0
|
||||
movs r7, 0
|
||||
mov r8, r7
|
||||
orrs r4, r6
|
||||
strh r4, [r0]
|
||||
mov r4, r8
|
||||
strb r4, [r0, 0xE]
|
||||
str r5, [sp]
|
||||
bl sub_8051A74
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
add sp, 0x4
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_805124C
|
||||
|
||||
thumb_func_start sub_8051288
|
||||
sub_8051288:
|
||||
|
|
|
|||
|
|
@ -356,7 +356,7 @@ typedef struct Dungeon
|
|||
/* 0x3A0E */ s16 tileset;
|
||||
/* 0x3A10 */ s16 unk3A10;
|
||||
/* 0x3A12 */ s16 unk3A12;
|
||||
/* 0x3A14 */ s16 bossBattleIndex;
|
||||
/* 0x3A14 */ s16 fixedRoomId;
|
||||
/* 0x3A16 */ s16 unk3A16;
|
||||
/* 0x3A18 */ Tile tiles[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X];
|
||||
/* 0xEA18 */ Position playerSpawn;
|
||||
|
|
|
|||
|
|
@ -610,7 +610,7 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8)
|
|||
gDungeon->weather.weather = 0;
|
||||
gDungeon->tileset = gDungeon->unk1C574.unk2;
|
||||
gDungeon->unk3A10 = gDungeon->unk1C574.unk3;
|
||||
gDungeon->bossBattleIndex = gDungeon->unk1C574.unk12;
|
||||
gDungeon->fixedRoomId = gDungeon->unk1C574.unk12;
|
||||
sub_807E5E4(0);
|
||||
sub_80842F0();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -196,13 +196,13 @@ bool8 sub_806F660(Entity *pokemon,Entity *target)
|
|||
targetInfo = target->info;
|
||||
iVar8 = -1;
|
||||
size = GetBodySize(targetInfo->apparentID);
|
||||
if ((1 < ((u16)(gDungeon->bossBattleIndex - 4))) && (gDungeon->bossBattleIndex != 9) && (gDungeon->bossBattleIndex != 0xf)) {
|
||||
if ((u16)(gDungeon->bossBattleIndex - 0x2cU) < 5) {
|
||||
if ((1 < ((u16)(gDungeon->fixedRoomId - 4))) && (gDungeon->fixedRoomId != 9) && (gDungeon->fixedRoomId != 0xf)) {
|
||||
if ((u16)(gDungeon->fixedRoomId - 0x2cU) < 5) {
|
||||
if (gDungeon->unk65C == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else if (gDungeon->bossBattleIndex == 0x31) {
|
||||
else if (gDungeon->fixedRoomId == 0x31) {
|
||||
if (gDungeon->fill655[4] == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,18 +20,18 @@ void sub_8084854(struct unkData_8107234 *);
|
|||
|
||||
void sub_80847D4(void)
|
||||
{
|
||||
u32 bossBattleIndex;
|
||||
u32 fixedRoomId;
|
||||
s32 index;
|
||||
|
||||
gDungeon->unk3A0D = 0;
|
||||
gDungeon->unk1356C = 0;
|
||||
sub_8040A84();
|
||||
for(index = 0; index < 0x3e7 && gUnknown_8107234[index].unk0[0] != 0; index++) {
|
||||
bossBattleIndex = gDungeon->bossBattleIndex;
|
||||
if (bossBattleIndex - 0x1c < 0x16) {
|
||||
bossBattleIndex = 0x1b;
|
||||
fixedRoomId = gDungeon->fixedRoomId;
|
||||
if (fixedRoomId - 0x1c < 0x16) {
|
||||
fixedRoomId = 0x1b;
|
||||
}
|
||||
if (bossBattleIndex == gUnknown_8107234[index].unk0[0])
|
||||
if (fixedRoomId == gUnknown_8107234[index].unk0[0])
|
||||
{
|
||||
sub_8084854(&gUnknown_8107234[index]);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ static bool8 xxx_dungeon_80442D0(bool8);
|
|||
|
||||
bool8 IsBossFight()
|
||||
{
|
||||
if (gDungeon->bossBattleIndex != 0 && gDungeon->bossBattleIndex <= 0x31)
|
||||
if (gDungeon->fixedRoomId != 0 && gDungeon->fixedRoomId <= 0x31)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,10 +66,10 @@ struct GridCell
|
|||
|
||||
#define GRID_CELL_LEN 15
|
||||
|
||||
void sub_804C790(s32 gridSizeX, s32 gridSizeY, s32 x2, s32 y2, s32 a4, UnkDungeonGlobal_unk1C574 *unkPtr);
|
||||
void sub_8050F90(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_LEN], s32 gridSizeX, s32 gridSizeY, s32 *listX, s32 *listY, s32 a5, s32 x2, s32 y2);
|
||||
void sub_8051438(struct GridCell *gridCell, s32 a1);
|
||||
extern void sub_8051288(s32 a0);
|
||||
static void sub_804C790(s32 gridSizeX, s32 gridSizeY, s32 fixedRoomSizeX, s32 fixedRoomSizeY, s32 fixedRoomId, UnkDungeonGlobal_unk1C574 *unkPtr);
|
||||
static void CreateRoomsAndAnchorsForFixedFloor(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_LEN], s32 gridSizeX, s32 gridSizeY, s32 *listX, s32 *listY, s32 a5, s32 fixedRoomSizeX, s32 fixedRoomSizeY);
|
||||
void sub_8051438(struct GridCell *gridCell, s32 fixedRoomId);
|
||||
void sub_8051288(s32 fixedRoomId);
|
||||
void GetGridPositions(s32 *listX, s32 *listY, s32 gridSizeX, s32 gridSizeY);
|
||||
void InitDungeonGrid(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_LEN], s32 gridSizeX, s32 gridSizeY);
|
||||
void GenerateRoomImperfections(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_LEN], s32 gridSizeX, s32 gridSizeY);
|
||||
|
|
@ -94,7 +94,7 @@ void sub_804FC74(void);
|
|||
void sub_804EB30(void);
|
||||
void sub_804E9DC(void);
|
||||
void sub_804B534(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
bool8 sub_804C70C(s32, UnkDungeonGlobal_unk1C574 *);
|
||||
bool8 GenerateFixedFloor(s32 fixedRoomId, UnkDungeonGlobal_unk1C574 *unkPtr);
|
||||
void GenerateStandardFloor(s32 a0, s32 a1, UnkDungeonGlobal_unk1C574 *a2);
|
||||
void GenerateOuterRingFloor(UnkDungeonGlobal_unk1C574 *a0);
|
||||
void GenerateCrossroadsFloor(UnkDungeonGlobal_unk1C574 *a0);
|
||||
|
|
@ -210,8 +210,9 @@ void sub_804AFAC(void)
|
|||
gDungeon->playerSpawn.x = -1;
|
||||
gDungeon->playerSpawn.y = -1;
|
||||
gDungeon->forceMonsterHouse = 0;
|
||||
if (gDungeon->bossBattleIndex != 0) {
|
||||
if (sub_804C70C(gDungeon->bossBattleIndex, unkPtr)) {
|
||||
if (gDungeon->fixedRoomId != 0) {
|
||||
// Check for a full-floor fixed room, if this is the case, generation is done.
|
||||
if (GenerateFixedFloor(gDungeon->fixedRoomId, unkPtr)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -545,7 +546,7 @@ void NAKED sub_804AFAC(void)
|
|||
" cmp r0, 0\n"
|
||||
" beq _0804B164\n"
|
||||
" mov r1, r8\n"
|
||||
" bl sub_804C70C\n"
|
||||
" bl GenerateFixedFloor\n"
|
||||
" lsls r0, 24\n"
|
||||
" cmp r0, 0\n"
|
||||
" beq _0804B0E4\n"
|
||||
|
|
@ -1644,34 +1645,34 @@ void GenerateOuterRoomsFloor(s32 gridSizeX_, s32 gridSizeY_, UnkDungeonGlobal_un
|
|||
GenerateSecondaryStructures(grid, gridSizeX, gridSizeY);
|
||||
}
|
||||
|
||||
bool8 sub_804C70C(s32 a0, UnkDungeonGlobal_unk1C574 *unkPtr)
|
||||
bool8 GenerateFixedFloor(s32 fixedRoomId, UnkDungeonGlobal_unk1C574 *unkPtr)
|
||||
{
|
||||
struct PositionU8 **fileData = (void *) gDungeon->unk13568->data;
|
||||
s32 x1 = fileData[a0]->x;
|
||||
s32 y1 = fileData[a0]->y;
|
||||
s32 fixedRoomSizeX = fileData[fixedRoomId]->x;
|
||||
s32 fixedRoomSizeY = fileData[fixedRoomId]->y;
|
||||
s32 gridSizeX, gridSizeY;
|
||||
|
||||
if (x1 == 0 || y1 == 0) {
|
||||
if (fixedRoomSizeX == 0 || fixedRoomSizeY == 0) {
|
||||
GenerateOneRoomMonsterHouseFloor();
|
||||
return FALSE;
|
||||
}
|
||||
else if (a0 < 50) {
|
||||
sub_8051288(a0);
|
||||
else if (fixedRoomId < 50) {
|
||||
sub_8051288(fixedRoomId);
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
gridSizeX = DUNGEON_MAX_SIZE_X / (x1 + 4);
|
||||
gridSizeX = DUNGEON_MAX_SIZE_X / (fixedRoomSizeX + 4);
|
||||
if (gridSizeX <= 1)
|
||||
gridSizeX = 1;
|
||||
gridSizeY = DUNGEON_MAX_SIZE_Y / (y1 + 4);
|
||||
gridSizeY = DUNGEON_MAX_SIZE_Y / (fixedRoomSizeY + 4);
|
||||
if (gridSizeY <= 1)
|
||||
gridSizeY = 1;
|
||||
sub_804C790(gridSizeX, gridSizeY, x1, y1, a0, unkPtr);
|
||||
sub_804C790(gridSizeX, gridSizeY, fixedRoomSizeX, fixedRoomSizeY, fixedRoomId, unkPtr);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_804C790(s32 gridSizeX, s32 gridSizeY, s32 x2, s32 y2, s32 a4, UnkDungeonGlobal_unk1C574 *unkPtr)
|
||||
static void sub_804C790(s32 gridSizeX, s32 gridSizeY, s32 fixedRoomSizeX, s32 fixedRoomSizeY, s32 fixedRoomId, UnkDungeonGlobal_unk1C574 *unkPtr)
|
||||
{
|
||||
s32 tries;
|
||||
struct GridCell grid[GRID_CELL_LEN][GRID_CELL_LEN];
|
||||
|
|
@ -1696,13 +1697,13 @@ void sub_804C790(s32 gridSizeX, s32 gridSizeY, s32 x2, s32 y2, s32 a4, UnkDungeo
|
|||
if (grid[cursorX][cursorY].isRoom)
|
||||
break;
|
||||
}
|
||||
sub_8050F90(grid, gridSizeX, gridSizeY, listX, listY, r10, x2, y2);
|
||||
CreateRoomsAndAnchorsForFixedFloor(grid, gridSizeX, gridSizeY, listX, listY, r10, fixedRoomSizeX, fixedRoomSizeY);
|
||||
if (gridSizeX != 1 || gridSizeY != 1) {
|
||||
AssignGridCellConnections(grid, gridSizeX, gridSizeY, cursorX, cursorY, unkPtr);
|
||||
CreateGridCellConnections(grid, gridSizeX, gridSizeY, listX, listY, TRUE);
|
||||
EnsureConnectedGrid(grid, gridSizeX, gridSizeY, listX, listY);
|
||||
}
|
||||
sub_8051438(&grid[cursorX][cursorY], a4);
|
||||
sub_8051438(&grid[cursorX][cursorY], fixedRoomId);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -6264,10 +6265,167 @@ bool8 StairsAlwaysReachable(s32 stairsX, s32 stairsY, bool8 markUnreachable)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
void sub_8050F90(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_LEN], s32 gridSizeX, s32 gridSizeY, s32 *listX, s32 *listY, s32 a5, s32 x2, s32 y2)
|
||||
static void CreateRoomsAndAnchorsForFixedFloor(struct GridCell grid[GRID_CELL_LEN][GRID_CELL_LEN], s32 gridSizeX, s32 gridSizeY, s32 *listX, s32 *listY, s32 a5, s32 fixedRoomSizeX, s32 fixedRoomSizeY)
|
||||
{
|
||||
s32 roomNumber = 0;
|
||||
s32 var_48 = 0;
|
||||
s32 x, y;
|
||||
|
||||
for (y = 0; y < gridSizeY; y++) {
|
||||
for (x = 0; x < gridSizeX; var_48++, x++) {
|
||||
s32 minX = listX[x] + 2;
|
||||
s32 minY = listY[y] + 2;
|
||||
s32 rangeX = listX[x + 1] - listX[x] - 4;
|
||||
s32 rangeY = listY[y + 1] - listY[y] - 4;
|
||||
s32 minRoomSizeX = 5;
|
||||
s32 minRoomSizeY = 5;
|
||||
|
||||
if (gridSizeX <= 2) {
|
||||
minRoomSizeX = 10;
|
||||
rangeX = 14;
|
||||
}
|
||||
if (gridSizeY == 1) {
|
||||
minRoomSizeY = 16;
|
||||
rangeY = 24;
|
||||
}
|
||||
|
||||
if (grid[x][y].isRoom) {
|
||||
// This cell is a room!
|
||||
s32 roomSizeX, roomSizeY;
|
||||
s32 startX, endX;
|
||||
s32 startY, endY;
|
||||
s32 roomX, roomY;
|
||||
|
||||
if (var_48 != a5) {
|
||||
roomSizeX = DungeonRandRange(minRoomSizeX, rangeX);
|
||||
roomSizeY = DungeonRandRange(minRoomSizeY, rangeY);
|
||||
|
||||
// Force small rooms to have odd-numbered dimensions (?)
|
||||
if ((roomSizeX | 1) < rangeX) {
|
||||
roomSizeX |= 1;
|
||||
}
|
||||
|
||||
if ((roomSizeY | 1) < rangeY) {
|
||||
roomSizeY |= 1;
|
||||
}
|
||||
|
||||
// Aspect ratio 2/3 < x/y < 3/2
|
||||
if (roomSizeX > (roomSizeY * 3) / 2) {
|
||||
roomSizeX = (roomSizeY * 3) / 2;
|
||||
}
|
||||
|
||||
if (roomSizeY > (roomSizeX * 3) / 2) {
|
||||
roomSizeY = (roomSizeX * 3) / 2;
|
||||
}
|
||||
|
||||
startX = DungeonRandInt(rangeX - roomSizeX) + minX;
|
||||
startY = DungeonRandInt(rangeY - roomSizeY) + minY;
|
||||
endX = startX + roomSizeX;
|
||||
endY = startY + roomSizeY;
|
||||
}
|
||||
else {
|
||||
startX = minX;
|
||||
startY = minY;
|
||||
endX = startX + fixedRoomSizeX;
|
||||
endY = startY + fixedRoomSizeY;
|
||||
}
|
||||
|
||||
// Create the room!
|
||||
grid[x][y].start.x = startX;
|
||||
grid[x][y].end.x = endX;
|
||||
grid[x][y].start.y = startY;
|
||||
grid[x][y].end.y = endY;
|
||||
|
||||
for (roomX = startX; roomX < endX; roomX++) {
|
||||
for (roomY = startY; roomY < endY; roomY++) {
|
||||
SetTerrainNormal(GetTileSafe(roomX, roomY));
|
||||
GetTileSafe(roomX, roomY)->room = roomNumber;
|
||||
}
|
||||
}
|
||||
|
||||
if (var_48 != a5) {
|
||||
grid[x][y].flagSecondaryStructure = TRUE;
|
||||
}
|
||||
|
||||
roomNumber++;
|
||||
}
|
||||
else {
|
||||
// This cell is not a room, create a 1x1 hallway anchor
|
||||
s32 pt_x, pt_y;
|
||||
s32 unk_x1 = 2;
|
||||
s32 unk_x2 = 4;
|
||||
s32 unk_y1 = 2;
|
||||
s32 unk_y2 = 4;
|
||||
|
||||
if (x == 0) {
|
||||
unk_x1 = 1;
|
||||
}
|
||||
if (y == 0) {
|
||||
unk_y1 = 1;
|
||||
}
|
||||
|
||||
if (x == gridSizeX - 1) {
|
||||
unk_x2 = 2;
|
||||
}
|
||||
if (y == gridSizeY - 1) {
|
||||
unk_y2 = 2;
|
||||
}
|
||||
|
||||
pt_x = DungeonRandRange(minX + unk_x1, minX + rangeX - unk_x2);
|
||||
pt_y = DungeonRandRange(minY + unk_y1, minY + rangeY - unk_y2);
|
||||
|
||||
grid[x][y].start.x = pt_x;
|
||||
grid[x][y].end.x = pt_x + 1;
|
||||
grid[x][y].start.y = pt_y;
|
||||
grid[x][y].end.y = pt_y + 1;
|
||||
|
||||
// Flag the tile as open to serve as a hallway anchor
|
||||
SetTerrainNormal(GetTileSafe(pt_x, pt_y));
|
||||
|
||||
// Set the room index to 0xFE for anchor
|
||||
GetTileSafe(pt_x, pt_y)->room = CORRIDOR_ROOM;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern u8 *gUnknown_202F1DC;
|
||||
extern u8 gUnknown_202F1E0;
|
||||
extern u8 gUnknown_202F1E1;
|
||||
|
||||
u8 sub_80511F0(void)
|
||||
{
|
||||
if (gUnknown_202F1E1 != 0) {
|
||||
gUnknown_202F1E1--;
|
||||
return gUnknown_202F1E0;
|
||||
}
|
||||
|
||||
gUnknown_202F1E0 = *gUnknown_202F1DC;
|
||||
gUnknown_202F1DC++;
|
||||
if (gUnknown_202F1E0 == 14) {
|
||||
gUnknown_202F1E0 = *gUnknown_202F1DC;
|
||||
gUnknown_202F1DC++;
|
||||
}
|
||||
else {
|
||||
gUnknown_202F1E1 = gUnknown_202F1E0 & 0xF;
|
||||
gUnknown_202F1E0 = (gUnknown_202F1E0 & 0xF0) >> 4;
|
||||
}
|
||||
return gUnknown_202F1E0;
|
||||
}
|
||||
|
||||
bool8 sub_8051A74(Tile *tile, u8 a1, s32 x, s32 y, u8 a5);
|
||||
|
||||
bool8 sub_805124C(Tile *tile, u8 a1, s32 x, s32 y, u8 a5)
|
||||
{
|
||||
tile->terrainType |= TERRAIN_TYPE_UNBREAKABLE;
|
||||
tile->unkE = 0;
|
||||
return sub_8051A74(tile, a1, x, y, a5);
|
||||
}
|
||||
|
||||
/*
|
||||
void sub_8051288(s32 fixedRoomId)
|
||||
{
|
||||
Dungeon *dungeon = gDungeon;
|
||||
}
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -492,7 +492,7 @@ void sub_8081454(unkStruct_8094924 *param_1)
|
|||
sub_8083048(param_1, gDungeon->tileset);
|
||||
sub_8083048(param_1,gDungeon->unk3A10);
|
||||
sub_8083048(param_1, gDungeon->unk3A12);
|
||||
sub_8083048(param_1, gDungeon->bossBattleIndex);
|
||||
sub_8083048(param_1, gDungeon->fixedRoomId);
|
||||
sub_8083048(param_1, gDungeon->unk3A16);
|
||||
for(iVar1 = 0; iVar1 < DUNGEON_MAX_SIZE_Y; iVar1++)
|
||||
{
|
||||
|
|
@ -829,7 +829,7 @@ void sub_8081C7C(unkStruct_8094924 *r0)
|
|||
gDungeon->tileset = sub_8083170(r0);
|
||||
gDungeon->unk3A10 = sub_8083170(r0);
|
||||
gDungeon->unk3A12 = sub_8083170(r0);
|
||||
gDungeon->bossBattleIndex = sub_8083170(r0);
|
||||
gDungeon->fixedRoomId = sub_8083170(r0);
|
||||
gDungeon->unk3A16 = sub_8083170(r0);
|
||||
|
||||
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user