2007年1月の日記

<2007年02月 2006年12月>

プロフィール表示とか

TGscriptのプロフィール関連の処理を作っていました。
今回はクッキーからのID読み出しと書き込み、そして対応するプロフィールの表示を作りました。
クッキーは簡単にですが暗号化されていて、IDの捏造はしにくくなっています。
今度はプロフィールを実際に編集できるようにしてみたいと思っています。

Loss-'R'ess Compress

ふにゃさんの氷のステージの動画をアップしてみました。
元々動画の元になるデータはPNGで保存してあって、非常にファイルサイズが小さかったので、どうにかこのデータをそのまま動画にできないかと探していたら、PNGと同じ圧縮方式のLCLを見つけました。
http://www.geocities.jp/sandk_project/LRC.htm
どうにも必要な手続きを踏んでいない非公式コーデックだったそうですが、問題なくYouTubeにアップできたようです。

データバインディング

いやー、使ってみるとなかなか便利ですね。
データバインディングとやらは。
データを与えれば勝手に表示してくれるのでプロパティの設定さえしてやればコードは一行で終わってしまいます。

爆ボンのラスボス戦のスピード攻略とその録画をやっていたんですが、なかなかうまくいかなくてかなり参ってしまいました。
何しろ初っ端で爆撃を始めてくれるかどうかがランダム、爆撃が終わってからお手玉で運べるかどうかもランダム、レグルスの奇行もランダム、で、シリウスが早い段階で攻撃してくれるかもランダムで、それを反撃に活かすのには微妙なタイミングが必要で、まあ、つまり、ものすごく運任せだったということです。
それで何十回となくやり直したんですが、一度成功して、それがほぼ完璧ながら少しだけ不備があり、だめもとでもう一度だけ録り直しをしてみたら、連続で成功してしまいました。
それもよりパーフェクトな状態で!

データソース

ナマライザのフィルタ処理が全部出来上がりました。
で、今度はログの時系列一覧表示を作るためにDataGridViewについて調べています。
前の簡易アクセス解析ではパフォーマンスの都合上表示件数が限られていたのですが、今回はどうなるでしょうか…。
一応、無理ならば自作するつもりでいます。
さしあたりは、DataSourceをどう扱うかを考えています。

爆ボンのリッパー戦のスピード攻略を書きました。
動画も一緒にアップロードしてます。
なんというか、本当に、スピード攻略では普段当たり前に使っている方法が逆効果だったりして、意外な攻撃方法が有効だったりして面白いものです。
今回は、ボムは蹴ってはいけない、投げるのも極力避けるべき、と、普段とはまるで違うやり方になってしまいました。

CBWHTMLDIB32

Bomber丸WorldのHTML風表示を作り始めました。
yaneSDKに入っていたCTextDrawが使いやすかったら自分で作る必要もなかったんですが、<hr>で区切ることが前提だったもので、最後に<hr>をいちいちつけないと動かなくて不便だったんですよね。
あと、画像の自動拡大には対応できないというのもありましてね。
やっぱりですね、画像を表示するのに<img src="1.bmp">じゃなくて<gaiji 1>と書くしかなくて、ファイルの直接指定ができないというのがつらいんですよね。
そんなわけで、まだ何も表示できませんが、骨組みぐらいはできてきました。

5スイカ

また爆ボンのページを更新しました。
なんというか、スプリガン強いですね。
というか、フルパワーだとすぐ自爆してしまいます。
それでいて、やっぱり相手の攻撃も強い、と。

のんびりナマライザの単純なフィルタができました。
複合フィルタはまだできていませんが、とりあえずこれで基本的なフィルタの性能は出来上がりました。
とにかく項目が多くてコードも長くなるので面倒でしたね。

