装備によるアイテム枠増減のプログラムできた(T_T)


2017年 10月4日
 
 
 いやあ、ややこしかった。

 おっと前々々回と入りが同じだ。

 どう処理したらできるのか分からなくて、もうダメかと思ったけど、何も考えずにブロック積み上げるように地味にベタベタと組んだらなぜかできた。

 まあ、難しい時はとりあえず紙に書くと良い。
 
 
 ソースはこちら。

 装備によるステータス計算の前半にぶち込む事にした。

 後半の 2ブロックはとりあえず前にも出た部分で、今回は関係無い。

 追加したのは増加枠の部分ね。

 
 
 どういう事をしてるかというと、まず変更前のアイテム枠の数をひかえ、アイテム枠の数に関係する知力の全装備アイテムの値を仮に計算して、現在の元枠数を出す。

 次に特殊装備枠に枠数増加のアイテムが装備されていたら、その値をアイテム枠数に足す。

 枠数が装備変更前の枠数と同じか増えてる分には変更無し。

 枠数が 7枠以上なら装備を外す必要が無いので変更無し。

 減った枠の分だけ装備をはずす。

 そしたら始めに戻って再計算。
 
 
 とまあそんな感じだ。

 字ヅラだけ追っても何の事か分からないだろう。
 大丈夫、自分にはさっぱり分からない。

 これによって枠増加のアイテムは元より、知力の増加するアイテムを付けたり外した場合にも対処できる・・・・ハズ・・・。

 まあ、後は追々バグを処理していこう。
 
 
 装備前


 
 
 アイテム枠増加アイテムを装備。
 サックは +3。


 
 
 とりあえず、能力値増加のアイテムを装備してみる。
 ガントレットは力が、サークレットはその他が少し上がる。
 ステータスが少し上がってると思う。


 
 
 サックをはずすと、減った枠のアイテムが自動で外れる。


 
 
 以上(T_T)
 
 
 
 さて、やっと基本的な枠組みが出来上がった様なので、これでいよいよ「戦闘」をプログラムできると思う。

 やっとメインかなあ、戦闘の要素は全プログラムの 2~3割くらいかな。

 という訳でまた次回。
 
 

装備のステータス計算を作った


2017年 9月30日
 
 
 その前にまずデータの扱いを整理する事にした。

 ud(ユニットデータ)、cd(キャラデータ)、id(アイテムデータ)、itd(アイテム元データ)、これらの変数の何番目が何のデータかという奴だ。

 最終的に今の所こんな感じになった。

 
 
 なぜこんな事をするのかと言うと、例えばキャラの 攻撃値格納が 15番で、アイテムの攻撃値格納が 11番だったりすると、扱いがややこしいからだ。

 例えば統一した攻撃値の計算だと ud(ug+11)+=id(ig+11)のようになり、要するにそれぞれ 11番目の値が攻撃値なので分かりやすい。

 今回それぞれ適当に手探りでやっていたので、データの扱いがバラバラだった。
 大変だが、まだソースが少ない内にやってしまおう。
 
 
 まず仕様番号の変わったデータを改変する、データコンバーターを作る。

 と言ってもしごく簡単だ。

 
 
 そしてプログラム内のデータの扱いを全て変えていく。
 隅から隅まで全部間違いなく変えないといけないので、これが大変な作業となる。
 
 
 ところでこれ、たぶんプログラマー的に言うとやってはいけない事だと思う。

 たしかプログラマーのハウツーに「最適化してはいけない」というようなものがあったと思う。

 なぜかと言うと必ずバグが発生し、不慮のバグが残る可能性が増大し、最悪の場合動かなくなるからだ。
 
 
 本当はデータの扱いを数字では無く、

 d_str=1
 ud(ug+d_str)、id(ig+d_str)

 のような変数扱いでするべきなのだろう。
 次回のプログラムからは考慮しようと思う。
 
 
 さて、その作業で(バカみたいに)2日程費やし、いよいよ装備によるステータス計算を行う。

 ソースはこんな感じ。

 
 
 装備無しの状態。


 
 
 武器を装備。

 う~ん、気がつかなかったけど魔法防御値もいるんだよなあ。
 うわあっ、そうだ魔攻値もだ。

 データ整理したばかりなのに、どうしたもんだろう。
 
 

 
 
 今の所 2番目以降の武器の攻撃値は足さない。


 
 
 防具のデータもまだ全部作ってないなあ。


 
 
 後はアイテム枠増加の計算が残ってる。
 これは頭痛いんだよなあ。

 枠増加枠に装備しているものが、枠増加アイテムを外した時に同時に外されるという・・・。
 
 

