2016年11月15日火曜日

シューティングゲーム「CrimzonClover」

おはこんばんにちわ、セルディアです。

シューティングゲーム「CrimzonClover」について


CrimzonCloverは、同人からアーケードへ移植され、Steamでも発売された、超硬派シューティングゲームです。

アーケード版(for NESiCAxLive) 冒険企画局公式サイト
http://www.bouken.jp/pd/cc4n/

Steam版
http://store.steampowered.com/app/285440/?l=japanese 

どんなゲーム?


このゲームには4つのモードがあり、様々な種類のシューティングが遊べます。

上のゲーム紹介のリンク先に詳細な説明が載っていますが、ほんのさわりだけ簡単にお話します。


  • ORIGINALモード
スタンダードな弾幕シューティングです。
1面から歯ごたえのある難易度ながら、ゲージを溜めて「ブレイクモード」を発動することで爽快感を味わうことができます。


  • BOOSTモード
弾の数は少ないものの、1発1発に殺意がこもっている純粋なシューティングです。
ランクシステムを利用すれば、苦手な場面をボムで簡単にしたりできます。


  • UNLIMITEDモード
ちょっと初心者にはお勧めできないモードですが…
絶望的な弾幕ながら、通常装備のロックシュートによる弾消しで生き延びていくモードです。


  • TIME ATTACKモード
3分間の限られた時間で、スコアを競うゲームです。
スピーディな展開と残機無制限のおかげで、お手軽にスコア稼ぎを楽しめます。


アーケード版とSteam版って?



アーケード版は、2013年4月に稼働開始した、ゲームセンター用(NECiCAシステム)のゲームです。

Steam版は、2014年6月に発売開始した、アーケード版をPC用に移植したゲームです。ゲーム内容は、同一内容となるARCADEモードと、それをマイルドにアレンジしたNOVICEモードがあります。
(ぶっちゃけSteam版は上位互換です。しかも安い!)

シューティングに慣れてない方でも、NOVICEモードで気軽にシューティングを遊べますよ!

スコアの軌跡


これまで私が更新してきた、CrimzonClover UNLIMITEDの各機体のスコア経緯を載せます。
上にあるものほど稼働してすぐのスコア、下にあるものほど最近のスコアになります。
各列は、機体ごとのスコアを示しています。


備考欄の意味は、次の通りです。
  • 初…初クリア時のスコアです。
  • ☆…Steam版のスコアです。☆がない場合はアーケード版のスコアです。
どういう順番で機体別のスコアを詰めていったかを見てみるとおもしろいかもしれません。

スコアは、基本的にクリアしたもののみを掲載しているので、序盤の辺りや最近の辺りでは、数段飛ばしでスコアが伸びているものもあります。

僭越ながら、Steam版のSuperplay Strategy Guideに、TYPE-IIのリプレイで参加させて頂いております。
どんな稼ぎをしているのかは、Steam版で見られますので、気になる方はぜひご覧ください。1面だけ、お試しで無料で見られます(2面以降はDLCだよ!)。

おまけ


昔の情報になりますが、最強機体TYPE-ZによるUNLIMITEDモードのクリア重視プレイ動画をニコニコ動画に(こっそり)上げています。
UNLIMITEDモードに興味を持った方、また挑戦したいけど進み方がわからないという方は、こちらの動画を参考にして攻略してみてください。

http://www.nicovideo.jp/watch/sm21640309

これであなたもUNLIMITEDプレイヤーだ!

以上。

2016年11月6日日曜日

HSPの落とし穴(しましま模様)

セルディア見参!

まだあった! HSPの落とし穴!


なんだか恒例行事みたいになってきましたが、またまたHSP3dishの罠にはまってしまったので備忘録として載せておきます。

今回ご紹介するのはこちら!(TVショッピング風に)

文字列操作関数です。

以下の関数で、1番目の引数(検索される文字列変数)に文字列型の配列を指定し、かつ要素番号に変数を使うと、androidで動かした場合のみ落ちます。

instr
strmid
strtrim

以下のプログラムでコメントアウトしているところを外して動かしてみてください。落ちます。

#include "hsp3dish.as"

redraw 0
color 255, 255, 255
boxf

; 落ちない
pos 0, 0
color 0, 0, 0
_str = "ハロー ワールド"
mes _str

