top page



プロフィール

Yo./namikaze.org

Namikaze Projectの萌え系プログラマ。ご意見などありましたら、記事にコメントあるいは、twitter(@yo_namikaze)、メール(yo@namikaze.org)にお願い致します。


開発環境など

C++, Blender, Unity, DirectX, Windows7

カレンダー

<   2014年12月   >
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

旧ブログへのリンク

Yo.'s Game Development Diary

購読(RSS)

Powered by Movable Type 5.2.9

2014年12月アーカイブ

[Idinaloq] 進捗 2014/12/31

| コメント(0) | トラックバック(0)

大絶賛リハビリ中です。1面の背景となるオブジェクトの配置と、時間設定イベントによるキャラ絵変更、オペレータからの通信、敵発生等を行うインフラの実装と、オペレータの開始時の音声通信の実装を行っていました。基本は出来たので、あとはインフラをベースにちまちまと実装していく感じです。元の実装を調べる→現在の環境に合わせたお試しコードを書く→正式実装なので、お試しコードと正式実装が散らかっているので、すでに混沌としてきた模様。

さて、下を見てください。1面の背景は、新版では、もともとカメラのパースが異なるので、全く同じ絵にはなりませんが、ステージ最初の雰囲気はあわせました(元々雰囲気移植なのです!)。

1面と2面にあったスペースデブリはまだ流れないので、まだ完全には出来ていませんが、まずは進捗報告ということで。

20141231_1.png

雰囲気だけ合わせていると書きましたが、旧版とパースが異なる件は以前にも書いたとおりでして、D3DRMはFoVそのものを設定する項目は無く、カメラの位置、角度、ビューポート、被写界深度などをあわせても同じ絵にならなかったのです。1面のビジュアルを合わせるにあたり、改めて設定を変えながら試行錯誤であわせようとしましたが(←更新が遅れた原因)、またしても現時点では設定を保留しています。どこか単純なミスをしているのだと思いますが、また気がついたらトライしてみます。

旧版の1面は結構味気なく、ハイパードライブ施設が3、地球のビルボードが1つです。15年前は、あれだけ表示して30fps維持するだけでも当時のPCの一般的なスペックでは精一杯だったのですが、今見てみると、そのままだとだいぶ見劣りしますね。再現にあたり、ハイパードライブ施設を3D背景オブジェクトとして、ペアレントのオブジェクトから切り離して配置し、地球はペアレントにつけています。というのも、3D背景にしてしまうと、ビルボードの地球が早々に視界から消えてしまうので、演出上の処置でそうしています。1面のステージ構成は変更するかもしれないので、良い表現があれば変えて行きます。

参考までに、横から見た配置はこんな感じになっています。Unityで作っていた頃は、この辺の配置がちょいちょいと変更できて楽々だったのですが、VC++で作って行くにあたり、さすがに ハードコーディングは辛くなってきた気もします。 .blendでも読ませて配置だけはやるかなぁ。とはいえ、元々オブジェクトの数が少なく、一旦配置してしまえば特に変更もしないと思われるので、そのまま突き進んでしまう可能性大(15年たっても懲りてない模様)。Unityだと、カラーキーを使った、テクスチャの抜きも結構簡単に出来たのですが、今回は一瞬悩みましたw 無事出来ましたが、色々手作業で面倒ですね、やはり。

20141231_2.png

下はオマケ。こうやってカメラを変えると、Wing Commanderぽい感じも出来ますね。HUDつけたらもろにスペースシューティングですね。ステージ開始時にこういった感じの演出を入れようかと考えていますが、余裕が出来たらということで。

20141231_3.png

萌え要素つきのスペースシュー...ゴクリ。 機会があったら作ってみたいですねー。

さて、今年の更新はこれが最後になります。

来年も、応援(ランキングのクリックなどなどなど)よろしくお願い致します。

ではでは。よいお年を。



   

[Idinaloq] 進捗 2014/12/23

| コメント(0) | トラックバック(0)

60fpsでの動画のキャプチャが出来ました。いままでダメだった原因は...これははっきり言ってバグですね。前回からの経過時間が60fpsを維持する時間になる迄の間、ループをしていたのですが、ループ中のメッセージ処理(PeekMessageなど)が抜けていて、ループの外にメッセージ処理があったので、不当にCPUパワーを消費していました(おぃ)。いやはや、お恥ずかしい限りで。可変フレームレートに対応しているので、本来であれば60fpsになるようにわざわざwaitを入れる意味は薄かったりしますが、リフレッシュレート60fpsを超えるディスプレイを所有して居ないので60fps超えの動作確認が取れない為、上限の60fps維持が必要だと考えています。

