fc2ブログ

ブログ移転します

ブログを移転します。
新URL : http://www.biscrat.com/blog/

このブログは残しておきますが新しい記事は書きません。
RSSなど購読している方は変更よろしくお願いします。
スポンサーサイト



カテゴリ : 雑記

System.getTickCountのオーバーフロー

吉里吉里のSystem.getTickCountはオーバーフローするのかなあ、と思って調べてみたメモ。
結果としてはしないっぽい。

元になるtickCount自体はtimeGetTimeの32bitで得ているようです。これ自体は49日程度しか持ちません。
それがオーバーフローするとTVPTickCountBiasに記録され、System.getTickCountで得られる値には64bitになっています。
ということで吉里吉里を100年つけっぱなしでも特に問題ないようです。

続きを閉じる▲

タグ : 吉里吉里TJS

カテゴリ : TJS

tjsで循環参照とか

tjsのガベコレは単純な参照カウント方式です。
循環参照があるとメモリリークします。
詳細は参照カウント、循環参照などで検索してください。

tjsを使っていると結構簡単に起きます。
吉里吉里製のゲームをずっと起動していると使用メモリがどんどん増えていったりします。

例えば以下の短いコードでもメモリリークします。
class C {
  var t = new Timer(this);
}
for (var i = 0; i < 10000; ++i)
  var obj = new C();
クラスCとTimerの間で循環参照しているためです。
Cをnewしたら明示的にinvalidateしなければなりません。

タグ : 吉里吉里TJS

カテゴリ : 雑記

隠れ機能メモSystem.exitOnNoWindowStartup

吉里吉里ドキュメントには載っていませんがSystem.exitOnNoWindowStartupというプロパティがあります。
trueのとき、最初のスクリプト実行中にWindowが生成されなければそのまま終了します。
falseのときは終了せずプロセスに残ります。
デフォルトではtrueです。

これまで使ったこともなく、これからも使いそうにありません。
System.exitOnWindowCloseにちょっと似てます。

カテゴリ : 吉里吉里

tjsで名前空間を使うメモ

Scripts.execStorageのコンテキスト指定によって名前空間らしきものが使えます。
コンテキスト指定ができるのは開発版のみです
参考:吉里吉里安定版と開発版の違いメモ

以下サンプル。startup.tjs, a.tjs, b.tjsの3つにわかれています。
// startup.tjs
Plugins.link("ScriptsEx.dll"); // Scripts.getObjectContextを使う
class Namespace {} // ネームスペースとして使うクラス

Scripts.execStorage("a.tjs",,Namespace);
Scripts.execStorage("b.tjs",,Namespace);

Debug.message("new Namespace.A()");
var a = new Namespace.A();

Debug.message("new Namespace.B()");
var b = new Namespace.B();

Debug.message('a instanceof "Namespace.A" == ' + (a instanceof "Namespace.A"));
Debug.message('a instanceof "A" == ' + (a instanceof "A"));
Debug.message('Scripts.getClassNames(a).join(", ") == ' + Scripts.getClassNames(a).join(", "));
Debug.message('Scripts.getClassNames(b).join(", ") == ' + Scripts.getClassNames(b).join(", "));

// a.tjs
if (Scripts.getObjectContext(this) != Namespace) { throw new Exception(); }
class A {
  function A() { Debug.message("A()"); }
}

// b.tjs
if (Scripts.getObjectContext(this) != Namespace) { throw new Exception(); }
class B extends Namespace.A {
  function B() { super.A(); Debug.message("B()"); }
}

コンテキストにNamespaceを指定しているので、AとBはNamespaceの中で定義されます。

a.tjsとb.tjsではScripts.getObjectContextを使ってNamespaceコンテキストで呼ばれているかチェックしています。
ミスがないようにチェックしているだけなので無くても動きます。

あとはNamespace.AやNamespace.Bで使えます。
ただしinstanceofでは"Namespace.A"ではなく"A"となります。
少し面倒なのでinstanceofの代わりに適当な関数を作ってもいいかもしれません。

