インポート関数クイックリファレンス

インポート関数とは

 インポート関数はQuake2のシステム側から提供される関数です。よってgamex86.dllのソース内では関数の内容を知ることはできません。このままでは困るので私の力の及ぶ限りこれらインポート関数の働きを調査しました。
 インポート関数はgame_import_t型構造体のメンバ関数であり、Quake2ではg_main.cで
game_import_t	gi;
という宣言が行われてgiへ関数がインポートされるので、例えばargs関数を呼び出したい場合には
gi.args();
という形式で呼び出すことになります。

インポート関数群
AddCommandString
AreasConnected
argc
argv
args

bprintf
BoxEdicts

centerprintf
configstring
cprintf
cvar
cvar_forceset
cvar_set

DebugGraph
dprintf

error

FreeTags

imageindex
inPVS
inPHS

linkentity

modelindex
multicast

Pmove
pointcontents
positioned_sound

SetAreaPortalState
setmodel
sound
soundindex

TagFree
TagMalloc
trace

unicast
unlinkentity

WriteAngle
WriteByte
WriteChar
WriteDir
WriteFloat
WriteLong
WritePosition
WriteShort
WriteString

void	bprintf (int printlevel, char *fmt, ...);

 接続中のプレイヤー全員に対してメッセージを表示。

引数
printlevel:以下の中から選択(優先順位らしい)
	PRINT_LOW		アイテムを拾った時のメッセージ用?(使われていないようだ)
	PRINT_MEDIUM		死亡通知用
	PRINT_HIGH		必ず表示させたい時用
	PRINT_CHAT		チャットメッセージ(BEEP音と共に緑色でメッセージを表示)
*fmt:メッセージ文字列のポインタ


	gi.bprintf ( PRINT_HIGH, "oresama wa\n","GIAN samada\n");

void	dprintf (char *fmt, ...)

 デバッグ用メッセージの表示を行う。

引数
*fmt:メッセージ文字列のポインタ


	gi.dprintf ( "error number\n","is 666\n");

void	cprintf (edict_t *ent, int printlevel, char *fmt, ...)

 特定のプレイヤーに対してメッセージを表示。

引数
*ent:メッセージを表示するプレイヤー
printlevel:以下の中から選択(優先順位らしい)
	PRINT_LOW		アイテムを拾った時のメッセージ用?(使われていないようだ)
	PRINT_MEDIUM		死亡通知用
	PRINT_HIGH		必ず表示させたい時用
	PRINT_CHAT		チャットメッセージ(BEEP音と共に緑色でメッセージを表示)
*fmt:メッセージ文字列のポインタ


	gi.cprintf ( ent, PRINT_HIGH, "anta onaka\n","kowashita\n");

void	centerprintf (edict_t *ent, char *fmt, ...)

 特定のプレイヤーに対し、画面の中心へメッセージを表示。

引数
*ent:メッセージを表示するプレイヤー
*fmt:メッセージ文字列のポインタ


	gi.centerprintf ( ent, "THE\n","HANAKUSO MANIA\n");

void	sound (edict_t *ent, int channel, int soundindex,
					float volume, float attenuation, float timeofs)

 指定したプレイヤーに効果音を発せさせる。

引数
*ent:効果音を発するプレイヤー
channel:効果音の再生チャンネル、以下の中から選択
	CHAN_AUTO		自動選択
	CHAN_WEAPON		武器用
	CHAN_VOICE		声用
	CHAN_ITEM		アイテム用
	CHAN_BODY		体用(水に飛び込んだ時等の効果音)
soundindex:効果音のindex番号を指定する。index番号は同じインポート関数であるsoundindexによって得る。
volume:0.0〜1.0の間で再生ボリュームを指定
attenuation:効果音の減衰タイプを以下の中から選択
	ATTN_NONE		減衰無しでそのまま再生
	ATTN_NORM		普通
	ATTN_IDLE		?
	ATTN_STATIC		遠距離で聞いた場合、減衰が速くなる設定
timeofs:WAVファイルの再生開始ポイント。通常0を指定。


	gi.sound (ent, CHAN_BODY, gi.soundindex("items/damage2.wav"), 1, ATTN_NONE, 0);

void	positioned_sound (vec3_t origin, edict_t *ent, int channel,
				int soundinedex, float volume, float attenuation, float timeofs)
 指定した地点で効果音を発せさせる。

