mirror of
https://github.com/pret/pmd-red.git
synced 2026-06-17 06:00:24 -05:00
153 lines
3.7 KiB
C
153 lines
3.7 KiB
C
#include "global.h"
|
|
#include "dungeon_map_access.h"
|
|
#include "dungeon_random.h"
|
|
#include "structs/str_dungeon.h"
|
|
|
|
void sub_804FBE8(void)
|
|
{
|
|
Tile *tile;
|
|
int y;
|
|
int x;
|
|
|
|
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
|
|
{
|
|
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
|
|
{
|
|
tile = GetTileMut(x,y);
|
|
if ((tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != TERRAIN_TYPE_NORMAL) {
|
|
if ((tile->terrainType & (TERRAIN_TYPE_UNK_8 | TERRAIN_TYPE_IMPASSABLE_WALL)) != 0) {
|
|
tile->unk4 &= 0xfffd;
|
|
}
|
|
tile->unk4 &= 0xfffb;
|
|
}
|
|
if ((tile->unk4 & 1) != 0) {
|
|
tile->terrainType |= TERRAIN_TYPE_STAIRS;
|
|
tile->unk4 &= 0xfffb;
|
|
}
|
|
if ((tile->unk4 & 2) != 0) {
|
|
tile->unk4 &= 0xfffb;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_804FC74(void)
|
|
{
|
|
Tile *tile;
|
|
int y;
|
|
int x;
|
|
|
|
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
|
|
{
|
|
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
|
|
{
|
|
if ((GetTile(x, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_SECONDARY) {
|
|
tile = GetTileMut(x,y);
|
|
tile->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
|
|
tile->terrainType |= (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_804FCCC(void)
|
|
{
|
|
Tile *tile;
|
|
int y;
|
|
int x;
|
|
|
|
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
|
|
{
|
|
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
|
|
{
|
|
if ((GetTile(x, y)->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) != 0) {
|
|
tile = GetTileMut(x,y);
|
|
tile->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_804FD10(Tile *tile)
|
|
{
|
|
tile->terrainType = 0;
|
|
tile->unk4 = 0;
|
|
tile->room = -1;
|
|
tile->unk8 = 0;
|
|
tile->walkableNeighborFlags[CROSSABLE_TERRAIN_REGULAR] = 0;
|
|
tile->walkableNeighborFlags[CROSSABLE_TERRAIN_LIQUID] = 0;
|
|
tile->walkableNeighborFlags[CROSSABLE_TERRAIN_CREVICE] = 0;
|
|
tile->walkableNeighborFlags[CROSSABLE_TERRAIN_WALL] = 0;
|
|
tile->unkE = 0;
|
|
tile->monster = NULL;
|
|
tile->object = NULL;
|
|
}
|
|
|
|
bool8 static inline boundsCheck(int x, int y)
|
|
{
|
|
if (x < 0 || (y < 0)) return TRUE;
|
|
if (DUNGEON_MAX_SIZE_X <= x) return TRUE;
|
|
if (DUNGEON_MAX_SIZE_Y <= y) return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
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(GetTileMut(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)))
|
|
{
|
|
GetTileMut(x,y)->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
|
|
}
|
|
}
|
|
}
|
|
|
|
gDungeon->unkE21C.x = -1;
|
|
gDungeon->unkE21C.y = -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->traps[x]->type = 0;
|
|
}
|
|
}
|
|
|
|
|
|
void sub_804FED0(s32 *param_1, s32 param_2)
|
|
{
|
|
int idx1;
|
|
int idx2;
|
|
s32 temp;
|
|
int counter;
|
|
|
|
for (counter = 0; counter < param_2 << 1; counter++) {
|
|
idx1 = DungeonRandInt(param_2);
|
|
idx2 = DungeonRandInt(param_2);
|
|
temp = param_1[idx1];
|
|
param_1[idx1] = param_1[idx2];
|
|
param_1[idx2] = temp;
|
|
}
|
|
}
|