日記

5月 1日 (火)

1. 読めない

部屋の整理をしていたときに、X68K時代のMOディスクが出てきた。去年買ったMOドライブを使ってサルベージでもしようかと思い、ディスクを入れてみた。ファイル一覧は見られるのだが、なぜか一部のファイルしか読めない(アクセスできない)。どんなファイルが読めないかというと、ファイル名に英小文字を使用しているもの全て。日本語文字を使用しているファイルは読めるのになあ。

さて、どうしたものか。

2. 読む

MOが読めない件。Windowsで足掻いてもどうにもならないので、X68000 Compact (RED ZONE)を引っ張り出してきた。外付けHDDとMOドライブがなかなか見つからず、あちこちの段ボール箱をひっくり返す。見つかったと思ったら、今度はSCSIケーブルがなくて、またひっくり返す。なんだかんだでどうにか起動まで漕ぎ着けたが、mint起動時にメモリが足りないと怒られる。8MB積んでいるはずなのに、どういう訳か空きメモリが異常に少ない。あれこれ悩んだあげく、メモリスイッチの設定が2MBになっていることが発覚。2MBに戻した記憶はないんだが…ともかくSWITCH.Xで設定し直して、ようやく使えるようになった。が、ディスプレイに映る画面が妙に縦長で、上下の端が切れてしまう。ディスプレイに直接繋がずに、XRGB-3を通してもみたが、XRGB-3はX68Kの信号を認識してくれない *1 ようだ。うむ、これはどうしようもないか。今のところは我慢しよう。あと、日付が2017年になっているのはご愛敬だ。というか、六年以上起動していなかったにもかかわらず、普通に動いたことが驚き。

さてMO。当然ながらX68Kでは普通に読める。書き込みもできる。そこで、サルベージしたいファイル群をX68Kでアーカイブし、書庫ファイル名を大文字&8.3文字制約にリネームしてMOに書き戻す、という方法を採ることにした。これなら馬鹿なWindowsでも問題なく読み込める。

注意したいのは、X68KでフォーマットしたMOをWindows読むときには、必ずライトプロテクトをかけておくこと。Windowsのドライバの「仕様」なのかどうかは知らないが、ファイルを読むだけ(ディレクトリ一覧を読むだけだったかな)で、Windowsが勝手にFATを書き換えてしまうことがある。書き換えられてしまうと、そのファイルはWindowsで読めてもX68Kでは読めなくなってしまう。以前X68KのMOをWindowsで読もうとしたときに、これで痛い目に遭った。今でもそうなのかは知らないが。

ところでこのX68K、電源ボタンをOFFにしても電源が切れないんだが…電源断をフック *2 するような物は常駐させていないしなあ。電源ユニットがおかしくなったかな。

  • *1: 確か対応ファームウェアがあるとかないとか。あっても今はダウンロードできない。
  • *2: X68Kは、前面電源スイッチによる割り込みをフックすることができる。前面電源はMaskable Interruptionなのである。ちなみに最強の割り込みはNon Maskable Interruptionであるリセット。

3. MUV4でAC2

X68K復帰記念として、まーきゅりーゆにっとV4(MUV4)でACECOMBAT2を再生してみた。やっぱり違うね、これ。MUV4(DACはバーブラウンのPCM67U P-grade)の音って、多少くぐもった感じはあるものの、柔らかいというか、丸みがあるというか。なんとなく、まろやか。一応、光デジタル出力端子も付いているけれども、デジタルで出力するのはもったいないね。アナログでアンプに直結した方がいい。

5月 3日 (木)

1. 不可能?

地球防衛軍2 IMPOSSIBLE部分攻略を追記した。手段を選ばずにクリアしたものも含めると、クリア率は八割弱。

5月 5日 (土)

1. ホームセンター

近所のホームセンターの品揃えがかなり充実していることが判明した。ガーデニング用具、木材とそのカット、フローリング工事から洗面台の取り付けなど、見ているだけでも結構楽しい。

2. 不可能?

地球防衛軍2 IMPOSSIBLE、クリア率は九割弱。残りのステージのうち、理論上はクリアできるものも2〜3あるが、俺の腕では無理。100%への道は険しいな。つーか、まだこのゲームやっているのか俺。

5月 7日 (月)

1. KAGモニタ

コンダクタのイベントを書き換えてフックし、コンダクタで何が起こっているかを監視できるようにした。

5月 11日 (金)

1. ADSL

