2007年6月の日記

<2007年07月 2007年05月>

五十音順ジャンル

そろそろ更新の時期だと思って更新のネタを探していたらたまたま日記を改良した後だったのでTGdiaryに反映してバージョンアップとして公開しておきました。
昔言及したジャンルが後から見つけにくいために更新時期に寄らない並び替えで表示する機能をつけたのです。
ただ、ユーザーから見える部分については、昔言及された記事は古くてあまり意味がないという考えから、時系列ソートになっています。

騎馬戦

既に6月末ということで、とり急いでネットワーク環境を整えてWiiのインターネットチャンネルをダウンロードしてみました。
ただ、安物の無線ルータを買ったせいか、時々通信が途切れて、アップデートに失敗したりエラーが起こったりしてました。
トワンセス(どういう略だ)は、見所の一つである騎馬戦を体験しました。
追いかけっこは楽しいけど、あまりバトルとしては張り合いがないような気もします…。

Bomber丸WorldのBGMのテスト用に、Luaラッパを改造してました。
単純な機能拡張なので、必要なくてもとりあえず残しておくつもりです。
しかし、テストのために作ったスクリプトのほうがまずくて、何度も何度もプログラム本体の問題ではないエラーで苦戦していました。

服従か死か

ゼルダやってます。
ムジュラのときは、「今度のゼルダには怖さがある」なんていってましたが、今回はまるっきりホラーゲームですね。
Wiiリモコンは左手で使ってます。
宮本さんのおかしな理論へのせめてもの抵抗です。
どっちみちリモコンを振る動作は剣を振るボタンの代わりでしかありませんし、反対側の手を降っても剣を振ることができるので、実は左右が逆だってあんまり問題じゃないんです。
ポインティングに関しても、手ブレがストレートに現れてくるので、スティックで狙いを定めるほうが狙いやすかったような気がします。
ともかく、「リモコンで直感操作」を謳うにはあまりにもお粗末な操作性だったかなと思います。
グラフィックは素晴らしいんですがねぇ。
でもテレビとの相性でそれも台無しにされてる感じ。
そのうち正しく映せるケーブルに差し替えて本当の画質を楽しもうと思います。

ナマライザリロード

またナマライザいじってました。
解析周りの面倒な部分は後回しにして、ユーザーインターフェイスの改善をメインに。
開いたファイルを読み直したい場合に、閉じて開きなおすのは面倒&たくさんファイルがあるとなお面倒、ということで、全部閉じる機能と、読み直す機能をつけました。
これでかなり便利になるはずー。
と思って使っていたら、なんだかログデータのほうが微妙におかしなことになってました。

フェード前

で、フェードの前処理のパラメータ監視を作りました。
ほぼふにゃさんのコピーです。
あと、ファイルを読み込んでいないときに動作させようとしてもエラーも何も起こらないことも確認しました。

BGMループ再生

Bomber丸WorldのBGMシステムの単純な音楽の読み込みとループ再生ができるようになりました。
最終的にはキャラの状態によって音量バランスが変わったりイベントとかで曲の内容が変化していったりとかをやりたいです。
例えばキャラごとに楽器を割り当てて、HPが減っていたらその音量は小さくとか、キャラの位置によって聞こえてくる位置を変えるとか、戦いが白熱してきたらテンポを速めたりとかもできそうです。
次はチャンネルごとのフェード処理を作ろうかと思っています。

CBWBGMxx系

Bomber丸WorldのBGMシステムのBGMスクリプトを作ったりしてました。
そのためにLuaクラス自体も簡便になるように改良したり。
CBWBGMのユーザからはCBWBGMxx系のクラスには直接アクセスできないようになっています。
CBWBGMクラスが一つのCBWBGMScriptを管理して、CBWBGMScriptが複数のCBWBGMResourceを管理します。
現在のところ再生タイミング調整をどうするかが決まりきっていない状態です。

無題

内定貰った会社から何度か電話があったのですが、なぜかことごとく電話に出られない状況でかかってきて、しかも弟による伝言がまた当てにならなくて。
そんなわけで会社にメールして来ました。