; 当然落ちない
_ret = instr(_str, 0, "ワ")
mes str(_ret)

; 落ちない
sdim _arrstr, 32, 4
_arrstr(2) = _str
mes _arrstr(2)
_ret = instr(_arrstr(2), 0, "ワ")
mes str(_ret)

; androidで落ちる
;_index = 2
;_ret = instr(_arrstr(_index), 0, "w")
;mes str(_ret)

; 落ちない
_mid = strmid(_str, instr(_str, 0, "ー"), instr(_str, 0, "ル") - instr(_str, 0, "ー"))
mes _mid

; androidで落ちる
;_index = 2
;_mid = strmid(_arrstr(_index), 1, 3)
;mes _mid

; 落ちない
_trim = strtrim(_str, 3, ' ')
mes _trim

; androidで落ちる
;_index = 2
;_trim = strtrim(_arrstr(_index), 3, ' ')
;mes _trim

; 落ちない
_rep = _str
strrep _rep, "ル", "ru"
mes _rep

; 意外と落ちない
_index = 3
_arrstr(_index) = _arrstr(2)
strrep _arrstr(_index), "ル", "ru"
mes _rep

; androidで落ちる
;_splitstr = "12,34,56"
;split _splitstr, ",", _split1, _split2, _split3
;mes _split1
;mes _split2
;mes _split3

redraw 1

不思議なのが、配列の要素数を変数ではなく数字で直書きすると動くところですね。
他に、文字列操作以外の関数でも同じように試してみましたが、特に落ちませんでした。文字列操作だけのようです。
noteselなどの複数行文字列操作も、特に問題ありませんでした。

なお、splitはそもそも配列でなくても落ちました。

そもそもHSP3dishで対応しているの?


一時期は、そもそもandroid上で対応していなさそうというお話も上がっていたようです。

http://hsp.tv/play/pforum.php?mode=pastwch&num=59791

ただ、今は上記のプログラムを動かしてわかる通り、全角文字列に対応しているようです。ルールを守って使えば、とりあえずは利用できるのかな? androidで利用できるようにしたという更新履歴が見つからないですが…いつ修正したんだろう。

splitだけは公式で現在正しく動作していないことが周知されています。

http://www.onionsoft.net/hsp/v34/doclib/hsp3dish_prog.htm#KNOWNBUG

まだまだ発展途上ですね…。

以上、お気をつけてHSP3dishライフをお楽しみください。
(あと修正を切実に願います)

2016年10月30日日曜日

ぷちぎるどのマイナーアップデート版ver0.82について

Happy halloween!
セルディアです。

ぷちぎるど更新


ぷちぎるどをver0.82にアップデートしました。
以下の場所で公開しています。

Windows (Vectorサイトへリンクします)
http://www.vector.co.jp/soft/winnt/game/se511621.html

Android (Google Playサイトへリンクします)
https://play.google.com/store/apps/details?id=net.seldia.puchiguild&hl=ja

HSPコンテスト2016(コンテストサイトへリンクします)
http://hsp.tv/contest2016/

Vectorはまだ申請が受理されていません。反映されるまでもうちょっと待ってネ。

驚きの更新内容


以下の改善をしました。


  • キャラクターのステータス表示を改善しました。
    戦闘に重要な数値が一目でわかるようになっています。
    (各能力値が見たいときは長クリックして詳細表示で)
  • 職業の移動範囲、移動能力を明記しました。
  • リストのスクロールバーをスライド可能にしました。
    アイテムが大量にあっても操作しやすくなりました。
    特にエンチャント付きアイテムがかさばったときに有効です。
  • 戦闘表示の速度調節を可能にしました。
    余裕のある戦闘は高速化で飛ばせます。
左クリック押しっぱなし、またはホールドで2倍
右クリック押しっぱなし、または2本指ホールドで4倍
  • (キャラの解雇で総人数を3人未満にできないようにしました。詰み防止です)

驚くほど核心的な内容が含まれていません。
操作性向上のみです。

これにてHSPコンテスト2016向け開発閉幕


1年ほど前からぷちぎるどをHSPコンテスト2016に向けて開発してきましたが、今回の更新で一区切りつくことになります。