ADSLを申し込んだ先のISPから電話がかかってきた。何でも、うちの地区は少々特殊で、開通までもう暫くかかるとのこと。何がどう特殊なのかよくわからないが、さっさと開通してくれないと不便だよ。つーかさ、ADSLって開通に時間かかりすぎ。特にタイプ2(ADSL専用)。うちみたいに固定電話を契約していない家は必然的にタイプ2になるのだが、営業日ベースで通常三〜四週間って異常。もう、光にしようかな、という気になってくる。まあ光は光で、また時間がかかるのだろうけれど。

5月 12日 (土)

1. ブラックアウト

PCとディスプレイを、XRGB-3を経由してDVI接続していると、ときどき画面がブラックアウトする。ディスプレイが映像信号を見失ったためかと思われる。1〜2秒で復帰するのだが、非常に鬱陶しい。瞬間的に映像信号が切れるのか、ディスプレイモードが変わったと誤認するためか。謎。

XRGB-3を経由せず、PCとディスプレイと直結すると、件の現象が出なくなる。おそらくXRGB-3が原因なのだろう。

5月 13日 (日)

1. KAGモニタ

変数をダンプするVariantDumperを作成し、KAGのフラグ変数global.fglobal.tf監視できるようにした。ただ、システム変数global.sf は監視しない方がいいだろう。こいつはダンプすると結構凄いことになる。

5月 14日 (月)

1. 吉里吉里

プラグイン。RandomVariate NIクラスのSetRandomGenerator()とSetNonuniform()のせいで、盛大にメモリリークしてる。何でtTJSVariantを持ってるんだっけ?何でこんなタコなコードが残ってるんだ?

2. TDSメモ

TDS附属のtdf2html.plは、日記でないTDFファイルをHTMLファイルに変換するPerlスクリプトである。当サイトのHTMLや、拙作の吉里吉里プラグインのマニュアルなどは、ほとんどがこのスクリプトで変換されたHTMLである。このスクリプト、というかTDSのおかげで、HTMLやXHTMLをベタで書くことはほとんどなくなった。TDFファイルを書くときは、文書の構造を意識しつつも、面倒なタグを書かずに済むため、実に快適である。しかも自分でHTMLを書くわけではないから、HTMLの文法エラーなど滅多にない…はず。

このtdf2html.plには一つ難点がある。それは出力が標準出力一本という点である。複数の入力ファイルを指定することはできるが、単に結合して一つのTDFと看做すだけっぽい(未確認)。とにかく出力が一本なので、複数のファイルを作成したいときは、スクリプトをファイルの数だけ起動させないといけない。ところが、TDSそのものがそれなりの規模なので、一回起動させるだけでも1〜2秒かかり、大量のファイルを変換させようと思ったら相当な時間が必要である。吉里吉里プラグインのマニュアルなどは、全部再作成させると2〜3分はかかる(Athlon XP 1900+)。

そこで改造ですよ。

  1. Perl起動
  2. TDSモジュールロード(これが重い)
  3. パーサやレンダラ等のインスタンスを作成(これは軽い)
  4. 入力ファイル読込み(わりと軽い)
  5. HTMLに変換(コレクションやレンダラを介すため、ファイルサイズと内容依存)
  6. 標準出力に吐き出し
  7. Perl終了
  8. 以上を必要な回数だけ繰り返す

今までこんな感じで動いていたのを、インスタンス作成〜吐き出し間でループさせるようにした。ただそれだけ。…では能がないので、入力/出力ディレクトリを指定できるようにし、入力ファイルは複数かつワイルドカードOKにした。perl tdf2html2.pl -s skeleton.html -i inputdir -o outputdir *.tdfとすると、指定ディレクトリ以下のTDFファイルを一括して変換できる。

かつて数分はかかっていた、吉里吉里プラグインのマニュアル作成処理が、わずか30秒足らずで終わるようになった。桁違いの速さ。

というか、たったこれだけのことを、なぜ今までやらなかったんだろう…

5月 17日 (木)

1. 叙事詩

オーディンスフィアを買ってきた。プリンセスクラウンのイメージをそっくり引き継いでいる。プレイ感覚もそっくり。当分これに嵌る予定。

5月 20日 (日)

1. オーディンスフィア

ベースは北欧神話だけれども、中世欧風ラブロマンスの王道を行くようなストーリー。ドラマシーンなんかはそのまま戯曲になりそう。

5月 21日 (月)