アイテムの選択画面を整理した


2017年 9月23日
 
 
 アイテムの選択画面を整理する。
 
 
 まずタップ座標を作って

 これは表示の座標も含まれていて、それを元にタップ座標を作っている。
 
 
 表示してタップエリアを確認して調整。


 
 
 それを元にキー座標を返す関数を作る。

 アイテム選択は 1~7、外すボタンは 8、戻るボタンは 9、ソート座標は11~16の値が返る。
 
 
 表示も整えて、こんな感じ。

 キャラ選択のをコピペして改造してあるので、押してすべらせればスクロールもする。

 8枠の 1つを潰して「外す」のと「戻る」のを加えた、これは後でキャラ選択にもつける予定。
 
 
 選択画面のソース。

 
 
 これで大体装備装置はできたと思うので、次は装備したものをステータス計算するプログラムを作る。
 
 

装備画面を作った


2017年 9月20日
 
 
 いやあ、ややこしかった。

 基本的に右手左手、片手持ち両手持ちがある上に、キャラによって装備スロットが違うと言う。
 これをつけたりはずしたりする、フラグの管理も大変だ。

 よく RPGでアイテム増殖バグがあったりするけど、これはその程度には複雑だからだと思う。
 
 
 とういう訳で装備画面。

 上 80ドットで選択装備、下 50ドットではずす事にした。
 この画面ではまだ装備してないので 130ドット全部選択装備だ。
 
 
 装備画面のプログラム、まだ全部できてない。
 バグも残ってる。

 見てもらえればいかに複雑怪奇か分かってもらえるだろう。
 単にスキルが無くて単純化できないだけかもしれないが。

 装備フラグはユニットデータの 40~46番という事に今の所なってる。
 ud(un*udb+40)の場所、これは元々2次元配列を強引に1次元配列にしているので、ややこしくなってる。
 udb=1ユニットのデータ量、un=ユニットNo.

 2次元配列なら単に ud(40,un)で済むのになあ。

 なぜ1次元配列を使っているのかと言うと、スマホ実機だとなぜか大きな2次元配列データを書き換えようとすると 7エラー(オーバーフロー?)になるから。

 両手持ちの場合、右手武器の左手には-1、左手武器の右手には-2を入れる事にした。
 ただこのデータをうっかり読み込みとエラーになる。
 きっともっと良い方法があるんだろうなあ。

 sbnは装備スロットの種類。

 dgとか dgsとかいうのは、オリジナルのデバッグ用変数表示。
 
 
 アイテム選択画面。
 キャラ選択画面ソースをコピペして改造してある。
 まだ未完成。


 
 
 選択すると装備できる。

 右手には武器、左手には武器と盾が装備できる。
 左手以降の複数武器は威力減衰をする予定。
 
 
 両手持ち。


 
 
 弓は左手の量手持ちになる。


 
 
 装備している状態でタップすると情報表示。
 これもまだできてない。


 
 
 今の所このキャラだけだが、変則装備種。

 ゲームバランス的にボツになる可能性もある。
 
 

 防具欄には体装備のみ、アイテム欄にその他防具をアクセサリーという形で装備するようにした。


 
 
 武器や防具を装備できないキャラもいる。

 黄色いのは特殊アイテム欄で、特殊アイテムは 1つしか装備できない。
 今の所特殊アイテムのアイデアは、アイテム枠増加しか思いついてない。
 
 
 アクセサリーなら装備できる。

 どこに装備してるんだろうね。

 アイテム欄には回復アイテムとか魔法とか装備する予定なので、アクセサリーは飾り程度にしかならないだろう。
 
 
 装備画面の表示プログラム。

 これもまだ未完成、後半情報表示がコピペしたキャラ表示のままになってる。
 equx2のような座標定義は別の場所で行っている。

 
 
 と言う訳で、まだバグてんこ盛りだが、経過報告でした。
 
 

キャラ選択画面を作成中


