Fix missable Malon check (#6299)
Added a case for the VB_MALON_RETURN_FROM_CASTLE vanilla behavior flag. This lets Malon stay until you both get the egg and wake up Talon making the egg flag unmissable.
This commit is contained in:
@@ -135,6 +135,9 @@ typedef enum {
|
|||||||
TEXT_MALON_HOW_IS_EPONA_DOING = 0x2001,
|
TEXT_MALON_HOW_IS_EPONA_DOING = 0x2001,
|
||||||
TEXT_MALON_EPONA_LOOKS_GREAT = 0x2002,
|
TEXT_MALON_EPONA_LOOKS_GREAT = 0x2002,
|
||||||
TEXT_MALON_OBSTICLE_COURSE = 0x2003,
|
TEXT_MALON_OBSTICLE_COURSE = 0x2003,
|
||||||
|
TEXT_MALON_MEET_EPONA = 0x2047,
|
||||||
|
TEXT_MALON_EPONA_IS_AFRAID = 0x2048,
|
||||||
|
TEXT_MALON_LETS_SING_THIS_SONG = 0x2049,
|
||||||
TEXT_MALON_EVERYONE_TURNING_EVIL = 0x204C,
|
TEXT_MALON_EVERYONE_TURNING_EVIL = 0x204C,
|
||||||
TEXT_MALON_I_SING_THIS_SONG = 0x2050,
|
TEXT_MALON_I_SING_THIS_SONG = 0x2050,
|
||||||
TEXT_MALON_EVERYONE_LIKED_SONG = 0x2051,
|
TEXT_MALON_EVERYONE_LIKED_SONG = 0x2051,
|
||||||
|
|||||||
@@ -1419,6 +1419,14 @@ typedef enum {
|
|||||||
// - None
|
// - None
|
||||||
VB_MALON_RETURN_FROM_CASTLE,
|
VB_MALON_RETURN_FROM_CASTLE,
|
||||||
|
|
||||||
|
// #### `result`
|
||||||
|
// ```c
|
||||||
|
// true
|
||||||
|
// ```
|
||||||
|
// #### `args`
|
||||||
|
// - None
|
||||||
|
VB_SEND_MALON_HOME,
|
||||||
|
|
||||||
// #### `result`
|
// #### `result`
|
||||||
// ```c
|
// ```c
|
||||||
// CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD)
|
// CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD)
|
||||||
|
|||||||
@@ -39,10 +39,23 @@ void BuildShootingGalleryNoBowMessage(uint16_t* textId, bool* loadFromMessageTab
|
|||||||
*loadFromMessageTable = false;
|
*loadFromMessageTable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BuildFixedMallonAtCastleMessage(uint16_t* textId, bool* loadFromMessageTable) {
|
||||||
|
CustomMessage msg =
|
||||||
|
CustomMessage("Looks like my dad already went back to the %rranch%w. You should come visit sometime!",
|
||||||
|
"Mein Vater ist wohl schon wieder auf der %rFarm%w, du solltest ihn mal besuchen kommen!",
|
||||||
|
"On dirait que père est déjà rentré au %rranch%w. Tu devrais nous rendre visite à l'occasion!");
|
||||||
|
msg.AutoFormat();
|
||||||
|
msg.LoadIntoFont();
|
||||||
|
*loadFromMessageTable = false;
|
||||||
|
}
|
||||||
|
|
||||||
void RegisterMiscellaneousMessages() {
|
void RegisterMiscellaneousMessages() {
|
||||||
COND_ID_HOOK(OnOpenText, TEXT_LAKE_HYLIA_WATER_SWITCH_NAVI, IS_RANDO, BuildWaterSwitchMessage);
|
COND_ID_HOOK(OnOpenText, TEXT_LAKE_HYLIA_WATER_SWITCH_NAVI, IS_RANDO, BuildWaterSwitchMessage);
|
||||||
COND_ID_HOOK(OnOpenText, TEXT_LAKE_HYLIA_WATER_SWITCH_SIGN, IS_RANDO, BuildWaterSwitchMessage);
|
COND_ID_HOOK(OnOpenText, TEXT_LAKE_HYLIA_WATER_SWITCH_SIGN, IS_RANDO, BuildWaterSwitchMessage);
|
||||||
COND_ID_HOOK(OnOpenText, TEXT_SHOOTING_GALLERY_MAN_COME_BACK_WITH_BOW, IS_RANDO, BuildShootingGalleryNoBowMessage);
|
COND_ID_HOOK(OnOpenText, TEXT_SHOOTING_GALLERY_MAN_COME_BACK_WITH_BOW, IS_RANDO, BuildShootingGalleryNoBowMessage);
|
||||||
|
COND_ID_HOOK(OnOpenText, TEXT_MALON_MEET_EPONA, IS_RANDO, BuildFixedMallonAtCastleMessage);
|
||||||
|
COND_ID_HOOK(OnOpenText, TEXT_MALON_EPONA_IS_AFRAID, IS_RANDO, BuildFixedMallonAtCastleMessage);
|
||||||
|
COND_ID_HOOK(OnOpenText, TEXT_MALON_LETS_SING_THIS_SONG, IS_RANDO, BuildFixedMallonAtCastleMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterShipInitFunc initFunc(RegisterMiscellaneousMessages, { "IS_RANDO" });
|
static RegisterShipInitFunc initFunc(RegisterMiscellaneousMessages, { "IS_RANDO" });
|
||||||
@@ -253,6 +253,12 @@ void RandomizerOnFlagSetHandler(int16_t flagType, int16_t flag) {
|
|||||||
Flags_SetRandomizerInf(RAND_INF_ZELDAS_LETTER);
|
Flags_SetRandomizerInf(RAND_INF_ZELDAS_LETTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flagType == FLAG_EVENT_CHECK_INF && flag == EVENTCHKINF_TALON_RETURNED_FROM_CASTLE) {
|
||||||
|
if (Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_POCKET_EGG)) {
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_TALON_SENT_MALON_HOME);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RandomizerCheck rc = GetRandomizerCheckFromFlag(flagType, flag);
|
RandomizerCheck rc = GetRandomizerCheckFromFlag(flagType, flag);
|
||||||
if (rc == RC_UNKNOWN_CHECK)
|
if (rc == RC_UNKNOWN_CHECK)
|
||||||
return;
|
return;
|
||||||
@@ -932,6 +938,13 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
|
|||||||
*should = true;
|
*should = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case VB_MALON_RETURN_FROM_CASTLE:
|
||||||
|
*should = Flags_GetEventChkInf(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE) &&
|
||||||
|
Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_POCKET_EGG);
|
||||||
|
break;
|
||||||
|
case VB_SEND_MALON_HOME:
|
||||||
|
*should = Flags_GetRandomizerInf(RAND_INF_TALON_SENT_MALON_HOME);
|
||||||
|
break;
|
||||||
case VB_MIDO_CONSIDER_DEKU_TREE_DEAD:
|
case VB_MIDO_CONSIDER_DEKU_TREE_DEAD:
|
||||||
*should = Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_KOKIRI_EMERALD_DEKU_TREE_DEAD);
|
*should = Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_KOKIRI_EMERALD_DEKU_TREE_DEAD);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -2112,3 +2112,4 @@ DEFINE_RAND_INF(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_8)
|
|||||||
DEFINE_RAND_INF(RAND_INF_OBTAINED_RUTOS_LETTER)
|
DEFINE_RAND_INF(RAND_INF_OBTAINED_RUTOS_LETTER)
|
||||||
DEFINE_RAND_INF(RAND_INF_OBTAINED_NAYRUS_LOVE)
|
DEFINE_RAND_INF(RAND_INF_OBTAINED_NAYRUS_LOVE)
|
||||||
DEFINE_RAND_INF(RAND_INF_OBTAINED_ROCS_FEATHER)
|
DEFINE_RAND_INF(RAND_INF_OBTAINED_ROCS_FEATHER)
|
||||||
|
DEFINE_RAND_INF(RAND_INF_TALON_SENT_MALON_HOME)
|
||||||
|
|||||||
@@ -329,7 +329,9 @@ void func_80AA0D88(EnMa1* this, PlayState* play) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((play->sceneNum == SCENE_HYRULE_CASTLE) && malonReturnedFromCastle) {
|
if ((play->sceneNum == SCENE_HYRULE_CASTLE) && malonReturnedFromCastle) {
|
||||||
|
if (GameInteractor_Should(VB_SEND_MALON_HOME, true)) {
|
||||||
Actor_Kill(&this->actor);
|
Actor_Kill(&this->actor);
|
||||||
|
}
|
||||||
} else if (!malonReturnedFromCastle || malonTaughtEponasSong) {
|
} else if (!malonReturnedFromCastle || malonTaughtEponasSong) {
|
||||||
if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) {
|
if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) {
|
||||||
this->actionFunc = func_80AA0EA0;
|
this->actionFunc = func_80AA0EA0;
|
||||||
|
|||||||
Reference in New Issue
Block a user