Add pack/unpack for data masks (#2163)
This commit is contained in:
@@ -7,19 +7,36 @@
|
|||||||
#define MAPGRID_METATILE_ID_MASK 0x03FF // Bits 0-9
|
#define MAPGRID_METATILE_ID_MASK 0x03FF // Bits 0-9
|
||||||
#define MAPGRID_COLLISION_MASK 0x0C00 // Bits 10-11
|
#define MAPGRID_COLLISION_MASK 0x0C00 // Bits 10-11
|
||||||
#define MAPGRID_ELEVATION_MASK 0xF000 // Bits 12-15
|
#define MAPGRID_ELEVATION_MASK 0xF000 // Bits 12-15
|
||||||
|
#define MAPGRID_METATILE_ID_SHIFT 0
|
||||||
#define MAPGRID_COLLISION_SHIFT 10
|
#define MAPGRID_COLLISION_SHIFT 10
|
||||||
#define MAPGRID_ELEVATION_SHIFT 12
|
#define MAPGRID_ELEVATION_SHIFT 12
|
||||||
|
|
||||||
|
#define PACK_METATILE(metatileId) PACK(metatileId, MAPGRID_METATILE_ID_SHIFT, MAPGRID_METATILE_ID_MASK)
|
||||||
|
#define PACK_COLLISION(collision) PACK(collision, MAPGRID_COLLISION_SHIFT, MAPGRID_COLLISION_MASK)
|
||||||
|
#define PACK_ELEVATION(elevation) PACK(elevation, MAPGRID_ELEVATION_SHIFT, MAPGRID_ELEVATION_MASK)
|
||||||
|
#define UNPACK_METATILE(data) UNPACK(data, MAPGRID_METATILE_ID_SHIFT, MAPGRID_METATILE_ID_MASK)
|
||||||
|
#define UNPACK_COLLISION(data) UNPACK(data, MAPGRID_COLLISION_SHIFT, MAPGRID_COLLISION_MASK)
|
||||||
|
#define UNPACK_ELEVATION(data) UNPACK(data, MAPGRID_ELEVATION_SHIFT, MAPGRID_ELEVATION_MASK)
|
||||||
|
|
||||||
// An undefined map grid block has all metatile id bits set and nothing else
|
// An undefined map grid block has all metatile id bits set and nothing else
|
||||||
#define MAPGRID_UNDEFINED MAPGRID_METATILE_ID_MASK
|
#define MAPGRID_UNDEFINED MAPGRID_METATILE_ID_MASK
|
||||||
|
|
||||||
|
// When setting impassability manually GF sets all the collision bits
|
||||||
|
#define MAPGRID_IMPASSABLE MAPGRID_COLLISION_MASK
|
||||||
|
|
||||||
// Masks/shifts for metatile attributes
|
// Masks/shifts for metatile attributes
|
||||||
// Metatile attributes consist of an 8 bit behavior value, 4 unused bits, and a 4 bit layer type value
|
// Metatile attributes consist of an 8 bit behavior value, 4 unused bits, and a 4 bit layer type value
|
||||||
// This is the data stored in each data/tilesets/*/*/metatile_attributes.bin file
|
// This is the data stored in each data/tilesets/*/*/metatile_attributes.bin file
|
||||||
#define METATILE_ATTR_BEHAVIOR_MASK 0x00FF // Bits 0-7
|
#define METATILE_ATTR_BEHAVIOR_MASK 0x00FF // Bits 0-7
|
||||||
#define METATILE_ATTR_LAYER_MASK 0xF000 // Bits 12-15
|
#define METATILE_ATTR_LAYER_MASK 0xF000 // Bits 12-15
|
||||||
|
#define METATILE_ATTR_BEHAVIOR_SHIFT 0
|
||||||
#define METATILE_ATTR_LAYER_SHIFT 12
|
#define METATILE_ATTR_LAYER_SHIFT 12
|
||||||
|
|
||||||
|
#define PACK_BEHAVIOR(behavior) PACK(behavior, METATILE_ATTR_BEHAVIOR_SHIFT, METATILE_ATTR_BEHAVIOR_MASK)
|
||||||
|
#define PACK_LAYER_TYPE(layerType) PACK(layerType, METATILE_ATTR_LAYER_SHIFT, METATILE_ATTR_LAYER_MASK)
|
||||||
|
#define UNPACK_BEHAVIOR(data) UNPACK(data, METATILE_ATTR_BEHAVIOR_SHIFT, METATILE_ATTR_BEHAVIOR_MASK)
|
||||||
|
#define UNPACK_LAYER_TYPE(data) UNPACK(data, METATILE_ATTR_LAYER_SHIFT, METATILE_ATTR_LAYER_MASK)
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
METATILE_LAYER_TYPE_NORMAL, // Metatile uses middle and top bg layers
|
METATILE_LAYER_TYPE_NORMAL, // Metatile uses middle and top bg layers
|
||||||
METATILE_LAYER_TYPE_COVERED, // Metatile uses bottom and middle bg layers
|
METATILE_LAYER_TYPE_COVERED, // Metatile uses bottom and middle bg layers
|
||||||
|
|||||||
@@ -119,6 +119,9 @@
|
|||||||
#define T2_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24))
|
#define T2_READ_32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24))
|
||||||
#define T2_READ_PTR(ptr) (void *) T2_READ_32(ptr)
|
#define T2_READ_PTR(ptr) (void *) T2_READ_32(ptr)
|
||||||
|
|
||||||
|
#define PACK(data, shift, mask) ( ((data) << (shift)) & (mask) )
|
||||||
|
#define UNPACK(data, shift, mask) ( ((data) & (mask)) >> (shift) )
|
||||||
|
|
||||||
// Macros for checking the joypad
|
// Macros for checking the joypad
|
||||||
#define TEST_BUTTON(field, button) ((field) & (button))
|
#define TEST_BUTTON(field, button) ((field) & (button))
|
||||||
#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
|
#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
|
||||||
|
|||||||
@@ -1557,6 +1557,7 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio
|
|||||||
gSaveBlock1Ptr->pos.x = (mapLayout->width * (i % PYRAMID_FLOOR_SQUARES_WIDE)) + x;
|
gSaveBlock1Ptr->pos.x = (mapLayout->width * (i % PYRAMID_FLOOR_SQUARES_WIDE)) + x;
|
||||||
gSaveBlock1Ptr->pos.y = (mapLayout->height * (i / PYRAMID_FLOOR_SQUARES_WIDE)) + y;
|
gSaveBlock1Ptr->pos.y = (mapLayout->height * (i / PYRAMID_FLOOR_SQUARES_WIDE)) + y;
|
||||||
}
|
}
|
||||||
|
// Copy the elevation and collision, but overwrite the metatile ID
|
||||||
map[x] = (layoutMap[x] & (MAPGRID_ELEVATION_MASK | MAPGRID_COLLISION_MASK)) | METATILE_BattlePyramid_Floor;
|
map[x] = (layoutMap[x] & (MAPGRID_ELEVATION_MASK | MAPGRID_COLLISION_MASK)) | METATILE_BattlePyramid_Floor;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -80,9 +80,9 @@ void DoBrailleDigEffect(void)
|
|||||||
MapGridSetMetatileIdAt( 9 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft);
|
MapGridSetMetatileIdAt( 9 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft);
|
||||||
MapGridSetMetatileIdAt(10 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid);
|
MapGridSetMetatileIdAt(10 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid);
|
||||||
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight);
|
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight);
|
||||||
MapGridSetMetatileIdAt( 9 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt( 9 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_IMPASSABLE);
|
||||||
MapGridSetMetatileIdAt(10 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid);
|
MapGridSetMetatileIdAt(10 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid);
|
||||||
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_IMPASSABLE);
|
||||||
DrawWholeMapView();
|
DrawWholeMapView();
|
||||||
PlaySE(SE_BANG);
|
PlaySE(SE_BANG);
|
||||||
FlagSet(FLAG_SYS_BRAILLE_DIG);
|
FlagSet(FLAG_SYS_BRAILLE_DIG);
|
||||||
@@ -207,9 +207,9 @@ static void DoBrailleRegirockEffect(void)
|
|||||||
MapGridSetMetatileIdAt(7 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft);
|
MapGridSetMetatileIdAt(7 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft);
|
||||||
MapGridSetMetatileIdAt(8 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid);
|
MapGridSetMetatileIdAt(8 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid);
|
||||||
MapGridSetMetatileIdAt(9 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight);
|
MapGridSetMetatileIdAt(9 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight);
|
||||||
MapGridSetMetatileIdAt(7 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(7 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_IMPASSABLE);
|
||||||
MapGridSetMetatileIdAt(8 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid);
|
MapGridSetMetatileIdAt(8 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid);
|
||||||
MapGridSetMetatileIdAt(9 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(9 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_IMPASSABLE);
|
||||||
DrawWholeMapView();
|
DrawWholeMapView();
|
||||||
PlaySE(SE_BANG);
|
PlaySE(SE_BANG);
|
||||||
FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED);
|
FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED);
|
||||||
@@ -246,9 +246,9 @@ static void DoBrailleRegisteelEffect(void)
|
|||||||
MapGridSetMetatileIdAt(7 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft);
|
MapGridSetMetatileIdAt(7 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft);
|
||||||
MapGridSetMetatileIdAt(8 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid);
|
MapGridSetMetatileIdAt(8 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid);
|
||||||
MapGridSetMetatileIdAt(9 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight);
|
MapGridSetMetatileIdAt(9 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopRight);
|
||||||
MapGridSetMetatileIdAt(7 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(7 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomLeft | MAPGRID_IMPASSABLE);
|
||||||
MapGridSetMetatileIdAt(8 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid);
|
MapGridSetMetatileIdAt(8 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomMid);
|
||||||
MapGridSetMetatileIdAt(9 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(9 + MAP_OFFSET, 20 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_BottomRight | MAPGRID_IMPASSABLE);
|
||||||
DrawWholeMapView();
|
DrawWholeMapView();
|
||||||
PlaySE(SE_BANG);
|
PlaySE(SE_BANG);
|
||||||
FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED);
|
FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED);
|
||||||
|
|||||||
@@ -1221,9 +1221,9 @@ static void ShowDecorationOnMap_(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight,
|
|||||||
{
|
{
|
||||||
x = mapX + i;
|
x = mapX + i;
|
||||||
attributes = GetMetatileAttributesById(NUM_TILES_IN_PRIMARY + gDecorations[decoration].tiles[j * decWidth + i]);
|
attributes = GetMetatileAttributesById(NUM_TILES_IN_PRIMARY + gDecorations[decoration].tiles[j * decWidth + i]);
|
||||||
if (MetatileBehavior_IsSecretBaseImpassable(attributes & METATILE_ATTR_BEHAVIOR_MASK) == TRUE
|
if (MetatileBehavior_IsSecretBaseImpassable(UNPACK_BEHAVIOR(attributes)) == TRUE
|
||||||
|| (gDecorations[decoration].permission != DECORPERM_PASS_FLOOR && (attributes >> METATILE_ATTR_LAYER_SHIFT) != METATILE_LAYER_TYPE_NORMAL))
|
|| (gDecorations[decoration].permission != DECORPERM_PASS_FLOOR && (attributes >> METATILE_ATTR_LAYER_SHIFT) != METATILE_LAYER_TYPE_NORMAL))
|
||||||
impassableFlag = MAPGRID_COLLISION_MASK;
|
impassableFlag = MAPGRID_IMPASSABLE;
|
||||||
else
|
else
|
||||||
impassableFlag = 0;
|
impassableFlag = 0;
|
||||||
|
|
||||||
@@ -1514,6 +1514,17 @@ static bool8 IsFloorOrBoardAndHole(u16 behaviorAt, const struct Decoration *deco
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef BUGFIX
|
||||||
|
#define GetLayerType(tileId) UNPACK_LAYER_TYPE(GetMetatileAttributesById(tileId))
|
||||||
|
#else
|
||||||
|
// This incompletely extracts the layer type data. The result is that comparisons against any nonzero
|
||||||
|
// value in the valid range always have the same result.
|
||||||
|
// Because GF only compares against 0 (METATILE_LAYER_TYPE_NORMAL) there are no ill effects and it's possible this
|
||||||
|
// is what they intended. We use the named constant for the comparisons, which implies you can use nonzero constants at
|
||||||
|
// those locations (which you can't), so to avoid this trap and keep the better documentation this is included as a bug fix.
|
||||||
|
#define GetLayerType(tileId) GetMetatileAttributesById(tileId) & METATILE_ATTR_LAYER_MASK
|
||||||
|
#endif
|
||||||
|
|
||||||
static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration)
|
static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration)
|
||||||
{
|
{
|
||||||
u8 i;
|
u8 i;
|
||||||
@@ -1538,7 +1549,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration)
|
|||||||
{
|
{
|
||||||
curX = gTasks[taskId].tCursorX + j;
|
curX = gTasks[taskId].tCursorX + j;
|
||||||
behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY);
|
behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY);
|
||||||
layerType = GetMetatileAttributesById(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ATTR_LAYER_MASK;
|
layerType = GetLayerType(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]);
|
||||||
if (!IsFloorOrBoardAndHole(behaviorAt, decoration))
|
if (!IsFloorOrBoardAndHole(behaviorAt, decoration))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@@ -1559,7 +1570,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration)
|
|||||||
{
|
{
|
||||||
curX = gTasks[taskId].tCursorX + j;
|
curX = gTasks[taskId].tCursorX + j;
|
||||||
behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY);
|
behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY);
|
||||||
layerType = GetMetatileAttributesById(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ATTR_LAYER_MASK;
|
layerType = GetLayerType(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]);
|
||||||
if (!MetatileBehavior_IsNormal(behaviorAt) && !IsSecretBaseTrainerSpot(behaviorAt, layerType))
|
if (!MetatileBehavior_IsNormal(behaviorAt) && !IsSecretBaseTrainerSpot(behaviorAt, layerType))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@@ -1576,7 +1587,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration)
|
|||||||
{
|
{
|
||||||
curX = gTasks[taskId].tCursorX + j;
|
curX = gTasks[taskId].tCursorX + j;
|
||||||
behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY);
|
behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY);
|
||||||
layerType = GetMetatileAttributesById(NUM_TILES_IN_PRIMARY + decoration->tiles[j]) & METATILE_ATTR_LAYER_MASK;
|
layerType = GetLayerType(NUM_TILES_IN_PRIMARY + decoration->tiles[j]);
|
||||||
if (!MetatileBehavior_IsNormal(behaviorAt) && !MetatileBehavior_IsSecretBaseNorthWall(behaviorAt))
|
if (!MetatileBehavior_IsNormal(behaviorAt) && !MetatileBehavior_IsSecretBaseNorthWall(behaviorAt))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
|||||||
@@ -659,10 +659,10 @@ void MauvilleGymSetDefaultBarriers(void)
|
|||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_On);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_On);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_GreenBeamH3_Off:
|
case METATILE_MauvilleGym_GreenBeamH3_Off:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_On | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH3_On | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_GreenBeamH4_Off:
|
case METATILE_MauvilleGym_GreenBeamH4_Off:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_On | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH4_On | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_RedBeamH1_On:
|
case METATILE_MauvilleGym_RedBeamH1_On:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off);
|
||||||
@@ -683,37 +683,37 @@ void MauvilleGymSetDefaultBarriers(void)
|
|||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_On);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_On);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_RedBeamH3_Off:
|
case METATILE_MauvilleGym_RedBeamH3_Off:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_On | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH3_On | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_RedBeamH4_Off:
|
case METATILE_MauvilleGym_RedBeamH4_Off:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_On | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_On | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_GreenBeamV1_On:
|
case METATILE_MauvilleGym_GreenBeamV1_On:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_GreenBeamV2_On:
|
case METATILE_MauvilleGym_GreenBeamV2_On:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_RedBeamV1_On:
|
case METATILE_MauvilleGym_RedBeamV1_On:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_RedBeamV2_On:
|
case METATILE_MauvilleGym_RedBeamV2_On:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_PoleBottom_On:
|
case METATILE_MauvilleGym_PoleBottom_On:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV1_On | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV1_On | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_FloorTile:
|
case METATILE_MauvilleGym_FloorTile:
|
||||||
if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_MauvilleGym_GreenBeamV1_On)
|
if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_MauvilleGym_GreenBeamV1_On)
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV2_On | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamV2_On | MAPGRID_IMPASSABLE);
|
||||||
else
|
else
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV2_On | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV2_On | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_PoleBottom_Off:
|
case METATILE_MauvilleGym_PoleBottom_Off:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV1_On | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV1_On | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_PoleTop_Off:
|
case METATILE_MauvilleGym_PoleTop_Off:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_On | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_On | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_PoleTop_On:
|
case METATILE_MauvilleGym_PoleTop_On:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off);
|
||||||
@@ -764,10 +764,10 @@ void MauvilleGymDeactivatePuzzle(void)
|
|||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_GreenBeamV1_On:
|
case METATILE_MauvilleGym_GreenBeamV1_On:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_On | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_RedBeamV1_On:
|
case METATILE_MauvilleGym_RedBeamV1_On:
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleBottom_Off | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case METATILE_MauvilleGym_GreenBeamV2_On:
|
case METATILE_MauvilleGym_GreenBeamV2_On:
|
||||||
case METATILE_MauvilleGym_RedBeamV2_On:
|
case METATILE_MauvilleGym_RedBeamV2_On:
|
||||||
@@ -876,8 +876,8 @@ static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId)
|
|||||||
}
|
}
|
||||||
for (i = 0; i < nDoors; i++)
|
for (i = 0; i < nDoors; i++)
|
||||||
{
|
{
|
||||||
MapGridSetMetatileIdAt(doorCoordsX[i] + MAP_OFFSET, doorCoordsY[i] + MAP_OFFSET, metatileId | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(doorCoordsX[i] + MAP_OFFSET, doorCoordsY[i] + MAP_OFFSET, metatileId | MAPGRID_IMPASSABLE);
|
||||||
MapGridSetMetatileIdAt(doorCoordsX[i] + MAP_OFFSET, doorCoordsY[i] + MAP_OFFSET + 1, (metatileId + METATILE_ROW_WIDTH) | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(doorCoordsX[i] + MAP_OFFSET, doorCoordsY[i] + MAP_OFFSET + 1, (metatileId + METATILE_ROW_WIDTH) | MAPGRID_IMPASSABLE);
|
||||||
}
|
}
|
||||||
DrawWholeMapView();
|
DrawWholeMapView();
|
||||||
}
|
}
|
||||||
@@ -1066,7 +1066,7 @@ static void PCTurnOnEffect_SetMetatile(s16 isScreenOn, s8 dx, s8 dy)
|
|||||||
else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
|
else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
|
||||||
metatileId = METATILE_BrendansMaysHouse_MayPC_On;
|
metatileId = METATILE_BrendansMaysHouse_MayPC_On;
|
||||||
}
|
}
|
||||||
MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, metatileId | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, metatileId | MAPGRID_IMPASSABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// For this special, gSpecialVar_0x8004 is expected to be some PC_LOCATION_* value.
|
// For this special, gSpecialVar_0x8004 is expected to be some PC_LOCATION_* value.
|
||||||
@@ -1106,7 +1106,7 @@ static void PCTurnOffEffect(void)
|
|||||||
else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
|
else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
|
||||||
metatileId = METATILE_BrendansMaysHouse_MayPC_Off;
|
metatileId = METATILE_BrendansMaysHouse_MayPC_Off;
|
||||||
|
|
||||||
MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, metatileId | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, metatileId | MAPGRID_IMPASSABLE);
|
||||||
DrawWholeMapView();
|
DrawWholeMapView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1138,14 +1138,14 @@ static void LotteryCornerComputerEffect(struct Task *task)
|
|||||||
if (task->tIsScreenOn)
|
if (task->tIsScreenOn)
|
||||||
{
|
{
|
||||||
// Screen is on, set it off
|
// Screen is on, set it off
|
||||||
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Normal | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Normal | MAPGRID_IMPASSABLE);
|
||||||
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_Normal | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_Normal | MAPGRID_IMPASSABLE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Screen is off, set it on
|
// Screen is off, set it on
|
||||||
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Flash | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Flash | MAPGRID_IMPASSABLE);
|
||||||
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_Flash | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_Flash | MAPGRID_IMPASSABLE);
|
||||||
}
|
}
|
||||||
DrawWholeMapView();
|
DrawWholeMapView();
|
||||||
|
|
||||||
@@ -1160,8 +1160,8 @@ static void LotteryCornerComputerEffect(struct Task *task)
|
|||||||
|
|
||||||
void EndLotteryCornerComputerEffect(void)
|
void EndLotteryCornerComputerEffect(void)
|
||||||
{
|
{
|
||||||
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Normal | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Normal | MAPGRID_IMPASSABLE);
|
||||||
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_Normal | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_Normal | MAPGRID_IMPASSABLE);
|
||||||
DrawWholeMapView();
|
DrawWholeMapView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1941,7 +1941,7 @@ static void Task_MoveElevatorWindowLights(u8 taskId)
|
|||||||
for (y = 0; y < ELEVATOR_WINDOW_HEIGHT; y++)
|
for (y = 0; y < ELEVATOR_WINDOW_HEIGHT; y++)
|
||||||
{
|
{
|
||||||
for (x = 0; x < ELEVATOR_WINDOW_WIDTH; x++)
|
for (x = 0; x < ELEVATOR_WINDOW_WIDTH; x++)
|
||||||
MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Ascending[y][tMoveCounter % ELEVATOR_LIGHT_STAGES] | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Ascending[y][tMoveCounter % ELEVATOR_LIGHT_STAGES] | MAPGRID_IMPASSABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1950,7 +1950,7 @@ static void Task_MoveElevatorWindowLights(u8 taskId)
|
|||||||
for (y = 0; y < ELEVATOR_WINDOW_HEIGHT; y++)
|
for (y = 0; y < ELEVATOR_WINDOW_HEIGHT; y++)
|
||||||
{
|
{
|
||||||
for (x = 0; x < ELEVATOR_WINDOW_WIDTH; x++)
|
for (x = 0; x < ELEVATOR_WINDOW_WIDTH; x++)
|
||||||
MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Descending[y][tMoveCounter % ELEVATOR_LIGHT_STAGES] | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Descending[y][tMoveCounter % ELEVATOR_LIGHT_STAGES] | MAPGRID_IMPASSABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DrawWholeMapView();
|
DrawWholeMapView();
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax,
|
|||||||
i = (x + 1) & 1; \
|
i = (x + 1) & 1; \
|
||||||
i += ((y + 1) & 1) * 2; \
|
i += ((y + 1) & 1) * 2; \
|
||||||
\
|
\
|
||||||
block = gMapHeader.mapLayout->border[i] | MAPGRID_COLLISION_MASK; \
|
block = gMapHeader.mapLayout->border[i] | MAPGRID_IMPASSABLE; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define AreCoordsWithinMapGridBounds(x, y) (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height)
|
#define AreCoordsWithinMapGridBounds(x, y) (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height)
|
||||||
@@ -349,7 +349,7 @@ u8 MapGridGetElevationAt(int x, int y)
|
|||||||
if (block == MAPGRID_UNDEFINED)
|
if (block == MAPGRID_UNDEFINED)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return block >> MAPGRID_ELEVATION_SHIFT;
|
return UNPACK_ELEVATION(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 MapGridGetCollisionAt(int x, int y)
|
u8 MapGridGetCollisionAt(int x, int y)
|
||||||
@@ -359,7 +359,7 @@ u8 MapGridGetCollisionAt(int x, int y)
|
|||||||
if (block == MAPGRID_UNDEFINED)
|
if (block == MAPGRID_UNDEFINED)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
return (block & MAPGRID_COLLISION_MASK) >> MAPGRID_COLLISION_SHIFT;
|
return UNPACK_COLLISION(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 MapGridGetMetatileIdAt(int x, int y)
|
u32 MapGridGetMetatileIdAt(int x, int y)
|
||||||
@@ -367,21 +367,21 @@ u32 MapGridGetMetatileIdAt(int x, int y)
|
|||||||
u16 block = GetMapGridBlockAt(x, y);
|
u16 block = GetMapGridBlockAt(x, y);
|
||||||
|
|
||||||
if (block == MAPGRID_UNDEFINED)
|
if (block == MAPGRID_UNDEFINED)
|
||||||
return GetBorderBlockAt(x, y) & MAPGRID_METATILE_ID_MASK;
|
return UNPACK_METATILE(GetBorderBlockAt(x, y));
|
||||||
|
|
||||||
return block & MAPGRID_METATILE_ID_MASK;
|
return UNPACK_METATILE(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 MapGridGetMetatileBehaviorAt(int x, int y)
|
u32 MapGridGetMetatileBehaviorAt(int x, int y)
|
||||||
{
|
{
|
||||||
u16 metatile = MapGridGetMetatileIdAt(x, y);
|
u16 metatile = MapGridGetMetatileIdAt(x, y);
|
||||||
return GetMetatileAttributesById(metatile) & METATILE_ATTR_BEHAVIOR_MASK;
|
return UNPACK_BEHAVIOR(GetMetatileAttributesById(metatile));
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 MapGridGetMetatileLayerTypeAt(int x, int y)
|
u8 MapGridGetMetatileLayerTypeAt(int x, int y)
|
||||||
{
|
{
|
||||||
u16 metatile = MapGridGetMetatileIdAt(x, y);
|
u16 metatile = MapGridGetMetatileIdAt(x, y);
|
||||||
return (GetMetatileAttributesById(metatile) & METATILE_ATTR_LAYER_MASK) >> METATILE_ATTR_LAYER_SHIFT;
|
return UNPACK_LAYER_TYPE(GetMetatileAttributesById(metatile));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapGridSetMetatileIdAt(int x, int y, u16 metatile)
|
void MapGridSetMetatileIdAt(int x, int y, u16 metatile)
|
||||||
@@ -390,6 +390,8 @@ void MapGridSetMetatileIdAt(int x, int y, u16 metatile)
|
|||||||
if (AreCoordsWithinMapGridBounds(x, y))
|
if (AreCoordsWithinMapGridBounds(x, y))
|
||||||
{
|
{
|
||||||
i = x + y * gBackupMapLayout.width;
|
i = x + y * gBackupMapLayout.width;
|
||||||
|
|
||||||
|
// Elevation is ignored in the argument, but copy metatile ID and collision
|
||||||
gBackupMapLayout.map[i] = (gBackupMapLayout.map[i] & MAPGRID_ELEVATION_MASK) | (metatile & ~MAPGRID_ELEVATION_MASK);
|
gBackupMapLayout.map[i] = (gBackupMapLayout.map[i] & MAPGRID_ELEVATION_MASK) | (metatile & ~MAPGRID_ELEVATION_MASK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -832,7 +834,7 @@ static bool8 SkipCopyingMetatileFromSavedMap(u16 *mapBlock, u16 mapWidth, u8 yMo
|
|||||||
else
|
else
|
||||||
mapBlock += mapWidth;
|
mapBlock += mapWidth;
|
||||||
|
|
||||||
if (IsLargeBreakableDecoration(*mapBlock & MAPGRID_METATILE_ID_MASK, yMode) == TRUE)
|
if (IsLargeBreakableDecoration(UNPACK_METATILE(*mapBlock), yMode) == TRUE)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,13 +126,13 @@ static void Task_DrawEscalator(u8 taskId)
|
|||||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_1, 0);
|
SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_1, 0);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_2, MAPGRID_COLLISION_MASK);
|
SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_2, MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_3, 0);
|
SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_3, 0);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_0, MAPGRID_COLLISION_MASK);
|
SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_0, MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_1, 0);
|
SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_1, 0);
|
||||||
|
|||||||
@@ -840,9 +840,9 @@ void DoSecretBasePCTurnOffEffect(void)
|
|||||||
PlaySE(SE_PC_OFF);
|
PlaySE(SE_PC_OFF);
|
||||||
|
|
||||||
if (!VarGet(VAR_CURRENT_SECRET_BASE))
|
if (!VarGet(VAR_CURRENT_SECRET_BASE))
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | MAPGRID_IMPASSABLE);
|
||||||
else
|
else
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_RegisterPC | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_RegisterPC | MAPGRID_IMPASSABLE);
|
||||||
|
|
||||||
CurrentMapDrawMetatileAt(x, y);
|
CurrentMapDrawMetatileAt(x, y);
|
||||||
}
|
}
|
||||||
@@ -1083,7 +1083,7 @@ static void SpriteCB_SandPillar_BreakTop(struct Sprite *sprite)
|
|||||||
PlaySE(SE_M_ROCK_THROW);
|
PlaySE(SE_M_ROCK_THROW);
|
||||||
|
|
||||||
if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == METATILE_SecretBase_SandOrnament_TopWall)
|
if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == METATILE_SecretBase_SandOrnament_TopWall)
|
||||||
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_Wall_TopMid | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_Wall_TopMid | MAPGRID_IMPASSABLE);
|
||||||
else
|
else
|
||||||
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_SandOrnament_BrokenTop);
|
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_SandOrnament_BrokenTop);
|
||||||
|
|
||||||
@@ -1103,7 +1103,7 @@ static void SpriteCB_SandPillar_BreakBase(struct Sprite *sprite)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], METATILE_SecretBase_SandOrnament_BrokenBase | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], METATILE_SecretBase_SandOrnament_BrokenBase | MAPGRID_IMPASSABLE);
|
||||||
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
|
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
|
||||||
sprite->data[0] = 0;
|
sprite->data[0] = 0;
|
||||||
sprite->callback = SpriteCB_SandPillar_End;
|
sprite->callback = SpriteCB_SandPillar_End;
|
||||||
|
|||||||
@@ -2043,7 +2043,7 @@ bool8 ScrCmd_setmetatile(struct ScriptContext *ctx)
|
|||||||
if (!isImpassable)
|
if (!isImpassable)
|
||||||
MapGridSetMetatileIdAt(x, y, metatileId);
|
MapGridSetMetatileIdAt(x, y, metatileId);
|
||||||
else
|
else
|
||||||
MapGridSetMetatileIdAt(x, y, metatileId | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, metatileId | MAPGRID_IMPASSABLE);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -332,7 +332,7 @@ void ToggleSecretBaseEntranceMetatile(void)
|
|||||||
{
|
{
|
||||||
if (sSecretBaseEntranceMetatiles[i].closedMetatileId == metatileId)
|
if (sSecretBaseEntranceMetatiles[i].closedMetatileId == metatileId)
|
||||||
{
|
{
|
||||||
MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].openMetatileId | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].openMetatileId | MAPGRID_IMPASSABLE);
|
||||||
CurrentMapDrawMetatileAt(x, y);
|
CurrentMapDrawMetatileAt(x, y);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -343,7 +343,7 @@ void ToggleSecretBaseEntranceMetatile(void)
|
|||||||
{
|
{
|
||||||
if (sSecretBaseEntranceMetatiles[i].openMetatileId == metatileId)
|
if (sSecretBaseEntranceMetatiles[i].openMetatileId == metatileId)
|
||||||
{
|
{
|
||||||
MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].closedMetatileId | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].closedMetatileId | MAPGRID_IMPASSABLE);
|
||||||
CurrentMapDrawMetatileAt(x, y);
|
CurrentMapDrawMetatileAt(x, y);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -398,7 +398,7 @@ void SetOccupiedSecretBaseEntranceMetatiles(struct MapEvents const *events)
|
|||||||
{
|
{
|
||||||
if (sSecretBaseEntranceMetatiles[i].closedMetatileId == tile_id)
|
if (sSecretBaseEntranceMetatiles[i].closedMetatileId == tile_id)
|
||||||
{
|
{
|
||||||
MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].openMetatileId | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].openMetatileId | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -477,7 +477,7 @@ static void EnterNewlyCreatedSecretBase_StartFadeIn(void)
|
|||||||
FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
|
FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
|
||||||
x += MAP_OFFSET;
|
x += MAP_OFFSET;
|
||||||
y += MAP_OFFSET;
|
y += MAP_OFFSET;
|
||||||
MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | MAPGRID_IMPASSABLE);
|
||||||
CurrentMapDrawMetatileAt(x, y);
|
CurrentMapDrawMetatileAt(x, y);
|
||||||
FadeInFromBlack();
|
FadeInFromBlack();
|
||||||
CreateTask(EnterNewlyCreatedSecretBase_WaitFadeIn, 0);
|
CreateTask(EnterNewlyCreatedSecretBase_WaitFadeIn, 0);
|
||||||
@@ -538,13 +538,13 @@ void InitSecretBaseAppearance(bool8 hidePC)
|
|||||||
{
|
{
|
||||||
// Another player's secret base. Change PC type to the "Register" PC.
|
// Another player's secret base. Change PC type to the "Register" PC.
|
||||||
FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
|
FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
|
||||||
MapGridSetMetatileIdAt(x + MAP_OFFSET, y + MAP_OFFSET, METATILE_SecretBase_RegisterPC | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x + MAP_OFFSET, y + MAP_OFFSET, METATILE_SecretBase_RegisterPC | MAPGRID_IMPASSABLE);
|
||||||
}
|
}
|
||||||
else if (hidePC == TRUE && VarGet(VAR_SECRET_BASE_INITIALIZED) == 1)
|
else if (hidePC == TRUE && VarGet(VAR_SECRET_BASE_INITIALIZED) == 1)
|
||||||
{
|
{
|
||||||
// Change PC to regular ground tile.
|
// Change PC to regular ground tile.
|
||||||
FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
|
FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
|
||||||
MapGridSetMetatileIdAt(x + MAP_OFFSET, y + MAP_OFFSET, METATILE_SecretBase_Ground | MAPGRID_COLLISION_MASK);
|
MapGridSetMetatileIdAt(x + MAP_OFFSET, y + MAP_OFFSET, METATILE_SecretBase_Ground | MAPGRID_IMPASSABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -840,7 +840,7 @@ static void ClosePlayerSecretBaseEntrance(void)
|
|||||||
{
|
{
|
||||||
MapGridSetMetatileIdAt(events->bgEvents[i].x + MAP_OFFSET,
|
MapGridSetMetatileIdAt(events->bgEvents[i].x + MAP_OFFSET,
|
||||||
events->bgEvents[i].y + MAP_OFFSET,
|
events->bgEvents[i].y + MAP_OFFSET,
|
||||||
sSecretBaseEntranceMetatiles[j].closedMetatileId | MAPGRID_COLLISION_MASK);
|
sSecretBaseEntranceMetatiles[j].closedMetatileId | MAPGRID_IMPASSABLE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -669,17 +669,17 @@ bool32 LoadTrainerHillFloorObjectEventScripts(void)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 floorWidth) // floorWidth is always 16
|
static u16 GetMapDataForFloor(u8 floorId, u32 x, u32 y, u32 floorWidth) // floorWidth is always 16
|
||||||
{
|
{
|
||||||
bool8 impassable;
|
bool8 impassable;
|
||||||
u16 metatile;
|
u16 metatileId;
|
||||||
u16 elevation;
|
u16 elevation;
|
||||||
|
|
||||||
impassable = (sHillData->floors[floorId].map.collisionData[y] >> (15 - x) & 1);
|
impassable = (sHillData->floors[floorId].map.collisionData[y] >> (15 - x) & 1);
|
||||||
metatile = sHillData->floors[floorId].map.metatileData[floorWidth * y + x] + NUM_METATILES_IN_PRIMARY;
|
metatileId = sHillData->floors[floorId].map.metatileData[floorWidth * y + x] + NUM_METATILES_IN_PRIMARY;
|
||||||
elevation = 3 << MAPGRID_ELEVATION_SHIFT;
|
elevation = PACK_ELEVATION(3);
|
||||||
|
|
||||||
return ((impassable << MAPGRID_COLLISION_SHIFT) & MAPGRID_COLLISION_MASK) | elevation | (metatile & MAPGRID_METATILE_ID_MASK);
|
return PACK_COLLISION(impassable) | elevation | PACK_METATILE(metatileId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenerateTrainerHillFloorLayout(u16 *mapArg)
|
void GenerateTrainerHillFloorLayout(u16 *mapArg)
|
||||||
@@ -724,7 +724,7 @@ void GenerateTrainerHillFloorLayout(u16 *mapArg)
|
|||||||
for (y = 0; y < HILL_FLOOR_HEIGHT_MAIN; y++)
|
for (y = 0; y < HILL_FLOOR_HEIGHT_MAIN; y++)
|
||||||
{
|
{
|
||||||
for (x = 0; x < HILL_FLOOR_WIDTH; x++)
|
for (x = 0; x < HILL_FLOOR_WIDTH; x++)
|
||||||
dst[x] = GetMetatileForFloor(mapId, x, y, HILL_FLOOR_WIDTH);
|
dst[x] = GetMapDataForFloor(mapId, x, y, HILL_FLOOR_WIDTH);
|
||||||
dst += 31;
|
dst += 31;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user