2015年11月27日金曜日

HSP3dishで文字を描きたい

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

文字を表示するのは一苦労


HSPでは、もちろん標準で、文字を表示するmes命令というものが備わっています。
そしてもちろん、HSP3dishでもmes命令を使って文字列を描画することができます。

と簡単に思ったら大間違いだ。

立ちはだかる不具合


HSP3dishでは、なぜか、文字列が他の描画に対して最優先される特性を持っています。

動作を確認するために、以下のプログラムをHSPで実行してみましょう。

――――――――――――
#include "hsp3dish.as"

redraw 0

pos 0, 0
color 255, 255, 255
mes "test"

color 0, 0, 255
boxf 0, 0, 480, 800

redraw 1
――――――――――――

白い文字を表示してから、青い矩形を描画しています。

描画順を考えると、文字は矩形の下に隠れて見えないはずなのですが、実行してみると、はっきりくっきり文字が見えます。ちなみに最初のinclude行を取り除くと、dishではなく通常のHSP環境で実行されますが、このときは文字は見えません。

残念ながら、これを防ぐ方法は見当たりませんでした。

大胆な回避策


mes命令ではこの問題を回避できませんが、実に大胆かつ効果的な回避策があります。

文字をあらかじめ画像にしておいて、画像コピーで代替してしまえばいいのです。

そして、それを実現した夢のようなモジュールが既にあります。しまくろねこさんが製作した、mod_picmes.asモジュールです。(以下のリンクにあります)

簡単に使い方としては、「mod_picmes-Editor.exe」で作成した画像を元に、コード側で「mod_picmes.as」をインクルードして機能を利用します。

もともと、Androidでmes命令を使えない問題を解決するために作られたモジュールのようですが、このような使い道もあります。というか汎用性ありすぎて便利すぎます、しまくろねこ様ありがとうございます。

その他メリット、デメリット


今はAndroidでのmesも正式サポートされていますが、この方法には他のメリットもあります。

  • 表示レイアウトが環境間で変化しない
標準mes命令では、Windows、iOS、Androidそれぞれの文字列描画関数を呼び出しているので、当然、各環境で表示も微妙に変わってきます。文字を画像にしておけば、どの環境でも見た目が変わりません。
  • ふち付き、影付き文字が作れる
mod_picmes-Editor.exeについている機能ですが、なんと文字にふちをつけたり影をつけたりできます。ふち付きにしておけば、周りと色がかぶって見づらいシーンでも、視認性が高くなります。

ただ、1文字で1つ画像をコピーするとあって、処理に負担がかかることもあります。Android環境が厳しく、Nexus 7でテストした限りでは、感覚的にだいたい100~200文字表示すると、処理時間は1/60秒を超えてしまいます。
celputm命令で高速化を図って改善されないかも試してみましたが、やはり厳しかったです…こればっかりは仕方ない。
Windows環境ではDirectXの賜物か、特に気にすることはありません。

2015年11月19日木曜日

HSPの暗号化DPMについて

おっす、セルディアです。

HSP3.5beta2で暗号化DPMが使えません…。
色々試しましたが、ぜんぜん言うことを聞いてくれませんでした。

ゲームデータ見放題や!!


HSPではDPMという、zipのように複数のファイルを1つのファイルにまとめる機能を持っています。DPMにまとめるとHSPから通常のファイルと同じようにアクセスできるのですが、そのままではテキストエディタで開いたり、バイナリエディタで覗くとあっという間にデータが露見してしまいます。情報のリークです、事件ですよ奥さん。

暗号化DPMを使うと、単純にファイルを開くだけでは全く中身の見当もつかなくなります(はずです)。エンディングの文章やCGを見られる心配がなくなるわけです。これは大事だ。

しかし!! 実際に作ってみると動いてくれません!!

スクリプト側の準備は


DPMを使うにあたって、スクリプト側に準備が必要です。
次の行を入れておきましょう。

chdpm "data.dpm"

詳しくはF1のヘルプを見ましょう。

実は、DPMに含めるファイルは、「ファイル名が12文字以内」という制限があります。(拡張子含めずに8文字ということになります)意外に見落とすこともあるので注意しましょう。
これでうまくいかないと、「エラー12 ファイルが見つからないか無効な名前です」「エラー13 画像ファイルがありません」などのエラーが出ます。

とりあえず作り方は


DPMを作るには、いくつか方法があります。

  • 「実行ファイル自動生成」を実行
    →実行後、HSPスクリプトエディタから「ツール」→「PACKFILE編集」
    →編集後、「ツール」→「DPMファイル作成」
