プロフィール

Na-7

Author:Na-7
SE(システムエンジニア)として約15年間システム系ソフト会社を勤めあげ、2008年3月退社。現在、ゲーム制作会社設立を目指して活動中。


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
攻撃型の実装07A
開発中のメイン画面
モデル毎に座標と向きが設定され、リアリティが向上した。各モデルがそれぞれ意思をもって動いているように見える。



今回は、前回の続きです。




◎攻撃型の向き

動作テストを繰り返すと、少し気になる点が出てきました。

攻撃型の実装06

・攻撃目標小隊を向いていないことがある
 →「小隊の向き=部隊の向き」であるため

・敵1小隊を倒すと、他の小隊の攻撃目標も
 同時に変更され、移動が発生する(かなり目立つ)

上記の問題を改善するために、小隊毎に攻撃目標小隊を記憶管理するよう改修します。

…あれ?敵小隊を倒しても、誰も移動しませんね?
そうか、敵小隊は小隊リストから除外しただけなので、この時点ではインスタンスがメモリに残ってるわけですね。

敵小隊インスタンスを明示的に消去できれば理想的なのですが、C#は明示的消去ができないので(私の勘違い?)、敵小隊がリストに存在するか毎回チェックします。
(他にスマートなやり方はないのかねぇ…ブツブツ)



◎防御型の向き

防御型の移動処理は従来通りでOKですが、向きが全て同一方向のままだと、敵に攻撃された際に不自然です。小隊毎に向きを変えましょう。

多数の敵部隊、多数の敵小隊から同時攻撃されるケースもあるので、最も近い敵小隊に向くこととします。

攻撃型の実装07A   攻撃型の実装07B

各小隊は、それぞれ敵小隊の方向を向いてますね。そっぽを向く(誰もいない方を見る)小隊がいなくなりました。

尚、ネームプレートが邪魔なので、ネームプレート表示/非表示モードを追加しました。Nキーを押すと表示/非表示が切り替わります(暫定仕様)。



◎動画

毎度お馴染みの動画ですが、今回はネームプレートを付け外ししたので、少し印象が違うかも。



私自身は、とても良くなったと感じていますが、いかがでしょうか?

(ネームプレートを外す場合を考慮して、兵士は勢力別に色分けした方がいいかもしれませんね)



◎次回予告

今回は、期待と不安が半々だったのですが、予想以上に上手くいったので嬉しいです^^

しかしこうなると、攻撃の効果判定も部隊単位より小隊単位の方が良いかもしれませんね。次回はその辺を検討する予定です。

スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
攻撃型の実装05
開発中のメイン画面
陣形の戦闘スタイルを4タイプに分類し、攻撃型スタイルの個別移動を実装する。



◎目的

今回は、モデル個別移動を部隊戦に応用します。
目的のイメージを図で説明すると、こんな感じです。

モデル個別移動を部隊戦に応用する01   モデル個別移動を部隊戦に応用する02

従来は、左図のようになってました。
これを、右図に近付けることが今回の目的です。


・演出効果は高いが、デメリットもある

・仕様上の問題が発生する恐れがある
 (セル単位の原則を無視するので)

上記のような懸念があるので、今回は、上手くいかないようなら素直に諦めます。

でも、成功すると演出効果がかなり期待できるかもしれないので、とにかく一度チャレンジしましょう。



◎戦闘スタイル

陣形の戦闘スタイルを複数に分類して制御します。
あれこれ考えたのですが、結局下記4タイプとします。

 攻撃型:
  近接攻撃タイプは敵モデルに隣接して攻撃する

 防御型:
  敵を待ち受ける(移動しない)

 カウンター型:
  敵を待ち受け、機を見て反攻する
  (防御型→攻撃型)

 アウトレンジ型:
  敵と一定の距離を保ちながら
  (前後左右に移動しながら)
  間接攻撃や計略を実行する

今回は、攻撃型を実装します。
カウンター型とアウトレンジ型は後日実装するので、
それまでは防御型として処理します(暫定)



◎攻撃型の実装

攻撃型の個別移動を実装します。

・目標敵部隊の中で、自小隊に最も近い敵小隊を
 攻撃目標とする

・攻撃目標(敵小隊)に向けて個別移動し、
 その手前で停止する

攻撃型の実装01   攻撃型の実装02

上図は魚鱗(攻撃型)と鶴翼(防御型)が正面からぶつかったケースです。ネームプレートで見辛いかもしれませんが、朱然隊の右翼小隊が最も近いと判定されたようです。

