インポート関数クイックリファレンス
インポート関数とは
インポート関数は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