・日記引っ越し
これまでの日記をはてなダイアリーに引っ越し。前々から、Bloggerが不便だと感じるようになっていて、Bloggerでの記録を移行する方法を見つけたので思い切って移行してみた。この情報が書かれたときから、Bloggerのフォーマットの設定の項目が変わっていて、それを合わせるためにDでごにょごにょとやっていた。
と、いうわけで引っ越したので、これからも生暖かく見守ってください。
a Story of the Swordシリーズの製作日記とか、プログラミング日記とか。
・日記引っ越し
これまでの日記をはてなダイアリーに引っ越し。前々から、Bloggerが不便だと感じるようになっていて、Bloggerでの記録を移行する方法を見つけたので思い切って移行してみた。この情報が書かれたときから、Bloggerのフォーマットの設定の項目が変わっていて、それを合わせるためにDでごにょごにょとやっていた。
と、いうわけで引っ越したので、これからも生暖かく見守ってください。
・シューティング作成
・スクリプトいじり
第2回3時間コンテストということで、「アイテムをとってゲームスピードを上げて、早くクリアすることで得点を荒稼ぎ」というコンセプトの横STGを作ってみた。しかし、まともなシューティングの土台を作るのに1.5時間以上かかって、まともにゲームとして成立しなかった。コンセプト的にもあまり自分の趣味に合わないのでお蔵入り。ランクを能動的に調整できて、それに毛が生えたという程度。
復讐のスクリプトをいじっていた。だいぶいい実装が出来そうになったのだが、最後の壁として型情報が立ちはだかって詰んだ。型の情報を保存する型、というものでもあればよかったのだが見つからない。sizeofやstringofプロパティが取れるのに、型は型ではないというのは、型とはいったい何なのか。Phobosで型情報を触っているモジュールがあり、それを参考にして、テンプレートとaliasとを組み合わせて乗り越えられるか、と思ったが越えられず。stringofプロパティを利用してコンパイル時にコードを生成する、というようなことも考えたのだが、ややこしかったのでやめた。
それで結局妥協して、関数を呼び出すためのラップ関数を一つずつ作って、それへのデリゲートを連想配列に格納する、という方法での実装にした。ラップ関数を作った労力のリターンとして、関数を呼び出すときに引数をどうするのかを意識せずとも使えるようになったので、これで妥協。その実装の進行具合は、構文解析のあたりで機嫌が悪くなっていて、ごく単純な命令しか実行できないという状況。
・スクリプト
・XNA
テンプレートと可変個引数の項目を読んでみたら、昨日当たりかと思ったのは別に使えなかった。それでもう少しコードを書きながらいろいろと試してみたりもしたのだが、やはり手段がなさそう。
それで仕方なくコードを手書きしていくことにしたのだが、それがまた混迷している。さすがに一つ一つの関数ごとに愚直に書く様なことは避けたいので、引数の数ごとに関数を分類する、ということをやっている。そのときに関数の引数として任意の型の関数ポインタを渡すようにしているのだが、それをどう渡すかで詰んでいる。Phobosにもそのようなことをしているものがあって、それを参考にしてはいるのだが上手くいかない。テンプレートで何とかしたいのに上手くいかない。あんまり上手くいかなくて憂鬱。
XNAの本を買ってきた。飛行シューティングを作る前に物理ゲームが大量の壁として立ちはだかっていたことを思い出して、それもまた憂鬱の種。Poseidonが不機嫌なのも憂鬱の種。
・スクリプト設計
・復讐キャラ設定妄想
関数を実装する前に、ちゃんと言語の設計と実行の仕方は決めておくべきだと思って細かい設計を考えていた。大体のことは決まったが、まだはっきりしない場所が残っているので完全に固まるまでは実装しないつもり。
あとは復讐の主要キャラの設定をいろいろと妄想。ご都合主義的な流れになる気配が少なからずあるが、ご都合主義となることの正当な理由をゲーム中に盛り込めば許される、と思う。もしくはストーリーの時間的広がりを大きく拡張して、天文学的な確率が当たるようにするとか。
・トップ絵更新
・スクリプト構文解析
先日まで描いていた絵を日記の2000Hit記念と言う名目にして公開。復讐では全主要キャラにあんな感じの立ち絵が付くかもしれない、付かないかもしれない。
スクリプトの構文解析を作った。ソースを一つ一つの式にツリー構造を持たせて分解。次にやるべきは、式の解釈と制御構文の実装。
・スクリプト構想
スクリプトのことを考えていたら、自前で新しいスクリプトエンジン実装する、という虚数解が導かれてきた。せっかくD言語というマイナー言語を使っているのだから、「ないものは作るしかない」の精神で自作。どういう言語にするか考えて、作りやすそうなLispのような設計にすることに暫定決定。Gimpのスクリプトをいじっていてだいぶ慣れてきたことが影響している。現在の進行状況はファイルを開いてコメント行を処理する機能を作ったところ。
ここ2日間、夢に弾幕が出るようになってきている。たまたま夢に出てきたので記録することもろくに出来ずにほとんど忘れてしまって、覚えているのが弾源が画面端を回りながら弾を撃ってきているという光景だけ。今晩見たら今度こそ記録する。
・絵
・スクリプト調べ
先日からの絵の仕上げ。気になる部分にアンチエイリアスをかけて完成。明日にでも公開予定。
復讐に使うスクリプトについて考えていた。Pythonは既存のものは古くて使えず、自前で作るのもC言語版ヘッダを見た限りでは難しそう。Luaは、新しいはドキュメントがややこしいサンプルコード一本でわからず、古いものは自前でいじる必要がありそう。あと、Luaに馴染めない。D言語をDLLを利用してスクリプト風に使うする、という手があるそうなのだが設計が難しい。結局どうするかが決まらない状況。メイン部分とスクリプトにしたい部分をコンパイルしわけて、スクリプト部分のコードをコンパイルしてリンクするだけで動かせるようにする、という手も考えたがメリットが薄そうで微妙。結局まだ解決していない。
・絵
D+Luaを調べていて、サンプルの意味が良くわからなくなったのでLuaのリファレンスを読んだら、却ってスタックとかでよくわからなくなった。
それでLuaについては本に頼って勉強することにして、パラボラとかもやる気がしなかったので先日から描いていた絵をとりあえず完成させた。残すは陰影付けとアンチエイリアス。
最初の予定では顔だけのつもりだったのだが、せっかくなので全身絵にした。思いつくままに描いていたら、ちびキャラで以前書いたデザインとの間に若干の相違点が出てきたのでちびキャラをそちらに合わせることにする。
絵を描いているのもこの頃楽しくなってきた。
・弾幕作成
PythonDをやろうとしたら、使われているDのバージョンがだいぶ古かったようでコンパイルが出来なかった。そこで気合でコードを直してコンパイル通るようにしても良かったのだが、それは大変そうだったのでやめておいた。
それでパラボラをやろうと思ったのだがどうも見る気も起きなかったので、昨日作成したホーミングを使って弾幕を書いた。そのデバッグ中にプラクティスメニューのバグが出てきたので直した。現行のバージョンには関係のないバグなのでパッチは出さない。
PythonDが駄目だったのでもうひとつスクリプト言語として載っていたLuaを導入してみたが、まだ試していない。GimpのスクリプトとしてSchemeも調べてみた。文法はかなり気持ち悪く感じるが理解できないものではなさそう。
・絵
・蘇生ホーミング作成
Gimpのガウシアンぼかしを使って、蘇生の絵をいじっていた。ぼかしをするだけでドットが滑らかに見えるようになって、フルスクリーン表示にも耐えうる見た目になって強力。ぼかしのやりかたで少し詰まった部分があったのでメモ。
ここで使用する画像は普通のビットマップファイル。まず、このファイルをGimpで開く。次に、レイヤのリストのレイヤ(背景という名前になっているはず)を右クリックして、アルファチャンネルを作成。それから、画像の透明色にしたい部分を選択してデリート。「色域を選択」とかがあるのでそれを使うと便利。そして一番罠となっているのがここで、画像メニュー→モードがインデックスになっているのをRGBに変更。あとはガウシアンぼかしを適用して、pngで保存。透過色がいらなければアルファチャンネルとかの操作は不要。
これで蘇生の絵をどんどん変換していたわけだが、やはり面倒で人間がやる作業ではないと感じた。そこで、スクリプトを書いて処理しようと思っているのだが、その言語がLisp。
それとは関係なしに、暇があったので落書きした絵が気に入ってそれをドット絵にして描いているところ。表情をつけるとなると目が結構繊細になってきて難しい。
あと、特に使う予定は立っていないのだが蘇生にホーミング弾機能を実装した。力押しで美しくないアルゴリズムなのだが、いつもの「プログラミングはパワーだぜ!」とでも。