引数
origin:効果音の発生地点
*ent:効果音を発するプレイヤー
channel:効果音の再生チャンネル、以下の中から選択
	CHAN_AUTO		自動選択
	CHAN_WEAPON		武器用
	CHAN_VOICE		声用
	CHAN_ITEM		アイテム用
	CHAN_BODY		体用(水に飛び込んだ時等の効果音)
soundindex:効果音のindex番号を指定する。index番号は同じインポート関数であるsoundindexによって得る。
volume:0.0〜1.0の間で再生ボリュームを指定
attenuation:効果音の減衰タイプを以下の中から選択
	ATTN_NONE		減衰無しでそのまま再生
	ATTN_NORM		普通
	ATTN_IDLE		?
	ATTN_STATIC		遠距離で聞いた場合、減衰が速くなる設定
timeofs:WAVファイルの再生開始ポイント。通常0を指定。


	gi.positioned_sound (ent->s.origin, ent, CHAN_AUTO,
						gi.soundindex("misc/h2ohit1.wav"), 1, ATTN_NORM, 0);

void	configstring (int num, char *string)
 各種設定番号及びindex番号へ文字列データを割り当てる。

引数
num:対象となる各種設定番号及びindex番号
	CS_NAME			ゲームの名前?(0)
	CS_CDTRACK		再生するCDトラック(1)
	CS_SKY			空のタイプ名?(2)
	CS_SKYAXIS		空の回転軸位置?"%f %f %f"の形で指定(3)
	CS_SKYROTATE		空の回転タイプ?(4)
	CS_STATUSBAR		ステータスバーのレイアウト設定スクリプト(5)
	CS_MAPCHECKSUM		チートマップ摘発用のチェックサム?(31)

	CS_MODELS		model indexの先頭番号(32)
	CS_SOUNDS		sound indexの先頭番号(CS_MODELS+MAX_MODELS)
	CS_IMAGES		image indexの先頭番号(CS_SOUNDS+MAX_SOUNDS)
	CS_LIGHTS		light indexの先頭番号(CS_IMAGES+MAX_IMAGES)
	CS_ITEMS		item indexの先頭番号(CS_LIGHTS+MAX_LIGHTSTYLES)
	CS_PLAYERSKINS		player skin indexの先頭番号(CS_ITEMS+MAX_ITEMS)
	MAX_CONFIGSTRINGS	(CS_PLAYERSKINS+MAX_CLIENTS)

MAX_MODELS、MAX_SOUNDS、MAX_IMAGES、MAX_LIGHTSTYLES、MAX_ITEMS、MAX_CLIENTS
はいずれも現在の設定では256である。

*string:割り当てる文字列

※model、sound、imageはそれぞれmodelindex、soundindex、imageindex関数
を使用して各index番号へファイル名を割り当てているので、直接configstringを
使用することはない。


	gi.configstring(CS_LIGHTS+10, "mmamammmmammamamaaamammma");
	gi.configstring (CS_CDTRACK, "0");

void	error (char *fmt, ...)

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

引数
*fmt:メッセージ文字列のポインタ


	gi.error ("Couldn't open %s", filename);

int	modelindex (char *name)

 指定されたmodelをキャッシュへ読み込むと共にindex番号を取得。以降はindex番号を
返すのみとなる。

引数
*name:modelファイル名(相対パス入り)

戻り値
	modelのindex番号


	self->s.modelindex = gi.modelindex ("models/monsters/gunner/tris.md2");

int	soundindex (char *name)

 指定されたsoundをキャッシュへ読み込むと共にindex番号を取得。以降はindex番号を
返すのみとなる。

引数
*name:soundファイル名(相対パス入り)

戻り値
	soundのindex番号


	gi.sound (current_player, CHAN_VOICE, gi.soundindex("player/burn1.wav"), 1, ATTN_NORM, 0);

int	imageindex (char *name)

 指定されたimageをキャッシュへ読み込むと共にindex番号を取得。以降はindex番号を
返すのみとなる。

引数
*name:imageファイル名(相対パス入り)

戻り値
	imageのindex番号


	ent->client->ps.stats[STAT_ARMOR_ICON] = gi.imageindex ("i_powershield");

void	setmodel (edict_t *ent, char *name)

 特定のentityへmodelを割り当てる。

