2020年 5月 2日
5月 1日
あ~あ 5月になっちまったよ。
どんなものでもそうだけど、見るの(予想)とやるのでは全然違うので、開発には想定外の困難が付きまとうのが常で簡単にはいかないし、作業の進捗(しんちょく)はまるでカタツムリのようにいつも感じます。
このゲームの開発でもずっとそうだったけど、これだけのゲームを作るのさえほんとに難しくて、もう 3年になる訳です。
「予算も時間も想定の 2倍を考えておけ」とは言われる。
もちろんニートである自分はほんとに才能も無いし要領も悪い。
以上、壁にぶち当たった時のいつもの愚痴でした。
それでは続きを。
まず #deffuncの総数がビルドエラーの原因なのか確かめる。
strategy.hspを封印したまま #deffuncを沢山書いてみる。
そもそも strategy.hsp内に #deffuncがいくつあるのか数えると 35個でした。
という事で 30個書いてビルドしてみたけど問題無し。
35個で失敗になりました。
33個までは大丈夫で 34個からビルドエラー。
これは strategy.hsp内だけの数で、問題になってるのは全ソース内の #deffuncの数。
めんどくさいけど、これは参考のためにも数えるしかない。
総数で 267個でした。
半端な数なので、これが 255個とかだと分かりやすいのですけど、あるいは *gosubも含めた数なのか、ほんとに #deffuncの総数が原因なのかもよく分かりせんけど、この場合は #deffuncの総数 267個で ANDROIDのビルドは NDKビルドエラーという事のようです。
足りないのは 3、4個なので、消しても問題ない #deffuncを潰してみる。
幸い(?)dbg_put.hsp(デバッグ用表示)は必要なソースという訳では無いので、これをいくつか潰せば良い。
試しに *gosubのを 3個コメントアウトしてみるけど、これはビルドエラーなので、やはり #deffuncの総数という事になるようだ。
いやまて、その後なぜなのかは分からないが #deffuncを 10個くらい潰してやっと全部動いたので、これだとやっぱり総数 255個くらいできりが良いのだろうか。
dbg_put.hspの #deffuncはデバッグ確認用のソースなので、その時使ったらほとんど使ってないソースだった、そのせいで 10個くらいなのだろうか?
(MZKさんの情報によると、あるいはネストの数かも?)
いずれにせよ、よくは分からないが #deffuncの数の調整でやっと全て動くようになった。
N05D
画面は真っ黒だが音楽はなってるし、動いてはいる。
SO-02K
問題なく動いてる。
これで後問題なのは。
1、音源の読み込みが #37で止まってしまう。
2、古い機種で画面が表示されない。
の二つかな、はあ、先は長い。
それではまず N05Dの真っ黒問題から。
まず音の読み込みをコメントアウトしてテストするが真っ黒。
次にエフェクトの画像関係を全てコメントアウトにすると、表示された。
という事で原因は実機のメモリ問題で OK。
MZKさんのコメント情報によるとファイル数らしい。
合わせて音声ファイルの上限は30個だそうなので、ここでは実機メモリは関係ない可能性がある。
よし、ではゲームはできるのかと進めたら落ちた。
実機だとゲーム部分も動くが ANDROIDだと動かない要素がまだあるらしい。
SO02Kでも同じなのでメモリの問題では無い。
とりあえず N05Dのメモリは 1GB、SO02Kのメモリは 4GB、なに?自分の PCのメモリと同じじゃんか。
という事で続きは明日。
5月 2日
という事で先に、どのソースの部分が動かないのかから調べてみる。
開放した strategy.hspが問題だと思うので、関連するソースの hextrategyルーチンを少しずつ開放する。
既にここで落ちるので、ここまでのどこか。
段々絞っていくと、どうもそれ以前のマップ初期生成で落ちてる。
この部分のようだ。
ここ(569行)で落ちてるのが分かった。
もちろん PC起動では問題ない、roundだろうか?
同じ簡単な式を始めのほうに書いてテストしてみる。
これだと問題ない。
ソースに戻って分解して探ると、これだというのが分かった。
つまり double(md(mdg+1)) というのが問題なのだが、これのなんだろう?
md(mdg+1)の値は 5000だけど・・・、値じゃ無いのは確認した。
すると md(mdg+1)が問題なはずなんだけど・・・。
md(mdg+1)の値を、一旦 nに格納してみる。
これだと上手く行く、うーん。
変数の使い方かなあ。
md(mdg+1)を、あらかじめ nに mdg+1を入れて md(n)にしてやってみる。
これでも上手く行く。
つまり ANDROIDの場合 double(md(mdg+1))はダメで、double(md(n))としなければならない。
この doubleカッコ内の変数で、配列変数の値を足し算したら落ちるという事だ、これほんと?
ではソースを次のように変えて、と。
動きました、これは分からん。
ソース内に double内で配列変数の番号の値に足し算する書き方はたくさんあるようだ。
double(n0+n1+n2)のようなものは動作確認したので、あくまでも配列変数の番号に対する doubleカッコ内での計算は NGという事だ。
もちろん HSPで実行する分には問題ない、ANDROIDではできないようだ。
今日はもう終わり、明日はソース内の全 doubleのチェックからする事にしよう。