2009/03/12

今日の引っ越し

・日記引っ越し

これまでの日記をはてなダイアリーに引っ越し。前々から、Bloggerが不便だと感じるようになっていて、Bloggerでの記録を移行する方法を見つけたので思い切って移行してみた。この情報が書かれたときから、Bloggerのフォーマットの設定の項目が変わっていて、それを合わせるためにDでごにょごにょとやっていた。

と、いうわけで引っ越したので、これからも生暖かく見守ってください。

2009/03/11

今日のカーソル

・卓球製作開始
折角XNAの本を買ったので、XNAを使って卓球の制作を開始。タイトルロゴやマウスカーソルを作ったり、表示したりしている。3Dの描画は必要な部分を本で読んだところで、まだコードは書いていない。OpenGLで3Dをやったのに比べてだいぶ複雑な印象を受けた。
XNAを初めてまともに使っているわけだが、なんとなく落ち着かない。その理由を分析したら、VisualC#がVisualC++よりもやたらと親切すぎること。それと、XNAの枠と自分が今まで使ってきたプログラムの構造とが違って、XNAの枠にあわせて作ろうとしていること。言語の違いはほとんど意識することなく使えている感じ。

2009/03/10

今日のクロックアップ

・シューティング作成

・スクリプトいじり

第2回3時間コンテストということで、「アイテムをとってゲームスピードを上げて、早くクリアすることで得点を荒稼ぎ」というコンセプトの横STGを作ってみた。しかし、まともなシューティングの土台を作るのに1.5時間以上かかって、まともにゲームとして成立しなかった。コンセプト的にもあまり自分の趣味に合わないのでお蔵入り。ランクを能動的に調整できて、それに毛が生えたという程度。

復讐のスクリプトをいじっていた。だいぶいい実装が出来そうになったのだが、最後の壁として型情報が立ちはだかって詰んだ。型の情報を保存する型、というものでもあればよかったのだが見つからない。sizeofやstringofプロパティが取れるのに、型は型ではないというのは、型とはいったい何なのか。Phobosで型情報を触っているモジュールがあり、それを参考にして、テンプレートとaliasとを組み合わせて乗り越えられるか、と思ったが越えられず。stringofプロパティを利用してコンパイル時にコードを生成する、というようなことも考えたのだが、ややこしかったのでやめた。

それで結局妥協して、関数を呼び出すためのラップ関数を一つずつ作って、それへのデリゲートを連想配列に格納する、という方法での実装にした。ラップ関数を作った労力のリターンとして、関数を呼び出すときに引数をどうするのかを意識せずとも使えるようになったので、これで妥協。その実装の進行具合は、構文解析のあたりで機嫌が悪くなっていて、ごく単純な命令しか実行できないという状況。

2009/03/09

今日の下絵

・絵
特に何かやったと言うわけでもないが、ドット絵の本を図書館から借りてきた。やはり下絵のデザインもちゃんとしていないと厳しい、と思ってみたり。

ゲームの画面サイズは小さいと情報量が減って不快だと思ったので復讐の画面サイズをやはり640*480にしようかと思い始めている

2009/03/08

今日の霧

・フォグ夢現
フォグがあると画面の見栄えがだいぶ変わるな、と思って、蘇生のパーティクルを改良してフォグを作ろうという計画を立てていた。フォグだと粒子の数が多くて、いちいちドットを打つ関数を呼んでいたら速度に響くだろう、と思ってグラフィックメモリを直接操作するという計画を立てた。しかし、それを実装しようとしたらDXライブラリにグラフィックメモリをロックして直接操作する方法がなかった。ライブラリのソースを見たら内部的に使っているものはあったのだが使い方がわからない。SDLでは当たり前のようにあったので、当然あるものとして思っていたので予想外だった。
で、どうするかは考え中。素直に「重いけれどきれいになります」という感じにするのが妥当か。

2009/03/07

今日の混迷

・スクリプト

・XNA

テンプレートと可変個引数の項目を読んでみたら、昨日当たりかと思ったのは別に使えなかった。それでもう少しコードを書きながらいろいろと試してみたりもしたのだが、やはり手段がなさそう。

それで仕方なくコードを手書きしていくことにしたのだが、それがまた混迷している。さすがに一つ一つの関数ごとに愚直に書く様なことは避けたいので、引数の数ごとに関数を分類する、ということをやっている。そのときに関数の引数として任意の型の関数ポインタを渡すようにしているのだが、それをどう渡すかで詰んでいる。Phobosにもそのようなことをしているものがあって、それを参考にしてはいるのだが上手くいかない。テンプレートで何とかしたいのに上手くいかない。あんまり上手くいかなくて憂鬱。

 

XNAの本を買ってきた。飛行シューティングを作る前に物理ゲームが大量の壁として立ちはだかっていたことを思い出して、それもまた憂鬱の種。Poseidonが不機嫌なのも憂鬱の種。

2009/03/06

今日の事前

・XNAさわり
・スクリプト
XNAを触っていた。頂点としてベクトルの配列を指定してそれを描画する、というクラスを実装しようとしていたら既に存在していた。XNAは何かやろうとすると既にそれが準備されている、という感じがして変な気分。慣れれば便利なのだろうけど。

スクリプトの課題となっている、関数の呼び出しらしきものがD言語のページに書かれていることに気がついた。問題は、まだろくに使ったことのないテンプレートや可変個引数がコアに使われていて、そのコードの理解が上手く行かないこと。

2009/03/05

今日の入力

・飛行ゲーム考察
昨日から考えている飛行ゲームの入力について考えていた。少なくとも上下左右の舵と、加減速のキー、それと攻撃をするためのキーが最低限必要で、それをやるには普通の2Dシューティングのキー配置では出来ない。かといってアルファベットのキーに色々役割を振り当てるのは自分の好みではなく、テンキーを使うことも考えたが、ノートPCにはテンキーがないことがほとんどなのでそれも出来ない。残る手段としてマウスがあるのだが直感的に分かりやすい操作体系がなかなか浮かばない。ジョイパッドを使えばいいのだろうがジョイパッドが好きではない。Wiiリモコンなんかは舵の操作にかなりよさそうだがそれだと遊べる環境がほとんどない。
やはり、全ての軸に自由な3Dゲームを作ろうと思うとどうしても入力の面で壁にぶつかる。分かりやすい3D用入力装置が普及すればPCゲームの世界は大きく広がるのではないか、といつも思う。

2009/03/04

今日の束縛

・スクリプト
・作りたいもの
スクリプトを作るうえで、ホスト側のプログラムの関数をどう呼び出すかが一番の課題となっていて、それについて考えていた。昨日書いた、関数ポインタを連想配列を使って選択するというのは悪くないと思っているのだが、それにどうやって引数を渡すのかが問題になっている。Phobosにbindというモジュールがあって、それとタプルを組み合わせれば上手く行きそうだと思って試してみたのだが、bindモジュールにバグがあるそうで使えない。タプルを上手く使えばbindなしでいけないか、と解決法を模索しているところ。
上手く行かなくても、関数ポインタの型ごとに関数呼び出しをラッピングする関数を一つ一つ作っていけば、難しく考えなくても済むし、実用的にも現在想定している範囲内において問題は発生しないのだが、それは美しさ的に納得できないので行き詰るまでは粘ってみる。

小説を読んでいて飛行機にあこがれたので、この頃無性に作りたくなっている横スクロールSTGと組み合わせて妄想してみたり。発想して、すぐに作れる時間が無いことは不幸。

2009/03/03

今日の危険

・絵
・スクリプト関数呼び出し作成開始
大量の裏紙が提供されたので紙を贅沢に使って色々な絵を試していた。主に目の表現。その成果で目に感情をこめることが少しずつ出来るようになってきた。しかし相変わらずネックとなるのは髪の毛。

