日記(954)

<前 次>

セリフの短さ

そろそろ更新したいのでスクリプト講座の続きを書いていました。
明日にでも、更新しようかと。

ゼルダの新作の発売が近付いてきて、任天堂ホームページでも早くからスタッフインタビューがあって、「ゼルダらしさ」について考えることがありまして。
で、ゼルダらしさの一つに、「文字の少なさ」というのがあると思うんですよ。
セルフ表示枠に表示されるテキストはせいぜい2~3行までで、説明的過ぎず、かといって足りなくもない、必要十分のテキストが表示されてるんです。
そして、セリフを一度に表示する量が元々少ないがゆえに、「ミンナニハナイショダヨ」や「うふっ」ぐらいの短いセルフでさえ充分な存在感を持っているんです。
で、ここから自分の話になりますが、それを考えるとBomber丸Worldのセリフはどのくらい表示すべきか、ということが問題になるんです。
ゼルダは、ある種、セリフが短くても成り立つようにできているからセリフが短くても成り立つんであって、Bomber丸Worldの場合長いテキストをしっかり表示しないといけないかもしれない、あるいは文字が小さくてたくさん表示できるスペースを設けたとしても小さなセリフが存在感を失わないでいてくれるかもしれない、そんなことを考えていました。

無題

今日はのんびりしておりました。
最近目を酷使しすぎなのです。

バリエーションデータの続き

で、バリエーションデータの、どのデータをどのタイミングで読み込むか、というのを考えてました。
Aという基本データと、Aと少し違うBのデータがあったとして、BにはAと同じ内容のデータは記載せずに、Aとの関連と差分のみを記録するという方式でデータを扱うのがバリエーションデータなのですが、記録するほうはそれでいいとして、Bを読み込むときにはどうすればいいのか、という問題があるわけです。
基本となるAを読み込むならただ読み込むだけでいいのですが、Bを読み込むとき、同時にAをも読み込む必要はあるのか、ということです。
同時にAを読み込んで初めから完全なBのデータを用意しておくのはプログラム的にも簡単なのですが、例えばBがAとほとんど違っていた場合や、Aから派生したBから更に派生したCからまた派生した……Zなんてデータが来た場合、Zには最早Aの面影は残っていなくて、YやXまでさかのぼれば充分な場合、そもそもデータを参照する回数が少ない場合など、つまり、さかのぼりがあまり頻繁には起こらない場合などには、いちいち全部用意していると読み込み負荷ばかりが余計にかかる可能性が高いわけです。
もちろん現実的にはさかのぼるのはせいぜい5回程度までのはずなので、そんなに神経質になる必要は無いのでしょうが、auto_resourceとの相性なども考えていきたいのです。
先程とは逆にBを読み込んだときにAを読み込まない方式としては、Bのデータを参照して、該当するデータが無かったときにそのつどAを読み込んで該当するデータを探す方法を考えています。
当然のことながら性質も逆で、さかのぼりが少なければ少ないほど、効率的になります。
とりあえず前者をA方式、後者をB方式と呼ぶことにすると、基本データよりも派生データが圧倒的に多いときのメモリ効率で考えた場合、A方式だと末端に行くにつれてデータが追加されるので、メモリ消費が多くなりがちですが、逆にB方式では本当に最小限のメモリ消費しかないはずです。
とにかく、データの性質によってかなり変わりそうではあります。

バリエーションデータ

Bomber丸Worldの最初に表示される画面、すなわちよく言われるところのタイトル画面について考えてみました。
最初の予定では、2002/10/05(Sat)の日記や、2003/11/19(Wed)の日記で書いていたように、普通にタイトル画像を用意しておいて、それをドカンと出す方式にしようかと思っていたのですが、どうにもこの方式だとまず画像が必要だし、タイトルからゲームに入るところのインターフェイスをどうするかに迷うし、なんとなくだけど「らしくない」気がしたりするので、よくある正攻法のタイトル画面とは違う方式にしてみようと思いました。
そこで考えたのが、ゲーム画面を最初から出しておくという方式。
具体的に言うと、タイトル画面用のマップを用意しておいてそこを自由に動き回れるようにしておいて、マップ内にある特定のオブジェクトを調べることで実際にゲームが開始されるようにします。
もちろんタイトル画面というからにはタイトルも表示しなきゃいけませんが、マップ上にタイトルを表示するのは別に難しくないと思うのでこの方法で検討してみようと思います。

そして、データをXMLとかで管理しようと考えていたのですが、目的から考えるとやっぱりXMLである必要はなさそうに思えてきました。
Bomber丸Worldに必要なデータは、多重に階層化されていて、それぞれの階層にはデータがあって、末端の階層にあるべきデータを参照して該当するデータがその階層に無ければ上位の階層に該当するデータが無いか見に行き、あればそのデータを使うという、すなわち、もっとわかりやすく例で言えば、例えば、「カイモチ民であるふにゃが困った顔をしているとき」の歩くスピードを調べたいとき、「困った顔」というのには困った顔のデータしか無くて、歩くスピードがわからないので「ふにゃ」の歩くスピードを見に行くんだけれどもふにゃの歩くスピードが標準的なカイモチ民と変わらないから特には設定されてなくて、最終的に「カイモチ民」まで見に行って、最終的には「カイモチ民であるふにゃが困った顔をしているとき」の歩くスピードは「カイモチ民」の歩くスピードとして得られるわけです。
これを使えば何がうれしいかというと、ほとんど同じだけど一部が少し違うようなデータを簡単に作れるんです。
オブジェクト指向とかがわかる人ならクラスの継承のようなもの、といえばわかるでしょうか。
詳しい実装方法は後で考えることにします。

キノコ封印プレイ

なんだか任天堂のゲームのマリオというキャラクターの印象というのが、キノコという印象が強いらしいので、マリオシリーズでキノコ封印プレイに挑戦してみようかと思っています。
スーパーマリオブラザーズ1はどうせ誰かがやってるだろうからほっとくとして、ワールド、RPG、64あたりが特に面白そうです。
とりあえずルールとしては、キノコの効果を出さない、つまり、通常のキノコであれば入手そのものを禁止、RPGなど、使わずにストックしておけるものなら使わなければ所持OKでいきたいと思います。
カート系では一度入手してしまうとテレサに持っていってもらわない限りどのアイテムも使用不可になるのである意味かなり厳しいかもしれません。

むしゃくしゃしてやった。今では後悔している。

ふにゃさんの新ステージを作ってました。
とにかく無茶苦茶なステージばかりで、一見するとクリア不可能そうに見えて実はバグに近い仕様、すなわち裏技を使えばクリアできるというステージが多くなっています。
吊天井式に上からとげとげが一度に落ちてきたり、アイスゾーンもバナナもびっちりヒートゾーンに囲まれていたり、ブロックで完全に行く手が遮られていたりします。
中には逆に簡単にクリアできそうに見えてものすごくシビアだったり、ただネタだけで簡単だったりするステージも紛れ込んでいます。
ギャラリーには一部のステージの写真を載せておきました。

散髪に行きましたぞ

ラインブレイカ2の動作は良好です。
もう少し速くてもいいかと思ったのですが、とりあえずは許容範囲内でした。
もっと速くしようと思ってクラスの動作を調べるためMSDNライブラリを調べようとしたのですが、今日はサーバーに繋がらず、結局わかりませんでした。
とりあえずまずまずの速度は出ていたのでいったん開発が中断されるかもしれません。

<前 次>