このスクリプトを実行すると、Debug.messageの出力は以下のようになります。
new Namespace.A()
A()
new Namespace.B()
A()
B()
a instanceof "Namespace.A" == 0
a instanceof "A" == 1
Scripts.getClassNames(a).join(", ") == A
Scripts.getClassNames(b).join(", ") == B, A

実際はこんなことをせずにNamespace_Aのようなクラス名にしてしまうのがいいと思います。

続きを閉じる▲

タグ : 吉里吉里TJS

カテゴリ : TJS

KAGEXの表情欄についてメモ

KAGEXでは、メッセージレイヤに対して表情欄を指定できます。
その欄には名前欄に指定されたキャラクタの立ち絵が表示されます。

実際に表情欄と名前欄を使用しているサンプルです。
http://www.biscrat.com/krkr/files/face_sample.zip
サンプルを見て以下の説明を読むと大体わかると思います。


表情欄を使用するには以下の4つのことが必要です。
1.envinit.tjs で characters を定義
2.envinit.tjs の positions で出, 立, 顔, 消, 無を定義
3.envinit.tjs で faceLevelName を定義
4.[position]タグで表情欄の位置を指定


1.envinit.tjs で characters を定義
まずは立ち絵が表示できる状態にしてください。説明は省きます。
ブログ内のKAGEX講座などを参考にしてください。


2.envinit.tjs の positions で出, 立, 顔, 消, 無を定義
サンプルに入ってるenvinit.tjsのpositionsをコピペして使います。
出, 立, 顔, 消, 無のコマンドを使って、立ち絵と表情欄の表示/非表示の状態を切り替えます。
立ち絵の表示/非表示はshow/hideコマンドを使っても変更できますが、こちらのコマンドを使う方が便利です。

出:立ち絵を表示します。このキャラクタを表情欄に表示するようになります。
立:立ち絵を表示します。このキャラクタを表情欄に表示しなくなります。
顔:立ち絵を非表示にします。このキャラクタを表情欄に表示するようになります。
消:立ち絵を非表示にします。このキャラクタを表情欄に表示しなくなります。
無:立ち絵を非表示にします。このキャラクタを表情欄に表示しなくなります。

消と無の違いについては説明しません。消を使っていれば問題ありません。
; "出"なので立ち絵が表示される。
@しおり 通常 夏制服  
; "しおり"が名前欄に指定されているので表情欄にしおりの画像が表示される
【しおり】「しおりのセリフ」

; 名前欄が指定されていないので表情欄にも表示されません
地の文。

; "しおり"が名前欄に指定されているので、ここでも表情欄にしおりの画像が表示される
【しおり】「しおりのセリフ2」

; 立ち絵は表示されたままだが、表情欄には表示されない
@しおり 
【しおり】「しおりのセリフ3」

; 立ち絵は非表示、表情欄にのみ表示
@しおり 
【しおり】「しおりのセリフ4」


3.envinit.tjs で faceLevelName を定義
立ち絵の表示レベルについてまだ説明していないため、いい加減な説明だけします。
何のことかわからなければサンプルのfaceLevelNameの行をコピペすればいいです。
これがないと表情欄には何も表示されません。

前提として、立ち絵定義の image, faceImage について現在の表示レベルに合わせて"LEVEL"の部分が置換され、立ち絵として表示される画像のファイル名が決まります。
立ち絵ではなく表情欄の画像の場合、"LEVEL"はfaceLevelNameの定義と置換されます。
これによって表情欄用の特別な画像を使うこともできます。


4.[position]タグで表情欄の位置を指定
[position]タグではメッセージレイヤや名前欄の位置、サイズなどを指定できます。
これに加えて、表情欄の位置とサイズも指定できます。これにはfacewidth, faceheight, faceorigin, faceleft, facetopという5つの属性を使います。

まず facewidth と faceheight で表情欄のサイズを指定します。それぞれ幅と高さです。
立ち絵の画像が読み込まれ、このサイズの領域に表示されます。

