Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}