Merge branch 'main' of ssh://github.com/TwilitRealm/dusklight into better-tools

This commit is contained in:
TakaRikka
2026-08-29 18:37:14 -07:00
144 changed files with 12422 additions and 681 deletions
+24 -1
View File
@@ -1027,6 +1027,9 @@ void daAlink_c::setGetItemFace(u16 i_itemNo) {
|| i_itemNo == dItemNo_ANCIENT_DOCUMENT2_e
|| i_itemNo == dItemNo_DROP_CONTAINER_e
|| i_itemNo == dItemNo_DROP_CONTAINER02_e
#if TARGET_PC
|| i_itemNo == dItemNo_SHADOW_CRYSTAL_e
#endif
|| i_itemNo == dItemNo_DROP_CONTAINER03_e)
{
setFaceBasicBck(dRes_ID_ALANM_BCK_FI_e);
@@ -2009,7 +2012,11 @@ void daAlink_c::setGetSubBgm(int i_itemNo) {
/* dItemNo_WEAR_KOKIRI_e */ SETYPE_NONE,
/* dItemNo_ARMOR_e */ SETYPE_ITEM_GET,
/* dItemNo_WEAR_ZORA_e */ SETYPE_ITEM_GET,
#if TARGET_PC
/* dItemNo_SHADOW_CRYSTAL_e */ SETYPE_ITEM_GET,
#else
/* dItemNo_MAGIC_LV1_e */ SETYPE_NONE,
#endif
/* dItemNo_DUNGEON_EXIT_2_e */ SETYPE_ITEM_GET_MINI,
/* dItemNo_WALLET_LV1_e */ SETYPE_NONE,
/* dItemNo_WALLET_LV2_e */ SETYPE_ITEM_GET,
@@ -2307,8 +2314,13 @@ int daAlink_c::procCoGetItemInit() {
item_no = dComIfGp_event_getGtItm();
}
#if TARGET_PC
const u32 giveTag = mDemo.getParam0() != 0x100 && mDemo.getParam1() != 0 ?
static_cast<u32>(mDemo.getParam1()) :
dusk::mods::item_give_queue_take_tag();
#endif
fpc_ProcID item_partner_id = fopAcM_createItemForPresentDemo(&current.pos, item_no, 0, -1,
fopAcM_GetRoomNo(this), NULL, NULL IF_DUSK_ARG(dusk::mods::item_give_queue_take_tag()));
fopAcM_GetRoomNo(this), NULL, NULL IF_DUSK_ARG(giveTag));
if (item_partner_id != fpcM_ERROR_PROCESS_ID_e) {
dComIfGp_event_setItemPartnerId(item_partner_id);
}
@@ -2533,6 +2545,16 @@ int daAlink_c::procCoGetItem() {
} else if (mProcVar2.field_0x300c == 0x23 && checkStageName("D_MN11")) {
field_0x32cc = 0x5C0;
} else if (mProcVar2.field_0x300c == 0xE0) {
#if TARGET_PC
// Dusklight increments the Poe count when the displayed item is granted.
if (dComIfGs_getPohSpiritNum() + 1 == 20) {
field_0x32cc = 0x4CF;
} else if (dComIfGs_getPohSpiritNum() + 1 == 60) {
field_0x32cc = 0x4D0;
} else {
field_0x32cc = mProcVar2.field_0x300c + 0x65;
}
#else
if (dComIfGs_getPohSpiritNum() == 20) {
field_0x32cc = 0x4CF;
} else if (dComIfGs_getPohSpiritNum() == 60) {
@@ -2540,6 +2562,7 @@ int daAlink_c::procCoGetItem() {
} else {
field_0x32cc = mProcVar2.field_0x300c + 0x65;
}
#endif
} else if (mProcVar2.field_0x300c == 0x21) {
static u32 const heartPieceMessage[5] = {0x86, 0x9C, 0x9D, 0x9E, 0x9F};
field_0x32cc = heartPieceMessage[dComIfGs_getMaxLife() % 5];
+6 -1
View File
@@ -19,6 +19,10 @@
#include "f_op/f_op_actor_enemy.h"
#include "Z2AudioLib/Z2Instances.h"
#if TARGET_PC
#include "mods/items.h"
#endif
enum daB_DS_Joint {
DS_JNT_BACKBONE1,
DS_JNT_BACKBONE2,
@@ -4086,7 +4090,8 @@ void daB_DS_c::executeBattle2Dead() {
dComIfGs_onStageBossEnemy(0x13);
#if TARGET_PC
// This reward has no original grant at this point in the cutscene.
dusk::mods::item_check_enqueue("Arbiters Grounds Dungeon Reward", dItemNo_NONE_e);
dusk::mods::item_check_enqueue_deferred(
ITEM_CHECK_DUNGEON_REWARD_ARBITERS, dItemNo_NONE_e);
#endif
/* dSv_event_flag_c::F_0265 - Arbiter's Grounds - Arbiter's Grounds clear */
dComIfGs_onEventBit(0x2010);
+7
View File
@@ -1090,6 +1090,13 @@ inline int daDemo00_c::execute() {
break;
}
case 1:
#if TARGET_PC
// Suppress demo22_01's M_077 write. On Dusklight, the transform flag
// is set by the Shadow Crystal item.
if (dSv_event_flag_c::saveBitLabels[sp0E] == dSv_event_flag_c::M_077) {
break;
}
#endif
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[sp0E]);
break;
+14 -2
View File
@@ -449,7 +449,7 @@ int daDitem_c::Delete() {
endInsectEffect();
mSound.deleteObject();
return DeleteBase(dItem_data::getArcName(m_itemNo));
return DeleteBase(dItem_data::getArcName(DUSK_IF_ELSE(getDisplayItemNo(), m_itemNo)));
}
static int daDitem_Delete(daDitem_c* i_this) {
@@ -461,8 +461,16 @@ int daDitem_c::create() {
m_itemNo = daDitem_prm::getNo(this);
#if TARGET_PC
const auto [item, displayItem] = dusk::mods::item_check_resolve(mItemGiveTag, m_itemNo, this);
m_itemNo = item;
setDisplayItemNo(displayItem);
const char* arc_name = dItem_data::getArcName(displayItem);
s16 bmd_name = dItem_data::getBmdName(displayItem);
#else
const char* arc_name = dItem_data::getArcName(m_itemNo);
s16 bmd_name = dItem_data::getBmdName(m_itemNo);
#endif
if (bmd_name < 0 || arc_name == NULL) {
if (bmd_name == 0) {
@@ -476,9 +484,13 @@ int daDitem_c::create() {
}
m_itemNo = dItemNo_GREEN_RUPEE_e;
#if TARGET_PC
setDisplayItemNo(dItemNo_NONE_e);
#endif
}
int phase_state = dComIfG_resLoad(&mPhase, dItem_data::getArcName(m_itemNo));
int phase_state = dComIfG_resLoad(
&mPhase, dItem_data::getArcName(DUSK_IF_ELSE(getDisplayItemNo(), m_itemNo)));
if (phase_state == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, CheckItemCreateHeap, 0x80003390)) {
return cPhs_ERROR_e;
+15 -8
View File
@@ -727,19 +727,26 @@ void daE_HP_c::executeDead() {
}
#if TARGET_PC
mItemCheckOverridden =
dusk::mods::item_check_poe(bitSw, dItemNo_POU_SPIRIT_e, this) != dItemNo_POU_SPIRIT_e;
if (mItemCheckOverridden) {
dusk::mods::item_check_enqueue_poe(bitSw, dItemNo_POU_SPIRIT_e);
} else
const auto itemCheck = dusk::mods::item_check_commit(
dusk::mods::item_give_tag_poe(bitSw), dItemNo_POU_SPIRIT_e, this);
mItemCheckHandled = true;
if (itemCheck.itemNo == dItemNo_NONE_e) {
dusk::mods::item_check_complete(itemCheck, this);
} else {
daAlink_getAlinkActorClass()->procWolfAtnActorMoveInit();
dusk::mods::item_check_enqueue(itemCheck, dusk::mods::ItemGiveMode::ForcedDemo);
}
#else
dComIfGs_addPohSpiritNum();
#endif
dComIfGs_addPohSpiritNum();
field_0x784 = -1;
if (dComIfGs_getPohSpiritNum() == 20 IF_DUSK(&&!mItemCheckOverridden)) {
#if !TARGET_PC
if (dComIfGs_getPohSpiritNum() == 20) {
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[0x1c9]);
}
#endif
movemode++;
}
@@ -759,7 +766,7 @@ void daE_HP_c::executeDead() {
field_0x788 = 1;
}
}
} else if (field_0x788 != 0 IF_DUSK(|| mItemCheckOverridden)) {
} else if (field_0x788 != 0 IF_DUSK(|| mItemCheckHandled)) {
fopAcM_createDisappear(this, &current.pos, 8, 3, 0xff);
fopAcM_delete(this);
} else {
+12 -12
View File
@@ -1132,20 +1132,14 @@ static void e_po_dead(e_po_class* i_this) {
camera_player->mCamera.Start();
camera_player->mCamera.SetTrimSize(0);
dComIfGp_event_reset();
#if TARGET_PC
if (dusk::mods::item_check_poe(i_this->BitSW, dItemNo_POU_SPIRIT_e, a_this) ==
dItemNo_POU_SPIRIT_e)
{
#endif
dComIfGs_addPohSpiritNum();
#if !TARGET_PC
dComIfGs_addPohSpiritNum();
#if !PLATFORM_SHIELD
if (dComIfGs_getPohSpiritNum() == 0x14) {
/* dSv_event_flag_c::F_0457 - Castle Town - Revived cat */
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[457]);
}
#endif
#if TARGET_PC
}
#endif
daPy_getPlayerActorClass()->cancelOriginalDemo();
} else if (mArg0Check(i_this, 0) != 0) {
@@ -1274,10 +1268,16 @@ static void e_po_dead(e_po_class* i_this) {
} else {
if (i_this->field_0x75C == -1) {
#if TARGET_PC
const u8 itemNo =
dusk::mods::item_check_poe(i_this->BitSW, dItemNo_POU_SPIRIT_e, a_this);
i_this->field_0x75C = fopAcM_createItemForPresentDemo(&a_this->current.pos, itemNo,
0, -1, -1, NULL, NULL, dusk::mods::item_give_tag_poe(i_this->BitSW));
const auto itemCheck = dusk::mods::item_check_commit(
dusk::mods::item_give_tag_poe(i_this->BitSW), dItemNo_POU_SPIRIT_e, a_this);
if (itemCheck.itemNo == dItemNo_NONE_e) {
dusk::mods::item_check_complete(itemCheck, a_this);
i_this->field_0x75B = 1;
} else {
i_this->field_0x75C = fopAcM_createItemForPresentDemo(
&a_this->current.pos, itemCheck.itemNo, 0, -1, -1, NULL, NULL,
itemCheck.tag);
}
#else
i_this->field_0x75C = fopAcM_createItemForPresentDemo(&a_this->current.pos, 0xE0, 0,
-1, -1, NULL, NULL);
+16 -3
View File
@@ -16,6 +16,10 @@
#include "f_op/f_op_camera_mng.h"
#include <cstring>
#if TARGET_PC
#include "mods/items.h"
#endif
class daE_RDB_HIO_c : public JORReflexible {
public:
daE_RDB_HIO_c();
@@ -1250,9 +1254,18 @@ static void demo_camera(e_rdb_class* i_this) {
}
if (iVar1 != 0) {
daPy_getPlayerActorClass()->changeDemoMode(11,
DUSK_ITEM_CHECK_EXPR("bulblin_key:D_MN09", dItemNo_SMALL_KEY_e, &i_this->enemy), 0,
0);
#if TARGET_PC
const auto itemCheck = dusk::mods::item_check_commit(
ITEM_CHECK_BULBLIN_KEY, dItemNo_SMALL_KEY_e, &i_this->enemy);
if (itemCheck.itemNo == dItemNo_NONE_e) {
dusk::mods::item_check_complete(itemCheck, &i_this->enemy);
}
daPy_getPlayerActorClass()->changeDemoMode(
11, itemCheck.itemNo == dItemNo_NONE_e ? 0 : itemCheck.itemNo,
itemCheck.itemNo == dItemNo_NONE_e ? 0 : static_cast<int>(itemCheck.tag), 0);
#else
daPy_getPlayerActorClass()->changeDemoMode(11, dItemNo_SMALL_KEY_e, 0, 0);
#endif
i_this->mDemoMode = 12;
i_this->field_0x10aa = 0;
i_this->field_0xfe5 = 1;
+5 -5
View File
@@ -242,21 +242,21 @@ BOOL daItemBase_c::chkFlag(int i_flag) {
}
s8 daItemBase_c::getTevFrm() {
return dItem_data::getTevFrm(m_itemNo);
return dItem_data::getTevFrm(DUSK_IF_ELSE(getDisplayItemNo(), m_itemNo));
}
s8 daItemBase_c::getBtpFrm() {
return dItem_data::getBtpFrm(m_itemNo);
return dItem_data::getBtpFrm(DUSK_IF_ELSE(getDisplayItemNo(), m_itemNo));
}
u8 daItemBase_c::getShadowSize() {
return dItem_data::getShadowSize(m_itemNo);
return dItem_data::getShadowSize(DUSK_IF_ELSE(getDisplayItemNo(), m_itemNo));
}
u8 daItemBase_c::getCollisionH() {
return dItem_data::getH(m_itemNo);
return dItem_data::getH(DUSK_IF_ELSE(getDisplayItemNo(), m_itemNo));
}
u8 daItemBase_c::getCollisionR() {
return dItem_data::getR(m_itemNo);
return dItem_data::getR(DUSK_IF_ELSE(getDisplayItemNo(), m_itemNo));
}
+32
View File
@@ -27,8 +27,10 @@
#if TARGET_PC
#include "dusk/frame_interpolation.h"
#include "dusk/mods/item.hpp"
#include "dusk/settings.h"
#include "dusk/version.hpp"
#include "mods/items.h"
#endif
class dmg_rod_HIO_c : public JORReflexible {
@@ -2955,7 +2957,17 @@ static void lure_heart(dmg_rod_class* i_this) {
if (obj_life != NULL) {
fopAcM_delete(obj_life);
fopAcM_onItem(obj_life, 0x80);
#if TARGET_PC
const auto itemCheck = dusk::mods::item_check_commit(
ITEM_CHECK_FISHING_HEART_PIECE, dItemNo_KAKERA_HEART_e, actor);
if (itemCheck.itemNo == dItemNo_KAKERA_HEART_e) {
execItemGet(dItemNo_KAKERA_HEART_e, itemCheck.tag, actor);
} else if (itemCheck.itemNo == dItemNo_NONE_e) {
dusk::mods::item_check_complete(itemCheck, actor);
}
#else
execItemGet(dItemNo_KAKERA_HEART_e);
#endif
u8 eventReg = dComIfGs_getEventReg(0xECFF);
eventReg |= (u8)0x40;
dComIfGs_setEventReg(0xECFF, eventReg);
@@ -4090,7 +4102,15 @@ static void uki_catch(dmg_rod_class* i_this) {
} else if (mgfish->mCaughtType == MG_CATCH_BIN) {
i_this->msgflow.init(actor, 0x139A, 0, NULL);
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[468]);
#if TARGET_PC
const auto itemCheck = dusk::mods::item_check_commit(
ITEM_CHECK_FISHING_BOTTLE, dItemNo_EMPTY_BOTTLE_e, actor);
if (itemCheck.itemNo == dItemNo_EMPTY_BOTTLE_e) {
dComIfGs_setEmptyBottle();
}
#else
dComIfGs_setEmptyBottle();
#endif
} else if (mgfish->mCaughtType == MG_CATCH_KN) {
i_this->msgflow.init(actor, 0x139C, 0, NULL);
} else if (mgfish->mCaughtType == MG_CATCH_ED) {
@@ -4167,6 +4187,18 @@ static void uki_catch(dmg_rod_class* i_this) {
if (mgfish->mCaughtType == MG_CATCH_LH) {
dComIfGp_setItemRupeeCount(10.0f + cM_rndF(40.9f));
}
#if TARGET_PC
else if (mgfish->mCaughtType == MG_CATCH_BIN)
{
const auto itemCheck = dusk::mods::item_check_commit(
ITEM_CHECK_FISHING_BOTTLE, dItemNo_EMPTY_BOTTLE_e, actor);
if (itemCheck.itemNo == dItemNo_EMPTY_BOTTLE_e ||
itemCheck.itemNo == dItemNo_NONE_e)
{
dusk::mods::item_check_complete(itemCheck, actor);
}
}
#endif
} else {
dComIfGs_addFishNum(fish_kind);
if (i_this->field_0x14c0 != 0) {
+6 -2
View File
@@ -1806,17 +1806,21 @@ int daNpcChin_c::_Evt_GameSucceed_CutMain(const int& param_0) {
#if TARGET_PC
const char* itemCheckName = nullptr;
u32 itemGiveTag = 0;
if (itemId1 == dItemNo_ARROW_LV2_e) {
itemCheckName = "star_reward_1";
} else if (itemId1 == dItemNo_ARROW_LV3_e) {
itemCheckName = "star_reward_2";
}
if (itemCheckName != nullptr) {
itemId1 = dusk::mods::item_check(itemCheckName, itemId1, this);
const auto itemCheck =
dusk::mods::item_check_commit(itemCheckName, itemId1, this);
itemId1 = itemCheck.itemNo;
itemGiveTag = itemCheck.tag;
}
#endif
fpc_ProcID itemId2 = fopAcM_createItemForPresentDemo(&current.pos, itemId1, 0, -1, -1,
0, 0 IF_DUSK_ARG(dusk::mods::item_give_tag(itemCheckName)));
0, 0 IF_DUSK_ARG(itemGiveTag));
if (itemId2 != -1) {
dComIfGp_event_setItemPartnerId(itemId2);
}
+11 -6
View File
@@ -12,6 +12,9 @@
#include "d/actor/d_a_npc_gra.h"
#include "d/actor/d_a_tag_gra.h"
#include "Z2AudioLib/Z2Instances.h"
#if TARGET_PC
#include "mods/items.h"
#endif
#include <cstring>
DUSK_GAME_DATA const daNpc_grA_HIOParam daNpc_grA_Param_c::m = {
@@ -1323,7 +1326,7 @@ BOOL daNpc_grA_c::isDelete() {
return FALSE;
}
fopAcM_createItemForBoss(&current.pos, 0x21, fopAcM_GetRoomNo(this), NULL, NULL, 0.0f, 0.0f,
0x80);
0x80 IF_DUSK_ARG(ITEM_CHECK_GORON_SPRINGWATER_RUSH));
return TRUE;
}
return TRUE;
@@ -2812,7 +2815,7 @@ BOOL daNpc_grA_c::ECut_carrySpaWater(int i_staffID) {
c.y += 200.0f;
csXyz c2(0, fopAcM_searchPlayerAngleY(this), 0);
fopAcM_createItemForBoss(&c, 0x21, fopAcM_GetRoomNo(this), &c2, NULL, 0.0f, 20.0f,
0x80);
0x80 IF_DUSK_ARG(ITEM_CHECK_GORON_SPRINGWATER_RUSH));
} break;
}
}
@@ -4019,14 +4022,16 @@ BOOL daNpc_grA_c::talk(void*) {
if (r26 && talkProc(NULL, TRUE, NULL)) {
if (mFlow.getEventId(&sp8) == 1) {
#if TARGET_PC
const char* itemCheckName = nullptr;
u32 itemGiveTag = 0;
if (sp8 == dItemNo_BOMB_IN_BAG_e) {
itemCheckName = "goron_reward:F_SP113";
sp8 = dusk::mods::item_check(itemCheckName, sp8, this);
const auto itemCheck =
dusk::mods::item_check_commit("goron_reward:F_SP113", sp8, this);
sp8 = itemCheck.itemNo;
itemGiveTag = itemCheck.tag;
}
#endif
field_0x1480 = fopAcM_createItemForPresentDemo(&current.pos, sp8, 0, -1, -1, NULL,
NULL IF_DUSK_ARG(dusk::mods::item_give_tag(itemCheckName)));
NULL IF_DUSK_ARG(itemGiveTag));
if (field_0x1480 != fpcM_ERROR_PROCESS_ID_e) {
s16 r25 = dComIfGp_getEventManager().getEventIdx(this, "DEFAULT_GETITEM", 0xff);
dComIfGp_getEvent()->reset(this);
+5 -3
View File
@@ -1495,9 +1495,11 @@ int daNpcIns_c::talk(void* param_1) {
#if TARGET_PC
u32 itemGiveTag = 0;
if (s_givenInsectId != dItemNo_NONE_e) {
itemNo = dusk::mods::item_check_bug(
s_givenInsectId, itemNo & 0xFF, this);
itemGiveTag = dusk::mods::item_give_tag_bug(s_givenInsectId);
const auto itemCheck = dusk::mods::item_check_commit(
dusk::mods::item_give_tag_bug(s_givenInsectId), itemNo & 0xFF,
this);
itemNo = itemCheck.itemNo;
itemGiveTag = itemCheck.tag;
s_givenInsectId = dItemNo_NONE_e;
}
#endif
+6 -4
View File
@@ -1182,15 +1182,17 @@ int daNpc_Kkri_c::talk(void*) {
case 1:
if (mItemPartnerId == fpcM_ERROR_PROCESS_ID_e) {
#if TARGET_PC
const char* itemCheckName = nullptr;
u32 itemGiveTag = 0;
if (item_no == dItemNo_OIL_BOTTLE3_e) {
itemCheckName = "coro_bottle";
item_no = dusk::mods::item_check(itemCheckName, item_no, this);
const auto itemCheck =
dusk::mods::item_check_commit("coro_bottle", item_no, this);
item_no = itemCheck.itemNo;
itemGiveTag = itemCheck.tag;
}
#endif
mItemPartnerId = fopAcM_createItemForPresentDemo(&current.pos, item_no,
0, -1, -1, NULL,
NULL IF_DUSK_ARG(dusk::mods::item_give_tag(itemCheckName)));
NULL IF_DUSK_ARG(itemGiveTag));
}
if (fopAcM_IsExecuting(mItemPartnerId)) {
+6 -4
View File
@@ -1192,14 +1192,16 @@ int daNpc_myna2_c::ECut_gameGoalSuccess(int i_staffId) {
int itemNo = 0;
if (mFlow.getEventId(&itemNo) == 1) {
#if TARGET_PC
const char* itemCheckName = nullptr;
u32 itemGiveTag = 0;
if (itemNo == dItemNo_KAKERA_HEART_e) {
itemCheckName = "plumm_minigame_reward";
itemNo = dusk::mods::item_check(itemCheckName, itemNo, this);
const auto itemCheck =
dusk::mods::item_check_commit("plumm_minigame_reward", itemNo, this);
itemNo = itemCheck.itemNo;
itemGiveTag = itemCheck.tag;
}
#endif
mItemPid = fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1, -1, NULL,
NULL IF_DUSK_ARG(dusk::mods::item_give_tag(itemCheckName)));
NULL IF_DUSK_ARG(itemGiveTag));
}
break;
}
+6 -2
View File
@@ -960,17 +960,21 @@ int daNpc_Pouya_c::cutHaveFavorToAsk(int param_0) {
if (mItemPartnerId == fpcM_ERROR_PROCESS_ID_e) {
#if TARGET_PC
const char* itemCheckName = nullptr;
u32 itemGiveTag = 0;
if (local_64 == dItemNo_DROP_BOTTLE_e) {
itemCheckName = "jovani_reward_1";
} else if (local_64 == dItemNo_SILVER_RUPEE_e) {
itemCheckName = "jovani_reward_2";
}
if (itemCheckName != nullptr) {
local_64 = dusk::mods::item_check(itemCheckName, local_64, this);
const auto itemCheck =
dusk::mods::item_check_commit(itemCheckName, local_64, this);
local_64 = itemCheck.itemNo;
itemGiveTag = itemCheck.tag;
}
#endif
mItemPartnerId = fopAcM_createItemForPresentDemo(&current.pos, local_64, 0,
-1, -1, 0, 0 IF_DUSK_ARG(dusk::mods::item_give_tag(itemCheckName)));
-1, -1, 0, 0 IF_DUSK_ARG(itemGiveTag));
}
if (fopAcM_IsExecuting(mItemPartnerId)) {
field_0xfce = 1;
+6 -2
View File
@@ -2611,17 +2611,21 @@ BOOL daNpc_zrA_c::ECut_thanksBlast(int i_staffID) {
if (mFlow.getEventId(&item_id) == 1) {
#if TARGET_PC
const char* itemCheckName = nullptr;
u32 itemGiveTag = 0;
if (item_id == dItemNo_BOMB_IN_BAG_e) {
itemCheckName = "iza_reward_1";
} else if (item_id == dItemNo_BOMB_BAG_LV2_e) {
itemCheckName = "iza_reward_2";
}
if (itemCheckName != nullptr) {
item_id = dusk::mods::item_check(itemCheckName, item_id, this);
const auto itemCheck =
dusk::mods::item_check_commit(itemCheckName, item_id, this);
item_id = itemCheck.itemNo;
itemGiveTag = itemCheck.tag;
}
#endif
mItemID = fopAcM_createItemForPresentDemo(&current.pos, item_id, 0, -1, -1, NULL,
NULL IF_DUSK_ARG(dusk::mods::item_give_tag(itemCheckName)));
NULL IF_DUSK_ARG(itemGiveTag));
}
field_0x9eb = true;
break;
+72 -19
View File
@@ -14,6 +14,11 @@
#include "d/actor/d_a_obj_ystone.h"
#include <cstring>
#if TARGET_PC
#include "dusk/mods/item.hpp"
#include "mods/items.h"
#endif
static DUSK_CONST char* l_arcName = "ef_Portal";
static char const* l_clearEvName[9] = {
@@ -77,6 +82,27 @@ static int getNowLevel() {
return -1;
}
#if TARGET_PC
static const char* dungeon_reward_check_name(int level) {
switch (level) {
case 0:
return ITEM_CHECK_DUNGEON_REWARD_FOREST;
case 1:
return ITEM_CHECK_DUNGEON_REWARD_GORON;
case 2:
return ITEM_CHECK_DUNGEON_REWARD_LAKEBED;
case 4:
return ITEM_CHECK_DUNGEON_REWARD_SNOWPEAK;
case 5:
return ITEM_CHECK_DUNGEON_REWARD_TIME;
case 6:
return ITEM_CHECK_DUNGEON_REWARD_CITY;
default:
return nullptr;
}
}
#endif
void daObjBossWarp_c::initBaseMtx() {
scale.y = 0.15f;
mpModel->setBaseScale(scale);
@@ -485,6 +511,9 @@ int daObjBossWarp_c::demoProc() {
player->onSceneChangeArea(scene, 0xff, 0);
break;
case 4: // STONE_FALL
#if TARGET_PC
{
#endif
if (ystone != NULL) {
mYstonePos = ystone->current.pos;
if (getNowLevel() < 3) {
@@ -506,28 +535,52 @@ int daObjBossWarp_c::demoProc() {
mDoMtx_stack_c::multVec(&mYstoneTargetPos, &mYstoneTargetPos);
mYstonePos.x = mYstoneTargetPos.x;
mYstonePos.z = mYstoneTargetPos.z;
switch (getNowLevel()) {
case 0:
dComIfGs_onCollectCrystal(0);
break;
case 1:
dComIfGs_onCollectCrystal(1);
break;
case 2:
dComIfGs_onCollectCrystal(2);
break;
case 4:
dComIfGs_onCollectMirror(1);
break;
case 5:
dComIfGs_onCollectMirror(2);
break;
case 6:
dComIfGs_onCollectMirror(3);
break;
#if TARGET_PC
int level = getNowLevel();
const char* checkName = dungeon_reward_check_name(level);
dusk::mods::ItemCheckResult itemCheck{};
bool applyVanillaReward = true;
if (checkName != nullptr) {
itemCheck = dusk::mods::item_check_commit(checkName, dItemNo_NONE_e, this);
applyVanillaReward = itemCheck.itemNo == dItemNo_NONE_e;
}
if (applyVanillaReward) {
switch (level) {
#else
switch (getNowLevel()) {
#endif
case 0:
dComIfGs_onCollectCrystal(0);
break;
case 1:
dComIfGs_onCollectCrystal(1);
break;
case 2:
dComIfGs_onCollectCrystal(2);
break;
case 4:
dComIfGs_onCollectMirror(1);
break;
case 5:
dComIfGs_onCollectMirror(2);
break;
case 6:
dComIfGs_onCollectMirror(3);
break;
}
#if TARGET_PC
if (checkName != nullptr) {
dusk::mods::item_check_complete(itemCheck, this);
}
} else {
dusk::mods::item_check_enqueue(itemCheck, dusk::mods::ItemGiveMode::Silent);
}
#endif
mCounter = 0;
break;
#if TARGET_PC
}
#endif
case 5: // STONE_MIDNA
mCounter = 0;
break;
+38 -15
View File
@@ -158,8 +158,8 @@ void daItem_c::CreateInit() {
mCcCyl.SetCoHitCallback(itemGetCoCallBack);
mCcCyl.SetTgHitCallback(itemGetTgCallBack);
f32 cylHeight = dItem_data::getH(m_itemNo);
f32 cylRadius = dItem_data::getR(m_itemNo);
f32 cylHeight = DUSK_IF_ELSE(getCollisionH(), dItem_data::getH(m_itemNo));
f32 cylRadius = DUSK_IF_ELSE(getCollisionR(), dItem_data::getR(m_itemNo));
if (scale.x > 1.0f) {
cylHeight *= scale.x;
@@ -267,12 +267,13 @@ int daItem_c::_daItem_create() {
#if TARGET_PC
const u32 params = fopAcM_GetParam(this);
mOriginalItemNo = params & 0xFF;
const u8 resolvedItem = dusk::mods::item_check_freestanding(
daItem_prm::getItemBitNo(this), mOriginalItemNo, this);
mItemOverridden = resolvedItem != mOriginalItemNo;
mItemGiveTag = dusk::mods::item_give_tag_freestanding(daItem_prm::getItemBitNo(this));
const auto [item, displayItem] =
dusk::mods::item_check_resolve(mItemGiveTag, mOriginalItemNo, this);
mItemOverridden = item != mOriginalItemNo;
setDisplayItemNo(displayItem);
if (mItemOverridden) {
fopAcM_SetParam(this, (params & 0xFFFFFF00) | resolvedItem);
fopAcM_SetParam(this, (params & 0xFFFFFF00) | item);
}
#endif
field_0x95d = true;
@@ -287,7 +288,11 @@ int daItem_c::_daItem_create() {
BOOL flag = dItem_data::chkFlag(m_itemNo, 2);
#if DEBUG
#if TARGET_PC
if (dItem_fieldModelArc(getDisplayItemNo()) == NULL) {
#else
if (dItem_data::getFieldArc(m_itemNo) == NULL) {
#endif
// "Item Num<%d>: No Resource Archive specified!!\n"
OS_REPORT_ERROR("アイテム番号<%d>:リソースのアーカイブ指定がありません!!\n", m_itemNo);
return cPhs_ERROR_e;
@@ -319,10 +324,22 @@ int daItem_c::_daItem_create() {
if (flag) {
CreateInit();
} else {
#if TARGET_PC
const u8 displayItemNo = getDisplayItemNo();
phase_state = dComIfG_resLoad(&mPhase, dItem_fieldModelArc(displayItemNo));
#else
phase_state = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo));
#endif
if (phase_state == cPhs_COMPLEATE_e) {
#if TARGET_PC
const bool useModelFallback = dItem_data::getFieldArc(displayItemNo) == NULL;
if (!fopAcM_entrySolidHeap(this,
useModelFallback ? CheckItemCreateHeap : CheckFieldItemCreateHeap,
useModelFallback ? 0x4000 : dItem_data::getFieldHeapSize(displayItemNo)))
#else
if (!fopAcM_entrySolidHeap(this, CheckFieldItemCreateHeap,
dItem_data::getFieldHeapSize(m_itemNo)))
#endif
{
return cPhs_ERROR_e;
}
@@ -339,7 +356,7 @@ int daItem_c::_daItem_execute() {
CountTimer();
eyePos = current.pos;
eyePos.y += (f32)dItem_data::getH(m_itemNo) / 2;
eyePos.y += (f32)DUSK_IF_ELSE(getCollisionH(), dItem_data::getH(m_itemNo)) / 2;
attention_info.position = current.pos;
@@ -412,7 +429,11 @@ int daItem_c::_daItem_delete() {
mSparkleEmtr.remove();
}
#if TARGET_PC
DeleteBase(dItem_fieldModelArc(getDisplayItemNo()));
#else
DeleteBase(dItem_data::getFieldArc(m_itemNo));
#endif
return 1;
}
@@ -520,9 +541,10 @@ void daItem_c::procInitGetDemoEvent() {
#if TARGET_PC
const u8 displayItemNo = m_itemNo;
if (mItemOverridden) {
m_itemNo = dusk::mods::item_check_tagged(mItemGiveTag, mOriginalItemNo, this);
}
const auto itemCheck = dusk::mods::item_check_commit(mItemGiveTag, mOriginalItemNo, this);
m_itemNo = itemCheck.itemNo;
mItemGiveTag = itemCheck.tag;
mItemOverridden = m_itemNo != mOriginalItemNo;
#endif
m_item_id = fopAcM_createItemForTrBoxDemo(
&current.pos, m_itemNo, -1, fopAcM_GetRoomNo(this), NULL, NULL IF_DUSK_ARG(mItemGiveTag));
@@ -581,8 +603,8 @@ void daItem_c::procInitBoomerangCarry() {
scale = mItemScale;
mBoomerangMove.initOffset(&current.pos);
u8 height = dItem_data::getH(m_itemNo);
u8 radius = dItem_data::getR(m_itemNo);
u8 height = DUSK_IF_ELSE(getCollisionH(), dItem_data::getH(m_itemNo));
u8 radius = DUSK_IF_ELSE(getCollisionR(), dItem_data::getR(m_itemNo));
mCcCyl.SetR((f32)radius * 2.0f);
mCcCyl.SetH((f32)height * 2.0f);
mCcCyl.OnCoSPrmBit(1);
@@ -907,9 +929,10 @@ void daItem_c::itemGetNextExecute() {
void daItem_c::itemGet() {
#if TARGET_PC
const u8 displayItemNo = m_itemNo;
if (mItemOverridden) {
m_itemNo = dusk::mods::item_check_tagged(mItemGiveTag, mOriginalItemNo, this);
}
const auto itemCheck = dusk::mods::item_check_commit(mItemGiveTag, mOriginalItemNo, this);
m_itemNo = itemCheck.itemNo;
mItemGiveTag = itemCheck.tag;
mItemOverridden = m_itemNo != mOriginalItemNo;
#endif
switch (m_itemNo) {
#if TARGET_PC
+45 -12
View File
@@ -6,6 +6,7 @@
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_obj_life_container.h"
#include "d/d_a_itembase_static.h"
#include "d/d_com_inf_game.h"
#include "d/actor/d_a_player.h"
#include "d/d_item_data.h"
@@ -87,8 +88,8 @@ int daObjLife_c::Create() {
mCcCyl.SetStts(&mCcStts);
mCcCyl.SetCoHitCallback(lifeGetCoCallBack);
mCcCyl.SetTgHitCallback(lifeGetTgCallBack);
mCcCyl.SetR(dItem_data::getR(m_itemNo));
mCcCyl.SetH(dItem_data::getH(m_itemNo));
mCcCyl.SetR(DUSK_IF_ELSE(getCollisionR(), dItem_data::getR(m_itemNo)));
mCcCyl.SetH(DUSK_IF_ELSE(getCollisionH(), dItem_data::getH(m_itemNo)));
fopAcM_SetCullSize(this, fopAc_CULLSPHERE_0_e);
fopAcM_SetGravity(this, -3.2f);
@@ -151,16 +152,30 @@ int daObjLife_c::create() {
const u8 parameterItemNo = params & 0xFF;
if (mItemGiveOriginalNo == dItemNo_NONE_e) {
mOriginalItemNo = parameterItemNo;
const u8 resolvedItem =
dusk::mods::item_check_freestanding(getSaveBitNo(), mOriginalItemNo, this);
mItemGiveTag = dusk::mods::item_give_tag_freestanding(getSaveBitNo());
mItemOverridden = resolvedItem != mOriginalItemNo;
const auto [item, displayItem] =
dusk::mods::item_check_resolve(mItemGiveTag, mOriginalItemNo, this);
setDisplayItemNo(displayItem);
mItemOverridden = item != mOriginalItemNo;
if (mItemOverridden) {
fopAcM_SetParam(this, (params & 0xFFFFFF00) | resolvedItem);
fopAcM_SetParam(this, (params & 0xFFFFFF00) | item);
}
} else if (mGoldenWolfItem) {
mOriginalItemNo = mItemGiveOriginalNo;
mItemGiveTag = dusk::mods::item_give_tag_golden_wolf(static_cast<u16>(field_0x938));
const auto [item, displayItem] =
dusk::mods::item_check_resolve(mItemGiveTag, mOriginalItemNo, this);
setDisplayItemNo(displayItem);
mItemOverridden = item != mOriginalItemNo;
if (item != parameterItemNo) {
fopAcM_SetParam(this, (params & 0xFFFFFF00) | item);
}
} else {
mOriginalItemNo = mItemGiveOriginalNo;
mItemOverridden = parameterItemNo != mItemGiveOriginalNo;
setDisplayItemNo(
dusk::mods::item_check_resolve(mItemGiveTag, parameterItemNo, this)
.display_item);
mItemOverridden = parameterItemNo != mOriginalItemNo;
}
mOverrideHover =
mItemOverridden &&
@@ -184,11 +199,24 @@ int daObjLife_c::create() {
return cPhs_ERROR_e;
}
#if TARGET_PC
// Resolved items may have no field model; display their get-demo model instead.
const u8 displayItemNo = getDisplayItemNo();
const bool useGetModel = dItem_data::getFieldArc(displayItemNo) == NULL;
int phase_state = dComIfG_resLoad(&mPhase, dItem_fieldModelArc(displayItemNo));
if (phase_state == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(
this, useGetModel ? CheckItemCreateHeap : CheckFieldItemCreateHeap, 0x4000))
{
return cPhs_ERROR_e;
}
#else
int phase_state = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo));
if (phase_state == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, CheckFieldItemCreateHeap, 0x4000)) {
return cPhs_ERROR_e;
}
#endif
if (!Create()) {
return cPhs_ERROR_e;
@@ -325,9 +353,10 @@ int daObjLife_c::initActionOrderGetDemo() {
#if TARGET_PC
const u8 displayItemNo = m_itemNo;
if (mItemOverridden) {
m_itemNo = dusk::mods::item_check_tagged(mItemGiveTag, mOriginalItemNo, this);
}
const auto itemCheck = dusk::mods::item_check_commit(mItemGiveTag, mOriginalItemNo, this);
m_itemNo = itemCheck.itemNo;
mItemGiveTag = itemCheck.tag;
mItemOverridden = m_itemNo != mOriginalItemNo;
#endif
mItemId = fopAcM_createItemForTrBoxDemo(
&current.pos, m_itemNo, -1, fopAcM_GetRoomNo(this), NULL, NULL IF_DUSK_ARG(mItemGiveTag));
@@ -397,8 +426,8 @@ int daObjLife_c::actionInitBoomerangCarry() {
mCcCyl.OnTgSPrmBit(1);
mCcCyl.OnCoSPrmBit(1);
f32 height = dItem_data::getH(m_itemNo) * 4.0f;
f32 radius = dItem_data::getR(m_itemNo) * 4.0f;
f32 height = DUSK_IF_ELSE(getCollisionH(), dItem_data::getH(m_itemNo)) * 4.0f;
f32 radius = DUSK_IF_ELSE(getCollisionR(), dItem_data::getR(m_itemNo)) * 4.0f;
mCcCyl.SetR(radius);
mCcCyl.SetH(height);
@@ -519,7 +548,11 @@ int daObjLife_c::_delete() {
endEffect00();
endEffect02();
#if TARGET_PC
DeleteBase(dItem_fieldModelArc(getDisplayItemNo()));
#else
DeleteBase(dItem_data::getFieldArc(m_itemNo));
#endif
return 1;
}
+40 -1
View File
@@ -1,6 +1,6 @@
/**
* @file d_a_obj_master_sword.cpp
*
*
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
@@ -10,6 +10,12 @@
#include "d/d_com_inf_game.h"
#include "d/d_meter2_info.h"
#if TARGET_PC
#include "d/d_item.h"
#include "dusk/mods/item.hpp"
#include "mods/items.h"
#endif
DUSK_GAME_DATA daObjMasterSword_Attr_c const daObjMasterSword_c::mAttr = {1.0f};
void daObjMasterSword_c::initBaseMtx() {
@@ -145,7 +151,11 @@ void daObjMasterSword_c::create_init() {
int daObjMasterSword_c::create() {
fopAcM_ct(this, daObjMasterSword_c);
#if TARGET_PC
if (dComIfGs_isEventBit(dSv_event_flag_c::F_0264)) {
#else
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[getFlagNo()])) {
#endif
return cPhs_ERROR_e;
}
@@ -186,12 +196,41 @@ int daObjMasterSword_c::execute() {
mBrk.play();
if (dComIfGs_isTmpBit(dSv_event_tmp_flag_c::tempBitLabels[73])) {
#if TARGET_PC
const auto masterSword = dusk::mods::item_check_commit(
ITEM_CHECK_MASTER_SWORD, dItemNo_MASTER_SWORD_e, this);
if (masterSword.itemNo == dItemNo_MASTER_SWORD_e) {
dComIfGs_onItemFirstBit(dItemNo_MASTER_SWORD_e);
dMeter2Info_setSword(dItemNo_MASTER_SWORD_e, false);
dComIfGs_setSelectEquipSword(dItemNo_MASTER_SWORD_e);
dusk::mods::item_check_complete(masterSword, this);
} else if (masterSword.itemNo == dItemNo_NONE_e) {
dusk::mods::item_check_complete(masterSword, this);
} else {
dusk::mods::item_check_enqueue(masterSword, dusk::mods::ItemGiveMode::Demo);
}
dComIfGp_setItemLifeCount(dComIfGs_getMaxLife(), 0);
const auto shadowCrystal = dusk::mods::item_check_commit(
ITEM_CHECK_SHADOW_CRYSTAL, dItemNo_SHADOW_CRYSTAL_e, this);
if (shadowCrystal.itemNo == dItemNo_SHADOW_CRYSTAL_e) {
execItemGet(shadowCrystal.itemNo, shadowCrystal.tag, this);
} else if (shadowCrystal.itemNo == dItemNo_NONE_e) {
dusk::mods::item_check_complete(shadowCrystal, this);
} else {
dusk::mods::item_check_enqueue(shadowCrystal, dusk::mods::ItemGiveMode::Demo);
}
dComIfGs_onEventBit(dSv_event_flag_c::F_0264);
#else
dComIfGs_onItemFirstBit(dItemNo_MASTER_SWORD_e);
dMeter2Info_setSword(dItemNo_MASTER_SWORD_e, false);
dComIfGs_setSelectEquipSword(dItemNo_MASTER_SWORD_e);
dComIfGp_setItemLifeCount(dComIfGs_getMaxLife(), 0);
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[getFlagNo()]);
#endif
fopAcM_delete(this);
}
+1 -1
View File
@@ -109,7 +109,7 @@ int daItemShield_c::__CreateHeap() {
int daItemShield_c::create() {
fopAcM_ct(this, daItemShield_c);
m_itemNo = dItemNo_WOOD_SHIELD_e;
DUSK_ITEM_CHECK("ordon_shield", m_itemNo, this);
DUSK_ITEM_CHECK_PREVIEW("ordon_shield", m_itemNo, this);
if (fopAcM_isSwitch(this, getSwBit2())) {
OS_REPORT("木の盾:もう取ったので出ません\n");
return cPhs_ERROR_e;
+53 -7
View File
@@ -1,6 +1,6 @@
/**
* @file d_a_obj_smallkey.cpp
*
*
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
@@ -119,9 +119,9 @@ int daKey_c::Create() {
mCcCyl.SetStts(&mCcStts);
mCcCyl.SetCoHitCallback(keyGetCoCallBack);
mCcCyl.SetTgHitCallback(keyGetTgCallBack);
mCcCyl.SetR(dItem_data::getR(m_itemNo));
mCcCyl.SetH(dItem_data::getH(m_itemNo));
mCcCyl.SetR(DUSK_IF_ELSE(getCollisionR(), dItem_data::getR(m_itemNo)));
mCcCyl.SetH(DUSK_IF_ELSE(getCollisionH(), dItem_data::getH(m_itemNo)));
fopAcM_SetCullSize(this, fopAc_CULLSPHERE_0_e);
if (getSwNo() == 0xFF) {
@@ -155,7 +155,21 @@ int daKey_c::create() {
mIsPrmInit = TRUE;
}
#if TARGET_PC
mItemGiveTag = dusk::mods::item_give_tag_freestanding(getSaveBitNo());
const auto [item, displayItem] =
dusk::mods::item_check_resolve(mItemGiveTag, dItemNo_SMALL_KEY_e, this);
m_itemNo = item;
if (m_itemNo == dItemNo_NONE_e) {
// Keep the pickup visible until the empty check is collected.
m_itemNo = dItemNo_SMALL_KEY_e;
setDisplayItemNo(dItemNo_NONE_e);
} else {
setDisplayItemNo(displayItem);
}
#else
m_itemNo = dItemNo_SMALL_KEY_e;
#endif
if (strcmp(dComIfGp_getStartStageName(), "F_SP118") == 0) {
OS_REPORT(" SMKEY 0\n");
@@ -170,9 +184,21 @@ int daKey_c::create() {
return cPhs_ERROR_e;
}
#if TARGET_PC
const u8 displayItemNo = getDisplayItemNo();
int phase_state = dComIfG_resLoad(&mPhase, dItem_fieldModelArc(displayItemNo));
#else
int phase_state = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo));
#endif
if (phase_state == cPhs_COMPLEATE_e) {
#if TARGET_PC
const bool useModelFallback = dItem_data::getFieldArc(displayItemNo) == NULL;
if (!fopAcM_entrySolidHeap(
this, useModelFallback ? CheckItemCreateHeap : CheckFieldItemCreateHeap, 0x4000))
{
#else
if (!fopAcM_entrySolidHeap(this, CheckFieldItemCreateHeap, 0x840)) {
#endif
return cPhs_ERROR_e;
}
@@ -317,10 +343,26 @@ int daKey_c::initActionOrderGetDemo() {
hide();
effectStop();
#if TARGET_PC
const auto itemCheck =
dusk::mods::item_check_commit(mItemGiveTag, dItemNo_SMALL_KEY_e, this);
m_itemNo = itemCheck.itemNo;
if (m_itemNo == dItemNo_NONE_e) {
dusk::mods::item_check_complete(itemCheck, this);
dComIfGs_onTbox(getSaveBitNo());
dTres_c::offStatus(getSaveBitNo(), 1);
dComIfGp_event_reset();
fopAcM_delete(this);
return 1;
}
#endif
fopAcM_orderItemEvent(this, 0, 0);
eventInfo.onCondition(8);
mItemId = fopAcM_createItemForTrBoxDemo(&current.pos, m_itemNo, -1, fopAcM_GetRoomNo(this), NULL, NULL);
mItemId = fopAcM_createItemForTrBoxDemo(
&current.pos, m_itemNo, -1, fopAcM_GetRoomNo(this), NULL,
NULL IF_DUSK_ARG(itemCheck.tag));
JUT_ASSERT(699, mItemId != fpcM_ERROR_PROCESS_ID_e);
setStatus(STATUS_ORDER_GET_DEMO_e);
@@ -387,8 +429,8 @@ int daKey_c::actionInitBoomerangCarry() {
mCcCyl.OnTgSPrmBit(1);
mCcCyl.OnCoSPrmBit(1);
u8 height = dItem_data::getH(m_itemNo);
u8 radius = dItem_data::getR(m_itemNo);
u8 height = DUSK_IF_ELSE(getCollisionH(), dItem_data::getH(m_itemNo));
u8 radius = DUSK_IF_ELSE(getCollisionR(), dItem_data::getR(m_itemNo));
mCcCyl.SetR(4.0f * radius);
mCcCyl.SetH(4.0f * height);
@@ -527,7 +569,11 @@ int daKey_c::draw() {
int daKey_c::_delete() {
effectStop();
#if TARGET_PC
DeleteBase(dItem_fieldModelArc(getDisplayItemNo()));
#else
DeleteBase(dItem_data::getFieldArc(m_itemNo));
#endif
return 1;
}
+1 -1
View File
@@ -37,7 +37,7 @@ int daObjSword_c::Create() {
cPhs_Step daObjSword_c::create() {
fopAcM_ct(this, daObjSword_c);
m_itemNo = 0x28;
DUSK_ITEM_CHECK("ordon_sword", m_itemNo, this);
DUSK_ITEM_CHECK_PREVIEW("ordon_sword", m_itemNo, this);
if (fopAcM_isItem(this, getItemBit())) {
return cPhs_ERROR_e;
}
+1 -1
View File
@@ -32,7 +32,7 @@ int daObjZCloth_c::Create() {
int daObjZCloth_c::create() {
fopAcM_ct(this, daObjZCloth_c);
m_itemNo = 0x31;
DUSK_ITEM_CHECK("zora_armor", m_itemNo, this);
DUSK_ITEM_CHECK_PREVIEW("zora_armor", m_itemNo, this);
int phase = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo));
if (phase == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, (heapCallbackFunc)CheckFieldItemCreateHeap, 0x2fb0)) {
+11 -9
View File
@@ -105,17 +105,19 @@ const char* daShopItem_c::getShopArcname() {
#if TARGET_PC
if (m_itemNo != dItemNo_NONE_e && mItemGiveOriginalNo == dItemNo_NONE_e) {
mItemGiveOriginalNo = m_itemNo;
const u8 resolvedItem = dusk::mods::item_check_shop(mItemGiveOriginalNo, this);
mItemOverridden = resolvedItem != mItemGiveOriginalNo;
mItemGiveTag = dusk::mods::item_give_tag_shop(mItemGiveOriginalNo);
const auto [_, displayItem] =
dusk::mods::item_check_resolve(mItemGiveTag, mItemGiveOriginalNo, this);
mItemOverridden = displayItem != mItemGiveOriginalNo;
if (mItemOverridden) {
mOverrideData = mData[mShopItemID];
mOverrideData.mArcName = dItem_data::getArcName(resolvedItem);
mOverrideData.mBmdName = dItem_data::getBmdName(resolvedItem);
mOverrideData.mBtkName = dItem_data::getBtkName(resolvedItem);
mOverrideData.mBckName = dItem_data::getBckName(resolvedItem);
mOverrideData.mBrkName = dItem_data::getBrkName(resolvedItem);
mOverrideData.mBtpName = dItem_data::getBtpName(resolvedItem);
mOverrideData.mTevFrm = dItem_data::getTevFrm(resolvedItem);
mOverrideData.mArcName = dItem_data::getArcName(displayItem);
mOverrideData.mBmdName = dItem_data::getBmdName(displayItem);
mOverrideData.mBtkName = dItem_data::getBtkName(displayItem);
mOverrideData.mBckName = dItem_data::getBckName(displayItem);
mOverrideData.mBrkName = dItem_data::getBrkName(displayItem);
mOverrideData.mBtpName = dItem_data::getBtpName(displayItem);
mOverrideData.mTevFrm = dItem_data::getTevFrm(displayItem);
mOverrideData.mBtpFrm = -1;
mOverrideData.mFlag = static_cast<u32>(-1);
mOverrideData.mOffsetY = mShopItemID == SHOP_ITEMNO_ARMOR ? 60.0f : 15.0f;
+6 -3
View File
@@ -363,10 +363,13 @@ int daTagStatue_c::demoProc() {
}
#if TARGET_PC
item = dusk::mods::item_check_sky_character(item & 0xFF, this);
const auto itemCheck = dusk::mods::item_check_commit(
dusk::mods::item_give_tag_sky_character(), item & 0xFF, this);
item = itemCheck.itemNo;
#endif
mItemId = fopAcM_createItemForTrBoxDemo(&current.pos, item, -1,
fopAcM_GetRoomNo(this), 0, 0 IF_DUSK_ARG(dusk::mods::item_give_tag_sky_character()));
mItemId =
fopAcM_createItemForTrBoxDemo(&current.pos, item, -1, fopAcM_GetRoomNo(this), 0,
0 IF_DUSK_ARG(itemCheck.tag));
JUT_ASSERT(580, mItemId != fpcM_ERROR_PROCESS_ID_e);
+5 -4
View File
@@ -1391,8 +1391,9 @@ u8 daTbox_c::getBombItemNoMain(u8 i_itemNo) {
int daTbox_c::setGetDemoItem() {
u8 item_no = getItemNo();
#if TARGET_PC
const u32 giveTag = dusk::mods::item_give_tag_chest(getTboxNo());
item_no = dusk::mods::item_check_tagged(giveTag, mOriginalItemNo, this);
const auto itemCheck = dusk::mods::item_check_commit(
dusk::mods::item_give_tag_chest(getTboxNo()), mOriginalItemNo, this);
item_no = itemCheck.itemNo;
#endif
if (item_no == dItemNo_BOMB_5_e || item_no == dItemNo_BOMB_10_e || item_no == dItemNo_BOMB_20_e || item_no == dItemNo_BOMB_30_e ||
item_no == dItemNo_WATER_BOMB_5_e || item_no == dItemNo_WATER_BOMB_10_e || item_no == dItemNo_WATER_BOMB_20_e || item_no == dItemNo_WATER_BOMB_30_e ||
@@ -1404,10 +1405,10 @@ int daTbox_c::setGetDemoItem() {
fpc_ProcID item_id;
if (field_0x718) {
item_id = fopAcM_createItemForPresentDemo(
&current.pos, item_no, 1, -1, -1, NULL, NULL IF_DUSK_ARG(giveTag));
&current.pos, item_no, 1, -1, -1, NULL, NULL IF_DUSK_ARG(itemCheck.tag));
} else {
item_id = fopAcM_createItemForTrBoxDemo(
&current.pos, item_no, -1, -1, NULL, NULL IF_DUSK_ARG(giveTag));
&current.pos, item_no, -1, -1, NULL, NULL IF_DUSK_ARG(itemCheck.tag));
}
if (item_id != fpcM_ERROR_PROCESS_ID_e) {
+7 -4
View File
@@ -383,15 +383,18 @@ int daTbox2_c::setGetDemoItem() {
u8 item_no = getItemNo();
#if TARGET_PC
int tboxNo = fopAcM_GetParamBit(this, 16, 8);
const u32 giveTag = dusk::mods::item_give_tag_chest(tboxNo);
item_no = dusk::mods::item_check_tagged(giveTag, mOriginalItemNo, this);
const auto itemCheck = dusk::mods::item_check_commit(
dusk::mods::item_give_tag_chest(tboxNo), mOriginalItemNo, this);
item_no = itemCheck.itemNo;
#endif
u32 partner_id;
if (mReturnRupee) {
partner_id = fopAcM_createItemForPresentDemo(&current.pos, item_no, 1, -1, -1, NULL, NULL IF_DUSK_ARG(giveTag));
partner_id = fopAcM_createItemForPresentDemo(
&current.pos, item_no, 1, -1, -1, NULL, NULL IF_DUSK_ARG(itemCheck.tag));
} else {
partner_id = fopAcM_createItemForTrBoxDemo(&current.pos, item_no, -1, -1, NULL, NULL IF_DUSK_ARG(giveTag));
partner_id = fopAcM_createItemForTrBoxDemo(
&current.pos, item_no, -1, -1, NULL, NULL IF_DUSK_ARG(itemCheck.tag));
}
if (partner_id != -1) {
+9 -2
View File
@@ -50,17 +50,24 @@ bool daItemBase_c::chkDead() {
int CheckItemCreateHeap(fopAc_ac_c* i_this) {
daItemBase_c* a_this = static_cast<daItemBase_c*>(i_this);
u8 item_no = a_this->getItemNo();
u8 item_no = DUSK_IF_ELSE(a_this->getDisplayItemNo(), a_this->getItemNo());
return a_this->CreateItemHeap(dItem_data::getArcName(item_no), dItem_data::getBmdName(item_no),
dItem_data::getBtkName(item_no), dItem_data::getBpkName(item_no),
dItem_data::getBckName(item_no), dItem_data::getBxaName(item_no),
dItem_data::getBrkName(item_no), dItem_data::getBtpName(item_no));
}
#if TARGET_PC
const char* dItem_fieldModelArc(u8 itemNo) {
const char* arcName = dItem_data::getFieldArc(itemNo);
return arcName != NULL ? arcName : dItem_data::getArcName(itemNo);
}
#endif
int CheckFieldItemCreateHeap(fopAc_ac_c* i_this) {
daItemBase_c* a_this = static_cast<daItemBase_c*>(i_this);
u8 item_no = a_this->getItemNo();
u8 item_no = DUSK_IF_ELSE(a_this->getDisplayItemNo(), a_this->getItemNo());
return a_this->CreateItemHeap(
dItem_data::getFieldArc(item_no), dItem_data::getItemBmdName(item_no),
dItem_data::getItemBtkName(item_no), dItem_data::getItemBpkName(item_no),
File diff suppressed because it is too large Load Diff
+40 -7
View File
@@ -23,6 +23,7 @@
#include "m_Do/m_Do_graphic.h"
#include <cstring>
#include "dusk/utilities.hpp"
#include "dusk/version.hpp"
#if TARGET_PC
@@ -4153,11 +4154,43 @@ bool dFile_select_c::yesnoWakuAlpahAnm(u8 param_1) {
}
#if TARGET_PC
static dusk::utils::PaneCache mSelDtPanes[] = {
{MULTI_CHAR('tate_n0'), 0.0f, 0.0f, false},
{MULTI_CHAR('tate_n1'), 0.0f, 0.0f, false},
{MULTI_CHAR('ken_n0'), 0.0f, 0.0f, false},
{MULTI_CHAR('ken_n1'), 0.0f, 0.0f, false},
{MULTI_CHAR('fuku_n0'), 0.0f, 0.0f, false},
{MULTI_CHAR('fuku_n1'), 0.0f, 0.0f, false},
{MULTI_CHAR('fuku_n2'), 0.0f, 0.0f, false},
{MULTI_CHAR('gray_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('b_base'), 0.0f, 0.0f, false},
{MULTI_CHAR('b_base1'), 0.0f, 0.0f, false},
};
static dusk::utils::PaneCache fileSelPanes[] = {
{MULTI_CHAR('w_uzu00'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_uzu01'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_uzu02'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_uzu03'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_uzu04'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_uzu05'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_uzu06'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_uzu07'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_uzu08'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_uzu09'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_er_msg'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_er_msE'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_er_msR'), 0.0f, 0.0f, false},
{MULTI_CHAR('er_for0'), 0.0f, 0.0f, false},
{MULTI_CHAR('er_for1'), 0.0f, 0.0f, false},
};
void dFile_select_c::fileSelectWide() {
static bool cachedPanes = false;
// Get pre-scale values for each pane
if (!cachedPanes) {
for (PaneCache& entry : mSelDtPanes) {
for (dusk::utils::PaneCache& entry : mSelDtPanes) {
J2DPane* pane = mSelDt.ScrDt->search(entry.tag);
if (!entry.cached) {
entry.origTransX = pane->getTranslateX();
@@ -4165,7 +4198,7 @@ void dFile_select_c::fileSelectWide() {
entry.cached = true;
}
}
for (PaneCache& entry : fileSelPanes) {
for (dusk::utils::PaneCache& entry : fileSelPanes) {
J2DPane* pane = fileSel.Scr->search(entry.tag);
if (!entry.cached) {
entry.origTransX = pane->getTranslateX();
@@ -4179,13 +4212,13 @@ void dFile_select_c::fileSelectWide() {
// Reset all panes
mSelDt.ScrDt->scale(1.0f, 1.0f);
mSelDt.ScrDt->translate(0.0f, 0.0f);
for (PaneCache& entry : mSelDtPanes) {
for (dusk::utils::PaneCache& entry : mSelDtPanes) {
J2DPane* pane = mSelDt.ScrDt->search(entry.tag);
pane->setBasePosition(J2DBasePosition_4);
pane->scale(1.0f, 1.0f);
pane->translate(entry.origTransX, entry.origTransY);
}
for (PaneCache& entry : fileSelPanes) {
for (dusk::utils::PaneCache& entry : fileSelPanes) {
J2DPane* pane = fileSel.Scr->search(entry.tag);
pane->setBasePosition(J2DBasePosition_4);
pane->scale(1.0f, 1.0f);
@@ -4257,7 +4290,7 @@ void dFile_select_c::fileSelectWide() {
mSelDt.ScrDt->search(MULTI_CHAR('fuku_n2'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Spirals & Memory Card Text
for (PaneCache& entry : fileSelPanes) {
for (dusk::utils::PaneCache& entry : fileSelPanes) {
J2DPane* pane = fileSel.Scr->search(entry.tag);
pane->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
}
@@ -4283,7 +4316,7 @@ void dFile_select_c::fileSelectWide() {
const f32 wideShiftFactor = mSelDt.ScrDt->search(MULTI_CHAR('gray_n'))->getTranslateX() * (wideScaleFactor - mDoGph_gInf_c::hudAspectScaleDown);
const f32 ultraShiftFactor = mSelDt.ScrDt->search(MULTI_CHAR('gray_n'))->getTranslateX() * (ultraScaleFactor - mDoGph_gInf_c::hudAspectScaleDown);
for (PaneCache& entry : mSelDtPanes) {
for (dusk::utils::PaneCache& entry : mSelDtPanes) {
const size_t index = &entry - mSelDtPanes;
J2DPane* pane = mSelDt.ScrDt->search(entry.tag);
pane->setBasePosition(J2DBasePosition_0);
@@ -4351,7 +4384,7 @@ void dFile_select_c::fileSelectWide() {
}
// Spirals & Memory Card Text
for (PaneCache& entry : fileSelPanes) {
for (dusk::utils::PaneCache& entry : fileSelPanes) {
J2DPane* pane = fileSel.Scr->search(entry.tag);
pane->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
}
+17 -1
View File
@@ -741,8 +741,12 @@ void item_func_ARMOR() {}
void item_func_WEAR_ZORA() {}
void item_func_MAGIC_LV1() {
#if TARGET_PC
dComIfGs_onEventBit(0xD04);
#else
dComIfGp_setItemMagicCount(16);
dComIfGp_setItemMaxMagicCount(16);
#endif
}
void item_func_DUNGEON_EXIT_2() {
@@ -1152,7 +1156,15 @@ void item_func_M_MAYFLY() {}
void item_func_F_MAYFLY() {}
void item_func_POU_SPIRIT() {}
void item_func_POU_SPIRIT() {
#if TARGET_PC
dComIfGs_addPohSpiritNum();
if (dComIfGs_getPohSpiritNum() == 20) {
/* dSv_event_flag_c::F_0457 - Castle Town - Revived cat */
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[457]);
}
#endif
}
void item_func_ANCIENT_DOCUMENT() {
dComIfGs_setItem(SLOT_22, dItemNo_ANCIENT_DOCUMENT_e);
@@ -1411,7 +1423,11 @@ int item_getcheck_func_WEAR_ZORA() {
}
int item_getcheck_func_MAGIC_LV1() {
#if TARGET_PC
return dComIfGs_isEventBit(0xD04);
#else
return -1;
#endif
}
int item_getcheck_func_DUNGEON_EXIT_2() {
+4
View File
@@ -53,7 +53,11 @@ DUSK_GAME_DATA dItem_itemResource dItem_data::item_resource[] = {
{"F_gD_rupy", 0x0004,-0x0001,-0x0001, 0x0007,-0x0001, 0x0, -0x1, 0x006B, 0x64, 0x0000},
{"O_gD_marm", 0x0003,-0x0001,-0x0001,-0x0001,-0x0001, -0x1, -0x1, 0x0041, 0x64, 0x01A9},
{"O_gD_zora", 0x0003,-0x0001,-0x0001,-0x0001,-0x0001, -0x1, -0x1, 0x004D, 0x64, 0x01AA},
#if TARGET_PC
{"O_gD_Injy", 0x0003,-0x0001,-0x0001,-0x0001,-0x0001, -0x1, -0x1, 0x002E, 0x64, 0x0000},
#else
{"O_gD_Injy", 0x0003,-0x0001,-0x0001,-0x0001,-0x0001, -0x1, -0x1, 0x002D, 0x64, 0x0000},
#endif
{"O_gD_TKS", 0x0008,-0x0001, 0x0005,-0x0001,-0x0001, -0x1, -0x1, 0x0028, 0x64, 0x0000},
{"O_gD_puL2", 0x0003,-0x0001,-0x0001,-0x0001,-0x0001, -0x1, -0x1, 0x0047, 0x64, 0x0000},
{"O_gD_puL2", 0x0003,-0x0001,-0x0001,-0x0001,-0x0001, -0x1, -0x1, 0x0048, 0x64, 0x0000},
+36 -2
View File
@@ -39,6 +39,7 @@
#if TARGET_PC
#include "dusk/menu_pointer.h"
#include "dusk/utilities.hpp"
#endif
typedef void (dMenu_Collect2D_c::*initFunc)();
@@ -101,11 +102,44 @@ dMenu_Collect2D_c::~dMenu_Collect2D_c() {
}
#if TARGET_PC
static dusk::utils::PaneCache mpScreenPanes[] = {
{MULTI_CHAR('sa_tex_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('op_tex_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('heart_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('wolf_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('item_0_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('item_1_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('item_2_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('fish_3_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('lett_4_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('maki_5_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('fuku_n0'), 0.0f, 0.0f, false},
{MULTI_CHAR('fuku_n1'), 0.0f, 0.0f, false},
{MULTI_CHAR('fuku_n2'), 0.0f, 0.0f, false},
{MULTI_CHAR('tate_n0'), 0.0f, 0.0f, false},
{MULTI_CHAR('tate_n1'), 0.0f, 0.0f, false},
{MULTI_CHAR('ken_n0'), 0.0f, 0.0f, false},
{MULTI_CHAR('ken_n1'), 0.0f, 0.0f, false},
{MULTI_CHAR('kabu_6n'), 0.0f, 0.0f, false},
{MULTI_CHAR('t_t00'), 0.0f, 0.0f, false},
{MULTI_CHAR('f_t00'), 0.0f, 0.0f, false},
{MULTI_CHAR('itemn_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('infotxtn'), 0.0f, 0.0f, false},
{MULTI_CHAR('sa_op_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('title_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('menu_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('w_er_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('center_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('info_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('lavel_n'), 0.0f, 0.0f, false},
{MULTI_CHAR('modelbgn'), 0.0f, 0.0f, false},
};
void dMenu_Collect2D_c::menuCollectWide() {
static bool cachedPanes = false;
// Get pre-scale values for each pane
if (!cachedPanes) {
for (PaneCache& entry : mpScreenPanes) {
for (dusk::utils::PaneCache& entry : mpScreenPanes) {
J2DPane* pane = mpScreen->search(entry.tag);
if (!entry.cached) {
entry.origTransX = pane->getTranslateX();
@@ -119,7 +153,7 @@ void dMenu_Collect2D_c::menuCollectWide() {
// Reset all panes
mpScreen->scale(1.0f, 1.0f);
mpScreen->translate(0.0f, 0.0f);
for (PaneCache& entry : mpScreenPanes) {
for (dusk::utils::PaneCache& entry : mpScreenPanes) {
J2DPane* pane = mpScreen->search(entry.tag);
pane->scale(1.0f, 1.0f);
pane->translate(entry.origTransX, entry.origTransY);
+539
View File
@@ -1900,3 +1900,542 @@ void dMeter2Info_set2DVibrationT() {}
void dMeter2Info_set2DVibration() {}
void dMeter2Info_set2DVibrationM() {}
#if TARGET_PC
void dMeter2Info_Initialize() {
g_meter2_info.init();
}
dMeterMap_c* dMeter2Info_getMeterMapClass() {
return g_meter2_info.getMeterMapClass();
}
dMw_c* dMeter2Info_getMenuWindowClass() {
return g_meter2_info.getMenuWindowClass();
}
void dMeter2Info_setWindowStatus(u8 i_status) {
g_meter2_info.setWindowStatus(i_status);
}
CPaneMgr* dMeter2Info_getMeterItemPanePtr(s32 i_idx) {
return g_meter2_info.getMeterItemPanePtr(i_idx);
}
void dMeter2Info_getString(u32 i_stringID, TEXT_SPAN o_string, JMSMesgEntry_c* i_msgEntry) {
g_meter2_info.getString(i_stringID, o_string, i_msgEntry);
}
void dMeter2Info_getStringKanji(u32 i_stringID, TEXT_SPAN o_string, JMSMesgEntry_c* i_msgEntry) {
g_meter2_info.getStringKanji(i_stringID, o_string, i_msgEntry);
}
void dMeter2Info_getStringKana(u32 i_stringID, TEXT_SPAN o_string, JMSMesgEntry_c* i_msgEntry) {
g_meter2_info.getStringKana(i_stringID, o_string, i_msgEntry);
}
f32 dMeter2Info_getStringLength(JUTFont* i_font, f32 param_2, f32 param_3, char* i_string) {
return g_meter2_info.getStringLength(i_font, param_2, param_3, i_string);
}
f32 dMeter2Info_getStringLength(J2DTextBox* i_textbox, char* i_string) {
return g_meter2_info.getStringLength(i_textbox, i_string);
}
void dMeter2Info_setHotSpringTimer(u8 i_slotNo) {
g_meter2_info.setHotSpringTimer(i_slotNo);
}
u16 dMeter2Info_getOilGaugeBackUp() {
return g_meter2_info.getOilGaugeBackUp();
}
void dMeter2Info_setOilGaugeBackUp(u16 param_1) {
g_meter2_info.setOilGaugeBackUp(param_1);
}
void dMeter2Info_setSaveStageName(const char* i_stageName) {
g_meter2_info.setSaveStageName(i_stageName);
}
u8 dMeter2Info_getInsectSelectType() {
return g_meter2_info.getInsectSelectType();
}
void dMeter2Info_setInsectSelectType(u8 i_type) {
g_meter2_info.setInsectSelectType(i_type);
}
u8 dMeter2Info_getWarpStatus() {
return g_meter2_info.getWarpStatus();
}
void dMeter2Info_setWarpStatus(u8 i_status) {
return g_meter2_info.setWarpStatus(i_status);
}
int dMeter2Info_readItemTexture(u8 i_itemNo, void* i_texBuf1, J2DPicture* i_pic1, void* i_texBuf2,
J2DPicture* i_pic2, void* i_texBuf3, J2DPicture* i_pic3, void* i_texBuf4, J2DPicture* i_pic4,
int param_9) {
return g_meter2_info.readItemTexture(i_itemNo, i_texBuf1, i_pic1, i_texBuf2, i_pic2, i_texBuf3,
i_pic3, i_texBuf4, i_pic4, param_9);
}
void dMeter2Info_setItemColor(
u8 i_itemNo, J2DPicture* i_pic1, J2DPicture* i_pic2, J2DPicture* i_pic3, J2DPicture* i_pic4) {
g_meter2_info.setItemColor(i_itemNo, i_pic1, i_pic2, i_pic3, i_pic4);
}
u8 dMeter2Info_getWarpRoomNo() {
return g_meter2_info.getWarpRoomNo();
}
u8 dMeter2Info_getWarpPlayerNo() {
return g_meter2_info.getWarpPlayerNo();
}
cXyz& dMeter2Info_getWarpPos() {
return g_meter2_info.getWarpPos();
}
const char* dMeter2Info_getWarpStageName() {
return g_meter2_info.getWarpStageName();
}
void dMeter2Info_setNowCount(u8 i_count) {
g_meter2_info.setNowCount(i_count);
}
void dMeter2Info_setMaxCount(u8 i_count) {
g_meter2_info.setMaxCount(i_count);
}
BOOL dMeter2Info_isDirectUseItem(int param_0) {
return g_meter2_info.isDirectUseItem(param_0);
}
bool dMeter2Info_isUseButton(int i_buttonBit) {
return g_meter2_info.isUseButton(i_buttonBit);
}
void dMeter2Info_setMeterMapClass(dMeterMap_c* i_map) {
g_meter2_info.setMeterMapClass(i_map);
}
void dMeter2Info_decHotSpringTimer() {
g_meter2_info.decHotSpringTimer();
}
void dMeter2Info_allUseButton() {
g_meter2_info.allUseButton();
}
void dMeter2Info_offUseButton(int i_buttonBit) {
g_meter2_info.offUseButton(i_buttonBit);
}
void dMeter2Info_resetGameStatus() {
g_meter2_info.resetGameStatus();
}
void dMeter2Info_onGameStatus(int i_status) {
g_meter2_info.onGameStatus(i_status);
}
void dMeter2Info_setMapStatus(u8 i_status) {
g_meter2_info.setMapStatus(i_status);
}
u8 dMeter2Info_getMapStatus() {
return g_meter2_info.getMapStatus();
}
void dMeter2Info_setPauseStatus(u8 i_status) {
g_meter2_info.setPauseStatus(i_status);
}
void dMeter2Info_resetPauseStatus() {
g_meter2_info.resetPauseStatus();
}
u8 dMeter2Info_getPauseStatus() {
return g_meter2_info.getPauseStatus();
}
bool dMeter2Info_isGameStatus(int i_status) {
return g_meter2_info.isGameStatus(i_status);
}
bool dMeter2Info_isTouchKeyCheck(int i_status) {
return g_meter2_info.isTouchKeyCheck(i_status);
}
void dMeter2Info_setMapKeyDirection(u16 i_direction) {
g_meter2_info.setMapKeyDirection(i_direction);
}
bool dMeter2Info_isSub2DStatus(int i_flag) {
return g_meter2_info.isSub2DStatus(i_flag);
}
void dMeter2Info_offMenuInForce(int i_flag) {
g_meter2_info.offMenuInForce(i_flag);
}
bool dMeter2Info_isMenuInForce(int i_flag) {
return g_meter2_info.isMenuInForce(i_flag);
}
void dMeter2Info_setMenuWindowClass(dMw_c* i_menu) {
g_meter2_info.setMenuWindowClass(i_menu);
}
void dMeter2Info_resetWarpStatus() {
g_meter2_info.resetWarpStatus();
}
u16 dMeter2Info_getMapKeyDirection() {
return g_meter2_info.getMapKeyDirection();
}
u8 dMeter2Info_getWindowStatus() {
return g_meter2_info.getWindowStatus();
}
void dMeter2Info_setMsgResource(void* i_res) {
g_meter2_info.setMsgResource(i_res);
}
void dMeter2Info_setStageMsgResource(void* i_res) {
g_meter2_info.setStageMsgResource(i_res);
}
void dMeter2Info_setMsgUnitResource(void* i_res) {
g_meter2_info.setMsgUnitResource(i_res);
}
void* dMeter2Info_getMsgResource() {
return g_meter2_info.getMsgResource();
}
void* dMeter2Info_getStageMsgResource() {
return g_meter2_info.getStageMsgResource();
}
void* dMeter2Info_getMsgUnitResource() {
return g_meter2_info.getMsgUnitResource();
}
u8 dMeter2Info_getLightDropGetFlag(int i_no) {
return g_meter2_info.getLightDropGetFlag(i_no);
}
s32 dMeter2Info_getMeterStringType() {
return g_meter2_info.getMeterStringType();
}
void dMeter2Info_setMeterClass(dMeter2_c* i_meter) {
g_meter2_info.setMeterClass(i_meter);
}
void dMeter2Info_onLifeGaugeSE() {
g_meter2_info.onLifeGaugeSE();
}
void dMeter2Info_offLifeGaugeSE() {
g_meter2_info.offLifeGaugeSE();
}
u8 dMeter2Info_getLifeGaugeSE() {
return g_meter2_info.getLifeGaugeSE();
}
const char* dMeter2Info_getSaveStageName() {
return g_meter2_info.getSaveStageName();
}
void dMeter2Info_onShopTalkFlag() {
g_meter2_info.onShopTalkFlag();
}
void dMeter2Info_setLightDropGetFlag(int i_no, u8 i_flag) {
g_meter2_info.setLightDropGetFlag(i_no, i_flag);
}
u8 dMeter2Info_getRentalBombBag() {
return g_meter2_info.getRentalBombBag();
}
u8 dMeter2Info_getMiniGameItemSetFlag() {
return g_meter2_info.getMiniGameItemSetFlag();
}
void dMeter2Info_setMiniGameItem(u8 i_minigameFlag) {
g_meter2_info.setMiniGameItem(i_minigameFlag);
}
void dMeter2Info_resetMiniGameItem(bool i_saveItem) {
g_meter2_info.resetMiniGameItem(i_saveItem);
}
void dMeter2Info_setTableMapRegionNo(u8 i_regionNo) {
g_meter2_info.setTableMapRegionNo(i_regionNo);
}
void dMeter2Info_setGoldWolfMapType(u8 i_mapType) {
g_meter2_info.setGoldWolfMapType(i_mapType);
}
void dMeter2Info_changeWater(u8 i_slotNo) {
g_meter2_info.changeWater(i_slotNo);
}
void dMeter2Info_warpInProc() {
g_meter2_info.warpInProc();
}
void dMeter2Info_warpOutProc() {
g_meter2_info.warpOutProc();
}
dMeter2_c* dMeter2Info_getMeterClass() {
return g_meter2_info.getMeterClass();
}
s16 dMeter2Info_getMsgKeyWaitTimer() {
return g_meter2_info.getMsgKeyWaitTimer();
}
void dMeter2Info_onDirectUseItem(int param_0) {
g_meter2_info.onDirectUseItem(param_0);
}
void dMeter2Info_setFloatingFlow(u16 i_flowID, s16 i_msgTimer, bool i_wakuVisible) {
g_meter2_info.setFloatingFlow(i_flowID, i_msgTimer, i_wakuVisible);
}
u8 dMeter2Info_getGameOverType() {
return g_meter2_info.getGameOverType();
}
void dMeter2Info_setGameOverType(u8 i_gameoverType) {
g_meter2_info.setGameOverType(i_gameoverType);
}
void dMeter2Info_setMsgKeyWaitTimer(s16 i_waitTimer) {
g_meter2_info.setMsgKeyWaitTimer(i_waitTimer);
}
s32 dMeter2Info_getMsgTimeMs() {
return g_meter2_info.getMsgTimeMs();
}
s32 dMeter2Info_getTimeMs() {
return g_meter2_info.getTimeMs();
}
void dMeter2Info_setMsgTimeMs(s32 i_msgTime) {
g_meter2_info.setMsgTimeMs(i_msgTime);
}
void dMeter2Info_setTimeMs(s32 i_time) {
g_meter2_info.setTimeMs(i_time);
}
u8 dMeter2Info_getNowCount() {
return g_meter2_info.getNowCount();
}
u8 dMeter2Info_getMaxCount() {
return g_meter2_info.getMaxCount();
}
void dMeter2Info_setScopeZoomPointer(u8 param_0) {
g_meter2_info.setScopeZoomPointer(param_0);
}
void dMeter2Info_decMsgKeyWaitTimer() {
g_meter2_info.decMsgKeyWaitTimer();
}
bool dMeter2Info_isFloatingMessageVisible() {
return g_meter2_info.isFloatingMessageVisible();
}
u8 dMeter2Info_getItemExplainWindowStatus() {
return g_meter2_info.getItemExplainWindowStatus();
}
void dMeter2Info_setItemExplainWindowStatus(u8 i_value) {
g_meter2_info.setItemExplainWindowStatus(i_value);
}
void dMeter2Info_resetDirectUseItem() {
g_meter2_info.resetDirectUseItem();
}
u16 dMeter2Info_getFloatingFlowID() {
return g_meter2_info.getFloatingFlowID();
}
u8 dMeter2Info_getCollectCursorPosX() {
return g_meter2_info.getCollectCursorPosX();
}
u8 dMeter2Info_getCollectCursorPosY() {
return g_meter2_info.getCollectCursorPosY();
}
void dMeter2Info_setCollectCursorPosXY(u8 x, u8 y) {
g_meter2_info.setCollectCursorPosXY(x, y);
}
void dMeter2Info_onBlinkButton(int i_flag) {
g_meter2_info.onBlinkButton(i_flag);
}
bool dMeter2Info_isFloatingMessageWakuVisible() {
return g_meter2_info.isFloatingMessageWakuVisible();
}
bool dMeter2Info_isBlinkButton(int i_flag) {
return g_meter2_info.isBlinkButton(i_flag);
}
void dMeter2Info_resetBlinkButton() {
g_meter2_info.resetBlinkButton();
}
void dMeter2Info_resetFloatingMessage() {
g_meter2_info.resetFloatingMessage();
}
s16 dMeter2Info_decFloatingMessageTimer() {
return g_meter2_info.decFloatingMessageTimer();
}
s16 dMeter2Info_getFloatingMessageTimer() {
return g_meter2_info.getFloatingMessageTimer();
}
u16 dMeter2Info_getFloatingMessageID() {
return g_meter2_info.getFloatingMessageID();
}
s16 dMeter2Info_getHorseLifeCount() {
return g_meter2_info.getHorseLifeCount();
}
void dMeter2Info_setMeterString(s32 i_string) {
g_meter2_info.setMeterString(i_string);
}
void dMeter2Info_resetMeterString() {
g_meter2_info.resetMeterString();
}
void dMeter2Info_setMeterItemPanePtr(int i_no, CPaneMgr* i_pane) {
g_meter2_info.setMeterItemPanePtr(i_no, i_pane);
}
bool dMeter2Info_isShopTalkFlag() {
return g_meter2_info.isShopTalkFlag();
}
void dMeter2Info_setMapDrugFlag(bool i_flag) {
g_meter2_info.setMapDrugFlag(i_flag);
}
bool dMeter2Info_isTempBit(int i_bit) {
return g_meter2_info.isTempBit(i_bit);
}
void dMeter2Info_offSub2DStatus(int i_bit) {
g_meter2_info.offSub2DStatus(i_bit);
}
void dMeter2Info_onSub2DStatus(int i_bit) {
g_meter2_info.onSub2DStatus(i_bit);
}
void dMeter2Info_set2DWidth(f32 i_width) {
g_meter2_info.set2DWidth(i_width);
}
void dMeter2Info_set2DHeight(f32 i_height) {
g_meter2_info.set2DHeight(i_height);
}
void dMeter2Info_set2DPosH(f32 i_posH) {
g_meter2_info.set2DPosH(i_posH);
}
void dMeter2Info_set2DPosV(f32 i_posV) {
g_meter2_info.set2DPosV(i_posV);
}
void dMeter2Info_offShopTalkFlag() {
g_meter2_info.offShopTalkFlag();
}
void dMeter2Info_onUseButton(int i_button) {
g_meter2_info.onUseButton(i_button);
}
f32 dMeter2Info_get2DWidth() {
return g_meter2_info.get2DWidth();
}
f32 dMeter2Info_get2DHeight() {
return g_meter2_info.get2DHeight();
}
void dMeter2Info_setWarpInfo(const char* i_stageName, const cXyz& i_position, s16 i_angle,
u8 i_roomNo, u8 param_4, u8 i_warpPlayerNo) {
g_meter2_info.setWarpInfo(i_stageName, i_position, i_angle, i_roomNo, param_4, i_warpPlayerNo);
}
u8 dMeter2Info_getTableMapRegionNo() {
return g_meter2_info.getTableMapRegionNo();
}
u8 dMeter2Info_getGoldWolfMapType() {
return g_meter2_info.getGoldWolfMapType();
}
bool dMeter2Info_isWindowAccept(int param_0) {
return g_meter2_info.isWindowAccept(param_0);
}
void dMeter2Info_setHorseLifeCount(s16 i_count) {
g_meter2_info.setHorseLifeCount(i_count);
}
void dMeter2Info_offTempBit(int i_bit) {
g_meter2_info.offTempBit(i_bit);
}
void dMeter2Info_onTempBit(int i_bit) {
g_meter2_info.onTempBit(i_bit);
}
void dMeter2Info_setFloatingMessage(u16 i_msgID, s16 i_msgTimer, bool i_wakuVisible) {
g_meter2_info.setFloatingMessage(i_msgID, i_msgTimer, i_wakuVisible);
}
void dMeter2Info_setMiniGameCount(s8 i_count) {
g_meter2_info.setMiniGameCount(i_count);
}
void dMeter2Info_onWindowAccept(int param_0) {
g_meter2_info.onWindowAccept(param_0);
}
void dMeter2Info_offWindowAccept(int param_0) {
g_meter2_info.offWindowAccept(param_0);
}
void dMeter2Info_onMenuInForce(int param_0) {
g_meter2_info.onMenuInForce(param_0);
}
#endif
+93 -3
View File
@@ -16,6 +16,21 @@
#if TARGET_PC
#include "dusk/menu_pointer.h"
#include "dusk/scope_guard.hpp"
#include "helpers/bits.hpp"
static bool read_full_color(const void* data, u32 size, u32& ccColor, u32& gcColor) {
if (size == 4) {
ccColor = dusk::read_bits<u32>(data);
gcColor = ccColor;
return true;
}
if (size == 8) {
ccColor = dusk::read_bits<u32>(data);
gcColor = dusk::read_bits<u32>(static_cast<const u8*>(data) + sizeof(ccColor));
return true;
}
return false;
}
#endif
#if TARGET_PC
@@ -400,6 +415,9 @@ jmessage_tReference::jmessage_tReference() {
resetCharCountBuffer();
mNowColorType = 0;
mTopColorType = 0;
#if TARGET_PC
resetColors();
#endif
mButtonTagStopFlag = 0;
mPageEndCount = 0;
mSelectNum = 0;
@@ -594,6 +612,13 @@ void jmessage_tReference::pageSend() {
if (mNowColorType != mTopColorType) {
mTopColorType = mNowColorType;
}
#if TARGET_PC
mTopFullColor = mNowFullColor;
if (mNowFullColor) {
mTopCCColor = mNowCCColor;
mTopGCColor = mNowGCColor;
}
#endif
mTopWordCount = mNowWordCount;
mCharAlpha = 0.0f;
@@ -1917,6 +1942,9 @@ void jmessage_tSequenceProcessor::do_begin(void const* pEntry, char const* pszTe
pReference->resetCharCnt();
pReference->setNowColorType(0);
pReference->setTopColorType(0);
#if TARGET_PC
pReference->resetColors();
#endif
pReference->setNowWordCount(0);
pReference->setTopWordCount(0);
pReference->setBatchColorFlag(0);
@@ -2280,9 +2308,21 @@ bool jmessage_tSequenceProcessor::do_tag(u32 i_tag, void const* i_data, u32 i_si
return true;
case MSGTAG_GROUP(255):
switch (i_tag) {
case MSGTAG_COLOR:
case MSGTAG_COLOR: {
#if TARGET_PC
u32 ccColor;
u32 gcColor;
if (read_full_color(i_data, i_size, ccColor, gcColor)) {
pReference->setFullColor(ccColor, gcColor);
} else if (i_size == 1) {
pReference->clearNowFullColor();
pReference->setNowColorType(*(u8*)i_data & 0xFF);
}
#else
pReference->setNowColorType(*(u8*)i_data & 0xFF);
#endif
return true;
}
case MSGTAG_SCALE:
pReference->setNowTagScale(*(BE(u16)*)i_data & 0xFFFF);
return true;
@@ -2863,7 +2903,15 @@ void jmessage_tRenderingProcessor::do_begin(void const* pEntry, char const* pszT
do_scale(field_0x44);
}
#if TARGET_PC
if (pReference->hasTopFullColor()) {
do_fullcolor(pReference->getTopCCColor(), pReference->getTopGCColor());
} else {
do_color(pReference->getTopColorType());
}
#else
do_color(pReference->getTopColorType());
#endif
pReference->resetDrawLightCount();
do_widthcenter();
@@ -3017,9 +3065,20 @@ bool jmessage_tRenderingProcessor::do_tag(u32 i_tag, void const* i_data, u32 i_s
return 1;
case MSGTAG_GROUP(255):
switch (i_tag) {
case MSGTAG_COLOR:
case MSGTAG_COLOR: {
#if TARGET_PC
u32 ccColor;
u32 gcColor;
if (read_full_color(i_data, i_size, ccColor, gcColor)) {
do_fullcolor(ccColor, gcColor);
} else if (i_size == 1) {
do_color(*(u8*)i_data & 0xFF);
}
#else
do_color(*(u8*)i_data & 0xFF);
#endif
return 1;
}
case MSGTAG_SCALE:
field_0x13c = *(BE(u16)*)i_data & 0xFFFF;
do_scale(field_0x13c / 100.0f);
@@ -3630,6 +3689,18 @@ void jmessage_tRenderingProcessor::do_color(u8 i_colorNo) {
do_strcat(buffer, false, false, false);
}
#if TARGET_PC
void jmessage_tRenderingProcessor::do_fullcolor(u32 ccColor, u32 gcColor) {
mColorNo = 0xFF;
mCCColor = ccColor;
mGCColor = gcColor;
char buffer[40];
SAFE_SPRINTF(buffer, "\x1B" "CC[%08x]" "\x1B" "GC[%08x]", mCCColor, mGCColor);
do_strcat(buffer, false, false, false);
}
#endif
void jmessage_tRenderingProcessor::do_scale(f32 param_1) {
jmessage_tReference* pReference = (jmessage_tReference*)getReference();
@@ -4684,9 +4755,20 @@ bool jmessage_string_tRenderingProcessor::do_tag(u32 i_tag, void const* i_data,
switch(i_tag & 0xFF0000) {
case MSGTAG_GROUP(255):
switch(i_tag) {
case MSGTAG_COLOR:
case MSGTAG_COLOR: {
#if TARGET_PC
u32 ccColor;
u32 gcColor;
if (read_full_color(i_data, i_size, ccColor, gcColor)) {
do_fullcolor(ccColor, gcColor);
} else if (i_size == 1) {
do_color(*(u8*)i_data & 0xFF);
}
#else
do_color(*(u8*)i_data & 0xFF);
#endif
break;
}
case MSGTAG_SCALE:
do_scale(*(BE(u16)*)i_data / 100.0f);
break;
@@ -5336,6 +5418,14 @@ void jmessage_string_tRenderingProcessor::do_color(u8 i_colorNo) {
do_strcat(buffer);
}
#if TARGET_PC
void jmessage_string_tRenderingProcessor::do_fullcolor(u32 ccColor, u32 gcColor) {
char buffer[32];
SAFE_SPRINTF(buffer, "\x1b" "CC[%08x]" "\x1b" "GC[%08x]", ccColor, gcColor);
do_strcat(buffer);
}
#endif
void jmessage_string_tRenderingProcessor::do_scale(f32 i_scale) {
J2DTextBox::TFontSize fontSize;
mpReference->getPanePtr()->getFontSize(fontSize);
+13 -4
View File
@@ -43,6 +43,11 @@ u16 message_id(const MessageEntryData& entry) {
return static_cast<u16>(static_cast<u16>(entry.bytes[4]) << 8 | entry.bytes[5]);
}
u16 flow_group(int flowId) {
const bool isCommonFlow = flowId >= 3000 && flowId < dusk::flow::kCustomNodeMin;
return isCommonFlow ? 0 : static_cast<u16>(dMsgObject_getGroupID());
}
} // namespace
#endif
@@ -70,8 +75,7 @@ void dMsgFlow_c::init(fopAc_ac_c* i_partner, int i_flowID, int param_2, fopAc_ac
dMsgObject_changeFlowGroup(i_flowID);
#if TARGET_PC
dusk::flow::bind_resource(dMsgObject_getMsgDtPtr(),
i_flowID >= 3000 ? 0 : static_cast<u16>(dMsgObject_getGroupID()));
dusk::flow::bind_resource(dMsgObject_getMsgDtPtr(), flow_group(i_flowID));
#endif
if (param_2 == 0) {
@@ -399,8 +403,7 @@ void dMsgFlow_c::setInitValueGroupChange(int i_msgNo, fopAc_ac_c** i_talkPartner
dMsgObject_changeFlowGroup(i_msgNo);
#if TARGET_PC
dusk::flow::bind_resource(dMsgObject_getMsgDtPtr(),
i_msgNo >= 3000 ? 0 : static_cast<u16>(dMsgObject_getGroupID()));
dusk::flow::bind_resource(dMsgObject_getMsgDtPtr(), flow_group(i_msgNo));
#endif
setInitValue(0);
@@ -446,6 +449,12 @@ u8* dMsgFlow_c::getMsgDataBlock(char const* block_tag) {
}
u16 dMsgFlow_c::getInitNodeIndex(u16 param_1) {
#if TARGET_PC
if (param_1 >= dusk::flow::kCustomNodeMin) {
return param_1;
}
#endif
u8* var_r30 = NULL;
u16 var_r27 = -1;
+8
View File
@@ -36,6 +36,7 @@
#include "dusk/language.hpp"
#include "dusk/logging.h"
#include "dusk/menu_pointer.h"
#include "dusk/mods/item.hpp"
#include "dusk/mods/svc/flow.hpp"
#include "dusk/settings.h"
#include "dusk/version.hpp"
@@ -832,6 +833,9 @@ u32 dMsgObject_c::getMessageIndex(u32 param_0) {
u32 dMsgObject_c::getRevoMessageIndex(u32 param_1) {
#if TARGET_PC
const u16 sourceGroup = param_1 > 5000 ? static_cast<u16>(s_groupID) : 0;
param_1 = dusk::mods::item_check_message(sourceGroup, param_1);
u16 customGroup = 0;
if (param_1 <= 0xffff &&
dusk::flow::custom_message_group(static_cast<u16>(param_1), customGroup))
@@ -1861,7 +1865,11 @@ void dMsgObject_c::readMessageGroupLocal(mDoDvdThd_mountXArchive_c** p_arcMount)
void dMsgObject_c::changeFlowGroupLocal(s32 param_0) {
mFlowChk = 1;
#if TARGET_PC
changeGroup(param_0 >= 3000 && param_0 < dusk::flow::kCustomNodeMin ? (s16)0 : s_groupID);
#else
changeGroup(param_0 >= 3000 ? (s16)0 : s_groupID);
#endif
}
void dMsgObject_c::demoMessageGroupLocal() {
+30 -9
View File
@@ -10,6 +10,7 @@
#include <cstring>
#include "JSystem/J2DGraph/J2DAnmLoader.h"
#include "dusk/utilities.hpp"
#include "dusk/version.hpp"
#include "f_op/f_op_msg_mng.h"
@@ -1512,11 +1513,31 @@ void dName_c::selectCursorPosSet(int row) {
}
#if TARGET_PC
static dusk::utils::PaneCache l_tagName[] = {
{MULTI_CHAR('m_00_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_00_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_00_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_00_3'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_00_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_01_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_01_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_01_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_01_3'), 0.0f, 0.0f, false},
{MULTI_CHAR('m_01_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_02_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_02_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_02_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_02_3'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_02_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('m03_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m03_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m03_2'), 0.0f, 0.0f, false},
{MULTI_CHAR('m03_3'), 0.0f, 0.0f, false}, {MULTI_CHAR('m03_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_04_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_04_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_04_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_04_3'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_04_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_05_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_05_1'), 0.0f, 0.0f, false},
{MULTI_CHAR('m_05_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_05_3'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_05_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_06_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_06_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_06_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_06_3'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_06_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_07_0'), 0.0f, 0.0f, false},
{MULTI_CHAR('m_07_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_07_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_07_3'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_07_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_08_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_08_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_08_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_08_3'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_08_4'), 0.0f, 0.0f, false},
{MULTI_CHAR('m_09_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_09_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_09_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_09_3'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_09_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_10_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_10_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_10_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_10_3'), 0.0f, 0.0f, false},
{MULTI_CHAR('m_10_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_11_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_11_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_11_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_11_3'), 0.0f, 0.0f, false}, {MULTI_CHAR('m_11_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('m12_0'), 0.0f, 0.0f, false}, {MULTI_CHAR('m12_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('m12_2'), 0.0f, 0.0f, false},
{MULTI_CHAR('m12_3'), 0.0f, 0.0f, false}, {MULTI_CHAR('m12_4'), 0.0f, 0.0f, false}, {MULTI_CHAR('p_end_2'), 0.0f, 0.0f, false}, {MULTI_CHAR('p_end_1'), 0.0f, 0.0f, false}, {MULTI_CHAR('p_end_0'), 0.0f, 0.0f, false},
};
static dusk::utils::PaneCache l_nameTagName[] = {
{MULTI_CHAR('name_00'), 0.0f, 0.0f, false}, {MULTI_CHAR('name_01'), 0.0f, 0.0f, false}, {MULTI_CHAR('name_02'), 0.0f, 0.0f, false}, {MULTI_CHAR('name_03'), 0.0f, 0.0f, false}, {MULTI_CHAR('name_04'), 0.0f, 0.0f, false}, {MULTI_CHAR('name_05'), 0.0f, 0.0f, false}, {MULTI_CHAR('name_06'), 0.0f, 0.0f, false}, {MULTI_CHAR('name_07'), 0.0f, 0.0f, false},
};
static dusk::utils::PaneCache l_nameCurTagName[] = {
{MULTI_CHAR('s__n_00'), 0.0f, 0.0f, false}, {MULTI_CHAR('s__n_01'), 0.0f, 0.0f, false}, {MULTI_CHAR('s__n_02'), 0.0f, 0.0f, false}, {MULTI_CHAR('s__n_03'), 0.0f, 0.0f, false}, {MULTI_CHAR('s__n_04'), 0.0f, 0.0f, false}, {MULTI_CHAR('s__n_05'), 0.0f, 0.0f, false}, {MULTI_CHAR('s__n_06'), 0.0f, 0.0f, false}, {MULTI_CHAR('s__n_07'), 0.0f, 0.0f, false},
};
void dName_c::nameWide() {
static bool cachedPanes = false;
// Get pre-scale values for each pane
if (!cachedPanes) {
for (PaneCache& entry : l_tagName) {
for (dusk::utils::PaneCache& entry : l_tagName) {
J2DPane* pane = nameIn.NameInScr->search(entry.tag);
if (!entry.cached) {
entry.origTransX = pane->getTranslateX();
@@ -1524,7 +1545,7 @@ void dName_c::nameWide() {
entry.cached = true;
}
}
for (PaneCache& entry : l_nameTagName) {
for (dusk::utils::PaneCache& entry : l_nameTagName) {
J2DPane* pane = nameIn.NameInScr->search(entry.tag);
if (!entry.cached) {
entry.origTransX = pane->getTranslateX();
@@ -1532,7 +1553,7 @@ void dName_c::nameWide() {
entry.cached = true;
}
}
for (PaneCache& entry : l_nameCurTagName) {
for (dusk::utils::PaneCache& entry : l_nameCurTagName) {
J2DPane* pane = nameIn.NameInScr->search(entry.tag);
if (!entry.cached) {
entry.origTransX = pane->getTranslateX();
@@ -1546,19 +1567,19 @@ void dName_c::nameWide() {
// Reset all panes
nameIn.NameInScr->scale(1.0f, 1.0f);
nameIn.NameInScr->translate(0.0f, 0.0f);
for (PaneCache& entry : l_tagName) {
for (dusk::utils::PaneCache& entry : l_tagName) {
J2DPane* pane = nameIn.NameInScr->search(entry.tag);
pane->setBasePosition(J2DBasePosition_4);
pane->scale(1.0f, 1.0f);
pane->translate(entry.origTransX, entry.origTransY);
}
for (PaneCache& entry : l_nameTagName) {
for (dusk::utils::PaneCache& entry : l_nameTagName) {
J2DPane* pane = nameIn.NameInScr->search(entry.tag);
pane->setBasePosition(J2DBasePosition_4);
pane->scale(1.0f, 1.0f);
pane->translate(entry.origTransX, entry.origTransY);
}
for (PaneCache& entry : l_nameCurTagName) {
for (dusk::utils::PaneCache& entry : l_nameCurTagName) {
J2DPane* pane = nameIn.NameInScr->search(entry.tag);
pane->setBasePosition(J2DBasePosition_4);
pane->scale(1.0f, 1.0f);
@@ -1574,17 +1595,17 @@ void dName_c::nameWide() {
break;
default: // Wii and Dusklight
// List of Characters Box
for (PaneCache& entry : l_tagName) {
for (dusk::utils::PaneCache& entry : l_tagName) {
J2DPane* pane = nameIn.NameInScr->search(entry.tag);
pane->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
}
// Letters being typed
for (PaneCache& entry : l_nameTagName) {
for (dusk::utils::PaneCache& entry : l_nameTagName) {
J2DPane* pane = nameIn.NameInScr->search(entry.tag);
pane->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
}
// Underscores when typing below letters
for (PaneCache& entry : l_nameCurTagName) {
for (dusk::utils::PaneCache& entry : l_nameCurTagName) {
J2DPane* pane = nameIn.NameInScr->search(entry.tag);
pane->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
}
+28 -2
View File
@@ -43,7 +43,9 @@
#include "dusk/autosave.h"
#include "dusk/d_trigger_view.h"
#include "dusk/memory.h"
#include "dusk/mods/item.hpp"
#include "dusk/ui/ui.hpp"
#include "mods/items.h"
#endif
#if DEBUG
@@ -1197,11 +1199,35 @@ static int phase_1(dScnPly_c* i_this) {
}
// Stage: Ordon Spring, Room: Ordon Spring
#if TARGET_PC
const bool iliaMemoryArrival =
!strcmp(dComIfGp_getStartStageName(), "F_SP104") && dComIfGp_getStartStageRoomNo() == 1 &&
dComIfGp_getStartStagePoint() == 23 && dComIfGp_getStartStageLayer() == 12;
const u32 iliaMemoryTag = dusk::mods::item_give_tag(ITEM_CHECK_ILIA_MEMORY);
if (!iliaMemoryArrival) {
dusk::mods::item_check_cancel(iliaMemoryTag);
}
if (iliaMemoryArrival)
#else
if (!strcmp(dComIfGp_getStartStageName(), "F_SP104") && dComIfGp_getStartStageRoomNo() == 1 &&
dComIfGp_getStartStagePoint() == 23 && dComIfGp_getStartStageLayer() == 12)
#endif
{
dComIfGs_onItemFirstBit(dItemNo_HORSE_FLUTE_e);
dComIfGs_setItem(SLOT_21, dItemNo_HORSE_FLUTE_e);
#if TARGET_PC
const auto itemCheck =
dusk::mods::item_check_commit(iliaMemoryTag, dItemNo_HORSE_FLUTE_e, nullptr);
if (itemCheck.itemNo == dItemNo_HORSE_FLUTE_e) {
#endif
dComIfGs_onItemFirstBit(dItemNo_HORSE_FLUTE_e);
dComIfGs_setItem(SLOT_21, dItemNo_HORSE_FLUTE_e);
#if TARGET_PC
dusk::mods::item_check_complete(itemCheck, nullptr);
} else if (itemCheck.itemNo == dItemNo_NONE_e) {
dusk::mods::item_check_complete(itemCheck, nullptr);
} else {
dusk::mods::item_check_enqueue(itemCheck, dusk::mods::ItemGiveMode::Silent);
}
#endif
}
if ((u8)dKy_darkworld_stage_check(dComIfGp_getStartStageName(),
+9 -5
View File
@@ -906,15 +906,17 @@ int dShopSystem_c::seq_start(fopAc_ac_c* actor, dMsgFlow_c* i_flow) {
if (mFlow.getEventId(&itemNo) == 1) {
if (mItemPartnerId == fpcM_ERROR_PROCESS_ID_e) {
#if TARGET_PC
const char* itemCheckName = nullptr;
u32 itemGiveTag = 0;
if (itemNo == dItemNo_HALF_MILK_BOTTLE_e) {
itemCheckName = "sera_reward";
itemNo = dusk::mods::item_check(itemCheckName, itemNo, actor);
const auto itemCheck =
dusk::mods::item_check_commit("sera_reward", itemNo, actor);
itemNo = itemCheck.itemNo;
itemGiveTag = itemCheck.tag;
}
#endif
mItemPartnerId =
fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1, -1, NULL,
NULL IF_DUSK_ARG(dusk::mods::item_give_tag(itemCheckName)));
NULL IF_DUSK_ARG(itemGiveTag));
}
if (fpcEx_IsExist(mItemPartnerId)) {
@@ -1205,7 +1207,9 @@ int dShopSystem_c::seq_decide_yes(fopAc_ac_c* actor, dMsgFlow_c* i_flow) {
if (mItemPartnerId == fpcM_ERROR_PROCESS_ID_e) {
#if TARGET_PC
const u32 itemGiveTag = dusk::mods::item_give_tag_shop(itemNo & 0xFF);
itemNo = dusk::mods::item_check_shop(itemNo & 0xFF, actor);
const auto itemCheck =
dusk::mods::item_check_commit(itemGiveTag, itemNo & 0xFF, actor);
itemNo = itemCheck.itemNo;
#endif
mItemPartnerId = fopAcM_createItemForPresentDemo(
&current.pos, itemNo, 0, -1, -1, NULL, NULL IF_DUSK_ARG(itemGiveTag));