そういえば今日新しいテレビにプレステ2繋いでドラクエ5やったんですけどね、それでさっそくカジノに入り浸ってスロット三昧だったんですよ。
勝っては負け勝っては負け負けては負け負けては負け…2万枚あったコインがだんだんだんだん減っていくんですよ。
そして最後の1回、ああこれはリセットしかないなと思っていたら、1万コインが当たるんです。
ああ寿命が延びたなと思ってもう一度やってみるとね、スイカが1個、2個、3個…これで当面の軍資金はできたなと思ってたんですよ。
そして4個目もまたスイカ、これはもしかして儲かる?と思ってたらですね……スイカ。
5つ目もまたスイカでした。
30万枚ですね。はい。
このコインで全員にメタルキングの剣をプレゼントしたんですがそれでも10万コインあまりました。

しょうめんとっぱ

爆ボンのページ更新です。
今日からそれぞれのページで具体的にスピード攻略について記述していきます。
今日はとりあえずブラックシティ1面だけ。
書式についてはまだ改善の余地はありそうです。

ナマライザのフィルタ処理を内部的に改良してました。
いや、コンパイル通るようにしたり、フィルタ編集ダイアログで識別できるように識別子を定義したりとか、そんな地味なところですが。

マップシステム作り直そうか

Bomber丸World、高さマップ廃止とかで、マップ構造にも変化が現れそうなので、いっそマップシステムをまた1から作り直すとして、やりたいことを考えてみます。

1.複数のマスにまたがるキャラを作れるようにする。
これ、当初主人公たちも2マス×2マスにしていて、つまり半歩ずつ歩けるようにしていたんですね。
ただ、実装の面倒さから再び1マスの大きさに戻したんです。
しかし、このゲームはかなり体格差のある人々が出てくるため、やっぱり主人公基準の1マスじゃ小さすぎるわけです。

2.高速な追跡アルゴリズムを実現する。
現在の次に探索すべき場所をすべて含む矩形内をくまなく調べる追跡アルゴリズムはマップの一辺を1として最悪でO(l3)の処理時間でしたが、次に探索すべき場所を記録しておいて調べるのは実際調べなければならない場所だけというアルゴリズムにすればO(l2)の処理時間に短縮することが可能なはずです。

3.エディタを利用することを前提としたファイル形式にする。
何しろアニメーションにせよキャラクターにせよテキストエディタで書いていること前提であらゆる省略記法を想定し、ファイル形式が複雑になってしまいました。
専用のエディタを作れば、データ量が増えてもあまり手間は増えないので、データ構造の単純化が実現でき、同時に作る人の頭も単純な考えで動かしてかまわなくなるのです。

新しいテレビ

今日うちに新しいテレビが来ました。
ハイビジョンだか薄型だか、とりあえず私より年寄りのブラウン管テレビと比べると面積比2~3倍の大きさの画面です。
買った親は映像がきれいになったといいますが、正直何が映っているか分かればいいという感覚の私には今一実感が湧きません。
入力端子が増えたのでゲームで遊ぶ分には便利になったかもしれません。
S端子もついたのでゲーム映像もきれいになるのかな…?
今のところ以前使っていたものと同じケーブルを使っても画面の視認性は向上しましたが(もしかしたら画面が大きくなったからなのかも)、これを替えたらどうなるのでしょうか。

カスタム全回収タイムアタック

爆ボンのページを久々に更新しました。
カスタム全回収タイムアタック、すなわち、どきどきモードで記録に残る全てのアイテムを取り尽くすという、ある意味最も基本的で、もっとも過酷なやりこみです。
まだ基本的な時間短縮点しか書いていないですが、そのうち本編の攻略も含めて充実させていく予定です。

浮き沈みリンク集更新しました。
この前日記に書いていた変更です。
忘れないうちに。

爆ボン動画

日記のPHP移行のうち、HTMLを最新にする機能、ファイルアップロード、既に書かれた日記の再編集フォームができました。
一応日記再編集フォームは以前のものより使い勝手は良くしてあります。

爆ボンの動画をYouTubeにアップしてみました。
ハドソンに確認とってないので実際よいのかどうかわからないのですが、決して新しいゲームでもないし、誰が損害をこうむるわけでもなさそうなので、別に大丈夫だろうと考えてとりあえず数点アップしてみました。
しかし、録画環境の整備にはちょっと手間がかかりました。
テレビチューナー付きだったのでそれを活かそうと思ったらテレビを映すソフトの録画形式が独自形式で、結局新たにビデオキャプチャソフトを導入することになってしまいました。

