吉里吉里用のVisual Studio Codeプラグインを作った

Visual Studio Code用の拡張機能を作りました。
TJS用とKAG/KAGEX用があります。

TJS : プラグイン 説明書
KAG/KAGEX : プラグイン 説明書

今のところ以下の機能が使えます。

1.シンタックスハイライト

tjsのソースコードやタグを色分け表示できます。

2.定義へジャンプ・定義をここに表示

クラス、関数、変数やマクロの定義などにジャンプできます。
この機能を使うにはctagsとctagsxを入れる必要があります。詳しくは説明書を見てください。

※colorRectの定義を表示しているところ

3.リファレンスパレット

クラス名やタグ名からリファレンスを検索できます。

4.スニペット

forやfunctionなどのスニペットが使えます。

inno setupでデータを分ける方法

inno setupを使うと簡単にインストーラが作れます。詳しい説明は以下のページを参照してください。
吉里吉里/KAGゲームのインストーラの作り方(Windows 7対応)
今回の記事はこのページの説明を前提としています。

Flags: external

「おわりに」の部分に

同人レベルだったら、できればゲームファイルは纏めずにそのままCD-ROM上に配置して おけた方が、「最後の手段で手でコピーする」というのが使えてハッピーだと 思うが、まぁうん…そのくらいはいいか。

という記述がありますがinno setupでもファイルを纏めずにインストーラと別々にできます。KAICHOさんが知らなかったのか説明を省いたのか分かりませんが、特に理由がない限り別々にした方がいいです。

setup.exeのサイズが大きければ大きいほどインストーラの起動時間が長くなります。ひどい例だとsetup.exeをダブルクリックしてから一分待たないとインストール画面が出てこないこともあるようです。理由はsetup.exeにセキュリティソフトのウィルススキャンが入ったりするためです。他にもwindows側でも何かやっていた気がしますが詳細は忘れました。誰か知ってたら教えてください・・・・・・。

setup.exeとゲームデータを分ける方法はこのページに日本語で書いてあります。

前提の記事では[Files]が以下のようになっています。

[Files]
Source: "D:\同人ゲーム\我輩ゲーム\我輩ゲーム.eXe"; DestDir: "{app}";
Source: "D:\同人ゲーム\我輩ゲーム\data.xp3"; DestDir: "{app}";
Source: "D:\同人ゲーム\我輩ゲーム\plugin\*"; DestDir: "{app}\plugin";
Source: "D:\同人ゲーム\我輩ゲーム\savedata\*"; DestDir: "{app}\savedata";
Source: "D:\同人ゲーム\我輩ゲーム\readme.txt"; DestDir: "{app}";

これを例えば以下のようにします。Flags: external; を付けるのと、ファイルの場所を{src}を使ってsetup.exeからの相対パスで指定するのがポイントです。

[Files]
Source: "{src}\data\我輩ゲーム.eXe"; DestDir: "{app}"; Flags: external;
Source: "{src}\data\data.xp3"; DestDir: "{app}"; Flags: external;
Source: "{src}\data\我輩ゲーム\plugin\*"; DestDir: "{app}\plugin"; Flags: external;
Source: "{src}\data\我輩ゲーム\savedata\*"; DestDir: "{app}\savedata"; Flags: external;
Source: "{src}\data\我輩ゲーム\readme.txt"; DestDir: "{app}"; Flags: external;

この例の場合は、setup.exeと同じフォルダにdataフォルダを作り、その中に我輩ゲーム.eXeなどを入れておけばいいです。インストール時にはそれらのファイルがインストール先フォルダにコピーされます。

この記事で言いたいことはここまでです。以下はお好みでどうぞ。

AppId

[Setup]でAppIdを指定した方がいいかもしれません。アプリケーションごとの固有のIDを指定します。デフォルトではAppNameと同じになっています。ゲーム名だけでは他と被る可能性が0ではありません。どこかに表示されたりはしないので適当に被らなそうな物を指定しましょう。ホームページがあればそのURLを使うのがいいです。
例えば以下のようにすると良いと思います。http://www.biscrat.com/の部分は自分のサイトのURLを使ってください。
AppId=http://www.biscrat.com/我輩ゲーム/

AllowRootDirectory

デフォルトの状態ではC:\やD:\にはインストールできないようになっています。[Setup]にAllowRootDirectory=yesという行を書いておくとできるようになります。

AllowNoIcons

[Setup]でAllowNoIcons=yesとすると、インストーラの中で「プログラムグループを作成しない」というチェックボックスが出てくるようになります。このチェックボックスにチェックを入れるとスタートメニューにショートカットが作られません。つまり、[Icons]のなかで{group}から始まるショートカットが無視されます。

デスクトップのショートカット

少し手間がかかりますが、デスクトップのショートカットの有無も選べるようにできます。

まず以下を追加します。これでインストーラの中で「デスクトップにショートカットを作成」というチェックボックスが出てくるようになります。

[Tasks]
Name: DesktopShortcut; Description: デスクトップにショートカットを作成;

さらに、[Tasks]の中のデスクトップにショートカットを作る行にはTasks: DesktopShortcut;を付けます。前提の記事の例では、以下のようになっている行です。

Name: "{commondesktop}\我輩ゲーム"; Filename: "{app}\我輩ゲーム.eXe";

これを以下に変更します。

Name: "{commondesktop}\我輩ゲーム"; Filename: "{app}\我輩ゲーム.eXe"; Tasks: DesktopShortcut; 

UninstallDelete

アンインストール時にはインストール時にコピーしたファイルのみが削除されます。よってゲーム起動後に新規作成されたセーブデータや吉里吉里設定ツールが作成するcfuファイルなどが削除されません。アンインストール時にそれらも削除するには[UninstallDelete]で削除するファイルを登録しなければなりません。

以下はセーブデータの保存先を %APPDATA%我輩ゲーム とした場合の例です。

[UninstallDelete]
Name: {commonappdata}\我輩ゲーム\krkr.console.log; Type: files;
Name: {commonappdata}\我輩ゲーム\krenvprf.kep; Type: files;
Name: {commonappdata}\我輩ゲーム\savecheck; Type: files;
Name: {commonappdata}\我輩ゲーム\*.bmp; Type: files;
Name: {commonappdata}\我輩ゲーム\*.ksd; Type: files;
Name: {commonappdata}\我輩ゲーム\*.kdt; Type: files;     
Name: {commonappdata}\我輩ゲーム\我輩ゲーム.cfu; Type: files;
Name: {commonappdata}\我輩ゲーム; Type: dirifempty;
Name: {userappdata}\我輩ゲーム\krkr.console.log; Type: files;
Name: {userappdata}\我輩ゲーム\krenvprf.kep; Type: files;
Name: {userappdata}\我輩ゲーム\savecheck; Type: files;
Name: {userappdata}\我輩ゲーム\*.bmp; Type: files;
Name: {userappdata}\我輩ゲーム\*.ksd; Type: files;
Name: {userappdata}\我輩ゲーム\*.kdt; Type: files;               
Name: {userappdata}\我輩ゲーム\我輩ゲーム.cfu; Type: files;
Name: {userappdata}\我輩ゲーム; Type: dirifempty;
Name: {app}\我輩ゲーム.cfu; Type: files; 

これでも削除されないファイルを見つけたら教えてください。