1. オーディンスフィア メモ

  • ステージ間のロード時間が短めなので快適。章の最初に章データをまとめ読みしたり、ステージ突入後に敵キャラデータをロードするなど、ロードに関しては工夫が見られる。
  • プーカの隠れ地下街〜料理屋&カフェ間はロード時間が長い。
  • 城下町にいるウーズ(緑色の軟体生物)は、物理攻撃、サイクロン、フォゾンバーストによるダメージが1。能登…いやメルセデスなら普通にダメージを与えられる。敵魔法使いの剣を跳ね返して当てれば大ダメージ。K,N,Vの魔法薬なら一撃必殺。Oの魔法薬でこちらもウーズを召喚し、食わせても良い。
  • 城下町のアックスナイト戦で援軍がゴブリンの場合は、ダガーを弾いてアックスナイトに当て、毒状態にして逃げまくるという戦法もある。
  • メルセデスの章で、中盤〜後半戦でナップルの種を大量に集めた後、イルリットの森へ。クイックグロワーを取り、ナップル種を一点に集中して植えてクイックグロワーで促成栽培、ヨーグルト(偶数マテリアル+ミルクで合成)でドーピングしてからナップルの実を食べまくると、HP経験値を稼げる。
  • イルリットの森はタマネギ、溶岩地帯はハバネロ、死の国はトリカブト、魔王の都市は人参、雪山は蕪が出やすい。
  • 魔法薬名のアルファベット頭文字が、きちんとA〜Zに対応している(Xのみ例外)。地味に凄い。
  • 死神若本。渋すぎる。
  • 声優陣がやけに豪華だ。

5月 22日 (火)

1. ADSLは遅すぎる

ようやくADSLが開通した。今更ADSL?という気がしないでもないが。

申し込んでから実に一ヶ月待たされたよ。遅すぎる。基地局内でごちゃごちゃやるだけで、なぜ一ヶ月もかかるのか。開通までにかかる期間が長いのは、数年前と変わっていない。この点、以前社会問題になったことすらあったのだが、今でも改善されていないのではないか。

とにかく、インターネットに繋ぐ用意はできた。以前とは違って、モデム(兼ブロードバンドルータ)に設定が登録されており、PPPoE認証だとか面倒なことはモデムが自動的にやってくれる。楽ちん。内部PCルータのデフォルトルートをモデムに向けて接続完了。あー、やっと「いんたーねっと」できるよー。

電信八号を起動したら、未受信メールが4000通 orz

2. 能登かわいいよ能登

オーディンスフィア。謎の文字列"NotoKawaiiyoNoto"はSLPM_664.74の0x002BDC20に。

5月 24日 (木)

1. 白い悪魔

第一話だけを観て、絶賛放置中の「なのはStrikerS」。リリカルなのは(第八話)が大変なことになっているらしいので、どんなものかとyoutubeで観てみた。

…いや、別に普通では?作画が崩れ気味なのはともかく、なのはさん、優しいじゃないか。全然黒くないよ。それに結構面白いし。継続して観ていれば良かったかなあ。

5月 26日 (土)

1. オーディンスフィア

ガロン王の声、渋くて良いな。

終焉。叙事詩や覚え書きを無視して適当にぶつけていったら、見事にバッドエンドになった。正しくは、コルネリウス、オズワルド、メルセデス、ベルベット、グウェンドリンの順でいいのかな。各キャラともエリクサーは持てるだけ持っていった方がいい。魔法薬PとUも必須。相手によってはA, C, Wもあった方がよい。予備として高レベル(十の位が大きい)のマテリアルを持っていると、戦闘中でも合成してフォゾンを補充できる。注意したいのは、ラスボス戦では落としたアイテムを拾えないということ。合成後の魔法薬は諦めるしかない。

2. ブラックアウト

XRGB-3のファームウェアをアップデートしたが、ブラックアウトする現象は改善されなかった。残念。

5月 27日 (日)

1. オーディンスフィア

クリアした。クリア特典はなし。一番右の星が埋まっていないのが気になる。

今回はプリクラのようなおまけステージはないのかな。

このゲームは難易度NORMALでもそれなりに難しい。こちらの攻撃中に後ろから攻撃を受けたり、目眩〜凍結〜連続ダメージのコンボを食らって即死したりと、敵が複数であるがために難度が上がっている。ただ、プリンセスクラウンのように、敵キャラにだけ理不尽な無敵時間があるとか、戦闘開始直後こちらの硬直が解ける前に敵が攻撃してくる *1 というようなことがないのは救いか。