引数
*ent:modelを割り当てるentity(プレイヤー、モンスター、武器、その他)
*name:modelファイル名(相対パス入り)


	gi.setmodel (ent, "models/objects/dmspot/tris.md2");

trace_t	trace (vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end,
							edict_t *passent, int contentmask)

 指定サイズのBOXで特定区間のトレーシングを行う。トレーシング中に対象となる
コンテンツへBOXが衝突するか、トレース区間の終端へ到達すると処理は終了する。

引数
start:トレース開始地点
mins:トレースBOXの最下位相対座標
maxs:トレースBOXの最上位相対座標
end:トレース終了地点
*passent:トレース中無視するentity(普通は自分自身を指定する)
contentmask:以下のコンテンツからトレース対象となる物を選択し、orで足す
	CONTENTS_SOLID		塊(1)
	CONTENTS_WINDOW		窓(2)
	CONTENTS_AUX		?(4)
	CONTENTS_LAVA		溶岩(8)
	CONTENTS_SLIME		スライム(16)
	CONTENTS_WATER		水(32)
	CONTENTS_MIST		霧(64)
	LAST_VISIBLE_CONTENTS	?(64)

これより上位ビットにもコンテンツの種類が割り当てられていますが、q_shared.h
を参照してください。

戻り値
以下に示すtrace_t型として定義されたの構造体へトレース結果を得る

typedef struct
{
	qboolean	allsolid;	// trueの場合、平面は無効(使われていない?)
	qboolean	startsolid;	// trueの場合、startで指定した場所は壁や岩等の塊の中だった
	float		fraction;	// 1.0だった場合トレース終了まで接触した物は無い
	vec3_t		endpos;		// トレースを終了した地点
	cplane_t	plane;		// 接触面の情報
	csurface_t	*surface;	// 接触面表面に関する情報
	int		contents;	// トレース終了地点のコンテンツタイプ
	struct edict_s	*ent;		// 接触したentity
} trace_t;


	trace_t tr;
	tr = gi.trace (spot1, NULL, NULL, spot2, self,
				CONTENTS_SOLID|CONTENTS_MONSTER|CONTENTS_SLIME|CONTENTS_LAVA)

int	pointcontents (vec3_t point)

 指定した座標のコンテンツタイプを得る。

引数
point:コンテンツタイプを知りたい座標

戻り値
 以下に示すいずれかのコンテンツタイプを戻り値として得る
	CONTENTS_SOLID		塊(1)
	CONTENTS_WINDOW		窓(2)
	CONTENTS_AUX		?(4)
	CONTENTS_LAVA		溶岩(8)
	CONTENTS_SLIME		スライム(16)
	CONTENTS_WATER		水(32)
	CONTENTS_MIST		霧(64)
	LAST_VISIBLE_CONTENTS	?(64)


	vec3_t	point={0,1,2}
	int	cont;
	cont = gi.pointcontents (point);

qboolean	inPVS (vec3_t p1, vec3_t p2)

 調査中。


qboolean	inPHS (vec3_t p1, vec3_t p2)

 調査中。


void	SetAreaPortalState (int portalnum, qboolean open)

 調査中。


qboolean	AreasConnected (int area1, int area2)

 調査中。


void	linkentity (edict_t *ent)

 entで指定したentityの相互作用を可能にする。

引数
*ent:相互作用を可能にしたいentity


void	unlinkentity (edict_t *ent)

 entで指定したentityの相互作用を解除する。

引数
*ent:相互作用を解除したいentity


int	BoxEdicts (vec3_t mins, vec3_t maxs, edict_t **list,
								int maxcount, int areatype);

 特定box内に存在するentity数、及びリストを得る。

引数
mins:boxの最下位絶対座標
maxs:boxの最上位絶対座標
**list:entityリストを受け取る配列
maxcount:受け取るentityリストの最大数普通MAX_EDICTSを指定
areatype:以下の2つから選択
	AREA_SOLID	playerやmonster、その他固体の物体
	AREA_TRIGGERS	アイテム、武器等を対象に行う

戻り値
 box内に存在するentity数


	edict_t		*touch[MAX_EDICTS];
	int		num;
	num = gi.BoxEdicts (ent->absmin, ent->absmax, touch
					, MAX_EDICTS, AREA_SOLID);

void	Pmove (pmove_t *pmove)

 調査中。


