2016年2月23日火曜日

サクラエディタをHSPエディタに改造する(その3 実行ボタン)

たてつづけにセルディアです。

前々回、前回と続いて、サクラエディタのHSP用設定改造です。

ボタン1つでコンパイルする


たいていの開発環境なら、ソースコードをつらつらと書いた後、F5かF9辺りを押せば一発でデバッグを開始できます。HSPの場合は適当なテキストエディタで書くと、コンパイルする際は若干の手間がかかるのですが、ここをサクラエディタの機能で一発でデバッグできるようにしましょう。

今回は、F5キーで編集中のHSPファイルのデバッグを実行するようにします。
(編集中のファイルは全て上書き保存されます)

(1) コンパイラ実行ファイルをダウンロードする

今回はHongKongさんのコンパイラ実行ファイルを利用します。
https://dev.onionsoft.net/seed/info.ax?id=134

ダウンロードしたら、中にある「hcl_comp.exe」を、HSPのインストールフォルダ(hsed3.exeが置いてあるフォルダ、標準では「C:\hsp34\」)に入れましょう。

(2) コンパイル用マクロを作成する

前回と同様、PPAマクロファイルを作成します。

---------------------------hsp.ppa ---------------------------
S_FileSaveAll();
Exec('C:\hsp34\hcl_comp.exe', S_GetFilename(), 0);
---------------------------ここまで---------------------------
(HSPインストールフォルダが違う場合は、ディレクトリを書き換えてください)

前回設定したマクロ一覧フォルダに保存します(下記)。

「共通設定」マクロタブ


(3) 作成したマクロを登録する

おなじみの手順です。

「共通設定」マクロタブ
① 適当にマクロ番号を選択する(今回は1番を選択)
② 名前に「HSP実行」、Fileに先ほど作成したファイル名(hsp.ppa)を入力する
③ 設定ボタンを押して反映する


(5) キーに割り当てる

これもおなじみの手順です。
今回は「F5」に割り当てます。

① 「キー割り当て」タブに移動する
② 「F5」を選択する


③ 種別から「外部マクロ」を選択する
④ 「タグファイル作成」を選択する
⑤ 「割付」ボタンを押す


以上で手順は完了です。

ちなみに、コンパイル時にエラーが発生したときは、画面に赤文字でエラー内容が表示されます。スペースキーでページ送りもできるので、エラー内容を把握しましょう。


想定より長くかかってしまいましたが、これで予定していた機能は終了です。

目標達成



無事、以下の機能を実装できました。
  • HSPのキーワードに色を付ける
  • 単語をダブルクリックすると同じ単語にハイライトをつける
    (F12で次を検索、Shift + F12で前に戻る)
  • 新規命令・関数、ラベルのリストを表示する
    (記述順に一覧表示、クリックするとジャンプ。コメント機能付き)
  • 新規命令・関数、ラベルの定義場所にジャンプする
    (Ctrl + F12でタグファイル作成、F12でジャンプ。Shift + F12で前に戻る)
    ※ 補完機能のおまけつき Ctrl + Space
  • ボタン1つでコンパイル&実行する
    (F5で実行、オートセーブ)
少しはHSPに特化して便利になったでしょうか。それでは、よいHSPライフを。

2016年2月22日月曜日

サクラエディタをHSPエディタに改造する(その2 ラベルなど一覧+タグジャンプ)

お待たせしました、セルディアです。

前回のサクラエディタHSP改造の続きです。

ラベル・命令・関数一覧を表示する


ソースコード内にあるラベル、命令や関数の一覧を表示できます。
また、そのラベルなどの名前をクリックすると、その行にスクロールしてカーソルを合わせてくれます。

(1) 以下の内容のルールファイルを適当なディレクトリに作成する

--------------------------HSP_temp.DL------------------------
;CommentChar=
#deffunc /// function
#defcfunc /// function
#modfunc /// function
#modcfunc /// function
*/ /// Except
* /// function
;comment /// function
---------------------------ここまで---------------------------

(今回はファイル名を「HSP_temp.DL」、ディレクトリを「C:\Program Files (x86)\sakura\keyword\」に作っています)

(2) 上のツールバーから「設定」→「タイプ別設定一覧」を選ぶ


(3) 前回の手順で作った「HSP」を選択し、「設定変更」を押す