BGMの読み込みと再生

Bomber丸WorldのBGMシステム作ってました。
今回は単純な再生と停止のみ…。
一応読み込みはリソースシステムを使ってそれなりに効率よく、のつもりであります。

アグス

リンク集を微妙に改良しました。
というけど、実はimgタグのalt属性をつけただけです。
それだけじゃ寂しいので、リンク集にaguse.netを追加しておきました。
危なげなサイトを代わりに見てきてくれるサービスです。

ジャンルのソート

日記の管理画面を微妙に更新しました。
ユーザーから見たらさっぱりわからないのですが、ジャンルの部分を探し出しやすいように五十音順に並び替えるようにしています。
ユーザーから見えているメニュー部分はそのままです。
あと、管理画面がジャンルのチェックボックスでかなり巨大化してきたので、スリム化のため一部のジャンルを整理しています。

対照的なイベント

Bomber丸Worldのね、考えてるのに結構大きなイベント群として「さやかたんイベント」と「いずみさんイベント」がありましてね、これが結構対照的だったりするんですよ。
「さやか」のほうは明るく楽しく、さやか自身の年齢が4歳というのもあり、ほぼ死ぬとかそういう心配はなくて、間の抜けた警察とどこか憎めない犯罪者集団が登場したり、出てくるボスキャラもスライムの出来損ないみたいな「むにゅむにゅ」だったり、シリアスさはほとんどないわりとのんびりしたイベントです。
一方「いずみ」のほうはというと、死ぬキャラがいたり、暗く重いストーリーが陰に潜んでいたり、そんなことだからボスも飢えたサイボーグ「ベティ」だったり、いずみの年齢が24歳と大人であることもあって、わりと容赦ない部分があったり、年齢相応のネタが仕込まれていたりもしています。
でも、そんなに対照的であっても、始まり方は同じように底抜けに明るかったりします。
「さやかたんまほーつかえるでしゅよー。」
「いずみペットショップオーナーのいずみでーす!」

ランダムセレクト

プログラミングのところの乱数のページを増やしました。
前々からやろうと思ってたんですけどね、ランダムセレクトの話です。
またBomber丸Worldのスクリプトにでも組み込もうかなと思ってまして。

DM積んでみた

今日はBomber丸WorldのBGMシステムを作るためにMIDIを調整していました。
とりあえず2つの曲についてデータ内容がばらばらだったのを統一しました。
それでもまだまだデータ自体は流動的なんですけどね。

で、タイトルのことですが、メテオスオンラインでみんなからダークマターを贈ってもらいました。
私は17個でしたがこれでも悪いほうで、40個が二人、55個が一人いました。

1182005576.png

スレイプニル!

軽くて高機能らしいGreenBrowserとやらを導入してみようと思ったのですが、ダウンロードできる公式サイトがとんでもなく重くて、ブラウザ乗り換えの重要なポイントに公式サイトの軽さやインストールの簡便さもあるなと感じました。
で、評価も実績もあって公式サイトも軽かったSleipnir2を入れてみました。
1とは別のソフトでありながら同じ名前のバージョン違いという名前のつけ方であるため少々ややこしい部分がありますがとりあえず今後の発展を期待して2を選びました。

それと、久々にナマライザいじりました。
リスト表示に右クリックメニューをつけて、項目の内容をクリップボードにコピーできるようにしました。
あと、フィルターのコピーや保存もしたいので、フィルタの保存場所みたいなものも作ろうかと考えています。
名前をどうするかが思いつかないのですが…。

すれいぷにーる?

Lunascape4の重さに耐えかねて次のブラウザを探しています。
とりあえず素のままのInternetExplorerは6も7も論外。
でもIEに特化したページが多いのでIEコンポーネントを使ったブラウザが欲しいところです。
そしてタブブラウザで検索バーがついててそれなりにカスタマイズができて、できれば他のレンダリングエンジンも積んでて、それでいて当然軽くて…といえば相当限定されてきますね。

ふにゃさんと同じく

