mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-26 14:56:52 -04:00
implement goron shop checks
This commit is contained in:
@@ -4022,16 +4022,53 @@ BOOL daNpc_grA_c::talk(void*) {
|
||||
if (r26 && talkProc(NULL, TRUE, NULL)) {
|
||||
if (mFlow.getEventId(&sp8) == 1) {
|
||||
#if TARGET_PC
|
||||
const u8 originalItem = sp8;
|
||||
u32 itemGiveTag = 0;
|
||||
if (sp8 == dItemNo_BOMB_IN_BAG_e) {
|
||||
bool isItemCheck = false;
|
||||
if (originalItem == dItemNo_BOMB_IN_BAG_e) {
|
||||
const auto itemCheck =
|
||||
dusk::mods::item_check_commit("goron_reward:F_SP113", sp8, this);
|
||||
dusk::mods::item_check_commit("goron_reward:F_SP113", originalItem, this);
|
||||
sp8 = itemCheck.itemNo;
|
||||
itemGiveTag = itemCheck.tag;
|
||||
isItemCheck = true;
|
||||
} else {
|
||||
const char* stage = dComIfGp_getStartStageName();
|
||||
const bool isAdultGoronShop = (strcmp(stage, "R_SP160") == 0 && originalItem == dItemNo_HYLIA_SHIELD_e) ||
|
||||
(strcmp(stage, "F_SP116") == 0 && originalItem == dItemNo_ARROW_30_e);
|
||||
if (isAdultGoronShop) {
|
||||
const auto itemCheck = dusk::mods::item_check_commit(
|
||||
dusk::mods::item_give_tag_shop(originalItem), originalItem, this);
|
||||
sp8 = itemCheck.itemNo;
|
||||
itemGiveTag = itemCheck.tag;
|
||||
isItemCheck = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (isItemCheck && sp8 == dItemNo_NONE_e) {
|
||||
dusk::mods::item_check_complete({itemGiveTag, dItemNo_NONE_e}, this);
|
||||
r29 = 1;
|
||||
if (mType == 0xb) {
|
||||
field_0x1691 = 1;
|
||||
}
|
||||
} else {
|
||||
field_0x1480 = fopAcM_createItemForPresentDemo(
|
||||
¤t.pos, sp8, 0, -1, -1, NULL, NULL, itemGiveTag);
|
||||
if (field_0x1480 != fpcM_ERROR_PROCESS_ID_e) {
|
||||
s16 r25 =
|
||||
dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_GETITEM", 0xff);
|
||||
dComIfGp_getEvent()->reset(this);
|
||||
fopAcM_orderChangeEventId(this, r25, 1, -1);
|
||||
field_0x9ec = 1;
|
||||
r29 = 1;
|
||||
mOrderNewEvt = 1;
|
||||
if (mType == 0xb) {
|
||||
field_0x1691 = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
field_0x1480 = fopAcM_createItemForPresentDemo(¤t.pos, sp8, 0, -1, -1, NULL,
|
||||
NULL IF_DUSK_ARG(itemGiveTag));
|
||||
NULL);
|
||||
if (field_0x1480 != fpcM_ERROR_PROCESS_ID_e) {
|
||||
s16 r25 = dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_GETITEM", 0xff);
|
||||
dComIfGp_getEvent()->reset(this);
|
||||
@@ -4043,6 +4080,7 @@ BOOL daNpc_grA_c::talk(void*) {
|
||||
field_0x1691 = 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
if (mType == 0xa && field_0x1486 == 0 && daNpcF_chkEvtBit(0x187)) {
|
||||
dComIfGp_getEvent()->reset(this);
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
#include "d/actor/d_a_npc_grc.h"
|
||||
#include "d/actor/d_a_npc.h"
|
||||
#include "Z2AudioLib/Z2Instances.h"
|
||||
#if TARGET_PC
|
||||
#include "mods/items.h"
|
||||
#endif
|
||||
#include <cstring>
|
||||
|
||||
enum grC_RES_File_ID {
|
||||
@@ -1476,8 +1479,27 @@ BOOL daNpc_grC_c::talk(void* param_1) {
|
||||
rv = TRUE;
|
||||
|
||||
if (mFlow.getEventId(&i_itemNo) == 1) {
|
||||
mItemID = fopAcM_createItemForPresentDemo(¤t.pos, i_itemNo, 0, -1, -1, NULL, NULL);
|
||||
#if TARGET_PC
|
||||
const bool isCastleTownShop =
|
||||
strcmp(dComIfGp_getStartStageName(), "R_SP160") == 0 &&
|
||||
(i_itemNo == dItemNo_RED_BOTTLE_e || i_itemNo == dItemNo_OIL_BOTTLE_e);
|
||||
u32 itemGiveTag = 0;
|
||||
if (isCastleTownShop) {
|
||||
const auto itemCheck = dusk::mods::item_check_commit(
|
||||
dusk::mods::item_give_tag_shop(i_itemNo), i_itemNo, this);
|
||||
i_itemNo = itemCheck.itemNo;
|
||||
itemGiveTag = itemCheck.tag;
|
||||
}
|
||||
|
||||
if (isCastleTownShop && i_itemNo == dItemNo_NONE_e) {
|
||||
dusk::mods::item_check_complete({itemGiveTag, dItemNo_NONE_e}, this);
|
||||
} else {
|
||||
mItemID = fopAcM_createItemForPresentDemo(
|
||||
¤t.pos, i_itemNo, 0, -1, -1, NULL, NULL, itemGiveTag);
|
||||
}
|
||||
#else
|
||||
mItemID = fopAcM_createItemForPresentDemo(¤t.pos, i_itemNo, 0, -1, -1, NULL, NULL);
|
||||
#endif
|
||||
if (mItemID != fpcM_ERROR_PROCESS_ID_e) {
|
||||
s16 i_eventID = dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_GETITEM", 0xFF);
|
||||
dComIfGp_getEvent()->reset(this);
|
||||
|
||||
Reference in New Issue
Block a user