2017年 9月10日
 
 
 前回から 10日程経ったので中途半端ではありますが、経過報告です。

 というのもアクセス解析を入れた所、一日2~3人程の人に見てもらってるようで、思ったより見てくれているようです。

 実は 9月に入ってから涼しくなったので作業自体は割と順調でした。
 
 
 では前回から、まず作成したデータを本体に取り込んで表示。

 とは言っても、すり合わせがややこしく、これだけの事で 2日くらいは使ってます。

 データの扱いを整理したりしますので。

 そう言えば、おそらくプロの現場ではデータの扱いを始めからキチッと決めてから作り始めるんだと思いますが、ゲームプログラムですので、ゲーム内容を考えながら実装するため、永遠の思考錯誤スパゲティ増築工法となっております(笑)
 
 
 とりあえずテスト用にスタート時にユニットデータとアイテムデータを適当に作ります。

 変数について、ほんとは文字にして何のデータか分かるようにしないといけないんだと思います。

 でも自分はめんどくさいし、変数ごときにそんなに長々と文字打ってられないし、プログラムが長くなって何やってんだか分からなくなるしで、短く udとか unとか udbとか使ってます。

 短い変数だと別の所で使う可能性もあるので、あんまり良くは無いとは思いますが、思考錯誤しながらプログラムしてるのに長文なんて打ってらんないです。

 これ uならユニット、dはデータ、bは最大数と言う風に決まりはあります。

 iならアイテム、jなら自機、evならイベント、eなら敵、と言う風に自分なりに決めていつも使ってます。

 n=値、f=フラグ、c=カウンター、k=間隔、a=最小値、g=現在値、o=大きさ、r=乱数、s=文字列、t=時間、xyz=座標、pならputで表示、inならアイテムNo、cnならキャラNo、unならユニットNoとかそんな感じです。

 例えば自機座標なら jx,jy、HPなら jhpとかですね、これだけだと割りと普通だけど(笑)

 アマチュア仕様ですのでオススメはしません。

 たぶんプロのだと Jiki_xとか Item_Dataだとか文になってると思うのね。
 
 
 国表示画面で表示するようにします。

 この時点でこの画面では原則 mes表示はしてません。

 bmpフォントで数字を表示し、文字は作成してます。

 最終的に mes表示は全部使いません。
 
 
 スマホ用の操作にするため、ワンクリックで情報表示。

 選択カーソルも表示するようにします。

 この状態の選択キャラ上で、縦 130ドットの内、上 80ドットでキャラ選択、下50 ドットで装備変更になってます。

 キャラの無い状態だと 130ドット全部キャラ選択になってます。
 
 
 インフォ画面のプログラム

 まだ途中なのでバグが残ってるけど、これだけでも相当にややこしい。

 inf_key()は別の場所で #deffuncによりキー入力のプログラムを作ってあって、カード座標の上 80ドットは 0~9、下 50ドットは 10~19の値を返すようになってます。

 sel_syoは、前に作ったセレクト画面です。
 
 
 とりあえず報告ここまで、現在装備画面を作ってます。

 これがまた恐ろしくややこしい。
 
 

キャラのデータを作ってた


2017年 8月23日~8月31日
 
 
 なんと、あれから 10日ばかりもかかってキャラのデータを一通り作ってた。

 どんどん変更されていくデータだからザッとでいいはずなんだけど、もう疲れでヘバってた。

 暑い時期は終わるから、そろそろスピードアップできるといいなあ。
 
 
 前回と変わり映えはしないけど、中身は作ってある。


 
 
 火と水

 
 
 風と地

 
 
 光と闇

 
 

キャラエディッターができた


2017年 8月10日~8月22日
 
 
 キャラエディッター(以降元のデータをキャラ、ゲーム中作成されるデータをユニットと呼ぶ事にする)ができた。

 アイテムエディッターを流用改造したのでグダってる割りに 2週間くらいでできた。

 ほんとはこれくらいのプログラムなら、せめて 1週間くらいで作りたいところだ。
 
 

 
 
 データもこれから沢山改変されていくと思う。


 
 
 作成されたキャラクターデータ。


 
 
 風と地。


 
 
 光と闇(作成途中)


 
 
 参考までにエディッタープログラムをダウンロードできるようにする。
 (「一般的にはダウンロードされる事の無い」って出るけど、別にウイルスとか入ってないので大丈夫です、というかそもそもそんな技術持って無いと言う(笑))

 注意して欲しいんだけど、これはエディッターを公開してる訳では無いと言う事。

 ソースがグチャグチャで本人以外に分からないと思うし、流用してるので使ってないコードもあるし、画像は 2次配布に当たるので含まれない。

 このままでは使えないし、そもそも人によってデータの構造も違うだろう。

 これはあくまで「プログラムの参考」程度に眺めたい人にはどうぞ、という事です。

 CCの時のや、アイテムエディッターの残照が無意味に残ってるし、解析しようとか思わないほうが吉(笑)
 
 
 
 次は戻って装備画面をいじる予定。
 
 

