ランドストーカー on JavaScript作成記(4)

ランドストーカー on JavaScript作成記(4)







初めに

前項の作成記(3)の最後で持上げ状態での移動モーションを作りました。
次は、置きモーションの仕上げと投げモーションです。
その前に背景オブジェクトの重ね合わせをどうにかすべく、
背景オブジェクトをNPC等と同じくスプライトに
変えようと作り変えを開始します。

試行錯誤を続けているうちに、スプライト描画が正しく行われるのが2x2までだった、という驚愕の事実が判明しました。

描画関連を全面改修するのが面倒になり、
移動可能オブジェクトを含むNPCにも重力を持たせる方向へと舵を切ります。

相変わらず進行方向が定まってませんが、フラフラと進んで行きます。



NPC/オブジェクトに重力処理を追加

置きモーションの仕上げと、その次の投げモーションに絶対に必要に成る重力の処理を作ります。

前項の作成記(3)に記述した通り、オブジェクトを置く動作とは
ライルの前方の高さ三段目の位置に設置する事です。
通常であれば自由落下開始し、下に何かあればそこに乗るわけです。
落下する為には、重力の処理が必要ですね。
基本的にはライルの重力処理を流用すれば良いでしょう。
置きモーションの仕上げは、重力処理を書けば完了します。

持上げ可能オブジェクトは、全てNPCと同じ扱いにしてあります。
スプライト描画用のimageファイルを分ける都合で、
NpcClass初期化時に渡される種別パラメータが1000未満
の場合は人物や動物等の通常NPC、
種別パラメータが1000以上2000未満の場合はアイテム等のオブジェクト、
という感じで分けてます。

つまりNpcClassに重力の処理を書けば、NPCとオブジェクトの全てに重力が追加されます。

ほぼRyleClassからコピーしただけですが、書いてみたコードがコチラです。


いま読み返してみると、このコードはライルを考慮に入れてませんね。
NPCやオブジェクトが上から降ってくる場合には、ライルに突き刺さるでしょう。

そしてこのコードでどう変わったか、教会で試してみます。



本物っぽいですね。
上に乗ってる物が少し遅れて落ちる所なんか、まさに本物っぽいですね。

そして、NpcClassに書いたという事は通常のNPCにも重力が出来たはずですので、試してみます。


ベルが階段をトントンと降りていきます。
成功ですね。



投擲モーションを作る

持上げられるようになり、置けるようになったら、次は投げられるようになりたいですね。
ランドストーカーに於ける「投擲」とは何なのか、研究します。
まずは本物のゲームで実際に投げている所を動画撮影して、1フレーム毎に見てみます。
投げ始めの最初の5フレームはオブジェクトは移動開始せずに、
ライルが投擲モーションの一つ目になっているだけです。
6フレーム目からオブジェクトが移動開始し、ライルは投擲モーションの二つ目になります。
オブジェクトは横方向の移動を開始し、同時に重力も加わります。
色々と試していて、X方向に投げる場合とY方向に投げる場合で移動距離に差が有る、という勘違いをしたりしました。
その勘違いを含んだままのコードはコチラ。


他のコードもそうですが、実に単純なコードです。
モンヴァーンのコードと同様に、フレーム毎に何ドット移動させるかの処理を書いただけで、大した技量が無くても書ける単純なコードです。
現在ではNPCの場合はこのコードだと誤りである事が分かっています。
NPCの場合は着地時に「投げられている状態」が解除され、横移動は無くなり、自律移動に戻ります。

そして実際に投げてみて、本物と比較した動画がコチラ。


教会の中で投げたり置いたりしてみた動画がコチラ。


未だにライルの投擲モーションが有りませんが、
オブジェクトが投げられた時の移動は本物そっくりですね。
かなりの手ごたえです。
次はライルの投擲モーションを作ります。



突然の脱線

最早いつもの事と言えますが、脱線します。
投擲モーションを作りたいのに何故かモチベーションが上がらずに、
「今までずっとFireFoxで動かしてるけど、別のブラウザだとどうなんだ?」という、
他のブラウザでの互換性が気に成り始めます。
著作権法等を考えると絶対に公開出来ない物であるにも関わらず。

いや、コードのみ公開でBGM/SE/Imageは個々で用意という形式なら公開可能でしょうか?

で、OperaとChromeで試してみました。

まずはOperaです。


次はChromeです。


両方とも、最初のシーンのBGMが鳴っていません。
これは最近のブラウザでは普通の事で、セキュリティを考慮すると必須な事です。
FireFoxでも設定を変えない限りは同様です。
そして重ね合わせの処理が正しく行われていませんね。


恐らくこのsort()の書き方に問題があると思われますが、
正しく動作しても不完全な現状では、特に直す必要もないでしょう。
それ以外はFireFoxと同じように動いてる模様ですので、
互換性を取るのもさして難しく無いでしょう。



更なる迷走

何故かモチベーションが上がりません。
Twitterで有名な方と会話させて頂いていて"DECOのカルノフ"の話題になり、ジョーク動画の撮影を開始。


分かりません。一体何処へ向かっているんでしょう。

そして遂にはFamicom版のDragonQuest3(DragonWarrior3)を作り始めます。




このゲームはチーフプログラマーがランドストーカーと同じ
内藤寛氏(Mr. Kan Naito)なので、大幅な脱線では無いと言えなくも無いです。
朝から飲まず食わず、ぶっ続けで作り続け、約8時間でここまで出来ました。
ランドストーカーシミュレーターのコードをベースに書いたので
コーディング自体は非常に楽でした。
通常は行く事が出来ない「町の上の方」の確認に一番手間取りました。
スプライトも16x16と小さく、作成は非常に楽でした。