以下の例では赤色の枠が立ち絵画像のサイズで、黄色の枠が表情欄のサイズになっています。
表情欄に表示されるのは黄色の枠の内側のみです。
このように、表情欄が画像のサイズより小さい場合は左上部分が切り取られて表示されます。
face_sample_1.jpg

次に、 faceorigin で表情欄の表示原点を指定します。0~8の数値が指定できます。
表示原点は表情欄上の座標です。次に説明する faceleft と facetop との関係で表情欄の位置を決定します。

0~8でそれぞれ以下の画像の位置になります。
0が表情欄左上、1が表情欄上中央、・・・・・・と時計回りに回って、最後の8が表情欄中央となります。
face_sample_2.jpg


最後に、 faceleft と facetop で表情欄の位置を指定します。
メッセージレイヤ左上からの距離を指定します。
ここで指定した位置が、先ほど faceorigin で指定した表示原点の位置となります。

下記の画像は"faceorigin=5"のときの例です。
face_sample_3.jpg

faceleft と facetop は同じでも "faceorigin=7"とすれば以下のようになります。
face_sample_3.jpg

続きを閉じる▲

タグ : 吉里吉里KAGEX講座

カテゴリ : KAGEX

吉里吉里でwindows8対応する話

タイトルは釣りです。吉里吉里は開発版を使いましょう、という話です。

少しでもWindows8を意識するなら安定版(version 2.32 revision 2)を使ってはいけません。
安定版はWindows8が出る前の古すぎるバージョンなので修正されていないバグなどがあります。

最新開発版の吉里吉里はsvnリポジトリからダウンロードできます。
吉里吉里本体(krkr.eXe)なら以下のURLから簡単にダウンロードできます。
https://sv.kikyou.info/svn/kirikiri2/trunk/kirikiri2/bin/win32/

開発版を使う場合はwuvorbis.dllやkrmovie.dllなどのdllも本体に合わせたバージョンを使いましょう。
先ほどのURLからダウンロードできるものを使えばOKです。
「plugin/」の中に入っているものもありますので必要なものをダウンロードしておきましょう。

逆に安定版を使っている場合はリポジトリからダウンロードしても使えない場合があります。
最新のdllプラグインや吉里吉里の機能が使えないのはとっても損ですね。開発版を使いましょう。
好んで安定版を使う理由はありません。

なおKAGの[quake]のバグは現在の安定版/開発版どちらでも発生します。
こちらも待っていれば開発版では修正されるかもしれません。

◆関連記事
windows8でquakeを使うとバグるらしい
吉里吉里安定版と開発版の違いメモ

続きを閉じる▲

タグ : 吉里吉里

カテゴリ : 雑記

windows8でquakeを使うとバグるらしい


ということで試したら再現しました。
Window.setLayerPosを使うと画面外にはみでで表示残っちゃいます。
KAGでは[quake]させるとまずいようです。
KAGEXではsetLayerPosを使っていないので問題ありません。

続報→http://www.biscrat.com/blog/?p=11

// win8x64, フルスクリーンでWindow.setLayerPosを使うと画面外に表示が残るバグ例
// 吉里吉里 2.31.2012.1127

// 全面赤色のレイヤとウィンドウを表示
var win = new Window();
win.layer = new Layer(win, null);
win.layer.setSize(800600);
win.layer.fillRect(0,0,800,600,0xFFFF0000);
win.setInnerSize(800,600);
win.visible = true;
win.fullScreen = true;
// setLayerPosで適当にずらす
win.timer = new Timer(function {
  var p = System.getTickCount() % 100;
  win.setLayerPos(p, p);
}, "");
win.timer.enabled = true;

続きを閉じる▲

タグ : 吉里吉里KAGTJS

カテゴリ : 吉里吉里

吉里吉里の署名を一気に付けるメモ2

前回フォルダの中身を一気に署名付けるバッチファイルを作りましたが、微妙に不便なので改良しました。

@echo off
setlocal

if "%~1"=="" goto HELP

set PRIV="%~dp0秘密鍵.txt"
set SIGN="%~dp0krkrsign"

