QuakeCマニュアル

3. ビルトイン関数
 これから紹介する関数群はあらかじめ用意されている関数であり、機械語で記述された内部
ルーチンであるため処理速度はユーザー定義の関数に比べとても速い。なお、これらの関数を
再定義することはできない(上書き禁止)。

3.1 基本的な演算関数

関数:anglemod
	float anglemod(float angle)

 -180〜180°(degree)で表されるangle値を0〜360°(degree)の値へ変換する。例えば

	anglemod( 36.6 ) = 36.6
	anglemod( -154.7 ) = 205.3

関数:rint
	float rint(float val)

 valで与えられた値の小数点以下を切り捨てる。例えば

	rint( 128.5 ) = 128

関数:floor
	float floor(float val)

 valで与えられた値の小数点以下をくり下げて整数値を得る。例えば

	floor( 125.4 ) = 125
	floor( -232.6 ) = -233

関数:ceil
	float ceil(float val)

 valで与えられた値の小数点以下をくり上げて整数値を得る。例えば

	floor( 125.4 ) = 126
	floor( -232.6 ) = -232

関数:fabs
	float fabs(float val)

 valで与えられた値の絶対値を得る。例えば

	floor( 125.4 ) = 125.4
	floor( -232.6 ) = 232.6

関数:random
	float random()

 0.0〜1.0の範囲の乱数を得る。

関数:ftos
	string ftos(float value)

 valueで与えられた値をstring型へ変換する。Print系関数で数値を表示したい場合等に使用
する。

3.2 基本的なベクトル演算関数

関数:normalize
	vector normalize(vector v)

 ベクトルvの単位ベクトル(長さが1)を得る。あるベクトルの延長線上にある座標を知りたい
場合等に便利である。

関数:vlen
	float vlen(vector v)

 ベクトルvの長さを得る(戻り値は常に0以上の値である)。

関数:vectoyaw
	float vectoyaw(vector v)

 ベクトルvからyaw angle値を得る。yaw angleは水平方向の値で-180〜180°(degree)の範囲で
表される。

関数:vectoangles
	vector vectoangles(vector v)

 ベクトルvから戻り値ベクトルのx座標値にpitch angle、戻り値ベクトルのy座標値にyaw angle
値を得る。戻り値のz座標値には0が常に入る。pitch angleは垂直方向の値で-180〜180°(degree)
の範囲で表される。
 例えばゲーム中のプレイヤーのangleを例にとると左右の方向転換を行った場合yawが変化し、
上下の向きを変えればpitchが変化するわけである。

関数:vtos
	string vtos(vector v)

 vで与えられたベクトル値をstring型へ変換する。Print系関数でベクトル値を表示したい場合等
に使用する。

関数:makevectors
	void makevectors(vector angles)

 与えられたangles('pitch yaw 0'の形)から前方向、上方向、右方向(全てanglesから相対的に見
た方向)のベクトルを得る。結果は以下に示す3つのグローバル変数へ格納される。

	vector	v_forward;	//前方
	vector	v_up;		//上方
	vector	v_right;		//右方向


3.3 サウンドの出力

関数:sound
	void sound(entity source,float channel,string sample,float value,float attenuation)

	entityが8チャンネルのうちの1チャンネルを使用して発声する。

	各パラメータの説明
	sound = サウンドを発声するentity(例えばself)
	channel = サウンド出力を行うチャンネル
	sample = 再生するWAVファイル名(例えば "ogre/ogdrag.wav")
	volume = 音量を指定(0.0〜1.0の間で1.0が最大音量)
	attenuation = 減衰設定


注: channel及びattenuationにはそれぞれ以下の数値を指定するようだ。
	channel:
	CHAN_AUTO	= 0;
	CHAN_WEAPON	= 1;
	CHAN_VOICE	= 2;
	CHAN_ITEM	= 3;
	CHAN_BODY	= 4;

	attenuation:
	ATTN_NONE	= 0;
	ATTN_NORM	= 1;
	ATTN_IDLE	= 2;
	ATTN_STATIC	= 3;

 以下にsound関数の例を示す
sound (self, CHAN_VOICE, "player/gib.wav", 1, ATTN_NONE)

関数:ambientsound
void ambientsound(vector position,string sample,float volume,float attenuation)

	指定された座標において音声を発声させる。

	各パラメータの説明
	position = マップ内の3次元空間座標
	sample = 再生するWAVファイル名(例えば "ogre/ogdrag.wav")
	volume = 音量を指定(0.0〜1.0の間で1.0が最大音量)
	attenuation = 減衰設定

3.4 entityの制御

関数:spawn
	entity spawn()

 戻り値として空の新規entityを得る。新規entityに対して各fieldの値指定や、設置座標の
指定、各entityセットアップ関数の実行等を行う。