スクリプトについては今日はほとんど考えていなかったのだが、プログラミングがしたかったので、とりあえず考えてる実装が可能であるかの実験を行った。関数のポインタをBox型の、スクリプトでの関数の名前の文字列をキーとする連想配列に登録。Boxから直接関数ポインタ型へのunboxが出来なかったので、一旦voidポインタとして取り出してそれをキャストして関数を呼び出す。この手法でスクリプト上から引数1つでのwritefln関数の呼び出しに成功した。

昨晩よさそうな短編小説のネタを思いついたのだが、そのネタを生かす枠組みをどう構築するかがなかなか浮かばないので保留。そのうち書く。

2009/03/02

今日のトップダウン

・スクリプト設計

・復讐キャラ設定妄想

関数を実装する前に、ちゃんと言語の設計と実行の仕方は決めておくべきだと思って細かい設計を考えていた。大体のことは決まったが、まだはっきりしない場所が残っているので完全に固まるまでは実装しないつもり。

あとは復讐の主要キャラの設定をいろいろと妄想。ご都合主義的な流れになる気配が少なからずあるが、ご都合主義となることの正当な理由をゲーム中に盛り込めば許される、と思う。もしくはストーリーの時間的広がりを大きく拡張して、天文学的な確率が当たるようにするとか。

2009/03/01

今日の括弧

・トップ絵更新

・スクリプト構文解析

先日まで描いていた絵を日記の2000Hit記念と言う名目にして公開。復讐では全主要キャラにあんな感じの立ち絵が付くかもしれない、付かないかもしれない。

スクリプトの構文解析を作った。ソースを一つ一つの式にツリー構造を持たせて分解。次にやるべきは、式の解釈と制御構文の実装。

2009/02/28

今日の自前

・スクリプト構想

スクリプトのことを考えていたら、自前で新しいスクリプトエンジン実装する、という虚数解が導かれてきた。せっかくD言語というマイナー言語を使っているのだから、「ないものは作るしかない」の精神で自作。どういう言語にするか考えて、作りやすそうなLispのような設計にすることに暫定決定。Gimpのスクリプトをいじっていてだいぶ慣れてきたことが影響している。現在の進行状況はファイルを開いてコメント行を処理する機能を作ったところ。

ここ2日間、夢に弾幕が出るようになってきている。たまたま夢に出てきたので記録することもろくに出来ずにほとんど忘れてしまって、覚えているのが弾源が画面端を回りながら弾を撃ってきているという光景だけ。今晩見たら今度こそ記録する。

今日の分離

・絵

・スクリプト調べ

先日からの絵の仕上げ。気になる部分にアンチエイリアスをかけて完成。明日にでも公開予定。

復讐に使うスクリプトについて考えていた。Pythonは既存のものは古くて使えず、自前で作るのもC言語版ヘッダを見た限りでは難しそう。Luaは、新しいはドキュメントがややこしいサンプルコード一本でわからず、古いものは自前でいじる必要がありそう。あと、Luaに馴染めない。D言語をDLLを利用してスクリプト風に使うする、という手があるそうなのだが設計が難しい。結局どうするかが決まらない状況。メイン部分とスクリプトにしたい部分をコンパイルしわけて、スクリプト部分のコードをコンパイルしてリンクするだけで動かせるようにする、という手も考えたがメリットが薄そうで微妙。結局まだ解決していない。

2009/02/26

今日の陰影

・絵

プログラムを書かずに絵ばかり描いている今日この頃。先日からの絵に陰影をつけたりしていた。あとは一度描いた他のキャラクターを没にして新しく下絵を描いたところ。

2009/02/25

今日の全身

・絵

D+Luaを調べていて、サンプルの意味が良くわからなくなったのでLuaのリファレンスを読んだら、却ってスタックとかでよくわからなくなった。

それでLuaについては本に頼って勉強することにして、パラボラとかもやる気がしなかったので先日から描いていた絵をとりあえず完成させた。残すは陰影付けとアンチエイリアス。

最初の予定では顔だけのつもりだったのだが、せっかくなので全身絵にした。思いつくままに描いていたら、ちびキャラで以前書いたデザインとの間に若干の相違点が出てきたのでちびキャラをそちらに合わせることにする。

絵を描いているのもこの頃楽しくなってきた。

2009/02/24

今日の追尾

・弾幕作成

PythonDをやろうとしたら、使われているDのバージョンがだいぶ古かったようでコンパイルが出来なかった。そこで気合でコードを直してコンパイル通るようにしても良かったのだが、それは大変そうだったのでやめておいた。

それでパラボラをやろうと思ったのだがどうも見る気も起きなかったので、昨日作成したホーミングを使って弾幕を書いた。そのデバッグ中にプラクティスメニューのバグが出てきたので直した。現行のバージョンには関係のないバグなのでパッチは出さない。

PythonDが駄目だったのでもうひとつスクリプト言語として載っていたLuaを導入してみたが、まだ試していない。GimpのスクリプトとしてSchemeも調べてみた。文法はかなり気持ち悪く感じるが理解できないものではなさそう。

2009/02/23

今日のぼかし

・絵

・蘇生ホーミング作成

Gimpのガウシアンぼかしを使って、蘇生の絵をいじっていた。ぼかしをするだけでドットが滑らかに見えるようになって、フルスクリーン表示にも耐えうる見た目になって強力。ぼかしのやりかたで少し詰まった部分があったのでメモ。

ここで使用する画像は普通のビットマップファイル。まず、このファイルをGimpで開く。次に、レイヤのリストのレイヤ(背景という名前になっているはず)を右クリックして、アルファチャンネルを作成。それから、画像の透明色にしたい部分を選択してデリート。「色域を選択」とかがあるのでそれを使うと便利。そして一番罠となっているのがここで、画像メニュー→モードがインデックスになっているのをRGBに変更。あとはガウシアンぼかしを適用して、pngで保存。透過色がいらなければアルファチャンネルとかの操作は不要。

これで蘇生の絵をどんどん変換していたわけだが、やはり面倒で人間がやる作業ではないと感じた。そこで、スクリプトを書いて処理しようと思っているのだが、その言語がLisp。

それとは関係なしに、暇があったので落書きした絵が気に入ってそれをドット絵にして描いているところ。表情をつけるとなると目が結構繊細になってきて難しい。

あと、特に使う予定は立っていないのだが蘇生にホーミング弾機能を実装した。力押しで美しくないアルゴリズムなのだが、いつもの「プログラミングはパワーだぜ!」とでも。

2009/02/22

今日の落下

・パラボラメイン作成中
・絵
時間があって気力もあったのでパラボラのメイン、軌道の計算を書いた。しかし、というより予想通り、上手く動かない。どこかで単位が食い違っているのが原因ではないかと思っているのだが、それらしいところが見つからない。
もう一つありえる可能性として空間の曲がりによって半径方向にずれている可能性も考えられるのだが、そうだとしても解決方法が思いつかない。と書いたところで、日記の魔力によって解決法が少し見えてきた。正しいかは分からない。

パラボラを一通り書いたところで、絵の勉強を始めた。顔のアップを描いてみているところ。やっぱり髪は上手く描けない。

今日の複合

・パラボラ視点変更完成

視点を回転させる機能を作り忘れていたのでつけておいた。これで多分視点関係は完成。そろそろ本丸の軌道の演算を実装しないといけない。

復讐を作るのにPythonスクリプトを組み込もうと思ってPythonDを調べている。しかしドキュメントを見たところDのコードをPythonから呼ぶ方法はわかりやすく載っているのだが、PythonコードをDから呼ぶ方法が良くわからない。多分書いてはあるのだろうが例が見当たらないので困っている。

2009/02/20

今日の視点

・パラボラ視点操作作成
ホイールのことはすっぱりと諦めて視点操作を作った。操作がモデリングソフト風になってきている。
あと、折角クラス名をAppleにしたので投げる物体をリンゴの絵にした。縮尺がおかしい化け物リンゴ。

この頃作業ペースが落ちているので加速しないといけない。

2009/02/19

今日のなでしこ

・ホイール調査

・なでしこ

