日記

4月 1日 (金)

1. April Fool

今日は嘘をつきません。

2. April Fool

今日は嘘をつきませんでした。

一応、このサイトにはネタを仕込んでありました。 HTML Tiny Reference以外、ほぼ全てのページを書き換えてあったのですが、気づいた人はいるのでしょうか。

断っておきますが、アレは私の趣味ではありません。断じて違う。

4月 2日 (土)

1. maid

エマを観ました。とても丁寧に作られていて、好印象でした。話もなかなか面白かったです。

が、MTV2004 FEATHER、録画予約しておいたのに録画しないでやがる。やくざなソフトめ。後続のIZUMOはちゃんと録れていましたが、IZUMO、つまんなかった。

4月 3日 (日)

1. EDF

今日は地球を防衛していました。HARD縛り、つまりEASY、NORMAL禁止で、かつ同じ難易度で同じステージを2回以上プレイしないという制限付き。結構厳しかった。

2. maid

エマ、録画し直し。ついでに観る。

4月 4日 (月)

1. アキバ

帰宅途中で、アクメツ(11)を買うためにアキバに寄り道。自宅や会社の近くの本屋には置いてないので。

適当にぶらぶらしながら、エマ(漫画)とかMoetan(下)とかもえだんとか買ってきました。あと、ソフマップでたたき売りにされていた武刃街も拾ってきました。280円。

帰宅後に、肝心のアクメツを買い忘れたことに気づきました。もうね、アホ(略)

2. もえだん

…これ、簡単すぎませんか?

4月 5日 (火)

1. もえだん

全ステージ、ゴールドでクリアしました。余裕です。クリア後、「二周目」が始まったり、「もえだん(下)」になったりするのかと期待してましたが、そんなものはありませんでした。

難易度的には、東方シリーズのEASYレベルか、それ以下ですね。へたれシューターの私にとって簡単なのですから、普通のシューターには物足りないかも。ノーショット&ノーボム&ノーミスで縛れば、結構難しくなりますが。

4月 6日 (水)

1. もえだん

簡単なのはストーリーモードだけでした。もえだんの神髄はダブルスペルにあり!

48.画面全体を回るボス + 48.画面全体を回るボス
一見すると無茶苦茶ですが、意外と避けられる。
48.画面全体を回るボス + 49.歯抜けうずまき弾
これは無理でしょ(笑)
49.歯抜けうずまき弾 + 49.歯抜けうずまき弾
右下か左下なら僅かに隙間が出来るので、そこを抜け続ければなんとかなるかも。

2. Reason for it

信じたくはないのですが、字之弐号さんが亡くなったらしいです。エイプリルフールネタでもないようです。すげーショック。

酸欠金魚時代には、コミケに行ったときは必ずこのサークルの新刊を買ってました。また、本嫌いの私が本を読むようになった理由の一つが、この人の作品だったりします。

ご冥福をお祈りします。

4月 7日 (木)

1. 氷河……

聖闘士星矢、例の有名な(?)シーン。婦女子腐女子&貴腐人向け。こんなものまで再現しないでくれよ…

2. エロゲで学ぶデザインパターン

目の付け所というか、発想はいいですね。クラス設計とか、OOPに対する理解度があればもっといいんですが。惜しい。

4月 8日 (金)

1. 偽札作り

奪取(上)(下)読了。面白かった。久しぶりに、わくわくしながら読むことが出来る小説に出会いました。

最近、偽札事件が多いように思われますが、こういう事件で使われる偽札って、どの程度の出来なんでしょうか。モノクロコピーは論外としても、パソコン、スキャナー、プリンタがあれば、さも簡単に紙幣を偽造できるかのような報道をちらほら見かけますが。

とんでもない。