恐らく一番正攻法の作り方…だと思います。
暗号化は「PACKFILE編集」の中のチェックボックスをONにすればできます。
と思わせてできません。実は暗号化しない方法も全く効きません。
具体的には、EXEファイルを実行したときに、「エラー12 ファイルが見つからないか無効な名前です」「エラー13 画像ファイルがありません」などのエラーが出ます。
この方法は忘れてください。
  • 「実行ファイル自動生成」を実行
    「指定フォルダからDPM作成」で必要なファイルを含める
    DPMを実行ファイルと同じフォルダに置いて実行
どうもとあるバージョンから追加された方法のようです。
こちらだと、暗号化の際に鍵を指定することができて、「おお、なんか暗号化っぽい」と期待しますが、ダメです。同じくエラー12、13が出ます。

  • 「#pack」「#epack」プリプロセッサ命令を使う
DPMに含めず、EXEファイルにくっつけることになります。要するにEXEファイルの容量が増えます。実はこの方法だと…暗号化できます。当初の目的と違うけど暗号化できたからええか。

結論


WindowsでDPMはあきらめてください。#epackを使いましょう。

実はAndroid版だと、2番目の方法で「暗号化しなかったら」使えます。
(Androidのリファレンスマニュアルで、暗号化DPMは未対応とあります)

意外と知られていない…


インターネットをいろいろ巡りましたが、あまりこの件で騒いでる人がいないのが気がかりです。
実は以下の点が原因では…?

  • バージョン3.5beta2からの問題?
もしや単なるバグでは。
  • HSP3Dishだけの問題?
通常のWindowsのみ版では動くのだろうか。
  • わしの勘違い?
これだったら石を投げられても致し方なし。

2015年11月12日木曜日

無駄な権限(パーミッション)は万病の元?

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

あやしいアプリ…


HSP3Dishでは、現在の最新バージョン3.5beta2からネットワーク機能が実装されているようです。もちろん、もちろん便利なのですが…その分、インストールするときに「ネットワークのフルアクセス権限」が要求されます。

ユーザにとってこれは気味が悪い。なんでゲーム内にネットワークを利用する場面なんてないのにネットワークアクセスなんて、すわスパイウェア!?

なんてことになるので、使わない場合はこの権限を要求しないようにします。

解決方法


HSP3Dish Helperで新規プロジェクトを作成したフォルダ直下に、「AndroidManifest.xml」ファイルがあります。その中に以下の2行があるので削除します。

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

ちなみに「android.permission.VIBRATE」はバイブレーション機能ですね…まあ別にこれはいいでしょう…っていうかHSP3Dishにバイブレーション命令あるの? と思ったらあった。

いざHSP3Dishでインターネット接続を使ったアプリを作った! ってときにパーミッションがなくて「アクセスできない! なぜだ!!」と騒ぐよりは、最初から許可して置いて「必要なかったら削除してね☆」のほうがいいですね。

ちなみに、これはとある方から助言を頂いて気づくことができました。ぶっちゃけAndroidアプリを開発する人にとっては常識のような気がする…精進せねば…。

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

やっほー、セルディアです。

Androidでリリースされました


ついに、ぷちぎるどVer0.62がAndroidでリリースされました!
Google Playの紹介ページがこちらです。


ちょっとしたバージョンアップについて


実は、Windows版よりちょっとだけバージョンアップしています。

といっても、追加点はささいですが…。

  • アイテム、キャラなどのリストスクロールが画面外に出ないようになりました。
  • 敵に与えたダメージ量に応じて、数字表示も大小変化するようになりました。
    (絶対値ではなく、その攻撃で与えられる最小・最大ダメージによって縮小・拡大します)
ばっちりHSP3DishでAndroidアプリが作れました。

2015年11月11日水曜日

HSP3Dishでの署名apk(リリースビルド)が生成されない場合について

やあ、セルディアです。

「ぷちぎるど」をAndroidで動かせるようにビルドして、いろいろデバッグしていましたが、現段階でのテストもほどほどに済ませたので、そろそろGoogle Playに登録してみようとしています。

署名されたapkが作れないぞ! なぜだ!


しかし、リリース版をビルドしようとしたときに1つハマったので、また備忘録として記録しておきます。

基本的には、次のURL先のドキュメント通りに処理すれば進められます。

http://www.onionsoft.net/hsp/v35/doclib/hsp3dish_ndk.htm#RELEASE

しかし、「リリース」ボタンからビルドしようとしたときに、なぜか「プロジェクト名.apk」のファイルが生成されません。