関数:remove
	void remove(entity e)

 entity eを削除する(安らかに眠れ)。

関数:makestatic
	void makestatic(entity e)

 entity eを静的存在にし、その旨をネットワークへ送信する。もしも、このentity eが動的
entityのリストから削除されたとしても、entity eの存在はそのレベル終了迄消えることは無
い。

関数:nextent
	entity nextent(entity e)

 entityリストにおいてeの次に定義されているentityを得る。entityリスト上で未定義の物に
ついては無視して検索するため便利である。

関数:find
	entity find(entity start,.string field,string match)

 entityリスト上でstartから検索を始め、指定fieldとmatchが一致するentityを探し出す。も
しも見つかった場合はそのentityを、見つからなかった場合はworldを戻り値として得る。

	各パラメータの説明
	start = 検索を開始するentity(world がリストの先頭である)
	field = 検索対象のfield(例:targetname)
	match = 検索したい文字列(例:other.target)

例:リスト上で一番先頭のplayerを見つけたい場合
	e = find( world, classname,"player");

注:fieldへentity fieldの名前を指定する時、.(ドット)、または"や'等のクォーテーションマ
ークを使用しないこと。

関数:findradius
	entity findradius(vector origin,float radius)

 指定された球型空間内に存在するentityのリストが作られ、そのリスト上の先頭entityを得る。
戻り値を仮にeへ得たとすると、それ以降はe = e.chainとして順にリスト上のentityを取り出し
てゆく。e == FALSEになった時点でリストの終端へ来たことがわかる。これは爆発によるダメー
ジ処理時に便利である。

	各パラメータの説明
	origin = 指定空間の球の中心座標
	radius = 指定空間の球の半径

例:	e = findradius(origin,radius);
	while( e )		//e == FALSE になるまで実行
	{
		T_Damage(e,...);	//eへダメージを与える
		e = e.chain;	//次のentityを得る
	}

関数:setmodel
	void setmodel(entity e,string model)

 entity eへmodelを割り当てる。割り当てるmodelはプリキャッシュmodelとして宣言された物
でなければならない。modelを割り当てる前にe.movetypeとe.soridを先に設定しておくこと。

	各パラメータの説明
	e = modelを割り当てたいentity
	model = modelのファイル名(例:"progs/soldier.mdl")

関数:lightstyle
	void lightstyle(flost style,string value)

 トーチやテレポーターその他のライト発光パターンを設定する。styleは全部で64スタイルあり、
0〜63の番号が割り振られている。この番号の指定を誤るとゲームがクラッシュしてしまう恐れが
あるので注意が必要だ。32〜62番は切り替え式ライトのプログラムへ既にアサインされてしまっ
ている。valueについては小文字のアルファベットを数値の代わりに使用して発光レベルのパター
ンを表記する方法を使い、値は"a"(0)〜"z"(30)となっている。

	各パラメータの説明
	style = 発光パターンを設定したいstyleの番号(0〜63)
	value = 発光パターン(例:"abcdefghijklmlkjihgfedcb")

3.5 entityの移動

関数:ChangeYaw
	void ChangeYaw()

 selfの水平方向の向きを変える。方向転換はself.ideal_yawの向きへself.yaw_speedに設定さ
れた速さで行われ、方向転換の結果はグローバル変数のcurrent_yawへセットされる。この関数は
0.1秒ごとにモンスターが呼び出している。

関数:walkmove
	float walkmove(float yaw,float dist)

 selfを指定された方向に向かって一定距離移動させる。戻り値はTRUEもしくはFALSEのどちら
かで、移動に失敗した場合FALSEが返される。主にモンスターが障害物に阻まれているかどうか
を調べるのに使う。

	各パラメータの説明
	yaw = 移動方向
	dist = 移動距離

関数:droptofloor
	float droptofloor()

床が下方-256の位置までの範囲ならばselfを床に着地させる。戻り値がTRUEであれば着地は成
されたと判断する。主にアイテム類の設置や歩行するモンスターに対して使用する。

関数:setorigin
	void setorigin(entity e,vector position)

 entityを指定された場所へ移動させる。この関数はentityがspawnされた時やテレポートした
時に使用される。この方法であればゲーム内の物理法則に左右されることなく移動が可能である。
entityの移動にe.originを直接変更してしまうと内部リンクがねじれてentityのクリッピング
処理がめちゃめちゃになってしまうので、必ずこの関数を使用すること。

	各パラメータの説明
	e = 移動させたいentity
	position = 移動先の座標

関数:setsize
	void setsize(entity e,vector min,vector max)

 entity.originに対する相対座標によってeitityのサイズを設定する。設定されたbox型空間
はentityのangleと連動している。

	各パラメータの説明
	e = サイズを設定したいentity
	min = boxの最下位座標(例:VEC_HILL2_MIN)
	max = boxの最上位座標(例:VEC_HILL2_MAX)

