================================================================================ AIMS Ver 1.50 2011/03/30 D.N.A. Softwares ================================================================================ ■ はじめに このプログラムは、「D.N.A. Softwares」で使用しているゲームエンジンです。 特徴として ・DirectX描画ライブラリ「Luna」を独自改造した高速な描画 ・スクリプトエンジン「Lua」を利用した汎用的な開発 が可能となっています。 営利非営利問わず無償でご利用いただけます。 販売・配布の際には一報いただけると幸いです。 動作環境 OS : Windows 2000/XP/XP64/Vista/Vista64 CPU : Pentium 4以降 MEMORY : 2000/XP 256MB以上・Vista 512MB以上 HDD : 100MB以上 VIDEO : DirectX 9に対応したグラフィックボード これはAIMSが起動する最低動作環境です。 スクリプトの記述内容や使用するリソース、PC環境などの要因により変動します。 ■ フォルダの内容 bin\ AIMSのバイナリ。AIMSd.exeがデバッグ、AIMS.exeがリリース。 docs\ AIMSの簡易マニュアルなど packer\ 配布時にリソースを梱包するためのキット。詳しくはフォルダ内txtを。 proto\ 開発用プログラム readme.txt このファイル ■ ゲーム配布時の注意事項 このエンジンでは以下のプログラム/ライブラリを利用しています。 ・DirectX9.0c用ライブラリ"Luna" ・Ogg Vorbis ・Mersenne Twister ・Lua, LuaJIT 配布の際には各ライブラリのライセンステキストを同梱してください。 (docs\license.txtを再利用してもかまいません) ■ インストール・アンインストール 解凍し、適当なフォルダにコピーしてください。 アンインストールする際はフォルダを削除してください。 AIMSはレジストリを使用していません。 ■ 起動オプション AIMS.exeには、以下のオプションを渡すことができます。 --vsync, -v VSYNCのみで描画を行います。 --double, -d 表示解像度を2倍にします。 --width, -w 指定した数値の高さで起動します。 --height, -h 指定した数値の幅で起動します。 --fullscreen 強制的にフルスクリーンで起動します。 --windowed 強制的にウィンドウモードで起動します。 --nostop 非アクティブ時に停止しません。 --console デバッグコンソールを表示します。 --log リリースビルドにおいて、ログ出力をさせます。 --logfilename, -l デバッグHTMLのファイル名指定。 --nolog ログ出力を行いません。(デバッグ用ビルド時有効) --frameskip 処理落ちする際にフレームスキップを行います。 --titlebar AIMSのタイトルバーにdebugOut文の出力を出します。 ■ エンジンの構成について AIMSは以下の手順で起動します。 1.設定ファイル読み込み 「実行ファイル名.lua」という設定ファイルを読み込みます。 実行ファイル名を変更した場合は、この設定ファイルの名前も変更してください。 (AIMSd.exeを利用する場合などに気をつけてください) 2.boot.lua ゲーム本体の初期化や、スクリプトファイルのrequireはここで行います。 3.common.lua 各種共通関数が記載されています。 boot.lua内の最初に読み込む(prequire)してください。 ■ 簡易リファレンス AIMSにはLuaスクリプトエンジンを採用しているため、 Luaで定義されている関数郡は全て利用可能です。 1.シーンという概念 AIMSは「ベースシーン」「追加シーン」という2つのシーン概念があります。 ベースシーンはゲームの基本となるシーンです。 追加シーンは、ベースシーンの上もしくは下に作成されるシーンです。 動作シーンには「Scene_OnStart()」「Scene_OnStep()」「Scene_OnClose()」という 3つの関数が最低でも必要となります。 また、呼び出しの際には「_On〜」より手前の英字を指定します。 呼び出された直後に「OnStart」が実行されます。 次のフレームからは、内外から終了されるまで「OnStep」がループ実行されます。 内外から終了指示を受けた場合「OnClose」が実行されメモリから解放されます。 各シーンには12枚のレイヤーが用意されてます。 レイヤーごとにオブジェクトの描画が行われます。 シーンの動作を変更する関数は以下のとおりです。 ・changeScene( SceneTag ); 自分自身の動作シーンをSceneTagに切り替えます。 実行すると、SceneTag_OnStartが実行されます。 ・SceneID = addScene( SceneTag[, Index] ); SceneTagという新しい動作シーンを作成します。 実行すると、SceneTag_OnStartが実行されます。 SceneIDは作成した動作シーンの値が格納されます。 Indexは1または2を指定します。 0をベースシーンとし、数字が大きいほど上に表示されます。 ・closeScene( [SceneID] ); SceneIDに指定された追加シーンを終了します。 指定が無い場合は自分自身のシーンを終了します。 実行すると、SceneTag_OnCloseが実行されます。 基本的には 「ゲームの中心的な内容をベースシーンで実行」 「PRGのメニューやSTGのスコア表示を追加シーンで実行」 という使い方が主だった使い方になりますが、 管理が煩雑になりやすいため慣れるまではベースシーンのみで実行するのが 望ましいと思います。 2.アクター AIMSでは「画面上に表示されるオブジェクト」のことをアクターと呼びます。 各アクターには以下の関数が用意されています。 ・hActor = createActor( hGraphic, x, y[, angle, speed], layer[, func]); 画面上で描画されるアクターを作成します。 angleとspeedが定義された場合、作成された次のフレームから 指定された値で動作を開始します。 layerには0〜11までの値を入力します。 funcが指定された場合「func_OnStart()」が実行されます。 次のフレームから、フレームごとに「func_OnStep()」が実行されます。 アクターの破棄が行われると「func_OnClose()」が実行されます。 ・addMover( hActor, wait, loop, MOVER_TAG, TAG_A, TAG_B); hActorに外部から処理を行います。 アクターが自分自身を参照する場合はiSelf()を指定します。 (iSelf()は自分自身のアクターハンドルを返す関数です) MOVER_TAGにはさまざまな命令が定義されています。 命令によってTAG_A、TAG_Bの指定内容が変化します。 代表的な命令は以下のとおりです。 MOVER_SETPOSITION, X, Y アクターを指定した座標に移動します。 MOVER_SETANGLE, ANGLE アクターの移動角度を設定します。 画面上での表示もこのANGLEに依存します。 MOVER_SETSPEED, SPEED アクターを指定したSPEEDで移動させます。 移動方向はアクターが保持しているANGLEに依存します。 MOVER_SETALPHA, ALPHA アクターの透明度を設定します。 0で表示なし、255で100%となります。 MOVER_ADDALPHA, ADDALPHA アクターの透明度を段階的に変更します。 loopで指定されたフレーム数分、透明度を増減します。 MOVER_SETVANISH アクターを消滅させます。 3.Music いわゆるBackGroundMusic。 ・playMusic(intro_filename[, loop_filename]); ・playMusicLoop(intro_filename[, loop_filename]); 指定されたoggファイルを再生する。 再生順は「intro_filename -> loop_filename」となり、 playMusicLoopの場合loop_filenameを無限ループ再生する。 (loop_filenameが定義されていない場合はintro_filenameをループする) 4.Sound いわゆるSoundEffect。 ・hSound = loadSound( filename ); 指定されたファイルをロードしハンドルを取得する ・playSound( hSound ); 指定されたハンドルのSEを再生する。 5.各種入力 DirectInputを利用して入力を取得することができます。 以下の定数が利用可能です。 BUTTON_UP BUTTON_DOWN BUTTON_LEFT BUTTON_RIGHT BUTTON_TRIG1 BUTTON_TRIG2 BUTTON_TRIG3 ・bool result = isJoyPressed([UserID, ]trigger_id); trigger_idに対応したキーが押されているか取得する。 UserIDが指定されていない場合は自動的に0が定義される。 ・int count = getJoyPressCount([UserID, ]trigger_id); trigger_idに対応したキーが押されているフレーム数を取得する。 押された直後のみ反応したい場合などに使用する。 6.その他 ゲーム制御や開発時に必要となる関数群 ・debugOut( string[, view] ); ・_dm( string[, view] ); ウィンドウタイトルとログにstringの内容を出力する。 viewにfalseが定義されている場合はログ出力は行わない。 変数の内容を表示したい場合、tostring(string)とすることで booleanやnilも表示される。 ・quit(); エンジンを終了する。 ・str = serialize( table ); 配列をテキスト化する。 ・table = deserialize( string ); テキストを配列に組み上げなおす。 ・saveFile(filename, string); stringの内容を指定されたfilenameに保存する。 ・string = loadFile(filename); stringに指定されたfilenameの内容を代入する。 ■ 最後に バグを発見した場合はご報告ください。  本パッケージにはLunaライブラリの作者、葉迩倭氏によるLuna用ユーティリティの一部  ・LPACK  ・LLZSS  ・FontUtil  ・LagUtil  を同梱しています。転載自由とのことですので、本パッケージに同梱いたしました。 ■ 改版履歴 2011/03/30 v1.50  ・以下の関数を追加。詳しくはPDFマニュアルで。   ・setMouseClippingRect …… マウスの移動範囲を制限する   ・randfMT …… 常に実数を返す randMT   ・getTextureFontHeight …… テクスチャフォントの「文字高」を得る。   ・mapBlockTransfer …… テーブルからキャラクタマップへコピー   ・getNearestActor …… 最近傍のアクターを得る   ・drawGraphic3DPlane,drawGraphicTorus,drawGraphicRing  …… 特殊形状描画をOnDrawで  ・drawTextureFont関数で文字整列を指定できるようになった。  ・createTextActorで生成したテクスチャフォントアクターについても、文字間隔の   処理が適切に働くようにFIX(VAR[64]で指定)  ・一番最初に生成したテクスチャフォントだけがdrawTextureFontで使えなかった   バグに対処  ・drawTextureFontでテクスチャフォントを使ったとき、ALIGN_CENTERで描画座標が   ズレるのを修正  ・setHitOverrideで当たり判定の上書きが正しくなされない問題に対処  ・開発版でF5を押してリスタートした際、ASCII文字フォントのテーブルをリセット   していなかったのを修正。  ・マップエディタとオートマップチップ変換ツールのClickOnceを使用しないように   した  (インストール先が不明瞭なのがどうも気になったのと、   バージョンアップ処理で面倒をおかけしそうな感じだったのでやめました。   コロコロ方針が変わって申し訳ありません)  ・マップエディタ修正。   ・無駄な再描画を抑制するようにした   ・ペーストペンを使ったとき、オートマップの設定に関係なく常にオートマップの    処理が入ってしまう不具合を修正。  ・テクスチャフォント生成ツールのFontUtilをLuna最終版同梱のものをベースに更新。   OpenTypeのフォントでよくみられる、「指定したピクセル数に対して得られるフォ   ントのサイズが3割〜4割小さい」問題に対応できるようになっています。   代わりに出力形式が若干減ってしまっていますが、アルファ付きPNGは出力できるの   でとりあえずは問題無いと考えております。 2011/01/19 v1.42  ・高速描画モードにおいて、アクターの描画順序が逆になっていた問題を修正。  ・proto/common.luaに必要な定数定義が入っていなかったのを修正。  ・マップエディタとオートマップチップ変換ツールについて、インストールにClickOnceを使うように変更。 2011/01/06 v1.41  ・isWindowed 関数がなかった(isWindowModeという名前だった)   isWindowed() でも isWindowMode() でも同様にウィンドウモードかどうかを得ら   れるようにした。  ・描画リストにおいて隣接したアクターを同時にVanishすると、一方のアクターの消去が1フレーム遅れ、OnVanish関数が二度呼ばれることがあったのを修正。  (同一レイヤーで同一タイミングに生成したアクターが同時に消滅すると、この事例がたびたび発生します) 2010/12/23 v1.40  ・アクターの変形描画時(VAR[64]=1,2,3)に起こる下記の不具合をFIX   ・テクスチャが左右反転して貼り付けられてしまっていた(反転しないようにした)   ・X,Y,Zで回転方向が統一できていなかった(すべて時計回りに)  ・MPPSDK.dllによるMOD再生に対応。次の手順で有効化します。   (リファレンスが間に合ってません。ごめんなさい)   1.アプリケーションコンフィグに"USE_MODPLUG = 1"を書き加える   2.AIMS本体のEXEファイルと同じところにMPPSDK.dllを置く (パッケージに同梱してます)   ここまでで有効化されます。   再生は playMod("ファイル名");   ループ再生は playModLoop("ファイル名");   停止などはstopMusic(); fadeMusic();が使えます。   MODPlug Trackerで作ったファイルならだいたい正しく鳴るはずです。   ループ設定もMODファイルの設定を適用します。   USE_MODPLUG=0を指定、または省略してあれば、MPPSDK.dllの同梱は不要です。   (積極的に使われる方もそうそういないと思いますが)本機能はまだ検証が不足して   いるところもありますので、不具合が出た場合はお知らせください。 2010/11/02 v1.30  ・プレイヤー人数を最大8人まで設定可能に。ゲームパッドを準備できなかったので、   パッド8つを接続した場合の動作は確認できていません。ご注意ください。  ・キャラクターマップ機能、テクスチャフォントなどを正式な公開機能に  ・getMouseW()関数の戻り値仕様を変更。前フレームからの相対値にした  ・アクターにベクトルを設定したあと、getAngle、getSpeedの値がベクトルから   導出した値に正しく再計算されるよう修正。  ・他、一部関数で仕様通りの動作になっていなかったのを修正   上記2関数以外に互換性に大きく関わるような修正はありません。  ・リファレンスマニュアルをPDF化。一応、全機能の仕様を掲載しています。  ・キャラクターマップ、テクスチャフォントのリリースに伴いマップエディタと   テクスチャフォント生成ツールを同梱。テクスチャフォントに関わるFontUtilと   そのフォントを梱包するLagUtilは葉迩倭氏制作のツールです。 2010/07/27 v1.20  ・様々な修正が入った最新バージョンにアップデート 2008/12/27 v1.01  ・リリース版においてAccess Violationで落ちる不具合があったので対処  ・F11で表示されるデバッグログ表示を若干変更。  ・デバッグ回りのオプション変更。(起動オプションの項参照のこと) 2008/09/27 v1.00  ・公開初版