可変フレームレートの話ですが、厳密に言うと、タイミングは60fpsで設計しており、60~30fpsまでが可変になります。フレーム毎の内部経過時間の差分を可変とし、単位時間における内部時間の経過を一定に保ちます。つまりキー入力判定の頻度がフレームレートが落ちると減るという実装なのですが、現状はこのままで行きます(内部60fps、表示を30fpsまで可変という実装もあると思いますが)。30fpsを下回る場合には、いわゆる処理落ちさせて動作するようにしています。ということで、60fps版の動画をアップロードしておきますね。(ただし、作成時点で60fpsなので、Youtubeにuploadした時点でどうなっているかは確認していません。60fpsに対応したとも聞きますが...)

スコア表示を少し修正しています。ランク表示の1行毎にフェードイン効果を入れるようにしたので、以前よりも若干良い感じになっていると思います。

敵ボスは、ゲームオブジェクトクラス→3Dオブジェクトクラス→敵クラス→敵ボスクラス (深い) として作成して表示しています。例えばですが、 CGameObject *obj_p = new CEnemyObjectBoss; として、3Dオブジェクトクラスの Draw() を呼ぶとボスがレンダリングされる感じで作っています。2D Bitmapと3D、その他細かい処理諸々を設計上は同列で扱えるようになっています。

今日はこのへんで。

ではでは。



   

[Idinaloq] 進捗 2014/12/21

| コメント(0) | トラックバック(0)

しばらく地味な作業をしていて更新が出来なかったので、見た目の更新を行いました。
スコア表示の画面の実装です。スコア表示の画面は、ゲームオーバー時のネーム入力画面を兼ねているので、入力も実装しなければなりませんが、今回は、タイトル画面からのスコア表示のみに対応です。

旧イディナロークは30fps動作でしたのでスコアがランク1から10まで順に表示されるタイミングも、60fpsベースに修正しなければなりませんでした。

スコア画面で残っている作業は、

  • ランキングに残った場合と残らなかった場合の処理
  • ランキングに残った場合には、ネーム入力を行う
  • ネーム入力が完了した後の表示

ですね。意外とあるんですよ。

※画面最下部にゴミが出ていますが、修正済みですw 動画は残ったままになってますね。(Press Any Buttonのビットマップサイズを誤っていました。)

今日はこのへんで。

ではでは。



   

[Idinaloq] 進捗 2014/12/15

| コメント(0) | トラックバック(0)

3Dオブジェクトを管理するクラスを作り直し中です。もうしばらくかかりそうです。内部設計の変更なので、目に見えるような進捗になりませんが、これが終わらないと色々収拾がつかなくなるので、ここは落ち着いて進めたいと思います。

3Dといえば、旧イディナロークは、オイラー角でオブジェクトをコントロールしていて、しかもDirectX6のDirect3DRMにおんぶにだっこでした。なので、実のところあまり困った記憶が無かったのですが、時を経て改めて作ってみたところ、どうもうまく回転しないな、などと思っていたのでした。パイロット選択画面では、pitch-30度、yaw-80度、rollは少しづつ行います。回転する順序を変えて誤魔化して乗り切っていたのですがw、ローカル座標で任意軸回転させたほうが楽なので、素直にクオーターニオンを導入しました(←いまここ)。過去を振り返ると、イディナロークの様な、動きの少ないw 3Dオブジェクトを使用した2Dシューティングは、ダイナミックな動きが無かったおかげでオイラー角制御でもなんとかなってしまっていたのかなと思います。