Bomber丸WorldのBGMシステムを作り始めました。
とりあえずふにゃさんのを参考に、と思ったらふにゃさんのほうではBGM再生にyaneSDKを改変して使っていたんですね…。
忘れていました。
そんなわけで、今回もふにゃさんと同じくDirectMusic7(というか6.1)でやっていこうと思います。
だから、一応動作環境にはWindows95も入るはずです。

チューニング中

LuaそのものをBomber丸World用にチューニングしてました。
Bomber丸Worldで使われると困る標準関数を削除したり、ゲーム上でうまく動かない関数の仕様を変更したり、紛らわしい名前の関数をリネームしたり。
で、削除しまくってたらライブラリのサイズが400KBから300KBまで大幅に落ちました。
まあ、どっちみち使ってないものはリリースコンパイルで消えるはずだから直接的なサイズ削減効果はないかもしれませんが。

lua_dumpは遅いのか!?

コンパイル済みのデータを保持するクラスを作り始めたのですが、どうにもバイナリ出力するlua_dumpはコードの細切れごとにwriterを呼び出すようで、予め全体の大きさがわからないし断片ごとに何度も書き込まれるのでまとめて書き込んで高速化というのができないし、ということで、バイナリを保持しておいて高速化というのは、最初のコストや後で再利用される割合などを考えるとどうにも割に合わないようです。
そんなわけで、もっと単純でリスクの少ない方法を考えることにします。

luaU_dump

ウィンドウシステムの相対座標での描画も出来上がったのでWikiにアップしておきました。
そして、BGMシステムを作ることにしたのですが、その前にもう一度Luaの見直しを行っておこうということで、CBWLuaを改造中です。
BGMスクリプトとか、マップイベントとかで、同じスクリプトを繰り返し何度も読み込むことがありうるので、auto_resourceが使えるかもしれないと思い、auto_resourceで使いまわすためのコンパイル済みチャンクを作るためのクラスをluacを参考に作っているところです。

新ウィンドウシステム

Bomber丸Worldのウィンドウシステムの見直しをしてました。
兎にも角にも新しいウィンドウを作るのが面倒すぎるので、その点の改善です。
以前のバージョンではまずウィンドウアイテムクラスを構築してそれをウィンドウクラスに登録する必要があったのですが、それをウィンドウ上に直接構築する形にしました。
あと、相対座標の導入で、ウィンドウを気分的に後ろの画面から独立させてます。

CBWLua

LuaのBomber丸World用カスタマイズ版ができたのでアップしました。
本当は5.1.2の日本語対応版を作りたかったんですが、やはりというか日本語化パッチは5.1.2には対応していなかったようで。
そんなわけで、ちょっと古いかもしれませんが5.1の日本語対応版を使うことになりました。
変数名には日本語は使えませんよ!

卒業写真撮影日

もう分子模型は学校に持っていきました。
Bomber丸Worldのほうは、HTML表示をちょっとだけ改良しました。
文字列の設定が若干手軽になった程度ではありますが。

TEPOLとZTB

デジカメは見つけたんですが使い方がわからず分子模型の写真は取れませんでした。
有機化学のセットだったので金属結晶はほとんど作れないようでした。

今日はNeoMuplのランダム演奏時のスキップ率を実装しました。
それ以外で実装するかどうかは未定です。
もしかしたらオプションで決めるようにするかもしれません。

Luaのほうはというと、変数への代入も案外あっさりできて、ついでにテーブルの新規作成とかも作ってしまって、ガベージコレクションの様子を確認したりもしました。
基本的にLuaでは細かいプログラムをたくさん同時並列的に動かすのでガベージコレクションは何も設定しなくても事実上分散して行われます。
5.1の意味があまりないです。

HGSの分子模型

配布用の日記をアップしました。
上書きインストールするとトップページやメニューが初期状態に戻りますが管理者フォームから更新すると直ります。