アイテムエディッターが大体完成した


2017年 8月9日
 
 
 なんと 10日も経ってまだアイテムエディッターをいじってる。

 ほんと冷房あるのになんでこんなにバテるんだろう?

 結局 3週間くらいかかってるけど、装備ってプログラム制作の 2、3割りは占める作業だと思うね。
 装備とかアイテム要素とかって意外と手間だと思う。

 ただちょっと時間かかり過ぎだとは思うし、プロとして考えると仕事にはなってないと思うよ(笑)
 
 
 今の所、上限 250個でやってる。


 
 
 ステータス(データ)も増えてる。

 これもまだどんどん変更されていく。

 ゲームプロフラムは「やってみないと面白いかどうか分からない」というのもあって、仕様をどんどん変更しながら作っていくので、始めに仕様を全部決めてという事はあんまり無いと思う。

 どういうプログラムを組んで実装していくかも思考錯誤だしね。
 
 
 文字データは note命令を使った。
 ただしこれも一時的なデータで、最終的には bmpに名前を書き出して使う事になると思う。

 i_name.txt


 
 
 次はこのエディッターを改造してキャラエディッター、つまりユニットデータを作らないと、

 それが出来たら装備画面に戻って装備プログラムを作る。

 いずれにせよ、この辺はゲームの核の部分に近いと思うから時間はかかると思うね。
 
 

アイテムエディッターを作ってる


2017年 7月20日~7月28日
 
 
 という訳でアイテムエディッターを作ってる。

 相変わらず不調。
 なぜ不調なのかと言うと、早くも夏バテ(笑)

 2週間ほどバテバテしながら少しずつ作った。
 ほんとは 3日くらいでできなければどうしようもない、という感じもする。

 左側の空白ウインドウはデバッグモニターだが、完成したし別にいらない。

 左下のは作業用なんたらとか言うやつです(笑)
 合成音声実況を流してますが、ほとんど見ても無いし聞いてもません。
 でも楽しい気分で集中できるし、今の所必須になってます。

 ちなみに自分は耳栓してヘッドホンしてます。

 外の音を遮断するのに長い事随分悩んだんですけど、以降10年くらいはずっとこの仕様です。
 耳栓してるので、自分は耳が悪くなる事はありませんでしたが、親が呼んでも聞こえないのでよく怒られます(笑)

 必ず耳が悪くならないという保障は無いので、マネるなら自己責任でお願いします。
 
 
 制作しながら仕様がどんどん変わるので、このアイテムエディッターもどんどん変えて使っていく。

 アイテムのグラは Whitecatさんのを使う。
 
 
 エディッターの工夫としては、Whitecatさんのグラは pngだが、HSPだと pngの背景色抜きができない。

 HSPDishはできるが、HSPだと等倍の gcopyでしか抜けない。

 今回は 3倍表示にしたので、gzoomだと背景を抜いてくれない。

 そこで bufferに一度 gzoomで3倍表示させてから、bufferからメイン画面に gcopyする事にした。
 
 
操作はパッドでできるようにしている。

 まだ属性もつけなきゃいけないし、全然これから。
 
 
 saveすると、
 i_data.dat
 i_name.dat
 item.bmp
 というファイルが出力される。

 これらのファイルを本体で読み込んで使う。

 ただし文字変数の i_name.datについては、フォントを bmpで作るようかもしれないので使わないかもしれない。
 (忘れてた、HSP3以降だと文字型変数はbsaveでセーブ出来ないんだった。
  note命令を使わないと。
  さてどうしたものか)

 item.bmp

 HSPDishの celputで使うので、左上からアイテム No.1~で 10個ずつになってる。
 
 

bmpフォント表示を整理した


2017年 7月15日~7月16日
 
 
 絶不調。
 
 
 という訳で、とりあえずbmpフォントの表示をまとめる事にした。

 フォントをまとめて(セルの大きさは 16*16)

 
 
 プログラムを改定して

 
 

 
 
 コピペすれば使えると思うから、使いたい人はどうぞ。
 物足りない人は改造してね(単色なのでグラデするとか、色がきにくわないとか)
 グラは ALFARで描いてるので、それで開けばパレットが使えるはず。

 色はノーマル、火、水、風、土、光、闇を表す。
 ノーマルは灰色なので、白(255)がよければ光(5)でどうぞ。

 一番最後の「/」はプログラムでは扱えてません。