diff options
-rw-r--r-- | asm/macros/event.inc | 9 | ||||
-rw-r--r-- | data/maps/BirthIsland_Exterior/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/NavelRock_Base/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/NavelRock_Summit/scripts.inc | 2 | ||||
-rw-r--r-- | data/mystery_event_msg.s | 2 | ||||
-rw-r--r-- | data/script_cmd_table.inc | 4 | ||||
-rw-r--r-- | data/specials.inc | 2 | ||||
-rw-r--r-- | include/constants/pokemon.h | 18 | ||||
-rw-r--r-- | include/global.h | 50 | ||||
-rw-r--r-- | include/pokemon.h | 20 | ||||
-rw-r--r-- | include/trade.h | 4 | ||||
-rw-r--r-- | src/battle_util.c | 6 | ||||
-rw-r--r-- | src/daycare.c | 6 | ||||
-rw-r--r-- | src/evolution_scene.c | 2 | ||||
-rw-r--r-- | src/party_menu.c | 8 | ||||
-rw-r--r-- | src/pokemon.c | 128 | ||||
-rw-r--r-- | src/pokemon_size_record.c | 6 | ||||
-rw-r--r-- | src/pokemon_summary_screen.c | 8 | ||||
-rw-r--r-- | src/scrcmd.c | 12 | ||||
-rw-r--r-- | src/trade.c | 16 |
20 files changed, 178 insertions, 129 deletions
diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 86c2e2b1e..ef1b077de 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1394,14 +1394,15 @@ .4byte \value .endm - @ Makes the Pokemon in the specified slot of the player's party obedient. It will not randomly disobey orders in battle. - .macro setmonobedient slot:req + @ Sets the Pokemon in the specified slot of the player party's eventLegal bit. + .macro setmoneventlegal slot:req .byte 0xcd .2byte \slot .endm - @ Checks if the Pokemon in the specified slot of the player's party is obedient. If the Pokemon is disobedient, VAR_RESULT is TRUE. If the Pokemon is obedient (or if the specified slot is empty or invalid), VAR_RESULT is FALSE. - .macro checkmonobedience slot:req + @ Checks if the Pokemon in the specified slot of the player's party has its eventLegal bit set. If it isn't set, + @ VAR_RESULT is TRUE. If the bit is set (or if the specified slot is empty or invalid), VAR_RESULT is FALSE. + .macro checkmoneventlegal slot:req .byte 0xce .2byte \slot .endm diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index ae7545a95..81419e08a 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -87,7 +87,7 @@ BirthIsland_Exterior_EventScript_Deoxys:: @ 81652C0 setvar VAR_0x8004, SPECIES_DEOXYS setvar VAR_0x8005, 30 @ Level setvar VAR_0x8006, ITEM_NONE - special CreateObedientEnemyMon + special CreateEventLegalEnemyMon setflag FLAG_SYS_SPECIAL_WILD_BATTLE special StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Base/scripts.inc b/data/maps/NavelRock_Base/scripts.inc index 2a490f13e..f4dcdc8c8 100644 --- a/data/maps/NavelRock_Base/scripts.inc +++ b/data/maps/NavelRock_Base/scripts.inc @@ -59,7 +59,7 @@ NavelRock_Base_EventScript_Lugia:: @ 8165134 setvar VAR_0x8004, SPECIES_LUGIA setvar VAR_0x8005, 70 @ Level setvar VAR_0x8006, ITEM_NONE - special CreateObedientEnemyMon + special CreateEventLegalEnemyMon setflag FLAG_SYS_SPECIAL_WILD_BATTLE special StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Summit/scripts.inc b/data/maps/NavelRock_Summit/scripts.inc index 32b163542..56a6c467c 100644 --- a/data/maps/NavelRock_Summit/scripts.inc +++ b/data/maps/NavelRock_Summit/scripts.inc @@ -63,7 +63,7 @@ NavelRock_Summit_EventScript_HoOh:: @ 8164FFB setvar VAR_0x8004, SPECIES_HO_OH setvar VAR_0x8005, 70 @ Level setvar VAR_0x8006, ITEM_NONE - special CreateObedientEnemyMon + special CreateEventLegalEnemyMon setflag FLAG_SYS_SPECIAL_WILD_BATTLE special StartLegendaryBattle waitstate diff --git a/data/mystery_event_msg.s b/data/mystery_event_msg.s index c9c7430ab..8ffbf788d 100644 --- a/data/mystery_event_msg.s +++ b/data/mystery_event_msg.s @@ -68,7 +68,7 @@ SurfPichu_FullParty: @ 8488EEB SurfPichu_GiveEgg: @ 8488EF6 giveegg SPECIES_PICHU - setmonobedient VAR_EVENT_PICHU_SLOT + setmoneventlegal VAR_EVENT_PICHU_SLOT setmonmetlocation VAR_EVENT_PICHU_SLOT, 0xff compare VAR_EVENT_PICHU_SLOT, 1 vgoto_if_eq SurfPichu_Slot1 diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 84996a5d6..8612b810d 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -206,8 +206,8 @@ gScriptCmdTable:: @ 815F9B4 .4byte ScrCmd_signmsg .4byte ScrCmd_normalmsg .4byte ScrCmd_comparestattoword - .4byte ScrCmd_setmonobedient - .4byte ScrCmd_checkmonobedience + .4byte ScrCmd_setmoneventlegal + .4byte ScrCmd_checkmoneventlegal .4byte ScrCmd_execram .4byte ScrCmd_setworldmapflag .4byte ScrCmd_warpteleport2 diff --git a/data/specials.inc b/data/specials.inc index 8788a6105..aa7eced1a 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -451,5 +451,5 @@ gSpecials:: @ 815FD60 def_special InitElevatorFloorSelectMenuPos def_special UpdateLoreleiDollCollection def_special LoopWingFlapSound - def_special CreateObedientEnemyMon + def_special CreateEventLegalEnemyMon gSpecialsEnd:: diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 747bdea4c..0371f874f 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -74,15 +74,15 @@ #define MON_DATA_VICTORY_RIBBON 69 #define MON_DATA_ARTIST_RIBBON 70 #define MON_DATA_EFFORT_RIBBON 71 -#define MON_DATA_GIFT_RIBBON_1 72 -#define MON_DATA_GIFT_RIBBON_2 73 -#define MON_DATA_GIFT_RIBBON_3 74 -#define MON_DATA_GIFT_RIBBON_4 75 -#define MON_DATA_GIFT_RIBBON_5 76 -#define MON_DATA_GIFT_RIBBON_6 77 -#define MON_DATA_GIFT_RIBBON_7 78 -#define MON_DATA_FATEFUL_ENCOUNTER 79 -#define MON_DATA_OBEDIENCE 80 +#define MON_DATA_MARINE_RIBBON 72 +#define MON_DATA_LAND_RIBBON 73 +#define MON_DATA_SKY_RIBBON 74 +#define MON_DATA_COUNTRY_RIBBON 75 +#define MON_DATA_NATIONAL_RIBBON 76 +#define MON_DATA_EARTH_RIBBON 77 +#define MON_DATA_WORLD_RIBBON 78 +#define MON_DATA_FILLER 79 +#define MON_DATA_EVENT_LEGAL 80 #define MON_DATA_KNOWN_MOVES 81 #define MON_DATA_RIBBON_COUNT 82 #define MON_DATA_RIBBONS 83 diff --git a/include/global.h b/include/global.h index deaf70ea7..1942b23c3 100644 --- a/include/global.h +++ b/include/global.h @@ -715,6 +715,52 @@ struct TrainerNameRecord u8 trainerName[PLAYER_NAME_LENGTH + 1]; }; +// For external event data storage. The majority of these may have never been used. +// In FRLG, the only known used fields are the PokeCoupon and BoxRS ones, but hacking the distribution discs allows FRLG to receive events and set the others +struct ExternalEventData +{ + u8 unknownExternalDataFields1[7]; // if actually used, may be broken up into different fields. + u32 unknownExternalDataFields2:8; + u32 currentPokeCoupons:24; // PokéCoupons stored by Pokémon Colosseum and XD from Mt. Battle runs. Earned PokéCoupons are also added to totalEarnedPokeCoupons. Colosseum/XD caps this at 9,999,999, but will read up to 16,777,215. + u32 gotGoldPokeCouponTitleReward:1; // Master Ball from Jp Colosseum Bonus Disc; for reaching 30,000 totalEarnedPokeCoupons + u32 gotSilverPokeCouponTitleReward:1; // Light Ball Pikachu from JP Colosseum Bonus Disc; for reaching 5000 totalEarnedPokeCoupons + u32 gotBronzePokeCouponTitleReward:1; // PP Max from JP Colosseum Bonus Disc; for reaching 2500 totalEarnedPokeCoupons + u32 receivedAgetoCelebi:1; // from JP Colosseum Bonus Disc + u32 unknownExternalDataFields3:4; + u32 totalEarnedPokeCoupons:24; // Used by the JP Colosseum bonus disc. Determines PokéCoupon rank to distribute rewards. Unread in International games. Colosseum/XD caps this at 9,999,999. + u8 unknownExternalDataFields4[5]; // if actually used, may be broken up into different fields. +} __attribute__((packed)); /*size = 0x14*/ + +// For external event flags. The majority of these may have never been used. +// In FRLG, Jirachi cannot normally be received, but hacking the distribution discs allows FRLG to receive Jirachi and set the flag +struct ExternalEventFlags +{ + u8 usedBoxRS:1; // Set by Pokémon Box: Ruby & Sapphire; denotes whether this save has connected to it and triggered the free False Swipe Swablu Egg giveaway. + u8 boxRSEggsUnlocked:2; // Set by Pokémon Box: Ruby & Sapphire; denotes the number of Eggs unlocked from deposits; 1 for ExtremeSpeed Zigzagoon (at 100 deposited), 2 for Pay Day Skitty (at 500 deposited), 3 for Surf Pichu (at 1500 deposited) + u8 padding:5; + u8 unknownFlag1; + u8 receivedGCNJirachi; // Both the US Colosseum Bonus Disc and PAL/AUS Pokémon Channel use this field. One cannot receive a WISHMKR Jirachi and CHANNEL Jirachi with the same savefile. + u8 unknownFlag3; + u8 unknownFlag4; + u8 unknownFlag5; + u8 unknownFlag6; + u8 unknownFlag7; + u8 unknownFlag8; + u8 unknownFlag9; + u8 unknownFlag10; + u8 unknownFlag11; + u8 unknownFlag12; + u8 unknownFlag13; + u8 unknownFlag14; + u8 unknownFlag15; + u8 unknownFlag16; + u8 unknownFlag17; + u8 unknownFlag18; + u8 unknownFlag19; + u8 unknownFlag20; + +} __attribute__((packed));/*size = 0x15*/ + #define UNION_ROOM_KB_ROW_COUNT 10 struct SaveBlock1 @@ -761,7 +807,9 @@ struct SaveBlock1 /*0x2F18*/ OldMan oldMan; // unused /*0x2F54*/ struct EasyChatPair easyChatPairs[5]; // unused /*0x2F80*/ struct DayCare daycare; - /*0x309C*/ u8 giftRibbons[52]; + /*0x309C*/ u8 giftRibbons[11]; + /*0x30A7*/ struct ExternalEventData externalEventData; + /*0x30BB*/ struct ExternalEventFlags externalEventFlags; /*0x30D0*/ struct Roamer roamer; /*0x30EC*/ struct EnigmaBerry enigmaBerry; /*0x3120*/ struct MEventBuffers mysteryEventBuffers; diff --git a/include/pokemon.h b/include/pokemon.h index 3dd9c5052..3460b76dd 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -65,15 +65,15 @@ struct PokemonSubstruct3 /* 0x0A */ u32 victoryRibbon:1; /* 0x0A */ u32 artistRibbon:1; /* 0x0A */ u32 effortRibbon:1; - /* 0x0A */ u32 giftRibbon1:1; - /* 0x0A */ u32 giftRibbon2:1; - /* 0x0A */ u32 giftRibbon3:1; - /* 0x0A */ u32 giftRibbon4:1; - /* 0x0B */ u32 giftRibbon5:1; - /* 0x0B */ u32 giftRibbon6:1; - /* 0x0B */ u32 giftRibbon7:1; - /* 0x0B */ u32 fatefulEncounter:4; - /* 0x0B */ u32 obedient:1; + /* 0x0A */ u32 marineRibbon:1; // never distributed + /* 0x0A */ u32 landRibbon:1; // never distributed + /* 0x0A */ u32 skyRibbon:1; // never distributed + /* 0x0A */ u32 countryRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners + /* 0x0B */ u32 nationalRibbon:1; + /* 0x0B */ u32 earthRibbon:1; + /* 0x0B */ u32 worldRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners + /* 0x0B */ u32 filler:4; + /* 0x0B */ u32 eventLegal:1; // controls Mew & Deoxys obedience; if set, Pokémon is a fateful encounter in FRLG & Gen 4+ summary screens; set for in-game event island legendaries, some distributed events, and Pokémon from XD: Gale of Darkness. }; union PokemonSubstruct @@ -449,7 +449,7 @@ bool8 sub_804455C(u8 caseId, u8 battlerId); void SetDeoxysStats(void); u16 sub_80447AC(void); u16 sub_80447F0(void); -void CreateObedientEnemyMon(void); +void CreateEventLegalEnemyMon(void); void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality); bool8 CheckBattleTypeGhost(struct Pokemon *mon, u8 bank); struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8 enable); diff --git a/include/trade.h b/include/trade.h index 44d883f66..75ec5e178 100644 --- a/include/trade.h +++ b/include/trade.h @@ -15,8 +15,8 @@ extern const u8 gText_GenderlessSymbol[]; extern const u16 gUnknown_826601C[]; void CB2_ReturnFromLinkTrade(void); s32 Trade_CalcLinkPlayerCompatibilityParam(void); -s32 CanRegisterMonForTradingBoard(struct GFtgtGnameSub rfuPlayer, u16 species2, u16 species, u8 isObedientBitSet); -s32 GetUnionRoomTradeMessageId(struct GFtgtGnameSub rfuPlayer, struct GFtgtGnameSub rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isObedientBitSet); +s32 CanRegisterMonForTradingBoard(struct GFtgtGnameSub rfuPlayer, u16 species2, u16 species, u8 isEventLegal); +s32 GetUnionRoomTradeMessageId(struct GFtgtGnameSub rfuPlayer, struct GFtgtGnameSub rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isEventLegal); void CB2_ReturnToTradeMenuFromSummary(void); #endif //GUARD_TRADE_H diff --git a/src/battle_util.c b/src/battle_util.c index 45025ae1a..27d90b0d4 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3095,13 +3095,13 @@ u8 GetMoveTarget(u16 move, u8 setTarget) return targetBattler; } -static bool32 HasObedientBitSet(u8 battlerId) +static bool32 IsNotEventLegalMewOrDeoxys(u8 battlerId) { if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT || (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) @@ -3112,7 +3112,7 @@ u8 IsMonDisobedient(void) if ((gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_POKEDUDE)) || 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 (!IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName) || FlagGet(FLAG_BADGE08_GET)) return 0; diff --git a/src/daycare.c b/src/daycare.c index 18333c036..14c41355b 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1591,7 +1591,7 @@ static void CreatedHatchedMon(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[4]; u32 ivs[NUM_STATS]; @@ -1614,7 +1614,7 @@ static void CreatedHatchedMon(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, 32, TRUE, personality, 0, 0); @@ -1636,7 +1636,7 @@ static void CreatedHatchedMon(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/evolution_scene.c b/src/evolution_scene.c index 639194773..4b85e6e67 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -557,7 +557,7 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + 5; 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/party_menu.c b/src/party_menu.c index ec782a03d..b01e62a03 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3867,9 +3867,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); @@ -3894,8 +3894,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/pokemon.c b/src/pokemon.c index fda83ee3d..c0960f552 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1978,12 +1978,12 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) CalculateMonStats(mon); } -static void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) +static 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); } void sub_803E23C(struct Pokemon *mon, struct BattleTowerPokemon *dest) @@ -3153,32 +3153,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; @@ -3220,13 +3220,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: @@ -3243,13 +3243,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: @@ -3316,15 +3316,15 @@ void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg) case MON_DATA_VICTORY_RIBBON: case MON_DATA_ARTIST_RIBBON: case MON_DATA_EFFORT_RIBBON: - case MON_DATA_GIFT_RIBBON_1: - case MON_DATA_GIFT_RIBBON_2: - case MON_DATA_GIFT_RIBBON_3: - case MON_DATA_GIFT_RIBBON_4: - case MON_DATA_GIFT_RIBBON_5: - case MON_DATA_GIFT_RIBBON_6: - case MON_DATA_GIFT_RIBBON_7: - case MON_DATA_FATEFUL_ENCOUNTER: - case MON_DATA_OBEDIENCE: + case MON_DATA_MARINE_RIBBON: + case MON_DATA_LAND_RIBBON: + case MON_DATA_SKY_RIBBON: + case MON_DATA_COUNTRY_RIBBON: + case MON_DATA_NATIONAL_RIBBON: + case MON_DATA_EARTH_RIBBON: + case MON_DATA_WORLD_RIBBON: + case MON_DATA_FILLER: + case MON_DATA_EVENT_LEGAL: case MON_DATA_KNOWN_MOVES: case MON_DATA_RIBBON_COUNT: case MON_DATA_RIBBONS: @@ -3556,32 +3556,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: { @@ -6027,14 +6027,14 @@ u16 sub_80447F0(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, 32, 0, 0, 0, 0); + CreateEventLegalMon(&gEnemyParty[0], species, level, 32, 0, 0, 0, 0); if (itemId) { u8 heldItem[2]; diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c index 3d0495327..e41c29667 100644 --- a/src/pokemon_size_record.c +++ b/src/pokemon_size_record.c @@ -37,9 +37,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 }; #define CM_PER_INCH 2.54 diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index f3898464c..03b9c6744 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -2623,7 +2623,7 @@ static void sub_8137578(void) if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MET_LEVEL) == 0) { - if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_OBEDIENCE) == 1) + if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_EVENT_LEGAL) == 1) { if (sub_813B7E0(nature)) DynamicPlaceholderTextUtil_ExpandPlaceholders(natureMetOrHatchedAtLevelStr, gUnknown_841996D); @@ -2718,7 +2718,7 @@ static void sub_8137724(void) if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_MET_LEVEL) == 0) { - if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_OBEDIENCE) == 1) + if (GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_EVENT_LEGAL) == 1) { if (sub_813B7E0(nature)) DynamicPlaceholderTextUtil_ExpandPlaceholders(natureMetOrHatchedAtLevelStr, gUnknown_84199F4); @@ -2772,7 +2772,7 @@ static void sub_8137970(void) if (sMonSummaryScreen->monList.mons != gEnemyParty) { - if (metLocation == METLOC_FATEFUL_ENCOUNTER || GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_OBEDIENCE) == 1) + if (metLocation == METLOC_FATEFUL_ENCOUNTER || GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_EVENT_LEGAL) == 1) chosenStrIndex = 4; else { @@ -2790,7 +2790,7 @@ static void sub_8137970(void) } else { - if (metLocation == METLOC_FATEFUL_ENCOUNTER || GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_OBEDIENCE) == 1) + if (metLocation == METLOC_FATEFUL_ENCOUNTER || GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_EVENT_LEGAL) == 1) chosenStrIndex = 4; else { diff --git a/src/scrcmd.c b/src/scrcmd.c index 3b6c73b68..69acf7b7b 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2230,21 +2230,21 @@ bool8 ScrCmd_normalmsg(struct ScriptContext * ctx) return FALSE; } -// 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/trade.c b/src/trade.c index 474c3ae8f..60643f2fc 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1845,7 +1845,7 @@ static u8 PlayerHasEnoughPokemonToTrade_HandleMewDeoxys(u8 *flags, u8 partyCount count += flags[i]; } species = GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->otherPlayerCursorPosition % 6], MON_DATA_SPECIES); - if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->otherPlayerCursorPosition % 6], MON_DATA_OBEDIENCE)) + if ((species == SPECIES_DEOXYS || species == SPECIES_MEW) && !GetMonData(&gEnemyParty[sTradeMenuResourcesPtr->otherPlayerCursorPosition % 6], MON_DATA_EVENT_LEGAL)) return 2; if (count != 0) count = 1; @@ -2649,7 +2649,7 @@ static u32 TestWhetherSelectedMonCanBeTraded(struct Pokemon * party, int partyCo if (species[cursorPos] == SPECIES_DEOXYS || species[cursorPos] == SPECIES_MEW) { - if (!GetMonData(&party[cursorPos], MON_DATA_OBEDIENCE)) + if (!GetMonData(&party[cursorPos], MON_DATA_EVENT_LEGAL)) { return 4; } @@ -2730,17 +2730,17 @@ s32 Trade_CalcLinkPlayerCompatibilityParam(void) return 0; } -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 playerSub, struct GFtgtGnameSub partnerSub, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet) +int GetUnionRoomTradeMessageId(struct GFtgtGnameSub playerSub, struct GFtgtGnameSub partnerSub, u16 species1, u16 species2, u8 type, u16 species3, u8 isEventLegal) { u8 playerHasNationalDex = playerSub.hasNationalDex; u8 playerIsChampion = playerSub.isChampion; @@ -2769,7 +2769,7 @@ int GetUnionRoomTradeMessageId(struct GFtgtGnameSub playerSub, struct GFtgtGname } } - if (IsDeoxysOrMewUntradable(species3, isObedientBitSet)) + if (IsDeoxysOrMewUntradable(species3, isEventLegal)) { return 4; } @@ -2820,11 +2820,11 @@ int GetUnionRoomTradeMessageId(struct GFtgtGnameSub playerSub, struct GFtgtGname return 0; } -int CanRegisterMonForTradingBoard(struct GFtgtGnameSub playerSub, u16 species2, u16 species, u8 obedience) +int CanRegisterMonForTradingBoard(struct GFtgtGnameSub playerSub, u16 species2, u16 species, u8 isEventLegal) { u8 canTradeEggAndNational = playerSub.hasNationalDex; - if (IsDeoxysOrMewUntradable(species, obedience)) + if (IsDeoxysOrMewUntradable(species, isEventLegal)) { return 1; } |