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から呼ぶ方法が良くわからない。多分書いてはあるのだろうが例が見当たらないので困っている。