昨日に続いてSDLでのマウスホイールの動作について調べていた。SDLのソースを探していたらマウスホイールの上下を処理する部分が見つかったのだが、それが#ifdefとかで囲われていて実際にコンパイルされているのかがわからない。それともうひとつ、SDLでは本来はイベントを利用して入力を処理することを想定しているようだが、自分ではイベントをろくに使っていないのでそれが原因である可能性もある。ただそうだとすればなぜホイールだけ動かないのかという原因がわからない。結局調べても良くわからなかった上、他の操作方法も思いついたのでホイールは諦めることにする。

パラボラの物体の軌道を計算するために必要な積分を解いてみようと取り組んでいたが、どうにも解けそうな気がしなかったのでやはり力押しで攻めることにする。その他の課題となりそうな場所についてもいろいろと対策を考えてみているが、まだ実装していないのでどうなるかがわからない。

なでしこはプログラミング初心者へ教えるのに、どれぐらい良いのかと思って試しに使ってみた。第一印象としては構文を覚えようという意思がなくても、結構自然な日本語で記述ができるのでわかりやすいという印象。しかし、グループと配列とを組み合わせて使い始めてからわかりにくく感じた。ドキュメントを見た限りでは意味が同じであるように感じられた複数の記法が、別のものを組み合わせると違った意味となってくるという点で難しかった。具体的には、配列の要素番号の書き方。文法が厳格なほうが使いやすいということもある。Pythonなんかは多分その究極。

2009/02/18

今日のりんご

・パラボラ製作

・復讐絵

今日は主にパラボラを作っていた。とはいっても暇すぎて積分を解いている暇がなかったのでシステムを組んでいた。重力といったらりんご、ということで、物体のクラスの名称をAppleにしてみた。本当はObjectとか使いたかったのだけれど、それは全ての根本クラスの名前として使われているから使えない。

で、マウスでの操作を作っていたら上手く動かないところがあって、原因を調査したらSDLではマウスホイール上下が宣言はされているけれども、実装がされていないらしいという事実が判明。SDLのソースをざっと見たがそれらしい部分も見つからない。なので自前で実装するか、それとも他の操作方法を考えるかしないといけない。

それと、気が向いたので復讐の絵をいじっていた。主人公の正面からの絵をとりあえず描き終えて、その他キャラクターの絵を微調整。ゲーム内では使う場所がないと思っているが原画として使うので形は細かく描き込んでいる。そしてさらに暇だったので会話窓用の大きい顔グラフィックを描き始めてみた。目は練習している成果かそれなりになってきたのだが、今度は小さいサイズでは全く気にしていなかった髪が問題として立ちはだかってきた。

今日の積分

・弾幕作成

・パラボラいじり

弾幕を書いた。また特に必要でもないのにレーザーを使っている。下手すると弾幕の半分にはレーザーが登場することになるのではないかというぐらい。レーザーは弾消しが効かなかったりカスれなかったりと根本的にプレイヤーにやさしくない。

パラボラの背景を作成。時計の針を背景にすることで時間の進みとデザイン性とを両方得られる。

相対論の本がついに解くべき式までたどり着いた。が、微妙にややこしそうな積分の式が必要になっている。解けないようであれば力押しで区間を細かく区切ってそれぞれ演算してから足し合わせるという手段をとろうかと思っている。

2009/02/16

今日の上下

・蘇生バグ修正パッチ

・会話スクリプト強化

蘇生0.62パッチ。難易度が常に『小説』になる問題を修正。デバッグ用のコードが残っていたのが原因。正式な修正版のりリースはまた明日か明後日に。

復讐の会話スクリプトを微妙に強化。蘇生で作ろうと思っていながら諦めた、行ごとの色変えを実装した。あとは主人公の横顔を紙に書いてみたり。

2009/02/15

今日の部分

・遺伝的AI考察続き
何故か今日はずっと遊んでいたのであまり書くネタがない。ので、昨日の遺伝的アルゴリズムによる格ゲーAIについて。
遺伝的アルゴリズム単体を使用してAIを作るには格ゲーのAIは複雑すぎる。そこで、行動パターンをAIにあらかじめいくつか与えておいて、それに優先度を設定して動くAIという設計にする。そしてその優先度をどう設定するかを遺伝的アルゴリズムを使って求める。問題としては相変わらず遺伝子の評価値がある。格ゲーだと同じ状況でも乱数によって違う行動ため、一度の対戦だけでは評価値を正確に求められない。その結果対戦数を更に増やさないといけない。
状況を適当に区切って、その状況内での優劣を計測すると速くなるかもしれない。
どうにしても、実際に作ってみないことにはどうなるのかが分からないのが難しいところ。

今日の遺伝

・遺伝的アルゴリズム考察

・育成型弾幕STG試作

もう日付が変わっているわけだが。

巨大なボスが出るようなSTGを妄想していたら、多関節→ツリー構造→遺伝的アルゴリズムと変な具合に思考が飛躍したので、遺伝的アルゴリズムについて調べてみた。AI関係の本とかをあさったりもしたが結局Wikipedia以上の情報はなかったし、それで恐らく全てなのだろう。

興味深いので使ってみたいと思っているのだが、思いつく使い道がAIの作成と弾幕の作成しかない。しかし遺伝的アルゴリズムの前提として、遺伝子の評価値の導出が簡単であるということがあるそうなので、AIも弾幕もあまり合わない。

AIは格ゲーか戦略系のゲームを考えているが、評価値を求めるにはAI同士を戦わせる程度しか思い浮かばず、十種類の個体を十世代進めるだけでも結構な時間を要しそうなので厳しい。それで作るAIが一つだけならまだしも、格ゲーであればキャラクターごとに別のAIにする必要があるのでさらに時間がかかる。あとひとつの遺伝子に相当する、AIの思考モジュールの単位をどう扱うかという問題もあって難しそう。

弾幕は、評価値を求めるには人間が避けるか弾幕を避けるAIを作って避けさせるぐらいしか浮かばないのだが、前者では人間の労力が大きすぎ、後者ではまともなAIをどう作るかという問題が生じる。弾避けAIを作るには、人間が作ったまともな弾幕を使って学習させるのがいいのだろうが、それもまた手間がかかる。

 

遺伝的アルゴリズムについてこういった思考を展開したあと、ツリー構造が使いたくなったので育成型弾幕STGを試作してみた。ボスを育成して大きく・強くしていくというコンセプトで試作してみたのだが、頭に描いていたイメージよりも美しさが全くなかったので没ろうかと思っている。ボスのデザインをもっと愛着がわくようなものにすればいいのかもしれないが、それだと巨大化させていくうちにどんどん妖怪になっていくので幾何学的な図形にするしかない。

構造がいかにも遺伝的アルゴリズムを使いたくなる形だったのだが、やはり評価値が越えられない壁として立ちはだかる。

2009/02/13

今日の鎖

・会話機能製作中

・弾幕作成

会話機能を昨日書いてから、設計を特に考えずに書いていたということに気が付いて、設計を一度落ち着いて考えてから書き直した。それで設計段階で決めた、改ページ処理とイベントからの会話呼び出しを製作。あまり意味もないのに再帰を使って遊んでみた。

以前書き留めてあった弾幕のアイデアを思い出して、それをアレンジして作った。レーザーを乱用しすぎている今日この頃。

 

復讐のToDoがもはや絵を描くぐらいしか残っていない。いまだに主人公のデザインが確定していない困った状況。

2009/02/12

今日の制御

・ピストンコラージュD言語対応
・パラボラ曲試作
・文字列描画強化
・復讐会話スクリプト試作
昨日日記を書いた後、WindowsAPIをいじったのだからピストンコラージュのDLLのインポートヘッダをD用に書くぐらい簡単ではないかと思ってやってみた。以前やってみようとしたときはLPSTRとかのWindows関係の型を見て嫌になったのだが、耐性が付いて無事に書けて実際に動かすことにも成功。

更に昨晩深夜、眠れなかったので妄想をしていたら曲のような物が浮かんできたので打ち込んでみた。頭の中にある短いフレーズを実際に鳴らすというだけで苦労したので、やはり向いていないのだと改めて思った。昔習った音楽理論もすっかり頭から抜け落ちているし。