例:敵キャラクタsoldier(GRUNT)の設定を以下に示す。
setsize (self, '-16 -16 -24', '16 16 40')

関数:movetogoal
	vector movetogoal(float step)

 目標地点へ向かって移動する。モンスターによって使用される関数。

	パラメータの説明
	step = 移動距離

3.6 戦闘及び発砲

関数:aim
	vector aim(entity e,float missilespeed)

entity eが狙い撃つことの可能な方向を得る。たいていeはプレイヤーで、戻り値のベクトルは
敵に対するauto-aiming(自動照準)に使用される。

関数:particle
	void particle(vector origin,vector dir,float color,float count)

 飛沫を作り出す(小さなドットが宙に舞う)。

	各パラメータの説明
	origin = 飛沫を作り出す場所
	dir = 飛沫の飛ぶ方向
	color = 色の選択(0,75,73,225)
	count = 飛沫が消えるまでの時間(秒単位)

	colorの説明
	color = 0	破片用(白)
	color = 75	黄色
	color = 73	血飛沫用(赤)
	color = 225	entityがダメージを受けた時用(オレンジ)

関数:checkclient
	entity checkclient()

 selfにクライアントが存在するならば、その情報を得ることができる。

3.7 衝突判定

関数:traceline
	void traceline(vector v1,vector v2,float nomonsters,entity forent)

 指定区間の直線を辿り、直線上に存在するentityを見つける。この関数はターゲットに向け
て銃を発射する場合によく用いられる。ラインのトレーシングはbox(これは敵等も含む)や障害
物(その他のentity)に阻まれるか、ラインの終端へ達した時点で終了
し、戻り値はグローバル変数へ格納される。

	各パラメータの説明
	v1 = トレースの始点
	v2 = トレースの終点
	nomonsters = TRUEを指定すると他のmonsterをトレーシング中に無視する
	forent = トレーシング中に無視するentity

注:大抵はforent=selfを使うことになる、もしforent=worldを指定するとトレーシングの対象は
全てのentityとなる。

	戻り値のグローバル変数の説明
	float	trace_allsolid;		//使用せず
	float	trace_startsolid;	//使用せず
	float	trace_fraction;		//指定ライン全体に対してどの場所で障害物へヒット
					//したかが格納され、結果が1の場合は障害物が何も
					//見つからなかったことを意味する
	vector	trace_endpos;		//トレーシングが終端へ達した、または障害物に阻ま
					//れた地点の座標
	vector	trace_plane_normal;	//トレーシングを行った向きのベクトル(?)
	vector	trace_plane_dist;	//v2からトレーシングが終了した地点(trace_endpos)
					//までの距離(?)
	vector	trace_ent;		//トレーシングの結果、衝突したentity
	float	trace_inopen;		//値がTRUEならばトレーシングラインは水中を通って
					//いないことを意味する
	float	trace_inwataer;		//値がTRUEならばトレーシングラインは水中を通って
					//いることを意味する

関数:checkpos
	注意!通常では実行不可。使用してはならない。
	scalar checkpos(entity e,vector position)

 戻り値がTRUEならばpositionで指定された地点までentity eは移動可能である。

関数:checkbottom
	float checkbottom(entity e)

 戻り値がTRUEであればentity eは地面に接していることを意味する。この関数はジャンプを行うモ
ンスターに対してでたらめにジャンプした結果、身動きが取れなくなるのを(またはそれに相当する
状態に陥るのを)防ぐために使用する。

	パラメータの説明
	e = 確認を行うentity

関数:pointcontents
	float pointcontents(vector pos)

 指定座標の位置の状態を得る。たとえば水の中、スライムの中、溶岩の中...。

	パラメータの説明
	pos = 状態を知りたい場所の座標

	戻り値の説明
	CONTENT_EMPTY	= -1;	//何も無い
	CONTENT_SOLID	= -2;	//壁、その他固体
	CONTENT_WATER	= -3;	//水の中
	CONTENT_SLIME	= -4;	//スライムの中
	CONTENT_LAVA	= -5;	//スライムの中
	CONTENT_SKY	= -6;	//空の中

3.8 サーバー関連の関数

関数:changelevel
	void changelevel(string mapname)

 ゲームのマップを変更する。これはコンソールコマンドのchangelevelと同様の働きをする。

	パラメータの説明
	mapname = 変更したいmap名(例:"e1m1")

関数:setspawnparms
	void setspawnparms(entity client)

 指定したentityのパラメータを初期の状態に戻す。この関数はplayerに対してのみ有効である。

	パラメータの説明
	client = パラメータを初期化したいentity(player以外は無効)