void	multicast (vec3_t origin, multicast_t to)
void	unicast (edict_t *ent, qboolean reliable)
void	WriteChar (int c)
void	WriteByte (int c)
void	WriteShort (int c)
void	WriteLong (int c)
void	WriteFloat (float f)
void	WriteString (char *s)
void	WritePosition (vec3_t pos)
void	WriteDir (vec3_t pos)
void	WriteAngle (float f)

 使用例


void	TagMalloc (int size, int tag)

 メモリ領域を確保。

引数
size:サイズの指定
tag:領域確保するタグを以下から選択
	TAG_GAME	dllが読み込まれていなければ空(765)
	TAG_LEVEL	新しいlevelを読み込む際は空(766)


void	TagFree (void *block)

 使用目的は不明。


void	FreeTags (int tag)

 指定されたタグのメモリ領域を開放。

引数
tag:領域開放するタグを以下から選択
	TAG_GAME	dllが読み込まれていなければ空(765)
	TAG_LEVEL	新しいlevelを読み込む際は空(766)


cvar_t	cvar (char *var_name, char *value, int flags)

 コンソール値のプロパティを設定

引数
*var_name:コンソール値の名前
*value:コンソール値のデフォルト値であると思われる
flags:コンソール値の属性を指定(0を指定すると普通のコンソール値?)
	CVAR_ARCHIVE		セーブ時に設定される(1)
	CVAR_USERINFO		変更時、ユーザー情報へ追加(2)
	CVAR_SERVERINFO		変更時、サーバー情報へ追加(4)
	CVAR_NOSET		コマンドラインからのみ変更可能でコンンソールからは変更不可(8)
	CVAR_LATCH		サーバーが再スタートするまで変更は温存(16)

戻り値
以下に示すcvar_t型として定義されたの構造体へ設定した内容を得る

typedef struct
{
	char		*name;			//コンソール値の名前
	char		*string;		//設定されている値(文字列)
	char		*latched_string;	//CVAR_LATCHを設定した場合用
	int		flags;			//コンソール値の属性
	qboolean	modified;		// コンソール値が変更されるたびにフラグはセットされる
	float		value;			//設定されている値(数値)
	struct cvar_s *next;			//恐らくコンソール値リスト上の次のコンソール値情報
} cvar_t;



	cvar_t nomonsters;
	nomonsters = gi.cvar ("nomonsters", "0", CVAR_SERVERINFO);

cvar_t	cvar_set (char *var_name, char *value)

 コンソール値を設定。

引数
*var_name:コンソール値の名前
*value:設定する値(文字列)

戻り値
cvarを参照


	gi.cvar_set("sv_gravity", "800");

cvar_t	cvar_forceset (char *var_name, char *value)

 コンソール値を属性無視で強制的に設定(危険)。

引数
*var_name:コンソール値の名前
*value:設定する値(文字列)

戻り値
cvarを参照


	gi.cvar_forceset("skill", va("%f", skill_level));

int	argc (void)

 クライアントコマンド"cmd"へ与えられたパラメータの数を得る。

戻り値
クライアントコマンド"cmd"へ与えられたパラメータの数


	gi.cprintf (ent, PRINT_HIGH, "number of para.: %i ",gi.argc());

char	argv (int n)

 クライアントコマンド"cmd"へ与えられたパラメータを得る。

引数
n:"cmd"へ与えられた何番目のパラメータの内容を得るか(0〜)

戻り値
クライアントコマンド"cmd"へ与えられたn番目のパラメータ内容


	int	n = 1;
	gi.cprintf (ent, PRINT_HIGH, "para. no.%i : %s ",n,gi.argv(n));

char	args (void);

 クライアントコマンド"cmd"へ与えられた1番目のパラメータよりも後の内容を得る。
例えば"cmd baka aho manuke"であれば戻り値は"aho manuke"となる。

戻り値
クライアントコマンド"cmd"へ与えられた1番目のパラメータよりも後の内容


	gi.cprintf (ent, PRINT_HIGH, "cmdline: %s ",gi.args());

void	AddCommandString (char *text)

 コマンド実行。

引数
*text:コンソールのコマンドライン


	gi.AddCommandString ("nomonsters 1");

void	DebugGraph (float value, int color);

 デバッグ用のグラフ表示?

引数
*value:グラフの長さ
*color:グラフの色


e-mail:ponpoko@axcx.com