今日の作業はここから。
物理ゲームはどうにもモチベーションが湧かないので久しぶりに復讐をいじっていた。
まずは前々から作ろうと思っていたが放置されていた文字列描画の強化。改行のある文字列を簡単に扱えるようにした。その際にフォント周りも一緒にいじっていたら、書き間違えて文字サイズが小さくなるというバグを作ってしまった。文字描画には地雷があるというような話を聞いていたせいで、バグの原因がそれにあると思い込んで大変な目にあった。
それが済んだ後本題であった会話スクリプトの実装を開始。文法を決めて、それを読み込む部分と、読み込んだ文字列をとりあえず描画する機能を作成。蘇生の文章管理の方法がかなり酷く、シナリオを書くのから遠ざかる一因にまでなっているので、その二の舞にならないように力を入れている。

D1.040がリリースされていた。MacOSXについに対応したらしいが、Macは使ったことがない。

2009/02/11

今日のフォント

・蘇生情報追加

・システムフォント読み込み作成

ウェブサイトを更新。蘇生の情報を書き足しておいた。

ゲームを配布するにあたって、わざわざフォントを配布するのは容量が大きすぎて面倒なのでシステムフォントを読み込む機能をライブラリに追加した。DでWindowsAPIを使うのは初めてだったが、extern(Windows)のあとに関数宣言を書くだけでいけた。見づらいように感じたが妥協する。

今日の遠方

・相対論勉強
・弾幕進行
相対論の勉強を続けている。シュワルツシルト解が出てきて、もうすぐ座標を時間の関数で表せるようになる。あと表現の仕様も固めておいた。
弾幕は中途半端だったものを進めておいた。弾幕を書くペースも随分落ちていると感じる。

実は作ろうとしている物理ゲームでRe:Actionが一番難しいのではないかと思い始めた。技術的には2Dで質点の古典物理しか扱っていないけれど、ゲームにするという点で難しい。

2009/02/09

今日の計量

・弾幕作成

・相対論勉強

弾幕を書いた。ネタ切れ感あふれる弾幕。

JOIが終わって一息ついたので相対論の勉強を久しぶりに再開。以前一度ざっと読んだ本をもう一度最初からゆっくりと読み進めている。二週目だと理解度が上がる。数日のうちに必要な式へたどり着きそう。

2009/02/08

今日の本選

・JOI本選

昨日今日とJOI本選にいってきた。今年ずっとの連続更新記録が途絶えた無念。

本選問題はやや解けた。クイックソートの使い方を知らなかったことと、scanfの使い方を十分把握していなかったことで得点がだいぶ落ちた。高速なソートぐらい勉強しておけばよかった。

JOIでやったことがゲームプログラミングにおいてどう役立つかを考えてみたが、どうも当たり判定の軽量化ぐらいしかないらしい。でもそれも2Dでは実際に効果があるかわからない。ホーミングの処理に使えるのではないかと思ったがそれも微妙。

 

ゲームの面白さについて考察してみた。「一杯のお汁粉はおいしいけれど面白くない。百杯のお汁粉はおいしくないけれど面白い」という理論で、ゲームの正統な面白さの方向で行き詰ったら、別の軸へ向かって伸ばすことでゲーム全体の面白さが成立する、というもの。問題はその別の軸をどう見つけるか。お汁粉は量という軸でいけるが、ゲームは別の軸がグラフィックやら音楽やらシナリオやらとすでに出尽くしている感がある。

2009/02/06

今日のピラミッド

・弾幕作成

暫くぶりの弾幕作成。レーザーで遊んでいる。それと、蘇生5面の道中の構成を妄想してみたり。今までと製作の順序が逆転している。弾幕のネタが浮かばないのが大きな要因。

 

明後日はJOIなのだがろくに準備をしていない。アルゴリズムを広く浅く学ぶなんてことはできないし、ヤマを張って当てたところでそれが何かの役に立つわけでもないから。行雲流水の如く。

2009/02/05

今日の素朴

・絵制作

・JOI勉強

描きかけだった絵を仕上げた。これで主要なボスキャラクターの正面からの絵が揃ったわけだが、肝心の主人公の絵はデザインすら、ちゃんと決まっていない。主人公はただの人間なので装飾をつけにくいのが問題のひとつ。それにしても目のデザインが違うだけで印象が大きく変わる。

JOI三日前なので最低限の勉強を開始した。DでやっていたことがCでもできるようになったところで、昨年の本選の1番を素朴に解いた。ソートのアルゴリズムも勉強したが役に立つかは不明。予選でやっていたことからのパラダイムシフトがないとまともに解ける問題がないように見えるが、3日程度でそう考え方を変えることができるかは甚だ疑問。

2009/02/04

今日の輪郭

・Re:Action構想いろいろ

・絵作成

アイデアが降っては来ないが、暇があったのでどうすればバランスが取れるかを考えてみた。およびその案を実装している。その案だとシステムの車輪の片方が崩れてきて、それとフィーチャーとして考えているアクションの存在意義が薄れてきそうな見込み。その案の一部は採用して、他のアイデアが降って来るのを待つということになりそう。

それで時間を持て余したので復讐の絵を描いていた。今までは紙にはほとんど書き出さず直接ドット絵を描いていたのを、趣向を変えて紙に下絵をある程度書いたあとその輪郭をドットで打って塗るという方式に変えてみた。それで今は水のボスを描いた。主人公は横顔問題含めて絶賛放置中。横顔も紙に書き出したりすれば何とかなると楽観視している。

2009/02/03

今日のマウス

・Re:Actionマウス操作対応

・Re:Action新背景製作

・新作製作開始

ゲームをやっていたらRe:Actionの入力にはキーボードよりもマウスのほうが向いているのではないか、と思ってマウス操作に対応させてみた。それに伴いライブラリのマウス関係の機能を強化。

それと背景に内トロコイドを使っていたのをいじって、背景に線を使うようにしてみた。どうしてかはわからないが3Dのように見えて綺麗。

そのあとRe:Actionを暫くテストしていたのだが、質量が重いと敵との衝突でぜんぜん動じないため、下手に動かずにいたほうが安全という状態。なのでそれを改善しようと思っているのだが、今思いつく限りの方法では上手くいかないのでアイデアが降ってくるまで熟成させておくことにした。

 

その間物理ゲームを進めないで置くのもどうかと思ってパラボラマスターのシステムを組むことにした。物体の挙動は式を使える形に整理できるまで書けない。

opCallとopIndexが便利。

2009/02/02

今日の模様替え

・サイト模様替え

・Re:Action進行

・復讐絵制作

数日前に書いた、模様替えを適用。フレームを廃止して、CSSを使ったデザインにした。HTML,CSSは手書き。あまり変な事をやろうとしなければ、HTMLはあまり覚えることがなくて楽。メニューの項目を毎回コピーして書いているのだが、それを外部ファイルにまとめるようなことはできないものか。出来るのであれば教えてもらいたい。あと、地味にディレクトリの区切り文字がローカルのものと違っていて嵌った。

Re:Actionもちまちまと。壁との衝突処理で、テストとして書いた部分を直していなかった場所があったのでそれを直して、それと演算子オーバーロードの間違いを修正。画面がさびしかったので内トロコイドを使って背景を作ってみたが、背景としては主張が強すぎるのが悩み。そのまま弾幕になりそうな感じの背景。

昨日いろいろとやっていたので今日も結構絵を描いていた。主人公の横顔を書いていてどうにも上手く描けなかったので、思い切って正面からも新しく描き直して見た。しかし締まりがなくて困ったので放置した。

その代わりに、二転三転していた土属性のボスを描いた。結局虚数方向へと転んで天使だかシスターだか死神だかわからないものへと落ち着いた。それで残るは水属性のボスだけとなり、描いてみたが思ったように描けない。実際の設定と脳内設定で矛盾しているのが原因かもしれない。

2009/02/01

今日の崩し

・絵いろいろ