なんでや。

コマンドプロンプトの画面が出て、パスワードを入力して、署名されたファイルがどばーっと出るまではいいんですが…なんか一瞬警告かエラーを出して画面が消えます。
よく調べると、1つ目は警告でした。警告ならいいだろ(いいかげん)。
2つ目は、「zipalign」コマンドがないというエラー。何者…と思って調べてみると、apkファイルの最適化を行うコマンドみたいです。最適化という割には、最適化前のapkファイルを持って行っても実行できない気が…まあいいか。

zipalign.exeはAndroid SDKに含まれています。SDKのインストールフォルダから辿って「build-tools\23.0.1」ディレクトリにあります。(23.0.1以外もあるけど、一番大きい数字を頼れば大丈夫だろ…SDKのバージョンによって違うかもしれないので臨機応変に)

そして、またもや「hsp3dh.hsp」を改造します。「zipalign」コマンドを使うコードは1168行目にあります。今回はめんどくさいのでexeファイルのパスを直指定しました(環境変数Pathに入れても反応しない…なぜ)。あまりよくない。

解決方法


ということで、以下のように変更しましょう。

hsp3dh.hsp:1168行目
tmp+="zipalign -v 4 bin\\"+and_name+"-release-unsigned.apk bin\\"+and_name+".apk\n"

 ↓

tmp+="<インストールフォルダ>\\build-tools\23.0.1\\zipalign -v 4 bin\\"+and_name+"-release-unsigned.apk bin\\"+and_name+".apk\n"

文字列内だから「\」は「\\」で書くぞ!

無事署名apkファイルを作成できたので今回はここまで。

apkファイルを作っただけでは全然公開できない…なんかたくさん項目があってめんどくさいぞ…。

HSPはなぜこんなむごいことを…


HSP作者は何らかの原因でzipalignをパス指定なしで実行できるようにしてて気づかないのでは…そういうのよくありそうだけど、ユーザにとっては非常につらたん。

(2016年5月29日追記)
今さらですが、HSP3ベータ版最新では、「zipalignがありません、ここにコピーしてください」という旨のメッセージが出ます。hsp3dhの改造なんていらなかったんや。ご対応ありがとうございます。

2015年11月10日火曜日

HSP3Dishのミリ秒時間取得について

こんばんは、セルディアです。

今回は読み物です。長い。

ミリ秒を測りたい


HSP3Dishのコードを書いていて、処理時間を計測するためにミリ秒を取得したくなったので、とりあえずgettime(7)を使ってみました。しかし、Windows上ではちゃんと計測できるのに、Androidでは妙に数字が小さい。よく調べてみると、なぜかgettime(7)の値が0~100の間でしか動かない。

なぜか1/100秒の精度しかない…。

まさかAndroidではミリ秒精度のタイマーがないのか? と思いましたがそんなことはありませんでした。

HSP3Dishではgetreqという命令が用意されており、これでミリ秒を取得することができます。1ミリ秒ごとに1加算されるので、処理時間計測などに有効な値となっています。(Windows APIのtimeGetTime関数みたいに使えます)

逆にこれをHSP3Dish限定ではなく通常のHSPにも標準実装してほしいんですが…。

ミリ秒を測って、オートフレームレートを実装したい


なんでミリ秒を測りたかったかというと、処理時間によって描画fps(1秒に表示する回数)を60にしたり30にしたり、処理落ちによってゲーム速度・テンポを落とさず描画だけ頻度を落としたかったからです。

昔から、高スペックを要求するゲームでもオプションでfpsを変更できたり、3Dゲームではフレームレートがスペックによって自動的に上下したりしますが、あれを実装するのは割と大変です。

例えば、プレイヤーを上下左右に動かす処理は常に1秒に60回処理するとしても、プレイヤーを画面に表示するのは1秒に60回だったり、30回だったりするわけです。動かす処理と、表示する処理を完全に分離する必要があります。

うっかりミスで表示する処理に動かす処理を混ぜ込んでしまったり、表示する処理が実は裏で常に60回動いていたり…(後者は特に気づきづらい!)

オートフレームレートでも問題は残る


うまくオートフレームレートを実装して、処理落ちによるゲーム速度・テンポの低下が防げても、実は一つ問題が残っています。
それは、入力速度の低下です。上手にオートフレームレートを実装しても、入力を取得できるタイミングは、描画頻度に影響します。(30fpsで画面を表示しているときには、描画に1/30秒弱かかっています。そんなときに、1/60秒の頻度で入力を取得できるわけがないのです)
アクションゲームやシューティングなど、入力の精度が要求されるゲームでは、描画が遅いからといってこの手法はあまり使えません。