alogconv

昨日言っていたソフトが出来上がりました。
同じフォルダ(というよりカレントフォルダ)にあるgzファイルを回答して中身をアクセスログとして解析し月別にファイルに追記してgzファイルを削除するプログラム、すなわち私がアクセスログを回収してから解析し始めるまでにしている作業を自動化したプログラムです。
単純なコンソールアプリケーションで、今日の日記からダウンロードできます。

でまあアクセスログ関連ということで、ナマライザのフィルタ編集ウィンドウの形式が決まりました。
結局どの形式も一つのウィンドウで済ますことにして、フィルタの分類を大きく3つ、細かく7つに分けて作ることにしました。
大きな分類では、条件指定なし、具体的な内容を指定、サブフィルタのリストを指定、の3つで、細かな分類では、無条件、特定の条件を満たす、特定の条件を満たさない、AND、OR、NAND、NOR、の7つになります。

1169305100.lzh

高さマップは必要なのか

ふにゃさんプレイムービー全ステージ分アップし終わりました!
最難関のギロチン台は時間のかけすぎでうまく録画できなかったので改めて録画しなおしたのですが、他は滞りなく一発で録画成功しました。
あと、二重起動すると白い四角が出る問題を調べてみたのですが、原因はよくわかりませんでした。
もしかしたらShowWindowで間違ったウィンドウをアクティブにしているのではないかとも思うのですが、なぜ間違ったウィンドウが出るのかもわからないのです。

Bomber丸Worldの高さマップは廃止することになりました。
詳しいことはWikiに書いてありますが、主な理由はたいした利点がないことと、様々な欠点があったことです。

のんびりナマライザ、とは直接的には関係ないのですが、gzファイルの中に圧縮してあるアクセスログを解凍した上に適切なファイルに内容を書き込むソフトを作り始めました。
完全に自分専用に特化したソフトなので他の人にはほとんど使えない代物ですが、一部にナマライザのコードを流用してたりします。

BGM切り替えで止まる

今日、ふにゃさんのプレイムービーを録るためにプレイしていて、ふとクリアした画面のときに音楽の設定をちょこちょこ切り替えて遊んでいると、突然ゲームが止まってしまいました。
BGMを、なし→ユーザー定義(WMA)→標準(MIDI)の順で切り替えたら突然動作停止です。
だけどこの現象はそれっきり再現しないし、データとの相性もあるかもしれないので、ちょっと検証しにくいです。
一応、録画した動画はアップしておきました。

微妙な拒絶感

浮き沈みリンク集を改良してみました。
タグがリンクの入れ替わりに応じてくるくる入れ替わってしまってタグをつけても探すのが面倒ということになってしまっていたので、リンクは従来通りスコア順の表示にして、タグはそれとは関係なく五十音順で表示するようにしました。
ただ、前のバージョンのほうがいいという場合もあるかもしれないので、一応これはオプションにしていて、何も設定していない場合は従来の方法で表示するようにしています。

バナーを追加しました。
コネコベーダーを使った白黒の極小バナーで、うちの画像にしては珍しくGIF形式です。
ついでにバナーのアドレスを変更しました。
まずリンク集にある各サイトのバナーの置き場を/links/banners/から/banner/に、それに伴ってうちのバナーもその中に入れて/banner/tgws01.pngと/banner/tgws02.gifです。
この名前の変更は管理上の理由もありますが、うちにリンクしてくれるという人がバナーをダウンロードしたときファイル名に困らないようにするという意味も持っていたりします。

で、そして、ふにゃさんのステージセレクトの改良なんかもしたりしていました。
難しそうな気がしたもんでずっと先送り先送りにしていたのですが、改めてよく見てみると、ステージセレクトでのマップの表示処理はたった3行のコードで書かれていただけであり、結局ちょこっと手直ししただけで開始面を表示できるようになってしまいました(以前は何面まで進んでいても表示されるのは常に1面だった)。