:REPEAT
  if exist "%~f1\" (
    for /R "%~f1" %%I in (*) do %SIGN% -sign "%%I" %PRIV%
  ) else if exist "%~f1" (
    %SIGN% -sign "%~f1" %PRIV%
  )

  if "%~2"=="" goto END
  shift
goto REPEAT

:HELP
  echo 署名を付けるファイルを指定してください。

:END
  endlocal
以上を「署名.bat」として保存しておきます。
同じフォルダには「krkrsign.exe」と、使用する秘密鍵を貼り付けた「秘密鍵.txt」も置いておきます。

あとはファイルを「署名.bat」にドラッグ&ドロップすればすべて署名されます。
フォルダをドロップすれば中身が全て署名されます。
複数ファイルを一気にドロップできるのでなかなか使いやすくなりました。

続きを閉じる▲

タグ : 吉里吉里

カテゴリ : 雑記

C83 冬コミ情報

もうすぐ冬コミ始まるところですが、例によって何本かお手伝いしているゲームが頒布されます。
私個人は一般参加なので3日目同人ソフトや企業ブースのあたりをふらふらしている予定です。

エロトランス様、白黒催眠(3日目東オ-18a)
催眠、MC(マインドコントロール)系の男性向け18禁エロゲ。
幼馴染みの女の子またはお姉ちゃんに催眠術をかけて性的なイタズラができます。
絵も声もかわいい。そしてとってもエロいです。催眠術すごい。夢があります。
また新たなジャンルに目覚めてしまいました。

シナリオは普段から催眠音声などを書いている方らしく本格的っぽいです。
知識ないので何とも言えませんが色々あるようですね。
ブログで体験版も上がっているので要チェック。

システムはまあ普通です。特別には何もありませんが必要な機能はついています。


granat様、すり替えられた果実の破片(3日目東U-02b)

幽明心理ADV。15歳以上向け。ループ物。"海の街"の三日間から抜け出します。
システム提供のみで全体の内容をまだちゃんと把握しておらずコメントしづらいのですが。
とにかく分岐分岐分岐。
最初に仕様もらってちょっと笑いました。これどうやってクリアするの?
今はそこから仕様削ってとても簡単になっていますが、それでも非常に難しいです。
granatさんのゲームは同人ノベルで一番難しいなんて言われてましたがまさにですね。

前回の夏コミで出した体験版もダウンロードできるので是非。
一周目のみでまだ難しいも何もないのですが、シナリオには興味もってもらえると思います。おもしろいです。

システムはミチユキ画面など地味に面倒なことをやっているのですがここでは省略。
機会があれば紹介するかも?


とらいあんぐる!様、Triagain(3日目東T-55a)

男性向け18禁純愛ノベル。ボーイミーツガール。3キャラ攻略可。
かわいく綺麗にまとまってます。
絵、音、シナリオとも高品質に仕上がっていると思います。
強い癖もないので安心して遊べるのではないでしょうか。
まずは体験版をどうぞ。

今回はトラブルが発生したようで修羅場ってましたね。
間に合わないんじゃ無いかと思いきや一気呵成に完成しました。

システムはいつも通り、それなりに便利だと思います。
このくらい完成度上がってくるともう一歩付けたい機能もあるのですがそこまで手が及ばず。
とりあえず任意点ジャンプは早急に対応ですなー。
クイックジャンプ、バックジャンプなど名前は定まっていないようですが、あるのに慣れてしまって無いシステムが気になるように。



3作品とも全く別方向なようですがそれぞれ面白いです。
コミケ参戦される方はぜひスペースの方に寄ってみてください。
よろしくお願いします。

続きを閉じる▲

カテゴリ : 告知

吉里吉里の署名を一気に付けるメモ

キー・署名ツールを使うとxp3ファイルやdllファイルなどに署名を付けられます。
ファイル破損チェックツールを使うには必須ですが、ファイルが増えると署名を付けるのも面倒なので一気につける方法です。

今回はWindowsのバッチファイルを利用します。