敵部隊を認知すると、騎兵や歩兵が順次突撃する様はカッコイイのですが(上左図)、戦闘中は、味方全員が近接座標に集中し、グチャっと重なってしまいます(上右図)


攻撃型の実装03   攻撃型の実装04

上図は、長蛇(攻撃型)と魚鱗(攻撃型)のぶつかり合いです。攻撃型同士だと、敵も味方も近接座標に集中してしまいます。

もう少し、何とかならんかなぁ…。



◎攻撃型の改良

もう少しバラけそうな案を試してみます。

・自小隊の番号と同じ番号の敵小隊を攻撃する
 →敵小隊が自番号より少ない場合、旗手を攻撃する

・旗手は攻撃に参加しない
 →防御型と同じ移動パターンとする

…意外といい感じにバラけました。

しかし、移動中に他の小隊と進路が交差してしまいます。
向かい合うと、小隊番号が左右対称になるからですね。

・偶数番号の小隊は、自番号-1の敵小隊を攻撃する

・奇数番号の小隊は、自番号+1の敵小隊を攻撃する

これで、交差が…あれ?解消されませんね?

どうやら、陣形の小隊番号が原因のようです。
左側が奇数、右側が偶数になるように番号を振り直します。

モデル個別移動を部隊戦に応用する03

鋒矢(左側の青)の3-4と7-6が逆になっているのがポイントです。

しかしこうして見ると、赤の2番は攻撃目標になりませんね。それと、交差するケースも若干ありそうですが…少しならいいかな?全く無いのも不自然だし。

攻撃型の実装05

いいカンジにバラけてきました^^



◎次回予告

長文になってきたので、ここで一度切ります。

というわけで、次回は今回の続きです。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
モデル個別移動01
開発中のメイン画面
モデル単位の移動が実装され、部隊が方向転換した際の違和感が解消された。



◎目的

現在は、部隊座標のみ管理し、各小隊モデル(槍兵など)は部隊座標に陣形差分を加算した座標に描画しています。
このため、部隊が向きを変えると、各モデルは瞬間的にワープし、見る者に違和感を与えます。

回転時の個別移動イメージ01   回転時の個別移動イメージ02

上図は、鋒矢の陣を北向き(↑)から東向き(→)に変えた場合の個別移動イメージです。

従来は、これが瞬間的に行われてきました。この移動を滑らかに再現し、見る者に違和感を与えないようにすることが、今回の目的です。



◎設計のポイント

従来の座標(部隊座標+陣形差分座標)は‘目標座標’とし、部隊の移動(部隊座標変更)と同時に目標座標も更新します。

座標(現在の座標)変数を新設し、常に目標座標を(一直線に)追いかけるようにします。
個別モデルの移動速度は、通常の1.2倍とします。

・目標座標に追い付いた場合
 →既定位置に居る状態となります。

・目標座標に追い付かない場合
 →その位置が現在位置となります。



◎実装

コーディング後に動作テストすると、幾つか問題が出ましたが、今回はわりとスムーズに解決できました。向きと移動を段階的に実装し、問題の複雑化を避けたことが良い結果に繋がったと思います。

・モデルの向きが瞬間的に反転し続ける
 →移動力の早いモデルが目標座標を
  追い越し続けていたことが原因
 →目標座標を越さないよう修正

・機動力が高い陣形の場合、騎兵とネームプレート
 (部隊座標)が先行し、歩兵が全然追い付けない
 →部隊/モデル/陣形の速度係数を調整




…動画だと細かい移動がわかりにくいかな?
カメラはもっとズームさせた方が良かったですね。

一応コメントで補足すると、以前は部隊の向きが変わる度にカクカクした感じでしたが、今回の改修でスムーズになりました。

(同じ部隊内でも)騎兵と歩兵の移動速度が異なるので、
騎兵が先行し、歩兵が慌てて駆け付ける様子を見ていると、
ちょっと楽しいです^^



◎次回予告

個別移動は数年前から考えていたアイデアですが、ようやく実装することができました。
(デバッグや最適化への悪影響を避けるため、部隊移動が安定するまで待ってました)

個別移動がシステム的に確立したので、次回は個別移動を部隊戦に活用できるかチャレンジします。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
方円の陣02

開発中のメイン画面
モデル毎に向きが変わり、陣形の見栄えが向上した。



◎方円の陣

今回は、モデル単位の向きを実装します。

例えば、方円の陣は現在

方円の陣01

