Foolish items

This commit is contained in:
gymnast86
2026-05-11 13:47:17 -07:00
parent 5e69c7bdce
commit ba5a59eee2
16 changed files with 507 additions and 367 deletions
+36 -18
View File
@@ -75,7 +75,7 @@ void daItem_c::setBaseMtx() {
if (mpModel != NULL) {
mpModel->setBaseScale(scale);
switch (m_itemNo) {
switch (M_ITEMNO_MODEL_ITEM_ID) {
case dItemNo_GREEN_RUPEE_e:
case dItemNo_BLUE_RUPEE_e:
case dItemNo_YELLOW_RUPEE_e:
@@ -162,8 +162,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 = dItem_data::getH(M_ITEMNO_MODEL_ITEM_ID);
f32 cylRadius = dItem_data::getR(M_ITEMNO_MODEL_ITEM_ID);
if (scale.x > 1.0f) {
cylHeight *= scale.x;
@@ -184,7 +184,7 @@ void daItem_c::CreateInit() {
#if TARGET_PC
if (randomizer_IsActive()) {
// Adjust item scale based on item ID
switch(m_itemNo)
switch(M_ITEMNO_MODEL_ITEM_ID)
{
case dItemNo_Randomizer_KAKERA_HEART_e:
case dItemNo_Randomizer_UTAWA_HEART_e:
@@ -260,7 +260,7 @@ void daItem_c::CreateInit() {
if (m_itemNo == dItemNo_BOOMERANG_e IF_DUSK(&& !randomizer_IsActive())) {
itemGetNextExecute();
} else if ((m_itemNo == dItemNo_ORANGE_RUPEE_e || m_itemNo == dItemNo_SILVER_RUPEE_e) &&
} else if ((M_ITEMNO_MODEL_ITEM_ID == dItemNo_ORANGE_RUPEE_e || M_ITEMNO_MODEL_ITEM_ID == dItemNo_SILVER_RUPEE_e) &&
mSparkleEmtr.getEmitter() == NULL)
{
dComIfGp_particle_set(0x0C14, &mSparklePos, NULL, NULL, -1, &mSparkleEmtr, -1, NULL, NULL,
@@ -316,7 +316,7 @@ int daItem_c::_daItem_create() {
shape_angle.z = 0;
shape_angle.x = 0;
#if TARGET_PC
setRandomizerItem();
setRandomizerItem(/*setFoolishItemModel = */true);
#endif
field_0x95d = true;
}
@@ -359,10 +359,12 @@ int daItem_c::_daItem_create() {
if (flag) {
CreateInit();
} else {
phase_state = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(m_itemNo));
#if TARGET_PC
#endif
phase_state = dComIfG_resLoad(&mPhase, dItem_data::getFieldArc(M_ITEMNO_MODEL_ITEM_ID));
if (phase_state == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, CheckFieldItemCreateHeap,
dItem_data::getFieldHeapSize(m_itemNo)))
dItem_data::getFieldHeapSize(M_ITEMNO_MODEL_ITEM_ID)))
{
return cPhs_ERROR_e;
}
@@ -379,7 +381,7 @@ int daItem_c::_daItem_execute() {
CountTimer();
eyePos = current.pos;
eyePos.y += (f32)dItem_data::getH(m_itemNo) / 2;
eyePos.y += (f32)dItem_data::getH(M_ITEMNO_MODEL_ITEM_ID) / 2;
attention_info.position = current.pos;
@@ -421,7 +423,7 @@ int daItem_c::_daItem_execute() {
mLastPos = current.pos;
field_0x95f = (fopAcM_checkHookCarryNow(this) >> 0x14) & 1;
if (m_itemNo == dItemNo_ORANGE_RUPEE_e || m_itemNo == dItemNo_SILVER_RUPEE_e) {
if (M_ITEMNO_MODEL_ITEM_ID == dItemNo_ORANGE_RUPEE_e || M_ITEMNO_MODEL_ITEM_ID == dItemNo_SILVER_RUPEE_e) {
mSparklePos = current.pos;
mSparklePos.y += 18.0f;
}
@@ -448,11 +450,11 @@ int daItem_c::_daItem_draw() {
int daItem_c::_daItem_delete() {
mSound.deleteObject();
if (m_itemNo == dItemNo_ORANGE_RUPEE_e || m_itemNo == dItemNo_SILVER_RUPEE_e) {
if (M_ITEMNO_MODEL_ITEM_ID == dItemNo_ORANGE_RUPEE_e || M_ITEMNO_MODEL_ITEM_ID == dItemNo_SILVER_RUPEE_e) {
mSparkleEmtr.remove();
}
DeleteBase(dItem_data::getFieldArc(m_itemNo));
DeleteBase(dItem_data::getFieldArc(M_ITEMNO_MODEL_ITEM_ID));
return 1;
}
@@ -550,7 +552,7 @@ void daItem_c::procMainSimpleGetDemo() {
void daItem_c::procInitGetDemoEvent() {
hide();
if (m_itemNo == dItemNo_ORANGE_RUPEE_e || m_itemNo == dItemNo_SILVER_RUPEE_e) {
if (M_ITEMNO_MODEL_ITEM_ID == dItemNo_ORANGE_RUPEE_e || M_ITEMNO_MODEL_ITEM_ID == dItemNo_SILVER_RUPEE_e) {
mSparkleEmtr.remove();
}
@@ -561,12 +563,19 @@ void daItem_c::procInitGetDemoEvent() {
#if TARGET_PC
// Set rando item again incase this item is progressive and
// player picked up another one before this one on the same stage
u8 oldItemNo = m_itemNo;
setRandomizerItem();
#endif
m_item_id = fopAcM_createItemForTrBoxDemo(&current.pos, m_itemNo, -1, fopAcM_GetRoomNo(this),
NULL, NULL);
JUT_ASSERT(0, m_item_id != fpcM_ERROR_PROCESS_ID_e);
#if TARGET_PC
// Set the itemNo back to the old one since the game relies on this
// to properly delete the arc it loaded
m_itemNo = oldItemNo;
#endif
setStatus(STATUS_WAIT_GET_DEMO_EVENT_e);
}
@@ -623,8 +632,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 = dItem_data::getH(M_ITEMNO_MODEL_ITEM_ID);
u8 radius = dItem_data::getR(M_ITEMNO_MODEL_ITEM_ID);
mCcCyl.SetR((f32)radius * 2.0f);
mCcCyl.SetH((f32)height * 2.0f);
mCcCyl.OnCoSPrmBit(1);
@@ -807,7 +816,7 @@ void daItem_c::mode_wait() {
mAcch.SetGrndNone();
}
switch (m_itemNo) {
switch (M_ITEMNO_MODEL_ITEM_ID) {
case dItemNo_HEART_e:
itemActionForHeart();
break;
@@ -851,7 +860,7 @@ void daItem_c::mode_water() {
}
f32 scale = 1.0f;
switch (m_itemNo) {
switch (M_ITEMNO_MODEL_ITEM_ID) {
case dItemNo_HEART_e:
scale = 0.5f;
break;
@@ -902,6 +911,7 @@ void daItem_c::itemGetNextExecute() {
case dItemNo_ARROW_1_e:
procInitSimpleGetDemo();
itemGet();
break;
case dItemNo_BLUE_RUPEE_e:
case dItemNo_YELLOW_RUPEE_e:
case dItemNo_RED_RUPEE_e:
@@ -994,6 +1004,7 @@ void daItem_c::itemGet() {
#if TARGET_PC
// Set rando item again incase this item is progressive and
// player picked up another one before this one on the same stage
u8 oldItemNo = m_itemNo;
setRandomizerItem();
#endif
switch (m_itemNo) {
@@ -1058,6 +1069,9 @@ void daItem_c::itemGet() {
OS_REPORT_ERROR("[daItem_c]ゲット処理が定義されていません[%d]\n", m_itemNo);
break;
}
#if TARGET_PC
m_itemNo = oldItemNo;
#endif
}
BOOL daItem_c::checkCountTimer() {
@@ -1221,7 +1235,7 @@ void daItem_c::set_bound_se() {
}
#if TARGET_PC
void daItem_c::setRandomizerItem() {
void daItem_c::setRandomizerItem(bool setFoolishItemModel) {
if (randomizer_IsActive()) {
u32 params = fopAcM_GetParam(this);
u8 flag = daItem_prm::getItemBitNo(this);
@@ -1236,6 +1250,10 @@ void daItem_c::setRandomizerItem() {
params |= verifyProgressiveItem(newItemId);
fopAcM_SetParam(this, params);
m_itemNo = daItem_prm::getItemNo(this);
// Set the ice trap model if this is an ice trap, and it isn't set
if (setFoolishItemModel && m_itemNo == dItemNo_Randomizer_FOOLISH_ITEM_e && home.angle.z == 0) {
home.angle.z = randomizer_getRandomFoolishItemModelID();
}
}
}
}