思えば1年間とは長いものでしたが、ぷちぎるど開発は思ったより難航してしまいました。なにせ初めての不特定多数への一般公開なので、あらゆる操作を想定したテストやバグ修正、そしてセーブデータへの細心の注意といった、今まで気にしていなかった(目を背けてた)部分に立ち向かっていく必要がありました。正直申し上げると、1年にしては追加内容が見合っていないです。

でも、操作性やゲーム性の基盤は固められたと思いますので、もう1年、またレベルを上げて開発していこうと思います。はたしてHSPコンテスト2017に応募するかはわかりませんが…神のみぞ知る。

以下の要素を実装していく方針です。


  • ステータス異常の追加
    まだ戦闘が単調なところがあるので、いろいろ追加していきたいです。
    敵はもっと意地悪に、味方はもっと豪快に。
  • 説明、解説の追加
    ところどころにチュートリアルはありますが、とても必要事項をまかない切れてないです。
    アイテム一つ一つの説明や詳細表示の内容なども充実させていきたいです。
  • HP0による戦闘不能ペナルティの重大化
    かなり繊細なバランスのとり方が必要になりますが、ちょっとペナルティが軽すぎるので、なにかしら制限を掛けたいです。
    死亡→即ロストは考えていません。
  • ストーリーに沿ったクエスト
    実装したい!!!!!
    これ実装しないでRPGとかないわ!!


お楽しみに。

あとがき


いやあ、1月に1回はブログを書きたいなと思っていたんですが、9月は何も書いていませんでした。反省。

2016年8月27日土曜日

ぷちぎるどのマイナーアップデート版ver0.81について

お疲れ様です。セルディアです。

ぷちぎるどをver0.81にアップデートしました。


Windows (Vectorサイトへリンクします)
http://www.vector.co.jp/soft/winnt/game/se511621.html

Android (Google Playサイトへリンクします)
https://play.google.com/store/apps/details?id=net.seldia.puchiguild&hl=ja

HSPコンテスト2016(コンテストサイトへリンクします)
http://hsp.tv/contest2016/

Android版は、もう更新が反映されています!
他は反映されるまでもうちょっと待ってネ。

(9月1日追記:Windows版も更新が反映されました)

夏のバグ修正祭り


残念ながら私の稚拙なプログラムにより以下のバグがあったため、修正しています。なむさん。

  • 回復魔法が魔法になっていなかった(失敗しなかった)ため、修正してしまいました。
  • まれに敵の名前が「泉」になってしまうバグを修正しました。
  • 宝箱のトラップが発動した直後に敵とエンカウントすると、トラップが敵として現れるバグを修正しました。
  • スキルがLV5の状態で経験値が上限に達すると、戦闘終了時に操作を受け付けなくなってしまう致命的なバグを修正しました。
  • パーティが0人、またはHP0のキャラのみでクエストに出発できないようにしました。
  • クエスト報酬のアイテムが意図せず固定になってしまっていたため、修正しました。
  • Android版で、半角カナ文字の表示ができていなかったため修正しました。

また、以下の変更を施しています。

  • 一部魔法の消費MP、難易度を上昇させました。少し扱いづらくなってしまいます。
  • アイテムの表示項目を改善しています。かなりアイテム効果がわかりやすくなっている…はずです。
  • スキルレベルが上がると、アイテムとは別に使えるスキルが増えます。アイテム枠を節約しながら技・魔法を持つことができます。
セーブデータの移し方は、同梱のReadMeにも書いていますが、ここにも転記しておきます。

・以前にプレイしていたバージョンのdataフォルダにある、以下の7つ全てのdatファイルを、最新版のdataフォルダに入れてゲームを起動すると、データを引き継ぐことができます。

cenc.dat
chara.dat
ienc.dat
item.dat
party.dat
player.dat
quest.dat

アイテムの表示改善


アイテムの効果説明をわかりやすくしました。


武器・防具は、重要な情報を表形式で表示するように整理しています。


技・魔法は、効果範囲の説明を文字からアイコンに変更しています。
威力表示も、ダイス表記から平均威力をメインに変更しています。(ダイス表記も併記)

あとがき


ほんとうは表示改善をもっと作り込んでから公開したかったのですが、ゲームが進行不能になる致命的なバグがあったため、かなりリリースを早めました。
このバージョンで一旦落ちを着けて、これからまた作り込んでいきます。
新バージョンをよろしくお願いいたします。