結局のところオートフレームレートは必要なの?


WindowsとAndroidで同じプログラムを動かしてみましたが、Windows上では1ミリ秒もかかっていない処理が、Android上では1/60秒以上かかっていました…貧弱ゥ!
がんばって実装しました。

2015年11月8日日曜日

HSP3Dish Helper のAndroid 版ビルド時のエラーについて

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

HSPにはAndroid、iOSで動かせるアプリが作れるHSP3Dishバージョンがあり、HSP3Dish Helperを使うと驚くほど簡単にビルドできます。が、突貫工事なのか、プログラムの規模が大きくなると、とにかくバグが浮き出てきます。

忘れないようにここに記しておきます。

今回、ビルドしたときに「エラー1 システムエラーが発生しました」と出ました。

なんのこっちゃ。こんなあいまいなエラーがあるか。

調べてみましたが、どうも「hsp3dh.hsp」の152行目にある『sdim tmp,$20000』のメモリ確保数が足りないようです。こういうのは自動拡張してくれるのがベストなんですが、まさか足りなくなるなんて…と言い訳したくもなりますね。
たぶん、コンパイル時のエラー出力テキストボックスの表示用文字列…っぽい変数で、警告の数が増えすぎたためにエラーが出た感じですが、結果的にエラーが出なくなったので詳細は調べてません。

hsp3dh.hspは以下のディレクトリにあります。
<インストールフォルダ>\hspsdk\hsp3dh

以下のように変更しましょう。

hsp3dh.hspの152行目:sdim tmp,$20000

 ↓

hsp3dh.hspの152行目:sdim tmp,$40000

これまた突貫工事。

出来上がったソースをF5で実行するなり、実行ファイルを作って置き換えるなりしましょう。

ちなみに、hsp3cnv.exeでも似たような原因で似たような対処を行っているのですが、それはまたの機会に。

2015年11月7日土曜日

ぷちぎるどの今後の予定について(ver0.61)

おはこんばんにちは、セルディアです。
ぷちぎるどの今後の予定について、予定を垂れ流します。

追加予定


ぷちぎるどは、以下のバージョンアップを予定しています。


  • クエスト拡張、追加
  • アイテム、敵キャラの追加
このゲームのキモなので、次々追加していきたいです。
最初は難しく考えず数を追加していって、あとからバランス調整していく形がいいかも。
  • クエストで戦闘以外のイベント追加
  • クエストのイベント分岐追加
アイテム入手や、罠などを追加したいです。
キャラのステータスによって、アイテムを見つけやすくなったり、罠を回避しやすくなったり…

変更考え中


以下のルールを変更するか考え中です。
  • 武器攻撃などで対象を選択できるようにする
武器や技などの物理攻撃が、対象も選べず一人にしか攻撃できないため、使い勝手が悪くなっています。このゲーム性でもいいか…? とも思ってますが、悩みどころです。

以上。

2015年11月6日金曜日

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

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

ぷちぎるどver0.61が、Vectorでリリースされました!

ダウンロードリンク
http://www.vector.co.jp/soft/winnt/game/se511621.html

変更点


  • 一部の魔法のバグが修正されました
条件を満たしたときに、「シールド」「バリア」「ウィンド」の魔法を使ったときにエラーで止まってしまう不具合が修正されました。
  • クリア済みのクエストが一目でわかるようになりました
ちょっとだけ達成感が満たされます。(今のところそれだけ)
  • ランチャーを追加しました
zipから展開したファイルがごちゃごちゃせずに、ゲームを起動しやすくなりました。
launcher.exeを起動して、「起動」ボタンを押すとゲームを開始できます。

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


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

6つのdatファイル
-------------
cenc.dat
chara.dat
ienc.dat
item.dat
party.dat
player.dat
-------------

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

2015年11月5日木曜日

そもそもHSPって?

読み物です。長い。

HSPとは…?

ちょっとだけ公式ホームページから引用。

・HSPは、お手軽に使うことのできるスクリプト言語システムです。 付属のエディタでスクリプトを書くだけで、誰にでも簡単にウインドゥズ上で動作するアプリケーションを開発することができます。 多彩な命令セットを使いこなすことで実用ツール、ゲーム、スクリーンセーバーなどを作成することができます。 

他のプログラミング言語で作る場合に比べて、恐ろしく簡単にゲームを作ることができます。

具体的にどう簡単?

他の言語に比べて、以下のメリットがあります。

  • インストールするだけで作る準備が整う
