雑記

よく考えてみれば日記らしい日記を書いた覚えが無い。
ブログって一応日記だよね?
というわけで適当に色々書き連ねてみる。


VC++でC言語標準ライブラリ関数であるfopenの第二引数を間違えて呼ぶと例外を吐いて落ちる。
例:FILE *fp = fopen(“test.txt”,”bw”);
仕様的には”wb”が正しい、が、BCCでは別に何の問題もなく動く。
動かないならまだしも例外とか、一体何がどうなったらここで例外を吐けるんだろうか
もしかしてあれか、CライブラリなのにまさかのC++例外で引数エラーでもスローしているというのか!


久しぶりにネット上では一番親しい(かった?)人から連絡があった。
唯一リアルでも会った事ある人というか、いつの間にか特定されていて押しかけられて心臓止まりかけた相手というか……
なにやら受験で当分死ぬ予定らしいが、こちらからアドバイスするどころか逆に心配されてしまった。
彼が無事受験成功しますように……


連休というのもあって、昔ここにも書いた夢物語的なアレを実装しようと試みていたりいなかったり。
実装すると明言しちゃうと出来なかった時の事が怖いので発現を濁しておきますが、もし実装できたらアレのアレが大分便利になる予定。
まぁ、せっかくGUI書ける様になったので何かしら目に見える形にしておきたいってだけなんですがね。
(本当ならframeなんちゃらがその役だったんだけど、予想以上に難航してるのでこっちに矛先が向いた感じ)


実はデスマで帰って寝るだけの生活をしていたために郵便物が溜まってしまい
その後も量に負けて目を逸らし続ける生活をしていたわけですが、今さっきようやく開いて見ました。
広告だけでゴミ箱が埋まる量なのはいいんですが、請求書の数が凄まじい量で財布がピンチ。
しかも電気をそろそろ止めるぞゴルァてな手紙も着ていたので観念してコンビニ行って払ってくる事にします。
……さすがに無電気生活とか二度目は経験したくないしね、うん。


某スレにて間接的とはいえ知り合いと言える人のサークルが猛烈な批判を浴びていた件。
心情的には擁護に走りたくなり、客観的には言われても当然だと感じ、経験的に何しても悪化するから傍観すべきだと考え
結果として見て見ぬ振りしか出来ませんでした。
いっそ自分が言われる側になれれば完成に向けて尽力することで報いる事が出来るんだろうけど、参加はお断りされたので結局傍観しか出来ない。
願わくば、あんな批判に負けず無事完成することを……


