ゲームスクリプト API


DLLをスクリプトとしてプラグインするには

Cisqua はゲームを構成する基本的な部品を組み替えることができる仕組みを採用しているため、定められた関数を公開している DLL を作成すればゲームを組み替えることができます。 Cisqua では、ゲーム画面の描画やデータを制御する DLL をゲームスクリプト DLL と定めて、以下の関数を呼び出します。

このらの関数は実行時に cisqua.dll から検索されて呼び出されます。 そのため、CALLBACK で関数を修飾し、__declspec(dllexport) または必要に応じてモジュール定義ファイルを用意して関数を外部に公開なければなりません。

Cisqua がゲームスクリプト DLL に必須として要求する関数は、必ず cqs という接頭辞を持ちます。

ゲームスクリプト DLL が描画処理ルーチンやイベント処理でどのような動作をするかは開発者の自由です。 開発者はコンテナやレイヤオブジェクトのプログラムを再利用しながら、ゲームの挙動部分のコーディングに集中することができます。 以下のプログラムは、ルートレイヤに対して受け取ったイベントの内容を描画する単純なテストプログラムです。

#include "../cisqua.h"

cqILayer rootLayer = NULL;	
TCHAR text[1024];

__declspec(dllexport) BOOL CALLBACK cqsInitialize(PCTSTR param, cqILayer layer) {
	if (rootLayer) {
		rootLayer->Release(rootLayer);
	}

	rootLayer = layer->SmartCopy(layer);
	text[0] = 0;

	return TRUE;
}
__declspec(dllexport) VOID CALLBACK cqsRelease() {
	if (rootLayer) {
		rootLayer->Release(rootLayer);
	}
}

__declspec(dllexport) BOOL CALLBACK cqsOnDrawNext() {
	HDC hdc;
	RECT rect = { 0 };

	rect.right = rootLayer->GetWidth(rootLayer);
	rect.bottom = rootLayer->GetHeight(rootLayer);

	hdc = rootLayer->GetDC(rootLayer);
	FillRect(hdc , &rect , GetStockObject(WHITE_BRUSH));
	SetTextColor(hdc , 0);
	DrawText(hdc , text , -1 , &rect , DT_CENTER | DT_VCENTER | DT_SINGLELINE);
	rootLayer->DeleteDC(rootLayer , hdc);

	return TRUE;
}

__declspec(dllexport) VOID CALLBACK cqsOnMouseDown(DWORD button , LONG x , LONG y) {
	wsprintf(text , TEXT("OnMouseDown X=%d , Y=%d") , x , y);
}
__declspec(dllexport) VOID CALLBACK cqsOnMouseUp(DWORD button , LONG x , LONG y) {
	wsprintf(text , TEXT("OnMouseUp X=%d , Y=%d") , x , y);
}
__declspec(dllexport) VOID CALLBACK cqsOnMouseMove(LONG x , LONG y) {
	wsprintf(text , TEXT("OnMouseMove X=%d , Y=%d") , x , y);
}
__declspec(dllexport) VOID CALLBACK cqsOnKeyDown(int vkey) {
	wsprintf(text , TEXT("OnKeyDown keyChar=%c keyCode=%d") , vkey, vkey);
}
__declspec(dllexport) VOID CALLBACK cqsOnKeyUp(int vkey) {
	wsprintf(text , TEXT("OnKeyUp keyChar=%c keyCode=%d") , vkey, vkey);
}

__declspec(dllexport) BOOL CALLBACK cqsCanSave() {
	return FALSE;
}
__declspec(dllexport) BOOL CALLBACK cqsCanLoad() {
	return FALSE;
}

このプログラムは src フォルダの中にサンプルとして収められています。 また、cisqua.dll と同一のフォルダには、このプログラムをコンパイルした test.dll が格納されています。 setup.ini ファイルの SCRIPTER_MOD の値を test.dll に変更すれば、実行されるモジュールが coud.dll から test.dll に切り替えられます。

test.dll を実行すれば、コンテナからイベントが通知されるタイミングを視覚的に確認することができます。

