Fix happy mask salesman to check flags instead of inventory for SOLD OUT (#6355)
Fixes getting locked out of mask quest with mask select
This commit is contained in:
23
soh/soh/Enhancements/MaskSelect.cpp
Normal file
23
soh/soh/Enhancements/MaskSelect.cpp
Normal file
@@ -0,0 +1,23 @@
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
#include "soh/ShipInit.hpp"
|
||||
|
||||
extern "C" {
|
||||
#include "functions.h"
|
||||
#include "src/overlays/actors/ovl_En_Ossan/z_en_ossan.h"
|
||||
}
|
||||
|
||||
static void RegisterMaskSelectFixes() {
|
||||
// Fix mask quest so replacing SOLD OUT with mask select doesn't break quest
|
||||
COND_VB_SHOULD(VB_HAPPY_MASK_SHOP_CHECK_SOLD_OUT, CVarGetInteger(CVAR_ENHANCEMENT("MaskSelect"), 0), {
|
||||
Actor* actor = va_arg(args, Actor*);
|
||||
if (actor->params == OSSAN_TYPE_MASK &&
|
||||
(Flags_GetItemGetInf(ITEMGETINF_3B) && !Flags_GetEventChkInf(EVENTCHKINF_PAID_BACK_BUNNY_HOOD_FEE)) ||
|
||||
(Flags_GetItemGetInf(ITEMGETINF_3A) && !Flags_GetEventChkInf(EVENTCHKINF_PAID_BACK_SPOOKY_MASK_FEE)) ||
|
||||
(Flags_GetItemGetInf(ITEMGETINF_39) && !Flags_GetEventChkInf(EVENTCHKINF_PAID_BACK_SKULL_MASK_FEE)) ||
|
||||
(Flags_GetItemGetInf(ITEMGETINF_38) && !Flags_GetEventChkInf(EVENTCHKINF_PAID_BACK_KEATON_MASK_FEE))) {
|
||||
*should = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static RegisterShipInitFunc initFunc(RegisterMaskSelectFixes, { CVAR_ENHANCEMENT("MaskSelect") });
|
||||
@@ -302,6 +302,14 @@ typedef enum {
|
||||
// - `*EnGm`
|
||||
VB_CHECK_RANDO_PRICE_OF_MEDIGORON,
|
||||
|
||||
// #### `result`
|
||||
// ```c
|
||||
// INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_SOLD_OUT
|
||||
// ```
|
||||
// #### `args`
|
||||
// - `*EnOssan` (Happy Mask Shopkeeper)
|
||||
VB_HAPPY_MASK_SHOP_CHECK_SOLD_OUT,
|
||||
|
||||
// #### `result`
|
||||
// ```c
|
||||
// true
|
||||
|
||||
@@ -2127,7 +2127,8 @@ u16 EnOssan_SetupHelloDialog(EnOssan* this) {
|
||||
this->happyMaskShopState = OSSAN_HAPPY_STATE_NONE;
|
||||
// mask shop messages
|
||||
if (this->actor.params == OSSAN_TYPE_MASK) {
|
||||
if (INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_SOLD_OUT) {
|
||||
if (GameInteractor_Should(VB_HAPPY_MASK_SHOP_CHECK_SOLD_OUT, INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_SOLD_OUT,
|
||||
this)) {
|
||||
if (Flags_GetItemGetInf(ITEMGETINF_3B)) {
|
||||
if (!Flags_GetEventChkInf(EVENTCHKINF_PAID_BACK_BUNNY_HOOD_FEE)) {
|
||||
// Pay back Bunny Hood
|
||||
|
||||
Reference in New Issue
Block a user