実はプログラムは、ゲームを作る前にたくさんの準備が必要です。実行する前に大量の設定を入れたり、ウィンドウを出すだけで何行もプログラムを書いたり、何個もファイルを作ったり…
HSPではそれがありません。インストーラを実行した途端、プログラムを書いて実行できます。
  • 構文ルール(プログラムのルール)が単純
プログラムを書くためには、もちろんプログラミング言語のルールに従う必要があります。変数をつかえる範囲が決まっていたり、関数を作るためのルール、呼び出すためのルールが厳しかったり…
HSPでは、かなりゆるくルールが設定されています。範囲外の変数を呼んで、使えない! なぜだ! と騒ぐ必要もないですし、ラベルを使えばプログラムの再利用も簡単です。
  • ヘルプが充実している
プログラムは、もちろん関数ごとに意味が決まっていますが、開発環境を構築しただけでは誰も使い方を教えてくれません。何か実現したいことがあったとき、本かネットの海に溺れることになります。
HSPでは、エディタでF1を押すだけで、関数の意味を教えてくれます。しかも、サンプルプログラムもついているため、具体的な使い道も知ることができます。

もちろんデメリットも?

残念ながら構文が簡単なことは、メリットだけでなくデメリットも生んでいます。

  • 自分で自分のプログラムを複雑にしてしまう(スパゲッティコード)
実は構文ルールが簡単だと、後から読んだり他人が読んだりした時に、恐ろしく読みにくいプログラムができることがあります。
(構文ルールを複雑にするのは、複数人でプログラミングしてもわかりやすくするためなのです。秩序や法律みたいなものです)
  • 単純すぎて、必要なものが足りなく感じる
他の言語を体験している人からは、構造体はないの? という声が一番上がります(体感)。関数ポインタも欲しいところですし、デバッガやエラー出力も少しぶっきらぼう。
ちょっと物足りなく感じます。
  • 動作が重い
これは本当にトレードオフの世界です。ルールを簡単にすればするほど、中の人の処理が多くなって、その分ゲームも重くなってしまいます。これは他のスクリプト言語にも言えます。

スタートを切れる言語

なんだかんだ言って、簡単なのは開発のモチベ維持につながります。
SFCやゲームボーイ、メガドライブのゲームや、1980~1990年代のアーケードゲームが好きで、そういったレトロなゲームとか、2Dのちょっと凝ったゲームを作るなら、HSPはイケるクチだと思います。
だって考えてもみてください。昔々に、オブジェクト指向とかGoogleコーディング規約に則って、お上品にプログラミングしてたなんて想像できない!

ゲームを作ってみたい、と思ったら、ぜひHSPを触ってみてください。

もっとメリットを教えて!

ココヨ…。
http://hsp.tv/make/hsp3.html

以上。

2015年11月4日水曜日

ぷちぎるどver0.60について

HSPコンテスト2015にゲームを応募しています。

タイトル『ぷちぎるど』



コンテスト内紹介ページ

http://dev.onionsoft.net/seed/info.ax?id=1098

(HSPコンテスト2015のページはこちら)
http://hsp.tv/contest2015/index.html

概要


RPGとしてはありふれた、剣と魔法のファンタジーです。
キャラを育ててパーティを編成して、クエストをクリアしていくゲームになります。

パーティは3×3マスの中で、6人までのキャラを自由に配置することができます。
前衛は剣などの近接武器で攻撃しやすいですが敵の攻撃も受けやすかったり、後衛では弓や魔法などの遠距離攻撃で大ダメージを狙ったりなど、配置や戦略が重要になります。
自分の好きな武器、キャラ、魔法などに合わせて、いろいろな戦略を立ててみましょう。

まだまだ発展途上なんですが、ゲームとしては小さくバランス良くまとまっています。
ミニゲームのような感じで遊べます。
しかし、実装したいルールや機能はたっぷり残っているので、バージョンアップを楽しみにしていただければ幸いです。

2015年11月3日火曜日

Hello World!

HSPコンテストでゲームを応募したことをきっかけにブログを立ててみました。
自作ゲームや、ゲーム制作に役に立つ知識を提供していきます。

昔からゲームを気ままに作っていたのですが、普段は身内だけの公開だったり、いわゆる凍結になったり、結果があまり伴ってませんでした。これを機会にちゃんとインターネットで公開できるゲームを作っていけたらな、と思います。

とは言っても飽きやすい性格なので続くかはわかりませんがね!!

まだ何もないですが、どうぞよろしくお願い申し上げます。