2016年8月19日金曜日

HSPコンテスト2016にぷちぎるどを応募しています

納涼の候、皆様におかれましては益々ご健勝のこととお慶び申し上げます。セルディアです。

HSPコンテスト2016にぷちぎるどを応募しています


件名の通りでおもしろみがないのですが、応募しています。
以下のサイトで開催されています。私の作品は、応募作品(Dish1)のリンク先にあります。なんと1個目に表示! ラッキー!

http://hsp.tv/contest2016/

HSPは実は歴史のあるプログラミング言語で、コンテストも2003年から実施しているようです。HSP3dishができてからはdish部門もできて、私も去年に一度応募していますが参加賞レベルでした。

今回はなんとか形にはまとまってるので、ええところまで行ければええな。

2016年7月23日土曜日

HSPの落とし穴(市松模様)

おはようございます、セルディアです。

まだあった! HSP3Dishの落とし穴!


前回にいろいろとHSP3Dishのこいつぁヤバイ仕様を挙げていましたが、今回新たな仕様を発見したのでご連絡いたします。

・関数にldimで定義したラベル配列変数の要素を渡せない

どういうことかと申しますと、たとえば以下のサンプルプログラムを例に挙げます。

goto *start
#include "hsp3dish.as"

*label0
mes "label0"
return

*label1
mes "label1"
return

*label2
mes "label2"
return

#deffunc testfunction1 var m_label, int m_int
; 数字
mes "" + m_int
gosub m_label
return

*start

redraw 0
color 255, 255, 255
boxf

color 0, 0, 0
ldim labelarray, 3
labelarray(0) = *label0
labelarray(1) = *label1
labelarray(2) = *label2

; 本来の使いかた
gosub labelarray(0)
gosub labelarray(1)
gosub labelarray(2)

; 関数へ引き渡す
testfunction1 labelarray(0), 0
testfunction1 labelarray(1), 1
testfunction1 labelarray(2), 2

redraw 1
ldim配列変数labelarrayを定義して、一度gosubで普通に呼び出し、次にtestfunction1で一度ラベル変数を渡して呼び出しています。

関数testfunctionは、var型の引数を定義していて、こうすると引数にラベル変数を渡すことができます。

本来、このプログラムはgosubで"label0","label1","label2"が出力され、もう一度testfunctionで同じく出力されるのですが、Androidアプリに変換して実行すると、testfinctionでは"label0","label0","label0"と同じ出力しかされません。

testfunctionには、配列の0番目の要素しか渡っていないんですね。

困った。

以下のようにすれば一時的にしのげます。


_label = labelarray(2)
testfunction1 _label, 2

丁寧に解説しましたが、要するにラベル型配列の要素を関数に渡すなってことですね!

いじょ。

2016年7月16日土曜日

ぷちぎるどver0.80公開です

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

新しいぷちぎるどが遊べるようになりました!


先日ちょこっとだけ公開したぷちぎるどの新バージョンが、ついに遊べるようになりました。
HSP3Dishの力により、WindowsとAndroidで遊べるようになっています。

Windows (Vectorサイトへリンクします)
http://www.vector.co.jp/soft/winnt/game/se511621.html

Android (Google Playサイトへリンクします)
https://play.google.com/store/apps/details?id=net.seldia.puchiguild&hl=ja

今回のバージョンアップで、かなり操作性を重視して改善しています。

アイテムもまとめられるようになって、一層遊びやすくなったはずなので、いよいよアイテムやクエストを増やしてボリュームアップする方向で進みます。

(ちなみに、恐ろしくバランス崩壊のやけくそなクエストを追加しましたが、果たしてクリアできるかはわかりません)

2016年6月21日火曜日

ぷちぎるどver0.80の先行紹介

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

待たせたな!


しばらくめぼしい連絡を出せませんでしたが、そろそろ自作ゲーム「ぷちぎるど」のバージョンアップができそうなので、新たな要素をちょっとだけご紹介します。

上位職の実装



今までは4種類の職業の中から1つを選び、レベルアップさせていくだけの簡素な職業要素でした。
バージョンアップすると、職業を極めればさらに上位の職業に転職することができます。もちろん、最初に選べるどの職業よりも強力です。
(その分、既存の職業は少し弱くなります。ゴメンネ!)