そんでもって、今日は辛口イモ天カレーなんぞを食べてました。
何のことはない、レトルトの辛口カレーに昨夜の残りの芋の天ぷらを乗せただけのものです。
スパイシーな辛口カレーに芋の天ぷら油が微妙な拒絶感を醸し出していました。

ライブラリ

Bomber丸World開発Wikiに旧開発室のライブラリのページを移行しました。
どうにも手抜きして旧ページからコピーしただけのCBWWindowクラスのページは不正確なようです。
他は細かい修正などもあって位置から書いたりしたのでわりと正確なはずですが。

地味な処理

はいはい。
それで、いきなり流れをぶった切ってTGscriptの開発を進めたりしていたのです。
今回やったのはプロフィール読み書きの一番中核部分です。
本当に、IDがいくつだったら開くファイルは何とか、ファイルを開いたらデータをキャッシュに一時入れるとか、プロフィールを閉じるときはデータが更新されているなら自動で保存も行うとか、ほんとそんなところばかり作ってました。
キャッシュに入れる、というのは、例えば掲示板などにおいては、何人かが話しているわけで、何人かのデータをメモリ上においておけばいちいち何度も同じ人のデータを開く必要がなくなるわけです。
だからといって全員ずっと保存しっぱなしだったらメモリが足りなくなってしまうのである程度数が増えたら見切りをつけて適当にデータを閉じます。

可変ウィンドウ

yaneSDKのバージョンや内容も変わったし、最初にCBWDrawを作ったときからゲーム画面の処理も変わってきたのでCBWDrawを手直し中です。
まず、DirectDrawによるフルスクリーンを使わなくなったこと。
これによりディスプレイ解像度の変更が完全になくなるのでゲーム画面の大きさ変更からフルスクリーンとフルスクリーンのときのビット深度のオプションがはずされました。
そして、ウィンドウサイズが自由になったこと。
これはyaneSDKの前提の一つを覆すものなので結構修正が多いかと思ったのですが、CWindowのことあるごとにウィンドウを画面中央に持ってくる部分を修正すれば、他はCBWDraw内部の処理だけでなんとかなりそうです。

そうそう、TGWSにある全てのWikiの更新状況を管理者が一箇所で監視できるようにしてみました。
ユーザー側から見れば別に何もありませんが、こっちから見れば、他の掲示板などへの書き込み通知と同じように見ることができるので非常に便利になるのです。
本当はそういうのに対しては予めメール通知機能がついていたりするのですが、元々私はあまりメールチェックをしませんし、メール送信は案外重い処理らしいので、できるだけ一つのサーバー内で起こったことは一つのサーバー内だけで完結させたかったのです。

DirectDrawは遅かった

で、yaneDirectDrawとyaneDIBDrawの性能を比較してみました。
結果はWikiに書いてあります。
圧倒的というか、話になりませんね。
yaneDirectDraw、単純な等倍転送以外、使い物になりません。
で、全てを拡大する可能性のあるこのゲームでは使えないというわけです。
何しろ一つ転送するのに10ms以上かかるということは、よくあるキャラを二人描いたら60FPSは達成できなくて、五人描いたら20FPSすら出なくなります。

DirectDrawの拡大処理

う~ん、今日yaneSDK1stでDirectDrawによる2倍拡大を試してみたらyaneDIB32にあったような整数倍拡大時のドット潰れが起きていなくて、Bomber丸Worldの描画エンジンも半透明とかエフェクトなどをあまり豪勢に使わないならDirectDrawでもいいかなと思っていたりします。
Bomber丸Worldではドット絵と解像度の関係上拡大処理が多くなって、そうするとyaneDIB32の本領発揮となるエフェクトや各画素ごとの処理などがうまく働かなくなる可能性もあったり、その上単純に処理すべきドット数が増えることによる速度低下なども考えられたりして、その意味でもDirectDrawのほうが良いのかなと思ったりしてます。
だけどそうするとまた描画関連のプログラムがごっそり入れ替わる可能性もあるわけで…。
とりあえずブレンド処理の速度を測ってみてから考えたいと思います。

曲率

