diff --git a/asm/macros/battle_frontier/battle_pyramid.inc b/asm/macros/battle_frontier/battle_pyramid.inc index bb5069f18a..42141d9937 100644 --- a/asm/macros/battle_frontier/battle_pyramid.inc +++ b/asm/macros/battle_frontier/battle_pyramid.inc @@ -69,8 +69,8 @@ .endm @ VAR_RESULT is 1 if player is on a Pyramid floor, 2 if on the Pyramid peak, 0 otherwise - .macro pyramid_inchallenge - setvar VAR_0x8004, BATTLE_PYRAMID_FUNC_IS_IN + .macro pyramid_getlocation + setvar VAR_0x8004, BATTLE_PYRAMID_FUNC_CURRENT_LOCATION special CallBattlePyramidFunction .endm diff --git a/data/scripts/field_poison.inc b/data/scripts/field_poison.inc index ddda34ebaa..1d89bcfdfd 100644 --- a/data/scripts/field_poison.inc +++ b/data/scripts/field_poison.inc @@ -29,9 +29,9 @@ EventScript_FrontierFieldWhiteOut:: waitbuttonpress pike_inchallenge goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePike_EventScript_Retire - pyramid_inchallenge - goto_if_eq VAR_RESULT, 1, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost @ On Pyramid floor - goto_if_eq VAR_RESULT, 2, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost @ On Pyramid peak + pyramid_getlocation + goto_if_eq VAR_RESULT, PYRAMID_LOCATION_FLOOR, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost + goto_if_eq VAR_RESULT, PYRAMID_LOCATION_TOP, BattleFrontier_BattlePyramid_EventScript_WarpToLobbyLost trainerhill_inchallenge goto_if_eq VAR_RESULT, TRUE, TrainerHill_1F_EventScript_Lost special Script_FadeOutMapMusic diff --git a/data/scripts/obtain_item.inc b/data/scripts/obtain_item.inc index c54b2f8dc5..599961c821 100644 --- a/data/scripts/obtain_item.inc +++ b/data/scripts/obtain_item.inc @@ -133,8 +133,8 @@ EventScript_PickUpItem:: waitfanfare waitmessage bufferitemnameplural STR_VAR_2, VAR_0x8004, VAR_0x8005 - pyramid_inchallenge - goto_if_eq VAR_RESULT, TRUE, EventScript_PutBattlePyramidItemInBag + pyramid_getlocation + goto_if_eq VAR_RESULT, PYRAMID_LOCATION_FLOOR, EventScript_PutBattlePyramidItemInBag msgbox gText_PutItemInPocket, MSGBOX_DEFAULT hideitemdescription return diff --git a/include/battle_pyramid.h b/include/battle_pyramid.h index ec80fdeed3..d55d8d2e93 100644 --- a/include/battle_pyramid.h +++ b/include/battle_pyramid.h @@ -1,13 +1,15 @@ #ifndef GUARD_BATTLE_PYRAMID_H #define GUARD_BATTLE_PYRAMID_H +#include "constants/battle_pyramid.h" + void CallBattlePyramidFunction(void); u16 LocalIdToPyramidTrainerId(u8 localId); bool8 GetBattlePyramidTrainerFlag(u8 eventId); void MarkApproachingPyramidTrainersAsBattled(void); void GenerateBattlePyramidWildMon(void); u8 GetPyramidRunMultiplier(void); -u8 InBattlePyramid(void); +u8 CurrentBattlePyramidLocation(void); bool8 InBattlePyramid_(void); void PausePyramidChallenge(void); void SoftResetInBattlePyramid(void); diff --git a/include/constants/battle_pyramid.h b/include/constants/battle_pyramid.h index ac80a2d7d3..08fa695cf2 100644 --- a/include/constants/battle_pyramid.h +++ b/include/constants/battle_pyramid.h @@ -43,7 +43,7 @@ #define BATTLE_PYRAMID_FUNC_SET_TRAINERS 9 #define BATTLE_PYRAMID_FUNC_SHOW_HINT_TEXT 10 #define BATTLE_PYRAMID_FUNC_UPDATE_STREAK 11 // unused -#define BATTLE_PYRAMID_FUNC_IS_IN 12 +#define BATTLE_PYRAMID_FUNC_CURRENT_LOCATION 12 #define BATTLE_PYRAMID_FUNC_UPDATE_LIGHT 13 #define BATTLE_PYRAMID_FUNC_CLEAR_HELD_ITEMS 14 #define BATTLE_PYRAMID_FUNC_SET_FLOOR_PALETTE 15 @@ -62,4 +62,8 @@ #define PYRAMID_LIGHT_SET_RADIUS 0 #define PYRAMID_LIGHT_INCR_RADIUS 1 +#define PYRAMID_LOCATION_NONE 0 // Not in the Pyramid +#define PYRAMID_LOCATION_FLOOR 1 +#define PYRAMID_LOCATION_TOP 2 + #endif // GUARD_CONSTANTS_BATTLE_PYRAMID_H diff --git a/include/gba/syscall.h b/include/gba/syscall.h index c922084d5f..50f5781988 100644 --- a/include/gba/syscall.h +++ b/include/gba/syscall.h @@ -61,9 +61,9 @@ void LZ77UnCompWram(const u32 *src, void *dest); void LZ77UnCompVram(const u32 *src, void *dest); -void RLUnCompWram(const void *src, void *dest); +void RLUnCompWram(const u32 *src, void *dest); -void RLUnCompVram(const void *src, void *dest); +void RLUnCompVram(const u32 *src, void *dest); int MultiBoot(struct MultiBootParam *mp); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 5f2a84017f..37fb95e3fb 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -7,19 +7,36 @@ #define MAPGRID_METATILE_ID_MASK 0x03FF // Bits 0-9 #define MAPGRID_COLLISION_MASK 0x0C00 // Bits 10-11 #define MAPGRID_ELEVATION_MASK 0xF000 // Bits 12-15 +#define MAPGRID_METATILE_ID_SHIFT 0 #define MAPGRID_COLLISION_SHIFT 10 #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 #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 // 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 #define METATILE_ATTR_BEHAVIOR_MASK 0x00FF // Bits 0-7 #define METATILE_ATTR_LAYER_MASK 0xF000 // Bits 12-15 +#define METATILE_ATTR_BEHAVIOR_SHIFT 0 #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 { METATILE_LAYER_TYPE_NORMAL, // Metatile uses middle and top bg layers METATILE_LAYER_TYPE_COVERED, // Metatile uses bottom and middle bg layers diff --git a/include/global.h b/include/global.h index b58ef3518b..f4c944b64f 100644 --- a/include/global.h +++ b/include/global.h @@ -107,6 +107,9 @@ #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 PACK(data, shift, mask) ( ((data) << (shift)) & (mask) ) +#define UNPACK(data, shift, mask) ( ((data) & (mask)) >> (shift) ) + // Macros for checking the joypad #define TEST_BUTTON(field, button) ((field) & (button)) #define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button) diff --git a/include/metaprogram.h b/include/metaprogram.h index be62b2f9e5..9afc369d07 100644 --- a/include/metaprogram.h +++ b/include/metaprogram.h @@ -44,12 +44,12 @@ #define EXCEPT_3(a, ...) __VA_OPT__(EXCEPT_2(__VA_ARGS__)) #define EXCEPT_4(a, ...) __VA_OPT__(EXCEPT_3(__VA_ARGS__)) -/* 'UNPACK (x, y, z)' expands to 'x, y, z'. +/* 'UNPACK_META (x, y, z)' expands to 'x, y, z'. * Useful for passing arguments which may contain commas into a macro. */ -#define UNPACK(...) __VA_ARGS__ +#define UNPACK_META(...) __VA_ARGS__ /* Expands to 'macro(...args, ...)'. */ -#define INVOKE_WITH(macro, args, ...) INVOKE_WITH_(macro, UNPACK args __VA_OPT__(, __VA_ARGS__)) +#define INVOKE_WITH(macro, args, ...) INVOKE_WITH_(macro, UNPACK_META args __VA_OPT__(, __VA_ARGS__)) #define INVOKE_WITH_(macro, ...) macro(__VA_ARGS__) /* Recursive macros. diff --git a/src/battle_bg.c b/src/battle_bg.c index a0df9017c7..887cb8e161 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -1028,7 +1028,7 @@ void InitLinkBattleVsScreen(u8 taskId) case 0: if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - for (i = 0; i < MAX_BATTLERS_COUNT; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { name = gLinkPlayers[i].name; linkPlayer = &gLinkPlayers[i]; diff --git a/src/battle_controllers.c b/src/battle_controllers.c index dfd7138bcb..9bee760800 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -294,7 +294,7 @@ static void InitSinglePlayerBtlControllers(void) { u8 multiplayerId; - for (multiplayerId = gRecordedBattleMultiplayerId, i = 0; i < MAX_BATTLERS_COUNT; i++) + for (multiplayerId = gRecordedBattleMultiplayerId, i = 0; i < MAX_LINK_PLAYERS; i++) { switch (gLinkPlayers[i].id) { @@ -536,7 +536,7 @@ static void InitLinkBtlControllers(void) if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) gBattleMainFunc = BeginBattleIntro; - for (i = 0; i < MAX_BATTLERS_COUNT; i++) + for (i = 0; i < MAX_LINK_PLAYERS; i++) { switch (gLinkPlayers[i].id) { diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 6e56f4867b..e40fba5c07 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -81,7 +81,7 @@ static void HidePyramidItem(void); static void SetPyramidFacilityTrainers(void); static void ShowPostBattleHintText(void); static void UpdatePyramidWinStreak(void); -static void GetInBattlePyramid(void); +static void GetCurrentBattlePyramidLocation(void); static void UpdatePyramidLightRadius(void); static void ClearPyramidPartyHeldItems(void); static void SetPyramidFloorPalette(void); @@ -805,7 +805,7 @@ static void (*const sBattlePyramidFunctions[])(void) = [BATTLE_PYRAMID_FUNC_SET_TRAINERS] = SetPyramidFacilityTrainers, [BATTLE_PYRAMID_FUNC_SHOW_HINT_TEXT] = ShowPostBattleHintText, [BATTLE_PYRAMID_FUNC_UPDATE_STREAK] = UpdatePyramidWinStreak, - [BATTLE_PYRAMID_FUNC_IS_IN] = GetInBattlePyramid, + [BATTLE_PYRAMID_FUNC_CURRENT_LOCATION] = GetCurrentBattlePyramidLocation, [BATTLE_PYRAMID_FUNC_UPDATE_LIGHT] = UpdatePyramidLightRadius, [BATTLE_PYRAMID_FUNC_CLEAR_HELD_ITEMS] = ClearPyramidPartyHeldItems, [BATTLE_PYRAMID_FUNC_SET_FLOOR_PALETTE] = SetPyramidFloorPalette, @@ -1127,9 +1127,9 @@ static void UpdatePyramidWinStreak(void) gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; } -static void GetInBattlePyramid(void) +static void GetCurrentBattlePyramidLocation(void) { - gSpecialVar_Result = InBattlePyramid(); + gSpecialVar_Result = CurrentBattlePyramidLocation(); } static void UpdatePyramidLightRadius(void) @@ -1643,14 +1643,14 @@ u8 GetPyramidRunMultiplier(void) return sPyramidFloorTemplates[id].runMultiplier; } -u8 InBattlePyramid(void) +u8 CurrentBattlePyramidLocation(void) { if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR) - return 1; + return PYRAMID_LOCATION_FLOOR; else if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP) - return 2; + return PYRAMID_LOCATION_TOP; else - return FALSE; + return PYRAMID_LOCATION_NONE; } bool8 InBattlePyramid_(void) @@ -1661,7 +1661,7 @@ bool8 InBattlePyramid_(void) void PausePyramidChallenge(void) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { RestorePyramidPlayerParty(); gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_PAUSED; @@ -1672,7 +1672,7 @@ void PausePyramidChallenge(void) void SoftResetInBattlePyramid(void) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) DoSoftReset(); } @@ -1781,6 +1781,7 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio gSaveBlock1Ptr->pos.x = (mapLayout->width * (i % PYRAMID_FLOOR_SQUARES_WIDE)) + x; 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; } else diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index eb0738a24e..f39c7a2386 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2222,7 +2222,7 @@ static void Cmd_adjustdamage(void) holdEffect = GetBattlerHoldEffect(battlerDef, TRUE); param = GetBattlerHoldEffectParam(battlerDef); affectionScore = GetBattlerAffectionHearts(battlerDef); - + gPotentialItemEffectBattler = battlerDef; if (moveEffect == EFFECT_FALSE_SWIPE) @@ -15459,7 +15459,7 @@ static void Cmd_pickup(void) if (!InBattlePike()) // No items in Battle Pike. { - bool32 isInPyramid = InBattlePyramid_(); + bool32 isInPyramid = CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE; for (i = 0; i < PARTY_SIZE; i++) { species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); diff --git a/src/battle_setup.c b/src/battle_setup.c index 5c6a01c932..6d9083525d 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -337,7 +337,7 @@ static void DoStandardWildBattle(bool32 isDouble) } else if (isDouble) gBattleTypeFlags |= BATTLE_TYPE_DOUBLE; - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { VarSet(VAR_TEMP_E, 0); gBattleTypeFlags |= BATTLE_TYPE_PYRAMID; @@ -356,7 +356,7 @@ void DoStandardWildBattle_Debug(void) StopPlayerAvatar(); gMain.savedCallback = CB2_EndWildBattle; gBattleTypeFlags = 0; - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0); gBattleTypeFlags |= BATTLE_TYPE_PYRAMID; @@ -416,7 +416,7 @@ static void DoTrainerBattle(void) static void DoBattlePyramidTrainerHillBattle(void) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) CreateBattleStartTask(GetSpecialBattleTransition(B_TRANSITION_GROUP_B_PYRAMID), 0); else CreateBattleStartTask(GetSpecialBattleTransition(B_TRANSITION_GROUP_TRAINER_HILL), 0); @@ -591,7 +591,7 @@ static void CB2_EndWildBattle(void) HealPlayerParty(); } - if (IsPlayerDefeated(gBattleOutcome) == TRUE && !InBattlePyramid() && !InBattlePike()) + if (IsPlayerDefeated(gBattleOutcome) == TRUE && CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE && !InBattlePike()) { SetMainCallback2(CB2_WhiteOut); } @@ -610,7 +610,7 @@ static void CB2_EndScriptedWildBattle(void) if (IsPlayerDefeated(gBattleOutcome) == TRUE) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); else SetMainCallback2(CB2_WhiteOut); @@ -757,14 +757,14 @@ u8 GetWildBattleTransition(void) if (enemyLevel < playerLevel) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) return B_TRANSITION_BLUR; else return sBattleTransitionTable_Wild[transitionType][0]; } else { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) return B_TRANSITION_GRID_SQUARES; else return sBattleTransitionTable_Wild[transitionType][1]; @@ -1144,7 +1144,7 @@ u8 GetTrainerBattleMode(void) bool8 GetTrainerFlag(void) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) return GetBattlePyramidTrainerFlag(gSelectedObjectEvent); else if (InTrainerHill()) return GetHillTrainerFlag(gSelectedObjectEvent); @@ -1201,7 +1201,7 @@ void BattleSetup_StartTrainerBattle(void) } } - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { VarSet(VAR_TEMP_PLAYING_PYRAMID_MUSIC, 0); gBattleTypeFlags |= BATTLE_TYPE_PYRAMID; @@ -1241,7 +1241,7 @@ void BattleSetup_StartTrainerBattle(void) gWhichTrainerToFaceAfterBattle = 0; gMain.savedCallback = CB2_EndTrainerBattle; - if (InBattlePyramid() || InTrainerHillChallenge()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE || InTrainerHillChallenge()) DoBattlePyramidTrainerHillBattle(); else DoTrainerBattle(); @@ -1305,7 +1305,7 @@ static void CB2_EndTrainerBattle(void) } else if (IsPlayerDefeated(gBattleOutcome) == TRUE) { - if (InBattlePyramid() || InTrainerHillChallenge() || (!NoAliveMonsForPlayer()) || FlagGet(B_FLAG_NO_WHITEOUT)) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE || InTrainerHillChallenge() || (!NoAliveMonsForPlayer()) || FlagGet(B_FLAG_NO_WHITEOUT)) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); else SetMainCallback2(CB2_WhiteOut); @@ -1318,7 +1318,7 @@ static void CB2_EndTrainerBattle(void) { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); DowngradeBadPoison(); - if (!InBattlePyramid() && !InTrainerHillChallenge()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE && !InTrainerHillChallenge()) { RegisterTrainerInMatchCall(); SetBattledTrainersFlags(); @@ -1357,7 +1357,7 @@ void BattleSetup_StartRematchBattle(void) void ShowTrainerIntroSpeech(void) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { if (gNoOfApproachingTrainers == 0 || gNoOfApproachingTrainers == 1) CopyPyramidTrainerSpeechBefore(LocalIdToPyramidTrainerId(gSpecialVar_LastTalked)); diff --git a/src/battle_util.c b/src/battle_util.c index b5e68f9cbd..b42063ca60 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -614,7 +614,7 @@ bool32 TryRunFromBattle(u32 battler) } else if (GetBattlerAbility(battler) == ABILITY_RUN_AWAY) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { gBattleStruct->runTries++; pyramidMultiplier = GetPyramidRunMultiplier(); @@ -647,7 +647,7 @@ bool32 TryRunFromBattle(u32 battler) if (!IsBattlerAlive(runningFromBattler)) runningFromBattler |= BIT_FLANK; - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { pyramidMultiplier = GetPyramidRunMultiplier(); speedVar = (gBattleMons[battler].speed * pyramidMultiplier) / (gBattleMons[runningFromBattler].speed) + (gBattleStruct->runTries * 30); diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 31497e137c..217f62d2c7 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -81,9 +81,9 @@ void DoBrailleDigEffect(void) MapGridSetMetatileIdAt( 9 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft); MapGridSetMetatileIdAt(10 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid); 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(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(); PlaySE(SE_BANG); 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(8 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid); 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(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(); PlaySE(SE_BANG); FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED); @@ -247,9 +247,9 @@ static void DoBrailleRegisteelEffect(void) MapGridSetMetatileIdAt(7 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopLeft); MapGridSetMetatileIdAt(8 + MAP_OFFSET, 19 + MAP_OFFSET, METATILE_Cave_SealedChamberEntrance_TopMid); 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(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(); PlaySE(SE_BANG); FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED); diff --git a/src/contest_painting.c b/src/contest_painting.c index cb78caac26..4853b9425c 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -69,19 +69,19 @@ extern const u8 gContestPaintingTough1[]; extern const u8 gContestPaintingTough2[]; extern const u8 gContestPaintingTough3[]; -static const u16 sPictureFramePalettes[] = INCBIN_U16("graphics/picture_frame/bg.gbapal"); -static const u8 sPictureFrameTiles_Cool[] = INCBIN_U8("graphics/picture_frame/cool.4bpp.rl"); -static const u8 sPictureFrameTiles_Beauty[] = INCBIN_U8("graphics/picture_frame/beauty.4bpp.rl"); -static const u8 sPictureFrameTiles_Cute[] = INCBIN_U8("graphics/picture_frame/cute.4bpp.rl"); -static const u8 sPictureFrameTiles_Smart[] = INCBIN_U8("graphics/picture_frame/smart.4bpp.rl"); -static const u8 sPictureFrameTiles_Tough[] = INCBIN_U8("graphics/picture_frame/tough.4bpp.rl"); -static const u8 sPictureFrameTiles_HallLobby[] = INCBIN_U8("graphics/picture_frame/lobby.4bpp.rl"); -static const u8 sPictureFrameTilemap_Cool[] = INCBIN_U8("graphics/picture_frame/cool_map.bin.rl"); -static const u8 sPictureFrameTilemap_Beauty[] = INCBIN_U8("graphics/picture_frame/beauty_map.bin.rl"); -static const u8 sPictureFrameTilemap_Cute[] = INCBIN_U8("graphics/picture_frame/cute_map.bin.rl"); -static const u8 sPictureFrameTilemap_Smart[] = INCBIN_U8("graphics/picture_frame/smart_map.bin.rl"); -static const u8 sPictureFrameTilemap_Tough[] = INCBIN_U8("graphics/picture_frame/tough_map.bin.rl"); -static const u8 sPictureFrameTilemap_HallLobby[] = INCBIN_U8("graphics/picture_frame/lobby_map.bin.rl"); +static const u16 sPictureFramePalettes[] = INCBIN_U16("graphics/picture_frame/bg.gbapal"); +static const u32 sPictureFrameTiles_Cool[] = INCBIN_U32("graphics/picture_frame/cool.4bpp.rl"); +static const u32 sPictureFrameTiles_Beauty[] = INCBIN_U32("graphics/picture_frame/beauty.4bpp.rl"); +static const u32 sPictureFrameTiles_Cute[] = INCBIN_U32("graphics/picture_frame/cute.4bpp.rl"); +static const u32 sPictureFrameTiles_Smart[] = INCBIN_U32("graphics/picture_frame/smart.4bpp.rl"); +static const u32 sPictureFrameTiles_Tough[] = INCBIN_U32("graphics/picture_frame/tough.4bpp.rl"); +static const u32 sPictureFrameTiles_HallLobby[] = INCBIN_U32("graphics/picture_frame/lobby.4bpp.rl"); +static const u32 sPictureFrameTilemap_Cool[] = INCBIN_U32("graphics/picture_frame/cool_map.bin.rl"); +static const u32 sPictureFrameTilemap_Beauty[] = INCBIN_U32("graphics/picture_frame/beauty_map.bin.rl"); +static const u32 sPictureFrameTilemap_Cute[] = INCBIN_U32("graphics/picture_frame/cute_map.bin.rl"); +static const u32 sPictureFrameTilemap_Smart[] = INCBIN_U32("graphics/picture_frame/smart_map.bin.rl"); +static const u32 sPictureFrameTilemap_Tough[] = INCBIN_U32("graphics/picture_frame/tough_map.bin.rl"); +static const u32 sPictureFrameTilemap_HallLobby[] = INCBIN_U32("graphics/picture_frame/lobby_map.bin.rl"); static const u8 *const sContestCategoryNames_Unused[] = { diff --git a/src/data/region_map/region_map_sections.json b/src/data/region_map/region_map_sections.json index fa7eb5efa4..49426128b8 100644 --- a/src/data/region_map/region_map_sections.json +++ b/src/data/region_map/region_map_sections.json @@ -675,11 +675,7 @@ }, { "id": "MAPSEC_INSIDE_OF_TRUCK", - "name": "INSIDE OF TRUCK", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "INSIDE OF TRUCK" }, { "id": "MAPSEC_SKY_PILLAR", @@ -691,897 +687,453 @@ }, { "id": "MAPSEC_SECRET_BASE", - "name": "SECRET BASE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SECRET BASE" }, { "id": "MAPSEC_DYNAMIC", - "name": "", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "" }, { "id": "MAPSEC_PALLET_TOWN", - "name": "PALLET TOWN", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "PALLET TOWN" }, { "id": "MAPSEC_VIRIDIAN_CITY", - "name": "VIRIDIAN CITY", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "VIRIDIAN CITY" }, { "id": "MAPSEC_PEWTER_CITY", - "name": "PEWTER CITY", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "PEWTER CITY" }, { "id": "MAPSEC_CERULEAN_CITY", - "name": "CERULEAN CITY", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "CERULEAN CITY" }, { "id": "MAPSEC_LAVENDER_TOWN", - "name": "LAVENDER TOWN", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "LAVENDER TOWN" }, { "id": "MAPSEC_VERMILION_CITY", - "name": "VERMILION CITY", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "VERMILION CITY" }, { "id": "MAPSEC_CELADON_CITY", - "name": "CELADON CITY", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "CELADON CITY" }, { "id": "MAPSEC_FUCHSIA_CITY", - "name": "FUCHSIA CITY", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "FUCHSIA CITY" }, { "id": "MAPSEC_CINNABAR_ISLAND", - "name": "CINNABAR ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "CINNABAR ISLAND" }, { "id": "MAPSEC_INDIGO_PLATEAU", - "name": "INDIGO PLATEAU", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "INDIGO PLATEAU" }, { "id": "MAPSEC_SAFFRON_CITY", - "name": "SAFFRON CITY", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SAFFRON CITY" }, { "id": "MAPSEC_ROUTE_4_POKECENTER", "name": "ROUTE 4", - "name_clone": true, - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name_clone": true }, { "id": "MAPSEC_ROUTE_10_POKECENTER", "name": "ROUTE 10", - "name_clone": true, - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name_clone": true }, { "id": "MAPSEC_ROUTE_1", - "name": "ROUTE 1", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 1" }, { "id": "MAPSEC_ROUTE_2", - "name": "ROUTE 2", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 2" }, { "id": "MAPSEC_ROUTE_3", - "name": "ROUTE 3", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 3" }, { "id": "MAPSEC_ROUTE_4", - "name": "ROUTE 4", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 4" }, { "id": "MAPSEC_ROUTE_5", - "name": "ROUTE 5", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 5" }, { "id": "MAPSEC_ROUTE_6", - "name": "ROUTE 6", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 6" }, { "id": "MAPSEC_ROUTE_7", - "name": "ROUTE 7", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 7" }, { "id": "MAPSEC_ROUTE_8", - "name": "ROUTE 8", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 8" }, { "id": "MAPSEC_ROUTE_9", - "name": "ROUTE 9", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 9" }, { "id": "MAPSEC_ROUTE_10", - "name": "ROUTE 10", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 10" }, { "id": "MAPSEC_ROUTE_11", - "name": "ROUTE 11", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 11" }, { "id": "MAPSEC_ROUTE_12", - "name": "ROUTE 12", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 12" }, { "id": "MAPSEC_ROUTE_13", - "name": "ROUTE 13", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 13" }, { "id": "MAPSEC_ROUTE_14", - "name": "ROUTE 14", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 14" }, { "id": "MAPSEC_ROUTE_15", - "name": "ROUTE 15", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 15" }, { "id": "MAPSEC_ROUTE_16", - "name": "ROUTE 16", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 16" }, { "id": "MAPSEC_ROUTE_17", - "name": "ROUTE 17", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 17" }, { "id": "MAPSEC_ROUTE_18", - "name": "ROUTE 18", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 18" }, { "id": "MAPSEC_ROUTE_19", - "name": "ROUTE 19", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 19" }, { "id": "MAPSEC_ROUTE_20", - "name": "ROUTE 20", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 20" }, { "id": "MAPSEC_ROUTE_21", - "name": "ROUTE 21", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 21" }, { "id": "MAPSEC_ROUTE_22", - "name": "ROUTE 22", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 22" }, { "id": "MAPSEC_ROUTE_23", - "name": "ROUTE 23", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 23" }, { "id": "MAPSEC_ROUTE_24", - "name": "ROUTE 24", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 24" }, { "id": "MAPSEC_ROUTE_25", - "name": "ROUTE 25", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROUTE 25" }, { "id": "MAPSEC_VIRIDIAN_FOREST", - "name": "VIRIDIAN FOREST", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "VIRIDIAN FOREST" }, { "id": "MAPSEC_MT_MOON", - "name": "MT. MOON", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "MT. MOON" }, { "id": "MAPSEC_S_S_ANNE", - "name": "S.S. ANNE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "S.S. ANNE" }, { "id": "MAPSEC_UNDERGROUND_PATH", - "name": "UNDERGROUND PATH", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "UNDERGROUND PATH" }, { "id": "MAPSEC_UNDERGROUND_PATH_2", "name": "UNDERGROUND PATH", - "name_clone": true, - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name_clone": true }, { "id": "MAPSEC_DIGLETTS_CAVE", - "name": "DIGLETT'S CAVE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "DIGLETT'S CAVE" }, { "id": "MAPSEC_KANTO_VICTORY_ROAD", "name": "VICTORY ROAD", - "name_clone": true, - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name_clone": true }, { "id": "MAPSEC_ROCKET_HIDEOUT", - "name": "ROCKET HIDEOUT", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROCKET HIDEOUT" }, { "id": "MAPSEC_SILPH_CO", - "name": "SILPH CO.", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SILPH CO." }, { "id": "MAPSEC_POKEMON_MANSION", - "name": "POKéMON MANSION", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "POKéMON MANSION" }, { "id": "MAPSEC_KANTO_SAFARI_ZONE", "name": "SAFARI ZONE", - "name_clone": true, - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name_clone": true }, { "id": "MAPSEC_POKEMON_LEAGUE", - "name": "POKéMON LEAGUE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "POKéMON LEAGUE" }, { "id": "MAPSEC_ROCK_TUNNEL", - "name": "ROCK TUNNEL", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROCK TUNNEL" }, { "id": "MAPSEC_SEAFOAM_ISLANDS", - "name": "SEAFOAM ISLANDS", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SEAFOAM ISLANDS" }, { "id": "MAPSEC_POKEMON_TOWER", - "name": "POKéMON TOWER", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "POKéMON TOWER" }, { "id": "MAPSEC_CERULEAN_CAVE", - "name": "CERULEAN CAVE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "CERULEAN CAVE" }, { "id": "MAPSEC_POWER_PLANT", - "name": "POWER PLANT", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "POWER PLANT" }, { "id": "MAPSEC_ONE_ISLAND", - "name": "ONE ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ONE ISLAND" }, { "id": "MAPSEC_TWO_ISLAND", - "name": "TWO ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "TWO ISLAND" }, { "id": "MAPSEC_THREE_ISLAND", - "name": "THREE ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "THREE ISLAND" }, { "id": "MAPSEC_FOUR_ISLAND", - "name": "FOUR ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "FOUR ISLAND" }, { "id": "MAPSEC_FIVE_ISLAND", - "name": "FIVE ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "FIVE ISLAND" }, { "id": "MAPSEC_SEVEN_ISLAND", - "name": "SEVEN ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SEVEN ISLAND" }, { "id": "MAPSEC_SIX_ISLAND", - "name": "SIX ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SIX ISLAND" }, { "id": "MAPSEC_KINDLE_ROAD", - "name": "KINDLE ROAD", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "KINDLE ROAD" }, { "id": "MAPSEC_TREASURE_BEACH", - "name": "TREASURE BEACH", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "TREASURE BEACH" }, { "id": "MAPSEC_CAPE_BRINK", - "name": "CAPE BRINK", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "CAPE BRINK" }, { "id": "MAPSEC_BOND_BRIDGE", - "name": "BOND BRIDGE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "BOND BRIDGE" }, { "id": "MAPSEC_THREE_ISLE_PORT", - "name": "THREE ISLE PORT", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "THREE ISLE PORT" }, { "id": "MAPSEC_SEVII_ISLE_6", - "name": "SEVII ISLE 6", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SEVII ISLE 6" }, { "id": "MAPSEC_SEVII_ISLE_7", - "name": "SEVII ISLE 7", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SEVII ISLE 7" }, { "id": "MAPSEC_SEVII_ISLE_8", - "name": "SEVII ISLE 8", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SEVII ISLE 8" }, { "id": "MAPSEC_SEVII_ISLE_9", - "name": "SEVII ISLE 9", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SEVII ISLE 9" }, { "id": "MAPSEC_RESORT_GORGEOUS", - "name": "RESORT GORGEOUS", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "RESORT GORGEOUS" }, { "id": "MAPSEC_WATER_LABYRINTH", - "name": "WATER LABYRINTH", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "WATER LABYRINTH" }, { "id": "MAPSEC_FIVE_ISLE_MEADOW", - "name": "FIVE ISLE MEADOW", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "FIVE ISLE MEADOW" }, { "id": "MAPSEC_MEMORIAL_PILLAR", - "name": "MEMORIAL PILLAR", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "MEMORIAL PILLAR" }, { "id": "MAPSEC_OUTCAST_ISLAND", - "name": "OUTCAST ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "OUTCAST ISLAND" }, { "id": "MAPSEC_GREEN_PATH", - "name": "GREEN PATH", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "GREEN PATH" }, { "id": "MAPSEC_WATER_PATH", - "name": "WATER PATH", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "WATER PATH" }, { "id": "MAPSEC_RUIN_VALLEY", - "name": "RUIN VALLEY", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "RUIN VALLEY" }, { "id": "MAPSEC_TRAINER_TOWER", - "name": "TRAINER TOWER", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "TRAINER TOWER" }, { "id": "MAPSEC_CANYON_ENTRANCE", - "name": "CANYON ENTRANCE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "CANYON ENTRANCE" }, { "id": "MAPSEC_SEVAULT_CANYON", - "name": "SEVAULT CANYON", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SEVAULT CANYON" }, { "id": "MAPSEC_TANOBY_RUINS", - "name": "TANOBY RUINS", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "TANOBY RUINS" }, { "id": "MAPSEC_SEVII_ISLE_22", - "name": "SEVII ISLE 22", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SEVII ISLE 22" }, { "id": "MAPSEC_SEVII_ISLE_23", - "name": "SEVII ISLE 23", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SEVII ISLE 23" }, { "id": "MAPSEC_SEVII_ISLE_24", - "name": "SEVII ISLE 24", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SEVII ISLE 24" }, { "id": "MAPSEC_NAVEL_ROCK_FRLG", - "name": "NAVEL ROCK", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "NAVEL ROCK" }, { "id": "MAPSEC_MT_EMBER", - "name": "MT. EMBER", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "MT. EMBER" }, { "id": "MAPSEC_BERRY_FOREST", - "name": "BERRY FOREST", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "BERRY FOREST" }, { "id": "MAPSEC_ICEFALL_CAVE", - "name": "ICEFALL CAVE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ICEFALL CAVE" }, { "id": "MAPSEC_ROCKET_WAREHOUSE", - "name": "ROCKET WAREHOUSE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ROCKET WAREHOUSE" }, { "id": "MAPSEC_TRAINER_TOWER_2", "name": "TRAINER TOWER", - "name_clone": true, - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name_clone": true }, { "id": "MAPSEC_DOTTED_HOLE", - "name": "DOTTED HOLE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "DOTTED HOLE" }, { "id": "MAPSEC_LOST_CAVE", - "name": "LOST CAVE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "LOST CAVE" }, { "id": "MAPSEC_PATTERN_BUSH", - "name": "PATTERN BUSH", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "PATTERN BUSH" }, { "id": "MAPSEC_ALTERING_CAVE_FRLG", - "name": "ALTERING CAVE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "ALTERING CAVE" }, { "id": "MAPSEC_TANOBY_CHAMBERS", - "name": "TANOBY CHAMBERS", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "TANOBY CHAMBERS" }, { "id": "MAPSEC_THREE_ISLE_PATH", - "name": "THREE ISLE PATH", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "THREE ISLE PATH" }, { "id": "MAPSEC_TANOBY_KEY", - "name": "TANOBY KEY", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "TANOBY KEY" }, { "id": "MAPSEC_BIRTH_ISLAND_FRLG", - "name": "BIRTH ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "BIRTH ISLAND" }, { "id": "MAPSEC_MONEAN_CHAMBER", - "name": "MONEAN CHAMBER", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "MONEAN CHAMBER" }, { "id": "MAPSEC_LIPTOO_CHAMBER", - "name": "LIPTOO CHAMBER", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "LIPTOO CHAMBER" }, { "id": "MAPSEC_WEEPTH_CHAMBER", - "name": "WEEPTH CHAMBER", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "WEEPTH CHAMBER" }, { "id": "MAPSEC_DILFORD_CHAMBER", - "name": "DILFORD CHAMBER", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "DILFORD CHAMBER" }, { "id": "MAPSEC_SCUFIB_CHAMBER", - "name": "SCUFIB CHAMBER", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SCUFIB CHAMBER" }, { "id": "MAPSEC_RIXY_CHAMBER", - "name": "RIXY CHAMBER", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "RIXY CHAMBER" }, { "id": "MAPSEC_VIAPOIS_CHAMBER", - "name": "VIAPOIS CHAMBER", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "VIAPOIS CHAMBER" }, { "id": "MAPSEC_EMBER_SPA", - "name": "EMBER SPA", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "EMBER SPA" }, { "id": "MAPSEC_SPECIAL_AREA", - "name": "SPECIAL AREA", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "SPECIAL AREA" }, { "id": "MAPSEC_AQUA_HIDEOUT", @@ -1609,19 +1161,11 @@ }, { "id": "MAPSEC_BIRTH_ISLAND", - "name": "BIRTH ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "BIRTH ISLAND" }, { "id": "MAPSEC_FARAWAY_ISLAND", - "name": "FARAWAY ISLAND", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "FARAWAY ISLAND" }, { "id": "MAPSEC_ARTISAN_CAVE", @@ -1633,27 +1177,15 @@ }, { "id": "MAPSEC_MARINE_CAVE", - "name": "MARINE CAVE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "MARINE CAVE" }, { "id": "MAPSEC_UNDERWATER_MARINE_CAVE", - "name": "UNDERWATER", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "UNDERWATER" }, { "id": "MAPSEC_TERRA_CAVE", - "name": "TERRA CAVE", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "TERRA CAVE" }, { "id": "MAPSEC_UNDERWATER_105", @@ -1697,11 +1229,7 @@ }, { "id": "MAPSEC_NAVEL_ROCK", - "name": "NAVEL ROCK", - "x": 0, - "y": 0, - "width": 1, - "height": 1 + "name": "NAVEL ROCK" }, { "id": "MAPSEC_TRAINER_HILL", diff --git a/src/data/region_map/region_map_sections.json.txt b/src/data/region_map/region_map_sections.json.txt index b73f992d6d..0da2d31794 100644 --- a/src/data/region_map/region_map_sections.json.txt +++ b/src/data/region_map/region_map_sections.json.txt @@ -19,9 +19,33 @@ static const u8 sMapName_{{ cleanString(map_section.name) }}_Clone[] = _("{{ map const struct RegionMapLocation gRegionMapEntries[] = { ## for map_section in map_sections -{% if existsIn(map_section, "x") and existsIn(map_section, "y") and existsIn(map_section, "width") and existsIn(map_section, "height") and existsIn(map_section, "name") %} - [{{ map_section.id }}] = { {{ map_section.x }}, {{ map_section.y }}, {{ map_section.width }}, {{ map_section.height }}, sMapName_{{ cleanString(map_section.name) }}{% if existsIn(map_section, "name_clone") %}_Clone{% endif %} }, + [{{ map_section.id }}] = { +{% if existsIn(map_section, "x") %} + .x = {{ map_section.x }}, +{% else %} + .x = 0, {% endif %} +{% if existsIn(map_section, "y") %} + .y = {{ map_section.y }}, +{% else %} + .y = 0, +{% endif %} +{% if existsIn(map_section, "width") %} + .width = {{ map_section.width }}, +{% else %} + .width = 1, +{% endif %} +{% if existsIn(map_section, "height") %} + .height = {{ map_section.height }}, +{% else %} + .height = 1, +{% endif %} +{% if existsIn(map_section, "name") %} + .name = sMapName_{{ cleanString(map_section.name) }}{% if existsIn(map_section, "name_clone") %}_Clone{% endif %}, +{% else %} + .name = (const u8[])_(""), +{% endif %} + }, ## endfor }; diff --git a/src/decoration.c b/src/decoration.c index 1608061255..fe01ac4bdc 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1227,9 +1227,9 @@ static void ShowDecorationOnMap_(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight, { x = mapX + 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)) - impassableFlag = MAPGRID_COLLISION_MASK; + impassableFlag = MAPGRID_IMPASSABLE; else impassableFlag = 0; @@ -1521,6 +1521,17 @@ static bool8 IsFloorOrBoardAndHole(u16 behaviorAt, const struct Decoration *deco 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) { u8 i; @@ -1545,7 +1556,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; 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)) return FALSE; @@ -1566,7 +1577,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; 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)) return FALSE; @@ -1583,7 +1594,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; 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)) return FALSE; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 0c0d5b4694..49c928ea3a 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1481,7 +1481,7 @@ u8 Unref_TryInitLocalObjectEvent(u8 localId) if (gMapHeader.events != NULL) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) objectEventCount = GetNumBattlePyramidObjectEvents(); else if (InTrainerHill()) objectEventCount = HILL_TRAINERS_PER_FLOOR; @@ -2724,7 +2724,7 @@ void TrySpawnLightSprites(s16 camX, s16 camY) if (gMapHeader.events == NULL) return; - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) objectCount = GetNumBattlePyramidObjectEvents(); else if (InTrainerHill()) objectCount = 2; @@ -2756,7 +2756,7 @@ void TrySpawnObjectEvents(s16 cameraX, s16 cameraY) s16 top = gSaveBlock1Ptr->pos.y; s16 bottom = gSaveBlock1Ptr->pos.y + MAP_OFFSET_H + 2; - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) objectCount = GetNumBattlePyramidObjectEvents(); else if (InTrainerHill()) objectCount = HILL_TRAINERS_PER_FLOOR; diff --git a/src/field_poison.c b/src/field_poison.c index 30ae7c21a7..f4be9970a2 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -94,9 +94,9 @@ static void Task_TryFieldPoisonWhiteOut(u8 taskId) { // Battle facilities have their own white out script to handle the challenge loss #ifdef BUGFIX - if (InBattlePyramid() || InBattlePike() || InTrainerHillChallenge()) + if (CurrentBattlePyramidLocation() || InBattlePike() || InTrainerHillChallenge()) #else - if (InBattlePyramid() | InBattlePike() || InTrainerHillChallenge()) + if (CurrentBattlePyramidLocation() | InBattlePike() || InTrainerHillChallenge()) #endif gSpecialVar_Result = FLDPSN_FRONTIER_WHITEOUT; else diff --git a/src/field_specials.c b/src/field_specials.c index 971847888a..2aa14f30d1 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -680,10 +680,10 @@ void MauvilleGymSetDefaultBarriers(void) MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_GreenBeamH2_On); break; 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; 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; case METATILE_MauvilleGym_RedBeamH1_On: MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH1_Off); @@ -704,37 +704,37 @@ void MauvilleGymSetDefaultBarriers(void) MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH2_On); break; 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; 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; 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; case METATILE_MauvilleGym_GreenBeamV2_On: MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile); break; 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; case METATILE_MauvilleGym_RedBeamV2_On: MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_FloorTile); break; 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; case METATILE_MauvilleGym_FloorTile: 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 - MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV2_On | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamV2_On | MAPGRID_IMPASSABLE); break; 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; 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; case METATILE_MauvilleGym_PoleTop_On: MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_PoleTop_Off); @@ -785,10 +785,10 @@ void MauvilleGymDeactivatePuzzle(void) MapGridSetMetatileIdAt(x, y, METATILE_MauvilleGym_RedBeamH4_Off); break; 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; 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; case METATILE_MauvilleGym_GreenBeamV2_On: case METATILE_MauvilleGym_RedBeamV2_On: @@ -897,8 +897,8 @@ static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId) } 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 + 1, (metatileId + METATILE_ROW_WIDTH) | 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_IMPASSABLE); } DrawWholeMapView(); } @@ -1098,7 +1098,7 @@ static void PCTurnOnEffect_SetMetatile(s16 isScreenOn, s8 dx, s8 dy) else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) 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. @@ -1141,7 +1141,7 @@ static void PCTurnOffEffect(void) else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) 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(); } @@ -1173,14 +1173,14 @@ static void LotteryCornerComputerEffect(struct Task *task) if (task->tIsScreenOn) { // Screen is on, set it off - MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Normal | MAPGRID_COLLISION_MASK); - MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_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_IMPASSABLE); } else { // Screen is off, set it on - MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Flash | MAPGRID_COLLISION_MASK); - MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_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_IMPASSABLE); } DrawWholeMapView(); @@ -1195,8 +1195,8 @@ static void LotteryCornerComputerEffect(struct Task *task) void EndLotteryCornerComputerEffect(void) { - MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Normal | MAPGRID_COLLISION_MASK); - MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_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_IMPASSABLE); DrawWholeMapView(); } @@ -1976,7 +1976,7 @@ static void Task_MoveElevatorWindowLights(u8 taskId) for (y = 0; y < ELEVATOR_WINDOW_HEIGHT; y++) { 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 @@ -1985,7 +1985,7 @@ static void Task_MoveElevatorWindowLights(u8 taskId) for (y = 0; y < ELEVATOR_WINDOW_HEIGHT; y++) { 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(); diff --git a/src/fieldmap.c b/src/fieldmap.c index 255e1b8904..5e8a261cab 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -52,7 +52,7 @@ static inline u16 GetBorderBlockAt(int x, int y) { int i = (x + 1) & 1; i += ((y + 1) & 1) * 2; - return gMapHeader.mapLayout->border[i] | MAPGRID_COLLISION_MASK; + return gMapHeader.mapLayout->border[i] | MAPGRID_IMPASSABLE; } #define AreCoordsWithinMapGridBounds(x, y) (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height) @@ -345,7 +345,7 @@ u8 MapGridGetElevationAt(int x, int y) if (block == MAPGRID_UNDEFINED) return 0; - return block >> MAPGRID_ELEVATION_SHIFT; + return UNPACK_ELEVATION(block); } u8 MapGridGetCollisionAt(int x, int y) @@ -355,7 +355,7 @@ u8 MapGridGetCollisionAt(int x, int y) if (block == MAPGRID_UNDEFINED) return TRUE; - return (block & MAPGRID_COLLISION_MASK) >> MAPGRID_COLLISION_SHIFT; + return UNPACK_COLLISION(block); } u32 MapGridGetMetatileIdAt(int x, int y) @@ -363,21 +363,21 @@ u32 MapGridGetMetatileIdAt(int x, int y) u16 block = GetMapGridBlockAt(x, y); 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) { u16 metatile = MapGridGetMetatileIdAt(x, y); - return GetMetatileAttributesById(metatile) & METATILE_ATTR_BEHAVIOR_MASK; + return UNPACK_BEHAVIOR(GetMetatileAttributesById(metatile)); } u8 MapGridGetMetatileLayerTypeAt(int x, int 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) @@ -386,6 +386,8 @@ void MapGridSetMetatileIdAt(int x, int y, u16 metatile) if (AreCoordsWithinMapGridBounds(x, y)) { 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); } } @@ -839,7 +841,7 @@ static bool8 SkipCopyingMetatileFromSavedMap(u16 *mapBlock, u16 mapWidth, u8 yMo else mapBlock += mapWidth; - if (IsLargeBreakableDecoration(*mapBlock & MAPGRID_METATILE_ID_MASK, yMode) == TRUE) + if (IsLargeBreakableDecoration(UNPACK_METATILE(*mapBlock), yMode) == TRUE) return TRUE; return FALSE; } diff --git a/src/fldeff_escalator.c b/src/fldeff_escalator.c index eabbd53549..f49b97b0c8 100644 --- a/src/fldeff_escalator.c +++ b/src/fldeff_escalator.c @@ -126,13 +126,13 @@ static void Task_DrawEscalator(u8 taskId) SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_1, 0); break; case 2: - SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_2, MAPGRID_COLLISION_MASK); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_2, MAPGRID_IMPASSABLE); break; case 3: SetEscalatorMetatile(taskId, sEscalatorMetatiles_1F_3, 0); break; case 4: - SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_0, MAPGRID_COLLISION_MASK); + SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_0, MAPGRID_IMPASSABLE); break; case 5: SetEscalatorMetatile(taskId, sEscalatorMetatiles_2F_1, 0); diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c index d3e6982f29..893d4ab638 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -840,9 +840,9 @@ void DoSecretBasePCTurnOffEffect(void) PlaySE(SE_PC_OFF); if (!VarGet(VAR_CURRENT_SECRET_BASE)) - MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | MAPGRID_IMPASSABLE); else - MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_RegisterPC | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_RegisterPC | MAPGRID_IMPASSABLE); CurrentMapDrawMetatileAt(x, y); } @@ -1083,7 +1083,7 @@ static void SpriteCB_SandPillar_BreakTop(struct Sprite *sprite) PlaySE(SE_M_ROCK_THROW); 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 MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_SandOrnament_BrokenTop); @@ -1103,7 +1103,7 @@ static void SpriteCB_SandPillar_BreakBase(struct Sprite *sprite) } 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]); sprite->data[0] = 0; sprite->callback = SpriteCB_SandPillar_End; diff --git a/src/frontier_pass.c b/src/frontier_pass.c index 12bb1f3ea7..54d25a11e0 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -917,12 +917,12 @@ static void CB2_ReturnFromRecord(void) sPassData->cursorX = sSavedPassData.cursorX; sPassData->cursorY = sSavedPassData.cursorY; memset(&sSavedPassData, 0, sizeof(sSavedPassData)); - switch (InBattlePyramid()) + switch (CurrentBattlePyramidLocation()) { - case 1: + case PYRAMID_LOCATION_FLOOR: PlayBGM(MUS_B_PYRAMID); break; - case 2: + case PYRAMID_LOCATION_TOP: PlayBGM(MUS_B_PYRAMID_TOP); break; default: diff --git a/src/gpu_regs.c b/src/gpu_regs.c index 3bcc4fd931..d645c1442d 100644 --- a/src/gpu_regs.c +++ b/src/gpu_regs.c @@ -8,7 +8,7 @@ #define EMPTY_SLOT 0xFF -static u8 sGpuRegBuffer[GPU_REG_BUF_SIZE]; +static ALIGNED(2) u8 sGpuRegBuffer[GPU_REG_BUF_SIZE]; // sGpuRegBuffer is read as u16 so it needs to be properly aligned static u8 sGpuRegWaitingList[GPU_REG_BUF_SIZE]; static volatile bool8 sGpuRegBufferLocked; static volatile bool8 sShouldSyncRegIE; diff --git a/src/item.c b/src/item.c index 87752548f3..d2ed1d22c8 100644 --- a/src/item.c +++ b/src/item.c @@ -127,7 +127,7 @@ bool8 CheckBagHasItem(u16 itemId, u16 count) if (GetItemPocket(itemId) == 0) return FALSE; - if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) return CheckPyramidBagHasItem(itemId, count); pocket = GetItemPocket(itemId) - 1; // Check for item slots that contain the item @@ -182,7 +182,7 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count) if (GetItemPocket(itemId) == POCKET_NONE) return FALSE; - if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) return CheckPyramidBagHasSpace(itemId, count); return GetFreeSpaceForItemInBag(itemId) >= count; @@ -222,7 +222,7 @@ bool8 AddBagItem(u16 itemId, u16 count) return FALSE; // check Battle Pyramid Bag - if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) { return AddPyramidBagItem(itemId, count); } @@ -324,7 +324,7 @@ bool8 RemoveBagItem(u16 itemId, u16 count) return FALSE; // check Battle Pyramid Bag - if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) { return RemovePyramidBagItem(itemId, count); } diff --git a/src/item_menu.c b/src/item_menu.c index 12ecb99804..a05bb8643b 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -573,7 +573,7 @@ void CB2_BagMenuFromStartMenu(void) void CB2_BagMenuFromBattle(void) { - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) GoToBagMenu(ITEMMENULOCATION_BATTLE, POCKETS_COUNT, CB2_SetUpReshowBattleScreenAfterMenu2); else GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_BATTLE, CB2_SetUpReshowBattleScreenAfterMenu2); @@ -2074,7 +2074,7 @@ bool8 UseRegisteredKeyItemOnField(void) { u8 taskId; - if (InUnionRoom() == TRUE || InBattlePyramid() || InBattlePike() || InMultiPartnerRoom() == TRUE) + if (InUnionRoom() == TRUE || CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE || InBattlePike() || InMultiPartnerRoom() == TRUE) return FALSE; HideMapNamePopUpWindow(); ChangeBgY_ScreenOff(0, 0, BG_COORD_SET); diff --git a/src/item_use.c b/src/item_use.c index 44858183c1..2c1f892197 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -128,7 +128,7 @@ static void SetUpItemUseCallback(u8 taskId) type = gTasks[taskId].tEnigmaBerryType - 1; else type = GetItemType(gSpecialVar_ItemId) - 1; - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) { gBagMenu->newScreenCallback = sItemUseCallbacks[type]; Task_FadeAndCloseBagMenu(taskId); @@ -170,7 +170,7 @@ static void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyIte StringExpandPlaceholders(gStringVar4, str); if (!isUsingRegisteredKeyItemOnField) { - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, Task_CloseBattlePyramidBagMessage); @@ -923,7 +923,7 @@ static void RemoveUsedItem(void) RemoveBagItem(gSpecialVar_ItemId, 1); CopyItemName(gSpecialVar_ItemId, gStringVar2); StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) { UpdatePocketItemList(GetItemPocket(gSpecialVar_ItemId)); UpdatePocketListPosition(GetItemPocket(gSpecialVar_ItemId)); @@ -939,7 +939,7 @@ void ItemUseOutOfBattle_Repel(u8 taskId) { if (REPEL_STEP_COUNT == 0) gTasks[taskId].func = Task_StartUseRepel; - else if (!InBattlePyramid()) + else if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) DisplayItemMessage(taskId, FONT_NORMAL, gText_RepelEffectsLingered, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gText_RepelEffectsLingered, Task_CloseBattlePyramidBagMessage); @@ -966,7 +966,7 @@ static void Task_UseRepel(u8 taskId) VarSet(VAR_LAST_REPEL_LURE_USED, gSpecialVar_ItemId); #endif RemoveUsedItem(); - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage); @@ -983,7 +983,7 @@ void ItemUseOutOfBattle_Lure(u8 taskId) { if (LURE_STEP_COUNT == 0) gTasks[taskId].func = Task_StartUseLure; - else if (!InBattlePyramid()) + else if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) DisplayItemMessage(taskId, FONT_NORMAL, gText_LureEffectsLingered, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gText_LureEffectsLingered, Task_CloseBattlePyramidBagMessage); @@ -1010,7 +1010,7 @@ static void Task_UseLure(u8 taskId) VarSet(VAR_LAST_REPEL_LURE_USED, gSpecialVar_ItemId); #endif RemoveUsedItem(); - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage); @@ -1029,7 +1029,7 @@ static void Task_UsedBlackWhiteFlute(u8 taskId) if(++gTasks[taskId].data[8] > 7) { PlaySE(SE_GLASS_FLUTE); - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage); @@ -1134,31 +1134,31 @@ void ItemUseInBattle_PokeBall(u8 taskId) case BALL_THROW_ABLE: default: RemoveBagItem(gSpecialVar_ItemId, 1); - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) Task_FadeAndCloseBagMenu(taskId); else CloseBattlePyramidBag(taskId); break; case BALL_THROW_UNABLE_TWO_MONS: - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) DisplayItemMessage(taskId, FONT_NORMAL, sText_CantThrowPokeBall_TwoMons, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, sText_CantThrowPokeBall_TwoMons, Task_CloseBattlePyramidBagMessage); break; case BALL_THROW_UNABLE_NO_ROOM: - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) DisplayItemMessage(taskId, FONT_NORMAL, gText_BoxFull, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, Task_CloseBattlePyramidBagMessage); break; case BALL_THROW_UNABLE_SEMI_INVULNERABLE: - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) DisplayItemMessage(taskId, FONT_NORMAL, sText_CantThrowPokeBall_SemiInvulnerable, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, sText_CantThrowPokeBall_SemiInvulnerable, Task_CloseBattlePyramidBagMessage); break; case BALL_THROW_UNABLE_DISABLED_FLAG: - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) DisplayItemMessage(taskId, FONT_NORMAL, sText_CantThrowPokeBall_Disabled, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, sText_CantThrowPokeBall_Disabled, Task_CloseBattlePyramidBagMessage); @@ -1168,7 +1168,7 @@ void ItemUseInBattle_PokeBall(u8 taskId) static void ItemUseInBattle_ShowPartyMenu(u8 taskId) { - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) { gBagMenu->newScreenCallback = ChooseMonForInBattleItem; Task_FadeAndCloseBagMenu(taskId); @@ -1316,7 +1316,7 @@ void ItemUseInBattle_BagMenu(u8 taskId) { if (CannotUseItemsInBattle(gSpecialVar_ItemId, NULL)) { - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, CloseItemMessage); else DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage); @@ -1327,7 +1327,7 @@ void ItemUseInBattle_BagMenu(u8 taskId) if (!GetItemImportance(gSpecialVar_ItemId) && !(B_TRY_CATCH_TRAINER_BALL >= GEN_4 && (GetItemBattleUsage(gSpecialVar_ItemId) == EFFECT_ITEM_THROW_BALL) && (gBattleTypeFlags & BATTLE_TYPE_TRAINER))) RemoveUsedItem(); ScheduleBgCopyTilemapToVram(2); - if (!InBattlePyramid()) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) gTasks[taskId].func = Task_FadeAndCloseBagMenu; else gTasks[taskId].func = CloseBattlePyramidBag; diff --git a/src/map_name_popup.c b/src/map_name_popup.c index c14203fc56..f2ab17f28e 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -526,7 +526,7 @@ static void ShowMapNamePopUpWindow(void) const u8 *mapDisplayHeaderSource; u8 mapNamePopUpWindowId, secondaryPopUpWindowId; - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP) { diff --git a/src/mon_markings.c b/src/mon_markings.c index d7a61c27e7..1de8e413fd 100644 --- a/src/mon_markings.c +++ b/src/mon_markings.c @@ -23,7 +23,7 @@ static void SpriteCB_Cursor(struct Sprite *); static struct Sprite *CreateMarkingComboSprite(u16, u16, const u16 *, u16); static const u16 sMonMarkings_Pal[] = INCBIN_U16("graphics/interface/mon_markings.gbapal"); -static const u8 sMonMarkings_Gfx[] = INCBIN_U8("graphics/interface/mon_markings.4bpp"); +static const ALIGNED(4) u8 sMonMarkings_Gfx[] = INCBIN_U8("graphics/interface/mon_markings.4bpp"); // Alignment needed for dma copy static const struct OamData sOamData_MenuWindow = { diff --git a/src/party_menu.c b/src/party_menu.c index f05c42bd0a..146a06cb69 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3359,7 +3359,7 @@ static void CursorCb_Give(u8 taskId) static void CB2_SelectBagItemToGive(void) { - if (InBattlePyramid() == FALSE) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) GoToBagMenu(ITEMMENULOCATION_PARTY, POCKETS_COUNT, CB2_GiveHoldItem); else GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_PARTY, CB2_GiveHoldItem); @@ -4599,7 +4599,7 @@ void CB2_ShowPartyMenuForItemUse(void) static void CB2_ReturnToBagMenu(void) { - if (InBattlePyramid() == FALSE) + if (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) GoToBagMenu(ITEMMENULOCATION_LAST, POCKETS_COUNT, NULL); else GoToBattlePyramidBagMenu(PYRAMIDBAG_LOC_PREV, gPyramidBagMenuState.exitCallback); @@ -6844,7 +6844,7 @@ void CB2_PartyMenuFromStartMenu(void) // As opposted to by selecting Give in the party menu, which is handled by CursorCb_Give void CB2_ChooseMonToGiveItem(void) { - MainCallback callback = (InBattlePyramid() == FALSE) ? CB2_ReturnToBagMenu : CB2_ReturnToPyramidBagMenu; + MainCallback callback = (CurrentBattlePyramidLocation() == PYRAMID_LOCATION_NONE) ? CB2_ReturnToBagMenu : CB2_ReturnToPyramidBagMenu; InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_GIVE_ITEM, FALSE, PARTY_MSG_GIVE_TO_WHICH_MON, Task_HandleChooseMonInput, callback); gPartyMenu.bagItem = gSpecialVar_ItemId; } diff --git a/src/pokemon.c b/src/pokemon.c index 6636c7c7fa..9b7ce57de1 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1146,7 +1146,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, { isShiny = TRUE; } - else if (P_ONLY_OBTAINABLE_SHINIES && InBattlePyramid()) + else if (P_ONLY_OBTAINABLE_SHINIES && CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { isShiny = FALSE; } @@ -5220,7 +5220,7 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId) u32 sanitizedTrainerId = SanitizeTrainerId(trainerOpponentId); enum DifficultyLevel difficulty = GetTrainerDifficultyLevel(sanitizedTrainerId); - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) return GetTrainerEncounterMusicIdInBattlePyramid(trainerOpponentId); else if (InTrainerHillChallenge()) return GetTrainerEncounterMusicIdInTrainerHill(trainerOpponentId); @@ -6389,7 +6389,7 @@ static bool8 ShouldSkipFriendshipChange(void) { if (gMain.inBattle && gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) return TRUE; - if (!gMain.inBattle && (InBattlePike() || InBattlePyramid())) + if (!gMain.inBattle && (InBattlePike() || CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE)) return TRUE; return FALSE; } diff --git a/src/scrcmd.c b/src/scrcmd.c index b5077420e3..181b98d100 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2728,7 +2728,7 @@ bool8 ScrCmd_setmetatile(struct ScriptContext *ctx) if (!isImpassable) MapGridSetMetatileIdAt(x, y, metatileId); else - MapGridSetMetatileIdAt(x, y, metatileId | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, metatileId | MAPGRID_IMPASSABLE); return FALSE; } diff --git a/src/secret_base.c b/src/secret_base.c index de0825b91e..9b73d330c2 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -332,7 +332,7 @@ void ToggleSecretBaseEntranceMetatile(void) { 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); return; } @@ -343,7 +343,7 @@ void ToggleSecretBaseEntranceMetatile(void) { 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); return; } @@ -398,7 +398,7 @@ void SetOccupiedSecretBaseEntranceMetatiles(struct MapEvents const *events) { if (sSecretBaseEntranceMetatiles[i].closedMetatileId == tile_id) { - MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].openMetatileId | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(x, y, sSecretBaseEntranceMetatiles[i].openMetatileId | MAPGRID_IMPASSABLE); break; } } @@ -477,7 +477,7 @@ static void EnterNewlyCreatedSecretBase_StartFadeIn(void) FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC); x += 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); FadeInFromBlack(); CreateTask(EnterNewlyCreatedSecretBase_WaitFadeIn, 0); @@ -538,13 +538,13 @@ void InitSecretBaseAppearance(bool8 hidePC) { // Another player's secret base. Change PC type to the "Register" 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) { // Change PC to regular ground tile. 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, events->bgEvents[i].y + MAP_OFFSET, - sSecretBaseEntranceMetatiles[j].closedMetatileId | MAPGRID_COLLISION_MASK); + sSecretBaseEntranceMetatiles[j].closedMetatileId | MAPGRID_IMPASSABLE); break; } } diff --git a/src/shop.c b/src/shop.c index ac8a01a9b4..0731344932 100644 --- a/src/shop.c +++ b/src/shop.c @@ -45,6 +45,7 @@ #define TAG_ITEM_ICON_BASE 9110 // immune to time blending #define MAX_ITEMS_SHOWN 8 +#define SHOP_MENU_PALETTE_ID 12 enum { WIN_BUY_SELL_QUIT, @@ -746,7 +747,7 @@ static void BuyMenuDecompressBgGraphics(void) { DecompressAndCopyTileDataToVram(1, gShopMenu_Gfx, 0x3A0, 0x3E3, 0); LZDecompressWram(gShopMenu_Tilemap, sShopData->tilemapBuffers[0]); - LoadPalette(gShopMenu_Pal, BG_PLTT_ID(12), PLTT_SIZE_4BPP); + LoadPalette(gShopMenu_Pal, BG_PLTT_ID(SHOP_MENU_PALETTE_ID), PLTT_SIZE_4BPP); } static void BuyMenuInitWindows(void) @@ -956,7 +957,7 @@ static void BuyMenuCopyMenuBgToBg1TilemapBuffer(void) for (i = 0; i < 1024; i++) { if (src[i] != 0) - dest[i] = src[i] + 0xC3E3; + dest[i] = src[i] + ((SHOP_MENU_PALETTE_ID << 12) | 0x3E3); } } diff --git a/src/start_menu.c b/src/start_menu.c index 72a420e90e..719dc087a7 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -306,7 +306,7 @@ static void BuildStartMenuActions(void) { BuildBattlePikeStartMenu(); } - else if (InBattlePyramid()) + else if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { BuildBattlePyramidStartMenu(); } @@ -468,7 +468,7 @@ static void RemoveExtraStartMenuWindows(void) CopyWindowToVram(sSafariBallsWindowId, COPYWIN_GFX); RemoveWindow(sSafariBallsWindowId); } - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { ClearStdWindowAndFrameToTransparent(sBattlePyramidFloorWindowId, FALSE); RemoveWindow(sBattlePyramidFloorWindowId); @@ -528,7 +528,7 @@ static bool32 InitStartMenuStep(void) case 3: if (GetSafariZoneFlag()) ShowSafariBallsWindow(); - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) ShowPyramidFloorWindow(); sInitStartMenuData[0]++; break; @@ -753,7 +753,7 @@ static bool8 StartMenuPlayerNameCallback(void) static bool8 StartMenuSaveCallback(void) { - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) RemoveExtraStartMenuWindows(); gMenuCallback = SaveStartCallback; // Display save menu @@ -1035,7 +1035,7 @@ static u8 SaveConfirmSaveCallback(void) RemoveStartMenuWindow(); ShowSaveInfoWindow(); - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { ShowSaveMessage(gText_BattlePyramidConfirmRest, SaveYesNoCallback); } diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 3b2b74e1ab..133ddeb73b 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -707,17 +707,17 @@ bool32 LoadTrainerHillFloorObjectEventScripts(void) 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; - u16 metatile; + u16 metatileId; u16 elevation; impassable = (sHillData->floors[floorId].map.collisionData[y] >> (15 - x) & 1); - metatile = sHillData->floors[floorId].map.metatileData[floorWidth * y + x] + NUM_METATILES_IN_PRIMARY; - elevation = 3 << MAPGRID_ELEVATION_SHIFT; + metatileId = sHillData->floors[floorId].map.metatileData[floorWidth * y + x] + NUM_METATILES_IN_PRIMARY; + 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) @@ -762,7 +762,7 @@ void GenerateTrainerHillFloorLayout(u16 *mapArg) for (y = 0; y < HILL_FLOOR_HEIGHT_MAIN; y++) { 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; } diff --git a/src/trainer_see.c b/src/trainer_see.c index 0a3b68f8c2..cefb22eef4 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -457,7 +457,7 @@ static u8 CheckTrainer(u8 objectEventId) } } - if (InBattlePyramid()) + if (CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { if (GetBattlePyramidTrainerFlag(objectEventId)) return 0; diff --git a/src/wild_encounter.c b/src/wild_encounter.c index f77fe272d6..433bda003f 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -384,7 +384,7 @@ enum TimeOfDay GetTimeOfDayForEncounters(u32 headerId, enum WildPokemonArea area if (!OW_TIME_OF_DAY_ENCOUNTERS) return TIME_OF_DAY_DEFAULT; - if (InBattlePike() || InBattlePyramid()) + if (InBattlePike() || CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) { return OW_TIME_OF_DAY_FALLBACK; } @@ -411,7 +411,7 @@ enum TimeOfDay GetTimeOfDayForEncounters(u32 headerId, enum WildPokemonArea area } } - if (wildMonInfo == NULL && !OW_TIME_OF_DAY_DISABLE_FALLBACK) + if (wildMonInfo == NULL && !OW_TIME_OF_DAY_DISABLE_FALLBACK) return OW_TIME_OF_DAY_FALLBACK; else return timeOfDay; @@ -1044,7 +1044,7 @@ bool8 UpdateRepelCounter(void) u16 steps = REPEL_LURE_STEPS(repelLureVar); bool32 isLure = IS_LAST_USED_LURE(repelLureVar); - if (InBattlePike() || InBattlePyramid()) + if (InBattlePike() || CurrentBattlePyramidLocation() != PYRAMID_LOCATION_NONE) return FALSE; if (InUnionRoom() == TRUE) return FALSE; diff --git a/tools/gbagfx/main.c b/tools/gbagfx/main.c index bb1691c59a..6502b87d6b 100644 --- a/tools/gbagfx/main.c +++ b/tools/gbagfx/main.c @@ -333,6 +333,9 @@ void HandleJascToGbaPaletteCommand(char *inputPath, char *outputPath, int argc, if (numColors < 1) FATAL_ERROR("Number of colors must be positive.\n"); + + if (numColors > 255) + FATAL_ERROR("Number of colors must be less than 256.\n"); } else { diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index 66667935a1..69b412b24e 100644 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -679,7 +679,7 @@ void AsmFile::RaiseWarning(const char* format, ...) int AsmFile::SkipWhitespaceAndEol() { int newlines = 0; - while (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ' || m_buffer[m_pos] == '\n') + while (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ' || m_buffer[m_pos] == '\r' || m_buffer[m_pos] == '\n') { if (m_buffer[m_pos] == '\n') newlines++; diff --git a/tools/preproc/preproc.cpp b/tools/preproc/preproc.cpp index 20c2de51b6..ac9496d701 100644 --- a/tools/preproc/preproc.cpp +++ b/tools/preproc/preproc.cpp @@ -26,6 +26,11 @@ #include "c_file.h" #include "charmap.h" +#ifdef _WIN32 +#include +#include +#endif + static void UsageAndExit(const char *program); Charmap* g_charmap; @@ -179,6 +184,11 @@ int main(int argc, char **argv) g_charmap = new Charmap(charmap); +#ifdef _WIN32 + // On Windows, piping from stdout can break newlines. Treat stdout as binary stream to avoid this. + _setmode(_fileno(stdout), _O_BINARY); +#endif + const char* extension = GetFileExtension(source); if (!extension)