th075Caster@wiki

Advent

最終更新:

th075c

- view
管理者のみ編集可
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

東方萃夢想 Advent Calendar 2014 の為に書いたページです。いきなりこのページに来た方は、以下のURLもどうぞ。
http://www.adventar.org/calendars/653




私のことを知らない人も多いと思いますが、th075Casterの作者です。
プレイヤーとしてはBoosterにも負けてしまうくらいの腕なので、オンラインではあまり遊んでいません。
原因は下の通りです。
  • Casterで遊ぶ→挙動が気になって改造を始めてしまう。
  • Boosterと対戦→挙動が気になって新しい実装を考え始めてしまう。

萃夢想関連をウォッチしている期間は長いのですが、初心者レベルの腕前です。
あんまり(殆ど)名前を表に出していないのは、そういった初心者が大きな顔をしたくないというのと、
ツールの作者なら、言いたいことはツールを通して分かってもらうのがいいだろうなという考えによるものです。



th075Boosterとth075Casterについて書いていきたいと思います。
萃夢想をはじめにプレイしたのはいつだったか、どんな状況だったかは覚えていませんが、
Boosterを作ろうと思うようになったきっかけはよく覚えています。

たぶん2005年の夏前あたり、咲夜とレミリアの対戦リプレイを見ていたら、
空中に咲夜がいる状況で、グングニルの暗転を見てから空中クロースで槍を躱してました。
知っていればどうということはない行動だと思います。
もしかしたら咄嗟に取った行動なのかもしれません。


この行動はどういった仕組みで出てきたんだろうと長い時間をかけて考えて、
知るということは連想することと切り離せない密接な関係があり、
格闘ゲームの場合は特に指の操作感覚のパターンと状況が連想により強く結びついているんだろうといったん結論付けました。

そこまで考えたら、AIも作れるんじゃないだろうかと思ったのがきっかけです。
本物のAIは敷居が高いので、まずは状況と入力を結び付けた仕組みだけを持つ、疑似AIを作ってみようと。軽い感じで。

そのときは大学に在籍していて、情報系の学科ではありませんでしたが、
サークルの色々でマイコン上でのアセンブラを書いていた上に、基本的なC言語/C++の講義を取っていたので、
そのままよく考えずにフリーのコンパイラで使えるbcc32をダウンロードをしてきて、Boosterを作り始めました。
萃夢想のメモリから値を取得する方法などの知識もなく、そこから勉強しています。
データベース周りの知識も当然無いので、物理で言うところの位相空間の考え方を持ってきて、
メモリ上のアドレスがゲーム内の状況により一意に定まるようにして、データベースらしきものを実装して、
攻撃と防御とスペルカードと他もろもろで観点を分けて、それをファイルに圧縮して書き出して・・・

個人的には、自分がアマチュアなのは自覚していたので、
AIに詳しい人がダメ出しして作り直してくれたらいいなとか考えていました。
当時は掲示板で多くの人の協力を頂いて嬉しかったですが、そっち方面で直してくれる人がいなかったことについて、
あてがはずれたなぁと感じていました。



Casterについて。
Boosterを公開したのと同じ時期くらいに、EFZのネット対戦ツールが出ました。
作ったのは中国のAVCさんという方だったと思います。
黒いコマンドプロンプト窓で、Windowsのデバッグ機能を使ってプログラムを制御して、UDPでパッドの入力データをやり取りするツールです。
このツールは間違いなく萃夢想バージョンも出ると思いました。

私は、東方のネット対戦ならば、観戦機能が無いと!と思いました。
当時、下の記事を読んで共感していたからです。
http://www.4gamer.net/specials/shanghai_alice/zone_f.shtml

Boosterを作る際にいろいろ調査して、ゲーム内の情報はそれなりに把握していたのですが、
ゲームのコードを変更して動作を変える方法は知らなかったので、また勉強です。
マイコンでアセンブラを扱っていたので、そこに関するハードルが低かったのが幸いでした。

そうしてCasterが出来ました。

その時は既にAVCさんの萃夢想用のネット対戦ツールが出ていて、拳闘チャットなどで対戦が行われていたと思います。
そのネット対戦ツールとCasterの違いは殆ど無く、Casterがディレイ方式を使っていて、観戦ができる程度の違いでした。
初リリース(060226)は乱数の同期機能も入っていなく、対戦の使い物にならないようなもので、
実際に安定したリリースは060515(だったかな?)あたりだったと思います。
(プログラムと全く関わりのない業界に)就職して研修を受けながら、帰ってエディタを叩いていました。


ディレイ方式について、自分としては特に変わった手法を取ったつもりはなく、
人間が自然に行っていることをプログラムに延長しただけのつもりです。

人間の意識がボタンを押そうとしてから、実際に指がボタンを押すまで、遅延があります。
私たちはそれを当たり前に受け止めて、当然のものとして認識しています。
遠く離れた人との電話は、遅延がある筈ですが、違和感なくリアルタイムで会話できます。
それをネットワークにも拡張してあげる仕組みが、ディレイ方式です。

ただ、入力をどれだけ遅延させるかは判断基準が全く無かったので、
信号が行ってから帰ってくるまでの時間を参考の為に表示したのち、自分で入力遅延値を入れてもらうことにしました。
私の想定では200msくらい(ディレイ6あたり)なんじゃないのかなと思っていたので、
速くて驚きました。

Casterの内部構造はスレッドが多用されてはいますが、シンプルです。
これは私がプログラム初心者だったので、複雑なものが作れなかったからです。
Windowsの提供する機能がどれだけの速さで動くかも分からなかったので、基本的には信用せず、
速度に影響する部分は専用のスレッドに任せています。
海外の掲示板でコードの酷さを揶揄しているのを見かけたこともありますが、まぁ当然だよなあ・・と思ったのを覚えています。



だいぶ長くなってしまいました。
萃夢想が頒布されてから10年になること、今もプレイされていることには、思うことがありすぎて言葉にはできません。
今では情報系の業界で働いていますが、Casterを作っていなかったら、今頃自分はどうしていたことか・・・
思えば遠くに来たものです。

記念に「Casterの技術」みたいなオフセット本を作ってみるのも面白そうだなと考えたこともありましたが、
まぁ時間も無いし、完璧に賞味期限の切れた技術になってしまっているだろうなぁと、
今回の企画は、そういった気持ちを持て余していたところにちょうど良いタイミングでした。
ありがとうございます。

それでは、ここまでお読み下さいまして、お疲れ様です&ありがとうございました。
以上です。

0
0
0
0
記事メニュー
目安箱バナー