偽札には、機械を欺くタイプ、人を欺くタイプの二種類があります。機械を欺くには、紙の厚さと大きさ、光の透過度、磁気反応度、全体の色調さえクリアすれば、おおよそOKでしょう。人を欺くには、紙の色合い、手触り、しなやかさ、インクの色合い、乗り、ざらつき(深凹版印刷によるもの)、印刷精度、白すかし、黒すかし、その他諸々をクリアする必要がありますが、これらは一筋縄ではいきません。通常、紙幣は、その国が持つ印刷技術と製紙技術の粋を集めて作られます。日本におけるこれらの技術は世界でもトップクラスですから、日本の偽札を作るのであれば、それ相応の印刷設備、製紙設備、特殊な材料が必要になりますが、個人レベルで簡単に用意できるものではありません(特に凹版印刷設備など)。仮に手に入れたとしても、それらを生かすノウハウや技術が別途必要になります。素人が十万や二十万円程度のプリンタで作ったものなど、所詮おもちゃです。機械は騙せても、人を欺くことはできません。

偽札を作ろうとするならば、一度奪取を読むといいでしょう。紙幣作りがいかに困難か、よくわかると思います。ついでに刑法も読んだ方がいいですね。捕まったら、数年は娑婆の空気は吸えませんよ。

まあ、お子様は、子供銀行券で遊んでなさいってこった。

2. CAVE - オリジナルサウンドトラック - PV

何を売りたいんでしょうか、CAVE。サントラ?フィギュア?コスプレねーちゃん?

4月 9日 (土)

1. 武刃街

先日、280円でゲットしたやつです。システム的にも雰囲気的にも、THE お姉チャンバラによく似たアクションゲームです。パクりか?と思いましたが、発売は武刃街の方が先ですね。

280円のわりには面白くて、ちょこちょこ進めているのですが、1ステージが長いのでなかなか先に行けません。カメラが操作しにくいとか、勝手にカメラが動くとか、連斬を始めてしまうと終わるまで止められないとか、その他システム的にまずい部分もちらほら。まあ280円なので、あまり文句を言うのも何ですが。

音楽、TAMAYOさんらしい。

4月 10日 (日)

1. DARIUS PREMIUM BOX-REBIRTH

メモ。明日から予約開始。買うかどうか微妙なところ。

2. 年間維持費3億円の原子力発電の広報用ウェブページ

原子力発電の年間維持費が三億円…ではなくて、広報用ウェブページの年間維持費が三億円だそうです。ぶっちゃけありえない♪。何をどう見積もればこんな金額になるのか、教えて!!知○留先生。

3. 武刃街

7-4の例の難所がクリアできません。壁面走行、滑空、三角跳びを繰り返すということはわかっているのですが、壁に掴まってくれなくてずるずる落ちていってしまいます。ちゃんと掴まれよ、ga○kt。

4月 12日 (火)

1. T・J・S!! T・J・S!!

TJSエンジン引っこ抜きメモ。VCL依存だけは避けたいところですが、どうなることやら。

  • using bcc32 v5.6.4
  • Regex++ ver.3
  • Regex++ を build & install
  • 吉里吉里の core/tjs2/ 以下を丸ごと適当なディレクトリにコピー。
  • サンプルコートを書く。TJS2リファレンスに載ってるやつ。
  • 適当にMakefileをでっち上げる(PPマクロ TJS_SUPPORT_VCL は定義しない)。
  • make (使用されるのは $(REGEX_LIBPATH)/boost_regex_bcb6_mss.lib)。
  • 1MBくらいの実行ファイルができあがる。結構でかい。
  • 実行してみる。
  • ウマー

サンプルコードではwindows.hとSTL stringをインクルードすること。そのままだとコンパイルエラーになった。

#include <windows.h>
#include <stdio.h>
#include <string>
#include "tjs.h"
#include "tjsError.h"

4月 13日 (水)

1. TJS

TJSのエンジン部をDLLにしました。コマンドライン版TJSを作るだけなら、わざわざDLLにする必要はないのですが、ほかの計画で流用する予定なのでこうしておきます。

DLLからエクスポートされた関数の呼び出し方は、通常はGetProcAddress()関数を使って、DLLインスタンスハンドルと関数名から関数ポインタを取得し、それを実行します。しかし、利用者側が毎回こんなことをするのは面倒なので、DLLを作成する時点でラッパー関数を定義するコードも作成します。もちろん自動生成です。このコードを、DLL利用者がコンパイルすることで、エクスポートされた関数を簡単に利用できるようにします。