アイテムのスタック・複数所持の実装



今までは倉庫に入れたアイテムがかさばり、しかもクエストに持っていけるアイテムは1アイテム1個までに決まっていました。
バージョンアップすると、倉庫内では同じアイテムを複数まとめておけます。


アイテムによっては、クエストに複数個まとめて1枠として持っていけるものもあります。

エンチャントの実装



バージョンアップすると、ランダムに付与される「エンチャント」という追加効果によって、より強力な装備を得ることができます。


詳細表示画面で、各エンチャントを確認できます。クリアすると武器防具がもらえるクエストがありますが、この武器防具にまれにエンチャントがついています。ガンガンクエストをクリアして、より強い装備を整えましょう。

戦闘中移動の実装



今までは、戦闘を開始すると、逃げるか勝利・敗北するまでキャラの位置を変更できませんでした。
バージョンアップすると、ついに戦闘中に移動することができます。
職業によって移動範囲が変わります。ただし、移動するとそのターン行動できない職業もあるので気を付けましょう!

新クエストの実装



いったいどんな試練が待ち受けているのか…お楽しみに。

あとがき


一回こういう紹介やってみたかったんですよね。
というか、追加すべき要素をまだまだ追加しきれてないのが本音。

2016年5月29日日曜日

Markdownの力

お疲れ様です、セルディアです。

徒然なるままに書き連ねたひ


皆さんは、考えていることやアイデアを書いてまとめたいときに、どんな方法を使いますか? メモ帳で充分? それともWordで丁寧に書き上げる、アナログに紙とペンで済ませる…などなど。
でも、ただテキストエディタで書き留めておいても、文章量が増えてくると、まとめ方も迷ってきます。うまくまとめないと、同じようなことがいろんなところに散見されたり、どこに何が書いてあるのかわからなくなったり…これでは本末転倒です。
そういって今度は、WordやHTMLなどの構成を整えられるような高機能なエディタでまとめようとすると、書くために覚えることが多くなっていきます。見出し機能はどこかな、箇条書き機能はどこかな、編集方法はどうかな…。そのために書くことがストレスになると、それはそれで大変。

今回は、編集時のわかりやすさと閲覧時の見やすさを兼ね揃えたMarkdownをご紹介します。

Markdownでできること

Markdownは、テキストで書いた内容を、自動的にHTML形式などに変換してくれます。非常に簡単なルールで記述できるため、とても書きやすく見やすいです。

いくつかルールを上げてみます。


  • 見出し
    見出しは行先頭に#(シャープ)を付けます。#の数によって、見出しのレベルが変わります。
# タイトル
## サブタイトル1
### 項目1
### 項目2
## サブタイトル2
...
  • 強調
    強調したい文章を*(アスタリスク)で囲みます。
例:ここが*強調*されます。
  • 引用
    引用する場合は、行先頭に>(大なり)を付けます。
> 引用される文章です。
> 複数行引用するときは、連続して>を付けます。
  • 箇条書き
    行先頭に*, +, -などを入れることによって、箇条書きにすることができます。
    箇条書きの中に箇条書きのリストを入れることもできます。
* 項目1
    + 項目1-1
    + 項目1-2
* 項目2
...
  • リンク
    文章内にリンクを埋め込むことができます。
    文章内の見出しや、Webページにリンクさせることが出きます。