(4) アウトライン解析方法から「ルールファイル」を選択し、(1)で作成したルールファイルを指定する。
  OKを押す


以上で手順は完了です。

ラベルなど一覧は、下の図のところをクリックするか、F11で出せます。


私の場合、こんなふうに右側にラベルなど一覧を出しています。
一覧中のラベルなどをクリックすると、その部分にジャンプできます。


さらに、ラベルなど一覧はファイルに記述されている順に表示されるのですが、一覧をさらにわかりやすくするために、コメント行を表示できるようにしました。
頭に「;comment」と付けた行が、ラベルなど一覧にも表示されます。
(完全に自分用機能なので、いらなければ無視してください…)



複数ファイルでもラベル・命令・関数の行に飛ぶ


プログラムの規模が大きくなってくると、処理に合わせて複数のファイルにプログラムを分けて記述する必要が出てくるかと思います。
その場合、上記のラベルなど一覧表示では、編集中のファイルの一覧しか出せないため、もっと便利にするために、簡単にラベルなどが定義されている場所に飛べるようにしましょう。

今回の手順で、ラベルなどにカーソルを合わせてF12キーを押すと、そのラベルなどが定義されている場所へジャンプできるようになります。同じディレクトリに置かれている他のHSPファイルにもジャンプすることができます。
Shift + F12キーでは、ジャンプする前の位置へ戻ることができます。

ただ、ラベルなどの定義場所にジャンプするためには、タグファイルが必要です。今回はタグファイルの作成キーをCtrl + F12キーに割り当てます。ソースコードを保存後、適宜タグファイルを作成する必要があります。

おまけで、サクラエディタの補完入力も使えるようにします。ラベル名などを入力中に、途中まで入力したところで補完入力キー(Ctrl + スペースキー)を押すと、残りの文字を自動で入力してくれます。複数候補がある場合は、一覧が出て十字キーなどで選択できます。

(1) PPAマクロを動かすためのDLLをダウンロードする

PPAのDLL配布サイト
http://ht-deko.com/junkbox.html#PPA

(サクラエディタのインストール場所に入れます。標準(64bit OS)の場合「C:\Program Files (x86)\sakura」フォルダ内です)

(2) ctagsをダウンロードする

CTAGS日本語対応版
http://hp.vector.co.jp/authors/VA025040/ctags/ctags_j.html

(サクラエディタのインストール場所「C:\Program Files (x86)\sakura」フォルダ内に置いた前提で進めます)

(3) 補完入力用の実行ファイルをダウンロードする

https://sites.google.com/site/seldiacotton/file/hokan.zip

(ctagsと同様、サクラエディタのインストール場所「C:\Program Files (x86)\sakura」フォルダ内に置いた前提で進めます)

(4) 以下の内容のファイルを作成して、サクラエディタのマクロフォルダ内に保存する

--------------------------maketag.ppa------------------------
var
  fileName : String; // 編集中のファイル名
  charPos : Integer; // 探索位置
  lengthOfName : Integer; // ファイル名の長さ
  charInName : String; // 比較用の1文字
  result : Integer; // 比較結果
  appPath : String; // 起動パス
  lengthOfPath : Integer; // 起動パスの長さ
  backSlashPos : Integer; // バックスラッシュの位置
