void Naga::MC_Fire_Stand() { if (m_bAnimating == DFALSE || m_nCurMetacmd != MC_FIRE_STAND) { if (m_nState == STATE_AttackFar) { if (m_fStimuli[SIGHT] > 0.0f && IsRandomChance(50)) { m_InventoryMgr.ChangeWeapon(WEAP_NAGA_EYEBEAM); DBOOL bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_RIFLE]); } else { m_iCeilingWhomps++; if (m_iCeilingWhomps > NAGA_MAX_WHOMPS) { // Too many whomps, we use the eye beam for variety. m_iCeilingWhomps = 0; m_InventoryMgr.ChangeWeapon(WEAP_NAGA_EYEBEAM); DBOOL bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_RIFLE]); } else { m_InventoryMgr.ChangeWeapon(WEAP_NAGA_DEBRIS); DBOOL bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_MELEE]); } } } else { if (IsRandomChance(25)) { m_InventoryMgr.ChangeWeapon(WEAP_NAGA_EYEBEAM); DBOOL bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_RIFLE]); } else { m_InventoryMgr.ChangeWeapon(WEAP_NAGA_SPIKE); DBOOL bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_MAGIC]); } } m_pServerDE->SetModelLooping(m_hObject, DFALSE); m_bAnimating = DTRUE; m_nCurMetacmd = MC_FIRE_STAND; } else { if(m_pServerDE->GetModelPlaybackState(m_hObject) & MS_PLAYDONE) { m_bAnimating = DFALSE; Metacmd++; return; } } return; }
void UndeadGideon::MC_Fire_Stand() { if (m_bAnimating == DFALSE || m_nCurMetacmd != MC_FIRE_STAND) { DBOOL bRet = DFALSE; DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); DBOOL bAbove = (m_vTargetPos.y - m_MoveObj.GetPos().y) > 0; if(m_nState == STATE_AttackFar) { if (bAbove && fHeight > m_vDims.y) { m_InventoryMgr.ChangeWeapon(WEAP_GIDEON_VOMIT); bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_MELEE]); } else { if (IsRandomChance(70)) { if (IsRandomChance(50)) { m_InventoryMgr.ChangeWeapon(WEAP_SKULL); bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_MAGIC]); } else { m_InventoryMgr.ChangeWeapon(WEAP_DRUDGE_LIGHTNING); bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_MAGIC]); } } else { m_InventoryMgr.ChangeWeapon(WEAP_GIDEON_VOMIT); bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_RIFLE]); } } } else { HCLASS hPlayer = m_pServerDE->GetClass("CPlayerObj"); HCLASS hClass = m_pServerDE->GetObjectClass(m_hTarget); if (m_pServerDE->IsKindOf(hClass,hPlayer)) { CPlayerObj *pPlayer = (CPlayerObj *)(m_pServerDE->HandleToObject(m_hTarget)); if (pPlayer->IsImprisoned()) { if (IsRandomChance(40)) { m_InventoryMgr.ChangeWeapon(WEAP_GIDEON_VOMIT); bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_RIFLE]); } else { m_InventoryMgr.ChangeWeapon(WEAP_BEHEMOTH_SHOCKWAVE); bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_MAGIC]); } } else { m_InventoryMgr.ChangeWeapon(WEAP_GIDEON_SPEAR); bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_MELEE]); } } else { m_InventoryMgr.ChangeWeapon(WEAP_GIDEON_SPEAR); bRet = SetAnimation(m_pAnim_Sound->m_nAnim_FIRE_STAND[TYPE_MELEE]); } } m_pServerDE->SetModelLooping(m_hObject, DFALSE); m_bAnimating = DTRUE; m_nCurMetacmd = MC_FIRE_STAND; } else { if(m_pServerDE->GetModelPlaybackState(m_hObject) & MS_PLAYDONE) { m_InventoryMgr.ChangeWeapon(WEAP_GIDEON_SPEAR); m_bAnimating = DFALSE; Metacmd++; return; } } return; }
void GremlinAI::AI_STATE_AttackFar() { //SCHLEGZ 4/22/98 4:51:21 PM: sanity check if(m_hTarget == DNULL) { ComputeState(); return; } DFLOAT fHeight = (DFLOAT)fabs(m_vTargetPos.y - m_MoveObj.GetPos().y); m_fStimuli[SIGHT] = VEC_DIST(m_MoveObj.GetPos(),m_vTargetPos); DBOOL bAbove = (m_vTargetPos.y - m_MoveObj.GetPos().y) > 0; MC_FaceTarget(); Metacmd--; switch(Metacmd) { case 1: { if (m_nCurMetacmd != MC_TAUNT_BOLD) { if (IsRandomChance(40)) { MC_Taunt_Bold(); Metacmd--; } else Metacmd++; } else { if(m_pServerDE->GetModelPlaybackState(m_hObject) & MS_PLAYDONE) Metacmd++; } break; } case 2: if(m_fStimuli[SIGHT] <= (m_fSeeingDist * 0.75) || m_nCurMetacmd == MC_FIRE_STAND || (bAbove && fHeight > m_vDims.y)) { MC_Fire_Stand(); } else { if(m_fStimuli[SIGHT] < (m_fSeeingDist * 0.33)) ComputeState(); else MC_Walk(); } break; case 3: if((m_fStimuli[SIGHT] < (m_fSeeingDist * 0.33)) && m_nCurMetacmd != MC_JUMP) { ComputeState(); } else if(m_fStimuli[SIGHT] < (m_fSeeingDist * 0.4) || m_nCurMetacmd == MC_JUMP || IsLedge(m_MoveObj.GetForwardVector())) { MC_Jump(); } else Metacmd++; break; default: ComputeState(); break; } return; }