mostly have carpet guy working

This commit is contained in:
Pepper0ni 2024-05-09 22:22:17 +01:00
parent a3e2e7dfd4
commit bd463be256
4 changed files with 16 additions and 53 deletions

View File

@ -289,6 +289,7 @@ typedef enum {
VB_GIVE_ITEM_FROM_GORON,
// Opt: *EnJs
VB_GIVE_ITEM_FROM_CARPET_SALESMAN,
VB_GIVE_BOMBCHUS_FROM_CARPET_SALESMAN,
// Opt: *EnGm
VB_GIVE_ITEM_FROM_MEDIGORON,
// Opt: *EnMs

View File

@ -786,6 +786,10 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, void
Flags_GetRandomizerInf(RAND_INF_MERCHANTS_CARPET_SALESMAN);
break;
}
case VB_GIVE_BOMBCHUS_FROM_CARPET_SALESMAN: {
*should = RAND_GET_OPTION(RSK_BOMBCHUS_IN_LOGIC) == false || INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU;
break;
}
case VB_GIVE_ITEM_FROM_MEDIGORON: {
// fallthrough
case VB_BE_ELIGIBLE_FOR_GIANTS_KNIFE_PURCHASE:

View File

@ -2625,9 +2625,9 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
messageEntry = messageEntry = ctx->GetHint(RH_MEDIGORON)->GetHintMessage(MF_AUTO_FORMAT);
}
else if (textId == TEXT_CARPET_SALESMAN_1 && !Flags_GetRandomizerInf(RAND_INF_MERCHANTS_CARPET_SALESMAN) && Randomizer_GetSettingValue(RSK_SHUFFLE_MERCHANTS) != RO_SHUFFLE_MERCHANTS_OFF){
messageEntry = messageEntry = ctx->GetHint(RH_CARPET_SALESMAN)->GetHintMessage(MF_AUTO_FORMAT);
messageEntry = ctx->GetHint(RH_CARPET_SALESMAN)->GetHintMessage(MF_AUTO_FORMAT);
}
else if (textId == TEXT_CARPET_SALESMAN_2 && !Flags_GetRandomizerInf(RAND_INF_MERCHANTS_CARPET_SALESMAN) && Randomizer_GetSettingValue(RSK_SHUFFLE_MERCHANTS) != RO_SHUFFLE_MERCHANTS_OFF){
else if (textId == TEXT_CARPET_SALESMAN_2 && !ctx->GetItemLocation(RC_WASTELAND_BOMBCHU_SALESMAN)->HasObtained() && Randomizer_GetSettingValue(RSK_SHUFFLE_MERCHANTS) != RO_SHUFFLE_MERCHANTS_OFF){
messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::merchantMessageTableID, textId);//KNOWN BUG does not play due to I assume a change in when RAND_INF_MERCHANTS_CARPET_SALESMAN gets set.
} else if (textId == TEXT_SKULLTULA_PEOPLE_IM_CURSED) {
actorParams = GET_PLAYER(play)->targetActor->params;

View File

@ -148,8 +148,14 @@ void func_80A891C4(EnJs* this, PlayState* play) {
Message_ContinueTextbox(play, 0x6075);
func_80A89008(this);
} else {
Rupees_ChangeBy(-200);
En_Js_SetupAction(this, func_80A89160);
if (GameInteractor_Should(VB_GIVE_BOMBCHUS_FROM_CARPET_SALESMAN, true, this) ||
(Actor_HasParent(&this->actor, play) || !GameInteractor_Should(VB_GIVE_ITEM_FROM_CARPET_SALESMAN, true, this))){
Rupees_ChangeBy(-200);
En_Js_SetupAction(this, func_80A89160);
} else{
Message_ContinueTextbox(play, 0x6073);
func_80A89008(this);
}
}
break;
case 1: // no
@ -159,56 +165,8 @@ void func_80A891C4(EnJs* this, PlayState* play) {
}
}
// #region [Randomizer]
void func_80A89160Rando(EnJs* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
En_Js_SetupAction(this, func_80A8910C);
} else {
GetItemEntry itemEntry = Randomizer_GetItemFromKnownCheck(RC_WASTELAND_BOMBCHU_SALESMAN, GI_BOMBCHUS_10);
gSaveContext.pendingSale = itemEntry.itemId;
gSaveContext.pendingSaleMod = itemEntry.modIndex;
GiveItemEntryFromActor(&this->actor, play, itemEntry, 10000.0f, 50.0f);
Flags_SetRandomizerInf(RAND_INF_MERCHANTS_CARPET_SALESMAN);
}
}
void func_80A891C4Rando(EnJs* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) {
case 0: // yes
if (gSaveContext.rupees < 200) {
Message_ContinueTextbox(play, 0x6075);
func_80A89008(this);
} else if (Randomizer_GetSettingValue(RSK_SHUFFLE_MERCHANTS) != RO_SHUFFLE_MERCHANTS_OFF &&
!Flags_GetRandomizerInf(RAND_INF_MERCHANTS_CARPET_SALESMAN)){
Rupees_ChangeBy(-200);
En_Js_SetupAction(this, func_80A89160Rando);
} else if (Randomizer_GetSettingValue(RSK_BOMBCHUS_IN_LOGIC) && INV_CONTENT(ITEM_BOMBCHU) == ITEM_NONE){
Message_ContinueTextbox(play, 0x6073);
func_80A89008(this);
} else {
Rupees_ChangeBy(-200);
En_Js_SetupAction(this, func_80A89160);
}
break;
case 1: // no
Message_ContinueTextbox(play, 0x6074);
func_80A89008(this);
}
}
}
// #endregion
void func_80A89294(EnJs* this) {
// #region [Randomizer]
if (IS_RANDO){
En_Js_SetupAction(this, func_80A891C4Rando);
}
//#endregion
else{
En_Js_SetupAction(this, func_80A891C4);
}
En_Js_SetupAction(this, func_80A891C4);
Animation_Change(&this->skelAnime, &gCarpetMerchantIdleAnim, 1.0f, 0.0f,
Animation_GetLastFrame(&gCarpetMerchantIdleAnim), ANIMMODE_ONCE, -4.0f);
}