どうもプログラムを書く気がおきなかったので絵を描いていた。プログラムを書かなかった一日というのは何日ぶりか。JOIまであと1週間だというのに。

前から溜めてあったキャラを実際にゲーム中で使うために、横を向いた姿を描こうとしたのだが全く描き方がわからない。特に横顔にどうパーツを配置すればいいのかがかなりきつい。ゲーム中としては正面向きよりも横向きのほうが見る機会が圧倒的に多いため、まともに描けないといけないので困った問題。

描けない理由の分析。

・人間の顔は横から見ることよりも正面から見ることのほうが多い。横から見る場合よりも正面から見るほうがまじめに見ている。その結果横顔についてのデータベースが自分に不足している

・リアル以外の人間の顔も真横から描かれることが少ない。やはりこれも横顔のほうが印象が薄い。

・Z軸のない世界に生きている。そのためX-Y方向から見てばかりでZ-Y方向から見ないし、見えない。

解決策

・髪などで全部隠す。-表情が見えない。アニメーションさせるときに髪をいちいち揺らさないと不自然なので描くのに手間がかかる

・そもそも描かない。-開き直ってZ軸なしにするということ。つまりみんなペラペラ。見分けをつけにくい。

・常にカメラ目線のキャラクターたち。-キャラクターが自意識過剰になりすぎる

・常にややカメラ目線のキャラクターたち。-斜め前を向いている。微妙に描きにくい。微妙に自意識過剰。

4番目をとりあえず採用してみることにする。

 

あと、気晴らしに蘇生の5面の雑魚敵を描いて見ている。小さなサイズでそれなりに描き込む必要性があるので、デフォルメをどうするのか考えている。デフォルメは苦手なのでこれもまた難しい。

2009/01/31

今日の三角

・復讐いろいろ強化

・Re:Action再開

復讐の主にキャラクター関連の機能を強化した。それでキャラクターの向いている向きを取得したり、穴に落ちたときの処理を作ったりした。

デストラクタバグがゲーム中に発生するようになったがGCを手動制御したら起こらなくなった。起きてもそのまま例外を無視して動くようにしてみたが、弊害があるかもしれない。

 

物理ゲーム製作のモチベーションが急に上がってきたのでとりあえず手をつけられるRe:Actionの製作を再開した。それでボスとして使う予定のフラクタルを実装。適当にやったら面白くなったのでスクリーンショットもつけておく。

reaction

2009/01/30

今日の無効

・復讐バグ修正
・復讐敵管理作成
・蘇生ラスボス絵作成
このところ続いているバグと決別。デストラクタのバグは何故かゲーム中では発生せず、エディタ上での発生もGCを動かすタイミングを手動管理することで、落ちても問題のないところで発生するように管理できるようになったので、これ以上調べたところで時間の無駄と放置することにした。そう決めたとたん、GCによって、まだ使用しているメモリが開放されるという怪事件が起きたが無視。スタティックデストラクタを使えば落ちてもデータのバックアップは可能なのかもしれないし。
もう一方の敵の配置のバグは単なる書き間違いが原因だった。前々から紛らわしいとは思いつつも、変えずにおいた場所で間違えた。
バグと決別したので、ようやく本来進めている所であった敵の管理を実装できた。だいぶステージをロードするときの処理量が大きくなってきている。そのうちマルチスレッドの学習も兼ねてNow Loading表示を作ることになるかもしれない。

ソファに座りながら、平らな場所がなくてもマウスを使う方法を編み出したのでその技術を使って、暖かい部屋で寛ぎながら絵を描けるようになった。それで描いてみたのが蘇生のラスボス。描いたはいいが絵のサイズが小さいために、細かい部分がくっついて見た目が悪いのでまだまだ修正が必要。

2009/01/29

今日のGC

・復讐バグ修正中
全然取れない。大量にtry-catchを張り巡らせて、それでより調べてみたところ、デストラクタが呼び出されるときにアクセス違反が発生することを確認。そこでdelete文を全部消してGCに全て任せてみたり、GCを動かすタイミングを手動で変えてみたりと、色々と試したのだがやはり例外が発生する。OpenGLのテクスチャを開放するときに何か間違いがあるかとも思ったが、関係のない場所でも落ちる。そろそろ手詰まり感が漂ってきた。
そしてもう一つ取れないバグが、マップエディタで配置した敵の記録と読み込みでずれること。こちらは直さないと先に進めない問題なのだが、これも原因が不明。デストラクタのバグとは多分関係はない。

バグのせいというわけでもないだろうが、ここ一週間程度ずっと体調が悪い。症状的には徹夜明けのような症状なので寝不足のように感じるが、特に睡眠時間が減った自覚もなく、周りで風邪が流行っているのに自分には影響がないと、これも原因不明のバグ。

2009/01/28

今日の5乗

・エディタバグ原因捜索中

昨日のバグがいまだに取れない。設計を変える以前からたまに起きていた記憶があるので設計を変えたことは直接の原因ではないはず。

表面的にはオブジェクト一式を初期化するときと、描画するときにアクセス違反が発生している。調べによれば、起動した直後には起きずに、何度もその操作を繰り返しているとアクセス違反となる。そのあたりから、オブジェクトを削除したあとに何かしらが残っていて、それが悪さをしているように感じる。SDやOpenGLを操作するときに何か問題があるのかもしれない。

今のところはマップエディタでしか確認していないから、それの連続使用を避ければ実用において問題はないのだが、ゲームは何度もリセットを繰り返すということをまだテストしていなく、プレイヤーによりそのような操作が取られる可能性はありえるので、ゲームでも発生するのであれば解決しなければならない。

例外が起きたときに、assertのようにどこが例外をthrowしたのかわかる機能があればデバッグが便利になるのだけど。

 

今日で年齢が5桁になった。そのお祝いとしてのケーキが、通常よりも2,3回り大きいどら焼きにクリームをはさんで、さらにその上にクリームを乗せて団子と抹茶のアイスクリームを飾ったというカオスなもの。

2009/01/27

今日の読み込み

・復讐ステージ読み込み機能作成

・復讐敵配置機能作成中

今日は復讐を進めていた。

まずはステージを外部ファイルから読み込む機能。エディタを作ろうかと思ったけれども、手書きでテキストファイルとして作ったほうが効率がよさそうだったので手書きすることに。

次に、今まで置いておいた、敵のマップエディタ上からの配置を作り始めた。しかし設計を変更したので同じコードでは通らずその修正が大変だった。それで本題のマップエディタ上からの配置は、システム的にはイベントの配置の流用でいけているのに、何故か全く関係のなさそうなところでアクセス違反を起こす。それで今とまっている所。

敵の配置が完成したら、システムのコア部分は完成。あとはキャラクターのアニメーション用に絵を描いたり、会話ボックスを表示したりが今後の課題。この調子で進めていけば2月中旬ごろに遊べるものができそうだが、そろそろJOIのための勉強をしたり、物理ゲームを本格的に作ったりしないといけない。

2009/01/26

今日の設計

・復讐設計変更

昨日課題として出てきたステージの管理方法。もともとは敵をステージ内でどのように管理するかというところからでてきたのだが、その設計を考えていたら、ステージを使ってゲーム内の全てのオブジェクトを管理してしまうということになった。

大幅な設計の変更だったので、Poseidon付属のファイル圧縮機能を使ってバックアップをとってから組み始めた。それで、予測したとおりに動かなくなったので、バックアップを参考にして調べようということになったら、圧縮されたファイルが解凍できなくてはまった。結局フラッシュメモリに以前バックアップしたソースを参照した。

それでも詰んでいて、原因不明で呻っていたら原因が見つかった。原因は、コンストラクタ内で生成中のオブジェクトを参照していることだった。冷静になって考えてみれば、

hoge = new Hoge();

と書いた時に、コンストラクタが終わるまではhogeに値は返されず、そのためコンストラクタの中ではhogeは初期化されないのだから当たり前といえば当たり前。結局コンストラクタ内に書いてあった処理を丸々別の関数に移転して、コンストラクタが終わったあとにその関数を呼び出して解決。

