Code:
MONSTER_OBJECT *__thiscall MONSTER_OBJECT::MONSTER_OBJECT(MONSTER_OBJECT *this)
{
this->mCheckValidState = 0;
return this;
}
void __thiscall MONSTER_OBJECT::Init(MONSTER_OBJECT *this)
{
this->mCheckValidState = 0;
}
void __thiscall MONSTER_OBJECT::Free(MONSTER_OBJECT *this)
{
this->mCheckValidState = 0;
}
void __thiscall MONSTER_OBJECT::PlayActionSound(MONSTER_OBJECT *This, int tObjIndex)
{
GSOUND *v2; // eax
if ( This->mCheckValidState )
{
v2 = GDATA::ReturnMonsterSound(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
GSOUND::Play3(v2, This->mDATA.mAction.aLocation, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation);
}
}
void __thiscall MONSTER_OBJECT::Draw(MONSTER_OBJECT *This, int tDrawSort, int tObjIndex, float dTime)
{
float tHeightForCulling; // [esp+Ch] [ebp-38h]
float tHeightForCullingb; // [esp+Ch] [ebp-38h]
float tHeightForCullinga; // [esp+Ch] [ebp-38h]
float tHeightForCullingc; // [esp+Ch] [ebp-38h]
float tLength; // [esp+14h] [ebp-30h]
int v10; // [esp+20h] [ebp-24h]
int v11; // [esp+24h] [ebp-20h]
int v12; // [esp+28h] [ebp-1Ch]
float tAngle; // [esp+2Ch] [ebp-18h] BYREF
float v14; // [esp+30h] [ebp-14h]
float v15; // [esp+34h] [ebp-10h]
int v16; // [esp+38h] [ebp-Ch]
int v17; // [esp+3Ch] [ebp-8h]
GMOTION *tMOTION; // [esp+40h] [ebp-4h]
if ( !This->mCheckValidState )
return;
if ( tDrawSort < 1 )
return;
if ( tDrawSort > 2 )
return;
tLength = This->mMONSTER_INFO->mSize[1];
if ( !UTIL::CheckPossibleDrawMeWithCamera(This->mDATA.mAction.aLocation, tLength) )
return;
tAngle = 0.0;
v14 = This->mDATA.mAction.aFront;
v15 = 0.0;
if ( This->mMONSTER_INFO->mIndex >= 589 && This->mMONSTER_INFO->mIndex <= 600 )
{
v12 = CHUGSOUNG_WAR_UI::ZoneIndex(mMYINFO[0].mPresentZoneNumber);
if ( v12 != -1 )
{
v10 = mCHUGSOUNG_WAR_UI[0].c[v12] % 100;
v11 = mCHUGSOUNG_WAR_UI[0].c[v12] / 100;
if ( v11 == 1 || v11 == 3 || v11 == 5 || v11 == 7 )
{
v17 = UTIL::ReturnChugSoungWarObject(v10, v11);
if ( v17 != -1 )
{
GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_004[v17], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, &tAngle, 1);
if ( This->mDATA.mAction.aFrame >= 41.0 )
This->mDATA.mAction.aFrame = 0.0;
}
return;
}
if ( v10 == 3 )
GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_005[v11 / 2 + 235], tDrawSort, 0.0, This->mDATA.mAction.aLocation, &tAngle, 1);
}
}
tMOTION = GDATA::ReturnMonsterMotion(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
tHeightForCulling = This->mMONSTER_INFO->mSize[1];
if ( This->c26 )
GSOBJECT::DisplaySObject(mGDATA[0].mNPC[This->mMONSTER_INFO->mDataSortNumber + 65], tDrawSort, 0.0, This->c33, This->cFront, tHeightForCulling, tMOTION, 1);
else
GSOBJECT::DisplaySObject(mGDATA[0].mNPC[This->mMONSTER_INFO->mDataSortNumber + 65], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCulling, tMOTION, 1);
if ( This->mMONSTER_INFO->mType != 2 )
{
if ( This->mMONSTER_INFO->mIndex == 1141 || This->mMONSTER_INFO->mIndex == 1142 || This->mMONSTER_INFO->mIndex == 1143 || This->mMONSTER_INFO->mIndex == 1144 )
{
tHeightForCullinga = This->mMONSTER_INFO->mSize[1];
if ( This->mDATA.mLifeValue > 0 )
GSOBJECT::DisplaySObject(mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullinga, tMOTION, 1);
else
GSOBJECT::DisplaySObject((576 * (This->mMONSTER_INFO->mDataSortNumber - 1) + 15907192), tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullinga, tMOTION, 1);
goto LABEL_34;
}
goto LABEL_33;
}
if ( mGAMEOPTION[0].mMetureMode != 1 )
{
LABEL_33:
tHeightForCullingc = This->mMONSTER_INFO->mSize[1];
GSOBJECT::DisplaySObject(mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullingc, tMOTION, 1);
goto LABEL_34;
}
v16 = 3 - (This->mDATA.mLifeValue * 100.0 / This->mMONSTER_INFO->mLife) / 30;
tHeightForCullingb = This->mMONSTER_INFO->mSize[1];
GSOBJECT::DisplaySObject(&mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296][v16], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullingb, tMOTION, 1);
LABEL_34:
tAngle = 0.0;
v14 = This->mDATA.mAction.aFront;
v15 = 0.0;
switch ( This->mDATA.mAction.aSort )
{
case 0:
v17 = UTIL::ReturnMonsterCreateObject(This->mMONSTER_INFO->mDataSortNumber);
if ( v17 != -1 )
goto LABEL_42;
break;
case 5:
v17 = UTIL::ReturnMonsterAttackObject(This->mMONSTER_INFO->mDataSortNumber);
if ( v17 != -1 )
goto LABEL_42;
break;
case 7:
v17 = UTIL::ReturnMonsterSkillObject(This->mMONSTER_INFO->mDataSortNumber);
if ( v17 != -1 )
goto LABEL_42;
break;
case 12:
v17 = UTIL::ReturnMonsterDeathObject(This->mMONSTER_INFO->mDataSortNumber);
if ( v17 != -1 )
LABEL_42:
GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_004[v17], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, &tAngle, 0);
break;
default:
break;
}
if ( This->c36 )
GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_005[67], tDrawSort, This->c37, This->mDATA.mAction.aLocation, &tAngle, 0);
if ( This->c38 )
GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_005[68], tDrawSort, This->c39, This->mDATA.mAction.aLocation, &tAngle, 0);
if ( This->c40 )
GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_004[138], tDrawSort, This->c41, This->mDATA.mAction.aLocation, &tAngle, 0);
}
void __thiscall MONSTER_OBJECT::DrawLowShadow(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
float tHeightForCulling; // [esp+Ch] [ebp-1Ch]
float tHeightForCullinga; // [esp+Ch] [ebp-1Ch]
float tHeightForCullingb; // [esp+Ch] [ebp-1Ch]
float tLength; // [esp+18h] [ebp-10h]
GMOTION *tMOTION; // [esp+24h] [ebp-4h]
if ( This->mCheckValidState )
{
if ( UTIL::ReturnLengthXYZ(This->mDATA.mAction.aLocation, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation) <= 300.0 )
{
tLength = This->mMONSTER_INFO->mSize[1];
if ( UTIL::CheckPossibleDrawMeWithCamera(This->mDATA.mAction.aLocation, tLength) )
{
tMOTION = GDATA::ReturnMonsterMotion(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
tHeightForCulling = This->mMONSTER_INFO->mSize[1];
if ( This->c26 )
GSOBJECT::DisplaySObjectLowShadow(mGDATA[0].mNPC[This->mMONSTER_INFO->mDataSortNumber + 65], 0.0, This->c33, This->cFront, tHeightForCulling, &mGDATA[0].mZONE, tMOTION, 1);
else
GSOBJECT::DisplaySObjectLowShadow(mGDATA[0].mNPC[This->mMONSTER_INFO->mDataSortNumber + 65], This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCulling, &mGDATA[0].mZONE, tMOTION, 1);
if ( This->mMONSTER_INFO->mType == 2 )
{
tHeightForCullinga = This->mMONSTER_INFO->mSize[1];
if ( mGAMEOPTION[0].mMetureMode == 1 )
{
GSOBJECT::DisplaySObjectLowShadow(&mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296][3 - (This->mDATA.mLifeValue * 100.0 / This->mMONSTER_INFO->mLife) / 30], This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullinga, &mGDATA[0].mZONE, tMOTION, 1);
return;
}
goto LABEL_10;
}
if ( This->mMONSTER_INFO->mIndex == 1141 || This->mMONSTER_INFO->mIndex == 1142 || This->mMONSTER_INFO->mIndex == 1143 || This->mMONSTER_INFO->mIndex == 1144 )
{
tHeightForCullinga = This->mMONSTER_INFO->mSize[1];
if ( This->mDATA.mLifeValue > 0 )
{
LABEL_10:
GSOBJECT::DisplaySObjectLowShadow(mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296], This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullinga, &mGDATA[0].mZONE, tMOTION, 1);
return;
}
GSOBJECT::DisplaySObjectLowShadow((576 * (This->mMONSTER_INFO->mDataSortNumber - 1) + 15907192), This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullinga, &mGDATA[0].mZONE, tMOTION, 1);
}
else
{
tHeightForCullingb = This->mMONSTER_INFO->mSize[1];
GSOBJECT::DisplaySObjectLowShadow(mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296], This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullingb, &mGDATA[0].mZONE, tMOTION, 1);
}
}
}
}
}
void __thiscall MONSTER_OBJECT::DrawInfo(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
int v3; // eax
float tLength; // [esp+0h] [ebp-18h]
float tCoord[3]; // [esp+Ch] [ebp-Ch] BYREF
if ( This->mCheckValidState )
{
tLength = This->mMONSTER_INFO->mSize[1];
if ( UTIL::CheckPossibleDrawMeWithCamera(This->mDATA.mAction.aLocation, tLength) )
{
tCoord[0] = This->mDATA.mAction.aLocation[0];
tCoord[1] = (This->mMONSTER_INFO->mSize[1] + This->mMONSTER_INFO->mSize[3] + 1) + This->mDATA.mAction.aLocation[1];
tCoord[2] = This->mDATA.mAction.aLocation[2];
v3 = UTIL::ReturnMonsterNameColor(This);
UTIL::DrawFont3D(This->mMONSTER_INFO->mName, tCoord, v3);
}
}
}
void __thiscall MONSTER_OBJECT::InitForCreate(MONSTER_OBJECT *This, int tObjIndex)
{
int v2; // [esp+0h] [ebp-14h]
int v3; // [esp+4h] [ebp-10h]
int i; // [esp+10h] [ebp-4h]
int j; // [esp+10h] [ebp-4h]
if ( This->mCheckValidState )
{
This->c02 = 0;
This->c26 = 0;
This->c36 = 0;
This->c38 = 0;
This->c40 = 0;
switch ( This->mMONSTER_INFO->mDataSortNumber )
{
case 42:
case 44:
case 46:
case 59:
case 61:
case 64:
case 65:
case 67:
case 74:
case 75:
case 76:
case 85:
case 89:
v3 = This->mMONSTER_INFO->mSpecialType;
if ( v3 >= 2 && v3 <= 6 )
{
for ( i = 0; i < mPLAY[0].MAX_EFFECT_OBJECT && mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState; ++i )
;
if ( i < mPLAY[0].MAX_EFFECT_OBJECT )
EFFECT_OBJECT::SetZone175TypeMonsterEffect(&mPLAY[0].mEFFECT_OBJECT[i], 1, This);
}
break;
case 48:
case 53:
case 62:
case 66:
case 72:
case 81:
v2 = This->mMONSTER_INFO->mSpecialType;
if ( v2 >= 2 && v2 <= 6 )
{
for ( j = 0; j < mPLAY[0].MAX_EFFECT_OBJECT && mPLAY[0].mEFFECT_OBJECT[j].mCheckValidState; ++j )
;
if ( j < mPLAY[0].MAX_EFFECT_OBJECT )
EFFECT_OBJECT::SetZone175TypeMonsterEffect(&mPLAY[0].mEFFECT_OBJECT[j], 2, This);
}
break;
default:
return;
}
}
}
void __thiscall MONSTER_OBJECT::InitForAction(MONSTER_OBJECT *This, int tObjIndex)
{
double v2; // st7
GMOTION *v3; // eax
int v4; // [esp+1Ch] [ebp-60h]
int v5; // [esp+20h] [ebp-5Ch]
float v6; // [esp+2Ch] [ebp-50h]
float v7; // [esp+30h] [ebp-4Ch]
float v8; // [esp+34h] [ebp-48h]
float v9; // [esp+38h] [ebp-44h]
float v11; // [esp+54h] [ebp-28h]
float v12; // [esp+58h] [ebp-24h]
float v13; // [esp+5Ch] [ebp-20h]
float v14; // [esp+5Ch] [ebp-20h]
float v15; // [esp+64h] [ebp-18h]
float v16; // [esp+64h] [ebp-18h]
float tCoord[3]; // [esp+68h] [ebp-14h] BYREF
int i; // [esp+74h] [ebp-8h]
float v19; // [esp+78h] [ebp-4h]
if ( This->mCheckValidState )
{
MONSTER_OBJECT::PlayActionSound(This, tObjIndex);
This->c02 = 0;
This->c23 = 0;
switch ( This->mDATA.mAction.aSort )
{
case 0:
if ( This->mMONSTER_INFO->mType == 4 )
{
if ( (mMYINFO[0].mUseAvatar.aQuestInfo[2] == 1 || mMYINFO[0].mUseAvatar.aQuestInfo[2] == 5) && mMYINFO[0].mUseAvatar.aQuestInfo[3] == This->mMONSTER_INFO->mIndex )
{
if ( strcmp(This->mMONSTER_INFO->mChatInfo, aEmptyChar) )
{
This->c36 = 1;
This->c37 = 0.0;
BOARDUI::Set(mBOARDUI, 6, 1, This->mMONSTER_INFO->mChatInfo, aEmptyChar);
}
}
}
else
{
if ( strcmp(This->mMONSTER_INFO->mChatInfo, aEmptyChar) )
BOARDUI::Set(mBOARDUI, 8, 1, This->mMONSTER_INFO->mChatInfo, aEmptyChar);
if ( This->mMONSTER_INFO->mIndex >= 589 && This->mMONSTER_INFO->mIndex <= 600 )
GSOUND::Play3(&mGDATA[0].mSOUND_05[398], This->mDATA.mAction.aLocation, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation);
}
return;
case 5:
switch ( This->mMONSTER_INFO->mAttackType )
{
case 1:
case 2:
This->c02 = 1;
This->c03 = 1;
This->c04 = 1;
This->c05 = 0;
break;
case 3:
case 4:
if ( UTIL::ReturnMonsterBulletObject(This->mMONSTER_INFO->mDataSortNumber) == -1 )
{
This->c02 = 1;
This->c03 = 1;
}
else
{
This->c02 = 1;
This->c03 = 2;
}
This->c04 = 1;
This->c05 = 0;
break;
case 5:
case 6:
This->c02 = 1;
This->c03 = 1;
This->c04 = 2;
This->c05 = 0;
break;
default:
return;
}
return;
case 7:
This->c02 = 1;
This->c03 = 0;
This->c04 = 0;
This->c05 = 0;
return;
case 12:
This->c23 = 1;
if ( This->c19 )
v2 = (2 * This->mMONSTER_INFO->mDeathSpeed);
else
v2 = This->mMONSTER_INFO->mDeathSpeed;
This->mDeathSpeedFrame = v2;
if ( This->mDATA.mAction.aSkillNumber == 1 )
{
if ( mGAMEOPTION[0].mMetureMode == 1 )
{
This->c26 = 1;
v12 = This->mDATA.mAction.aFront * 0.01745329238474369;
v9 = sin(v12);
v13 = v9;
v11 = This->mDATA.mAction.aFront * 0.01745329238474369;
v8 = cos(v11);
v15 = v8;
v7 = v8 * v8 + 0.0 * 0.0 + v13 * v13;
v6 = sqrt(v7);
v19 = v6;
if ( v6 > 0.0 )
{
v13 = v9 / v19;
v15 = v8 / v19;
}
v14 = v13 * 50.0;
v16 = v15 * 50.0;
This->c27[0] = v14;
This->c27[1] = (rand() % 51 + 50);
This->c27[2] = v16;
This->c30 = rand() % 6 + 5;
This->c31 = 0;
v3 = GDATA::ReturnMonsterMotion(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
GSOBJECT::GetSObjectCoord(&mGDATA[0].mMONSTER_BODY[299][This->mMONSTER_INFO->mDataSortNumber + 3], 1, tCoord, 0.0, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, v3, 1);
This->c32 = tCoord[1] - This->mDATA.mAction.aLocation[1];
CopyMemory(This->c33, This->mDATA.mAction.aLocation, 12);
This->cFront = This->mDATA.mAction.aFront;
}
}
else if ( This->mMONSTER_INFO->mIndex < 589 || This->mMONSTER_INFO->mIndex > 600 )
{
GSOUND::Play3(&mGDATA[0].mSOUND_05[289], This->mDATA.mAction.aLocation, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation);
}
else
{
GSOUND::Play3(&mGDATA[0].mSOUND_05[399], This->mDATA.mAction.aLocation, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation);
}
if ( This->mMONSTER_INFO->mDamageType != 2 )
goto LABEL_58;
for ( i = 0; i < mPLAY[0].MAX_EFFECT_OBJECT && mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState; ++i )
;
if ( i == mPLAY[0].MAX_EFFECT_OBJECT )
goto LABEL_58;
if ( This->mDATA.mAction.aSkillNumber == 1 )
{
EFFECT_OBJECT::SetBloodForMonster(&mPLAY[0].mEFFECT_OBJECT[i], This, 7);
}
else
{
v5 = This->c14;
if ( v5 != 1 )
{
if ( v5 != 2 )
goto LABEL_58;
LABEL_56:
EFFECT_OBJECT::SetBloodForMonster(&mPLAY[0].mEFFECT_OBJECT[i], This, 5);
goto LABEL_58;
}
v4 = This->c15;
switch ( v4 )
{
case 1:
EFFECT_OBJECT::SetBloodForMonster(&mPLAY[0].mEFFECT_OBJECT[i], This, 4);
break;
case 2:
goto LABEL_56;
case 3:
EFFECT_OBJECT::SetBloodForMonster(&mPLAY[0].mEFFECT_OBJECT[i], This, 6);
break;
}
}
LABEL_58:
if ( This->mMONSTER_INFO->mType == 4 )
{
if ( (mMYINFO[0].mUseAvatar.aQuestInfo[2] == 1 || mMYINFO[0].mUseAvatar.aQuestInfo[2] == 5) && mMYINFO[0].mUseAvatar.aQuestInfo[3] == This->mMONSTER_INFO->mIndex && strcmp(This->mMONSTER_INFO->mChatInfo[1], aEmptyChar) )
{
This->c38 = 1;
This->c39 = 0.0;
BOARDUI::Set(mBOARDUI, 7, 1, This->mMONSTER_INFO->mChatInfo[1], aEmptyChar);
}
}
else if ( strcmp(This->mMONSTER_INFO->mChatInfo[1], aEmptyChar) )
{
BOARDUI::Set(mBOARDUI, 9, 1, This->mMONSTER_INFO->mChatInfo[1], aEmptyChar);
}
break;
default:
return;
}
}
}
void __thiscall MONSTER_OBJECT::Update(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
float tPostYCoord; // [esp+20h] [ebp-48h]
int v4; // [esp+28h] [ebp-40h]
int v5; // [esp+2Ch] [ebp-3Ch]
int v6; // [esp+34h] [ebp-34h]
char v8[4]; // [esp+48h] [ebp-20h] BYREF
float v9; // [esp+4Ch] [ebp-1Ch]
int i; // [esp+54h] [ebp-14h]
int v11; // [esp+58h] [ebp-10h]
float x; // [esp+5Ch] [ebp-Ch] BYREF
float y[2]; // [esp+60h] [ebp-8h] BYREF
if ( This->mCheckValidState )
{
if ( This->c36 )
{
This->c37 = dTime * 30.0 + This->c37;
if ( This->c37 >= GMOBJECT::GetTotalFrameNum(&mGDATA[0].mMOB_005[67], 0) )
This->c36 = 0;
}
if ( This->c38 )
{
This->c39 = dTime * 30.0 + This->c39;
if ( This->c39 >= GMOBJECT::GetTotalFrameNum(&mGDATA[0].mMOB_005[68], 0) )
This->c38 = 0;
}
if ( This->c40 )
{
This->c41 = dTime * 30.0 + This->c41;
if ( This->c41 >= GMOBJECT::GetTotalFrameNum(&mGDATA[0].mMOB_004[138], 0) )
This->c40 = 0;
}
v6 = This->mDATA.mAction.aSort;
if ( v6 == 5 )
{
if ( This->c02 == 1 )
{
v11 = 0;
if ( This->c05 )
{
if ( !PLAY::CheckMAttackFrame(This->mMONSTER_INFO, This->mDATA.mAction.aFrame) )
This->c05 = 0;
}
else if ( PLAY::CheckMAttackFrame(This->mMONSTER_INFO, This->mDATA.mAction.aFrame) )
{
This->c05 = 1;
v11 = 1;
}
if ( v11 == 1 )
{
if ( This->mMONSTER_INFO->mDataSortNumber == 113 || This->mMONSTER_INFO->mSpecialType == 18 )
goto LABEL_32;
for ( i = 0; i < mPLAY[0].MAX_AVATAR_OBJECT && (!mPLAY[0].mAVATAR_OBJECT[i].mCheckValidState || mPLAY[0].mAVATAR_OBJECT[i].mServerIndex != This->mDATA.mAction.aTargetObjectIndex || mPLAY[0].mAVATAR_OBJECT[i].mUniqueNumber != This->mDATA.mAction.aTargetObjectUniqueNumber); ++i )
;
if ( i != mPLAY[0].MAX_AVATAR_OBJECT )
{
LABEL_32:
v5 = This->c03;
if ( v5 == 1 )
{
v4 = This->c04;
if ( v4 == 1 )
{
MONSTER_OBJECT::ProcessGAttackPacket(This);
}
else if ( v4 == 2 )
{
MONSTER_OBJECT::ProcessRAttackPacket(This);
}
}
else if ( v5 == 2 )
{
MONSTER_OBJECT::ProcessBAttackPacket(This);
}
}
}
}
}
else if ( v6 == 7 && This->c02 == 1 )
{
v11 = 0;
if ( This->c05 )
{
if ( !PLAY::CheckMSkillFrame(This->mMONSTER_INFO, This->mDATA.mAction.aFrame) )
This->c05 = 0;
}
else if ( PLAY::CheckMSkillFrame(This->mMONSTER_INFO, This->mDATA.mAction.aFrame) )
{
This->c05 = 1;
v11 = 1;
}
if ( v11 == 1 )
MONSTER_OBJECT::ProcessSAttackPacket(This);
}
if ( This->c26 )
{
if ( This->c31 < This->c30 )
{
CopyMemory(v8, This->c33, 12);
This->c27[1] = dTime * -300.0 + This->c27[1];
This->c33[0] = This->c27[0] * dTime + This->c33[0];
This->c33[1] = This->c27[1] * dTime + This->c33[1];
This->c33[2] = This->c27[2] * dTime + This->c33[2];
CopyMemory(&x, This->c33, 12);
tPostYCoord = v9 + 20.0;
if ( WORLD_FOR_GXD::GetYCoord(&mGDATA[0].mZONE.mWORLD, x, y[1], y, 1, tPostYCoord, 0, 0) )
{
if ( This->c33[1] < y[0] - This->c32 )
{
++This->c31;
This->c33[1] = y[0] - This->c32;
if ( This->c31 == 1 )
GSOUND::Play3(&mGDATA[0].mSOUND_05[26], This->c33, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation);
}
}
}
}
switch ( This->mDATA.mAction.aSort )
{
case 0:
MONSTER_OBJECT::A001(This, tObjIndex, dTime);
break;
case 1:
MONSTER_OBJECT::A002(This, tObjIndex, dTime);
break;
case 3:
MONSTER_OBJECT::A004(This, tObjIndex, dTime);
break;
case 4:
MONSTER_OBJECT::A005(This, tObjIndex, dTime);
break;
case 5:
MONSTER_OBJECT::A006(This, tObjIndex, dTime);
break;
case 7:
MONSTER_OBJECT::A008(This, tObjIndex, dTime);
break;
case 8:
MONSTER_OBJECT::A009(This, tObjIndex, dTime);
break;
case 12:
MONSTER_OBJECT::A013(This, tObjIndex, dTime);
break;
case 19:
MONSTER_OBJECT::A020(This, tObjIndex, dTime);
break;
default:
return;
}
}
}
void __thiscall MONSTER_OBJECT::ProcessGAttackPacket(MONSTER_OBJECT *This)
{
ATTACK_FOR_PROTOCOL tAttackInfo; // [esp+4h] [ebp-48h] BYREF
if ( mPLAY[0].mAVATAR_OBJECT[0].mServerIndex == This->mDATA.mAction.aTargetObjectIndex && mPLAY[0].mAVATAR_OBJECT[0].mUniqueNumber == This->mDATA.mAction.aTargetObjectUniqueNumber )
{
tAttackInfo.mCase = 4;
tAttackInfo.mServerIndex1 = This->mIndex;
tAttackInfo.mUniqueNumber1 = This->mUniqueNumber;
tAttackInfo.mServerIndex2 = mPLAY[0].mAVATAR_OBJECT[0].mServerIndex;
tAttackInfo.mUniqueNumber2 = mPLAY[0].mAVATAR_OBJECT[0].mUniqueNumber;
tAttackInfo.mSenderLocation[0] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[0];
tAttackInfo.mSenderLocation[1] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[1];
tAttackInfo.mSenderLocation[2] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[2];
tAttackInfo.mAttackActionValue1 = 1;
tAttackInfo.mAttackActionValue2 = 0;
tAttackInfo.mAttackActionValue3 = 0;
tAttackInfo.mAttackActionValue4 = 0;
TRANSFER::T_PROCESS_ATTACK_SEND(&tAttackInfo);
}
}
void __thiscall MONSTER_OBJECT::ProcessRAttackPacket(MONSTER_OBJECT *This)
{
ATTACK_FOR_PROTOCOL tAttackInfo; // [esp+4h] [ebp-48h] BYREF
if ( This->mMONSTER_INFO->mRadiusInfo[0] >= UTIL::ReturnLengthXYZ(mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation, This->mDATA.mAction.aLocation) )
{
tAttackInfo.mCase = 4;
tAttackInfo.mServerIndex1 = This->mIndex;
tAttackInfo.mUniqueNumber1 = This->mUniqueNumber;
tAttackInfo.mServerIndex2 = mPLAY[0].mAVATAR_OBJECT[0].mServerIndex;
tAttackInfo.mUniqueNumber2 = mPLAY[0].mAVATAR_OBJECT[0].mUniqueNumber;
tAttackInfo.mSenderLocation[0] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[0];
tAttackInfo.mSenderLocation[1] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[1];
tAttackInfo.mSenderLocation[2] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[2];
tAttackInfo.mAttackActionValue1 = 1;
tAttackInfo.mAttackActionValue2 = 0;
tAttackInfo.mAttackActionValue3 = 0;
tAttackInfo.mAttackActionValue4 = 0;
TRANSFER::T_PROCESS_ATTACK_SEND(&tAttackInfo);
}
}
void __thiscall MONSTER_OBJECT::ProcessBAttackPacket(MONSTER_OBJECT *This)
{
int i; // [esp+Ch] [ebp-4h]
for ( i = 0; i < mPLAY[0].MAX_EFFECT_OBJECT && mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState; ++i )
;
if ( i != mPLAY[0].MAX_EFFECT_OBJECT )
{
mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState = 1;
mPLAY[0].mEFFECT_OBJECT[i].mObjType = 3;
mPLAY[0].mEFFECT_OBJECT[i].mObjSort = 2;
mPLAY[0].mEFFECT_OBJECT[i].mServerIndex = This->mIndex;
mPLAY[0].mEFFECT_OBJECT[i].mUniqueNumber = This->mUniqueNumber;
mPLAY[0].mEFFECT_OBJECT[i].mDataSortNumber = This->mMONSTER_INFO->mDataSortNumber;
mPLAY[0].mEFFECT_OBJECT[i].bb05 = 1;
mPLAY[0].mEFFECT_OBJECT[i].mTargetObjectIndex = This->mDATA.mAction.aTargetObjectIndex;
mPLAY[0].mEFFECT_OBJECT[i].mTargetObjectUniqueNumber = This->mDATA.mAction.aTargetObjectUniqueNumber;
mPLAY[0].mEFFECT_OBJECT[i].bb08 = 0;
mPLAY[0].mEFFECT_OBJECT[i].bb11 = 0;
if ( This->mMONSTER_INFO->mDataSortNumber == 113 )
{
mPLAY[0].mEFFECT_OBJECT[i].bb08 = 1;
switch ( This->mMONSTER_INFO->mSpecialType )
{
case 18:
mPLAY[0].mEFFECT_OBJECT[i].bb09 = 0;
break;
case 35:
mPLAY[0].mEFFECT_OBJECT[i].bb09 = !mMYINFO[0].mUseAvatar.aTribe || mMYINFO[0].mUseAvatar.aTribe == PLAY::ReturnAllianceTribe(0);
break;
case 36:
mPLAY[0].mEFFECT_OBJECT[i].bb09 = mMYINFO[0].mUseAvatar.aTribe == 1 || mMYINFO[0].mUseAvatar.aTribe == PLAY::ReturnAllianceTribe(1);
break;
case 37:
mPLAY[0].mEFFECT_OBJECT[i].bb09 = mMYINFO[0].mUseAvatar.aTribe == 2 || mMYINFO[0].mUseAvatar.aTribe == PLAY::ReturnAllianceTribe(2);
break;
case 38:
mPLAY[0].mEFFECT_OBJECT[i].bb09 = mMYINFO[0].mUseAvatar.aTribe == 3 || mMYINFO[0].mUseAvatar.aTribe == PLAY::ReturnAllianceTribe(3);
break;
default:
break;
}
mPLAY[0].mEFFECT_OBJECT[i].bb10 = 0.0;
}
mPLAY[0].mEFFECT_OBJECT[i].mMObjectIdx = UTIL::ReturnMonsterBulletObject(This->mMONSTER_INFO->mDataSortNumber);
if ( mPLAY[0].mEFFECT_OBJECT[i].mMObjectIdx == -1 )
{
mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState = 0;
}
else
{
mPLAY[0].mEFFECT_OBJECT[i].mFrame = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[0] = This->mDATA.mAction.aLocation[0];
mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[1] = This->mMONSTER_INFO->mBulletInfo[0] + This->mDATA.mAction.aLocation[1];
mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[2] = This->mDATA.mAction.aLocation[2];
mPLAY[0].mEFFECT_OBJECT[i].mAngle[0] = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mAngle[1] = This->mDATA.mAction.aFront;
mPLAY[0].mEFFECT_OBJECT[i].mAngle[2] = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mLocation[0] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[0];
mPLAY[0].mEFFECT_OBJECT[i].mLocation[1] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[1];
mPLAY[0].mEFFECT_OBJECT[i].mLocation[2] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[2];
mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[0] = This->mDATA.mAction.aTargetLocation[0];
mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[1] = This->mDATA.mAction.aTargetLocation[1];
mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[2] = This->mDATA.mAction.aTargetLocation[2];
mPLAY[0].mEFFECT_OBJECT[i].cc01 = This->mMONSTER_INFO->mBulletInfo[1];
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mCase = 4;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mServerIndex1 = This->mIndex;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mUniqueNumber1 = This->mUniqueNumber;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mServerIndex2 = This->mDATA.mAction.aTargetObjectIndex;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mUniqueNumber2 = This->mDATA.mAction.aTargetObjectUniqueNumber;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[0] = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[1] = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[2] = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue1 = 1;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue2 = 0;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue3 = 0;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue4 = 0;
}
}
}
void __thiscall MONSTER_OBJECT::ProcessSAttackPacket(MONSTER_OBJECT *This)
{
int i; // [esp+4h] [ebp-4h]
for ( i = 0; i < mPLAY[0].MAX_EFFECT_OBJECT && mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState; ++i )
;
if ( i != mPLAY[0].MAX_EFFECT_OBJECT )
{
mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState = 1;
mPLAY[0].mEFFECT_OBJECT[i].mObjType = 3;
mPLAY[0].mEFFECT_OBJECT[i].mObjSort = 2;
mPLAY[0].mEFFECT_OBJECT[i].mServerIndex = This->mIndex;
mPLAY[0].mEFFECT_OBJECT[i].mUniqueNumber = This->mUniqueNumber;
mPLAY[0].mEFFECT_OBJECT[i].mDataSortNumber = This->mMONSTER_INFO->mDataSortNumber;
mPLAY[0].mEFFECT_OBJECT[i].bb05 = 1;
mPLAY[0].mEFFECT_OBJECT[i].mTargetObjectIndex = This->mDATA.mAction.aTargetObjectIndex;
mPLAY[0].mEFFECT_OBJECT[i].mTargetObjectUniqueNumber = This->mDATA.mAction.aTargetObjectUniqueNumber;
mPLAY[0].mEFFECT_OBJECT[i].bb08 = 0;
mPLAY[0].mEFFECT_OBJECT[i].bb11 = 1;
mPLAY[0].mEFFECT_OBJECT[i].mMObjectIdx = UTIL::ReturnMonsterBulletObject(This->mMONSTER_INFO->mDataSortNumber);
if ( mPLAY[0].mEFFECT_OBJECT[i].mMObjectIdx == -1 )
{
mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState = 0;
}
else
{
mPLAY[0].mEFFECT_OBJECT[i].mFrame = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[0] = This->mDATA.mAction.aLocation[0];
mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[1] = This->mMONSTER_INFO->mBulletInfo[0] + This->mDATA.mAction.aLocation[1];
mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[2] = This->mDATA.mAction.aLocation[2];
mPLAY[0].mEFFECT_OBJECT[i].mAngle[0] = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mAngle[1] = This->mDATA.mAction.aFront;
mPLAY[0].mEFFECT_OBJECT[i].mAngle[2] = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mLocation[0] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[0];
mPLAY[0].mEFFECT_OBJECT[i].mLocation[1] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[1];
mPLAY[0].mEFFECT_OBJECT[i].mLocation[2] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[2];
mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[0] = This->mDATA.mAction.aTargetLocation[0];
mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[1] = This->mDATA.mAction.aTargetLocation[1];
mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[2] = This->mDATA.mAction.aTargetLocation[2];
mPLAY[0].mEFFECT_OBJECT[i].cc01 = This->mMONSTER_INFO->mBulletInfo[1];
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mCase = 4;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mServerIndex1 = This->mIndex;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mUniqueNumber1 = This->mUniqueNumber;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mServerIndex2 = This->mDATA.mAction.aTargetObjectIndex;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mUniqueNumber2 = This->mDATA.mAction.aTargetObjectUniqueNumber;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[0] = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[1] = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[2] = 0.0;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue1 = 1;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue2 = 0;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue3 = 0;
mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue4 = 1;
}
}
}
void __thiscall MONSTER_OBJECT::A001(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
int v4; // [esp+4h] [ebp-4h]
v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
if ( This->mDATA.mAction.aFrame >= v4 )
{
This->mDATA.mAction.aSort = 1;
This->mDATA.mAction.aFrame = 0.0;
}
}
void __thiscall MONSTER_OBJECT::A002(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
int v4; // [esp+4h] [ebp-4h]
v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
if ( This->mDATA.mAction.aFrame >= v4 )
This->mDATA.mAction.aFrame = This->mDATA.mAction.aFrame - v4;
}
void __thiscall MONSTER_OBJECT::A004(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
float tSpeed; // [esp+0h] [ebp-18h]
BOOL tCheckArrival; // [esp+10h] [ebp-8h] BYREF
int v6; // [esp+14h] [ebp-4h]
v6 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
if ( This->mDATA.mAction.aFrame >= v6 )
This->mDATA.mAction.aFrame = This->mDATA.mAction.aFrame - v6;
tSpeed = This->mMONSTER_INFO->mWalkSpeed;
if ( WORLD_FOR_GXD::Move(&mGDATA[0].mZONE.mRANGE1, This->mDATA.mAction.aLocation, This->mDATA.mAction.aTargetLocation, tSpeed, dTime, &tCheckArrival) )
{
if ( tCheckArrival )
{
This->mDATA.mAction.aSort = 1;
This->mDATA.mAction.aFrame = 0.0;
}
}
else
{
This->mDATA.mAction.aSort = 1;
This->mDATA.mAction.aFrame = 0.0;
}
}
void __thiscall MONSTER_OBJECT::A005(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
float tSpeed; // [esp+0h] [ebp-18h]
BOOL tCheckArrival; // [esp+10h] [ebp-8h] BYREF
int v6; // [esp+14h] [ebp-4h]
v6 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
if ( This->mDATA.mAction.aFrame >= v6 )
This->mDATA.mAction.aFrame = This->mDATA.mAction.aFrame - v6;
tSpeed = This->mMONSTER_INFO->mRunSpeed;
if ( WORLD_FOR_GXD::Move(&mGDATA[0].mZONE.mRANGE1, This->mDATA.mAction.aLocation, This->mDATA.mAction.aTargetLocation, tSpeed, dTime, &tCheckArrival) )
{
if ( tCheckArrival )
{
This->mDATA.mAction.aSort = 1;
This->mDATA.mAction.aFrame = 0.0;
}
}
else
{
This->mDATA.mAction.aSort = 1;
This->mDATA.mAction.aFrame = 0.0;
}
}
void __thiscall MONSTER_OBJECT::A006(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
int v4; // [esp+4h] [ebp-4h]
v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
if ( This->mDATA.mAction.aFrame >= v4 )
{
This->mDATA.mAction.aSort = 1;
This->mDATA.mAction.aFrame = 0.0;
This->c02 = 0;
}
}
void __thiscall MONSTER_OBJECT::A008(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
int v4; // [esp+4h] [ebp-4h]
v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
if ( This->mDATA.mAction.aFrame >= v4 )
{
This->mDATA.mAction.aSort = 1;
This->mDATA.mAction.aFrame = 0.0;
This->c02 = 0;
}
}
void __thiscall MONSTER_OBJECT::A009(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
int v4; // [esp+4h] [ebp-4h]
v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
if ( This->mDATA.mAction.aFrame >= v4 )
{
This->mDATA.mAction.aSort = 1;
This->mDATA.mAction.aFrame = 0.0;
}
}
void __thiscall MONSTER_OBJECT::A013(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
float tPostYCoord; // [esp+20h] [ebp-18h]
float x; // [esp+28h] [ebp-10h]
float y; // [esp+2Ch] [ebp-Ch] BYREF
float z; // [esp+30h] [ebp-8h]
int v8; // [esp+34h] [ebp-4h]
v8 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
if ( This->mDATA.mAction.aSkillNumber != 1 && This->c23 == 1 )
{
This->mDeathSpeedFrame = This->mDeathSpeedFrame - dTime * 100.0;
if ( This->mDeathSpeedFrame < 0.0 )
This->mDeathSpeedFrame = 0.0;
x = This->mDATA.mAction.aTargetLocation[0] * This->mDeathSpeedFrame * dTime + This->mDATA.mAction.aLocation[0];
y = This->mDATA.mAction.aLocation[1];
z = This->mDATA.mAction.aTargetLocation[2] * This->mDeathSpeedFrame * dTime + This->mDATA.mAction.aLocation[2];
tPostYCoord = This->mDATA.mAction.aLocation[1] + 20.0;
if ( WORLD_FOR_GXD::GetYCoord(&mGDATA[0].mZONE.mRANGE1, x, z, &y, 1, tPostYCoord, 0, 1) )
{
This->mDATA.mAction.aLocation[0] = x;
This->mDATA.mAction.aLocation[1] = y;
This->mDATA.mAction.aLocation[2] = z;
}
}
if ( This->mDATA.mAction.aFrame >= v8 )
{
This->mDATA.mAction.aFrame = (v8 - 1);
if ( This->c23 == 1 )
{
This->c23 = 0;
This->mLastDeathUpdate = mApp[0].hPresentElapsedSeconds;
}
else if ( mApp[0].hPresentElapsedSeconds - This->mLastDeathUpdate > 3.0 )
{
MONSTER_OBJECT::Free(This);
}
}
}
void __thiscall MONSTER_OBJECT::A020(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
int v4; // [esp+8h] [ebp-4h]
v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
if ( This->mDATA.mAction.aFrame >= v4 )
This->mDATA.mAction.aFrame = (v4 - 1);
}






