2009年11月02日

公約通り。   

コンテストの締め切りも終わって、どうやら不具合無く動いてるみたいなのでQueryPerformanceCounterを使ったウエイトのモジュールを公開させていただきます。私はどっかの現与党とは違うのですよ!(笑)
→ソース
せっかくなのでE3Dソースプログラム標準化計画に則ってみました。ロコ様の用意してくださった雛形プログラムに上書きしてくださいまし。

ウエイト部分は独立したモジュールなのでENskipClass.hspをインクルードしてやればお手元のプログラムに単体でも使えます。
やってる事は『前回の描画から何mm秒』ではなく、ハードウェアカウンタに目盛を付けて追いかけてるので『ウエイトの均一さ』という点では一番確実な方法ではないでしょうか。なおおまけでフレームスキップも付けてます。renderflag@ = 0の時は描画を省いて下さればOKです。

フレームスキップを実感出来るように大量モデルを表示して重くしたかったので、これまた複製モデル描画のモジュールもおまけしときました(clone3DClass.hsp)こちらはE3Dソースプログラム標準化計画と一緒でないと動きません(ソースの一部にルール違反してますが・・・)
やってる事はモデルを一個だけ読み込んで、描画を複数回行うというものです。この方法は一長一短ありまして、
長所:
モデルは1体分でいいのでメモリ&ロード時間が節約できて実にエコノミー
短所:
命中判定が出来ない(工夫すれば出来るがソースが驚きの汚さに)
描画がちょっと重い(特に透明・不透明の混在モデルが重いです)
moa(&モーション補完)、シャドウ、モーションブラー、バッチレンダ等の素敵機能が使えない
などとなっとります。短所の方が多いですね(笑)一長三短ぐらい
エフェクト等に使うのがよろしいのではないかと。

短所ばかり目立つのもシャクなので、可変再生速度もおまけしときました(おまけばっかりですな)走る速度のばらつきに注目してやってください。これは現状のmoa等では実現出来ないと思います。やってる事はごく単純で、内部に高精度のカウント値を設定してやります。描画のたびにE3DSetMotionFrameNoするこの方式ならではですね。

ちなみになんちゃってポイントライトの方はオフィシャルでグローが実装されてしまったので見送りました(笑)私のより断然いいです(それでも公約を守れ!という方が万一おられましたらご一報くださいまし)

さてコンテストの最終更新も済んであんだわ。も現在最新バージョンがアップされております。
上書きインストールしていただくと現状セーブデータも使えます。ステージを2つほど追加したので、スコア足りなくて隠しステージ4が出なかった方も是非再挑戦してやってくださいまし。



posted by ぼおんぼおん。 at 02:41 | 東京 🌁 | Comment(6) | 小ネタ的なもの | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
これはすごい。目からウロコが落ちました!
WindowsAPIには詳しくないので、フレームスキップの方は、ソースを見ても、
使い方がわかっただけで、具体的な処理内容はよく分かりませんでしたが、
クローン生成のほうは、本当にすごいアイデアです!

フレーム数の100倍を用意して、モーションを減速する方法や、
それぞれのクローンに独立させた動きをさせる方法など、本当に脱帽ものです。

当たり判定の方は、直方体のボックスかなんかを置いて、やってしまえば、
本当に夢のような使用メモリ&ロード時間で無双系のゲームが作れそうですよ!
Posted by ロコモコ at 2009年11月02日 04:41
あ、既存のクラスを変えないために、@を使うなど様々な工夫の後も見られますですね。
HSIDとか、モーションIDぐらいは、getできる関数を用意しておけばよかったですね
申し訳ないですm(_ _)m でも、雛形を完全に理解されているようで、これまた凄い…

get系の命令は、#defcfuncでreturnするより、マクロを使った方が高速ですねb
…とか、色々勉強になるソースです。ありがたやありがたや(−人−)

あ、あんだわの隠しステージ条件は、やっぱりスコアでしたか〜
公開前と公開後と修正後のスコアを全部合わせれば、きっと条件を満たすぐらい
プレイしているはず!(笑)もっと稼ぎますよ〜。
Posted by ロコモコ at 2009年11月02日 04:43
>get系の命令は、#defcfuncでreturnするより、マクロを使った方が高速
何度もすみません、マクロにできるのはset系の命令でしたorz
Posted by ロコモコ at 2009年11月02日 16:50
フレームスキップは、やってる事は大した事無いんですが『描画時間から逆算して次フレームのウエイトを設定』とかの計算を簡略化してまとめちゃったりしてるので、見ただけじゃたぶん誰にも分からないと思います。ただでさえ私のソースは分かりにくいのに(笑)
可変再生速度は思いついた時はしてやったりと思ったものですが、実際に運用するとなるとmoa相当のモーション分岐を自分で用意しないとならない上に、分岐フレームの処理を加えてやらないといけません(同じフレームを2回再生したり、逆に飛ばしちゃったりするので)
クローンは最初に作ったゲームが300Mぐらい使うようになっちゃったので、その反動で考えました(あんだわは最大使用時でも100Mを切ります)最近のPCならメモリが1G以下って事はあまり無いので今となっては不要かもしれませんが、それでもロード時間の短縮には価値があるんじゃないかと。
モデルIDとモーションID(それに最大フレーム数)はグローバル変数に保存しとくのがいいかもしれませんね。HSPの関数は結構重いので(笑)rndの方がE3DSinとかより重いのでビックリしました
マクロはまあ、見ただけで分かりにくいので現状では理解しやすい様にdefuncでいいんじゃないですかね。

隠しステージは30000点で全部出てきます(ステージ4)かなり無茶ぶりな敵が出てきます(笑)硬いです(素の意味で)
Posted by ぼおん at 2009年11月02日 21:05
フレームスキップモジュール今回は問題なく動作しておりました。
早速導入させて頂きます!
可変再生速度は非常に興味深いです。
FFでいうところのヘイストやスロウのように
モデル毎のモーション速度を微妙に速く・遅くできると表現の幅が広がりますね。
Posted by ぶちさば at 2009年11月02日 21:16
おお、良かったですありがとうございます〜!前のはオーバーフローとLONGINTの扱いが主な敗因だったみたいです(おちゃっこさん指摘ありがとうございます)

可変再生速度の演出法としては、でかいキャラクターを遅くしてやると巨大感(というか昔の特撮みたいな作り物感)が出るみたいですね。
ゲーム的な使用例としては、怒った時に速度が1.2〜1.4倍になるようにしてみました。あと実は寒さに弱い敵とか設定してあるんですが、あまり有効に活かせなかったみたいです(笑)
Posted by ぼおん at 2009年11月02日 22:00
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。