2009/01/25

今日のCSS

・蘇生曲名作成

・復讐ボス絵作成

・ウェブサイト模様替え開始

昨晩から考えていた、蘇生の曲名。結構すらすらと決まった。曲名のリストと、作曲者の薩摩芋氏によるコメントなどはこちらから。それに伴ってゲーム内でも曲名が表示されるようにした。漢字は便利。

あと、蘇生の0.61の置き場所がわかりにくいので、わかりやすい場所置いておいた。

復讐のボス絵も描いている。稲荷を新しく描いて、それと以前の白虎を改善。なかなか良く描けた。ボスのテーマが五行に変わったので、デザインは同じキャラクターでも蘇生とは違ったものになっている。あと書いていないのは5人中2人。描きあがったら主人公とあわせて適当に公開する予定。

サイトのデザインに駄目出しをされた記憶があるので、模様替えを開始した。外部スタイルシートは結構便利。

 

想像力が枯れた原因にプログラミング疲れがあるのではないかということで、今日は蘇生の曲名表示以外にプログラムを書かなかった。復讐のステージ管理方法という考えるネタが出てきたので、明日はそれを考えて、作るつもり。

2009/01/24

今日の公転

・弾幕作成

・復讐攻撃作成

・復讐木ボス描画

数日前に構想した弾幕を作った。5面なので難易度高め。そのうち調整をすることになるだろうけれど。レーザーを実装したから作れるレパートリーはかなり広がった。

それと、蘇生の曲のタイトルを考え始めた。現在1面道中曲のタイトルを考えた。語呂が良くて曲にあってゲームにもあうものをがんばって考えている。

復讐も進めた。主人公の攻撃を実装。およびキャラクター対キャラクターの当たり判定後の処理を強化して、貫通や反射といった処理を作るための土台を作った。

それでプログラムを書くのに疲れて、描きかけだった復讐の木ボスを完成させてみた。なかなかいい感じに描けた。

 

ここ一週間ぐらい、想像力が枯れている。普段、暇なときには何かネタを考えるのだが、この頃だと何を考えるか考えているだけで暇がつぶれてしまう。原因を分析して、ありえそうなのは遊んでいないから、もしくはタスクの積みすぎ。今のところは新しいものを考えずに作れるものや、以前考えたものを作ってこの状態をしのいでいる。タスクの積みすぎなのだとしたら、さっさと完成しそうなRe:Actionを完成させたい。

2009/01/23

今日の円柱

・Re:Actionライフシステム実装
・3次元よけげー進捗
Re:Actionにライフの概念を実装。及び色々調整。パーティクル数の上限を512でやっていたら一瞬にしてキャラオーバーしたので8倍に拡張。
衆人環視の状態で1時間ほど作業をしたので、真面目に見える3次元よけげーをいじっていた。円柱のワイヤー描画を作って背景に使ってみた。

今日は何か忙しくて、その上疲れて大したことをしていない。SSを進めていないのは結構久しぶりだと思う。

2009/01/22

今日の内分

・蘇生弾幕作成

・復讐空中ダッシュ作成

・Re:Action進行

まず、レーザー弾幕を改善。そのためにレーザー上の点を取得する関数作成。弾幕としてのコンセプトがやや失われたがバランスが良くなった。次に花っぽい弾幕を作りたかったのでスプリンクラーを4重に重ねてみた。スプリンクラーは軌道が単純だけど隙間が狭くなりがちで避けにくい。

次に復讐。ただのダッシュというのはいまいちだと思ったので空中ダッシュにした。緻密なアクションとかを要求したいのでそれにあった性能にするべく調整をしている。

最後にRe:Action。昨日の改善によって新たに出たバグを多分つぶした。もともと再現性が結構低いものだったので撲滅できているかどうかは怪しいが、理論的には大丈夫のはず。

それからRe:Action花形のパーティクル関係の部分を製作。別にたいして難しいことはなかった。

2009/01/21

今日の反発

・蘇生弾幕作成

・Re:Action製作

・復讐キャラ構想

久しぶりにまともな弾幕を作った。それと弾幕の名前をいくつか考えたり。5面は中ボスの弾幕から先に完成しそう。

Re:Actionにも手を着けた。以前書いていた衝突の処理から発想を転換して作った結果、だいぶうまく行くようになったのだが、その方法ではそれはそれでバグがでてくる。原因は大体見当が付いているので何とかなりそう。

そして復讐のボスでまだ構想が決まっていなかった木属性のボスを構想して、描き始めてみた。蘇生の風神雷神をそのまま使っても良かったのではあったけれど、他のキャラクターとの調和を考えて新しいキャラにした。

 

今日は暇だったのでいろいろと考えた結果がこれ。

2009/01/20

今日の発射

・復讐敵弾実装

・蘇生隠しボス実装

このところ、復讐のキャラクターの実装を進めている。今日は敵が弾を撃てるようにしたのと、キャラクター全般の機能強化。せっかく多角形判定ライブラリを作ったのでそれも実装。あとは主人公の攻撃を書いて、敵をマップエディタで配置できるようにすればひとまずベースシステムは完成となる。

それと、ちまちまと進めている蘇生。隠しボスをシステム的に実装して、残るはそれを呼び出す場所と、勝ったときのご褒美の作成。

 

この頃SSばかり作っていて、物理ゲームを進める気がしない。

2009/01/19

今日の極太

・復讐ジャンプ調整

・復讐敵との体当たり実装

・蘇生レーザーいじり

復讐のジャンプを調整。いままでマップスクロールのデバッグ用にFPSを3倍の180で動かしていて、それを戻し忘れたままジャンプを作ってしまったので60FPS用に調整しなおした。

次に蘇生のレーザーをいじっていた。回転3Way極太レーザーを作ってみた。ワインダーに使えそう。レーザーをキャラオーバーの255本まで撃って、回転処理を施したりもしたが全く処理落ちしなかったので、レーザーはソースのややこしさほどには重くないらしい。

そして後は復讐のキャラクター同士の当たり判定を作成。まだ弾を撃ったりするのを作っていないので、とりあえず敵との体当たり。

 

タイムアタック要素を盛り上げるために高速移動でもつけてみようかと思っている。そのほかにも、何かの条件によって主人公を発狂させるとか。

2009/01/18

今日の躍進

・復讐ジャンプ正式版実装

・復讐効果音実装

・復讐敵エンジン製作開始

・蘇生レーザー本格使用開始

今日はずいぶんと進めた。連休で寝るのにも遊ぶのにも飽きたから。

まずは仮実装しておいたジャンプをちゃんとしたものにした。押しっぱなしでジャンプの高さが変化するように。

それで、このときジャンプ力と重力とのバランスを取るべくテストを繰り返していて、着地したときに音を鳴らせばわかりやすくなるのではないか、と思って効果音を実装。結局バランスが取れなかった原因はバグだった。

次に敵のエンジンを作ってみた。まだソース上から直接敵を生成するだけだが、それでも動きはする。キャラクター同士の当たり判定はまだない。

 

で、それにも飽きて、蘇生のレーザーを正式に使えるようにした。回転やら全弾消しやらに対応。ためしに弾幕を作ってみたが詰むのでまだまだ。普通の魔法による弾消しやカスリは面倒なので対応させない。

 

昨日配列が何とか、と書いたのは、refと書かなくても配列はもともと参照渡しだったからだった。

2009/01/17

今日の記録

・Re:Actionシステム作り

・復讐入力周り

・絵作成

Re:Actionを何か進めないといけないと思ってとりあえず難しいことを考えずに作れるシステム周りを作成。タイトル画面とゲーム画面の接続を関数ポインタとかを使って作って、タイトル画面を動かさないといけないという話を聞いたので文字通り動かした。このとき、自作ベクトルクラスのバグに気が付いたので修正した。正月記念のやつのバグの原因もこれだった。

 