ライブラリとかエンジンとかの話。3D描画エンジンであるD3DRMはとうの昔になく、そして後続のD3DXも無くなりましたね。Direct3D Retained Mode(D3DRM)がサポートされなくなった代わりにD3DXがリリースされた時、同じことになるような気はしていましたが、思いのほか長生きしましたね。DirectXの関数にせよ、ライブラリを生で使うのもライブラリに依存するのでマズい、と毎回思うので、今回はしっかりやろうと思います。まあ、ラッパ関数の作成と、ライブラリを作るだけなんですけれどね。これは、D3DRMに依存しすぎ、しかもD3DRMの関数がコードにガチガチに複雑に入り組んでいる為、D3DRMを模擬するライブラリを作るのもキツイ(RMを全部作ることになる)という状況を次に起こさないようにする為でもあります。同じような感覚を、実はUnityにも感じていたりします。ライブラリを使って楽をするならば、やはり、ソースコードがある方が安心できますが、エンジンのソースが無いので、最悪でも、C#やBooで書いて、Unityが無くなってもアプリケーション部分をある程度使いまわせるようなコードにする必要はありそうです。ソースがあるゲームエンジンとしては、Blender+Bullet+Ogre3D+Luaのgamekit(Ogrekit)は開発が明らかに止まっていますし、Blender Game Engineで作るには、広く頒布するには若干のハードルがあったりします。

とまあ、こういう話は楽しいのですが、今はWindowsプラットフォーム向けにWindows依存でガリガリ書いていきます。次回作る際に悩むことにしましょう。

今日はこの辺で。
ではでは。



   

[Idinaloq] 進捗 2014/12/12

| コメント(0) | トラックバック(0)

15年前のイディナロークは、敵の爆発等をテクスチャアニメーションで表現しており、ボスの爆発等は、その辺まで細かく作りこむほどの時間と体力が残っていなかったのが目に見えて分かる感じの作りになっていました。そこで、小ネタとして、今回は、爆発等の表現を加算ブレンディングを使ったものにするテストです。これだと板ポリゴンにテクスチャ貼ってポリゴンをX軸とZ軸方向に拡大しているだけなのでいまひとつ見栄えはしないですね。本当は、Xの字に重ねたものを入れるつもりだったのですが、どうもうまく透過した感じにならなくて、綺麗に出ませんでした。 板ポリの .x を手でちゃちゃっと書いて表示しただけなので、真面目にやらないとだめですね。



   

[Idinaloq] 進捗 2014/12/10

| コメント(0) | トラックバック(0)

今回は主に3Dオブジェクトの修正をしていました。見つけ次第対処している状況なのですが、15年前の .X ファイルはファイル形式として怪しい場合があり、テクスチャ等が読めないことがあります。そのため、何をするかと言うと、オリジナルの.X → .3ds にしたファイルを Blenderで読み、UVの確認と調整→ .blend →. mqo と変換して、プログラムに読ませます .X 自体、ファイル形式としては終わった形式なので、最終的には全て .mqo とかにしておく必要があるかもしれませんね。(.blendでも良いですが)

20141210_1.png

さて、3面の要塞の配置を試してみました。今回の動画は15fpsでキャプチャしていますので、雰囲気だけわかってもらえれば良いかなと思います。シーンは旧バージョンと同様、ハードコーディングして作成しています。原始的ですね。512x384の画面で表示していた分には、オブジェクト同士の接続は一切気にならなかったのですが、1024x768の解像度では、オブジェクト同士の隙間が若干気になる感じではありますので、隙間を埋める微調整もしていきます。

スクリーンサイズは縦横倍にしていますが、2Dの部分は昔と相対的な大きさを変えていません。つまり、縦横2倍表示しています。ラスタスクロールする背景も、512x384の画像を拡大した上でラスタスクロールさせているので、若干手間があります。

今日はこの辺で。

ではでは。



   

[Idinaloq] 進捗 2014/12/07

| コメント(0) | トラックバック(0)

今回はウォークスルーのテストです。映像を見てもらえればわかりますが、自機や敵などのオブジェクトは、カメラ等との位置関係が変化しないため、回転しません((注)一部は背景として配置しているので、回転しています)。敵などのオブジェクト、カメラは、1つのペアレント(ステージメイン)に繋がっており、背景はペアレントがいません。ペアレントが背景モデルの中を移動することで、背景の建物の中を回転しながら移動しているように映像が変化しています。実際は、ペアレントをZ方向に進めながら、Z軸周りに回転(ロール)させています。キャプチャのもたつきの原因は、キャプチャ中にフレームレートが30fps程度に落ちていたことによるもので、これ以上どうしようもなさそうなので、フレームレートの変化にダイナミックに対応することで解決しました(基本60fpsで動作していたので、手抜きで対応していなかったw)。