[ここ](#見出し1)が見出し1に飛びます。
  • コード引用
    構文ルールで使ってしまっている記号文字やスペースなども、直接テキスト通りに表示したい場合は、コード引用で記述します。
    コード引用は、```(バッククォート)3つで文を挟みます。

```
int main(void) {
    printf("hello world");
    return 0;
}
``` 
また、文章の一部分をコード引用形式にしたい場合は、`(バッククォート)で挟みます。 
例:ここが`code`です。

HTMLへの変換


HTMLへ変換するには、Pandocというソフトを使います。
Pandocは以下からダウンロードできます。

http://pandoc.org/

英語のページですが、Installingから辿れば簡単にダウンロードできます。
インストーラに従ってインストールすれば、すぐに使える状態になります。

Pandocで変換するためには、コマンドプロンプトを使います。
あらかじめMarkdownのルールで書いたファイルを、拡張子mdで適当な場所に保存しておきます。コマンドプロンプトのcdコマンドで保存したディレクトリに移動して、以下のコマンドを打ってみましょう。
pandoc -t html -s hoge.md -o hoge.html
hoge.mdは適宜保存したファイル名に合わせてください。
コマンドを打つと、同じフォルダにhtmlファイルが作成されます。

さらに便利なオプション


Pandocには、ただMarkdownテキストからHTMLに変換するだけでなく、いろいろ便利なオプションがついています。
一部をご紹介します。


  • Markdownのルールを変更する
    実はMarkdownは、いろいろな派生ルールがあります。といっても、それぞれが「簡単に記述できる」という目的に沿って実に単純明快なルールで派生しているので、それほど難しくはありません。
    とりあえずGithubが流行ってそうなので適当にGithub形式を指定しましょう。
    こんな感じで指定します。
pandoc -f markdown_github -t html -s hoge.md -o hoge.html
  • 見出し一覧を付ける
    せっかく見出しを付けたはいいものの、見出し一覧がなければ役立つものも役立ちません(言いすぎ?)
    Pandocには見出し一覧を自動的に作成する方法があるので、以下のようにオプションを指定しましょう。
    なんと、HTMLリンクも貼ってくれます。
pandoc --toc -f markdown_github+pandoc_title_block-ascii_identifiers -t html -s index.md -o index.html  
 (+pandoc_title_block-ascii_identifiers という謎のオプションを指定しないと、全角文字の見出しにリンクを貼ってくれません)
  • CSSを指定する
    HTMLは、ちゃんと装飾指定してやらないと、非常にそっけない表示になります。せっかくCSSという簡単で便利な装飾方法があるので、指定してみましょう。
    今回はGithub風のCSSを借りてみます。以下で公開されている方がいるので、感謝しつつダウンロードします。

    https://gist.github.com/andyferra/2554919

    そして、mdファイルと同じフォルダに置いて、以下のコマンドで変換します。
pandoc --toc -f markdown_github+pandoc_title_block-ascii_identifiers -t html -c github.css -s index.md -o index.html

終わりに



以上で私からの紹介は終了です。
Markdownは使いこなせばもっと便利なルールや表現方法がたくさんあるので、気になった方はじゃんじゃん調べてみてください。

そうそう、本来Markdownは、改行にはスペース2つを入れるのがルールみたいなのですが、Pandocで変換するとテキストの改行から自動的にHTMLで改行してくれます。
まあスペース2つなんで視覚的に全く見分けがつかないし、忘れやすいし、ぶっちゃけクソ仕様…とにかく、都合がいいのでそのまま使ってます。

それでは、よいテキストメモライフを。

2016年4月17日日曜日

ぷちぎるどの開発進捗(4月①)

おひさひさー、セルディアです。

ぷちぎるど進捗どうですか


こそこそと開発を続けております。

まだまだやりたいことはぎゅんぎゅん詰まっていますからね!


今回は、キャラを戦闘中に移動できるようにしました。

キャラをタップして、薄い緑色になったマスにドラッグアンドドロップで移動できます。

これで、かなり戦略の幅が広がるかと思います。

移動方法は、職業によって決まっています。

職業によって、以下のいくつかの能力を得られます。
  • 上下左右移動可能
  • 周囲8方向移動可能
  • 他のキャラと入れ替われる
  • 移動した直後にアイテム、技が使える
新しいシステムを利用して、更なる強敵に立ち向かいましょう。

しかし、敵の移動はどうしようかな…。ターン終了ごとに、敵がスッと動き出すとかやってみようか(ノープラン)。

さらに言えば、この実装により、副作用で「敵の位置を強制的に動かす」アイテムや技も作れます。ふふふ、さてどうしてやろうか…(ノープラン)。

2016年3月15日火曜日

HSPの落とし穴(水玉模様)

hello, セルディアです。

HSP3dishにだって…… わからないことぐらい…ある…


HSP3dishには、残念ながらまだまだ未対応な機能や隠されたバグがあります。

発展途上とも言えれば、まだまだ成長する余地はある、とも言えますが、開発中に突然原因不明のバグが発生して、Androidで画面が真っ暗になり気づいたらホーム画面に戻る…という悪夢は見たくないでしょう。

ここで、HSP3dishの仕様と未対応機能をまとめておきます。

チキチキ不具合ルーレット


まずは、Windows版では動くがAndroid版で落ちるコードの書き方をまとめます。


  • 新規関数登録(#defcfunc)による関数で、他の新規関数や新規命令(#deffunc)を呼び出すと落ちる
#deffunc testfunc
    ...
    return

#defcfunc testcfunc
    ...
    testfunc
    ...
    return
  • 配列への連続代入で落ちる
dim array_var, 5
array_var = 1, 2, 3

  • 新規関数、新規命令内で、別のラベルにgosubしてから引数を使うと落ちる
#deffunc testfunc str testarg
    gosub *testlabel
    return

*testlabel
    mes testarg
    return
  • foreach、forを使うと、Cコードへ変換時にエラーが発生する(コード自体は生成されるが、Androidで動かすと落ちる)


実は、HSP自体にも問題が発生するコードの書き方があるので、まとめます。


  • (1) repeat~loopループ内でgosubラベルによりジャンプする
    (2) ラベル内でrepeat~loopループ内でreturnすると、次のrepeat~loopで予期しない挙動を取る

repeat 4
    gosub *testlabel
    mes "testA"
loop
stop

*testlabel
    repeat 4
        mes "testB"
        return
    loop
    return

(やっかいなのは、gosubがrepeat~loop内でなければ、何の問題も起こさないことです。たまたまループの外でgosubしてうまくいっている経験があると、この仕様に気づきにくいかもしれません)
  • 新規関数、新規命令をreturnで閉じないまま別の新規関数、新規命令の定義文に差し掛かってもエラーが出ない(個人的にこれでよく悩まされます)


#deffunc testfuncA
    a = 0

#deffunc testfuncB
    a = 1
    return

以上です。

ざっと並べましたが、中にはWindows版で全く意識せずやらかしている場合もあるかもしれません。
私もコードを書いているうちに、うっかり上記の条件を満たしてしまってドはまりすることがよくあります。

HSP3dishを使って「Windowsでは動くのにAndroidでは動かない! なぜだ!」となっている人の助けになれば幸いです。

気を付けてもやらかしちゃう 人間だもの


気を付けて書けばバグが減るならこの世にバグはないです。

ということで、自動的にAndroidで落ちてしまうコードを発見するプログラムを作りました。

簡単に言えば「Windowsで動くけどAndroidで落ちるったー」です。

こちらがコードになります。
https://sites.google.com/site/seldiacotton/file/codecheck.rb

驚くなかれ、Rubyで書かれています。Rubyが一番書きやすいんだもん…!(わがまま)
動かすためにはRuby実行環境をインストールする必要があります。
入っていない場合は、以下のサイトからインストールしてください。
https://www.ruby-lang.org/ja/
(Windows版Rubyバイナリのインストーラをダウンロードして実行すればOK. Rubyバージョンは1.9.0以降ならなんでも大丈夫…なはず)

ダウンロードしたRubyコードを、hspファイルと同じディレクトリに置いて、コマンドプロンプトで以下のコマンドで実行してください。

ruby -Ks codecheck.rb

すると、同じディレクトリのhspファイルを検査してくれます。

いきなりRubyとか出てきて、とてもHSPのコードを書く人向けに作ったとは思えない投げ出しっぷりですが、お役に立てれば幸いです(そしてすべてを投げ出す)。

使い方と注意事項


上で述べている、不具合を起こしてしまうコードの書き方はある程度検出できるようになっています。コマンドプロンプト上に出力された文を見て、良しなに判断してください。

Rubyコードの2行目と4行目に、対象に含むファイルと、逆に除外するファイルを記述することができます。指定方法は記入済みの例に倣ってください。

あくまで個人的に検査用に作っただけで、万人の書き方にも耐えうるよう精密な仕様に対応してるわけではありませんのであしからず。一応、せっかくつくるならと、結構作り込んではいますが…。

もし、こういうコードの書き方をすると誤検知するよ! とか、こういう書き方は検知してくれないの? とか、他にもこういう不具合があるんだけど! とかあったら、コメントでくれると対応したり喜んだりするかもしれません。

よろしくお願いいたします。

いじょ。

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


これで設定完了です。

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