なお、最強キャラは高火力+紙装甲のメルセデスと思われる。ストーリーでも好きなのは「終焉」を含めてメルセデス篇だな。

  • *1: 酷い戦闘システムだよな。

2. オーディンスフィア 終焉

ネタバレメモ。難易度はNORMAL。

2.1. 一戦目

解毒のペンダントがあると楽。回転斬りは使わず、三首の中央付近で通常の空中コンボを極めた方が効率はよい。相手がジャンプしたら、せり上がる岩の上に乗り、敵の着地に合わせてジャンプすれば大ダメージを回避できる。

2.2. 二戦目

このステージはやたらと蝶が出現するような気がする。

最もうざったい敵。首を三つ撃破〜心臓攻撃を最低でも三セットこなす必要がある。脅威なのは首伸ばし攻撃。これは残っている首の数によってパターンが変わる。残り三つの時は、本体が右向きなら、本体の左側の首出現位置すれすれの場所(地面が紫に変色している部分)が安全地帯。ここに留まっていれば首に当たらず、レイスも出現しない。残り二つの時は安全地帯なし?残り一つの時は、一方向に走り続けていれば大丈夫?

2.3. 三戦目

開幕早々ありったけのナパームとラウンドショットをぶち込むとよい。数にも依るが、三分の一くらい減らせると幸せになれる。プロミネンス〜ロケットパンチ攻撃の時は、本体の近くでパンチを破壊していた方が安全か。特攻は三回で一セット。一旦速度を落としたときはジャンプ、落とさなかったときはスライディング。ジャンプの場合は下を潜って回避する。時々動きが止まる(ダメージ量に依存か?)ので、そのときに連射攻撃しておく。

2.4. 四戦目

パイプはある程度ダメージを与えると温和しくなるで、初めのうちに数箇所のパイプを黙らせておくのも良いか。蒸気吹出口は無敵っぽいが、攻撃を食らわせれば一時的に噴出が止まる。

ターゲットである目玉の耐久力は凄まじいので、長期戦は必至か。目玉の周囲四本のパーツは何度でも復活する。目玉はある程度ダメージを与えると気絶する。気絶中は無敵(ずるいよね)。

目玉がフォゾン吸収を始めたら危険信号。周囲四本のパーツがなければこちらも対抗してフォゾンを吸収。「危険!」のメッセージが出たら、即刻離れること。本体近くにいると大ダメージを食らって大抵即死。

2.5. 五戦目

一旦背中に落としたアイテムはすぐに転げ落ちてしまうので、回収は困難。

上へ上へと登っていき、角を攻撃して叩き折るのが目的。垂直雷撃を食らうと中ダメージ&下まで落とされるので注意…といってもアレは見てから躱すのは不可能(一方向に動き続けていれば当たらない?)。小雷撃は運が良ければ当たらない。電撃球はプレイヤーを追ってくる上に撃破されると小さく炸裂する。登っていく途中で首に出会ってしまったら、右の退路は断たれている状態なので、ある程度ダメージを与えてから左側に落ちた方が無難か。つまり、無傷で登るのは不可能に近いので、アンシーアブルを使った方が安全。

最上部に着いたらナパームとアンリミテッドパワーでがしがし削る。炸裂攻撃ではじき飛ばされたら登り直し。

5月 28日 (月)

1. 迷惑中国

サイトのアクセスログを見ると、やけに503 Service Unavailableが多い。それも特定の日、特定のURIに集中している。成功しているステータスを見ると、どうも分割ダウンロードっぽい(206 Partial Content)。503を食らっても、間隔を空けずに何度も何度もリトライしており、それが更なる503を生んでいると思われる。迷惑だ。アクセス元のIPアドレスで集約してみると、十個程度に絞られる。このIPアドレスをAPNICのレジストリデータで調べてみると、全て中国だった。酷いのはこの辺。

  • 59.34.5.237
  • 59.56.218.181
  • 124.72.204.158
  • 124.72.192.236
  • 125.64.206.180
  • 125.95.176.145
  • 125.95.177.151
  • 218.14.59.18
  • 218.14.62.167

NICからの割り当てIPアドレスごとごっそりアクセス拒否にしてみた。これで暫く様子を見よう。

しかし、こんな時に以前作ったIPv4データベースが役に立つとは…

2. sprintf

2月13日の日記を読み直していてふと気づいたのでメモ。

つまり、書式'%s=(%d,%d)'に対して[ 'Pos', 7, -5 ]という配列を食わせると'Pos=(7,-5)' が出力されるということ。

