一人で完成まで頑張るの寂しいからかまって [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
・ウディタ製
・RPG
・ぼくがたのしいとおもったしすてむ
・ぼくがたのしいとおもったばらんす
・基本システム流用できるところは流用して楽していく
・エタらないように頑張る 恒星系の海賊の生成と描画が出来た
AIはまだ空っぽで動かない
デバッグ用に、敵を画面の中心にサイズ固定で描画して
方向転換が正しく出来てるか、テスト表示できる様にした
画面のUIに余裕が有れば、これを使って
サイト付近の敵を小さ目にHUDに描画するのも
格好良いかも 海賊のAIを取り敢えず2つ分だけ考えた
実装したら説明する 海賊の直進移動を作った
向いている方向へ動く
恒星系の敵の進行方向は円柱で表す
円柱の穴を常にZ座標に向けていて
自機か敵がロールすると円柱がネジ状に回転する
敵がピッチで機首を上げ下げすると
円柱の周囲に放射状に開く
ピッチとロールの角度だけで向きを管理してる訳で
ポリゴン3Dゲーとしてはデタラメだけど
スプライト2.5Dゲーとして割り切る x,y の速度は、ロールとピッチの角度をそれぞれ
サイン波状の三角波に変換して
掛け合わせで合成して求める
z の速度は、ピッチだけで決まる
「ロールの三角波」
r = (ロール角度 + 90) % 360
r < 180 なら r = (90 - r)
r >= 180 なら r = (r - 270)
「ピッチの三角波」
p = (ピッチ角度 + 90) % 360
p < 180 なら p = (p - 90)
p >= 180 なら p = (270 - p)
「x の速度」
vx = (r * p / 90) * 速度 / 90 恒星系の海賊 B の AI を作った
旋回して自機の後方につける→追い抜く
を繰り返す
自機の前方にいる時は
ピッチを ±30 に向けて
z 軸のマイナス側(後方)へ向かう
自機の後方にいる時は
ロールで天頂を自機に向け
ピッチを 160±10 に向けて
自機の方へ斜めに向かう デバッグ用のレーダー表示も作った
描画x = 敵のx * 表示範囲 / 敵の最大x
描画y = -敵のz * 表示範囲 / 敵の最大z
拡大率 = 4%くらい
で描画するだけ 通路と虚空の自弾の当たり判定で
連射しないと当たらないバグを多分w修正できた
微妙かも試練
敵のz座標が先頭と末尾の弾の範囲外だったら
二分探索せずに終了する所で
弾のz方向の幅を計算に入れて無かった 恒星系の海賊 C の AI を作った
自機の方へ旋回して急接近→突っ切ったら反転
の一撃離脱戦法を繰り返す
生成時の初期化でフェーズ = 0
フェーズ 0 の時は
ロールで天頂を自機に向け
ピッチを自機の方へ ±30 に向けて
最大加速
自機に近づいたらフェーズ = 1
フェーズ 1 の時は
そのまま直進
自機から離れたらフェーズ = 2
フェーズ 2 の時は
ピッチを自機の方へ ±30 に向けつつ
減速
速度が 0 になったらフェーズ = 0 マウスでエイムするわけじゃ無く
カーソル・キーで移動もエイムもするゲームなので
当たり判定は基本ガバ
パッドFPSでも自動エイム必須だし、問題無い
SpaceSSSで自動エイムすると、移動がおかしくなる
スプライトゲー作った事無い奴に限って
ポリゴンゲーの常識色眼鏡でベラベラ語る 恒星系の海賊グループのエンカウント処理を作った
1. マップの初期化で地形毎に
グループ単位の比率を設定して置く
2. グループの比率に応じて
ランダムにグループを選ぶ
3. グループによって敵の種類毎の比率を設定する
4. 敵の比率に応じて、ランダムに敵を出現させる
5. 敵の出現数分 4. を繰り返す 比率に応じてランダムに選択する処理
比率A = 20
比率B = 30
比率C = 50
比率D = 60
比率の合計 = 比率A + 比率B + 比率C + 比率D
n = 乱数(1〜10000)
n %= 比率の合計
(n < 比率A) なら
敵Aを生成
違うなら
n -= 比率A
(n < 比率B) なら
敵Bを生成
違うなら
n -= 比率B
(n < 比率C) なら
敵Cを生成
違うなら
n -= 比率C
(n < 比率D) なら
敵Dを生成 恒星系の海賊 A の AI 作った
フェーズ が 0 の時
自機と直角に向いて、前方を旋回
一定時間後、フェーズ = 1
フェーズ が 1 の時
自機の後方へ移動
後方に離れたら、フェーズ = 2
フェーズ が 2 の時
自機と直角に向いて、後方を旋回
一定時間後、フェーズ = 3
フェーズ が 3 の時
自機の前方へ移動
前方に離れたら、フェーズ = 0
以上を繰り返す 海賊の残り3種類をレンダリングして
スプライト・シートに列べた
これで種類毎に違う画像で描画される PCのミサイルの画像作った
本体 + スモークで 4 枚使うとすると
PCが 4 発 x 4 枚 = 16 枚
敵が 4 機 x 4 枚 = 16 枚
足して 32 枚のスプライトの座標を
回転させる事になるので、一寸重いかも試練 恒星系の自ミサイルの初期化とイテレータ作った
取り敢えず休憩 自ミサイルの発射処理を書いた
敵の中から描画座標がレティクルの範囲内で
自機に一番近いものを探してロックオンして
ミサイルのデータを設定する
移動と描画はまだ出来て無いので
ロックオンや発射とかの効果音だけ 後でリファクタリングしなくて良い様に
考えて作ってるので、亀の様に遅い
ツクールで順番並べ替えたりするのキツいんでな
何言ってるか分からんだろうけど 自ミサイルの移動処理を作った
ミサイルの座標だけ回転させて
移動ベクトルの方は回転せずに
毎フレーム計算する事で、処理を軽くした
ミサイルのスモークの座標も回転させないで
数珠つなぎに座標をコピペして行くだけにしたけど
そもそも宇宙空間でスモーク出すのはおかしいので
恒星系のサブ・ゲームの時だけカットするかも
設定フラグでスモークをOn/Off出来る様にしとく 自ミサイルの描画作った
ロックオンして無い状態で発射すると
ショボい効果音で真っ直ぐ飛んで行く
ロックした敵へのホーミングが
まだ少しバグってる 自ミサイルの当たり判定作った
ホーミングのバグは
敵とミサイルの距離を計算する所が
敵と原点(自機)の距離になってた
逃げる敵機をミサイルが追い掛けてって
ドーンするのが楽しい ロックオン可能範囲に敵の見た目の幅を加味した
ミサイルはフレアを使わない限り
ロックしたら、ほぼ確実に当たるので
ガバにしないで厳密に範囲チェックする様にした 自ビームの当たり判定作った
通路のビームの判定をコピペして
座標のスケールを調整しただけ
代入の右辺値は変数名が表示され無いで
変数番号だけなので
コピペだからと気を抜いてると
書き換えミスでバグが入り込む グレネードの画像のチョイスをしたり
細かいネタ出し等をした
ミサイルを実装し終わってから
グレネードを作るか
同時並行でやるかで迷う 自弾のボムの画像作った
敵にダメージを与えるだけで無く
敵弾も吹き飛ばす
グレネードと言う設定だったけど
白兵戦の手榴弾のと被るし
スペックがそのまんまなので
ボムに変更した(分かり易い ボムの初期化とイテレータ書いた
弾が爆風に隠れ無い様に
爆風と弾のピクチャ配列を
連番で無く別けて確保した
内部的に連射できる様に作るけど
実際は単発か、爆風が出てる間に
もう一発撃てる様に2発に設定する ボムの発射と移動処理を作った
サブ・アイテム・キーを押して発射
放すと爆発する
但し発射直後の数フレームは爆発しない
まだ描画は出来て無いけど
効果音を聴く限りは、きちんと動いてるっぽい >>199
すっちむでVXのセールしてたので買って置いた
立ち上げて直ぐそっ閉じしたし、多分一度も使わない
素材の利用規約に従っただけ
ツクールは知り合いに
「1000枚のスプライトはこう使う」
って手本を観せるためだけにやってるので
これ1本作ったら終わりにする ボムの当たり判定を作った
賞金首とか依頼で稼いで
ボムとかミサイルいっぱい買えば
ボス戦とか強目の敵に仏波できる様にして
3Dシューティング苦手な人にも
救済措置を用意する 配列に相当するものの中の構造体の様なものに
アクセスする時は、メンバーへのポインタを
列べたものを経由する
で、イテレータをインクリメントする時は
このポインタの列びのそれぞれに
構造体のサイズを加えるのだけど
列びの数だけループを回すと
めっちゃ重くなってしまう
なので変数番号の範囲を指定して
一括でサイズを加えると軽くなる
その代わり一括指定の範囲に
マジックナンバーを埋め込む事になって仕舞う
スクリプトのあちこちに散らばると
メンバーを追加/削除する時に
面倒な事になるしバグも発生しやすい
で、結局イテレータを進める時は
汎用のものでは無く、構造体毎の専用の
イベント(サブ・ルーチン)を呼ぶ様に
暫く前に変更したのだけど
今日は変更し忘れてる部分をチェックして修整した
最初からその様にして置けば良かったが
ツクールは初めてなので勝手が分からなかった 武器の切り替えキーを押した時に
所持しているアイテムの中から
自動で次を選んで装備する様にした
武器のアイテム分類を
メイン・ウェポンは武器
サブ・アイテムは楯
として扱う様に設定した >>235
今までは装備とかしないで
アイテム番号の数値だけで取り扱っていた 衝角を実装した
装備して置くと、敵と衝突した時に
ダメージを与えられる
ゆっくり衝突すると
連続でダメージが入ってしまうので
敵を斜めに弾き飛ばす様にした 恒星系の敵のダメージ表示/爆発を作った
取り敢えず恒星系の通常戦闘は、これで暫く良し >>238
GTDチェックしたら、まだ敵の攻撃がごっそり残ってたワ 通路のミサイルの処理を作った
発射/移動/描画/衝突、全部おk
コピペ→チャンポンだし頑張れば直ぐ終わるな みんな、しょっぱなからデカい規模のゲーム選びすぎだよ
だから続かない。
RPGなんて典型。
すげ替えて完成させるわけじゃ無し、
素人なんかにゃ根気が続かないよ。 通路の衝角の処理を作った
恒星間通路での自機の攻撃は取り敢えず良し
明日は休みにする おうっ何かかまってくれてたのかw
むしろ根気しか取り柄が無いし 板違いになるがボドゲ制作いいぞ
ルール妄想して、フリー素材でカード作って
サイコロ用意すれば、対戦でもソロでもおk
ゲムマに出展すれば予算も回収できるし 地表面のミサイルの処理を作った
生成から当たり判定までは直ぐ出来たけど
描画か座標計算が上手く行か無くて
一日中ウンウン唸ってた
今日はもう眠いので続きは明日にする 寝る前にデバッグの手を思い付いたので
やったら直ったワ
ミサイルは出来上がり ミサイルのZ速度が速すぎてX,Yが当たる前に
遥か彼方に逝っちゃってるだけだった
遠近感が崩壊してた 効果音の再生ルーチン作った
SEを割り振ったりする時に
SE再生がソースの彼方此方に分散してると
面倒なので、一ヶ所にまとめた
引数でSE番号を指定して分岐する訳だけど
テーブル・ジャンプ出来る様な
switchとか関数のポインタ呼び出しに
相当する制御文が無いので
if文を大量に並べる事になる
一応、番号の範囲でザックリ分割してから
それぞれのサブ・ルーチンを呼んで
ifのチェック回数を減らす様にはしてる
変数でイベント番号を指定して呼び出せると
良いんだがな… c#ならdictionaryに番号と関数を対にして直呼び出すっていけそうだけど…… >>251
まともな言語なら普通に出来るけど
ツクールなんでプログラミング
出来ない子向けの仕様になってる
仕様がない 地表面のボムの処理を作った
一部のSEが急に鳴らなくなって
おや?って思ったけど
SE関係の変数を後ろの方に確保したのに
スタックの先頭アドレスをずらし忘れたバグだった 地表面の衝角の処理も作った
ガンッて体当たり攻撃する
後背からドッグファイトして来る敵は
すれ違いざまにビームを撃つタイプなので
追い越させない限りは、当たら無い様にした
これで地表面はおk 虚数空間の自ミサイルの処理を作った
ミサイルの座標を弄って無いのに
勝手に書き換わってて
メモリ絡みの不味いバグかなーと思ってたけど
ミサイルの各処理を呼ぶハブ・イベントで
別のサブ・ゲームのイベントを呼んでただけだった
コピペする時に変更するのを忘れてた 虚空のボムも作った
横方向に画面いっぱいの当たり判定にした
元ネタ探しのオマージュゲーになってる >>258
いや普通の
良く分からん添加物いっぱいのより
砂糖入りの飲んで筋トレで燃焼させる方が
体に悪く無いかと思って 虚空の敵の攻撃パターンを2種類ネタ出しした
全体で一度に一種類の攻撃をして来る
恒星系と地表面の海賊は
PCと大体同じ攻撃/防御をする BGMをシーン毎に割り振った
朝から15時間くらいずっとやってた
手順は
・BGMファイルを一番上の階層のフォルダに全部入れる
・戦闘/移動/惑星/イベント等のフォルダを作って
そこへBGMを大雑把に放り込む
・ピンポイントで使えそうな曲が有れば
直接下層へ入れる
・更に下の階層のフォルダに細分化する
・余ったら上の階層へ戻して再分配する
絵や音の割り振りや動画の編集なんかの作業は
一番目くらいに楽しいので監督が独占する 全部で108曲繰り返し聴きながらやった
もう当分いいや なんでそんなにモチベが続くんですか
ワイはすぐゲームをしてしまう >>264
自分からしたらゲーム「やる方」のモチベが
続か無くて困ってる
すぐゲームを作ってしまう 惰性で続けちゃう時が往々にしてありますし、それなりに進めようと思ったら結構時間かかっちゃうしそれぐらいがきっと丁度いいんですよ
見習いたい SE(効果音)に関しては自分の場合、SEの自作スキルがないから、外部リソースに頼らざるを得ないんだが、
外部の膨大な母集団の中を探し回ってローカルディスクに確保した候補の中から選ぼうとする時、なかなかイメージ通りの音が見つからなくて決められず、
また外部リソースの膨大母集団の中を探しに奔走する段階に戻ったり、その繰り返しでなかなか進捗が上がらない。
あと重ねて再生すると聞こえなくなったり、インパクトが消えるものもあるから、ボリュームの調整も面倒だな。
そんなこんなで、SE決めはどちらかというと憂鬱な作業で決して楽しくはないなw
決められない自分にも問題があるんだが >>266
うまく行ってる間は無理に変えない様にするかな >>267
自分のイメージにピッタリ合った素材を求めると
結局自分で作るしかなくなるので
逆に既製の素材からイメージを作って膨らます
くらいのスタンスの方がいいかも 虚空の自機の衝角を作った
後ろから追い越して行く敵にも当たるけど
ダメージを与える全方位バリア的なもの
と言う事にして置く ビル街の車の衝突判定を作った
流石に主人公が街中でビームドンパチ
する訳には行かないので
黒塗りの高級車を相手に
自動運転切って派手にぶつけ合う 今日は車の衝突の火花を作ろうとしたけど
座標か何かがおかしくて描画が上手く行か無い
衝突にバグが有ったので、それは修正できたけど
時間切れなので、続きは明後日&明日はお休み >>272
サブルーチンの引数を入れる変数の中身を
ローカル変数に退避しないまま
別のサブルーチンを呼んで
上書きされて仕舞っていたのと
衝突方向のオフセットが左右逆なのが
原因だったので、それぞれ修正した
自機の攻撃は取り敢えずここ迄して
他の作業に移る 恒星系と地表面の海賊の攻撃の
動作と描画の仕様を大体固めた
恒星系ではメイン/サブ武器を
比率に応じて使い分ける
地表面では前方から来る敵は
全てミサイルで攻撃して来て
後方に付ける敵はメイン武器を使って来る 海賊の武器の画像作った
ボム以外は自機と同じ武器を使うけど
画像は使い回し出来ないので作業した 海賊の攻撃のサブ・ルーチン群の枠を確保した
昨日は家族サービスでツクール用PC取られてたので
あんまし進捗せんかった 恒星系の海賊のビームの初期化と
イテレータの処理を書いた 恒星系の海賊のビーム作った
座標の回転だけでかなり重いので
速度ベクトルはデータに持たせ無いで
回転を省いた
d = max(x, y, z)
フレーム数 = d / 最大速度
発射時にx,y,zの内一番自機から遠い距離を
最大速度で割って、衝突予想フレーム数を
求めて、敵弾のデータに保持する
フレーム数 -= 1
xの速度 = -(xの距離 / フレーム数)
yの速度 = -(yの距離 / フレーム数)
zの速度 = -(zの距離 / フレーム数)
x座標 += xの速度
y座標 += yの速度
z座標 += zの速度
1フレーム毎に、衝突予想フレーム数の
カウントを減らしながら
距離をフレーム数で割って速度を求めて
敵弾を移動させる
今時のゲームの物理演算と比べると
色々出鱈目だが、スクリプトの実行速度との
トレードオフでこの辺りが落とし所となった いつも見てます
「フレーム」「x,y,z」「ビーム」などかっこいい言葉が頻繁に出てくるので好きです
これからも頑張ってください >>279
ありがとう!
用語はスーファミとかメガドラなんかの
スプライト全盛期のを意識してます 海賊のビームの当たり判定と
自機のダメージ・エフェクトを作った
衝突予想フレーム数が 1 より大きければ
まだ当たっていないと判断出来るので
それを真っ先にチェックして弾いてから
座標のチェックをする
ダメージ・エフェクトは画面サイズの
ベタ塗り画像を背景と敵の間に
差し挟んで表現する
色は黒→白→黄色の順にアニメさせる 海賊のレーザーを作った
下向きで3段階の角度を付けたレーザーの画像を
拡大率100%固定で敵の見た目の座標から発射する
画面の下半分はコクピットなので
これで大体それっぽく見えると言う寸法 レーザーの当たり判定を作った
自機を上下に動かしてる間だけ
カウンタを増加させて
それ以外なら0でリセットする
判定の所でカウンタが一定値未満なら
その時点で敵が撃っているレーザーが全て当たる
レーザーはエイム→射撃→即着弾な
当て易い武器と言う設定 海賊のビームの当たり判定を
レーザーを参考に調整した
一定の範囲のフレーム数の間
ピッチを上げ下げし続けると
敵の攻撃を避けられる様になる
具体的にはインメルマン・ターンで
敵弾を回避したり
バレル・ロールで回避と同時に攻撃も出来る
ただしフレーム数の範囲内と限定しているので
同じ動きを続けていると効果が無くなる
偏差撃ちさせれば済む話だけど
過去から現在〜未来まで座標回転させると
処理が重くなるので、この様に実装した
AIを賢くするとその分
処理コストが上がるので
代替的な処理で近似する必要が有る 海賊が後ろを向いてる時は
攻撃して来ない様にした
z座標が0以上(画面奥)で
ピッチが90〜270度の時と
z座標が0未満(画面より手前)で
ピッチが90度以下か270度以上の時は
武器を発射しない
発射できる角度は狭める方向で調整しても良いかも 自機のダメージ・エフェクトが発生している最中に
追加でダメージが発生した時
エフェクト・アニメの1コマ目が
連続で描画されてしまうので調整した
エフェクト発生時に既に発生中だったら
そのままにして置いて効果音だけ処理する様にした 海賊のプラズマを作った
ビームと大体同じ処理で
発射していない時はチャージ中になる様にした プラズマは3つの状態を遷移する
0: 未初期化、初期化したら1にする
1: チャージ中、発射したら2にする
2: 攻撃中、当たるか消えたら0にする 自機と海賊が使う主要な武器のフルネーム
・重陽子ビーム
・ハドロン・レーザー
・プラズマ・キャノン
・VTブラスター(ボム)
ハドロン・レーザーはPDSによって
強い相互作用が平行分岐した場を光子が通過する際
高エネルギー状態になる現象を応用したレーザー兵器
VTブラスターはバイドロイド・テクノロジーを利用した兵器
軍が極秘に発掘したものを主人公たちが強奪し
SSSに装備したと言う設定 >>290
修正
他の武器作り始めたら気付いた
プラズマは4つの状態を遷移する
-1: 未装備、何もしない
0: 未初期化、武器がプラズマでなければ-1にする
初期化したら1にする
1: チャージ中、発射したら2にする
2: 攻撃中、当たるか消えたら0にする
初期状態は0 海賊のミサイルを作った
飛んでる間は警報がビビビビ鳴る様にした
これで恒星系の戦闘は一先ず終わり >>292
プラズマの「-1: 未装備」の状態は
初期化ルーチンで遷移させとけば
良い様に見える
でも、データの初期化は
敵の装備の初期化→プラズマの装備確定
の順番に依存しているけど
初期化ルーチンを呼ぶ順番の方は
画面奥からスプライトを割り当てるのと
同じ順番で呼ばないといけない
なのでスプライトの割り当て順に初期化した後
サブ・ゲームが始まってから
データの残りの初期化をすると言う
一寸ややこしい構造になってる
オブジェクト指向言語なら、ファクトリ・メソッド
か何かに隠蔽しとけば良いのか知らんけど
ツクール2003はアセンブラライクなのと
サブルーチンが番号で管理されてて
並べ替えが困難で、後から色々追加すると
管理が破綻するので仕様がない 虚空の敵弾の画像作った
・氷のスプレー
・極太レーザーの雨
・全包囲スパーク
名前の設定は無いので適当
人類側の付けた通称は後で決める
通路の敵弾はネタを練ってる最中なので
こっちを先に実装する 虚空の敵弾のイベントの領域を確保した
見込み違いで足り無くなって、連番に出来なくなって来たけど
ビル街は弾を撃た無いし、FPSは他のサブ・ゲームとは別枠で
扱いたいので良しとする
DTMやりたい病が再発して三日ほど作業中断してたけど
自分を説得して抑え込んだので、続きをする 虚空の全包囲弾の初期化、リセット
イテレータ、発射まで作った
代表の敵をランダムに選んで
それを中心に発射する
配列の中に生きている敵が
何体いるか分からない状況で
その中からランダムに1体
選択したい時の処理
1) 代表の敵 = エラー値/デフォルト値
2) n = 0
3) 敵配列のループ開始
4) 敵が生きていたら
5) n++
6) (乱数 % n) が 0 なら
7) 代表の敵 = 敵ループの現在値
8) ループ末尾
生きてる敵が4体なら
1/1, 1/2, 1/3, 1/4
の確率で代表の敵を上書きして行くので
結果として、満遍なく 1/4 の確率で選ばれる
算数の問題 虚空の全包囲弾の動きと描画作った
ランダムに選ばれた敵から放射状に
スパークが画面外へ飛んで行った後
自機を取り囲む様にスパークの輪が縮んで
一点で消滅する
初期化でsin/cosを使って同心円状に
折り返し地点の座標を入れとく
弾の動きは4つの状態で管理する
未使用、拡散、待機、収束
「未使用」:
弾が発射されたら敵の座標を
中心点に入れて、拡散に移行
「拡散」:
x = 返し地点のx * 現在の半径 / 最大半径 + 中心点のx
y = 返し地点のy * 現在の半径 / 最大半径 + 中心点のy
現在の半径を最大半径まで変化させながら描画
最大になったら、待機に移行
「待機」:
設定されたフレーム数の間、待ち続ける
待ち終わったら、自機の座標を中心点に入れて
収束に移行
「収束」:
現在の半径を 0 まで変化させながら
拡散と同様に描画
半径が 0 になったら、未使用に移行
現在の半径を、拡散する時は素早く
収束する時はゆっくり目に動かす 現在の半径と最大半径は割り合いで
実際の半径は、折り返し地点の座標で決まるので
最大半径を 128、半径の変化速度を 2 や 4 とかの
2 の n 乗にして置くと「半分の半分」とか
「倍の倍」等に出来てバランス調整がやり易くなる 虚空の全包囲弾の当たり判定作った
早めに避ければ当たっても大した事無いけど
ボーっとしてたり混戦中で、全弾命中
とかしてしまうと大ダメージな攻撃 虚空のレーザーの雨の全処理を作った
画面上の全ての敵から上方に弾を打ち上げた後
極太レーザーになって雨の様に降って来る
打ち上げ時のx座標にレーザーが降るので
事前に避け始める事が出来る
状態遷移などは全包囲弾と大体同じ ■ このスレッドは過去ログ倉庫に格納されています