そして遂にFamicom版のFinalFantasy2を作り直し始めます。
以前の脱線/迷走時に作った物からはBGMとImageを流用し、
コードは現在の物を流用し、一新します。

そして出来た物がコチラ。


DragonQuest3と違い、かなり本気で作りました。
シーンチェンジの際にBGMが一瞬途切れる現象も再現しました。
宝箱とゴードン王子以外は、ほぼ完璧に再現していると思います。
NPCの移動パターン、町の大きさ、部屋の大きさ、エフェクト等を考えると、
DragonQuest3と比べると物凄く複雑です。
6502のコードの逆アセンブルはしてませんが、スプライトは16x8を二つで一つとして処理しているような気がします。
作っていて段々と本物に近付いていくのが、非常に楽しかったです。
神の領域であるNasir Gebelli氏の傑作を簡単に再現することが出来る程にコンピューターは進化したんだな、と実感出来ました。

素材はコチラ。
NPCの画像を見ると、随分と先の町まで作ろうとしていたのが分かりますね。





次は会話でしょうか?
それとも思い切ってFinalFantasy3の作成?
大好きな作品なので、もし作るならかなり本気になるでしょう。

いや、やっぱりランドストーカー作成に戻ります。



閑話休題

どこまで作って、次は何を作るのか忘れてました。
ツイッターのログを見ると、投擲モーションを作ろうとしてたらしいです。
というわけで、モーションの画像を作る事にします。
ライルのモーションは、2段階 x 4方向です。
そして、出来た画像がコチラ。


一番右の列ですね。
持上げモーションと同じく、持っているオブジェクトが重なって見えない箇所は、ドットを打って偽造しました。

実際にモーションに組み込んでみた動画がコチラ。


やはりライルのモーションがあると、本物のように見えますね。



ダメージモーションとモンスター

いよいよライルのモーションも残り少なくなって来ました。
次はダメージモーションを作ろうと考えます。
最初に、モーションの画像をキャプチャーし、加工整形します。


一つの方向につき一つのモーションですので、作るのは楽でした。
次に、実際にダメージを受けた状態を作ろうと考えます。
最初に思いついたのは、
剣の衝突や持上げ/投擲の際に使ってる専用キーに
「ダメージを受けた」という処理を組み込む事でした。

しかしそれでは味気が無いだろうと考え直し、
どうせならモンスターを作ってしまおうと考えました。

スライム (Bubble) は動きが少ないし、ラフリップス (Mushroom) は何か違うかなと思い、
オーク (Orc) にしました。


まずは画像を作ります。
多分これで全てかな、と思いますが…
NPC作成時もそうでしたが、後に作り直す事になるでしょう。

次にMonsterClassを作り、敵の動きを何となく書いてみます。


基本的にはNpcClassを流用しています。
まだHPや攻撃力、所持金や所持アイテムとドロップ率なんかは作ってません。
とりあえずダメージモーションを出す為だけに作ったので、
ライルを感知して追跡する状態と、ライルに近接している時に攻撃する状態だけを作りました。


単純にライルのダメージモーションを出したい為だけに作ったので、不完全です。
ジャンプ攻撃はしません。
突然の停止も無く、ライルを感知する前の索敵モードも有りません。
もちろんライルが剣を振ってもOrcはダメージを受けません。
更には地形や他のスプライトとの衝突判定すら有りません。
それでも、何となく本物っぽいですね。
マサンの村にOrcが居るはずが無いんですが、本物っぽいです。
不完全とはいえモンスターが出来た事は、このシミュレーターにとって大きな一歩です。



登攀モーションを作る

このまま村を出て先を作り始めても良いんですが、
どうせならライルのモーションを全て作りたいな、と考えます。
次は登攀モーションです。
実際は最初のダンジョンが初出のモーションですが、
村を出る前に作ってしまいます。

いつものように、まずは画像をキャプチャーをします。


一つの方向に対し、四つのモーションです。
そのうち二つは兼用なので、用意する画像は三つです。

次はSEとコーディングですが、ここで問題が出ます。
今までのSEは全て単一でしたが、この登攀モーション時や会話時のSEは、短い音を連続で鳴らせて構成します。
現状で連続で鳴らすと、このようになります。


剣衝突のモーションですが、この程度では連続音とは言えませんね。
SEの再生チャンネルを増やし、調整しました。


これなら連続音と言えますね。
撮影環境のせいか、動作が停止しているようにみえる部分が有りますが、
実際は連続音が出ている間は静止→剣衝突のモーションを細かく繰り返しています。
そして改めて登攀モーションを作りました。
広場に有る像を登れるように設定し、試してみます。


連続音もきちんと鳴っているようです。
成功ですね。
今後作るであろう、会話時のSE連続再生も問題無いでしょう。



終わりに

かなりの数のモーションが出来ましたので、
もう既にマサンの村の中で必要なモーションは足りています。
次は会話や、所持金を設定して買い物をさせたり、アイテム/装備画面を作りたいですね。







御質問・御意見・御感想は@m_o_p_u までお気軽にどうぞ







  << 前の記事 次の記事>> 
イメージ   ランドストーカー on JavaScript作成記(3) とびだせ!S端子ケーブル  
SEGAハード改造記(1)
 
イメージ



コメント

このブログの人気の投稿

Ys IVのデバッグモードと未使用ボス

ランドストーカー ~皇帝の財宝~

ランドストーカー ウォーキングシミュレーター on JavaScript 作成リポート

イース4のデバッグモードを実機で

An intruder has penetrated our force field.

ランドストーカー on JavaScript作成記(2)

ランドストーカー on JavaScript作成記(3)

自作の楽しさ

チートの話