Merge pull request #624 from TakaRikka/objitem

some d_a_item doc from tp
This commit is contained in:
LagoLunatic
2024-05-08 01:28:56 -04:00
committed by GitHub
8 changed files with 128 additions and 133 deletions
+5 -5
View File
@@ -85,8 +85,8 @@ public:
u32 getItemNo() const { return m_itemNo; }
void setItemTimerForIball(s16 param_1, s16 param_2) {
mDisappearTimer = param_1;
field_0x65a = param_2;
mWaitTimer = param_1;
mDisappearTimer = param_2;
}
void setFlag(u8 flag) { cLib_onBit(mFlag, flag); }
void clrFlag(u8 flag) { cLib_offBit(mFlag, flag); }
@@ -104,9 +104,9 @@ public:
/* 0x650 */ f32 field_0x650;
/* 0x654 */ s16 field_0x654;
/* 0x656 */ s16 mTargetAngleX;
/* 0x658 */ s16 mDisappearTimer;
/* 0x65A */ s16 field_0x65a;
/* 0x65C */ s16 field_0x65c;
/* 0x658 */ s16 mWaitTimer;
/* 0x65A */ s16 mDisappearTimer;
/* 0x65C */ s16 mSimpleExistTimer;
/* 0x65E */ s16 mExtraZRot;
/* 0x660 */ s16 field_0x660;
/* 0x662 */ u8 field_0x662[0x666 - 0x662];
+19 -19
View File
@@ -12,27 +12,27 @@ class mDoExt_brkAnm;
class mDoExt_bckAnm;
struct daItemBase_c_m_data {
/* 0x00 */ f32 mFieldItemGravity;
/* 0x04 */ f32 field_0x04;
/* 0x08 */ f32 field_0x08;
/* 0x00 */ f32 mGravity;
/* 0x04 */ f32 mGroundReflect;
/* 0x08 */ f32 mLaunchSpeed;
/* 0x0C */ f32 mScaleAnimSpeed;
/* 0x10 */ f32 field_0x10;
/* 0x14 */ s16 field_0x14;
/* 0x16 */ s16 mDuration;
/* 0x18 */ s16 field_0x18;
/* 0x1A */ s16 field_0x1A;
/* 0x1C */ s16 mNumFramesPerFullSpin;
/* 0x20 */ f32 field_0x20;
/* 0x24 */ f32 field_0x24;
/* 0x28 */ s16 field_0x28;
/* 0x2A */ s16 mHeartMaxRandomZRot;
/* 0x10 */ f32 mSpeedH;
/* 0x14 */ s16 mFlashCycleTime;
/* 0x16 */ s16 mWaitTime;
/* 0x18 */ s16 mDisappearTime;
/* 0x1A */ s16 mRotateXSpeed;
/* 0x1C */ s16 mRotateYSpeed;
/* 0x20 */ f32 mHeartFallSpeed;
/* 0x24 */ f32 mHeartAmplitude;
/* 0x28 */ s16 mHeartFallCycleTime;
/* 0x2A */ s16 mHeartTilt;
/* 0x2C */ f32 field_0x2C;
/* 0x30 */ f32 field_0x30;
/* 0x34 */ f32 field_0x34;
/* 0x38 */ f32 mPickedUpInitialSpeedY;
/* 0x3C */ f32 mPickedUpGravity;
/* 0x40 */ s16 field_0x40;
/* 0x42 */ s16 field_0x42;
/* 0x38 */ f32 mGetDemoLaunchSpeed;
/* 0x3C */ f32 mGetDemoGravity;
/* 0x40 */ s16 mSimpleExistTime;
/* 0x42 */ s16 mNoGetTime;
/* 0x44 */ f32 field_0x44;
/* 0x48 */ f32 mVelocityScale;
};
@@ -83,8 +83,8 @@ public:
/* 0x4FC */ dCcD_Cyl mCyl;
/* 0x62C */ u32 mShadowId;
/* 0x630 */ s32 mItemBitNo;
/* 0x634 */ s32 field_0x634;
/* 0x638 */ s16 field_0x638;
/* 0x634 */ s32 m_timer;
/* 0x638 */ s16 m_get_timer;
/* 0x63A */ u8 m_itemNo;
/* 0x63B */ u8 mDrawFlags;
}; // Size: 0x63C
+2 -2
View File
@@ -344,8 +344,8 @@ public:
static u32 getFieldHeapSize(u8 no) { return field_item_res[no].mHeapSize; }
static u8 getShadowSize(u8 no) { return item_info[no].mShadowSize; }
static u8 getH(u8 no) { return item_info[no].mCollisionH; }
static u8 getR(u8 no) { return item_info[no].mCollisionR; }
static const u8 getH(u8 no) { return item_info[no].mCollisionH; }
static const u8 getR(u8 no) { return item_info[no].mCollisionR; }
static bool chkFlag(u8 no, u32 mask) { return item_info[no].mFlag & mask; }
static bool checkAppearEffect(u8 no);
+2 -2
View File
@@ -395,7 +395,7 @@ void daDitem_c::anim_control() {
case UNK_BOTTLE_5E:
case UNK_BOTTLE_5F:
case UNK_BOTTLE_60:
if (field_0x634 > 30) {
if (m_timer > 30) {
animPlay(1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
}
break;
@@ -479,7 +479,7 @@ BOOL daDitem_c::draw() {
}
BOOL daDitem_c::execute() {
field_0x634++;
m_timer++;
if (chkDraw()) {
setParticle();
+75 -80
View File
@@ -134,19 +134,20 @@ void itemGetCallBack(fopAc_ac_c* item_actor, dCcD_GObjInf*, fopAc_ac_c* collided
void daItem_c::CreateInit() {
mAcchCir.SetWall(30.0f, 30.0f);
mAcch.Set(&current.pos, &old.pos, this, 1, &mAcchCir, fopAcM_GetSpeed_p(this));
mAcch.m_flags &= ~0x400;
mAcch.m_flags &= ~0x8;
mAcch.ClrWaterNone();
mAcch.ClrRoofNone();
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
mStts.Init(0, 0xFF, this);
mCyl.Set(m_cyl_src);
mCyl.SetStts(&mStts);
mCyl.SetCoHitCallback(&itemGetCallBack);
// Regswaps if the inlines are used.
// f32 height = dItem_data::getH(m_itemNo);
// f32 radius = dItem_data::getR(m_itemNo);
f32 height = dItem_data::item_info[m_itemNo].mCollisionH;
f32 radius = dItem_data::item_info[m_itemNo].mCollisionR;
f32 height = dItem_data::getH(m_itemNo);
f32 radius = dItem_data::getR(m_itemNo);
if (scale.x > 1.0f) {
height *= scale.x;
radius *= scale.x;
@@ -154,8 +155,8 @@ void daItem_c::CreateInit() {
mCyl.SetR(radius);
mCyl.SetH(height);
mDisappearTimer = getData()->mDuration;
field_0x65a = getData()->field_0x18;
mWaitTimer = getData()->mWaitTime;
mDisappearTimer = getData()->mDisappearTime;
field_0x650 = fopAcM_GetSpeed(this).y;
mItemStatus = STATUS_UNK0;
@@ -259,7 +260,7 @@ BOOL daItem_c::_daItem_execute() {
timeCount();
eyePos = current.pos;
eyePos.y += dItem_data::getH(m_itemNo)/2.0f;
eyePos.y += dItem_data::getH(m_itemNo) / 2.0f;
attention_info.position = current.pos;
switch (mItemStatus) {
@@ -350,10 +351,9 @@ void daItem_c::execInitNormalDirection() {
scale.set(mScaleTarget.x, mScaleTarget.y, mScaleTarget.z);
mExtraZRot = 0;
field_0x65c = getData()->field_0x40;
f32 speedY = getData()->mPickedUpInitialSpeedY;
speed.set(0.0f, speedY, 0.0f);
gravity = getData()->mPickedUpGravity;
mSimpleExistTimer = getData()->mSimpleExistTime;
fopAcM_SetSpeed(this, 0, getData()->mGetDemoLaunchSpeed, 0);
fopAcM_SetGravity(this, getData()->mGetDemoGravity);
show();
@@ -383,8 +383,8 @@ void daItem_c::execMainNormalDirection() {
current.angle = dComIfGp_getCamera(0)->mAngle;
field_0x65c--;
if (field_0x65c < 0) {
mSimpleExistTimer--;
if (mSimpleExistTimer < 0) {
fopAcM_delete(this);
}
}
@@ -455,13 +455,12 @@ void daItem_c::execWaitMain() {
cLib_chaseF(&scale.z, mScaleTarget.z, scaleStepZ);
}
if (checkItemDisappear() && mDisappearTimer == 0) {
if (field_0x65a == 0) {
if (checkItemDisappear() && mWaitTimer == 0) {
if (mDisappearTimer == 0) {
fopAcM_delete(this);
}
s32 temp1 = getData()->field_0x14;
s32 temp2 = field_0x634 / temp1;
if (!(field_0x634 - temp2 * temp1)) {
if (m_timer % getData()->mFlashCycleTime == 0) {
changeDraw();
}
}
@@ -492,15 +491,15 @@ void daItem_c::execWaitMainFromBoss() {
/* 800F5FC0-800F60C0 .text scaleAnimFromBossItem__8daItem_cFv */
void daItem_c::scaleAnimFromBossItem() {
if (field_0x638 < 30) {
scale.x = cM_ssin(field_0x634*0x2000 - 0x4000)*2.0f / field_0x634+1.0f;
if (m_get_timer < 30) {
scale.x = cM_ssin(m_timer*0x2000 - 0x4000)*2.0f / m_timer+1.0f;
if (scale.x < 0.0f) {
scale.x = 0.0f;
}
scale.y = scale.x;
scale.z = scale.x;
} else {
if (field_0x638 == 30) {
if (m_get_timer == 30) {
fopAcM_seStart(this, JA_SE_CM_BOSS_HEART_APPEAR, 0);
}
scale.setall(1.0f);
@@ -771,7 +770,7 @@ void daItem_c::itemGetExecute() {
/* 800F6D24-800F6D78 .text itemDefaultRotateY__8daItem_cFv */
void daItem_c::itemDefaultRotateY() {
// Rotates at a fixed speed.
s16 rotationSpeed = 0xFFFF / getData()->mNumFramesPerFullSpin;
s16 rotationSpeed = 0xFFFF / getData()->mRotateYSpeed;
fopAcM_addAngleY(this, current.angle.y + rotationSpeed, rotationSpeed);
}
@@ -810,12 +809,12 @@ void daItem_c::setItemTimer(int timer) {
setFlag(FLAG_UNK10);
return;
}
mDisappearTimer = timer;
mWaitTimer = timer;
}
/* 800F6E74-800F6EC8 .text checkPlayerGet__8daItem_cFv */
BOOL daItem_c::checkPlayerGet() {
if (field_0x638 < getData()->field_0x42) {
if (m_get_timer < getData()->mNoGetTime) {
return FALSE;
}
if (mItemStatus == STATUS_BRING_NEZUMI) {
@@ -830,7 +829,7 @@ BOOL daItem_c::itemActionForRupee() {
checkWall();
if (mAcch.ChkGroundLanding()) {
f32 temp2 = field_0x650 * getData()->field_0x04;
f32 temp2 = field_0x650 * getData()->mGroundReflect;
if (temp2 > gravity - 0.5f) {
speedF = 0.0f;
} else {
@@ -854,7 +853,7 @@ BOOL daItem_c::itemActionForRupee() {
field_0x650 = speed.y;
}
field_0x654 = getData()->field_0x1A;
field_0x654 = getData()->mRotateXSpeed;
if (mOnGroundTimer == 0) {
mTargetAngleX = current.angle.x + field_0x654;
@@ -871,10 +870,10 @@ BOOL daItem_c::itemActionForRupee() {
/* 800F7028-800F713C .text itemActionForHeart__8daItem_cFv */
BOOL daItem_c::itemActionForHeart() {
f32 origSpeedY = speed.y;
f32 origSpeedY = fopAcM_GetSpeed(this).y;
if (origSpeedY < 0.0f) {
gravity = 0.0f;
speed.set(0.0f, getData()->field_0x20, 0.0f);
fopAcM_SetGravity(this, 0.0f);
fopAcM_SetSpeed(this, 0.0f, getData()->mHeartFallSpeed, 0.0f);
}
mAcch.CrrPos(*dComIfG_Bgsp());
@@ -882,13 +881,12 @@ BOOL daItem_c::itemActionForHeart() {
if (mAcch.ChkGroundLanding() || mAcch.ChkGroundHit()) {
clrFlag(FLAG_UNK04);
mExtraZRot = 0;
speed.set(0.0f, -1.0f, 0.0f);
speedF = 0.0f;
fopAcM_SetSpeed(this, 0.0f, -1.0f, 0.0f);
fopAcM_SetSpeedF(this, 0.0f);
itemDefaultRotateY();
} else if (origSpeedY < 0.0f) {
f32 temp2 = getData()->field_0x24;
int temp = field_0x634 * getData()->field_0x28;
speedF = temp2 * cM_ssin(temp);
origSpeedY = getData()->mHeartAmplitude;
fopAcM_SetSpeedF(this, origSpeedY * cM_ssin(m_timer * getData()->mHeartFallCycleTime));
}
return TRUE;
@@ -900,7 +898,7 @@ BOOL daItem_c::itemActionForKey() {
checkWall();
if (mAcch.ChkGroundLanding()) {
f32 temp2 = field_0x650 * getData()->field_0x04;
f32 temp2 = field_0x650 * getData()->mGroundReflect;
if (temp2 > gravity - 0.5f) {
speedF = 0.0f;
current.angle.x = 0x4000;
@@ -926,7 +924,7 @@ BOOL daItem_c::itemActionForKey() {
field_0x650 = speed.y;
}
field_0x654 = getData()->field_0x1A;
field_0x654 = getData()->mRotateXSpeed;
if (mOnGroundTimer == 0) {
mTargetAngleX = current.angle.x + field_0x654;
@@ -944,7 +942,7 @@ BOOL daItem_c::itemActionForEmono() {
mAcch.CrrPos(*dComIfG_Bgsp());
if (mAcch.ChkGroundLanding()) {
f32 temp2 = field_0x650 * getData()->field_0x04;
f32 temp2 = field_0x650 * getData()->mGroundReflect;
if (temp2 > gravity - 0.5f) {
speedF = 0.0f;
} else {
@@ -953,7 +951,7 @@ BOOL daItem_c::itemActionForEmono() {
set_bound_se();
} else if (mAcch.ChkGroundHit()) {
s16 rotationSpeed = 0xFFFF / getData()->mNumFramesPerFullSpin;
s16 rotationSpeed = 0xFFFF / getData()->mRotateYSpeed;
rotationSpeed = rotationSpeed / 2;
fopAcM_addAngleY(this, current.angle.y + rotationSpeed, rotationSpeed);
speedF = 0.0f;
@@ -973,20 +971,20 @@ BOOL daItem_c::itemActionForSword() {
bool isQuake = dComIfGp_getDetect().chk_quake(&current.pos);
if (isQuake && !checkFlag(FLAG_QUAKE) && mAcch.ChkGroundHit()) {
speed.set(0.0f, 21.0f, 0.0f);
gravity = -3.5f;
fopAcM_SetSpeed(this, 0.0f, 21.0f, 0.0f);
fopAcM_SetGravity(this, -3.5f);
}
if (mAcch.ChkGroundLanding()) {
f32 temp = field_0x650 * 0.9f;
speed.set(0.0f, -temp, 0.0f);
fopAcM_SetSpeed(this, 0.0f, -temp, 0.0f);
if (m_itemNo == SWORD) {
if (field_0x638 > 15) {
if (m_get_timer > 15) {
fopAcM_seStart(this, JA_SE_OBJ_LNK_SWORD_FALL, 0);
}
} else if (m_itemNo == SHIELD) {
if (field_0x638 > 15) {
if (m_get_timer > 15) {
fopAcM_seStart(this, JA_SE_OBJ_LNK_SHIELD_FALL, 0);
}
}
@@ -1046,7 +1044,7 @@ BOOL daItem_c::itemActionForArrow() {
}
if (mAcch.ChkGroundLanding()) {
f32 temp_f3 = field_0x650 * getData()->field_0x04;
f32 temp_f3 = field_0x650 * getData()->mGroundReflect;
if (temp_f3 > gravity - 0.5f) {
speedF = 0.0f;
} else {
@@ -1080,7 +1078,7 @@ BOOL daItem_c::itemActionForArrow() {
if (m_itemNo == UTUWA_HEART) {
if (mOnGroundTimer != 0) {
getData();
s16 rotationSpeed = 0xFFFF / getData()->mNumFramesPerFullSpin;
s16 rotationSpeed = 0xFFFF / getData()->mRotateYSpeed;
cLib_addCalcAngleS(&field_0x654, rotationSpeed, 10, 0x400, 0x100);
}
@@ -1119,13 +1117,11 @@ void daItem_c::checkWall() {
/* 800F7BF8-800F7DDC .text set_bound_se__8daItem_cFv */
void daItem_c::set_bound_se() {
if (field_0x638 < 10) {
if (m_get_timer < 10) {
return;
}
f32 temp2 = fabs(field_0x650);
temp2 = 2.0f * temp2;
u32 temp = temp2;
u32 temp = fabsf(field_0x650) * 2.0f;
if (temp > 100) {
temp = 100;
}
@@ -1186,16 +1182,16 @@ BOOL daItem_c::checkGetItem() {
/* 800F7E6C-800F7F0C .text timeCount__8daItem_cFv */
BOOL daItem_c::timeCount() {
field_0x634++;
if (field_0x638 < m_timer_max) {
field_0x638++;
m_timer++;
if (m_get_timer < m_timer_max) {
m_get_timer++;
}
if (checkPlayerGet() && !dComIfGp_event_runCheck()) {
if (mDisappearTimer > 0) {
if (mWaitTimer > 0) {
mWaitTimer--;
} else if (mDisappearTimer > 0) {
mDisappearTimer--;
} else if (field_0x65a > 0) {
field_0x65a--;
}
}
@@ -1205,7 +1201,7 @@ BOOL daItem_c::timeCount() {
/* 800F7F0C-800F7F50 .text mode_wait_init__8daItem_cFv */
void daItem_c::mode_wait_init() {
mMode = 0;
gravity = getData()->mFieldItemGravity;
gravity = getData()->mGravity;
mPtclRippleCb.end();
}
@@ -1225,8 +1221,8 @@ void daItem_c::mode_water_init() {
current.pos.y = mAcch.m_wtr.GetHeight();
}
speed.setall(0.0f);
speedF = 0.0f;
fopAcM_SetSpeed(this, 0.0f, 0.0f, 0.0f);
fopAcM_SetSpeedF(this, 0.0f);
current.angle.z = 0;
current.angle.x = 0;
mExtraZRot = 0;
@@ -1327,7 +1323,7 @@ void daItem_c::mode_water() {
current.pos.y = mAcch.m_wtr.GetHeight();
}
s16 rotationSpeed = 0xFFFF / daItemBase_c::m_data.mNumFramesPerFullSpin;
s16 rotationSpeed = 0xFFFF / daItemBase_c::m_data.mRotateYSpeed;
fopAcM_addAngleY(this, current.angle.y + rotationSpeed, rotationSpeed);
}
@@ -1359,7 +1355,7 @@ BOOL daItem_c::initAction() {
break;
}
gravity = getData()->mFieldItemGravity;
gravity = getData()->mGravity;
clrFlag(FLAG_UNK04);
mMode = 0;
@@ -1367,50 +1363,50 @@ BOOL daItem_c::initAction() {
}
// TODO: bug? usage of uninitialized register f31 in some cases
f32 temp_f31;
f32 y_speed;
switch (mAction) {
case 1:
temp_f31 = getData()->field_0x08 + cM_rndFX(5.0f);
speedF = getData()->field_0x10 / 10.0f;
y_speed = getData()->mLaunchSpeed + cM_rndFX(5.0f);
speedF = getData()->mSpeedH / 10.0f;
if (g_mDoCPd_cpadInfo[0].mMainStickValue) {
speedF = getData()->field_0x10;
speedF = getData()->mSpeedH;
}
current.angle.y = cM_rndF((f32)0xFFFF);
break;
case 3:
temp_f31 = 25.0f;
y_speed = 25.0f;
current.angle.y = cM_rndF((f32)0xFFFF);
speedF = getData()->mVelocityScale;
break;
case 7:
speedF = getData()->mVelocityScale * 1.5f;
current.angle.y = cM_rndF((f32)0xFFFF);
temp_f31 = getData()->field_0x08 + cM_rndFX(5.0f);
y_speed = getData()->mLaunchSpeed + cM_rndFX(5.0f);
break;
case 2:
case 4:
case 9:
speedF = 0.0f;
current.angle.y = cM_rndF((f32)0xFFFF);
temp_f31 = getData()->field_0x08 + cM_rndFX(5.0f);
y_speed = getData()->mLaunchSpeed + cM_rndFX(5.0f);
break;
case 8:
current.angle.y = cM_rndF((f32)0xFFFF);
temp_f31 = getData()->field_0x44 + cM_rndFX(5.0f);
y_speed = getData()->field_0x44 + cM_rndFX(5.0f);
speedF = getData()->mVelocityScale;
break;
case 0xA:
gravity = getData()->mFieldItemGravity;
gravity = getData()->mGravity;
scale.setall(0.0f);
mMode = 0;
break;
case 0xB:
current.angle.y = cM_rndF((f32)0xFFFF);
temp_f31 = 0.0f;
y_speed = 0.0f;
speedF = 0.0f;
break;
case 6:
temp_f31 = getData()->field_0x08 + cM_rndFX(5.0f);
y_speed = getData()->mLaunchSpeed + cM_rndFX(5.0f);
break;
case 0:
case 5:
@@ -1421,14 +1417,13 @@ BOOL daItem_c::initAction() {
if (isHeart(m_itemNo)) {
speedF = 2.0f * speedF;
mExtraZRot = cM_rndFX(getData()->mHeartMaxRandomZRot);
mExtraZRot = cM_rndFX(getData()->mHeartTilt);
}
gravity = getData()->mFieldItemGravity;
speed.set(0.0f, temp_f31, 0.0f);
fopAcM_SetGravity(this, getData()->mGravity);
fopAcM_SetSpeed(this, 0.0f, y_speed, 0.0f);
// This line setting speedF to itself gets optimized out and produces no code, but affects regalloc.
// It's not known what the original code that got optimized out here was, it could be speedF or something else.
speedF = speedF;
fopAcM_SetSpeedF(this, speedF);
scale.setall(0.0f);
mMode = 0;
+1 -1
View File
@@ -127,7 +127,7 @@ static BOOL daRaceItem_Execute(daRaceItem_c* i_this) {
/* 0000073C-00000C44 .text execute__12daRaceItem_cFv */
BOOL daRaceItem_c::execute() {
field_0x634++;
m_timer++;
animPlay(1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
eyePos = current.pos;
eyePos.y += scale.x * dItem_data::getH(m_itemNo) / 2.0f;
+1 -1
View File
@@ -133,7 +133,7 @@ BOOL daSpcItem01_c::CreateInit() {
BOOL daSpcItem01_c::_execute() {
eyePos = current.pos;
attention_info.position = current.pos;
field_0x634++;
m_timer++;
set_effect();
scale_anim();
anim_play();
+23 -23
View File
@@ -9,29 +9,29 @@
#include "dolphin/types.h"
const daItemBase_c_m_data daItemBase_c::m_data = {
/* mFieldItemGravity */ -7.0f,
/* field_0x04 */ 0.62f,
/* field_0x08 */ 50.0f,
/* mScaleAnimSpeed */ 20.0f,
/* field_0x10 */ 5.0f,
/* field_0x14 */ 1,
/* mDuration */ 8*30,
/* field_0x18 */ 2*30,
/* field_0x1A */ 0x2000,
/* mNumFramesPerFullSpin */ 82,
/* field_0x20 */ -4.0f,
/* field_0x24 */ 3.5f,
/* field_0x28 */ 1100,
/* mHeartMaxRandomZRot */ 0x0BB8,
/* field_0x2C */ 30.0f,
/* field_0x30 */ 10.0f,
/* field_0x34 */ 1.5f,
/* mPickedUpInitialSpeedY */ 23.0f,
/* mPickedUpGravity */ -6.0f,
/* field_0x40 */ 13,
/* field_0x42 */ 16,
/* field_0x44 */ 50.0f,
/* mVelocityScale */ 7.0f,
/* mGravity */ -7.0f,
/* mGroundReflect */ 0.62f,
/* mLaunchSpeed */ 50.0f,
/* mScaleAnimSpeed */ 20.0f,
/* mSpeedH */ 5.0f,
/* mFlashCycleTime */ 1,
/* mWaitTime */ 8*30,
/* mDisappearTime */ 2*30,
/* mRotateXSpeed */ 0x2000,
/* mRotateYSpeed */ 82,
/* mHeartFallSpeed */ -4.0f,
/* mHeartAmplitude */ 3.5f,
/* mHeartFallCycleTime */ 1100,
/* mHeartTilt */ 0x0BB8,
/* field_0x2C */ 30.0f,
/* field_0x30 */ 10.0f,
/* field_0x34 */ 1.5f,
/* mGetDemoLaunchSpeed */ 23.0f,
/* mGetDemoGravity */ -6.0f,
/* mSimpleExistTime */ 13,
/* mNoGetTime */ 16,
/* field_0x44 */ 50.0f,
/* mVelocityScale */ 7.0f,
};
/* 80068650-80068658 .text getItemNo__12daItemBase_cFv */