begin
  fileName := S_GetFileName();
  lengthOfName := Length(fileName);
  backSlashPos := 0;
  // 後方から'\\'を探す
  for charPos := lengthOfName downto 0 do
    begin
      charInName := Copy(fileName, charPos, 1);
      result := CompareStr(charInName,'\');
      if result = 0 then
        begin
          // 見つかったら位置を覚えて抜ける
          backSlashPos := charPos;
          Break;
        end;
    end;
  // 起動パスを生成して起動
  lengthOfPath := backSlashPos;
  appPath := Copy(fileName, 0, lengthOfPath);
  Exec('C:\Program Files (x86)\sakura\ctags.exe', '-f "' + appPath + 'tags" --langdef=hspd --langmap=hspd:.hsp --regex-hspd="/^[ \t]*(\#deffunc[ \t]+|\#module[ \t]+|\#define[ \t]+|\#const[ \t]+|\#enum[ \t]+|\#defcfunc[ \t]+|\#modfunc[ \t]+|\#modcfunc[ \t]+|\*[ \t]*|\;[ \t]*tag[ \t]*)(global[ \t]+)?([a-zA-Z0-9_]+)/\3/" --excmd=number ' + appPath + '*.hsp' , True);
  Exec('C:\Program Files (x86)\sakura\hokan.exe', appPath + 'tags' , True);
end;
---------------------------ここまで---------------------------

※注意 サクラエディタのインストール場所が標準と違う場合は、「C:\Program Files (x86)\sakura」と書かれている部分をインストール場所に合わせてください。
 特に32bit OSの場合は「C:\Program Files\sakura」になっているはずなので必須です!

(前回の手順中で、マクロフォルダの設定をしています)


(5) 作成したマクロを登録する

「共通設定」マクロタブ
① 適当にマクロ番号を選択する(今回は3番を選択)
② 名前に「タグファイル作成」、Fileに先ほど作成したファイル名(maketag.ppa)を入力する
③ 設定ボタンを押して反映する


(5) キーに割り当てる

今回は「Ctrl + F12」に割り当てます。

① 「キー割り当て」タブに移動する
② 「Ctrl」チェックを付ける
③ 「Ctrl+12」を選択する


④ 種別から「外部マクロ」を選択する
⑤ 「タグファイル作成」を選択する
⑥ 「割付」ボタンを押す


(6) 補完入力の設定を行う

これが少し厄介で、補完入力用のファイルは編集中のファイルと同じ場所に作成されるのですが、設定では相対ディレクトリで指定することができません。
そのため、プロジェクトごとに補完入力用ファイルを切り替えねばなりません。

「タイプ別設定」支援タブ

単語ファイルに次のように入力する
<編集中のHSPファイルのディレクトリ>\hokan.txt

HSPの場合は「英大文字小文字を同一視」にチェックを付けていいかと思います


以上で設定は完了です。

残りの目標はまた次回へ。

2016年2月17日水曜日

サクラエディタをHSPエディタに改造する(その1 キーワード協調+単語ハイライト)

やはー、セルディアです。

久しぶりに、HSPについてお話しします。

テキストエディタ戦争


HSPにはデフォルトでかなり使いやすいスクリプトエディタがついています。
どのくらい便利かというと、以下の点が非常に便利です。

  • 各標準命令に色がつく
  • 使っている命令のヘルプがボタン一つ(F1)で見られる
  • ボタン一つ(F5)で実行できる

しかし、他のテキストエディタに慣れてしまうと、これだけでは物足りなくなります。特に、Visual StudioでC++、C#に触れてしまうと、高級ソファからパイプ椅子に格下げされたようで贅沢病になります。あれは贅沢です、一度味わったら逃れられない悪魔の誘惑ですよ…とはいえ、あれくらいしないと大規模プロジェクトではやってられないでしょう。

今回は、サクラエディタを使って、少しでもあの便利機能に近づけます。

最終目標



  • HSPのキーワードに色を付ける
  • 単語をダブルクリックすると同じ単語にハイライトをつける
  • 新規命令・関数、ラベルのリストを表示する
  • 新規命令・関数、ラベルの定義場所にジャンプする
  • ボタン1つでコンパイル&実行する
とても若干便利になります。
(画面はHSP3のデモ用サンプルプログラムですよ)

サクラエディタ導入時の注意


サクラエディタを使いたいときは、インストーラ版を素直に実行したほうが手っ取り早いです。


コンポーネントもAllにして、「KeyWordファイル」もチェックを付けましょう。

HSPのキーワードに色を付ける


色がついているだけでも、かなり視認性がよくなります。

(1)「設定」→「タイプ別設定一覧」を選択する

(2)追加を押す


(3)「設定変更」を押す


(4)「スクリーン」タブから設定の名前に「HSP」、ファイル拡張子に「as,hsp」を入力する


(5)「カラー」タブを選択して「共通設定」を押す


(6)「セット追加」を押す


(7)「HSP」と入力して「OK」を押す


(8)「インポート」を押す


(9)サクラエディタのインストールフォルダの「keyword」フォルダ内に「HSP.KWD」があるので開く


(10)協調キーワードが表示されるので、OKを押す


(11)強調キーワード1から「HSP」を選択する
   ついでに以下の項目も入力しておく
   コメントスタイル ブロック型 「/*」 ~ 「*/」
   行型「//」
   行型「;」

   最後に「OK」を押す


これで、HSPファイルを開いたときに、自動的にHSPのキーワードが色付けされるようになります。

単語をダブルクリックすると同じ単語にハイライトを付ける


こちらも非常に便利です。変数をダブルクリックして、どこで使ってるか、処理の中で何を代入してどう参照してるか一瞬でわかったり、など…。

実は追加効果で、ダブルクリックして単語をハイライトした後、F3キーで次の単語にカーソルを合わせることができます(つまり、次の同じ単語を検索しているわけです)。Shift+F3キーで、前の単語に戻れます。

(1)まず、以下の内容のファイル「highlight.mac」を適当なディレクトリに作成する

----------------highlight.mac-----------------
S_SelectWord(0);
S_SearchClearMark(0);
------------------ここまで-------------------

(2)「設定」→「共通設定」を選択する


(3)共通設定
 ① 「マクロ」タブを選ぶ
 ② マクロ一覧に、「highlight.mac」ファイルを置いたディレクトリを入力する
 ③ 適当に空いてるところ(今回は0番)を選択する
 ④ 名前に「ダブルクリックマクロ」、Fileに「highlight.mac」を入力する
 ⑤ 「設定」ボタンを押す


(4)共通設定
 ① 「キー割り当て」タブを選ぶ
 ② 種別から「外部マクロ」を選択する
 ③ キーから「ダブルクリック」を選択する
 ④ 機能から「ダブルクリックマクロ」を選択する
 ⑤ 「割付」を押す


これで設定完了です。

残りの目標は、また今度。

2016年1月18日月曜日

ぷちぎるどver0.70がリリースされました!

お久しぶりです、セルディアです。

ぷちぎるどver0.70がリリースされました!


ぷちぎるどver0.70では、主に以下の要素が追加されました。


キャラクターの成長要素が追加されました。レベル、職業レベルに加えて、スキルのレベルが実装されています。武器や魔法などを扱っていると経験値が増えます。レベルアップすると、スキルに応じた新しい技などを習得できます。


クエストのルールが変わりました。左側に深度が表示され、「進む」と「戻る」ボタンで動くことができます。また、回復アイテムの使用や、フォーメーションの変更もできます。道中では敵に遭遇するほか、トラップが仕掛けられていることもあります。


戦闘では、武器による攻撃などで、対象を変更できるようになって、自由度がグーンと上がっています。また、武器ごとの強力な技も増えて、さらに強い敵に立ち向かうことができます。


おや…こいつは…?

ダウンロードはこちら


以下のVectorへのリンクからダウンロードできます。

前バージョン(ver0.61以前)をプレイされた方へ


HSPコンテストのバージョンver0.60と、以前のVectorバージョンver0.61からセーブデータを移行することができます。
puchi.exeと同ディレクトリにある、6つ、または7つのdatファイルを、ver0.70のdataフォルダの中にコピーしてください。(念のため、前のバージョンとセーブデータは取っておくことをオススメします…)

6つ(または7つ)のdatファイル
-------------
cenc.dat
chara.dat
ienc.dat
item.dat
party.dat
player.dat
(quest.dat)
-------------

その後ゲームを起動すれば、自動的にセーブデータが変換され、ゲームを続けられます。


2015年12月28日月曜日

graphvizを使ってわかりやすいプログラミングを

はろはろ、セルディアです。

やだ…私のコード、汚すぎ…?


しばらく触っていないソースコードを見るときとかに、よく思います。

「この変数、色んな所に散らばってるけど、何のための変数なんだ…?」
「この関数、中身を変更したいけど、どこで呼ばれているんだ…?」
「ぎゃあ! 勘違いして処理を書き換えて、とんでもない動きをした!」

頭を抱えたくなります、そして昔の自分を小一時間問い詰めたくなります。

そんなことにならないように、少しでも理解を助ける資料があってもいいものです。

今回の便利グッズ


今回は「graphviz」を紹介します。

こいつは、テキストで書いたグラフ構造を、自動的に画像出力してくれるツールです。
様々な意味の点を定義して、点と点の繋がりを決めると、あとはえんやこらさして適切な配置で線を引いてくれるのです。

いったい何の役に立つのか、シューティングで一つ例を挙げてみます。




シューティングというゲームがどんな流れで実装すべきか、ちょっとした図でまとめてみました。
タイトル画面でボタンを押すと、メニューが出てきます。
一番左の流れは、ゲームスタートを押すと、機体選択画面へ、選択するとステージプレイ画面へ行きます。(実際の、十字キーで動いて、弾を撃って、弾を避けてっていう画面ですね)
その他、ステージセレクトやオプションにも行けます。

恐らく、プログラミングではこの流れを、関数やif文条件分岐で実装しますが、プログラムが大きくなってくると、パッと見ただけではこの流れがわかりづらくなります。逆に、パッと見ただけでわかる、という資料は、思っている以上にとても強い味方になります。
関数や変数の役割は、あるとき、ふっ…と忘れてしまうものなので、大まかな流れだけでも図に残しておきましょう。きっとミスや勘違いを減らしてくれます。

これは単なる使い方の一例ですが、想像力を膨らませていろんな使い方ができるようになると、もっとプログラミングが楽になるかもしれません。

簡単な使い方


実は上の図は以下のようにDOT言語で書かれています。

----------------sample.dot----------------------
digraph graph_name {
graph [
   charset = "UTF-8";
fontname="MS ゴシック";
]
node [
   charset = "UTF-8";
fontname="MS ゴシック";
fontsize = 14;
]
edge [
   charset = "UTF-8";
fontname="MS ゴシック";
fontsize = 10;
]
  TITLE [label = "タイトル画面"]
  MENU [label = "メニュー画面"]
  SELECT_PLAYER [label = "機体選択画面"]
  PLAY_STAGE [label = "ステージプレイ画面"]
  RESULT [label = "リザルト画面"]
  GAMEOVER [label = "ゲームオーバー画面"]
  ENDING [label = "エンディング画面"]
  SELECT_STAGE [label = "ステージセレクト画面"]
  PLAY_SELECT [label = "ステセレ用プレイ画面"]
  OPTION [label = "オプション画面"]
  
  {rank = same; SELECT_PLAYER; SELECT_STAGE; OPTION;}
  
  TITLE -> MENU [taillabel = "決定ボタン押下"];
  MENU -> SELECT_PLAYER;
  SELECT_PLAYER -> PLAY_STAGE;
  PLAY_STAGE -> RESULT [taillabel = "ステージクリア"];
  PLAY_STAGE -> GAMEOVER[taillabel = "残機0"];
  GAMEOVER -> TITLE;
  RESULT -> PLAY_STAGE [taillabel = "最終面以外"];
  RESULT -> ENDING [taillabel = "最終面クリア"];
  ENDING -> TITLE;
  MENU -> SELECT_STAGE;
  SELECT_STAGE -> PLAY_SELECT;
  PLAY_SELECT -> SELECT_STAGE;
  MENU -> OPTION;
  OPTION -> MENU;
}
----------------sample.dot----------------------

このdotファイルをコマンドプロンプト上で次のように指定します。

dot -Tgif sample.dot -o sample.png

これでグラフ構造を書いたテキストファイルから、画像出力できます。

(コマンドプロンプトを使わないGUI版もあるようですが、詳しく調べていないのであしからず)

参考サイト


Graphvizとdot言語でグラフを描く方法のまとめ
http://qiita.com/rubytomato@github/items/51779135bc4b77c8c20d
Graphvizでできることがわかりやすくまとめられています。
上から読むだけでGraphvizマスター。

Graphviz チュートリアル
http://homepage3.nifty.com/kaku-chan/graphviz/
もう少し詳しい、グラフとノードとエッジの仕様が書かれています。
思い通りの配置にしたいときに。

Graphvizで日本語を使う
http://d.hatena.ne.jp/simply-k/20100705/1278326617
日本語文字を使うときに嵌らないためのメモです。

2015年12月12日土曜日

HSPからCへのコード変換について

やはー、セルディアです。

ある日突然訪れる恐怖


HSPには、AndroidやiPhoneアプリを開発できるHSP3dishという環境があります。(何度目かの説明)
そして、HSP3dish Helperを使えば、さらに簡単にアプリを作れます。

しかし…それは突然やってくる…。

Helperのビルドを押すとエラーが出る日々が…!!

その原因は


Androidの場合は、ビルドしたときに、HSPからCへコード変換されたコードがプロジェクトフォルダにできます。
<プロジェクトフォルダ>\jni\hsp3embed
hspsource.cpp

このファイルを見ると、Cコードがぶつ切りのような終わり方になっています。
下手をすると、関数を閉じていないのにEOFが来ていたり…。まともなソースじゃない。

実際にコード変換しているのは、HSP3インストールフォルダにある「hsp3cnv.exe」です。
Dishからビルドするときにも呼び出されています。
果たしてこれが打つ手なしの詰み、あきらめてくださいになるのかと言えば、意外とそうではないです。HSPは開発にかかわる様々なソースを公開しています。

OpenHSP

今回のhsp3cnv.exeもソースが公開されていたので、うまく変換できるように改造できるか挑戦してみました。

具体的な手順


まずソースをビルドして実行ファイルを作れる環境を入手します。

あっさり言っていますが、一からやるとかなりめんどうです。
今回私はVisual Studio 2012 Expressを使いました。無料で使えますが、たぶんダウンロードしてインストールするまで、けっこう手順を踏みます。

実行ファイルを作れるようになったら、OpenHSPからhsp3cnvディレクトリのファイルをダウンロードします。そして、これをビルドするためにはhsp3ディレクトリのファイルも必要なので、こちらもダウンロードします。

これは、おそらく、になりますが、HSPからCへソース変換する過程のテキストデータはCHsp3クラスの中に抱え込んでいて、main.hspファイルの129行目のhsp3.SaveOutBuf( oname );で吐き出されている…と思います。

その変換過程のテキストデータを蓄えるバッファはCMemBufクラスで実装されているのですが、どうもこいつは文字列が長くなると、自動的にバッファを拡張する機能を持っているみたいです。こいつ自体に問題はなさそう。

いろいろソースを覗いたのですが、さすがに機能を全部解析するわけにもいかず、らちが明かず。

結局手あたり次第改造することにしました。

その結果、キャラ型配列変数が、バッファ用に適当に長さ4096で作られているのがどうも怪しいと感じ、これまた適当に伸ばしてみました。(4096->65536)
すると、ビルドしてできたhsp3cnv.exeを使って、無事にコード変換することができました。

改造箇所から考えると、ソースコードが一定の長さ以上になるか、コード変換時のなんらかのスタック処理が、変換処理の想定を超えてしまうとファイルがぶつ切りになってしまうようです。

最終的に力技になったけど気にしない!

ファイル配布


せっかく問題を解決できたので、できあがったhsp3cnv.exeを配布します。
BSDライセンスなので問題ない…ハズ。ライセンスは明記しときます。


ファイルを「hsp3cnv.exe」にリネームして、HSP3インストールフォルダのファイルを上書きしてください。(もちろん前のファイルは取っておいた方がいいですよ)

脅しのようにお決まりの言葉を載せますが、このファイルを使って起きた、いかなる問題にも私は責任を負いません。
あくまで自己責任で使ってください。

2015年12月1日火曜日

シューティング「空飛ぶ赤いワイン樽」

はろはろー、セルディアです。

今回のシューティングは


今回は「橙汁」様から出ている「空飛ぶ赤いワイン樽」を勧めます。

空飛ぶ赤いワイン樽(以下ワイン樽)は、トゥーン調のかわいらしい見た目でありながら、ゲーム性はかなり硬派な熱いシューティングです。

無制限弾数の「バルカン」と、弾数は限られながらも高威力で弾も消せる「ミサイル」の二つの武器を使って戦います。

難易度が三種類から選べるので、初心者でも上級者でも楽しめる内容となっています。


敵を倒すとコインが出てきて、たくさん回収するとミサイルが補充されていきます。
ミサイルは敵に当たると爆風が生まれ、敵にダメージを与えるとともに、敵弾も消してくれます。
バルカンだけでは心許ない火力なので、ミサイルをいかに使っていくかがカギになります。

ミサイルを敵に当てると倍率が上がり、スコアも上がってコインも多くなるため、ミサイルを撃ちまくって稼げば稼ぐほど、より攻略が楽になっていきます。高難易度では重要なテクニックです。



リプレイ


せっかく撮ったので、私のリプレイを添付します。


難易度:hard
スコア:8162219

各ステージ内訳



それなりにスコアを稼いでいます。それなり…