krkrsign.exeがあるのと同じフォルダに、『署名.bat』を新規作成し、テキストエディタで開きます。
開いたら以下の一行をコピペして保存しておきます。
for /R %1 %%I in (*.exe, *.xp3, *.dll, *.tpm) do %~dp0krkrsign -sign "%%I" %~dp0"秘密鍵.txt"

次にkrkrsign.exeを通常通り起動して、公開鍵と秘密鍵を生成します。
生成された秘密鍵の方をコピーして『秘密鍵.txt』を新規作成、コピーした鍵の内容を貼り付けて保存しておきます。
この『秘密鍵.txt』は『署名.bat』と同じフォルダにおいておきます。

あとは署名を付けたいファイルが入ったフォルダを『署名.bat』にドラッグ&ドロップするだけです。
『秘密鍵.txt』に書かれた秘密鍵を利用して、ドロップされたフォルダ内のファイルに署名が付けられます。
ただし、署名が付けられるのは拡張子がexe, xp3, dll, tpmのファイルのみになります。



ファイルが破損することは滅多にありませんが、皆無ではなくたまにあります。
インストールしたのに動かない、というときには必要になるので、ファイル破損チェックツールと署名はしっかりゲームに同梱しておくことをオススメします。

続きを閉じる▲

タグ : 吉里吉里

カテゴリ : 雑記

MysticThumbs用TLGプラグイン

ダウンロード
MysticThumbsを使って吉里吉里のTLG画像をサムネイル表示出来るようになるプラグインです。

ソースコードはgithubでも公開しています。
https://github.com/sakano/MysticThumbsTlgPlugin

MysticThumbsを使うとエクスプローラ上でPhotoshopやIllustratorその他いろいろなファイルがサムネイル表示出来るようになります。
このプラグインを入れればtlgも表示出来るようになります。

↓エクスプローラでサムネが見れます。便利
MysticThumbsSample.jpg


MysticThumbs自体は有料で25ドルほどかかりますが、それだけの価値はあるかと思います。


プラグイン自体はphotoshopプラグインサンプルに入っている、libtlgを使ってtlg読み込んで表示しているだけです。
簡単にtlg読み書きできるので、そこらへん必要な人にはlibtlgもおすすめです。

続きを閉じる▲

タグ : 吉里吉里プラグイン

カテゴリ : プラグイン配布

System.getKeyStateの隠れ機能メモ

System.getKeyStateにはリファレンスで省略されている第二引数があります。


System.getKeyState(code, getcurrent=true)
code:状態を取得する仮想キーコード
getcurrent:現在の状態を取得するか

第二引数を省略するか、trueのときはSystem.getKeyStateを呼び出した瞬間にキーが押されていればtrue、押されていなければfalseが返ります。
第二引数をfalseにすると、前回同じキーコードでSystem.getKeyStateを呼び出したときから、今回の呼び出しまでの間に1度でもキーが押されていればtrueになります。


そんなに使うことはないと思っていたのですがContinuouseHandlerでキー取得するには必須でした。
class KeyPolling
{
  function KeyPolling()
  {
    System.addContinuousHandler(onContinuousHandler);
  }
  
  function finalize()
  {
    System.removeContinuousHandler(onContinuousHandler);
  }
  
  function onContinuousHandler(tick)
  {
    if (System.getKeyState(VK_MEDIA_STOP)) {
      Debug.message("停止");
    } else if (System.getKeyState(VK_MEDIA_PLAY_PAUSE)) {
      Debug.message("再開/一時停止");
    } else if (System.getKeyState(VK_MEDIA_NEXT_TRACK)) {
      Debug.message("次のトラックへ");
    } else if (System.getKeyState(VK_MEDIA_PREV_TRACK)) {
      Debug.message("前のトラックへ");
    }
  }
}

var keyPollingObject = new KeyPolling();
マルチメディアキーに対応するメモの続きになりますが、マルチメディアキーはウィンドウがアクティブでなくても反応して欲しいのでWindow.onKeyDownやLayer.onKeyDownは使えません。
Timerを使ってSystem.getKeyStateでも構いませんがここではContinuousHandlerを使っています。