ふにゃさんのプレイムービー5~10面をアップしました。
11面以降も録画しようと思ったのですが、あいにく11面でゲームオーバーになってしまったので録画は先延ばしです。
そうそう、現在ふにゃさんのシークレット機能の空を飛ぶふわふわふにゃの動きを考えています。
別にふわふわふにゃそのものの動きでもかまわないのですが、やっぱりふにゃさんなんだから、空気の抵抗を受けたり、くるくる回してみたり、色々やりたいわけですよ。
くるくる回すというのがよくわからないかもしれませんが、やってみればわかるかもしれません。
曲率を利用することも考えてます。

Bomber丸World開発室のWikiへの移行は順調です。
本当はプログラムの深いところをどんどん追記していきたいのですが、やっぱりキャラとかストーリーを書くほうが楽しいので、そっちのほうばかりが充実していきます。

スキップしない率

BSch3Vね、単なるドローツールとしてもそれなりに使えそうです。
もちろん回路図に特化したソフトなのでドローツールとしては全然強力ではありませんが、回路図を書いてる途中で他の図も使いたくなったときなんかはなかなか便利です。

NeoMupl、テストしてみたらスキップ条件がまるっきり逆になっていました。
まあ、そのおかげで全部スキップだったときの挙動も確認できて、結果的には全部スキップされたときの挙動を改善することもできました。
全部スキップされたときの挙動は、まあ、つまらないことなんですが、全くスキップされなかったときと同じ挙動を示すようにしています。
あと、スキップ率のスクロールバーの挙動がおかしかったので修正です。
高速読み込みは現状の速くない方式でも3000曲で0.25秒なのであまり問題ないとして、予定リストからはずしました。
あと、今更ながらリスト編集ウィンドウの参照ボタンを実装しました。
情報バーは最近存在すら忘れていたので完璧に時代遅れの状態となっています。
何とかしてリスト編集ウィンドウと同じ挙動を楽してさせたいものですが。

のんびりナマライザのフィルタをちょっといじってました。
具体的なものはなかなか作りにくいのでやっつけでORとNOTのフィルタを作ったりしてみました。
ANDは昔からあります。

BSch3V

ちゅうわけで浮き沈みリンク集更新できました。
同時にうちのサイトで使ってるリンク集CGIもアップロードしましたがこちらは不完全版ゆえ一般公開はまだしておりません。
またそのうちするつもりです。

そういえば、回路図エディタソフトBSch3Vを導入してみました。
ほんとこれ便利ですね。
これでもうペイントで描かなくて済みそうです。
しかもメタファイルで出力できるのでドットつぶれの問題もないときたもんです。
http://www.suigyodo.com/online/

浮き沈みリンク集

自分用リンク集PHPの削除機能ができて、ついでにパスワードで編集制限する機能もつけたので、これで事実上完成となり、もしかしたら人様のためにも使えるかもしれないと思ったので、明日アップしようと思います。
今回、いつものCGI・PHPとは異なる方法で作っていて、大きなプログラム本体を、小さな設定ファイルから呼び出す形式になっていて、普通のCGI・PHPとは異なるつくりになっています。
こうした理由は、プログラムひとつで設定ファイルだけを複数用意することで簡単に同じリンク集をいくつも作れるというのがあり、また、PHPを呼び出す前処理・後処理も自由に作れるようになるためというのもあります。
TGscriptもこの方式でいこうかなとも考えてます。
こちらも複数用意する必要性が出てくるかもしれないので。

重言の重複

重言、つまり言い換えると重ね言葉ですが、それを見つけるたびに毎度毎度何度でも「それは重言だ」と鬼の首を取ったように喜び勇んで指摘する人がいたりするんですが、それってなんだかどうにもまるであたかも重言が言葉の用法の誤用をしているように言っているような感じを感じるのです。
確かに実際同じ意味の同義語を複数重複させて何度も使うのは長くて冗長で、スマートに言う言い方とは考えにくいのですが、だからといってそれがすなわちすぐに間違った誤用であるという根拠にもならないわけです。