それで飽きたので次は復讐をいじった。だがこっちはこっちでマップ周りがひと段落して次にどこに手をつけるか迷ったので、入力を整理した。で、何を思ったかリプレイを作り始めた。

そのときにキー入力を格納した静的配列を参照渡しとして引数にしようとしたのだが駄目だといわれた。だからといって動的配列に変換して参照渡しすることもできず、結局静的配列の中身を一度動的配列にコピーして、その動的配列を参照渡しして、結果を再び元の静的配列に戻すという面倒なことになった。ポインタを使えばいけるのかもしれないがD言語でわざわざポインタを使うのも嫌。何かいい解決法はないのだろうか。

 

それと、蘇生の5面ボスと復讐のボスの絵を描いた。5面ボスでは絵の輪郭線をつけるかどうか悩んでいる。4面のボスの絵には輪郭線をつけたのだが、それはとぐろを巻いているという特殊な理由があったから。

復讐のボスの絵のほうは以前描いたものの修正。身軽なイメージで書くべく努力しているのだが、どうもうまく描けない。

2009/01/16

今日のランタイム

・スクロール改善
マップ切り替え時にスクロールのバグがあったのでそれを修正。それに際して座標系を変更して、それで統一性なくコードを変更していたら動かなくなって焦った。最終的には理由は分からないが予期した通りに動作したのだが、復讐のコードに、どうして上手く行っているのかが分からない場所が増えてきた。

XNAについて調べてみたら、配布はわざわざインストーラーを作って、その上ランタイムも必要らしい。いわば開発するのは気軽で遊ぶのは手間がかかる。いかにもマイクロソフトという感じ。なのでXNA開発はメインにすえるのはやめておく。

2009/01/15

今日の統一

・イベント管理方法改良
眠くて新しく何かをしようという意思が起きなかったので、考えておいたイベント管理方法の変更を実装しておいた。マップチップとイベントを分離して、別のマップチップでも同じイベントのデータを参照できるように。これでフラグ操作が楽になる。

2009/01/14

今日のXNA

・C#とXNA導入

興味があったので導入してみた。感想としては、C#は結構使いやすい。D言語と似ている部分が結構あるので習得も簡単そう。VisualC#はC++よりも機能が強力に感じる。

そしてXNAも導入。ほとんどコードを書かなくても動くのが不思議な感覚。今のところは2Dのテクスチャの描画と2Dの文字列の描画と入力を受け取るところ。3Dモデルの描画を試してみようと思ったが標準で付いていなかったことには若干驚いた。手書きしてもOpenGLで自作するよりははるかに短いコードで済むようだけど。

少し触った感想としては悪くない感じ。機能の全貌をまだ見ていないからまだはっきりとしたことはわからないが、こだわって作るのには向いていそう。ひとまず卓球をXNAで作ってみようと思っている。

2009/01/13

今日の3次元

・復讐構想

・3Dシューティング風作成

昨晩、イベントエディタができてそれでイベントを書いていて、セーブイベントを作るかどうかと考えたときに、復讐をいったいどのようなゲームにするのかを明確に決めていないことに気が付いた。

横スクロールアクションということは、作っていたのだから決まっているのだが、それでシナリオ性のある長いマップにするのか、それともストーリーはあまり語らない短いマップにするのかが未定だった。で、そのときに思いついたコンセプトが「スコアアタック」。クリアするだけであればあまり難しくないが、スコアを稼ぐための高度なパターン化や精密操作を要求するというやりこみ属性。いわばシューティングの精神をアクションゲームに当てはめたという感じ。

 

今日作ったのは3Dシューティング風。弾幕を3Dにしたら面白いという話があがって1時間程度で作ってみた。弾が3Dで飛んできて当たり判定も3D。ただ、3Dで何かを作るときに常に壁となるのが操作方法。ボタンを押すことで操作する座標軸を切り替える、というようなシステムを考えては見たが多分使いにくい。

これはもうこれ以上作り進める気はないが、卓球に向けた3Dの練習にはなった。あとglutを使うと落ちることも確認。gluは使えた。

2009/01/12

今日の編集

・イベントエディタ完成

・マップ移動作成

イベントエディタを完成させた。開発にEntice Designerを使っていたのだが、手書きでコードを書いてやるのもなかなか。Dfl使っていて、イベントを入れるのにやや手間がかかって、一度にたくさんコントロールを入れると入れ間違いや、入れ忘れが出てきて混乱。順番を考えずに一度にやるのが悪かった。

手書きでやることが多い分、融通が利いて使っているうちにわかってくるのがいい点かもしれない。

イベントエディタができたので、早速本来の目的であったマップ間の移動を作った。想定していたよりもソースが汚くなったので要改善。

一段落したので今度こそ物理ゲームを進めるべき。

2009/01/11

今日の設計

・イベントエディタ製作中

相変わらず。wxWidgetsならばSDLやOpenGLと一緒に使うための情報がいろいろあったので、昨日の失敗にめげずに何度も試してみた。公式な情報と同じ手順でやったり燃してみたのだが、結局ことごとく同じエラーで通らずついに断念。

原因として考えられるのは、D1.0系列だからか、Vistaだからか、D以外の環境が入っていてそれが影響しているのか、TangoではなくPhobosを使っているからなのか。

で、結局Dflを使って製作を継続中。だいぶ使い方がわかってきて、APIリファレンスも発見したので調子が乗ってきた。でも結構時間がかかっている。

 

今日の日記は試しにWindows Live Writerで投稿してみる。

2009/01/10

今日のGUI

・弾幕試作
・復讐イベントエディタ製作中
なんとなく響きだけで三十二層式洗濯機というものを作ってみた。結果は弾の密度が濃すぎてどうにもならなかった無念。でも見た目が結構綺麗なので実用にならないものか。

復讐のイベントエディタを結局Dflを使って作ってみているところ。D専用に作られているだけあってビルドに失敗するようなことはないのだがGUIエディタの機能が十分とはいえないので結構手書きしている。まぁ、それほど複雑なことをやるわけでもないので問題はなさそう。

このごろは弾幕書いたり復讐のシステム考えて実装したりするのが楽しいのだが、そのせいで物理ゲーム製作に手をつけられない。

2009/01/09

今日の発狂

・隠しボス弾幕完成
もはやめちゃくちゃに。最終的には三層式洗濯機などという意味不明なものまで出している。最も最初の洗濯機の時点ですでに殺されるので大丈夫。避けることを考えて作らない弾幕というのは、もはや爽快感がある。

復讐のイベントエディタを作ろうと思ってwxWidgetを調べ始めた。それでサンプルを動かしてみようとしたのだがリンカがうまく行かない。ファイルが多いのでその問題を解決するのも大変。

2009/01/08

今日の混合

・Re:Action再開
・蘇生5,6面追加作業
・弾幕作成中
宣言をしたのでRe:Actionを触り始めた。だったのだが、前いじっていたときに残っていた問題がそのまま放置されていて、まだその問題を解決するための頭が回り始めていないのでどうにもならず、結局タイトル画面を作っていた。物理演算部分を書くのに試行錯誤の繰り返しだったらしく、大量の書き損じのコードがコメントアウトされて残っていて、その部分がとことん読みづらい。バグを解決するためにはその部分を洗わないといけないのでそれが憂鬱。

で、その憂鬱とは別に関係はないのだが蘇生の隠しボスに使わせる弾幕のネタを考えたので作り始めた。単に弾幕を書くのが目的だったので隠しボス自体を実装する気にはならず、とりあえず5面の中ボスに使わせようとしたところ、5/6面をシステムに組み込むのに結構時間がかかった。
それで肝心の弾幕は、隠しボスなのでだいぶふざけて作っている。今のところ自分でも瞬殺される難易度なのだが隠しボスなので成分無調整で。耐久力も普通の5倍ぐらいで制限時間も2倍程度、弾速も2倍以上というわけだが隠しボスなので大丈夫。そのくせボムバリアを持っているが、それも隠しボスなので。あっさりと倒せる攻略法が用意されるのだが隠しボスだから。隠しボス万歳。

2009/01/07