上図のように、全員が同じ方向を向いてますが、これを‘各人が外側を向く’状態にします。



◎実装

今回は向きだけなので簡単かと思いきや…

1 フィールドの追加
2 陣形毎に‘既定の向き’データを登録
3 描画処理の改修

若干苦戦してしまいました(^_^;


下記の点を修正すると、狙い通りになりました。

・部隊停止時のみ、既定の向きを加算すること

・既定の向きは左右逆に(符号を反転)すること

・仮想メソッドに記述したコードは、
 呼び出されないケースがある

方円の陣02   無陣01

左図が方円の陣、右図が無陣です。
(八卦の陣も向きを設定しました)

無陣は混乱状態を表しています。
兵士が右往左往する感じですね^^



◎余談

木も一本一本向きを変えました。見栄えが微妙に向上?
いや、木の向きなんて元々気になるレベルじゃないですね。

…独りごとです。気にしないでください(爆)



◎次回予告

今回のテーマは、次回と分けて正解でした。
(良い練習になりました)

次回は「モデル単位の移動の実装」です。
これはちょっと難しそうですが、数年前から考えていたことなので、上手くいくといいなぁ…。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
報告伝令の追加04
開発中のメイン画面
伝令が、指示の諾否結果を持ち帰るようになった。タイムラグはあるものの、最新情報には違いないので、上級ルールでは貴重な情報だ。ところで、于禁のセリフは…?



◎陣形変更指示の諾否

陣形変更指示の伝令が到着すると、部隊長は指示に従うか拒否するか判断します。その場の状況(戦闘中であれば勝率の変化や変更中のリスク)、権限、性格、相性等を総合的に考慮しますが、思考ロジックの実装は来年以降に予定しているので、今回は暫定仕様を実装します。

・非交戦時
 →了承

・交戦中(敵部隊認知済み)
 →50%の確率で拒否(ランダム)

上記の実装はとても簡単ですが、問題は「諾否の結果がわかりにくい」という点です。陣形がなかなか変わらない場合、

 指示が拒否されたのか?
 伝令が未到着なのか?

よくわかりません。



◎メッセージの追加検討

前述の懸案を解決する方法を検討します。

A案
 伝令到着時に、会話メッセージを表示する
 (例:「于禁様より、鶴翼の陣に変更せよとのご命令です」
    「馬鹿を申せ!今変更したら一気に崩れるぞ!!」)
 ・上級ルールでは不可
 ・中級、下級ルールでは表示した方が良い?
  メリット:武将が指示を受けた時の雰囲気が伝わる
  デメリット:プレイヤーが他の指示を出した後で
        表示されると、直前の指示と混同しやすい

B案
 指示諾否の結果を、伝令が持ち帰って報告する

A案は演出効果が高いのですが、上級ルール不可ですし、デメリットも大きいので、保留とします。

というわけで、今回はB案を実装します。



◎報告の作成と表示

メッセージデータを追加し、伝令による伝達を可能とします。

1 メッセージデータを追加する

2 伝令にメッセージ伝達機能を追加する
  (従来は、任務と指示のみ伝達可能)

3 指示伝令が到着し、陣形を変更した際に、
  報告伝令を追加(発進)する

4 報告伝令到着後、会話画面を表示する

報告伝令の追加01

発令時と同一の伝令(同一の顔画像)が、指示の応諾状況を報告するようになりました^^



◎拒否報告

戦闘中に指示伝令が到着したら、50%の確率で拒否し、報告伝令を追加します。

これに先立ち、報告メッセージクラスと報告内容クラスを作成し、報告種別/任務/指示/メッセージタイプ/本文等を体系的に管理します。

報告伝令の追加02   報告伝令の追加03

良さげな感じになってきました^^

固有名詞(武将名や地名等)の色を変えたいのですが、会話データのフォーマットが未定のため、今回は見送りました。


尚、今回追加した応答メッセージは33件です。

 指示受諾(非交戦): 4件
 指示受諾(交戦中):12件
 指示拒否(交戦中):17件

武将名や地名の置換は、今回は力技でやってます(^^;



◎今後の課題

伝令機能が拡張整備されたのは良いのですが、肝心の会話データは体系的に管理されておらず、データが増えるといずれ破綻してしまいます。
早めに整備する必要がありますね。

・会話データのフォーマット&登録手順の整備

・文字属性を指定可能とする
 (例:武将名は緑、地名は青)

・マクロを記述可能とする
 (例:%A→エリア名、%B→武将名)

・他の画面を参照中に、報告伝令が到着すると、
 報告が表示されない
 →報告内容を記憶し、後で順番に表示する必要がある

漢字スプライトフォントと連動させる必要もあるので、効率の良い登録管理方式がピンとこないのですが、未だにフォーマット未定義というのはちょっと…(ー_ー;



◎次回予告

今回予定していた作業は全て完了しました。
伝令機能が拡張整備されたのも良いですね。

一方で、会話データの管理がおざなりであることを再認識させられました(汗)

会話データ関連を一気に整備したい気もしますが、会話データが増えるのは来年以降の予定なので、次回はモデル単位の向きを実装します。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
乱世キング
乱世キング
基本プレイ無料の三国志ブラウザシミュレーションゲーム。無課金でも全アイテムと武器のコレクションが可能。
正式サービスが最近(11/23)開始されたが、まだ紹介文や説明文に日本語ミスが多いようだ。



◎11月の目標達成度

・活動時間月160時間以上

実績:117h(達成率:73%)


・年間スケジュール見直し(8h)

実績:6h(達成率:100%)


・部隊回避移動の調整(24h)

実績:12h(達成率:100%)


・陣形追加(8h)

実績:47h(達成率:100%)


・モデル個別移動の実装(24)

実績:未着手(達成率:0%)


・モーション切替パフォーマンス向上(24h)

実績:11h(達成率:100%)


・戦闘モーションの作成(32)

実績:未着手(達成率:0%)


・ブログ更新/HP更新(40h)

実績:35h(達成率:100%)


・予定外作業

実績:6hでマップイメージ再作成


11月の自己評価は、ちょっと微妙です。
活動時間は若干増えたものの、まだ目標の70%程度。
成果は、質の面で満足してますが、量は少なすぎです。



◎作業時間分析

作業時間集計2011年11月(PDF形式)

○良かった点
・パフォーマンスを短期間で大幅に向上させた
・パフォーマンスや陣形の検討成果(アイデア)が良かった
・「一度休むと連休する癖」が治った

○悪かった点
・陣形追加に10日以上かかった(予定工数大幅超過)
・1日おきに活動時間が減る傾向が強い


とりあえず連休癖が治ってホッとしました。
ペナルティ新ルールの効果と言えますが、反面「1日おきに休む傾向が強く、活動時間が伸びない」とも言えそうです。

連休癖が治ったので、ペナルティルールは廃止します。
連休癖が戻ったり、作業時間が減るようなことがあれば、復活させます。

それと、11月は近所の新築工事がうるさくて作業に集中できない日がありました。あと一カ月の辛抱か…。



◎陣形追加作業について

パフォーマンスはかなり前から懸念してたので、作業着手前に頭の中で検討が済んでおり、少ない工数で満足できる成果を上げることができました。

一方で、陣形追加は予定工数を大幅に超過してしまいました。理由は以下の通り。

・作業前の想定(アイデア)を捨てて練り直した
 作業前:相性(じゃんけんの関係)を想定
 調査後:状況に応じて使い分けることを想定

・『相性に頼らない差別化』に注力した
 →柔軟性、指揮官影響度、包囲力等を追加
 →陣形変更ルール見直し

「作業工数の見積もりが甘い」と言うよりも、作業前の想定に拘らず、より良いものを追求したので、「予定が変わった」と言えるでしょう。気概と成果に関しては満足してます。

しかし想定が変わったとはいえ、10日は長すぎです。
主たる原因は、調査時に脱線が多かったこと。
陣形を調べてたはずなのに、気が付くとナポレオン戦争や太平洋戦争の記事を読みふけってたり(爆)
(三国志を逸脱した調査は、活動時間から除外済です)

こんな調子だから、活動時間が伸びないんですよ…>_<



◎進捗状況チェック

スケジュールを組み直したばかりなのに、早くも遅延し始めています。

そもそも陣形はスケジュールに反映されてない(予定工数少なかったので無視してた)ので、スケジュール上の進捗はほとんどありません。

ゲーム性が向上した一方で、遅延したことも事実なので、もっと頑張らないといけませんね。

年間スケジュール(ブログ記事)の拍手が増えていたので、ちょっとビックリ。ありがとうございます。m(_ _)m



◎12月の目標

・活動時間月152時間以上

・陣形変更機能の作成(4h)

・報告伝令の追加(8h)

・モデル単位の向きの実装(8h)

・モデル単位の移動の実装(24h)

・戦闘モーションの作成(32h)

・中距離戦の実装(36h)

・ブログ更新/HP更新(40h)

年末ということで、用事が入るかもしれませんが、頑張って開発を進めましょう。

今月は父の手術予定があります。今回は癌ではないので、前回ほど心配してませんが、大事に至らぬよう祈ってます。



◎次回予告

次回は、報告伝令を追加する予定です。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |
DATE: CATEGORY:三国志軍記開発
陣形変更機能05
開発中のメイン画面
陣形変更機能が実装され、変更中は無陣状態となった。
伝令が到着するまでタイムラグがあるので、指示を出すタイミングが難しい。



◎陣形変更機能の作成

まず始めに、陣形情報画面の指示ボタンを押したら陣形が変更されるようにします。

1 陣形情報画面を改修する
  →部隊情報画面から変更可能な陣形ボタンを
   押した場合のみ指示ボタンを表示する

2 陣形を変更する


プログラムを実装し、関羽本隊の陣形を、鶴翼から鋒矢に変更してみました。

1 部隊情報画面の(陣形パネルの)鋒矢ボタンを押す

2 陣形情報画面(鋒矢)の指示ボタンを押す

陣形変更機能01   陣形変更機能02

陣形が無事に変更されました。

ちなみに、部隊陣形が鶴翼の陣の際に鶴翼ボタンを押したり、武将情報画面から参照した場合は、指示ボタンは表示されません。



◎任務と指示

一般的なゲームは前述の実装で完了ですが、三国志軍記には伝令の要素があります。指示ボタンを押したら伝令が発信され、一定時間後に指示が伝わるよう改修しましょう。

…いざ改修しようとしたら、ちょっと迷うことがありました。現在は(任務しか伝達できない状態なので)陣形変更指示の伝達は不可能です。これを可能とするには2つの案があります。

A案:陣形変更指示を(中継地点指定のように)
   任務詳細機能に含める

B案:(任務とは別に)指示を伝達可能とする

最初はA案を考えていたのですが、プレイヤーが陣形や計略等を細かく指示する際に、いちいち任務として指示するのは不自然かつ面倒です。

ゲームシステムとして「任務」と「指示」を明確に分け、指示を伝達可能としましょう。

任務:永続的な命令(駐留、攻撃等)
   →任務達成又は次の指示があるまで継続する

指示:瞬間的な命令(陣形変更、計略発動等)
   →伝令到着時に処理し、継続しない

命令系の識別子は、commandやorder等の単語を適当に使っていたのですが、これを機にorder(任務)とinstruction(指示)で使い分けることにしました。

…既存コードの名称変更が地味に大変だったりします(^^;



◎指示の作成と伝達

陣形指示クラスを作成し、伝令による伝達を可能とします。

1 指示インターフェースを作成する

2 陣形指示クラスを作成する

3 伝令に指示伝達機能を追加する

4 陣形を指示する伝令を追加する

5 伝令到着後に陣形を変更する

陣形変更機能03   陣形変更機能04

指示ボタンを押すと伝令が発信され、数秒後に陣形が変更されました。

ここまではOKですね^^



◎陣形変更処理の追加

伝令到着後は、陣形変更が瞬間的に行われているので、陣形変更に一定の時間がかかるようにします。

 陣形変更所要時間 =(150 - 部隊所属武将の最高知力)
     ×(5.0 - 陣形の柔軟性)× 陣形変更基本時間

 最早:3秒(諸葛亮、方円の陣)
 最遅:18秒(周倉、鋒矢の陣)
 平均:9秒

最大で6倍の差がありますが、平均と比べると2~3倍程度の差となります。

所要時間は良いとして、問題は変更中の見た目ですが、

 案A:エフェクトのみ追加する(元の陣形)

 案B:エフェクト+無陣に変更する

 案C:エフェクト+モデル個別移動

エフェクト実装予定は来年度以降なので、とりあえず暫定でB案とします。また、陣形変更中は無陣状態の戦闘力となります。

陣形変更機能05   陣形変更機能06

陣形が下記フローで変更されました^^

 陣形変更指示の伝令発進

   ↓(伝達所要時間)

 伝令到着、陣形変更開始(無陣)

   ↓(陣形変更所要時間)

 陣形変更完了(新陣形)


交戦中に陣形を変更したら、(無陣期間中に)凄い勢いで兵士が減って、あっという間に壊滅しました(^^;



◎次回予告

12月になったので、次回は「11月の総括と12月の目標」です。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

| BLOG TOP |

copyright © ゲーム制作の舞台裏 all rights reserved.Powered by FC2ブログ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。