今日は学校で分子模型のセットがべらぼうに安くなっていたので買ってきました。
7000円だったのが2400円です。
8400円のを定価で昔に買っていたのが2800円になっていて悔しがっていた人がいたあたり、本当に安くなっていたようです。
ここらで分子模型の写真をアップしたかったところなのですが、デジカメの使い方(というか置き場所)がわからなかったため断念しました。
無機化学のセットと有機化学のセットがあったのですが、研究に使う有機材料のことを考えて有機化学のセットを買いました。
http://www.hgs-model.com/

PVDとかCVDとか

またまた突然ですが学習帳を更新しました。
薄膜の成長様式などについてですよ。
尻切れなのはまあつまらない事情からです。

Luaは、ただいまLuaの変数にC++から代入する簡単な方法を模索しているところですが、スタックの操作でどうやったら変数に値を書き込めるのか、まだ未知の部分があります。

#include &quot;LUA\lua.h&quot; // ClassView によって追加されました。

http://www.water.sannet.ne.jp/sowwa/
の日本語化パッチを5.1.2に使ってなんとか日本語対応できないかと試みていましたが、結果は失敗に終わりました。
やっぱり5.0系列と5.1系列ではそれなりに違いがあるようでした。
一応 http://hammm.dw.land.to/lua/ の日本語化パッチで文字列リテラルの日本語対応(つまり"ソース"を正しく表示できるなど)は可能だったのでしておきました。
変数名はともかく文字列に使えるかどうかは利便性に大きく関わりますからね。

で、ちょっとそれとは別に、lua_Stateの扱いについて考えていました。
ラッパークラスであるCBWLuaに全て管理を任せてLuaに対する操作は全てCBWLua経由で、と思っていたのですが、CBWLuaから実行したプログラムでもどんどんCBWLuaの管轄外のlua_Stateを作ることができてしまうので、CBWLuaではlua_Stateを管理しきれないのです。
つまり、動き始めたのがCBWLuaによるlua_Stateだったとしても、実行するうちに勝手に新しいlua_Stateが作られて、それが実行されてゆくと、CBWLuaによるlua_Stateが実行されているのにもかかわらず実際に動いているのはそれから派生した別のlua_Stateだったりするのです。
これで何が困るかといえば、グローバル環境は親玉(CBWLuaによるlua_State)も子分(派生したlua_State)も共通なのですが、スタックは別々で、今すぐ必要になるデータとかは大抵スタックに積まれているのです。
だから、CBWLuaにlua_Stateを一括管理させていると、子分のスタックが見られなくて、大事なところで親分が何もわからないということになるのです。
だから、スタックに関する部分はLuaAPIを直接使ってもらうことにして、CBWLuaが扱うのはグローバル環境と子分の作成など、どのlua_Stateがやっても同じになる用事だけにしておきました。

それなので、さっそくグローバル環境に関する関数を、ということで、特定の変数の値を得る関数を作ってみました。
ただ単にグローバル変数を得るだけでなく、可変引数を用いて複雑なテーブルの中身なども得られるようにしてみました。
この関数とほぼ同じものをWikiにも掲載しておきました。

で、そんなこんなで色々やってると突然リンカエラーが。
何があったのかと思って調べていたらVC++が勝手にヘッダファイルのインクルードをextern "C"の外に出していることが判明しました(中に入れておかないとエラーが出る)。
IDEって時々余計なことをして見つかりにくいエラーを混入してしまうのが困り者ですね。

TGBBS削除機能

Lua、Bomber丸World上で動かすのに成功しました!
コネコベーダーの動きをコルーチンで制御しています。
実際のプログラムをWiki上にアップしているので是非ご覧ください!

あと、今日はTGBBSの削除機能を実装しました。
ただ、実際に消しているわけではなく削除済みフラグを立てているだけなので後から復活することもできます。

子ルーチン

就職の面接の結果が出ました。
内定、だそうです。

で、Lua、とりあえずコルーチンを動かすことには成功しました。
まだまだLuaの変数を見たりすることができないので本当に意図したとおりに動いているのかはわかりませんが、とりあえずエラーは出ていないようです。

昨日描いていたいずみさんの絵ができました。
一応24歳です。
24歳ですってば!
年齢半分ぐらいに見えるかもしれないけど!!

1180709513.png

<2007年07月 2007年05月>