この場合、onContinuousHandlerが呼ばれる合間にだけ一瞬キーを押して離すとメッセージが出力されません。
60fpsだとすれば16ミリ秒程度の短い合間なのですが、実際やってみるとたまにキー入力を無視されていらっとします。
低スペックPCだったり、コマンドライン引数でfps制限をかけたりするとさらに合間が長くなってまずいです。

逆にキーが押しっぱなしになっている場合、押している間ずっとメッセージが出力されてしまいます。
一度押されるごとに一度だけ出力したいです。


これらを解決するために第二引数を使います。
class KeyPolling
{
  function KeyPolling()
  {
    System.addContinuousHandler(onContinuousHandler);
    System.getKeyState(VK_MEDIA_STOP, false);
    System.getKeyState(VK_MEDIA_PLAY_PAUSE, false);
    System.getKeyState(VK_MEDIA_NEXT_TRACK, false);
    System.getKeyState(VK_MEDIA_PREV_TRACK, false);
  }
  
  function finalize()
  {
    System.removeContinuousHandler(onContinuousHandler);
  }
  
  function onContinuousHandler(tick)
  {
    if (System.getKeyState(VK_MEDIA_STOP, false)) {
      Debug.message("停止");
    } else if (System.getKeyState(VK_MEDIA_PLAY_PAUSE, false)) {
      Debug.message("再開/一時停止");
    } else if (System.getKeyState(VK_MEDIA_NEXT_TRACK, false)) {
      Debug.message("次のトラックへ");
    } else if (System.getKeyState(VK_MEDIA_PREV_TRACK, false)) {
      Debug.message("前のトラックへ");
    }
  }
}

var keyPollingObject = new KeyPolling();
onContinuousHandlerが呼び出される前にコンストラクタでSystem.getKeyStateを呼び出しているのに注意してください。
これを忘れると、最初のonContnuousHandlerでkeyPollingがnewされる前のキー入力を拾ってしまいます。

このようにすればキーが一度押されるごとに一度だけメッセージが出力されるようになります。

続きを閉じる▲

タグ : 吉里吉里TJS

カテゴリ : 吉里吉里

マルチメディアキーに対応するメモ

再生、次のトラック、前のトラックなどのボタンがついているキーボードがありますが、それらのボタンも吉里吉里で扱えます。

ただし仮想キーコードが定義されていないようなので、自分で定義しておきます。
以下をoverride.tjsにでも書いておくだけで十分です。
const
  VK_BROWSER_BACK = 166,        // 戻る
  VK_BROWSER_FORWARD = 167,     // 進む
  VK_BROWSER_REFRESH = 168,     // 更新
  VK_BROWSER_STOP = 169,        // 中止
  VK_BROWSER_SEARCH = 170,      // 検索
  VK_BROWSER_FAVORITES = 171,   // お気に入り
  VK_BROWSER_HOME = 172,        // ホーム
  VK_VOLUME_MUTE = 173,         // 音量ミュート
  VK_VOLUME_DOWN = 174,         // 音量ダウン
  VK_VOLUME_UP = 175,           // 音量アップ
  VK_MEDIA_NEXT_TRACK = 176,    // 次のメディア
  VK_MEDIA_PREV_TRACK = 177,    // 前のメディア
  VK_MEDIA_STOP = 178,          // メディア停止
  VK_MEDIA_PLAY_PAUSE = 179,    // メディア再開/一時停止
  VK_LAUNCH_MAIL = 180,         // メール起動
  VK_LAUNCH_MEDIA_SELECT = 181// メディア選択
  VK_LAUNCH_APP1 = 182,         // アプリケーション1起動
  VK_LAUNCH_APP2 = 183          // アプリケーション2起動
  ;

あとは他のキーと同じようにonKeyDownやgetKeyStateなどで扱えます。
BGM鑑賞などで、次/前のメディア、メディア停止、再開あたりは対応しておくと便利かもしれません。