ゲームスクリプト関数郡
関数解説
BOOL CALLBACK cqsInitialize(PCTSTR param, cqILayer);初期化します。
VOID CALLBACK cqsRelease(VOID);※将来必須の可能性のある予約関数です
BOOL CALLBACK cqsOnDrawNext(VOID);次の場面に移行します。
VOID CALLBACK cqsOnMouseDown(DWORD button , LONG x , LONG y);マウスボタンが押されたイベントを処理します。
VOID CALLBACK cqsOnMouseUp(DWORD button , LONG x , LONG y);マウスボタンが離されたイベントを処理します。
VOID CALLBACK cqsOnMouseMove(LONG x , LONG y);マウスカーソルが移動したイベントを処理します。
VOID CALLBACK cqsOnKeyDown(int vkey);キーボードのキーが押されたイベントを処理します。
VOID CALLBACK cqsOnKeyUp(int vkey);キーボードのキーが離されたイベントを処理します。
VOID CALLBACK cqsSave(PCTSTR);ゲームの現在の状態を保存します。
VOID CALLBACK cqsLoad(PCTSTR);ファイルからゲームの中断データを再開します。
BOOL CALLBACK cqsCanSave(VOID);現在のスクリプトの状態を保存できるかどうかを取得します。
BOOL CALLBACK cqsCanLoad(VOID);現在のスクリプトがデータを再開できるかどうかを取得します。


cqsInitialize

ゲームの状態を完全に初期化します。

BOOL CALLBACK cqsInitialize(PCTSTR param, cqILayer layer);
param
このゲームの初期化に使うヌルで終わるコマンド文字列へのポインタ。
layer
このゲームのルートレイヤ。
戻り値
正常に初期化できれば TRUE。

cqsRelease

VOID CALLBACK cqsRelease(VOID);

cqsOnDrawNext

ゲームを次の場面に移行します。

BOOL CALLBACK cqsOnDrawNext(VOID);
戻り値
場面が更新された場合は TRUE。無視された場合は FALSE。

cqsOnMouseDown

マウスボタンが押されたイベントを処理します。

VOID CALLBACK cqsOnMouseDown(DWORD button , LONG x , LONG y);
button
ボタンを表す定数。
x
X 座標。
y
Y 座標

cqsOnMouseUp

マウスボタンが離されたイベントを処理します。

VOID CALLBACK cqsOnMouseUp(DWORD button , LONG x , LONG y);
button
ボタンを表す定数。
x
X 座標。
y
Y 座標

cqsOnMouseMove

マウスカーソルが移動したイベントを処理します。

VOID CALLBACK cqsOnMouseMove(LONG x , LONG y);
x
X 座標。
y
Y 座標

cqsOnKeyDown

キーボードのキーが押されたイベントを処理します。

VOID CALLBACK cqsOnKeyDown(int vkey);
vkey
仮想キーコード。

cqsOnKeyUp

キーボードのキーが離されたイベントを処理します。

VOID CALLBACK cqsOnKeyUp(int vkey);
vkey
仮想キーコード。

cqsSave

指定したファイルに現在のゲームデータを保存します。

VOID CALLBACK cqsSave(PCTSTR filePath);
filePath
ファイルパスを表すヌルで終わる文字列へのポインタ。

cqsLoad

指定したファイルからゲームデータを読み込みます。

VOID CALLBACK cqsLoad(PCTSTR filePath);
filePath
ファイルパスを表すヌルで終わる文字列へのポインタ。

cqsCanSave

この関数が TRUE を返す場合 cqSave() 関数を安全に呼び出すことができます。

BOOL CALLBACK cqsCanSave(VOID);
戻り値
TURE ならばゲームの現在の状態を保存することができる。

cqsCanLoad

この関数が TRUE を返す場合 cqLoad() 関数を安全に呼び出すことができます。

BOOL CALLBACK cqsCanLoad(VOID);
戻り値
TURE ならばファイルからゲームを再開することができる。