inline tTJS * TJSEGetScriptEngine()
{
  if (!TJSEImportFuncPtr_TJSEGetScriptEngine) {
    static char funcname[] = "TJSEGetScriptEngine";
    TJSEImportFuncPtr_TJSEGetScriptEngine = GetProcAddress(TJSEDLLInstanceHandle, funcname);
  }
  typedef tTJS * (WINAPI * __functype)();
  return ((__functype)(TJSEImportFuncPtr_TJSEGetScriptEngine))();
}

static変数のせいでinline展開できないのはご愛敬ということで。そのうち対処方法を考えます。ちなみに、このコードはtp_stub.hのコードを恥も外聞もなく真似たものです。

4月 14日 (木)

1. TJS

ネイティブ関数を追加するための機構とマクロを追加しました。これを使って、 global.print(String) 関数を作成しました。TJSから標準出力にナロー文字列を出力する関数です。とりあえず、こんなコードが動きました。

if (TJSELoadLibrary() == NULL) {
  printf("ロードエラー\n");
  return -1;
}
TJSEExecScript(
  L"function test(x, y) { return x*y; } \n"
  L"var res = '結果 = ' + test(4, 5); \n"
  L"print(res + '\\n'); \n",
  NULL, NULL,
  TJS_W("test code"));

DLLロード直後にスクリプトを実行できるあたりが、ちょっぴり素敵です。

ほか、早いうちに実装しておきたいのがファイル入出力関連です。TJSエンジンには、標準ではファイル入出力機能が実装されていないっぽい(インターフェースだけが提供されている)ので、Array.load()等が使えません。吉里吉里ではたしかVCLを使って実装していたような気がしますが、今回はVCL非依存を前提にしているので、いつものように(?)パクって済ませるわけにはいかなそうです。

4月 15日 (金)

1. TJS

I/O関連の実装を始めました。吉里吉里ではVCLを使っていたと思ったのですが、TVP2.24RC3 *1 のソースを追いかけてみたら、VCLは使われていませんでした。気のせいだったのか、記憶違いか…確か以前TStreamクラスとか使っていたような…まあいいか。

で、追っかけですが、吉里吉里のストレージ周りは複雑怪奇でよくわかりませんでした。下手すると、レイヤ周りよりも複雑かも。とりあえずファイルストリームとファイルストレージの部分だけを取り出して、うまい具合につなぎ合わせて、モジュール化。吉里吉里に深く依存した部分を所々コメントアウトしているため、動作はちょっと怪しいかもしれません。特にエラー処理。まあ追々直していくとしましょう。

ていうか、結局パクりかよ。

TJSCreateTextStreamForReadに関数の実体(へのポインタ)をコピーするところまで漕ぎ着け、Array.load()が動作するのを確認して終了。書き込み周りは、そのうち気が向いたらパクる実装するとしましょう。

  • *1: すでに2.24 stableがリリースされてますね。

4月 16日 (土)

1. TJS

簡易版スタブモジュールを作成しました。通常版スタブをリンクすれば、TJS関係の機能(tTJSStringとかeTJSとかいろいろ)を使えますが、バイナリのサイズはかなり大きくなってしまいます。簡易版では、TJS関連を一切使えませんが、TJSライブラリをリンクしないので、バイナリのサイズは小さくなります。この簡易版を使ってコマンドライン版を作成したところ、実行ファイルが64KB、DLL(TJSエンジン)が1MBとなりました。

ところで、当初の計画にはあった、プラットフォーム非依存の実行環境ですが、Windows APIに依存している部分が多々あったり、MakefileがBorland Makeに特化してたり、その他アレ(何)だったりで、現状では無理そうです。bash on Linux上でtjs HelloWorld.tjsとか叩けると楽しそうなんですけどね。

あと、コメントをちゃんと書いて、Doxygenで出力させてみました。

4月 17日 (日)

1. 武刃街

例の登れなかった場所ですが、ふとやり方が閃いたので、登ることができました。要するに、

  1. 滑空
  2. カメラ補正
  3. 壁面走行
  4. 三角跳び
  5. …以下繰り返し

ということですね。

そのまま勢いで、エンディングまでいきました。

2. TJS