現時点では、ライトはペアレントとは繋がっていないので、ステージが回転すると若干ライティングが変わります。ある意味正しいのですが、恒星の位置などは特に気にしていないので(おぃ)、どうするかは別途試してから考えます。

自機も操作可能なのですが、映像では動かすのを忘れていました。

今日はこの辺で。

ではでは。



   

[Idinaloq] 進捗 2014/12/04

| コメント(0) | トラックバック(0)

【動画のリンクに誤りがありましたので、修正しました。】

今日は時間が無かったので、スコア画面の前に、タイトル画面~PUSH TRIGGER~メニュー選択~パイロット選択の流れを作りました。昔のバージョンをご存知の方は、変わっていないと思われるでしょうけれど、中身は全て違います。点滅のタイミングとか、そこまで合わせるのは面倒なので、今の感覚で作ってしまっています。まずは映像をご覧ください。相変わらずキャプチャ画面がもっさりしていますが、ご勘弁を。休日に調整してみます。

15年前を思い出しながらプラス時々昔のソースを見ながらの新規コーディングになっていますが、YouTubeやニコニコ動画にアップロードされていたイディナロークのプレイ動画が実は参考になっていたりします。

次はスコア画面と、ゲーム本編のゲージ周りに着手しようと思います。

平日は毎日帰宅時間が遅いので、限られた時間内で地味な作業の積み重ねが大事ですね。

今日はこの辺で。

ではでは。



   

[Idinaloq] 進捗 2014/12/02

| コメント(0) | トラックバック(0)

今日は文字ばかりです。派手な進捗は無いですが、細かいコード修正をしています。15年前に作ったIdinaloqは、ソースを綺麗にする事を考えずに、勢いで作ってしまった感が多々ありまして。


例えばメニュー用のジョイスティック入力とか、元のコードはボタンを離したとかいうコードが隠蔽されておらずメインの処理にそのまま入っていて、うーむ(笑)という感じになりながら書き直しをしていました。まあ大した修正じゃないので、コードは掲載しません。Unityだと、Input.GetButtonDown("Fire1") とかやれば、そんなことは意識せず出来るので楽ですね。

ちょっと齧った程度のUnityですが、リソース管理など面倒な所のサポートが充実しているので楽ですよね。まあ、C++でやる時もその辺を作れば良い話ではありますが、統合環境なのが素晴らしいです。敷居が低いのは事実ですね。

Unityの開発からVC++での開発に戻ったのは、無料版ではUnityのロゴが出るのと、ムービー再生周り(アセットでアレコレすれば出来るっぽいですが)。その辺が諦められず、IdinaloqはUnityで作り始めたものを放置して、Windows向けにVC++で作る事にしました。昔はLightwave3D 6.xを購入するとか、ツール類にはバンバン投資していたのですけどねー。

いやしかし、最近は良い時代ですよね。Windowsのアプリケーションを作成できるフリーのツールがあり、さらに、使いこなせるかどうか無料版で試してみて、有料版に切り替えられる、といったパスがあるツールが存在するので。昔は、VC++も(古くはMSCから)有料で、布施的にバージョンアップが必要だったし(TPもDelphiもw)、まず投資があって、それから使いこなす必要があったので、ハードルが高すぎだったと思います。

で、Idinaloqですが、実はリソースを改変して楽しんでくれている海外の方も居られるので(ずいぶん古いですが)、データの暗号化、パックデータ化は行わないつもりです。決して手抜きでは無い(笑)。ですから昔同様、データ見放題です。再利用はダメですけどね。.mqo と .x が混在することになるかもですが。

うーん、Movable Typeで以下が仕込まれているのだけれど、記事を登録しても、「人気ブログランキング」にこのファイルを見に行ってもらえていない感じ。何故だろう...。

<link rel="alternate" type="application/atom+xml" title="Recent Entries" href="http://www.namikaze.org/moe_game_programming/atom.xml" />

今日はこの辺で。ではでは。

【追記:2014/12/03】 原因判明。「人気ブログランキング」がAtomに対応していなくて、RSS2.0じゃないとダメとのこと。で、対応出来たつもり。結果が確認できるのはまた明日かな。ココログからnamikaze.org上に移動した甲斐あって、こういうのにサクっと対応出来るのはうれしい所。pingも記事に連動して出せますしね。ほくほく。



   

Yo Namikaze Channel

アフィリエイト

Twitter

最近のコメント