Pythonでは、%演算子の左辺値に書式文字列を、右辺値にシーケンス型を持ってくることで、Cのsprintf()のような動きをする。

'%s=(%d,%d)' % [ 'Pos', 7, -5 ]  # リストを指定
'%s=(%d,%d)' % ( 'Pos', 7, -5 )  # タプルを指定

面白いのは右辺値に辞書を指定した場合。書式文字列中の%の直後に辞書のキーを書くことができるので、その場所に何が展開されるのかが一目でわかるという利点がある。また、右辺値にだらだらとリスト展開しなくてよいのですっきりする。

position = { 'name': 'Pos', 'x': 7, 'y': -5 }  # 辞書を作成
'%(name)s=(%(x)d,%(y)d)' % position  # 辞書を指定

この機能、辞書配列を多用するような言語においては、sprintf(3)にあるようなパラメータ番号指定子(%1$s %2$d)よりも有用に思える。

5月 29日 (火)

1. オーディンスフィア

  • トロルの奥歯は、雪山のトロル(大サスカッチ)が稀に落とす。
  • 各キャラ章の終章では、コールフォゾンで放出したフォゾンの経験値が70と高い。また、サイファーゲージは低いほどゲージアップしやすい。この事実を利用し、ゲージが0になるまで放出〜1になるまで吸収を何度か繰り返すだけで、それなりに経験値を稼げる。

2. もってけ!

話題のらき☆すたOPをyoutubeで何度か観たのだが、何を言っているのか、歌詞がほとんどわからない。コードギアスの二期OPほどではないかもしれないが。唯一、最初の「怪物くんパート」だけははっきりわかる。

それにしても、よく動くなあ。製作、京アニだっけ。

5月 31日 (木)

1. トランジション

メモ。古村聡氏が、Oh!X復刊1998(P.57)でこう書いている。

そんななかで、私がほしいと思うのは「オーバーラップ」。これは、テレビアニメなどでは頻繁に使われている技法の一つで、その名の通り、以前のシーンをフェードアウト、これから現れるシーンをフェードインさせながら画面を重ね合わせて表示して自然にシーン転換などを行う方法です。

(略)256色モードではまず無理、フルカラーでも色を何度も計算しなければならないのでまっとうにやるとCPUパワーを必要とするなど、ちょっとプログラム的に面倒だというのはわからないでもないんですが、(略)これからのゲームには使って欲しいなぁ、と思う今日この頃なのであります。

これが書かれたのは八年以上前。Windows 98発売の頃か。標準的なマシンスペックはどの程度だったかな。確かに解像度や画面切替え速度(粒度、精度…)によっては演算量が跳ね上がるから、結構きつい処理ではある。今のマシンだって、640×480ピクセル60FPSでやろうと思ったら、結構パワーを食うんじゃないかな。計測はしてないけど。

ここで言う「オーバーラップ」というのは、吉里吉里で言うクロスフェードトランジションのこと。吉里吉里のクロスフェードトランジションでは、初めにトランジション前後両方の画像ありきで考える。「以前のシーン」をトランジション前の画像に、「これから現れるシーン」として真っ黒な画像を後の画像に指定すると、フェードアウトとなる。逆ならフェードインになる。だから吉里吉里には単純なフェードイン/アウトというものがない。フェードイン/アウトはクロスフェードの一形態である。

フェードインとフェードアウトの組み合わせがオーバーラップだと見るか、クロスフェードの一形態としてフェードイン/アウトがあると見るか。結果はどちらも同じだが、考え方というかアプローチが逆だね。

2. JavaScriptで書かれたvi

以前、ビジュアル系Webブラウザ+JavaScriptでテキストエディタ作れるんじゃね?と思って、いろいろ脳内で設計を進めたことはあった。Framesetを使って画面を左フレームと右フレームに分け、左フレームはMS Wordの見出しリストのように文書構造をツリー表示、右はHTMLのTEXTAREA要素を使った入力用。これなら視覚系ブラウザさえあれば他のソフトをインストールせずに済む。HTMLエディタくらいなら作れそうだ。なんだ、結構いけるんじゃないか…

そこまではよかったが、通常ブラウザのJavaScriptの実装にはクライアントマシンに対するファイルI/Oがないことに気づいて愕然とした。CGIやServletを使ってサーバサイドにファイルを保存するという手も考えたが、それはそれでファイル自体の扱いが面倒臭くなりそうだ。サーバも立てないといけないし。というわけで断念した。