2020年 4月 21日
4月 14日
いよいよ最終段階としてビルドを試みる。
ビルドは Hextrategy製作初期の HEX描写テスト以来やってないと思うので、いきなり全部可動までできるかどうか分からない。
特にコメント欄で mzkさんのご指摘もあった通りソース内の #defcfuncが動くかどうか分からないので、それ以降は #defcfuncは使ってませんけど、それまでの少数使ってるのを修正する必要があるかもしれません。
とにかくやってみましょう。
追記 : 結論を先に書きますけど、ビルドが通らなかったのは #defcfuncのせいでは無くて #deffuncの呼び出し後にそのソースが書かれていたからでした。
しかしなぜか HSPで動作させる分には記述が後でも普通に動いていたので、前からそうでしたっけ?
という訳で HSP Dishで製作時に気をつけるのは以下の通り。
1、#deffuncの記述は必ずその呼び出しの前に置く。
2、#defcfuncは(なるべく)使わない。
3、ビルドと実機テストは最後にでは無くて、折々にちょくちょく確認しながら製作する。
当たり前だけど、めんどくさくてやって無かった。
たぶん 2年くらいビルドした事無いので Dish helperの使い方から忘れてる。
そこで前にいじった時の記事が役に立つ。
それでは Dish helperを立ち上げてみる。
ふむふむ、設定は残っていたこのままで良いかな。
最新のバージョンがどうとか良く分からないけど、とりあえずやってみてこれで動くならいいや。
と思ったけど、この時点で公式のHSPバージョンがどうなってるのか一応確認してみる。
今は ver3.5が正式バージョンになっていて、3.6βが出ているのか、ふむふむ。
3.5の更新履歴を見るに、今使ってる 3.5βとそれほど変わってるとも思えないので、とりあえずそのまま使ってみる。
つまり javaとか sdkとかバージョンをいじると安定動作するかどうかまた分からなくなるので、前回起動していた環境で問題が無ければ、なるべくそのままにしたい。
まずやる事はデータファイル(.dpm)を作る事。
(MZKさんの情報によると HSP3.6βではまた dpmファイルは使えないようです)
これまた前回の記事が役に立つので、それを参照しながら進める(もう忘れてる)
それじゃあ dataフォルダを作って、と。
必要なデータ、音以外(wav、mp3)の pngや datを入れて揃える。
4月 16日
データをピックアップして dataフォルダに揃えるのに 2時間程かかった。
たぶんファイル総数で 200くらいある。
ファイルネームは全て、英数小文字で拡張子を入れて 12文字以内に書き直してる。
合わせてプログラムソース内の呼び出しネーム(celload “mj_26.png”とか)も、全部小文字か確認する。
ビルドしたものを置くフォルダを指定する。
プロジェクト名を書く、テストなので test1でいいや。
そしたら新規作成を押す。
するとプロジェクトファイルが作成されます。
作成されたファイルの中に assetsフォルダがあると思うので、音関係のファイル(wav、mp3)のファイルはこちらに揃える。
こちらも揃えるのに 1時間ほどかかった。
ソース(プログラム)を指定します。
今は 60番目のファイルで、その中でプログラムスタートのファイル、この場合 main.hspなのでそれを指定します。
念のためファイル名が全部英語になるようにしました、この場合ビルド → buildに直してます。
データファイルの場所を指定します。
これは先ほど作った音以外のファイルの事です。
準備ができたのでビルドボタンを押してみましょう、ドキドキします。
途中でビルドが止まってしまいました。
流石に一度でうまくは行きませんね、原因はなんでしょう。
4月 18日
まず celloadや mmloadをコメントアウトして無効化してみるが、今の所それは関係ないみたい。
次に.asファイルが引っかからないか試してみる。
これだとどうも「足りない」と言われるみたい、ソース内で使ってるからね。
そうじゃ無くて「クリーン」ボタンを押すと必要なファイルまで削除してるみたい。
今度は最小ファイルでできないかやってみる。
これも足りないと言われる。
クリーンにしたのでそうなるらしい、クリーンボタンは使わないほうが良い?
この場合は条件が特殊です、クリーンボタンはビルド毎にちょくちょく押した方が有用な場合があります。
ソースに変化があるからかもしれないけど・・・。
ソースを戻したら、そのままパスが無いと言われて変な事になったので
test2に作り直す
今度は *battle(戦闘)のソースを returnにして無効にしてみる。
少し長くビルドして内容が変わった。
*battleのジャンプ先を見てみると #defcfuncが何個かあったのでやはりこれか?
4月 19日
#defcfuncを #deffuncに直す修正をしている。
4月 20日
#defcfuncの大部分を #deffuncに修正し、残りをコメントアウトしたが、ビルドは通らないので原因は別のようだ。
仕方ないので、まず最小単位からやってみて徐々にソースを増やしてどこが引っかかるのか調べないといけない。
最小単位だとこれ。
これだと流石に通るが、妙にビルド時間が長い。
次にメイン部分を解禁して。
他の要素を封印してみる。
まあ、これは同じようなものだから通る。
順番に開放してみる、まず初期。
これは通るのでデータの読み込みに問題は無いみたい。
参照順番があるので参照順に開放する、まずは関数から。
大量に未定義の変数があると言われるが、ビルドは通る。
次はデバッグプット。
普通に RUN(実行)するとエラーが出るんだけど
これは呼び出し命令がまだ開放してない put.hspにあるため。
でもこれ、本来は #deffunc呼び出し記述がそのソースより前にあると動かないはずなんだけど、製作中は普通に動いていた。
今の HSPでは呼び出し記述が前でも動くようになってるのか?あるいはこれが原因なのか。
その部分をコメントアウトにしてビルドすると通る。
でもコメントアウトしない場合のビルドは、コンパイル始める前にエラーがでるのでビルド中の不具合とは違う。
どうも unit_data.hspや item_data.hspから put.hspの呼び出しがあるみたいなので、put.hspの順番を変えて前にもってきてみる。
unit_dataと item_dataを開放。
呼び出しが入れ子になってる部分にクッションを置く。
これでビルドが通る。
effectはデータの読み込みなので問題無いとして、今度は syori。
大丈夫みたいだ。
selectと equipmentは equから selの呼び出しがあったので順番を入れ替えた。
これも通った。
次は battle.hspと war.hsp
#deffunc str_map_putの呼び出しが前にあったため、それよりソースを前の方に移動する。
これで通った。
次は ordinance.hspと strategy.hsp。
最後に map.hsp、title.hsp、oped.hsp、これは特に問題無かった。
これで全ファイルインクルードは問題なくビルドが通るようになった。
今度はコメントアウトしていた部分を戻す。
4月 21日
*openingと*titlの開放は ok
さらに*game_start、*hextrategy、*game_over、*game_clear、*endingとビルド通った。
大体これで全部ビルドは通ったように思う。
後 battle.hspに #defcfuncの箇所が 5個程残ってるので、これを #deffuncに直そうと思う。
結局ビルドが通らないのは #defcfuncのせいでは無かったようだが、折角だし念のため。
修正箇所が沢山あったので大変だった。
ビルドも問題無く通る。
改めて全データ読み込みでビルドが通るか試してみる。
ビルド通りました。
今回は読み込みファイルの名前を、あらかじ英数小文字 12字内に統一していたので、データの読み込みでは引っかかりませんでした。
今回色々とソースをいじったので、またどんなバグが潜んでいることやら・・・・。
次は実機テストです。
3.6βからはひとまずdpmファイルが使えずassetsに全て入れないといけないようです。私もまだ3.5ですがバージョンを切り替える際は色々勇気が必要ですね。
deffuncの中でdeffuncしている場合なんかもビルドは通るけど実機とPC(F5)では動きが違ったりするのでとにかくネストが深くならないように書かないといけないみたいです。
ネストが深くなければdefcfuncを使っても大丈夫なように思います。
何はともあれ無事にビルドできたようですね!楽しみにしています。
MZKさん、すみませんまたコメント見逃してました、たまにしか無いので(笑)
え?え?そうなんですか?
dpmファイルについては始めから扱いが難しい感じではありました。
deffuncにはそういう制約もあるんですね、なるほど。
defcfuncに関しては今回は理由が分からなかったので修正しましたけど、問題があったかは未検証になります。