⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ai.htm

📁 Quake 的 各 种 文 档 格 式 说 明
💻 HTM
📖 第 1 页 / 共 3 页
字号:

<a href="qc-types.htm#void">void</a>() <b>ai_stand</b><a name="ai_stand">=</a>
{
	<b>if</b> (<a href="ai.htm#FindTarget">FindTarget</a> ())
		<b>return</b>;
	
	<b>if</b> (<a href="qc-glob.htm#time">time</a> &gt; <a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_pausetime">pausetime</a>)
	{
		<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_th_walk">th_walk</a> ();
		<b>return</b>;
	}
	
<i>// change angle slightly</i>

};

<i>/*
=============
ai_turn

don't move, but turn towards ideal_yaw
=============
*/</i>

<a href="qc-types.htm#void">void</a>() <b>ai_turn</b><a name="ai_turn">=</a>
{
	<b>if</b> (<a href="ai.htm#FindTarget">FindTarget</a> ())
		<b>return</b>;
	
	<a href="qc-built.htm#ChangeYaw">ChangeYaw</a> ();
};

<i>//=============================================================================</i>

<i>/*
=============
ChooseTurn
=============
*/</i>

<a href="qc-types.htm#void">void</a>(<a href="qc-types.htm#vector">vector</a> dest3) <b>ChooseTurn</b><a name="ChooseTurn">=</a>
{
	<b>local</b> <a href="qc-types.htm#vector">vector</a>	dir, newdir;
	
	dir = <a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_origin">origin</a> - dest3;

	newdir_x = trace_plane_normal_y;
	newdir_y = 0 - trace_plane_normal_x;
	newdir_z = 0;
	
	<b>if</b> (dir * newdir &gt; 0)
	{
		dir_x = 0 - trace_plane_normal_y;
		dir_y = trace_plane_normal_x;
	}
	<b>else</b>
	{
		dir_x = trace_plane_normal_y;
		dir_y = 0 - trace_plane_normal_x;
	}

	dir_z = 0;
	<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_ideal_yaw">ideal_yaw</a> = <a href="qc-built.htm#vectoyaw">vectoyaw</a>(dir);	
};

<i>/*
============
FacingIdeal

============
*/</i>

<a href="qc-types.htm#float">float</a>() <b>FacingIdeal</b><a name="FacingIdeal">=</a>
{
	<b>local</b>	<a href="qc-types.htm#float">float</a>	delta;
	
	delta = <a href="qc-built.htm#anglemod">anglemod</a>(<a href="qc-glob.htm#self">self</a>.angles_y - <a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_ideal_yaw">ideal_yaw</a>);
	<b>if</b> (delta &gt; 45 &amp;&amp; delta &lt; 315)
		return FALSE;
	return TRUE;
};


<i>//=============================================================================</i>

<a href="qc-types.htm#float">float</a>() <a href="wizard.htm#WizardCheckAttack">WizardCheckAttack</a>;
<a href="qc-types.htm#float">float</a>() <a href="dog.htm#DogCheckAttack">DogCheckAttack</a>;

<a href="qc-types.htm#float">float</a>() <b>CheckAnyAttack</b><a name="CheckAnyAttack">=</a>
{
	<b>if</b> (!enemy_vis)
		<b>return</b>;
	<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_classname">classname</a> == <b>"monster_army"</b>)
		<b>return</b> <a href="fight.htm#SoldierCheckAttack">SoldierCheckAttack</a> ();
	<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_classname">classname</a> == <b>"monster_ogre"</b>)
		<b>return</b> <a href="fight.htm#OgreCheckAttack">OgreCheckAttack</a> ();
	<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_classname">classname</a> == <b>"monster_shambler"</b>)
		<b>return</b> <a href="fight.htm#ShamCheckAttack">ShamCheckAttack</a> ();
	<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_classname">classname</a> == <b>"monster_demon1"</b>)
		<b>return</b> <a href="demon.htm#DemonCheckAttack">DemonCheckAttack</a> ();
	<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_classname">classname</a> == <b>"monster_dog"</b>)
		<b>return</b> <a href="dog.htm#DogCheckAttack">DogCheckAttack</a> ();
	<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_classname">classname</a> == <b>"monster_wizard"</b>)
		<b>return</b> <a href="wizard.htm#WizardCheckAttack">WizardCheckAttack</a> ();
	<b>return</b> <a href="fight.htm#CheckAttack">CheckAttack</a> ();
};


<i>/*
=============
ai_run_melee

Turn and close until within an angle to launch a melee attack
=============
*/</i>

<a href="qc-types.htm#void">void</a>() <b>ai_run_melee</b><a name="ai_run_melee">=</a>
{
	<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_ideal_yaw">ideal_yaw</a> = <a href="fight.htm#enemy_yaw">enemy_yaw</a>;
	<a href="qc-built.htm#ChangeYaw">ChangeYaw</a> ();

	<b>if</b> (<a href="ai.htm#FacingIdeal">FacingIdeal</a>())
	{
		<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_th_melee">th_melee</a> ();
		<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_attack_state">attack_state</a> = <a href="defs.htm#AS_STRAIGHT">AS_STRAIGHT</a>;
	}
};


<i>/*
=============
ai_run_missile

Turn in place until within an angle to launch a missile attack
=============
*/</i>

<a href="qc-types.htm#void">void</a>() <b>ai_run_missile</b><a name="ai_run_missile">=</a>
{
	<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_ideal_yaw">ideal_yaw</a> = <a href="fight.htm#enemy_yaw">enemy_yaw</a>;
	<a href="qc-built.htm#ChangeYaw">ChangeYaw</a> ();
	<b>if</b> (<a href="ai.htm#FacingIdeal">FacingIdeal</a>())
	{
		<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_th_missile">th_missile</a> ();
		<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_attack_state">attack_state</a> = <a href="defs.htm#AS_STRAIGHT">AS_STRAIGHT</a>;
	}
};


<i>/*
=============
ai_run_slide

Strafe sideways, but stay at aproximately the same range
=============
*/</i>

<a href="qc-types.htm#void">void</a>() <b>ai_run_slide</b><a name="ai_run_slide">=</a>
{
	<b>local</b> <a href="qc-types.htm#float">float</a>	ofs;
	
	<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_ideal_yaw">ideal_yaw</a> = <a href="fight.htm#enemy_yaw">enemy_yaw</a>;
	<a href="qc-built.htm#ChangeYaw">ChangeYaw</a> ();
	<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_lefty">lefty</a>)
		ofs = 90;
	<b>else</b>
		ofs = -90;
	
	<b>if</b> (<a href="qc-built.htm#walkmove">walkmove</a> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_ideal_yaw">ideal_yaw</a> + ofs, <a href="defs.htm#movedist">movedist</a>))
		<b>return</b>;
		
	<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_lefty">lefty</a> = 1 - <a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_lefty">lefty</a>;
	
	<a href="qc-built.htm#walkmove">walkmove</a> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_ideal_yaw">ideal_yaw</a> - ofs, <a href="defs.htm#movedist">movedist</a>);
};


<i>/*
=============
ai_run

The monster has an enemy it is trying to kill
=============
*/</i>

<a href="qc-types.htm#void">void</a>(<a href="qc-types.htm#float">float</a> dist) <b>ai_run</b><a name="ai_run">=</a>
{
	<b>local</b>	<a href="qc-types.htm#vector">vector</a>	delta;
	<b>local</b>	<a href="qc-types.htm#float">float</a>	axis;
	<b>local</b>	<a href="qc-types.htm#float">float</a>	direct, ang_rint, ang_floor, ang_ceil;
	
	<a href="defs.htm#movedist">movedist</a> = dist;
<i>// see if the enemy is dead</i>
	<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_enemy">enemy</a>.<a href="qc-enty.htm#dot_health">health</a> &lt;= 0)
	{
		<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_enemy">enemy</a> = <a href="qc-glob.htm#world">world</a>;
	<i>// FIXME: look all around for other targets</i>
		<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_oldenemy">oldenemy</a>.<a href="qc-enty.htm#dot_health">health</a> &gt; 0)
		{
			<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_enemy">enemy</a> = <a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_oldenemy">oldenemy</a>;
			<a href="ai.htm#HuntTarget">HuntTarget</a> ();
		}
		<b>else</b>
		{
			<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_movetarget">movetarget</a>)
				<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_th_walk">th_walk</a> ();
			<b>else</b>
				<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_th_stand">th_stand</a> ();
			<b>return</b>;
		}
	}

	<a href="qc-glob.htm#self">self</a>.show_hostile = <a href="qc-glob.htm#time">time</a> + 1;		<i>// wake up other monsters</i>

<i>// check knowledge of enemy</i>
	enemy_vis = <a href="ai.htm#visible">visible</a>(<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_enemy">enemy</a>);
	<b>if</b> (enemy_vis)
		<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_search_time">search_time</a> = <a href="qc-glob.htm#time">time</a> + 5;

<i>// look for other coop players</i>
	<b>if</b> (<a href="qc-glob.htm#coop">coop</a> &amp;&amp; <a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_search_time">search_time</a> &lt; <a href="qc-glob.htm#time">time</a>)
	{
		<b>if</b> (<a href="ai.htm#FindTarget">FindTarget</a> ())
			<b>return</b>;
	}

	enemy_infront = <a href="ai.htm#infront">infront</a>(<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_enemy">enemy</a>);
	enemy_range = <a href="ai.htm#range">range</a>(<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_enemy">enemy</a>);
	<a href="fight.htm#enemy_yaw">enemy_yaw</a> = <a href="qc-built.htm#vectoyaw">vectoyaw</a>(<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_enemy">enemy</a>.<a href="qc-enty.htm#dot_origin">origin</a> - <a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_origin">origin</a>);
	
	<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_attack_state">attack_state</a> == <a href="defs.htm#AS_MISSILE">AS_MISSILE</a>)
	{
<i>//dprint ("ai_run_missile\n");</i>
		<a href="ai.htm#ai_run_missile">ai_run_missile</a> ();
		<b>return</b>;
	}
	<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_attack_state">attack_state</a> == <a href="defs.htm#AS_MELEE">AS_MELEE</a>)
	{
<i>//dprint ("ai_run_melee\n");</i>
		<a href="ai.htm#ai_run_melee">ai_run_melee</a> ();
		<b>return</b>;
	}

	<b>if</b> (<a href="ai.htm#CheckAnyAttack">CheckAnyAttack</a> ())
		<b>return</b>;					<i>// beginning an attack</i>
		
	<b>if</b> (<a href="qc-glob.htm#self">self</a>.<a href="qc-enty.htm#dot_attack_state">attack_state</a> == <a href="defs.htm#AS_SLIDING">AS_SLIDING</a>)
	{
		<a href="ai.htm#ai_run_slide">ai_run_slide</a> ();
		<b>return</b>;
	}
		
<i>// head straight in</i>
	<a href="qc-built.htm#movetogoal">movetogoal</a> (dist);		<i>// done in C code...</i>
};


</pre></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -