diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/apprentice.c | 2 | ||||
-rw-r--r-- | src/battle_message.c | 1 | ||||
-rw-r--r-- | src/battle_pike.c | 2 | ||||
-rw-r--r-- | src/battle_util.c | 7 | ||||
-rw-r--r-- | src/berry.c | 1 | ||||
-rw-r--r-- | src/berry_blender.c | 1 | ||||
-rw-r--r-- | src/berry_tag_screen.c | 1 | ||||
-rw-r--r-- | src/contest.c | 2 | ||||
-rw-r--r-- | src/crt0.s | 4 | ||||
-rwxr-xr-x | src/data/object_events/movement_type_func_tables.h | 4 | ||||
-rw-r--r-- | src/daycare.c | 2 | ||||
-rw-r--r-- | src/egg_hatch.c | 6 | ||||
-rw-r--r-- | src/event_object_movement.c | 22 | ||||
-rw-r--r-- | src/evolution_scene.c | 2 | ||||
-rw-r--r-- | src/field_effect.c | 4 | ||||
-rw-r--r-- | src/field_weather.c | 8 | ||||
-rw-r--r-- | src/international_string_util.c | 2 | ||||
-rw-r--r-- | src/mail.c | 2 | ||||
-rw-r--r-- | src/menu_specialized.c | 1 | ||||
-rwxr-xr-x | src/party_menu.c | 8 | ||||
-rw-r--r-- | src/pokeblock.c | 1 | ||||
-rw-r--r-- | src/pokemon.c | 110 | ||||
-rw-r--r-- | src/pokemon_size_record.c | 6 | ||||
-rw-r--r-- | src/scrcmd.c | 12 | ||||
-rw-r--r-- | src/secret_base.c | 473 | ||||
-rw-r--r-- | src/trade.c | 18 | ||||
-rw-r--r-- | src/trainer_see.c | 60 | ||||
-rw-r--r-- | src/tv.c | 36 | ||||
-rw-r--r-- | src/util.c | 7 |
29 files changed, 438 insertions, 367 deletions
diff --git a/src/apprentice.c b/src/apprentice.c index 20c0cb9e3..8a8de009c 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -1083,7 +1083,7 @@ static void ApprenticeBufferString(void) StringCopy(stringDst, ItemId_GetName(PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].data)); break; case APPRENTICE_BUFF_NAME: - TVShowConvertInternationalString(text, GetApprenticeNameInLanguage(PLAYER_APPRENTICE.id, LANGUAGE_ENGLISH), LANGUAGE_ENGLISH); + TVShowConvertInternationalString(text, GetApprenticeNameInLanguage(PLAYER_APPRENTICE.id, GAME_LANGUAGE), GAME_LANGUAGE); StringCopy(stringDst, text); break; case APPRENTICE_BUFF_LEVEL: diff --git a/src/battle_message.c b/src/battle_message.c index 3920f94cf..46444a8fa 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -21,7 +21,6 @@ #include "window.h" #include "constants/battle_dome.h" #include "constants/battle_string_ids.h" -#include "constants/berry.h" #include "constants/frontier_util.h" #include "constants/items.h" #include "constants/moves.h" diff --git a/src/battle_pike.c b/src/battle_pike.c index a161b88b8..ed18b2f71 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -1326,7 +1326,7 @@ bool8 InBattlePike(void) return gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS - || gMapHeader.mapLayoutId == LAYOUT_UNKNOWN_084693AC; + || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_UNUSED; } static void SetHintedRoom(void) diff --git a/src/battle_util.c b/src/battle_util.c index b7919f904..2bf06f331 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -29,7 +29,6 @@ #include "constants/battle_move_effects.h" #include "constants/battle_script_commands.h" #include "constants/battle_string_ids.h" -#include "constants/berry.h" #include "constants/hold_effects.h" #include "constants/items.h" #include "constants/moves.h" @@ -3950,14 +3949,14 @@ u8 GetMoveTarget(u16 move, u8 setTarget) return targetBattler; } -static bool32 HasObedientBitSet(u8 battlerId) +static bool32 IsNotEventLegalMewOrDeoxys(u8 battlerId) { if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) return TRUE; if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS && GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_MEW) return TRUE; - return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_OBEDIENCE, NULL); + return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_EVENT_LEGAL, NULL); } u8 IsMonDisobedient(void) @@ -3971,7 +3970,7 @@ u8 IsMonDisobedient(void) if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT) return 0; - if (HasObedientBitSet(gBattlerAttacker)) // only if species is Mew or Deoxys + if (IsNotEventLegalMewOrDeoxys(gBattlerAttacker)) // only if species is Mew or Deoxys { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gBattlerAttacker) == 2) return 0; diff --git a/src/berry.c b/src/berry.c index 022fdc934..ea62deabf 100644 --- a/src/berry.c +++ b/src/berry.c @@ -11,7 +11,6 @@ #include "random.h" #include "string_util.h" #include "text.h" -#include "constants/berry.h" #include "constants/event_object_movement.h" #include "constants/items.h" diff --git a/src/berry_blender.c b/src/berry_blender.c index 08a25c58a..252407562 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -34,7 +34,6 @@ #include "new_game.h" #include "save.h" #include "strings.h" -#include "constants/berry.h" #include "constants/game_stat.h" #include "constants/items.h" #include "constants/rgb.h" diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 089228b17..5be149b0f 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -26,7 +26,6 @@ #include "item_menu_icons.h" #include "decompress.h" #include "international_string_util.h" -#include "constants/berry.h" #include "constants/items.h" #include "constants/rgb.h" #include "constants/songs.h" diff --git a/src/contest.c b/src/contest.c index 36c32683a..8d8bd666c 100644 --- a/src/contest.c +++ b/src/contest.c @@ -5998,7 +5998,7 @@ static u8 GetMonNicknameLanguage(u8 *nickname) u8 ret = GAME_LANGUAGE; if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN) - return LANGUAGE_ENGLISH; + return GAME_LANGUAGE; if (StringLength(nickname) < PLAYER_NAME_LENGTH - 1) { diff --git a/src/crt0.s b/src/crt0.s index cc83a04df..385e340a5 100644 --- a/src/crt0.s +++ b/src/crt0.s @@ -76,8 +76,8 @@ GPIOPortReadEnable: @ 80000C8 .4byte 0x00000008 @ offsetof(struct SaveBlock2, playerGender) .4byte 0x00000ca8 @ offsetof(struct SaveBlock2, frontier.challengeStatus) .4byte 0x00000ca8 @ offsetof(struct SaveBlock2, frontier.challengeStatus) - .4byte 0x000031c7 @ offsetof(struct SaveBlock1, ? part-way into giftRibbons) - .4byte 0x000031b3 @ offsetof(struct SaveBlock1, ? part-way into giftRibbons) + .4byte 0x000031c7 @ offsetof(struct SaveBlock1, externalEventFlags) + .4byte 0x000031b3 @ offsetof(struct SaveBlock1, externalEventData) .4byte 0x00000000 .4byte gBaseStats diff --git a/src/data/object_events/movement_type_func_tables.h b/src/data/object_events/movement_type_func_tables.h index 68dfeb730..f4890d684 100755 --- a/src/data/object_events/movement_type_func_tables.h +++ b/src/data/object_events/movement_type_func_tables.h @@ -407,8 +407,8 @@ u8 (*const gMovementTypeFuncs_CopyPlayerInGrass[])(struct ObjectEvent *, struct MovementType_CopyPlayer_Step2, }; -u8 (*const gMovementTypeFuncs_Hidden[])(struct ObjectEvent *, struct Sprite *) = { - MovementType_Hidden_Step0, +u8 (*const gMovementTypeFuncs_Buried[])(struct ObjectEvent *, struct Sprite *) = { + MovementType_Buried_Step0, }; u8 (*const gMovementTypeFuncs_WalkInPlace[])(struct ObjectEvent *, struct Sprite *) = { diff --git a/src/daycare.c b/src/daycare.c index 7ae1e72c4..14cf57806 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -170,7 +170,7 @@ static void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycar StringCopy(daycareMon->mail.OT_name, gSaveBlock2Ptr->playerName); GetMonNickname2(mon, daycareMon->mail.monName); StripExtCtrlCodes(daycareMon->mail.monName); - daycareMon->mail.gameLanguage = LANGUAGE_ENGLISH; + daycareMon->mail.gameLanguage = GAME_LANGUAGE; daycareMon->mail.monLanguage = GetMonData(mon, MON_DATA_LANGUAGE); mailId = GetMonData(mon, MON_DATA_MAIL); daycareMon->mail.message = gSaveBlock1Ptr->mail[mailId]; diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 4e050ce62..5b80bfb6c 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -297,7 +297,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings, obedience; + u8 i, friendship, language, gameMet, markings, isEventLegal; u16 moves[MAX_MON_MOVES]; u32 ivs[NUM_STATS]; @@ -320,7 +320,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) gameMet = GetMonData(egg, MON_DATA_MET_GAME); markings = GetMonData(egg, MON_DATA_MARKINGS); pokerus = GetMonData(egg, MON_DATA_POKERUS); - obedience = GetMonData(egg, MON_DATA_OBEDIENCE); + isEventLegal = GetMonData(egg, MON_DATA_EVENT_LEGAL); CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); @@ -342,7 +342,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) friendship = 120; SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); SetMonData(temp, MON_DATA_POKERUS, &pokerus); - SetMonData(temp, MON_DATA_OBEDIENCE, &obedience); + SetMonData(temp, MON_DATA_EVENT_LEGAL, &isEventLegal); *egg = *temp; } diff --git a/src/event_object_movement.c b/src/event_object_movement.c index f6e638f31..1a7d08db2 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -101,7 +101,7 @@ static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*); static void UpdateObjectEventSpritePosition(struct Sprite*); static void ApplyLevitateMovement(u8); static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *); -static bool8 MovementType_Hidden_Callback(struct ObjectEvent *, struct Sprite *); +static bool8 MovementType_Buried_Callback(struct ObjectEvent *, struct Sprite *); static void CreateReflectionEffectSprites(void); static u8 GetObjectEventIdByLocalId(u8); static u8 GetObjectEventIdByLocalIdAndMapInternal(u8, u8, u8); @@ -212,7 +212,7 @@ static void (*const sMovementTypeCallbacks[])(struct Sprite *) = [MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE_IN_GRASS] = MovementType_CopyPlayerInGrass, [MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE_IN_GRASS] = MovementType_CopyPlayerInGrass, [MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS] = MovementType_CopyPlayerInGrass, - [MOVEMENT_TYPE_HIDDEN] = MovementType_Hidden, + [MOVEMENT_TYPE_BURIED] = MovementType_Buried, [MOVEMENT_TYPE_WALK_IN_PLACE_DOWN] = MovementType_WalkInPlace, [MOVEMENT_TYPE_WALK_IN_PLACE_UP] = MovementType_WalkInPlace, [MOVEMENT_TYPE_WALK_IN_PLACE_LEFT] = MovementType_WalkInPlace, @@ -296,7 +296,7 @@ const u8 gRangedMovementTypes[] = { [MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE_IN_GRASS] = 1, [MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE_IN_GRASS] = 1, [MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS] = 1, - [MOVEMENT_TYPE_HIDDEN] = 0, + [MOVEMENT_TYPE_BURIED] = 0, [MOVEMENT_TYPE_WALK_IN_PLACE_DOWN] = 0, [MOVEMENT_TYPE_WALK_IN_PLACE_UP] = 0, [MOVEMENT_TYPE_WALK_IN_PLACE_LEFT] = 0, @@ -380,7 +380,7 @@ const u8 gInitialMovementTypeFacingDirections[] = { [MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE_IN_GRASS] = DIR_SOUTH, [MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE_IN_GRASS] = DIR_WEST, [MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS] = DIR_EAST, - [MOVEMENT_TYPE_HIDDEN] = DIR_SOUTH, + [MOVEMENT_TYPE_BURIED] = DIR_SOUTH, [MOVEMENT_TYPE_WALK_IN_PLACE_DOWN] = DIR_SOUTH, [MOVEMENT_TYPE_WALK_IN_PLACE_UP] = DIR_NORTH, [MOVEMENT_TYPE_WALK_IN_PLACE_LEFT] = DIR_WEST, @@ -4467,7 +4467,7 @@ void MovementType_MountainDisguise(struct Sprite *sprite) UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, MovementType_Disguise_Callback); } -void MovementType_Hidden(struct Sprite *sprite) +void MovementType_Buried(struct Sprite *sprite) { if (!sprite->data[7]) { @@ -4476,15 +4476,15 @@ void MovementType_Hidden(struct Sprite *sprite) sprite->oam.priority = 3; sprite->data[7]++; } - UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, MovementType_Hidden_Callback); + UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, MovementType_Buried_Callback); } -static bool8 MovementType_Hidden_Callback(struct ObjectEvent *objectEvent, struct Sprite *sprite) +static bool8 MovementType_Buried_Callback(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - return gMovementTypeFuncs_Hidden[sprite->data[1]](objectEvent, sprite); + return gMovementTypeFuncs_Buried[sprite->data[1]](objectEvent, sprite); } -bool8 MovementType_Hidden_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +bool8 MovementType_Buried_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { ClearObjectEventMovement(objectEvent, sprite); return FALSE; @@ -6600,9 +6600,9 @@ bool8 MovementAction_EmoteHeart_Step0(struct ObjectEvent *objectEvent, struct Sp bool8 MovementAction_RevealTrainer_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - if (objectEvent->movementType == MOVEMENT_TYPE_HIDDEN) + if (objectEvent->movementType == MOVEMENT_TYPE_BURIED) { - SetHiddenTrainerMovement(objectEvent); + SetBuriedTrainerMovement(objectEvent); return FALSE; } if (objectEvent->movementType != MOVEMENT_TYPE_TREE_DISGUISE && objectEvent->movementType != MOVEMENT_TYPE_MOUNTAIN_DISGUISE) diff --git a/src/evolution_scene.c b/src/evolution_scene.c index b0e3067b1..6f5a4dce7 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -561,7 +561,7 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + CONTEST_CATEGORIES_COUNT; i++) SetMonData(&gPlayerParty[gPlayerPartyCount], i, (&data)); - for (i = MON_DATA_CHAMPION_RIBBON; i <= MON_DATA_FATEFUL_ENCOUNTER; i++) + for (i = MON_DATA_CHAMPION_RIBBON; i <= MON_DATA_FILLER; i++) SetMonData(&gPlayerParty[gPlayerPartyCount], i, (&data)); SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_STATUS, (&data)); diff --git a/src/field_effect.c b/src/field_effect.c index b1837c514..467a0f656 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -967,8 +967,8 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) curBlue -= ((curBlue * b) >> 4); color = curRed; - color |= curGreen << 5; - color |= curBlue << 10; + color |= (curGreen << 5); + color |= (curBlue << 10); gPlttBufferFaded[i] = color; } diff --git a/src/field_weather.c b/src/field_weather.c index 25ee0582a..02e3a0cb0 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -494,7 +494,7 @@ static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex) r = gammaTable[baseColor.r]; g = gammaTable[baseColor.g]; b = gammaTable[baseColor.b]; - gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r; + gPlttBufferFaded[palOffset++] = RGB2(r, g, b); } } @@ -579,7 +579,7 @@ static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaI r += ((rBlend - r) * blendCoeff) >> 4; g += ((gBlend - g) * blendCoeff) >> 4; b += ((bBlend - b) * blendCoeff) >> 4; - gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r; + gPlttBufferFaded[palOffset++] = RGB2(r, g, b); } } @@ -636,7 +636,7 @@ static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 bl g2 += ((gBlend - g2) * blendCoeff) >> 4; b2 += ((bBlend - b2) * blendCoeff) >> 4; - gPlttBufferFaded[palOffset++] = (b2 << 10) | (g2 << 5) | r2; + gPlttBufferFaded[palOffset++] = RGB2(r2, g2, b2); } } } @@ -678,7 +678,7 @@ static void ApplyFogBlend(u8 blendCoeff, u16 blendColor) g += ((gBlend - g) * blendCoeff) >> 4; b += ((bBlend - b) * blendCoeff) >> 4; - gPlttBufferFaded[palOffset] = (b << 10) | (g << 5) | r; + gPlttBufferFaded[palOffset] = RGB2(r, g, b); palOffset++; } } diff --git a/src/international_string_util.c b/src/international_string_util.c index 23ca6c081..c2b4b43cf 100644 --- a/src/international_string_util.c +++ b/src/international_string_util.c @@ -214,7 +214,7 @@ int sub_81DB604(u8 *str) if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN) return LANGUAGE_JAPANESE; else - return LANGUAGE_ENGLISH; + return GAME_LANGUAGE; } void sub_81DB620(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows) diff --git a/src/mail.c b/src/mail.c index 71e98b42a..09d5bfc44 100644 --- a/src/mail.c +++ b/src/mail.c @@ -248,7 +248,7 @@ void ReadMail(struct MailStruct *mail, void (*callback)(void), bool8 flag) u16 species; sMailRead = calloc(1, sizeof(*sMailRead)); - sMailRead->language = LANGUAGE_ENGLISH; + sMailRead->language = GAME_LANGUAGE; sMailRead->playerIsSender = TRUE; sMailRead->parserSingle = CopyEasyChatWord; sMailRead->parserMultiple = ConvertEasyChatWordsToString; diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 7de963893..74e3455c3 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -23,7 +23,6 @@ #include "text_window.h" #include "trig.h" #include "window.h" -#include "constants/berry.h" #include "constants/songs.h" #include "gba/io_reg.h" diff --git a/src/party_menu.c b/src/party_menu.c index 096f87dd2..b2fd358ca 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3520,9 +3520,9 @@ static void CursorCb_Register(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); + u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); - switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), species2, species, obedience)) + switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), species2, species, isEventLegal)) { case CANT_REGISTER_MON: StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); @@ -3547,8 +3547,8 @@ static void CursorCb_Trade1(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); - u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience); + u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); + u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); if (stringId != UR_TRADE_MSG_NONE) { diff --git a/src/pokeblock.c b/src/pokeblock.c index 0bfb10632..4485fe1ef 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -29,7 +29,6 @@ #include "task.h" #include "text.h" #include "text_window.h" -#include "constants/berry.h" #include "constants/items.h" #include "constants/songs.h" #include "constants/rgb.h" diff --git a/src/pokemon.c b/src/pokemon.c index d890a3a6c..5812e987a 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2615,12 +2615,12 @@ void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerP GetMonData(mon, MON_DATA_NICKNAME, dest->nickname); } -void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) +void CreateEventLegalMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) { - bool32 obedient = TRUE; + bool32 isEventLegal = TRUE; CreateMon(mon, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); - SetMonData(mon, MON_DATA_OBEDIENCE, &obedient); + SetMonData(mon, MON_DATA_EVENT_LEGAL, &isEventLegal); } // If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form @@ -2755,14 +2755,14 @@ u16 GetUnionRoomTrainerClass(void) return gFacilityClassToTrainerClass[gLinkPlayerFacilityClasses[arrId]]; } -void CreateObedientEnemyMon(void) +void CreateEventLegalEnemyMon(void) { s32 species = gSpecialVar_0x8004; s32 level = gSpecialVar_0x8005; s32 itemId = gSpecialVar_0x8006; ZeroEnemyPartyMons(); - CreateObedientMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, 0, 0, 0, 0); + CreateEventLegalMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, 0, 0, 0, 0); if (itemId) { u8 heldItem[2]; @@ -3907,32 +3907,32 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_EFFORT_RIBBON: retVal = substruct3->effortRibbon; break; - case MON_DATA_GIFT_RIBBON_1: - retVal = substruct3->giftRibbon1; + case MON_DATA_MARINE_RIBBON: + retVal = substruct3->marineRibbon; break; - case MON_DATA_GIFT_RIBBON_2: - retVal = substruct3->giftRibbon2; + case MON_DATA_LAND_RIBBON: + retVal = substruct3->landRibbon; break; - case MON_DATA_GIFT_RIBBON_3: - retVal = substruct3->giftRibbon3; + case MON_DATA_SKY_RIBBON: + retVal = substruct3->skyRibbon; break; - case MON_DATA_GIFT_RIBBON_4: - retVal = substruct3->giftRibbon4; + case MON_DATA_COUNTRY_RIBBON: + retVal = substruct3->countryRibbon; break; - case MON_DATA_GIFT_RIBBON_5: - retVal = substruct3->giftRibbon5; + case MON_DATA_NATIONAL_RIBBON: + retVal = substruct3->nationalRibbon; break; - case MON_DATA_GIFT_RIBBON_6: - retVal = substruct3->giftRibbon6; + case MON_DATA_EARTH_RIBBON: + retVal = substruct3->earthRibbon; break; - case MON_DATA_GIFT_RIBBON_7: - retVal = substruct3->giftRibbon7; + case MON_DATA_WORLD_RIBBON: + retVal = substruct3->worldRibbon; break; - case MON_DATA_FATEFUL_ENCOUNTER: - retVal = substruct3->fatefulEncounter; + case MON_DATA_FILLER: + retVal = substruct3->filler; break; - case MON_DATA_OBEDIENCE: - retVal = substruct3->obedient; + case MON_DATA_EVENT_LEGAL: + retVal = substruct3->eventLegal; break; case MON_DATA_SPECIES2: retVal = substruct0->species; @@ -3974,13 +3974,13 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) retVal += substruct3->victoryRibbon; retVal += substruct3->artistRibbon; retVal += substruct3->effortRibbon; - retVal += substruct3->giftRibbon1; - retVal += substruct3->giftRibbon2; - retVal += substruct3->giftRibbon3; - retVal += substruct3->giftRibbon4; - retVal += substruct3->giftRibbon5; - retVal += substruct3->giftRibbon6; - retVal += substruct3->giftRibbon7; + retVal += substruct3->marineRibbon; + retVal += substruct3->landRibbon; + retVal += substruct3->skyRibbon; + retVal += substruct3->countryRibbon; + retVal += substruct3->nationalRibbon; + retVal += substruct3->earthRibbon; + retVal += substruct3->worldRibbon; } break; case MON_DATA_RIBBONS: @@ -3997,13 +3997,13 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) | (substruct3->victoryRibbon << 17) | (substruct3->artistRibbon << 18) | (substruct3->effortRibbon << 19) - | (substruct3->giftRibbon1 << 20) - | (substruct3->giftRibbon2 << 21) - | (substruct3->giftRibbon3 << 22) - | (substruct3->giftRibbon4 << 23) - | (substruct3->giftRibbon5 << 24) - | (substruct3->giftRibbon6 << 25) - | (substruct3->giftRibbon7 << 26); + | (substruct3->marineRibbon << 20) + | (substruct3->landRibbon << 21) + | (substruct3->skyRibbon << 22) + | (substruct3->countryRibbon << 23) + | (substruct3->nationalRibbon << 24) + | (substruct3->earthRibbon << 25) + | (substruct3->worldRibbon << 26); } break; default: @@ -4286,32 +4286,32 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_EFFORT_RIBBON: SET8(substruct3->effortRibbon); break; - case MON_DATA_GIFT_RIBBON_1: - SET8(substruct3->giftRibbon1); + case MON_DATA_MARINE_RIBBON: + SET8(substruct3->marineRibbon); break; - case MON_DATA_GIFT_RIBBON_2: - SET8(substruct3->giftRibbon2); + case MON_DATA_LAND_RIBBON: + SET8(substruct3->landRibbon); break; - case MON_DATA_GIFT_RIBBON_3: - SET8(substruct3->giftRibbon3); + case MON_DATA_SKY_RIBBON: + SET8(substruct3->skyRibbon); break; - case MON_DATA_GIFT_RIBBON_4: - SET8(substruct3->giftRibbon4); + case MON_DATA_COUNTRY_RIBBON: + SET8(substruct3->countryRibbon); break; - case MON_DATA_GIFT_RIBBON_5: - SET8(substruct3->giftRibbon5); + case MON_DATA_NATIONAL_RIBBON: + SET8(substruct3->nationalRibbon); break; - case MON_DATA_GIFT_RIBBON_6: - SET8(substruct3->giftRibbon6); + case MON_DATA_EARTH_RIBBON: + SET8(substruct3->earthRibbon); break; - case MON_DATA_GIFT_RIBBON_7: - SET8(substruct3->giftRibbon7); + case MON_DATA_WORLD_RIBBON: + SET8(substruct3->worldRibbon); break; - case MON_DATA_FATEFUL_ENCOUNTER: - SET8(substruct3->fatefulEncounter); + case MON_DATA_FILLER: + SET8(substruct3->filler); break; - case MON_DATA_OBEDIENCE: - SET8(substruct3->obedient); + case MON_DATA_EVENT_LEGAL: + SET8(substruct3->eventLegal); break; case MON_DATA_IVS: { diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c index f8b361912..5b80fd428 100644 --- a/src/pokemon_size_record.c +++ b/src/pokemon_size_record.c @@ -38,9 +38,9 @@ static const struct UnknownStruct sBigMonSizeTable[] = static const u8 sGiftRibbonsMonDataIds[] = { - MON_DATA_GIFT_RIBBON_1, MON_DATA_GIFT_RIBBON_2, MON_DATA_GIFT_RIBBON_3, - MON_DATA_GIFT_RIBBON_4, MON_DATA_GIFT_RIBBON_5, MON_DATA_GIFT_RIBBON_6, - MON_DATA_GIFT_RIBBON_7 + MON_DATA_MARINE_RIBBON, MON_DATA_LAND_RIBBON, MON_DATA_SKY_RIBBON, + MON_DATA_COUNTRY_RIBBON, MON_DATA_NATIONAL_RIBBON, MON_DATA_EARTH_RIBBON, + MON_DATA_WORLD_RIBBON }; extern const u8 gText_DecimalPoint[]; diff --git a/src/scrcmd.c b/src/scrcmd.c index f599a0004..7caaa194b 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2207,21 +2207,21 @@ bool8 ScrCmd_lockfortrainer(struct ScriptContext *ctx) } } -// This command will force the Pokémon to be obedient, you don't get to make it disobedient. -bool8 ScrCmd_setmonobedient(struct ScriptContext *ctx) +// This command will set a Pokémon's eventLegal bit; there is no similar command to clear it. +bool8 ScrCmd_setmoneventlegal(struct ScriptContext *ctx) { - bool8 obedient = TRUE; + bool8 isEventLegal = TRUE; u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - SetMonData(&gPlayerParty[partyIndex], MON_DATA_OBEDIENCE, &obedient); + SetMonData(&gPlayerParty[partyIndex], MON_DATA_EVENT_LEGAL, &isEventLegal); return FALSE; } -bool8 ScrCmd_checkmonobedience(struct ScriptContext *ctx) +bool8 ScrCmd_checkmoneventlegal(struct ScriptContext *ctx) { u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OBEDIENCE, NULL); + gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EVENT_LEGAL, NULL); return FALSE; } diff --git a/src/secret_base.c b/src/secret_base.c index d49eef277..ddc051dca 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -49,6 +49,13 @@ #include "constants/trainers.h" #include "constants/tv.h" +// Values for registryStatus +enum { + UNREGISTERED, + REGISTERED, + NEW, // Temporary, so new secret bases mixed at the same time don't overwrite each other +}; + struct SecretBaseRegistryMenu { struct ListMenuItem items[11]; @@ -72,21 +79,21 @@ static EWRAM_DATA u8 sCurSecretBaseId = 0; static EWRAM_DATA bool8 sInFriendSecretBase = FALSE; static EWRAM_DATA struct SecretBaseRegistryMenu *sRegistryMenu = NULL; -static void Task_ShowSecretBaseRegistryMenu(u8 taskId); -static void BuildRegistryMenuItems(u8 taskId); -static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *menu); -static void FinalizeRegistryMenu(u8 taskId); -static void AddRegistryMenuScrollArrows(u8 taskId); -static void HandleRegistryMenuInput(u8 taskId); -static void ShowRegistryMenuActions(u8 taskId); -static void HandleRegistryMenuActionsInput(u8 taskId); -static void ShowRegistryMenuDeleteConfirmation(u8 taskId); -static void ShowRegistryMenuDeleteYesNo(u8 taskId); -static void DeleteRegistry_Yes(u8 taskId); -static void DeleteRegistry_No(u8 taskId); -static void ReturnToMainRegistryMenu(u8 taskId); -static void GoToSecretBasePCRegisterMenu(u8 taskId); -static u8 GetSecretBaseOwnerType(u8 secretBaseId); +static void Task_ShowSecretBaseRegistryMenu(u8); +static void BuildRegistryMenuItems(u8); +static void RegistryMenu_OnCursorMove(s32, bool8, struct ListMenu *); +static void FinalizeRegistryMenu(u8); +static void AddRegistryMenuScrollArrows(u8); +static void HandleRegistryMenuInput(u8); +static void ShowRegistryMenuActions(u8); +static void HandleRegistryMenuActionsInput(u8); +static void ShowRegistryMenuDeleteConfirmation(u8); +static void ShowRegistryMenuDeleteYesNo(u8); +static void DeleteRegistry_Yes(u8); +static void DeleteRegistry_No(u8); +static void ReturnToMainRegistryMenu(u8); +static void GoToSecretBasePCRegisterMenu(u8); +static u8 GetSecretBaseOwnerType(u8); static const struct SecretBaseEntranceMetatiles sSecretBaseEntranceMetatiles[] = { @@ -101,34 +108,39 @@ static const struct SecretBaseEntranceMetatiles sSecretBaseEntranceMetatiles[] = // mapNum, warpId, x, y // x, y positions are for when the player warps in for the first time (in front of the computer) -static const u8 sSecretBaseEntrancePositions[] = -{ - MAP_NUM(SECRET_BASE_RED_CAVE1), 0, 1, 3, - MAP_NUM(SECRET_BASE_RED_CAVE2), 0, 5, 9, - MAP_NUM(SECRET_BASE_RED_CAVE3), 0, 1, 3, - MAP_NUM(SECRET_BASE_RED_CAVE4), 0, 7, 13, - MAP_NUM(SECRET_BASE_BROWN_CAVE1), 0, 2, 3, - MAP_NUM(SECRET_BASE_BROWN_CAVE2), 0, 9, 2, - MAP_NUM(SECRET_BASE_BROWN_CAVE3), 0, 13, 4, - MAP_NUM(SECRET_BASE_BROWN_CAVE4), 0, 1, 2, - MAP_NUM(SECRET_BASE_BLUE_CAVE1), 0, 1, 3, - MAP_NUM(SECRET_BASE_BLUE_CAVE2), 0, 1, 2, - MAP_NUM(SECRET_BASE_BLUE_CAVE3), 0, 3, 15, - MAP_NUM(SECRET_BASE_BLUE_CAVE4), 0, 3, 14, - MAP_NUM(SECRET_BASE_YELLOW_CAVE1), 0, 9, 3, - MAP_NUM(SECRET_BASE_YELLOW_CAVE2), 0, 8, 7, - MAP_NUM(SECRET_BASE_YELLOW_CAVE3), 0, 3, 6, - MAP_NUM(SECRET_BASE_YELLOW_CAVE4), 0, 5, 9, - MAP_NUM(SECRET_BASE_TREE1), 0, 2, 3, - MAP_NUM(SECRET_BASE_TREE2), 0, 5, 6, - MAP_NUM(SECRET_BASE_TREE3), 0, 15, 3, - MAP_NUM(SECRET_BASE_TREE4), 0, 4, 10, - MAP_NUM(SECRET_BASE_SHRUB1), 0, 3, 3, - MAP_NUM(SECRET_BASE_SHRUB2), 0, 1, 2, - MAP_NUM(SECRET_BASE_SHRUB3), 0, 7, 8, - MAP_NUM(SECRET_BASE_SHRUB4), 0, 9, 6, +static const u8 sSecretBaseEntrancePositions[NUM_SECRET_BASE_GROUPS * 4] = +{ + [SECRET_BASE_RED_CAVE1] = MAP_NUM(SECRET_BASE_RED_CAVE1), 0, 1, 3, + [SECRET_BASE_RED_CAVE2] = MAP_NUM(SECRET_BASE_RED_CAVE2), 0, 5, 9, + [SECRET_BASE_RED_CAVE3] = MAP_NUM(SECRET_BASE_RED_CAVE3), 0, 1, 3, + [SECRET_BASE_RED_CAVE4] = MAP_NUM(SECRET_BASE_RED_CAVE4), 0, 7, 13, + [SECRET_BASE_BROWN_CAVE1] = MAP_NUM(SECRET_BASE_BROWN_CAVE1), 0, 2, 3, + [SECRET_BASE_BROWN_CAVE2] = MAP_NUM(SECRET_BASE_BROWN_CAVE2), 0, 9, 2, + [SECRET_BASE_BROWN_CAVE3] = MAP_NUM(SECRET_BASE_BROWN_CAVE3), 0, 13, 4, + [SECRET_BASE_BROWN_CAVE4] = MAP_NUM(SECRET_BASE_BROWN_CAVE4), 0, 1, 2, + [SECRET_BASE_BLUE_CAVE1] = MAP_NUM(SECRET_BASE_BLUE_CAVE1), 0, 1, 3, + [SECRET_BASE_BLUE_CAVE2] = MAP_NUM(SECRET_BASE_BLUE_CAVE2), 0, 1, 2, + [SECRET_BASE_BLUE_CAVE3] = MAP_NUM(SECRET_BASE_BLUE_CAVE3), 0, 3, 15, + [SECRET_BASE_BLUE_CAVE4] = MAP_NUM(SECRET_BASE_BLUE_CAVE4), 0, 3, 14, + [SECRET_BASE_YELLOW_CAVE1] = MAP_NUM(SECRET_BASE_YELLOW_CAVE1), 0, 9, 3, + [SECRET_BASE_YELLOW_CAVE2] = MAP_NUM(SECRET_BASE_YELLOW_CAVE2), 0, 8, 7, + [SECRET_BASE_YELLOW_CAVE3] = MAP_NUM(SECRET_BASE_YELLOW_CAVE3), 0, 3, 6, + [SECRET_BASE_YELLOW_CAVE4] = MAP_NUM(SECRET_BASE_YELLOW_CAVE4), 0, 5, 9, + [SECRET_BASE_TREE1] = MAP_NUM(SECRET_BASE_TREE1), 0, 2, 3, + [SECRET_BASE_TREE2] = MAP_NUM(SECRET_BASE_TREE2), 0, 5, 6, + [SECRET_BASE_TREE3] = MAP_NUM(SECRET_BASE_TREE3), 0, 15, 3, + [SECRET_BASE_TREE4] = MAP_NUM(SECRET_BASE_TREE4), 0, 4, 10, + [SECRET_BASE_SHRUB1] = MAP_NUM(SECRET_BASE_SHRUB1), 0, 3, 3, + [SECRET_BASE_SHRUB2] = MAP_NUM(SECRET_BASE_SHRUB2), 0, 1, 2, + [SECRET_BASE_SHRUB3] = MAP_NUM(SECRET_BASE_SHRUB3), 0, 7, 8, + [SECRET_BASE_SHRUB4] = MAP_NUM(SECRET_BASE_SHRUB4), 0, 9, 6, }; +#define GET_BASE_MAP_NUM(group) (sSecretBaseEntrancePositions[(group) + 0]) +#define GET_BASE_WARP_ID(group) (sSecretBaseEntrancePositions[(group) + 1]) +#define GET_BASE_COMPUTER_X(group) (sSecretBaseEntrancePositions[(group) + 2]) +#define GET_BASE_COMPUTER_Y(group) (sSecretBaseEntrancePositions[(group) + 3]) + static const struct MenuAction sRegistryMenuActions[] = { { @@ -314,6 +326,8 @@ void ToggleSecretBaseEntranceMetatile(void) GetXYCoordsOneStepInFrontOfPlayer(&x, &y); metatileId = MapGridGetMetatileIdAt(x, y); + + // Look for entrance metatiles to open for (i = 0; i < ARRAY_COUNT(sSecretBaseEntranceMetatiles); i++) { if (sSecretBaseEntranceMetatiles[i].closedMetatileId == metatileId) @@ -324,6 +338,7 @@ void ToggleSecretBaseEntranceMetatile(void) } } + // Look for entrance metatiles to close for (i = 0; i < ARRAY_COUNT(sSecretBaseEntranceMetatiles); i++) { if (sSecretBaseEntranceMetatiles[i].openMetatileId == metatileId) @@ -362,6 +377,7 @@ void SetPlayerSecretBase(void) VarSet(VAR_SECRET_BASE_MAP, gMapHeader.regionMapSectionId); } +// Set the 'open' entrance metatile for any occupied secret base on this map void SetOccupiedSecretBaseEntranceMetatiles(struct MapEvents const *events) { u16 bgId; @@ -395,24 +411,26 @@ void SetOccupiedSecretBaseEntranceMetatiles(struct MapEvents const *events) static void SetSecretBaseWarpDestination(void) { - s8 offset = (sCurSecretBaseId / 10) * 4; - SetWarpDestinationToMapWarp(MAP_GROUP(SECRET_BASE_RED_CAVE1), sSecretBaseEntrancePositions[offset], sSecretBaseEntrancePositions[offset + 1]); + s8 secretBaseGroup = SECRET_BASE_ID_TO_GROUP(sCurSecretBaseId); + SetWarpDestinationToMapWarp(MAP_GROUP(SECRET_BASE_RED_CAVE1), GET_BASE_MAP_NUM(secretBaseGroup), GET_BASE_WARP_ID(secretBaseGroup)); } +#define tState data[0] + static void Task_EnterSecretBase(u8 taskId) { - u16 secretBaseId; + u16 secretBaseIdx; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (!gPaletteFade.active) - gTasks[taskId].data[0] = 1; + gTasks[taskId].tState = 1; break; case 1: - secretBaseId = VarGet(VAR_CURRENT_SECRET_BASE); - if (gSaveBlock1Ptr->secretBases[secretBaseId].numTimesEntered < 255) - gSaveBlock1Ptr->secretBases[secretBaseId].numTimesEntered++; + secretBaseIdx = VarGet(VAR_CURRENT_SECRET_BASE); + if (gSaveBlock1Ptr->secretBases[secretBaseIdx].numTimesEntered < 255) + gSaveBlock1Ptr->secretBases[secretBaseIdx].numTimesEntered++; SetSecretBaseWarpDestination(); WarpIntoMap(); @@ -423,6 +441,8 @@ static void Task_EnterSecretBase(u8 taskId) } } +#undef tState + void EnterSecretBase(void) { CreateTask(Task_EnterSecretBase, 0); @@ -467,13 +487,13 @@ static void Task_EnterNewlyCreatedSecretBase(u8 taskId) { if (!gPaletteFade.active) { - s8 offset = sCurSecretBaseId / 10 * 4; + s8 secretBaseGroup = SECRET_BASE_ID_TO_GROUP(sCurSecretBaseId); SetWarpDestination( gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, - sSecretBaseEntrancePositions[offset + 2], - sSecretBaseEntrancePositions[offset + 3]); + GET_BASE_COMPUTER_X(secretBaseGroup), + GET_BASE_COMPUTER_Y(secretBaseGroup)); WarpIntoMap(); gFieldCallback = EnterNewlyCreatedSecretBase_StartFadeIn; SetMainCallback2(CB2_LoadMap); @@ -498,23 +518,23 @@ bool8 CurMapIsSecretBase(void) void InitSecretBaseAppearance(bool8 hidePC) { - u16 secretBaseId; + u16 secretBaseIdx; u16 x, y; u8 *decorations; u8 *decorPos; if (CurMapIsSecretBase()) { - secretBaseId = VarGet(VAR_CURRENT_SECRET_BASE); - decorations = gSaveBlock1Ptr->secretBases[secretBaseId].decorations; - decorPos = gSaveBlock1Ptr->secretBases[secretBaseId].decorationPositions; + secretBaseIdx = VarGet(VAR_CURRENT_SECRET_BASE); + decorations = gSaveBlock1Ptr->secretBases[secretBaseIdx].decorations; + decorPos = gSaveBlock1Ptr->secretBases[secretBaseIdx].decorationPositions; for (x = 0; x < DECOR_MAX_SECRET_BASE; x++) { if (decorations[x] > 0 && decorations[x] <= NUM_DECORATIONS && gDecorations[decorations[x]].permission != DECORPERM_SPRITE) ShowDecorationOnMap((decorPos[x] >> 4) + 7, (decorPos[x] & 0xF) + 7, decorations[x]); } - if (secretBaseId != 0) + if (secretBaseIdx != 0) { // Another player's secret base. Change PC type to the "Register" PC. FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC); @@ -549,9 +569,9 @@ void InitSecretBaseDecorationSprites(void) } else { - u16 secretBaseId = VarGet(VAR_CURRENT_SECRET_BASE); - decorations = gSaveBlock1Ptr->secretBases[secretBaseId].decorations; - decorationPositions = gSaveBlock1Ptr->secretBases[secretBaseId].decorationPositions; + u16 secretBaseIdx = VarGet(VAR_CURRENT_SECRET_BASE); + decorations = gSaveBlock1Ptr->secretBases[secretBaseIdx].decorations; + decorationPositions = gSaveBlock1Ptr->secretBases[secretBaseIdx].decorationPositions; numDecorations = DECOR_MAX_SECRET_BASE; } @@ -703,10 +723,10 @@ void IsCurSecretBaseOwnedByAnotherPlayer(void) gSpecialVar_Result = FALSE; } -static u8 *GetSecretBaseName(u8 *dest, u8 secretBaseId) +static u8 *GetSecretBaseName(u8 *dest, u8 secretBaseIdx) { - *StringCopyN(dest, gSaveBlock1Ptr->secretBases[secretBaseId].trainerName, GetNameLength(gSaveBlock1Ptr->secretBases[secretBaseId].trainerName)) = EOS; - ConvertInternationalString(dest, gSaveBlock1Ptr->secretBases[secretBaseId].language); + *StringCopyN(dest, gSaveBlock1Ptr->secretBases[secretBaseIdx].trainerName, GetNameLength(gSaveBlock1Ptr->secretBases[secretBaseIdx].trainerName)) = EOS; + ConvertInternationalString(dest, gSaveBlock1Ptr->secretBases[secretBaseIdx].language); return StringAppend(dest, gText_ApostropheSBase); } @@ -717,18 +737,18 @@ u8 *GetSecretBaseMapName(u8 *dest) void CopyCurSecretBaseOwnerName_StrVar1(void) { - u8 secretBaseId; + u8 secretBaseIdx; const u8 *name; - secretBaseId = VarGet(VAR_CURRENT_SECRET_BASE); - name = gSaveBlock1Ptr->secretBases[secretBaseId].trainerName; + secretBaseIdx = VarGet(VAR_CURRENT_SECRET_BASE); + name = gSaveBlock1Ptr->secretBases[secretBaseIdx].trainerName; *StringCopyN(gStringVar1, name, GetNameLength(name)) = EOS; - ConvertInternationalString(gStringVar1, gSaveBlock1Ptr->secretBases[secretBaseId].language); + ConvertInternationalString(gStringVar1, gSaveBlock1Ptr->secretBases[secretBaseIdx].language); } -static bool8 IsSecretBaseRegistered(u8 secretBaseId) +static bool8 IsSecretBaseRegistered(u8 secretBaseIdx) { - if (gSaveBlock1Ptr->secretBases[secretBaseId].registryStatus) + if (gSaveBlock1Ptr->secretBases[secretBaseIdx].registryStatus) return TRUE; return FALSE; @@ -812,7 +832,7 @@ static void ClosePlayerSecretBaseEntrance(void) && gSaveBlock1Ptr->secretBases[0].secretBaseId == events->bgEvents[i].bgUnion.secretBaseId) { metatileId = MapGridGetMetatileIdAt(events->bgEvents[i].x + 7, events->bgEvents[i].y + 7); - for (j = 0; j < 7; j++) + for (j = 0; j < ARRAY_COUNT(sSecretBaseEntranceMetatiles); j++) { if (sSecretBaseEntranceMetatiles[j].openMetatileId == metatileId) { @@ -879,18 +899,28 @@ void ShowSecretBaseRegistryMenu(void) CreateTask(Task_ShowSecretBaseRegistryMenu, 0); } +#define tNumBases data[0] +#define tSelectedRow data[1] +#define tScrollOffset data[2] +#define tMaxShownItems data[3] +#define tSelectedBaseId data[4] +#define tListTaskId data[5] +#define tMainWindowId data[6] +#define tActionWindowId data[7] +#define tArrowTaskId data[8] + static void Task_ShowSecretBaseRegistryMenu(u8 taskId) { s16 *data = gTasks[taskId].data; ScriptContext2_Enable(); - data[0] = GetNumRegisteredSecretBases(); - if (data[0] != 0) + tNumBases = GetNumRegisteredSecretBases(); + if (tNumBases != 0) { - data[1] = 0; - data[2] = 0; + tSelectedRow = 0; + tScrollOffset = 0; ClearDialogWindowAndFrame(0, 0); sRegistryMenu = calloc(1, sizeof(*sRegistryMenu)); - data[6] = AddWindow(&sRegistryWindowTemplates[0]); + tMainWindowId = AddWindow(&sRegistryWindowTemplates[0]); BuildRegistryMenuItems(taskId); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; @@ -922,17 +952,17 @@ static void BuildRegistryMenuItems(u8 taskId) sRegistryMenu->items[count].name = gText_Cancel; sRegistryMenu->items[count].id = -2; - data[0] = count + 1; - if (data[0] < 8) - data[3] = data[0]; + tNumBases = count + 1; + if (tNumBases < 8) + tMaxShownItems = tNumBases; else - data[3] = 8; + tMaxShownItems = 8; gMultiuseListMenuTemplate = sRegistryListMenuTemplate; - gMultiuseListMenuTemplate.windowId = data[6]; - gMultiuseListMenuTemplate.totalItems = data[0]; + gMultiuseListMenuTemplate.windowId = tMainWindowId; + gMultiuseListMenuTemplate.totalItems = tNumBases; gMultiuseListMenuTemplate.items = sRegistryMenu->items; - gMultiuseListMenuTemplate.maxShowed = data[3]; + gMultiuseListMenuTemplate.maxShowed = tMaxShownItems; } static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *menu) @@ -944,8 +974,8 @@ static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *m static void FinalizeRegistryMenu(u8 taskId) { s16 *data = gTasks[taskId].data; - SetStandardWindowBorderStyle(data[6], 0); - data[5] = ListMenuInit(&gMultiuseListMenuTemplate, data[2], data[1]); + SetStandardWindowBorderStyle(tMainWindowId, 0); + tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, tScrollOffset, tSelectedRow); AddRegistryMenuScrollArrows(taskId); ScheduleBgCopyTilemapToVram(0); } @@ -953,35 +983,33 @@ static void FinalizeRegistryMenu(u8 taskId) static void AddRegistryMenuScrollArrows(u8 taskId) { s16 *data = gTasks[taskId].data; - data[8] = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0xbc, 0x0c, 0x94, data[0] - data[3], 0x13f8, 0x13f8, &data[2]); + tArrowTaskId = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 188, 12, 148, tNumBases - tMaxShownItems, 0x13f8, 0x13f8, &tScrollOffset); } static void HandleRegistryMenuInput(u8 taskId) { - s16 *data; - s32 input; + s16 *data = gTasks[taskId].data; + s32 input = ListMenu_ProcessInput(tListTaskId); + ListMenuGetScrollAndRow(tListTaskId, &tScrollOffset, &tSelectedRow); - data = gTasks[taskId].data; - input = ListMenu_ProcessInput(data[5]); - ListMenuGetScrollAndRow(data[5], &data[2], &data[1]); switch (input) { case LIST_NOTHING_CHOSEN: break; case LIST_CANCEL: PlaySE(SE_SELECT); - DestroyListMenuTask(data[5], NULL, NULL); - RemoveScrollIndicatorArrowPair(data[8]); - ClearStdWindowAndFrame(data[6], 0); - ClearWindowTilemap(data[6]); - RemoveWindow(data[6]); + DestroyListMenuTask(tListTaskId, NULL, NULL); + RemoveScrollIndicatorArrowPair(tArrowTaskId); + ClearStdWindowAndFrame(tMainWindowId, 0); + ClearWindowTilemap(tMainWindowId); + RemoveWindow(tMainWindowId); ScheduleBgCopyTilemapToVram(0); free(sRegistryMenu); GoToSecretBasePCRegisterMenu(taskId); break; default: PlaySE(SE_SELECT); - data[4] = input; + tSelectedBaseId = input; ShowRegistryMenuActions(taskId); break; } @@ -991,13 +1019,13 @@ static void ShowRegistryMenuActions(u8 taskId) { struct WindowTemplate template; s16 *data = gTasks[taskId].data; - RemoveScrollIndicatorArrowPair(data[8]); + RemoveScrollIndicatorArrowPair(tArrowTaskId); template = sRegistryWindowTemplates[1]; template.width = GetMaxWidthInMenuTable(sRegistryMenuActions, 2); - data[7] = AddWindow(&template); - SetStandardWindowBorderStyle(data[7], 0); - PrintMenuTable(data[7], ARRAY_COUNT(sRegistryMenuActions), sRegistryMenuActions); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[7], 2, 0); + tActionWindowId = AddWindow(&template); + SetStandardWindowBorderStyle(tActionWindowId, 0); + PrintMenuTable(tActionWindowId, ARRAY_COUNT(sRegistryMenuActions), sRegistryMenuActions); + InitMenuInUpperLeftCornerPlaySoundWhenAPressed(tActionWindowId, 2, 0); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].func = HandleRegistryMenuActionsInput; } @@ -1023,13 +1051,13 @@ static void HandleRegistryMenuActionsInput(u8 taskId) static void ShowRegistryMenuDeleteConfirmation(u8 taskId) { s16 *data = gTasks[taskId].data; - ClearStdWindowAndFrame(data[6], FALSE); - ClearStdWindowAndFrame(data[7], FALSE); - ClearWindowTilemap(data[6]); - ClearWindowTilemap(data[7]); - RemoveWindow(data[7]); + ClearStdWindowAndFrame(tMainWindowId, FALSE); + ClearStdWindowAndFrame(tActionWindowId, FALSE); + ClearWindowTilemap(tMainWindowId); + ClearWindowTilemap(tActionWindowId); + RemoveWindow(tActionWindowId); ScheduleBgCopyTilemapToVram(0); - GetSecretBaseName(gStringVar1, data[4]); + GetSecretBaseName(gStringVar1, tSelectedBaseId); StringExpandPlaceholders(gStringVar4, gText_OkayToDeleteFromRegistry); DisplayItemMessageOnField(taskId, gStringVar4, ShowRegistryMenuDeleteYesNo); } @@ -1044,10 +1072,10 @@ void DeleteRegistry_Yes_Callback(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, 0); - DestroyListMenuTask(data[5], &data[2], &data[1]); - gSaveBlock1Ptr->secretBases[data[4]].registryStatus = 0; + DestroyListMenuTask(tListTaskId, &tScrollOffset, &tSelectedRow); + gSaveBlock1Ptr->secretBases[tSelectedBaseId].registryStatus = UNREGISTERED; BuildRegistryMenuItems(taskId); - sub_812225C(&data[2], &data[1], data[3], data[0]); + sub_812225C(&tScrollOffset, &tSelectedRow, tMaxShownItems, tNumBases); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } @@ -1061,7 +1089,7 @@ static void DeleteRegistry_No(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, 0); - DestroyListMenuTask(data[5], &data[2], &data[1]); + DestroyListMenuTask(tListTaskId, &tScrollOffset, &tSelectedRow); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } @@ -1070,9 +1098,9 @@ static void ReturnToMainRegistryMenu(u8 taskId) { s16 *data = gTasks[taskId].data; AddRegistryMenuScrollArrows(taskId); - ClearStdWindowAndFrame(data[7], 0); - ClearWindowTilemap(data[7]); - RemoveWindow(data[7]); + ClearStdWindowAndFrame(tActionWindowId, 0); + ClearWindowTilemap(tActionWindowId); + RemoveWindow(tActionWindowId); ScheduleBgCopyTilemapToVram(0); gTasks[taskId].func = HandleRegistryMenuInput; } @@ -1087,10 +1115,20 @@ static void GoToSecretBasePCRegisterMenu(u8 taskId) DestroyTask(taskId); } -static u8 GetSecretBaseOwnerType(u8 secretBaseId) +#undef tNumBases +#undef tSelectedRow +#undef tScrollOffset +#undef tMaxShownItems +#undef tSelectedBaseId +#undef tListTaskId +#undef tMainWindowId +#undef tActionWindowId +#undef tArrowTaskId + +static u8 GetSecretBaseOwnerType(u8 secretBaseIdx) { - return (gSaveBlock1Ptr->secretBases[secretBaseId].trainerId[0] % 5) - + (gSaveBlock1Ptr->secretBases[secretBaseId].gender * 5); + return (gSaveBlock1Ptr->secretBases[secretBaseIdx].trainerId[0] % 5) + + (gSaveBlock1Ptr->secretBases[secretBaseIdx].gender * 5); } const u8 *GetSecretBaseTrainerLoseText(void) @@ -1132,10 +1170,10 @@ void SetBattledOwnerFromResult(void) void GetSecretBaseOwnerAndState(void) { - u16 secretBaseId; + u16 secretBaseIdx; u8 i; - secretBaseId = VarGet(VAR_CURRENT_SECRET_BASE); + secretBaseIdx = VarGet(VAR_CURRENT_SECRET_BASE); if (!FlagGet(FLAG_DAILY_SECRET_BASE)) { for (i = 0; i < SECRET_BASES_COUNT; i++) @@ -1143,10 +1181,16 @@ void GetSecretBaseOwnerAndState(void) FlagSet(FLAG_DAILY_SECRET_BASE); } - gSpecialVar_0x8004 = GetSecretBaseOwnerType(secretBaseId); - gSpecialVar_Result = gSaveBlock1Ptr->secretBases[secretBaseId].battledOwnerToday; + gSpecialVar_0x8004 = GetSecretBaseOwnerType(secretBaseIdx); + gSpecialVar_Result = gSaveBlock1Ptr->secretBases[secretBaseIdx].battledOwnerToday; } +#define tStepCb data[0] // See Task_RunPerStepCallback +#define tState data[1] +#define tPlayerX data[2] +#define tPlayerY data[3] +#define tFldEff data[4] + void SecretBasePerStepCallback(u8 taskId) { s16 x; @@ -1156,23 +1200,23 @@ void SecretBasePerStepCallback(u8 taskId) s16 *data; data = gTasks[taskId].data; - switch (data[1]) + switch (tState) { case 0: - if (VarGet(VAR_CURRENT_SECRET_BASE) != 0) + if (VarGet(VAR_CURRENT_SECRET_BASE)) sInFriendSecretBase = TRUE; else sInFriendSecretBase = FALSE; - PlayerGetDestCoords(&data[2], &data[3]); - data[1] = 1; + PlayerGetDestCoords(&tPlayerX, &tPlayerY); + tState = 1; break; case 1: PlayerGetDestCoords(&x, &y); - if (x != data[2] || y != data[3]) + if (x != tPlayerX || y != tPlayerY) { - data[2] = x; - data[3] = y; + tPlayerX = x; + tPlayerY = y; VarSet(VAR_SECRET_BASE_STEP_COUNTER, VarGet(VAR_SECRET_BASE_STEP_COUNTER) + 1); behavior = MapGridGetMetatileBehaviorAt(x, y); tileId = MapGridGetMetatileIdAt(x, y); @@ -1273,33 +1317,40 @@ void SecretBasePerStepCallback(u8 taskId) } break; case 2: - if (!FieldEffectActiveListContains(data[4])) - data[1] = 1; + // This state is never reached, and tFldEff is never set + if (!FieldEffectActiveListContains(tFldEff)) + tState = 1; break; } } -static void SetSecretBaseDataAndLanguage(u8 secretBaseId, struct SecretBase *secretBase, u32 version, u32 language) +#undef tStepCb +#undef tState +#undef tPlayerX +#undef tPlayerY +#undef tFldEff + +static void SaveSecretBase(u8 secretBaseIdx, struct SecretBase *secretBase, u32 version, u32 language) { int stringLength; u8 *name; - gSaveBlock1Ptr->secretBases[secretBaseId] = *secretBase; - gSaveBlock1Ptr->secretBases[secretBaseId].registryStatus = 2; + gSaveBlock1Ptr->secretBases[secretBaseIdx] = *secretBase; + gSaveBlock1Ptr->secretBases[secretBaseIdx].registryStatus = NEW; if (version == VERSION_SAPPHIRE || version == VERSION_RUBY) - gSaveBlock1Ptr->secretBases[secretBaseId].language = LANGUAGE_ENGLISH; + gSaveBlock1Ptr->secretBases[secretBaseIdx].language = GAME_LANGUAGE; if (version == VERSION_EMERALD && language == LANGUAGE_JAPANESE) { - name = gSaveBlock1Ptr->secretBases[secretBaseId].trainerName; - for (stringLength = 0; stringLength < 7; stringLength++) + name = gSaveBlock1Ptr->secretBases[secretBaseIdx].trainerName; + for (stringLength = 0; stringLength < PLAYER_NAME_LENGTH; stringLength++) { if (name[stringLength] == EOS) break; } if (stringLength > 5) - gSaveBlock1Ptr->secretBases[secretBaseId].language = LANGUAGE_ENGLISH; + gSaveBlock1Ptr->secretBases[secretBaseIdx].language = GAME_LANGUAGE; } } @@ -1363,56 +1414,67 @@ static u8 FindAvailableSecretBaseIndex(void) return 0; } -static u8 sub_80EAA18(void) +static u8 FindUnregisteredSecretBaseIndex(void) { s16 i; for (i = 1; i < SECRET_BASES_COUNT; i++) { - if (gSaveBlock1Ptr->secretBases[i].registryStatus == 0 && gSaveBlock1Ptr->secretBases[i].sbr_field_1_0 == 0) + if (gSaveBlock1Ptr->secretBases[i].registryStatus == UNREGISTERED && gSaveBlock1Ptr->secretBases[i].toRegister == FALSE) return i; } return 0; } -static u8 sub_80EAA64(struct SecretBase *secretBase, u32 version, u32 language) +static u8 TrySaveFriendsSecretBase(struct SecretBase *secretBase, u32 version, u32 language) { s16 index; + // Secret base has no location if (!secretBase->secretBaseId) return 0; index = GetSecretBaseIndexFromId(secretBase->secretBaseId); if (index != 0) { + // An existing secret base is using this location if (index != -1) { - if (gSaveBlock1Ptr->secretBases[index].sbr_field_1_0 == 1) + if (gSaveBlock1Ptr->secretBases[index].toRegister == TRUE) return 0; - if (gSaveBlock1Ptr->secretBases[index].registryStatus != 2 || secretBase->sbr_field_1_0 == 1) + if (gSaveBlock1Ptr->secretBases[index].registryStatus != NEW || secretBase->toRegister == TRUE) { - SetSecretBaseDataAndLanguage(index, secretBase, version, language); + // Overwrite unregistered base at this location + SaveSecretBase(index, secretBase, version, language); return index; } } + // No secret base is using this location, find a spot to save it else { index = FindAvailableSecretBaseIndex(); if (index != 0) { - SetSecretBaseDataAndLanguage(index, secretBase, version, language); + // Save in empty space + SaveSecretBase(index, secretBase, version, language); return index; } - index = sub_80EAA18(); + index = FindUnregisteredSecretBaseIndex(); if (index != 0) { - SetSecretBaseDataAndLanguage(index, secretBase, version, language); + // Overwrite unregistered base + SaveSecretBase(index, secretBase, version, language); return index; } } } + + // Unable to save. Either... + // - This was the player's base + // - A registered base exists at this location + // - The secret base limit has been filled with registered bases return 0; } @@ -1425,11 +1487,12 @@ static void SortSecretBasesByRegistryStatus(void) struct SecretBase *secretBases; secretBases = gSaveBlock1Ptr->secretBases; - for (i = 1; i < 19; i++) + for (i = 1; i < SECRET_BASES_COUNT - 1; i++) { for (j = i + 1; j < SECRET_BASES_COUNT; j++) { - if ((secretBases[i].registryStatus == 0 && secretBases[j].registryStatus == 1) || (secretBases[i].registryStatus == 2 && secretBases[j].registryStatus != 2)) + if ((secretBases[i].registryStatus == UNREGISTERED && secretBases[j].registryStatus == REGISTERED) + || (secretBases[i].registryStatus == NEW && secretBases[j].registryStatus != NEW)) { struct SecretBase temp; SWAP(secretBases[i], secretBases[j], temp) @@ -1438,17 +1501,19 @@ static void SortSecretBasesByRegistryStatus(void) } } -void sub_80EABA4(struct SecretBaseRecordMixer *mixer, u8 registryStatus) +// Used to save a record mixing friends' bases other than their own +// registryStatus is so registered bases can be attempted first +static void TrySaveFriendsSecretBases(struct SecretBaseRecordMixer *mixer, u8 registryStatus) { u16 i; for (i = 1; i < SECRET_BASES_COUNT; i++) { if (mixer->secretBases[i].registryStatus == registryStatus) - sub_80EAA64(&mixer->secretBases[i], mixer->version, mixer->language); + TrySaveFriendsSecretBase(&mixer->secretBases[i], mixer->version, mixer->language); } } -bool8 SecretBaseBelongsToPlayer(struct SecretBase *secretBase) +static bool8 SecretBaseBelongsToPlayer(struct SecretBase *secretBase) { u8 i; @@ -1478,7 +1543,7 @@ bool8 SecretBaseBelongsToPlayer(struct SecretBase *secretBase) #define DELETED_BASE_B (1 << 1) #define DELETED_BASE_C (1 << 2) -void DeleteFirstOldBaseFromPlayerInRecordMixingFriendsRecords(struct SecretBase *basesA, struct SecretBase *basesB, struct SecretBase *basesC) +static void DeleteFirstOldBaseFromPlayerInRecordMixingFriendsRecords(struct SecretBase *basesA, struct SecretBase *basesB, struct SecretBase *basesC) { u8 i; u8 sbFlags = 0; @@ -1524,7 +1589,7 @@ void DeleteFirstOldBaseFromPlayerInRecordMixingFriendsRecords(struct SecretBase #undef DELETED_BASE_C // returns TRUE if secretBase was deleted, FALSE otherwise -static bool8 ClearDuplicateOwnedSecretBases(struct SecretBase *secretBase, struct SecretBase *secretBases, u8 c) +static bool8 ClearDuplicateOwnedSecretBase(struct SecretBase *secretBase, struct SecretBase *secretBases, u8 idx) { u8 i; @@ -1534,7 +1599,7 @@ static bool8 ClearDuplicateOwnedSecretBases(struct SecretBase *secretBase, struc { if (SecretBasesBelongToSamePlayer(secretBase, &secretBases[i]) == TRUE) { - if (c == 0) + if (idx == 0) { ClearSecretBase(&secretBases[i]); return FALSE; @@ -1546,7 +1611,7 @@ static bool8 ClearDuplicateOwnedSecretBases(struct SecretBase *secretBase, struc return FALSE; } - secretBases[i].sbr_field_1_0 = secretBase->sbr_field_1_0; + secretBases[i].toRegister = secretBase->toRegister; ClearSecretBase(secretBase); return TRUE; } @@ -1556,87 +1621,97 @@ static bool8 ClearDuplicateOwnedSecretBases(struct SecretBase *secretBase, struc return FALSE; } -void sub_80EAD94(struct SecretBase *basesA, struct SecretBase *basesB, struct SecretBase *basesC, struct SecretBase *basesD) +static void ClearDuplicateOwnedSecretBases(struct SecretBase *playersBases, struct SecretBase *friendsBasesA, struct SecretBase *friendsBasesB, struct SecretBase *friendsBasesC) { u8 i; for (i = 1; i < SECRET_BASES_COUNT; i++) { - if (basesA[i].secretBaseId) + if (playersBases[i].secretBaseId) { - if (basesA[i].registryStatus == 1) + if (playersBases[i].registryStatus == REGISTERED) { - basesA[i].sbr_field_1_0 = 1; + // Mark registered bases, so if they're deleted as a duplicate they + // will be re-registered later + playersBases[i].toRegister = TRUE; } - if (!ClearDuplicateOwnedSecretBases(&basesA[i], basesB, i)) + if (!ClearDuplicateOwnedSecretBase(&playersBases[i], friendsBasesA, i)) { - if (!ClearDuplicateOwnedSecretBases(&basesA[i], basesC, i)) + if (!ClearDuplicateOwnedSecretBase(&playersBases[i], friendsBasesB, i)) { - ClearDuplicateOwnedSecretBases(&basesA[i], basesD, i); + ClearDuplicateOwnedSecretBase(&playersBases[i], friendsBasesC, i); } } } } for (i = 0; i < SECRET_BASES_COUNT; i++) { - if (basesB[i].secretBaseId) + if (friendsBasesA[i].secretBaseId) { - basesB[i].battledOwnerToday = 0; - if (!ClearDuplicateOwnedSecretBases(&basesB[i], basesC, i)) + friendsBasesA[i].battledOwnerToday = 0; + if (!ClearDuplicateOwnedSecretBase(&friendsBasesA[i], friendsBasesB, i)) { - ClearDuplicateOwnedSecretBases(&basesB[i], basesD, i); + ClearDuplicateOwnedSecretBase(&friendsBasesA[i], friendsBasesC, i); } } } for (i = 0; i < SECRET_BASES_COUNT; i++) { - if (basesC[i].secretBaseId) + if (friendsBasesB[i].secretBaseId) { - basesC[i].battledOwnerToday = 0; - ClearDuplicateOwnedSecretBases(&basesC[i], basesD, i); + friendsBasesB[i].battledOwnerToday = 0; + ClearDuplicateOwnedSecretBase(&friendsBasesB[i], friendsBasesC, i); } - if (basesD[i].secretBaseId) + if (friendsBasesC[i].secretBaseId) { - basesD[i].battledOwnerToday = 0; + friendsBasesC[i].battledOwnerToday = 0; } } } -void sub_80EAE90(struct SecretBase *base, u32 version, u32 language) +static void TrySaveRegisteredDuplicate(struct SecretBase *base, u32 version, u32 language) { - if (base->sbr_field_1_0 == 1) + if (base->toRegister == TRUE) { - sub_80EAA64(base, version, language); + TrySaveFriendsSecretBase(base, version, language); ClearSecretBase(base); } } -void sub_80EAEB4(struct SecretBaseRecordMixer *mixers) +static void TrySaveRegisteredDuplicates(struct SecretBaseRecordMixer *mixers) { u16 i; for (i = 0; i < SECRET_BASES_COUNT; i++) { - sub_80EAE90(&mixers[0].secretBases[i], mixers[0].version, mixers[0].language); - sub_80EAE90(&mixers[1].secretBases[i], mixers[1].version, mixers[1].language); - sub_80EAE90(&mixers[2].secretBases[i], mixers[2].version, mixers[2].language); + TrySaveRegisteredDuplicate(&mixers[0].secretBases[i], mixers[0].version, mixers[0].language); + TrySaveRegisteredDuplicate(&mixers[1].secretBases[i], mixers[1].version, mixers[1].language); + TrySaveRegisteredDuplicate(&mixers[2].secretBases[i], mixers[2].version, mixers[2].language); } } -void sub_80EAEF4(struct SecretBaseRecordMixer *mixers) +static void SaveRecordMixBases(struct SecretBaseRecordMixer *mixers) { DeleteFirstOldBaseFromPlayerInRecordMixingFriendsRecords(mixers[0].secretBases, mixers[1].secretBases, mixers[2].secretBases); - sub_80EAD94(gSaveBlock1Ptr->secretBases, mixers[0].secretBases, mixers[1].secretBases, mixers[2].secretBases); - sub_80EAEB4(mixers); - sub_80EAA64(mixers[0].secretBases, mixers[0].version, mixers[0].language); - sub_80EAA64(mixers[1].secretBases, mixers[1].version, mixers[1].language); - sub_80EAA64(mixers[2].secretBases, mixers[2].version, mixers[2].language); - sub_80EABA4(&mixers[0], 1); - sub_80EABA4(&mixers[1], 1); - sub_80EABA4(&mixers[2], 1); - sub_80EABA4(&mixers[0], 0); - sub_80EABA4(&mixers[1], 0); - sub_80EABA4(&mixers[2], 0); + ClearDuplicateOwnedSecretBases(gSaveBlock1Ptr->secretBases, mixers[0].secretBases, mixers[1].secretBases, mixers[2].secretBases); + + // First, save any registered secret bases that were deleted as duplicates + TrySaveRegisteredDuplicates(mixers); + + // Then try to save the record mixing friends' own bases + TrySaveFriendsSecretBase(mixers[0].secretBases, mixers[0].version, mixers[0].language); + TrySaveFriendsSecretBase(mixers[1].secretBases, mixers[1].version, mixers[1].language); + TrySaveFriendsSecretBase(mixers[2].secretBases, mixers[2].version, mixers[2].language); + + // Then try to save as many of their registered bases as possible + TrySaveFriendsSecretBases(&mixers[0], REGISTERED); + TrySaveFriendsSecretBases(&mixers[1], REGISTERED); + TrySaveFriendsSecretBases(&mixers[2], REGISTERED); + + // Lastly save as many of their unregistered bases as possible + TrySaveFriendsSecretBases(&mixers[0], UNREGISTERED); + TrySaveFriendsSecretBases(&mixers[1], UNREGISTERED); + TrySaveFriendsSecretBases(&mixers[2], UNREGISTERED); } #define INIT_SECRET_BASE_RECORD_MIXER(linkId1, linkId2, linkId3) \ @@ -1684,23 +1759,25 @@ void ReceiveSecretBasesData(void *secretBases, size_t recordSize, u8 linkIdx) break; } - sub_80EAEF4(mixers); + SaveRecordMixBases(mixers); + for (i = 1; i < SECRET_BASES_COUNT; i++) { - if (gSaveBlock1Ptr->secretBases[i].sbr_field_1_0 == 1) + // In the process of deleting duplicate bases, if a base the player has registered is deleted it is + // flagged with the temporary toRegister flag, so it can be re-registered after it has been newly saved + if (gSaveBlock1Ptr->secretBases[i].toRegister == TRUE) { - gSaveBlock1Ptr->secretBases[i].registryStatus = 1; - gSaveBlock1Ptr->secretBases[i].sbr_field_1_0 = 0; + gSaveBlock1Ptr->secretBases[i].registryStatus = REGISTERED; + gSaveBlock1Ptr->secretBases[i].toRegister = FALSE; } } SortSecretBasesByRegistryStatus(); for (i = 1; i < SECRET_BASES_COUNT; i++) { - if (gSaveBlock1Ptr->secretBases[i].registryStatus == 2) - { - gSaveBlock1Ptr->secretBases[i].registryStatus = 0; - } + // Unmark "new" bases, they've been saved now and are no longer important + if (gSaveBlock1Ptr->secretBases[i].registryStatus == NEW) + gSaveBlock1Ptr->secretBases[i].registryStatus = UNREGISTERED; } if (gSaveBlock1Ptr->secretBases[0].secretBaseId != 0 diff --git a/src/trade.c b/src/trade.c index 96099cb74..afefce93c 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1489,7 +1489,7 @@ static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 player // Partner cant trade illegitimate Deoxys or Mew if (partnerSpecies == SPECIES_DEOXYS || partnerSpecies == SPECIES_MEW) { - if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_OBEDIENCE)) + if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_EVENT_LEGAL)) return PARTNER_MON_INVALID; } @@ -2329,7 +2329,7 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int if (species[monIdx] == SPECIES_DEOXYS || species[monIdx] == SPECIES_MEW) { - if (!GetMonData(&playerParty[monIdx], MON_DATA_OBEDIENCE)) + if (!GetMonData(&playerParty[monIdx], MON_DATA_EVENT_LEGAL)) return CANT_TRADE_INVALID_MON; } @@ -2394,17 +2394,17 @@ s32 GetGameProgressForLinkTrade(void) return TRADE_BOTH_PLAYERS_READY; } -static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet) +static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isEventLegal) { if (species == SPECIES_DEOXYS || species == SPECIES_MEW) { - if (!isObedientBitSet) + if (!isEventLegal) return TRUE; } return FALSE; } -int GetUnionRoomTradeMessageId(struct GFtgtGnameSub rfuPlayer, struct GFtgtGnameSub rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isObedientBitSet) +int GetUnionRoomTradeMessageId(struct GFtgtGnameSub rfuPlayer, struct GFtgtGnameSub rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isEventLegal) { bool8 playerHasNationalDex = rfuPlayer.hasNationalDex; bool8 playerIsChampion = rfuPlayer.isChampion; @@ -2424,7 +2424,7 @@ int GetUnionRoomTradeMessageId(struct GFtgtGnameSub rfuPlayer, struct GFtgtGname } } - if (IsDeoxysOrMewUntradable(playerSpecies, isObedientBitSet)) + if (IsDeoxysOrMewUntradable(playerSpecies, isEventLegal)) { return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; } @@ -2475,11 +2475,11 @@ int GetUnionRoomTradeMessageId(struct GFtgtGnameSub rfuPlayer, struct GFtgtGname return UR_TRADE_MSG_NONE; } -int CanRegisterMonForTradingBoard(struct GFtgtGnameSub rfuPlayer, u16 species2, u16 species, u8 isObedientBitSet) +int CanRegisterMonForTradingBoard(struct GFtgtGnameSub rfuPlayer, u16 species2, u16 species, u8 isEventLegal) { bool8 hasNationalDex = rfuPlayer.hasNationalDex; - if (IsDeoxysOrMewUntradable(species, isObedientBitSet)) + if (IsDeoxysOrMewUntradable(species, isEventLegal)) return CANT_REGISTER_MON; if (hasNationalDex) @@ -2920,7 +2920,7 @@ static void CB2_InGameTrade(void) StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); StringCopy(gLinkPlayers[1].name, otName); - gLinkPlayers[0].language = LANGUAGE_ENGLISH; + gLinkPlayers[0].language = GAME_LANGUAGE; gLinkPlayers[1].language = GetMonData(&gEnemyParty[0], MON_DATA_LANGUAGE); sTradeData = AllocZeroed(sizeof(*sTradeData)); AllocateMonSpritesGfx(); diff --git a/src/trainer_see.c b/src/trainer_see.c index 8a7d2a5f9..9833f14bd 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -41,10 +41,10 @@ static bool8 PlayerFaceApproachingTrainer(u8 taskId, struct Task *task, struct O static bool8 WaitPlayerFaceApproachingTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj); static bool8 RevealDisguisedTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj); static bool8 WaitRevealDisguisedTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj); -static bool8 RevealHiddenTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj); -static bool8 PopOutOfAshHiddenTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj); -static bool8 JumpInPlaceHiddenTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj); -static bool8 WaitRevealHiddenTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj); +static bool8 RevealBuriedTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj); +static bool8 PopOutOfAshBuriedTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj); +static bool8 JumpInPlaceBuriedTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj); +static bool8 WaitRevealBuriedTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj); static void SpriteCB_TrainerIcons(struct Sprite *sprite); @@ -80,10 +80,10 @@ enum { TRSEE_PLAYER_FACE_WAIT, TRSEE_REVEAL_DISGUISE, TRSEE_REVEAL_DISGUISE_WAIT, - TRSEE_REVEAL_HIDDEN, - TRSEE_HIDDEN_POP_OUT, - TRSEE_HIDDEN_JUMP, - TRSEE_REVEAL_HIDDEN_WAIT, + TRSEE_REVEAL_BURIED, + TRSEE_BURIED_POP_OUT, + TRSEE_BURIED_JUMP, + TRSEE_REVEAL_BURIED_WAIT, }; static bool8 (*const sTrainerSeeFuncList[])(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj) = @@ -96,18 +96,18 @@ static bool8 (*const sTrainerSeeFuncList[])(u8 taskId, struct Task *task, struct [TRSEE_PLAYER_FACE_WAIT] = WaitPlayerFaceApproachingTrainer, [TRSEE_REVEAL_DISGUISE] = RevealDisguisedTrainer, [TRSEE_REVEAL_DISGUISE_WAIT] = WaitRevealDisguisedTrainer, - [TRSEE_REVEAL_HIDDEN] = RevealHiddenTrainer, - [TRSEE_HIDDEN_POP_OUT] = PopOutOfAshHiddenTrainer, - [TRSEE_HIDDEN_JUMP] = JumpInPlaceHiddenTrainer, - [TRSEE_REVEAL_HIDDEN_WAIT] = WaitRevealHiddenTrainer, + [TRSEE_REVEAL_BURIED] = RevealBuriedTrainer, + [TRSEE_BURIED_POP_OUT] = PopOutOfAshBuriedTrainer, + [TRSEE_BURIED_JUMP] = JumpInPlaceBuriedTrainer, + [TRSEE_REVEAL_BURIED_WAIT] = WaitRevealBuriedTrainer, }; static bool8 (*const sTrainerSeeFuncList2[])(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj) = { - RevealHiddenTrainer, - PopOutOfAshHiddenTrainer, - JumpInPlaceHiddenTrainer, - WaitRevealHiddenTrainer, + RevealBuriedTrainer, + PopOutOfAshBuriedTrainer, + JumpInPlaceBuriedTrainer, + WaitRevealBuriedTrainer, }; static const struct OamData sOamData_Icons = @@ -481,8 +481,8 @@ static bool8 WaitTrainerExclamationMark(u8 taskId, struct Task *task, struct Obj task->tFuncId++; // TRSEE_MOVE_TO_PLAYER if (trainerObj->movementType == MOVEMENT_TYPE_TREE_DISGUISE || trainerObj->movementType == MOVEMENT_TYPE_MOUNTAIN_DISGUISE) task->tFuncId = TRSEE_REVEAL_DISGUISE; - if (trainerObj->movementType == MOVEMENT_TYPE_HIDDEN) - task->tFuncId = TRSEE_REVEAL_HIDDEN; + if (trainerObj->movementType == MOVEMENT_TYPE_BURIED) + task->tFuncId = TRSEE_REVEAL_BURIED; return TRUE; } } @@ -561,8 +561,8 @@ static bool8 WaitRevealDisguisedTrainer(u8 taskId, struct Task *task, struct Obj return FALSE; } -// TRSEE_REVEAL_HIDDEN -static bool8 RevealHiddenTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj) +// TRSEE_REVEAL_BURIED +static bool8 RevealBuriedTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj) { if (!ObjectEventIsMovementOverridden(trainerObj) || ObjectEventClearHeldMovementIfFinished(trainerObj)) @@ -573,8 +573,8 @@ static bool8 RevealHiddenTrainer(u8 taskId, struct Task *task, struct ObjectEven return FALSE; } -// TRSEE_HIDDEN_POP_OUT -static bool8 PopOutOfAshHiddenTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj) +// TRSEE_BURIED_POP_OUT +static bool8 PopOutOfAshBuriedTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj) { if (ObjectEventCheckHeldMovementStatus(trainerObj)) { @@ -588,8 +588,8 @@ static bool8 PopOutOfAshHiddenTrainer(u8 taskId, struct Task *task, struct Objec return FALSE; } -// TRSEE_HIDDEN_JUMP -static bool8 JumpInPlaceHiddenTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj) +// TRSEE_BURIED_JUMP +static bool8 JumpInPlaceBuriedTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj) { struct Sprite *sprite; @@ -608,8 +608,8 @@ static bool8 JumpInPlaceHiddenTrainer(u8 taskId, struct Task *task, struct Objec return FALSE; } -// TRSEE_REVEAL_HIDDEN_WAIT -static bool8 WaitRevealHiddenTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj) +// TRSEE_REVEAL_BURIED_WAIT +static bool8 WaitRevealBuriedTrainer(u8 taskId, struct Task *task, struct ObjectEvent *trainerObj) { if (!FieldEffectActiveListContains(FLDEFF_ASH_PUFF)) task->tFuncId = TRSEE_MOVE_TO_PLAYER; @@ -623,7 +623,7 @@ static bool8 WaitRevealHiddenTrainer(u8 taskId, struct Task *task, struct Object #define tObjEvent data[1] -static void Task_SetHiddenTrainerMovement(u8 taskId) +static void Task_SetBuriedTrainerMovement(u8 taskId) { struct Task *task = &gTasks[taskId]; struct ObjectEvent *objEvent; @@ -647,10 +647,10 @@ static void Task_SetHiddenTrainerMovement(u8 taskId) } } -// Called when a "buried" trainer has the reveal_trainer movement applied, from direct interaction -void SetHiddenTrainerMovement(struct ObjectEvent *objEvent) +// Called when a buried Trainer has the reveal_trainer movement applied, from direct interaction +void SetBuriedTrainerMovement(struct ObjectEvent *objEvent) { - StoreWordInTwoHalfwords(&gTasks[CreateTask(Task_SetHiddenTrainerMovement, 0)].tObjEvent, (u32)objEvent); + StoreWordInTwoHalfwords(&gTasks[CreateTask(Task_SetBuriedTrainerMovement, 0)].tObjEvent, (u32)objEvent); } void DoTrainerApproach(void) @@ -1665,7 +1665,7 @@ void PutLilycoveContestLadyShowOnTheAir(void) { show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot]; BufferContestLadyLanguage(&show->contestLiveUpdates2.language); - show->contestLiveUpdates2.pokemonNameLanguage = LANGUAGE_ENGLISH; + show->contestLiveUpdates2.pokemonNameLanguage = GAME_LANGUAGE; show->contestLiveUpdates2.kind = TVSHOW_CONTEST_LIVE_UPDATES_2; show->contestLiveUpdates2.active = TRUE; BufferContestLadyPlayerName(show->contestLiveUpdates2.playerName); @@ -2398,13 +2398,13 @@ u8 GetRibbonCount(struct Pokemon *pokemon) nRibbons += GetMonData(pokemon, MON_DATA_VICTORY_RIBBON); nRibbons += GetMonData(pokemon, MON_DATA_ARTIST_RIBBON); nRibbons += GetMonData(pokemon, MON_DATA_EFFORT_RIBBON); - nRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_1); - nRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_2); - nRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_3); - nRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_4); - nRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_5); - nRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_6); - nRibbons += GetMonData(pokemon, MON_DATA_GIFT_RIBBON_7); + nRibbons += GetMonData(pokemon, MON_DATA_MARINE_RIBBON); + nRibbons += GetMonData(pokemon, MON_DATA_LAND_RIBBON); + nRibbons += GetMonData(pokemon, MON_DATA_SKY_RIBBON); + nRibbons += GetMonData(pokemon, MON_DATA_COUNTRY_RIBBON); + nRibbons += GetMonData(pokemon, MON_DATA_NATIONAL_RIBBON); + nRibbons += GetMonData(pokemon, MON_DATA_EARTH_RIBBON); + nRibbons += GetMonData(pokemon, MON_DATA_WORLD_RIBBON); return nRibbons; } @@ -2420,13 +2420,13 @@ u8 TV_MonDataIdxToRibbon(u8 monDataIdx) if (monDataIdx == MON_DATA_VICTORY_RIBBON) return 22; if (monDataIdx == MON_DATA_ARTIST_RIBBON) return 23; if (monDataIdx == MON_DATA_EFFORT_RIBBON) return 24; - if (monDataIdx == MON_DATA_GIFT_RIBBON_1) return 25; - if (monDataIdx == MON_DATA_GIFT_RIBBON_2) return 26; - if (monDataIdx == MON_DATA_GIFT_RIBBON_3) return 27; - if (monDataIdx == MON_DATA_GIFT_RIBBON_4) return 28; - if (monDataIdx == MON_DATA_GIFT_RIBBON_5) return 29; - if (monDataIdx == MON_DATA_GIFT_RIBBON_6) return 30; - if (monDataIdx == MON_DATA_GIFT_RIBBON_7) return 31; + if (monDataIdx == MON_DATA_MARINE_RIBBON) return 25; + if (monDataIdx == MON_DATA_LAND_RIBBON) return 26; + if (monDataIdx == MON_DATA_SKY_RIBBON) return 27; + if (monDataIdx == MON_DATA_COUNTRY_RIBBON) return 28; + if (monDataIdx == MON_DATA_NATIONAL_RIBBON) return 29; + if (monDataIdx == MON_DATA_EARTH_RIBBON) return 30; + if (monDataIdx == MON_DATA_WORLD_RIBBON) return 31; return 0; } @@ -3144,7 +3144,7 @@ static bool8 IsPartyMonNicknamedOrNotEnglish(u8 monIdx) pokemon = &gPlayerParty[monIdx]; GetMonData(pokemon, MON_DATA_NICKNAME, gStringVar1); language = GetMonData(pokemon, MON_DATA_LANGUAGE, &language); - if (language == LANGUAGE_ENGLISH && !StringCompare(gSpeciesNames[GetMonData(pokemon, MON_DATA_SPECIES, NULL)], gStringVar1)) + if (language == GAME_LANGUAGE && !StringCompare(gSpeciesNames[GetMonData(pokemon, MON_DATA_SPECIES, NULL)], gStringVar1)) { return FALSE; } @@ -4254,7 +4254,7 @@ static void sub_80F1254(TVShow *shows) } else { - curShow->bravoTrainerTower.pokemonNameLanguage = LANGUAGE_ENGLISH; + curShow->bravoTrainerTower.pokemonNameLanguage = GAME_LANGUAGE; } } } @@ -4262,7 +4262,7 @@ static void sub_80F1254(TVShow *shows) u8 TV_GetStringLanguage(u8 *str) { - return IsStringJapanese(str) ? LANGUAGE_JAPANESE : LANGUAGE_ENGLISH; + return IsStringJapanese(str) ? LANGUAGE_JAPANESE : GAME_LANGUAGE; } static void sub_80F12A4(TVShow *shows) diff --git a/src/util.c b/src/util.c index 8aa54857a..a4e3fa4cf 100644 --- a/src/util.c +++ b/src/util.c @@ -2,6 +2,7 @@ #include "util.h" #include "sprite.h" #include "palette.h" +#include "constants/rgb.h" const u32 gBitTable[] = { @@ -271,8 +272,8 @@ void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor) s8 g = data1->g; s8 b = data1->b; struct PlttData *data2 = (struct PlttData *)&blendColor; - gPlttBufferFaded[index] = ((r + (((data2->r - r) * coeff) >> 4)) << 0) - | ((g + (((data2->g - g) * coeff) >> 4)) << 5) - | ((b + (((data2->b - b) * coeff) >> 4)) << 10); + gPlttBufferFaded[index] = RGB(r + (((data2->r - r) * coeff) >> 4), + g + (((data2->g - g) * coeff) >> 4), + b + (((data2->b - b) * coeff) >> 4)); } } |