まあそんな、「重言でもいいじゃないか」という話はhttp://www.asahi-net.or.jp/~QM4H-IIM/ktb018.htmとか他にもあるわけで、私が特に納得いかないのは、重言を探すのに夢中になるあまり「重言だから何なのか」というのを見失い、あれも重なってるこれも重なってると、問題のないものまで論ったり、「正しい言い方」として全く意味の異なる表現を持ち出したりする人が多いんですよね。

例えば「必ず必要」。
これ、2つの「必」は意味は同じですが、文中での働きは全く異なります(「必ずしも必要ではない」という組み合わせを考えれば明らかなはず)。
例えば「ハンドルネーム」。
「重複」と同じ構成の熟語だと思うんですわ。
例えば「約数十」。
単に数十だけだと、一の位が0固定なのか0~9の間で動くのかが曖昧ですが、「約」が付くことで後者であることがはっきりするわけです。

この情報化社会、冗長さを無闇に切り捨てようとするのではなく、うまく付き合っていくことが大切なんじゃないかなって、思います。

うぃきうぃき!

引き続いてBomber丸Worldの開発室もWikiに移行してみました。
とりあえずはもともとの開発室の内容の移行とキャラやストーリー情報の記載をしていきたいのですが、Wikiの記法に慣れないため思うように進んでいません。

キャラセレクト?

ふにゃさんのキャラセレクト機能、いい加減に作ろうかなと思って、肝心の入れ替えるべきキャラの絵がうまくできなかったんだということを思い出しました。
あんことサングラスをつけたふにゃが必要なのですが、あんこはふにゃとは違う表情のところが、サングラスのふにゃはサングラスそのものがうまく描けないのですよ。

Bomber丸Worldでは昨日ふにゃでやっていたような整理をやっていました。
yaneSDKの中にはいらない部分が多くてそれによりファイルサイズやメモリ使用量が増大しているという部分があるので。

メモリリーク?

ふにゃさんのソースファイルのうち、ふにゃさんを実行するのに不必要な部分を取り除いたりしていました。
とりあえず全く使ってなくてしかしなぜか必須だったスプライトキャラ関連を取り除いたら一気にファイルサイズが644KB→628KBに減りました。
メモリ使用量も思ったより多かったので削減しようと思ったのですが、こちらは思ったように減らず、メモリリークを調べようとしてもよくわからないし、とりあえず深刻な状態ではなさそうなので放っておくことにしました。
newで確保してdeleteしてなさそうな場所があるようだったのですが、どうにも起動中1回だけする初期化でできたメモリが残るようなので、deleteするまでもなくプログラムの最後まで残り、そして終了時に自動的に解放されるような気がします。

ウィキウィキウェブ

突然ですが爆ボンバーマンWikiを始めました。
なんというか、メテオスWikiに触発されました。
とりあえずWikiにしときゃあ何かあるだろう的な考えの元、深く考えずに作ってみました。
Bomber丸Worldが完成したら、私の干渉しない、ユーザーの作る攻略ページをWikiで作れたらなぁと思い、その練習もかねて作ってみたわけです。

そんなBomber丸Worldのことですが、エンディング時の強さを保ったまま最初からゲームが始められるシステムというのはどうだろうと考えてみたりしました。
これがあれば裏ボスとかを滅茶苦茶強くしても10周目ぐらいに勝てるようにしておけば問題ないし、1回目は苦戦していたボスを楽勝で倒す快感も味わえるのです。

評価機能=スキップ率

NeoMuplのスキップ率を実装しました。
スキップ率が有効になるのは、次を演奏、前を演奏、ランダム演奏、の3つで、百分率で指定します。
動作テストはしてないのですが一応アップしておきました。

1~4面

ふにゃさんのプレイムービー、1~4面までをアップしました。
やっぱりどうにも背景の岩の模様がうまく処理されないようで、動いてるとほとんど模様が見えなくなります。

そういえば、日記に書き込んだとき、日記書きこみフォームに表示されるカテゴリ一覧のためのデータファイルを更新する機能をつけるのを忘れていたので、今日付けておきました。

<2007年02月 2006年12月>