ちなみにconstというのはvarと全く同じです。
定数になってくれると嬉しいのですが残念ながらただの変数になります。

続きを閉じる▲

タグ : 吉里吉里TJS

カテゴリ : 吉里吉里

吉里吉里を簡単に再起動する方法

吉里吉里/KAGでゲームを作っていると、本体を再起動する必要が結構あったりします。
いちいち既に起動している吉里吉里を終了して、起動しなおすのは面倒です。
windowsのバッチファイルを使って簡単に再起動できるようにしてみます。

参考:Windows でアプリケーションを再起動するバッチ処理 - タスクの強制終了、タスクリスト、エラーレベルによる条件分岐
バッチファイルの内容は参考リンクそのままです。

バッチファイルというのは拡張子が.batのファイルで、windowsのコマンドを自動実行することができます。
今回は吉里吉里本体の再起動するためにコマンドを使います。


吉里吉里本体(krkr.exe)とKAGのプロジェクトフォルダ(dataフォルダ)は同じフォルダにあることが前提です。
そのフォルダに新しく「再起動.bat」ファイルを作成して、テキストエディタで開いて以下のコマンドを書きます。
@echo off

tasklist | findstr "krkr.exe"

if errorlevel 1 goto START
if errorlevel 0 taskkill /f /im "krkr.exe"

:START
start "" "krkr.exe"
保存して、「再起動.bat」を実行すれば吉里吉里が再起動されます。
テキストエディタのマクロやショートカットなどに登録しておくと便利かと思います。

簡単に解説すると、「tasklist | findstr "krkr.exe"」でkrkr.exeが起動しているか調べています。
「if errorlevel 1 goto START」では、起動していない場合に「:START」の行までジャンプします。
「if errorlevel 0 taskkill /f /im "krkr.exe"」で、起動していた場合にkrkr.exeを強制終了します。
最後の「start "" "krkr.exe"」でkrkr.exeを起動しています。

もし「krkr.exe」の名前を「ゲーム名.exe」と変更しているのであれば、3つある"krkr.exe"を全て"ゲーム名.exe"」と書き換えます。

また、プロジェクトフォルダについてです。
吉里吉里本体と同じフォルダに"data"フォルダがあれば、自動的にプロジェクトフォルダとして読み込まれます。
ない場合は「フォルダ/アーカイブの選択」ウィンドウが出てきてめんどくさいです。
プロジェクトフォルダは"data"フォルダとして置いておくのを推奨しますが、何らかの信念があって他の場所にプロジェクトフォルダを起きたい場合、バッチファイルでそのプロジェクトフォルダを指定できます。
例えばプロジェクトフォルダが「C:\krkr\project」フォルダなら、最後の「start」のコマンドが「start "" "krkr.exe" "C:\krkr/project"」のようになります。


解説はここまで。残りは再起動について補足なので上記のバッチファイル使うだけなら読まなくても大丈夫。

先の方法だとtaskkillで強制終了しているのでセーブデータが書き出されなかったりして問題あったりします。
実際は開発中ならそれほど困らないと思います。

/fをはずすと通常の終了になりますが、終了確認ダイアログがでてきて嬉しくありません。
正しく動作させるならKAGに手を入れて確認ダイアログを飛ばすようにするといいかもしれないですね。
それなら通常終了でセーブも大丈夫な気がします。

もっと頑張るなら再起動時のみ確認ダイアログ省略するように?
既存のmessenger.dllあたり使うと比較的簡単にできそうです。
通信させる必要があるのでちょっと面倒ですが。

普段はデバッグモードで起動させておいて、デバッグモード時のみダイアログ飛ばすようにする、くらいがちょうど良さそうです。


そもそも開発中に再起動する事自体が無駄なので、そこから何とかしたいですね。
現状のKAGEX/KAGEZレベルでも再起動が必要になる場面はほとんどありません。

続きを閉じる▲

タグ : 吉里吉里KAG

カテゴリ : KAG

最新記事
カテゴリ

openclose

記事一覧
Twitter