AIスレの賑わい方が嬉しいような、長々放置していた事が申し訳ないような。
まぁそんな自分の気持ちなぞ関係なく世は回る。 よきかなよきかな。
AIの更新自体はローコストで収まるよう可能な限り互換性を残したつもりですが、未だに新AIの一つも出ていないことに驚き。
皆完璧主義者なのかなぁ、霊撃のカードID直しただけ程度でいいからもっとバンバン出しちゃっていいのに。
あと諏訪子AI期待、むっちゃ期待(なぜ諏訪子って突っ込みは禁止!
自分で作れ? 自分は創り手じゃなくて作り手なんで! AIとかむり無理絶対無理。


自分の嗜好(?)の酷さに微妙に落ち込む事約一週間。
いや、真正面から受けずにちまちまと横槍入れ続けたり、適当な発言を真正面から受けて真面目すぎる返しをしたり
そういう言葉遊びな会話が好き、というよりもはやそういう会話が素で、他は理性で取り繕っているだけだったりする。
で、気を抜きすぎていたのか酷く素が出てしまうことがあり、荒らし呼ばわりされて追い出され、ついでに知人からも痛烈に批判されたのが約一週間前。
よく皆から言われるので抑えていたつもりだけど、余りにも居心地よかったのでつい地が出てしまっただけ、っていうのは言い訳だよねぇやっぱり。
正直に言えばこの件で自分のダメさ加減に死にたくなり、その裏返しで他人に褒めてもらいたくなってth123_aiの開発を始めました。
褒めてもらいたくてやる事が改造スレスレのグレーゾーンをぶっちぎってるアプリ開発って言うんだから我ながら救えない。


twitterを割と常用しているけど未だに書き捨て場にするだけで機能のほとんどを把握していなかったりする。
URL公開しておらず、誰もフォローしていないのに時折スパムフォロー飛んでくるということはきっとどこかからたどり着けるはずなんだけど
一体何がどうなって補足されているのやら。


>アリスすれに転載されるとかお前はなにをしてるんだw
上記文章書いてる最中にいきなり飛んできたチャット、なにやら霊力に関する記事がどこかのアリス使いに捕捉されていたようです。
転載されることは構わない、むしろ飛び上がって喜ぶぐらいですが
グリモワMAXが通常回復の2/3程度である事と、グリモワ1~4枚目は効果量は同じ事、通常1Fあたり霊力球1/33程度回復している事は非想天則wikiにも乗ってるから今更な気がしなくもない。
というか今更だよね? 解析情報ってあまり表に出すと怒られるから出さないようにしていたんだけど
もしかしてやっちゃったのかなぁ……


東方星蓮船やりてぇ……
明日! 明日くるはずだから!
耐えろ自分。

th123_ai(仮)の進捗報告その7

既に正式リリース済みなのに進捗報告も何もあるの?って話ですが、中の人が飽きるまで当分書く予定。

th123_ai.zip@ver0.86
・attack_power環境変数を追加
・defense_power環境変数を追加
・speed_power環境変数を追加
・get_special_dataの国士無双使用個数取得が使用可能に
・get_special_dataにおいて制御棒・身代わり人形・天狗団扇・グリモワールの使用個数が取得できるように

微妙にドキュメント類も更新かかってます、といってもアリスだけだけど。

最初はドキュメントの整備をしようとしていたはずなんだが、シスカ調べていたらいつの間にか解析を始め
そのまま攻撃力倍率やらを実装していた、何を言っているのか(ry

地味に国士の仕様が変わっていて悩んだけれど、実装してみればなんて事は無かった。
そして霊力回復量のアルゴリズムがむちゃくちゃずさんなので、次Verぐらいでグリモワが国士と同じ運命を辿りそうで怖い。
いやまぁ、単純にアドレス変更だけでは対応できないってだけの話なんですけどね。

非想天則の霊力に関して

非想天則の霊力球一つを200とした場合、1Fごとに
6回復する。
さらにグリモワールを使った個数×1だけ回復する。
さらに天候雹なら6回復する。

霊力回復開始タイミングは霊力消費からきっかり60F後である。
だが、霊力消費タイミングが異なるために行動ごとに回復速度差が存在する。
(と思っているけど、全て調べたわけでは無いので一部例外があるかも)
※2010/01/14追記:普通に違った、詳細は霊力回復開始フレームについてを参照

これらの情報から霊力回収期待値のような物を算出できる。
例えばアリスのCの場合
・霊力消費タイミングは8F
・全体Fは40F
なので、通常時はモーション終了後28F後に回復を始め、その34F後には霊力が射撃前に戻る。
つまり、40+28+34で102Fの猶予があればCを撃っても霊力の採算は付く計算になる。

コレだけでは面白くもなんとも無いので、ためしにグリモワールを4つ使用した場合と比較しどの程度変わるのか計算してみる事にする。
グリモワ4積みで回復に必要な時間が20Fに減るので、40+28+20で88Fで採算が付く。
なので14F得した事になり、1射撃ごとに回復を待つ立ち回りでも1.16倍の量の射撃を撒ける計算になる。

仮に霊力尽きるまで撃ち続けてから回復したと仮定すると
・通常時40*5+28+167=395F
・グリモワ4積み40*5+28+100=328F
となり、1.2倍撒ける計算。

結論として、グリモワ4積み自体は回復速度1.67倍であるが、実際に撒ける射撃の量になおせばアリスC射では1.16~1.2倍程度であり、回復速度に騙されて1.67倍も撒くと息切れてしまうことがわかった。

ちなみに、こんな事がわかっても何も得しない。
根拠は、今これを書いている自分が1年やっていて未だにレート1200台のプレイヤーだということ。
頭でっかちってやーね。

th123_ai(仮)の進捗報告その6

寝て起きたら16時でした、休日万歳!

th123_ai.zip@ver0.85a
・緋想天もしくは非想天則を自動で最前面にする機能が動作していなかった不具合の修正
・ver0.85でデバッグ出力を消し忘れていた不具合の修正
・is_th105環境変数を追加
・is_th123環境変数を追加

is_th105とis_th123は天候やカードIDなど一部互換性がなくなっている部分について分岐を組むためのフラグ。
それなら互換性があるようにコード組めよって話なんですが、うまい方法思いつけない自分が無能なわけです、はい。

一応これが正式初リリース版になります。
それにしてはVerがあれ過ぎるって話ですが気にしない。

th123_ai(仮)の進捗報告その5

完成は明日か明後日といいつつ、まだ今日とよんでもいい時間(厳密には既に明日に入ってるけど)のうちに完成しました。
開発途中AIの”まるで痴呆症かのように目の前でうろうろするだけだったでくのぼう”の面影など欠片も残っておらず
どのAIもものすごい勢いで人のことボッコにしてくれます、マジキチ。

th123_ai.zip@Ver0.85
今回の更新で正式対応された部分:
・get_special_data,get_deck_list以外の今まで正式でなかった機能すべて

デッキは以前と仕様が違うので1から書き直す必要がある。
キャラ固有技は効果がまるで違う物が多く、解析が難航する事が予想された。
これらの理由により上記二つの機能はしばらくオミットされる事になりました。
一応呼べるけど動作は未定義ということで。

このまま投下してもいいけど何か見落としありそうなので、一度寝て起きてから改めて全機能なめてみて
それで問題なければツールスレにでも投下してくるつもり。
あーでもそのまえにドキュメント類全部書き直さないといけないのか、めんどす。

th123_ai(仮)の進捗報告その4

ご飯食べてからはじめようと思いつつご飯食べずに日記を書く段階までいってる自分が憎い!
俺、この日記投稿したらご飯食べるんだ……

th123_ai.zip@Ver0.84
今回の更新で正式対応された部分:
・front
・back
・u_front
・d_front
・u_back
・d_back
・dis
・dis_x
・dis_y
・dis2
・my_char
・enemy_char
・obj_dis
・obj_dis2
・my_obj_n
・enemy_obj_n
・my_frame
・enemy_frame
・key_delay
・data_delay
・battle_time
・weather_delay
・my_hitarea_n
・enemy_hitarea_n
・my_attackarea_n
・enemy_attackarea_n

別に修正は一個も入ってません。
0.80~0.83aまでで動くようになったはずだが未検証だった項目洗ってみたら全部問題なかっただけです。
APIも上記内容から推測できるだろう範囲は動いてるはずですが、流石にそちらまで調べていると開発進まないので後回し。
どうせ最後に全部一通り再チェックしないといけないしね

あとは霊力とゲージとカードIDさえ取れればひと段落つけそうかな?
やはり進捗報告その2の時点で睡眠時間削ってまでオブジェクト関連サーチし終えたのが大きい。
リアルが軽く犠牲になったけど無駄ではなかったんだね!

この勢いなら明日、遅くても明後日にはリリース出来そうだけど、どうなる事やら。

言語デザイナーって職業あるの?

th105_aiを触った事ある人なら判ると思いますが、言語設計には何の思想もなくただ場当たり的に機能増やし、どんどんどつぼに入っていくようなスクリプト言語になっております。

そもそもオブジェクト指向すら趣味では書かない自家用コード量産機な自分が
他人様に書かせるスクリプト言語をデザインしようとした事自体が間違っている感がヒシヒシと……
そもそも自分で使っているときでさえ軽くイラッっとくるしね、これ。

だれか、その辺痛烈に批判してくれて
痛みを持って己が進むべき道を示してくれる
そんなカリスマ言語デザイナーさんとかいないかしら

th123_ai(仮)の進捗報告その3

1日でも更新怠ったら開発やめてしまいそうな気がして必死に毎日更新を維持してる中の人です、こんばんは。

今回はattackarea関連全般とhitarea_nのアドレスサーチしただけです。
そして前回に引き続き検証していないので扱い的には未実装、要するに公式には一歩も開発進んでいない事になるわけで(ゴニョゴニョ
まぁそれでも上手くいっていればobj_disが動くので、公開済みAIの大部分がはれて動作するように!
そんな事やってる暇あったら前回更新分ぐらい動作チェックして正式対応扱いにしろって話ですよね、すいません。

th123_ai.zip@Ver0.83a
今回の更新で正式対応された部分:
・なし

今回はバグ修正すら入ってません。
なのでVerは0.01すら進まずHistory.txtには日時だけ増えているという意味不明具合。
昨日あんな時間に作業していたせいで仕事長引いたのがすべてにおいて悪い! つまり自業自得!
……明日から本気出す、たぶん。

th123_ai(仮)の進捗報告その2

地味ですが一番の難物だったオブジェクト(射撃とか)の情報取得周りを実装しました。
ついでにini周りも以前書いたとおり色々弄ったり。
それ以外はほとんど弄っていないためAIの動作性は前回から変わってません。
一応my_obj_nやら色々動くようになっているはずですが、検証までいってないので今はまだ未実装扱い。

今回の更新で正式対応された部分:
・なし

関係ないけど、名前も違うし関係もない変数二つが同じアドレスにマッピングされる事件がおきて丸1時間潰したり……
objファイル全消しして再コンパイルしたら直ったけどああいうのやめて欲しい、いや本当に。

解析技術遍歴とか

>解析等を学習されていった道筋的な物を教えてはいただけないでしょうか?
とコメントをもらったので試しに書いてみる

・起
今から4年ちょっと前、PCを手に入れてから1年ちょっと、C言語は日常的に書くがまともに完成させたことがない程度の頃。
某MMORPGのサーバプログラムがCコードの形で広まり、クライアント側の解析も進んで誰でも好き放題弄れる物があり
好奇心からそれに手を出したのが始まり。
クライアント側を弄るのに様々なツールが出回っていたものの、初心者向けなわけがなく
解説サイトやらを見て回って手探りで使っていた状態。
この頃にバイナリエディタの基礎やら解析に対する考え方を覚えたと思う。
といっても、この時点では精々xmlファイルを好き勝手書き換えるぐらいで、まっとうな解析は一切やっていないし出来なかった。

・承
今から3~4年前、Cで人に見せられるコードがようやく一つって程度で
起で知り合った人から誘われ、オリジナルのMMORPG作ろうぜ!という企画に参加した頃。
サーバは他所で公開されていたMMORPG用エンジンで、クライアントも同様の物を使っていたのだけど
開発途中のものであったために基本を除いて一切説明がなく行き詰まり、手探りに開発を続けざるを得ない状態。
バイナリエディタでexeを開いてスクリプト中で使用できる関数名一覧を持ってきたり
名前しかわからぬ関数に適当に引数投げて動作を調べたり
こういったことばかり1年近く続けていたので、解析技術の基礎がついたのはこの頃?
ちなみに、最終的には頓挫しました。 俗に言う黒歴史、もしくは若気の至り。

・転
今から2~3年前、Perlを本格的に使い出し、Cではドマイナーなプログラムコンテストなら本戦にいけることもあった程度で
RagnarokOnline(以降RO)にはまっていたら不正対策と称してnProtectが実装され、RO起動中はPerlや一部プログラムが動作しなくなり憤慨していた頃。
起承の間に偶然検索に引っかかったなどで、一通りハックや改造といった情報を読んでいて愚かにも判った気になっていたので
Perl禁止とか自力で解除してやると息巻いていた頃。
今まで知識の上だけであった逆アセンブラ、DLLインジェクション、Win32API、メモリーエディターなどを実際に使うようになったのはコレが原因。
RoAddr.dllに多少とはいえ関わったのもこの頃。
解析手法やら改造手法はほぼ独学で、方法を思いついてはnProtectに撃退され「くそ、その手があったか」という風にいろいろ学び取っていたと思う。
たぶん自分の改造関連技術はこの時点から変わってないと思う。
一応能力は上がっているけど、それはただ経験を積んで諸々最適化されただけ。

・結
今から0.5~2年前、ただひたすらにコード書いていた日々。
ファイルフォーマットに興味を持ち車輪の再発明しまくったり
東方という自分の嗜好にドストライクなゲームに出会い、ついでにツール作成の場が用意されていたので
そちらの開発にも手を出してなおさらプログラム漬けになっていた頃。
バイナリエディタの使い方に習熟したのはこの頃だし
ファイルフォーマットについて知識が付き、バイナリ列を見るだけでなんとなく意味を読み取れるようになったのもこの頃。
一言で言えば起承転で得た知識を経験に昇華した時代。

こんなので参考になるかどうかは判らないけど自分はこうやって技術身につけました。

ちなみに、もし人に「解析技術身につけたいんだけど、どうしたらいい?」と聞かれたなら
「何してもいいからその辺のゲームのデータファイルを展開するアプリを自作しろ、話はそれからだ」と返します。
なぜって自分がそんなでしたからね。
「解析してみたい!」と考える程度に知識あるなら、後は時間さえかければ応用だけで何とかなるはずっていうのが自論です。