関数:stuffcmd
	void stuffcmd(entity client,string text)

 特定のplayerに対し、textで指定されたコマンドを実行させる(コンソールからコマンドを実
行させること同様に)。textの末尾へ\n(改行コード)を必ず付加すること。そうしなければコマン
ドは実行されずに、textがplayerのコンソールへ打ち込まれただけの状態で残ってしまう。

	各パラメータの説明
	client = コマンドを実行させたいplayer
	text = 実行させたいコマンドライン、末尾へ\n(改行コード)を付加

例:
	stuffcmd(self,"bf\n");		//画面をフラッシュさせる
	stuffcmd(self,"name Buddy\n")	//playerの名前をBuddyへ
	bfコマンドは主にclientの画面をフラッシュさせたい時に使用する。

3.9 メッセージの表示

関数:bprint
	void bprint(string text)

 サーバーへ接続中の全てのplayerへメッセージを送る。

	パラメータの説明
	text = メッセージ文

関数:centerprint
	void centerprint(entity client,string text)

 特定のplayerに対して、ゲーム画面の中心へメッセージを送る。

	各パラメータの説明
	client = メッセージを送りたいplayer
	text = メッセージ文

関数:sprint
	void sprint(entity client,string text)

 特定のplayerに対して、メッセージを送る。
	
	各パラメータの説明
	client = メッセージを送りたいplayer
	text = メッセージ文

3.10 コンソール

関数:localcmd
	void localcmd(string text)

 サーバーコマンドを実行させる。サーバーのコンソールよりタイピングして実行させる
ことと同様である。

	パラメータの説明
	text = 実行させたいコマンドライン、末尾へ\n(改行コード)を付加

例:
	localcmd("restart\n");		//levelを再スタートさせる
	localcmd("teamplay 1\n");	//deathmatchモードをteamplayへ
	localcmd("killserver\n");	//哀れなサーバー...

関数:dprint
	void dprint(string texet)

 サーバーのコンソール画面へメッセージを表示。

	パラメータの説明
	texet = 表示させたい文

関数:cvar
	float cvar(string variable)

 指定したコンソール値を得る。

	パラメータの説明
	variable = 参照したいコンソール値(例:"teamplay")

関数:cvar_set
	float cvar_set(string variable,string value)

 コンソール値を設定する。

	各パラメータの説明
	variable = 値を設定したいコンソール値
	value = 設定したい値

3.11 デバッグ用関数

関数:eprint
	void eprint(entity e)

 entity eについての詳細を表示する(デバッギングの目的で)。

	パラメータの説明
	e = 詳細を表示したいentity

関数:coredump
	void coredump()

 全てのentityを表示。

関数:traceon
	void traceon()

 トレーシングを開始して結果を表示する。

関数:traceoff
	void traceoff()

 トレーシングを停止する。

関数:break
	void break()

 プログラムを終了する。使用しないのでは?

関数:error
	void error(string text)

 エラーメッセージを表示する。

	パラメータの説明
	text = エラーメッセージ

関数:objerror
	void objerror(string text)

 オブジェクトselfに対するエラーメッセージを表示する。

	パラメータの説明
	text = エラーメッセージ

3.12 プリキャッシング・ファイル

 これらの関数はPAKファイルが作られる以前のmodelやsound、その他のファイルを宣言する
ものである。Quakeにはじめから含まれていないファイルを使えるようにするとき、そのファ
イルのプリキャッシング宣言を行う関数は関数worldspawn()によって呼び出される。そして
QCCコンパイラはPAKファイル中のファイルや、プログラム中で必要となるファイルを全て自
動的に登録してくれる。
 levelがスタート時、それぞれのプリキャッシング要求が呼び出され、固定テーブルへイン
デックスが作成される。これらプリキャッシング関数は関数worldspawn()実行後に実行して
はならない。そうしないとゲーム自体はクラッシュしないものの、levelが再スタートしてし
まうなどの問題が起こる。ファイルのプリキャッシングはspawn関数内でのみ行うように。

関数:precache_file
	void precache_file(string file)

 ゲーム最中に使用することはない。レジスト版Quakeではprecache_file2を使用する。

	パラメータの説明
	file = PAKファイル内に含まれているファイル名

関数:precache_model
	void precache_model(string file)

 ゲーム最中に使用することはない。spawn関数においてmodelファイルを宣言する時に使用す
る。レジスト版Quakeではprecache_model2を使用。

	パラメータの説明
	file = PAKファイル内に含まれているMDLまたはBSPファイル名

関数:precache_sound
	void precache_sound(string file)

 ゲーム最中に使用することはない。spawn関数においてsoundファイルを宣言する時に使用す
る。レジスト版Quakeではprecache_sound2を使用。

	パラメータの説明
	file = PAKファイル内に含まれているWAVファイル名



e-mail:ponpoko@axcx.com