作ってみたよ
目的と目標
Chessなどで使われるRating System。点差が100点ある選手同士の勝率はだいたい1:2になるとゆー、便利なSystemだが、いまいち使う機会がない。
そこで、CARNAGE HEARTみたいなLogic弄って戦わせる系のGameで使ってみようと思ったが、以前持っていたCARNAGE HEARTはどっかいってるし(ライフスケイプっつークソゲーはちゃんとあるのに・・・)、MULTIPLY 29はなんかいまいち(Logicがデフォで20x20はでかすぎるし、Sub Routinとかいらね)なので、自分で作ることにした。
基本仕様
ベースはカルネージハート。
真上見下ろし2Dグラフィック。
チーム戦も可能にする
初心者でも「ルーチン弄ったら強くなった!」が実感できるゲームバランス
Logicはパズル(だからサブルーチンとか要らないのだ)
ロジック仕様
動作系
- 前後左右に移動
- 前後左右にジャンプ
- 左右回転
- メインウエポン
- サブウエポン
分岐系
- 索敵分岐
- 敵弾分岐
- 味方分岐
- 障害物分岐
- 危険物分岐
- 変数分岐
制御系
- ウエイト
- 動作ストップ
- 動作終了待ち
ハードウェア仕様
プラットフォーム
- 二足歩行型(重量制限あり。重量制限=エネルギー出力)
- 多足歩行型(重量制限あり。重量制限=エネルギー出力)
- 戦車型(重量制限なし。移動速度=エネルギー出力÷重量)
メインウエポン
- アサルトガン
- ショットガン
- ガトリングガン
- カノン
- レーザー
- クロー
- (タックル)
サブウエポン
- ホーミングミサイル
- 地雷
- フレア
- レーダージャマー
プログラミングメモ
試合管理関連の変数の使用
- 試合時間経過
- 障害物座標x(障害物ナンバ)
- 障害物座標y(障害物ナンバ)
- チームナンバ(機体ナンバ)
- メンバーナンバ(機体ナンバ)
機体関連の変数の仕様
- 機体データ(機体ナンバ)
- 機体フラグ(機体ナンバ)
- 機体名(機体ナンバ)
- 機体HP(機体ナンバ)
- 機体燃料(機体ナンバ)
- 機体重量(機体ナンバ)
- 機体装甲重量(機体ナンバ)
- 機体座標x(機体ナンバ)
- 機体座標y(機体ナンバ)
- 機体方向(機体ナンバ)
動作関連の変数の仕様
- ジャンプカウンタ(機体ナンバ)
- ジャンプ方向(機体ナンバ)
- ジャンプ速度(機体ナンバ)
機体性能関連の変数の仕様
- CPUサイズx(機体ナンバ)
- CPUサイズy(機体ナンバ)
- CPU速度(機体ナンバ)
- 前移動スピード(機体ナンバ)
- 後移動スピード(機体ナンバ)
- 横移動スピード(機体ナンバ)
- 回転スピード(機体ナンバ)
- 前ジャンプ距離(機体ナンバ)
- 後ジャンプ距離(機体ナンバ)
- 横ジャンプ距離(機体ナンバ)
- 前着地時間(機体ナンバ)
- 後着地時間(機体ナンバ)
- 横着地時間(機体ナンバ)
- メインウエポン可動角度(機体ナンバ)
- 装甲性能(機体ナンバ)
- 燃費(機体ナンバ)
- 前移動燃料消費(機体ナンバ)
- 後移動燃料消費(機体ナンバ)
- 横移動燃料消費(機体ナンバ)
- 回転燃料消費(機体ナンバ)
- 前ジャンプ燃料消費(機体ナンバ)
- 後ジャンプ燃料消費(機体ナンバ)
- 横ジャンプ燃料消費(機体ナンバ)
- 右メインウエポン種類(機体ナンバ)
- 左メインウエポン種類(機体ナンバ)
- 第1サブウエポン種類(機体ナンバ)
- 第2サブウエポン種類(機体ナンバ)
- 第3サブウエポン種類(機体ナンバ)
- 第4サブウエポン種類(機体ナンバ)
- 最大出力(機体ナンバ)
- 当たり判定半径(機体ナンバ)
メインウエポン関連の変数の仕様
- ウエポンカウンタ(機体ナンバ)
- ウエポン残量(機体ナンバ)
弾丸関連の変数の仕様
- 弾丸フラグ(機体ナンバ,弾丸ナンバ)
- 弾丸座標x(機体ナンバ,弾丸ナンバ)
- 弾丸座標y(機体ナンバ,弾丸ナンバ)
- 弾丸方向(機体ナンバ,弾丸ナンバ)
- 弾丸速度(機体ナンバ,弾丸ナンバ)
- 弾丸距離(機体ナンバ,弾丸ナンバ)
- 弾丸威力(機体ナンバ,弾丸ナンバ)
ミサイル関連の変数の仕様
- ミサイルフラグ(機体ナンバ,ミサイルナンバ)
- ミサイル座標x(機体ナンバ,ミサイルナンバ)
- ミサイル座標y(機体ナンバ,ミサイルナンバ)
- ミサイル目標(機体ナンバ,ミサイルナンバ)
- ミサイル目標座標x(機体ナンバ,ミサイルナンバ)
- ミサイル目標座標y(機体ナンバ,ミサイルナンバ)
- ミサイル方向(機体ナンバ,ミサイルナンバ)
- ミサイル速度x(機体ナンバ,ミサイルナンバ)
- ミサイル速度y(機体ナンバ,ミサイルナンバ)
- ミサイル距離(機体ナンバ,ミサイルナンバ)
- ミサイル威力(機体ナンバ,ミサイルナンバ)
- ミサイル出力(機体ナンバ,ミサイルナンバ)
- ミサイル最高速度(機体ナンバ,ミサイルナンバ)
- ミサイルシーカー角度(機体ナンバ,ミサイルナンバ)
- ミサイルシーカー距離(機体ナンバ,ミサイルナンバ)
- ミサイル変針性能(機体ナンバ,ミサイルナンバ)
レーザー関連の変数の仕様
- レーザーフラグ(機体ナンバ,レーザーナンバ)
- レーザー発射座標x(機体ナンバ,レーザーナンバ)
- レーザー発射座標y(機体ナンバ,レーザーナンバ)
- レーザー発射方向y(機体ナンバ,レーザーナンバ)
- レーザー威力(機体ナンバ,レーザーナンバ)
地雷関連の変数の仕様(地雷は置いたら敵味方自分関係なしでいいよね)
- 地雷フラグ(地雷ナンバ)
- 地雷座標x(地雷ナンバ)
- 地雷座標y(地雷ナンバ)
- 地雷威力(地雷ナンバ)
- 地雷攻撃範囲(地雷ナンバ)
- 地雷索敵範囲(地雷ナンバ)
フレア関連の変数の仕様
- フレアフラグ(フレアナンバ)
- フレア座標x(フレアナンバ)
- フレア座標y(フレアナンバ)
- フレア方向(フレアナンバ)
- フレア速度(フレアナンバ)
- フレア距離(フレアナンバ)
索敵分岐関連の変数の仕様
- 敵機方向(自分の機体ナンバ,対象の機体ナンバ)
- 敵機距離(自分の機体ナンバ,対象の機体ナンバ)
- 最近敵機方向(自分の機体ナンバ,対象の機体ナンバ)
- 最近敵機距離(自分の機体ナンバ,対象の機体ナンバ)
敵弾分岐関連の変数の仕様
- 敵弾方向(自分の機体ナンバ,対象の機体ナンバ,対象の弾丸ナンバ)
- 敵弾距離(自分の機体ナンバ,対象の機体ナンバ,対象の弾丸ナンバ)
敵ミサイル分岐関連の変数の仕様
- 敵ミサイル方向(自分の機体ナンバ,対象の機体ナンバ,対象のミサイルナンバ)
- 敵ミサイル距離(自分の機体ナンバ,対象の機体ナンバ,対象のミサイルナンバ)
味方分岐関連の変数の仕様
- 味方方向(自分の機体ナンバ,対象の機体ナンバ)
- 味方距離(自分の機体ナンバ,対象の機体ナンバ)
障害物分岐関連の変数の仕様
- 障害物方向(自分の機体ナンバ,対象の障害物ナンバ)
- 障害物距離(自分の機体ナンバ,対象の障害物ナンバ)
危険物分岐関連の変数の仕様
- 危険物方向(自分の機体ナンバ,対象の地雷ナンバ)
- 危険物距離(自分の機体ナンバ,対象の地雷ナンバ)
Logic関連の変数の仕様
フローチャート
前処理
- 機体読み込み画面
- Logicを読み込む
- 機体性能関連の変数に代入する処理
機体動作処理
- 敵機情報処理
- ジャンプ処理
- ハードウェア動作処理
弾丸処理
- 弾丸消去処理
- 弾丸移動処理
- 弾丸当たり判定処理
ミサイル処理
- ミサイル消去処理
ミサイル目標変更処理←フレアとかで。- ミサイル向き変更処理
- ミサイル慣性処理
- ミサイル移動処理
- ミサイル当たり判定処理
レーザー処理(レーザー処理の一部はハードウエア動作処理で行う)
- レーザー当たり判定処理
地雷処理
- 地雷消去処理
- 地雷当たり判定処理
フレア処理
- フレア消去処理
- フレア移動処理
ロジック処理
表示処理
処理のメモ
レーザーの当たり判定について
- 直線と点の距離の求め方
- http://sea-side-web.hp.infoseek.co.jp/panerobo/Laser.PNG
- こんな感じ?よくわかんないけどこれで進めよっと。
索敵について。
- 機体数ぶんのループを作る。
- 調べる機体が敵か味方か調べる。
- 敵なら、その機体への方角と距離を求める
- その機体が、索敵範囲内にあったら、分岐する。
障害物分岐について
- やり方は索敵分岐と同じ
- 基本的に障害物の中心の点を座標にする
- フィールドの端の壁については、点にできないから困ってる。
- レーダーを、方角と角度の扇形ではなく、方角だけの線形にすれば、やり方はわかる。
- 扇形でのやり方誰か教えて。。
CPUの性能差について
- 1命令実行するごとに、強制的にウエイトがかかる
- 低速…4フレーム、中速…2フレーム、高速…1フレーム
機体データの仕様
- 1行目 機体名
- 2行目 プラットフォームの種類
- 3行目 CPUの種類
- 4行目 エネルギージェネレーターの種類
- 5行目 燃料容量
- 6行目 装甲の種類
- 7行目 右メインウエポンの種類
- 8行目 左メインウエポンの種類
- 9行目 第1サブウエポンの種類(以下、積めない分は空欄)
- 10行目 第2サブウエポンの種類
- 11行目 第3サブウエポンの種類
- 12行目 第4サブウエポンの種類
- 以下Logicデータ
Logicの仕様
- 命令名1行+出口の方向1行+オプション8行(???)
- 出口の方向は0が無し。1-4が↑→↓←。十の位は分岐
プラットフォームの種類
- 00 テスト用。二足歩行。HP100。移動速度すべて1。ジャンプカウンタ20。着地ロス10。回転速度0.01。ウエポン可動角度左右1。最大燃料200.0。フレーム重量500.0。装甲重量200.0
CPUの種類
- 00 テスト用。低速 4x4
エネルギージェネレータの種類
- 00 テスト用。最大出力1000.0 燃費10.0 重量100.0
装甲の種類
- 00 テスト用。ダメージを1低減する。重量係数1.0
メインウエポンの種類
- 00 練習用アサルトガン 威力5
サブウエポンの種類
- 00 ターミナル。つまり何もつまない 重量0.0
燃費の意味
- 1フレーム当たりの消費燃料=出力÷燃費×燃料消費係数
- テスト用ボディの場合、歩行0.001、回転0.001、ジャンプ0.05・・・みたいな感じで決める
初期配置
- 対面配置
- ランダム配置
ミサイル目標について
- ミサイルは発射した時点でもっとも近い敵機をロックする。
- ロックした機体の付近にフレアがあれば、時々そっちにロックが移る
- ロックが移る確率は、機体とフレアの距離に反比例する。
- でも、フレアにロックが移った後でも、フレアからもとの機体にロックが戻る可能性もある。