今日の始点

・復讐イベントチップ製作
・物理ゲーム展望
何をやるか考えて、マップから別のマップへの移動を作ることにした。その際、必ずしも移動処理は画面端のみで行うといったものでもないので、マップ移動をイベントとして扱うことにしたので、イベントをマップチップのように配置できるようにイベントチップの製作に取り掛かった。
それでイベントをマップエディタ上で配置してデータに記録するまでを作って、後はテスト用に主人公のスタート位置を設定するイベントを作って実際に動かしてみた。これで大体6時間程度。

物理ゲームを3月末に完成させると漫然と考えていたのだが、カレンダーを見てみるとあまり余裕がなさそうだったので、頭を物理ゲーム製作に切り替えて考えてみた。その結果以下の方針が決定
・Re:Actionはゲームとして
・卓球は3Dの技術力として
・パラボラマスターは物理、数学力として
フォトンは切る
4作を3ヶ月以下で作るというのは結構なハイペースの上に、卓球やらパラボラマスターやらは間違いなく壁になるだろうということでフォトンを諦めた。フォトンは多分計算に時間がかかり、そして描画部分も地獄が見られる、そしてモデルファイル読み込みをOpenGLで実装するか、DirectXを使うかという茨な二択を迫られる、その割にはぱっとしなさそう、ということでいいとこなし。

明日からはRe:Actionの完成に向けて製作を進めていく。復讐の製作はその気分転換用に。

2009/01/06

今日の跳躍

・マップとの当たり判定完成
3日目にしてようやく。ごちゃごちゃ書いていてうまく行ったのでどうして上手く行っているのか、本当に上手く行っているのか、は怪しくて効率のいいコードであるかも分からないのだが、ひとまず動くには動く。
目下の一番の課題が終わったのでその後どこに手をつけるか浮かばず、今日はそれきりで何もやっていない。
やるとすればジャンプの改良、敵の実装、メッセージ窓の作成、マップから別のマップへの移動、といった辺りか。

だいぶ放置されていた物理ゲームもそろそろ再開したい。復讐の絵も沢山作らないといけない。JOIに向けた勉強も手をつけないといけないのかもしれない。

2009/01/05

今日の着地

・蘇生0.61リリース
・マップ判定試行錯誤中
蘇生を通してプレイしていたら、戦績まわりにバグが見つかったので修正パッチを作成。
http://cid-eccdf3ba5a7e82b6.skydrive.live.com/self.aspx/.Public/SS061Patch.lzh
修正内容は
・始めてプレイするダンジョンのハイスコアや挑戦履歴がおかしくなる点
・プラクティスでまだプレイしたことのない技の名前が表示されてしまう点
・1面をクリアした段階で3面をプレイできるようになってしまう点
・画面を左右にスクロールできる画面で、右下に表示されるはずの矢印が表示されないことがある点
この4つ。どれもプレイする上で支障はないので更新しなくても大丈夫だけれども、0.70を出すまで放置しておくのも気持ちが悪いので作った。

そして復讐ではマップとの当たり判定で相変わらず悩んでいる。丸1日悩んで行き詰ってきたと思ったら、実は解決策として作ったコードが機能していなかったことに気が付いて先ほどそれを修正した。それによってだいぶ良くなったのだが、まだ問題が残っている。
詰んでいたときにデバッガに頼ってみようと思ったのだが、やはりSDLとddbgの相性はよくないらしい。何度やっても初期化中にフリーズする。

2009/01/04

今日の角

・スクロール改良
・マップとの当たり判定製作開始
・ubuntu導入
相変わらず復讐を進めている。
まずはスクロールをまともにした。昨日作ったのは常に主人公が画面中央にいる、見た目だけまともで実用性のないスクロールだったのでそれを改良した。それで主人公が画面の一定の範囲から出たら画面をスクロールさせるようにして、システムも汎用性があるものに作り変えた。
次にややこしいのに必需品なマップとの当たり判定の製作開始。特に何も考えずに書いて、時間はかかったがそれっぽくなったが、そこから先のすり抜けの問題で案の定詰まった。調べれば解決法ぐらい出てくるのだろうが、それは何か癪なので車輪を再発明する。

なんとなくubuntuを入れた。適当にいじって普通に使う程度にはできるようになったのだがdmdが動かないのと、windowsのcドライブが開けない。

2009/01/03

今日の移動

・復讐製作再開
久しぶりに製作を再開した。まずはライブラリの仕様変更にあわせて修正。それとマップチップのサイズを32に変更した。このときマップチップの大きさが、一部定数ではなくそのまま16と書かれているソースがあってその修正がややこしかった。マジックナンバーは使わないほうがいいと痛感。なのでいろいろと定数に置き換えたり。
これが製作再開前の手続き。それで製作も進行させた。マップのスクロールで範囲外にでていたのを修正して、マップチップ単位の座標と1ピクセル単位の座標をaliasを使って紛らわしくないように。そして、キャラクターをキー入力で操作してそれにあわせてマップがスクロールするようにした。

久しぶりに触ってコードが読めないかと思ったが暫くいじっているうちにわかってきて安心した。このペースで進めていきたい。明日はマップのスクロールの改善と、できればマップとの当たり判定に着手したい。

2009/01/02

今日のループ

・全方位STG製作中
ロックシステムを改良した。具体的には、ロックボタンを押すとロックの射程内に入っている敵全部を仮ロックして、仮ロックされた敵をロックする。ロックした対象はA/Sキーもしくはロックしている敵を倒すことで他の仮ロック中の敵に切り替える。
これの、A/Sキーで対象を切り替える処理を書いているときに詰んだ。原因は配列のlengthプロパティの型がintではなく符号なしであったことだった。たしかにlengthは負の値をとらないので当たり前といえば当たり前なのだがわかりにくいと思う。あと%演算子の動作が正確にわからなくなって、調べようと思ったのだがあまりに当たり前のこと過ぎて載っていなかった。
結局%演算子を使わずにいちいちキャストすることで解決したのだがうまく書けない物か。

ロックする順番を敵配列のインデックス順から距離の近い順に変えたら全方位STGとして特徴的なシステムは完成。どこまで作りこむかが問題。どうせなら遊べる形にまで作ってしまいたい気もするけれどそれをやっても特に得られるものがない。と、いうわけでリクエストがあれば作る。なければ復讐の製作を再開するなり蘇生のレーザー周りを使えるようにするなり。物理ゲームもそろそろ再開しないといけない。

2009/01/01

今日の平

・新年
・全方位STGプロトタイプ作成
新年記念。http://cid-eccdf3ba5a7e82b6.skydrive.live.com/self.aspx/.Public/nenga.lzh
だいぶ前に作ったものであるのは秘密。何が記念かは知らない。よくわからないバグがあるけれど動くから気にしない。

SSが一段落したので前々から作りたかった全方位STGを作り始めた。以前作ったシューティングテンプレートをベースに進めている。その前に自作D言語SDL+OpenGLライブラリの整理と、FPS管理の修正を行ってすっきり。
今日作ったのは照準の操作と、敵をロックオンする機能。現状では一番近い敵を毎回ロックオンして、範囲内に敵がいなければロックオンを解除するという形。これでは使い勝手が悪いので一番近い敵以外にも切り替えられるような方式にしたいのだが、敵との距離が変化するのでどのようなシステムにすればいいのかを考えている。

昨日出した蘇生についても触れておくと、蘇生の完成期日が5月の末ごろ。そろそろストーリーも書きたくなってきたので5面の作成とストーリー執筆とを並行して進めていく予定。5面ではレーザーを登場させたり、ビットを使う弾幕を出したりといろいろ新しいこともやりたい。あと道中も激しくしないといけない道中なので激しくする。5面の完成は3月中が目標。

とまあ、今年も特に代わり映えなく過ごしている。この一週間ぐらいはこの全方位STGと復讐とをちまちまといじっていようと思う。今年はプログラムを書く時間をPC使う時間中で半分以上の比率にするのが抱負。そうでもしないと復讐が間に合わない。