メッセージ周りのインターフェースを作りました。TJS本体で定義されているメッセージを利用できる形にしました。

4月 18日 (月)

1. sqlite3 for 吉里吉里

おや、かぶってしまいましたか。

わたなべごうさんのは、吉里吉里プラグインにsqlite3本体を組み込んだ形になっています。また、2.25系の(俺的には)目玉機能である「プラグインでネイティブクラス」を利用しています。

私のは吉里吉里プラグインとsqlite3本体が別になっています。sqlite3本体は吉里吉里とは無関係なDLLですので、吉里吉里以外からも利用できますが、使う人いるんかいな。また、2.24系なので「プラグインで無理矢理クラス」です。インチキくさい。

4月 19日 (火)

1. TJS

ああ、なるほど、iTJSConsoleOutputを使えばいいのですね。

class TJSEStandardOutput : public iTJSConsoleOutput
{
  void ExceptionPrint(const tjs_char *msg) { printf("%ls\n", msg); }
  void Print(const tjs_char *msg) { printf("%ls\n", msg); }
};

このクラスのインスタンスを、tTJS::SetConsoleOutput()でエンジンに食わせてやると、エラー発生時に標準出力にこんなものを吐いてくれます。

==== An exception occured at A simple script invoked from TJSEExecSimpleScriptSTDC()(6)[(top level script) global], VM ip = 54 ====
-- Disassembled VM code --
…(略)
-- Register dump --
…(略)
-----------------------------------------------------------------------------------------------------------------------------------
メンバ "foo" が見つかりません at A simple script invoked from TJSEExecSimpleScriptSTDC()(6)[(top level script) global]

つまり、コールバックインスタンスとして機能させるわけです。違う実装を食わせてやれば、違う出力が得られる、と。いい作りしてますね。素晴らしい。これならエラー処理しなくていいじゃないか、なんていう錯覚に陥りそうになりました。いや、実際にはやることはいろいろありますよ。

4月 21日 (木)

1. TJS

例外処理とかメッセージ周りを実装しました。あと、無意味にMD5あたりを追加してみたり。

大枠が整ってきたら、ネイティブクラスをガシガシ追加していきたいと思います。プラグイン機構も搭載したいですね。

4月 23日 (土)

1. TJS

Windows 2000/NT/XP系で動作すると思います。Windows 98/Me系は不明。とりあえず動くだけで、実用にはほど遠い状態です。

4月 25日 (月)

1. IE の中止ボタンがしいたけに見えて困る

firefoxにもこの脆弱性があります。ブラウザにセキュリティホールはつきものですね(ぉ

2. TJS

メモ。TJS2/2.4.13は、Boost.Regex 1.32.0(Regex++としてはv4)でもコンパイル&リンクできますね。以前、吉里吉里をビルドしたときは、Boost1.31.0でリンクできなかったような気がします。

Boost.Regexはversion 1.31において大幅な変更が行われたそうですが、どれくらい変わったのか不明です。 TJS 正規表現メモを参考に、TJSにどの程度影響が出るか、見てみたいと思います。…そのうち。

追記。bcc32のオプションで、-RT- (Disnable runtime type information)にしたらコンパイルできませんでした。

4月 28日 (木)

1. BCB6でLuna

メモ。

必要なもの;

  • DirectX…Extrasがないとdshow.hをインクルードできない。
  • d3dx9math.inl に#define sqrtf(f) (float)sqrt(f)を追加。
  • コンパイル時には -tWM をつけること。(付けないと Error: 外部シンボル '__endthreadex' が未解決)

参考資料:

4月 29日 (金)

1. 十連休

さあ、ゴールデン堕落週間の始まりです。博麗神社例大祭くらいしか行く予定がありません。いや、行かないかも。弾奏結界だけが目当てだしなー。

4月 30日 (土)

1. THE 地球防衛軍2

キターーーーーー!!!

女性隊員実戦配備完了!

もうさびしくない!

(笑)

2. THE お姉チャンプルゥ

キターーーーーー!!!

前作のアレだった点がいろいろと改善されるといいですね。

3. Emma

ゲームしたり、TJSの拡張機構を作ったりしていて、エマ録画し忘れたよ。なんてこった。ありえない。