他人の空似自作物置場

th123_ai_test.zip/document.txt

・th123_ai超簡易ドキュメント

・ルール
スクリプトはLua言語です、基本的な仕様は全てLua言語に準拠します。
緋想天もしくは非想天則を発見した段階でiniで指定された方法でaiを読み込み実行します。
起動後始めて対戦モードになった時、main関数が実行されます。
その後、対戦中ならばyield関数が呼ばれるたびに1フレームだけ待機します。
対戦中で無いならば、対戦中になるまでyieldから制御は返りません。
main関数が終了すると本体プログラムも終了します。

・大まかな流れ
初期化処理を一番外側に書く
メインルーチンをmain関数として定義する。
1ループごとにyield関数を呼んでやる。

・文法
こちらをお読みください。
http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html

・設定ファイル
アプリケーションと同じディレクトリに存在するSWRSAddr.ini、SwrAddr.ini、th105_ai.ini、th123_ai.ini、dev.iniを起動時に自動で読み込みます。
iniファイルが存在しなかった場合は内部的に保持しているデフォルト値が使われます。
また全てのiniは読み込む順番以外は等価であり、SwrAddr.ini→SWRSAddr.ini→th105_ai.ini→th123_ai.ini→dev.iniの順で読み込まれます。
同じ設定項目が複数回指定された場合は最後に指定したもののみが有効になります。
書き換えられて困る設定はdev.iniに記載することで全て上書きでも設定が消えずにすむようになります。
ちなみに一般的なiniとは違うエセiniです、なのでコメントアウトには:と//と#が使え複数行コメントアウトはありません。

詳しい設定内容についてはth123_ai.iniを参照してください。

・Luaライブラリ
標準ライブラリのうちbase、string、table、math、debug、io、osが使用可能です。
以下、本家と仕様が違う関数とその詳細
	os.execute:
	os.exit:
	os.getenv:
	os.remove:
	os.rename:
	os.setlocale:
	os.tmpname:
	io.popen:
		使用できません
	io.open:
		ファイル名の指定に文字列が使えず、代わりに数値指定が出来ます。
		その場合に開かれるファイル名は「script_data/数字.dat」となります
		fp = io.open(12345);--script_data/12345.datを開く
	io.input:
	io.output:
	io.lines
		io.openと同じく文字列指定が出来ず、代わりに数値指定が行えるようになっています。
		それ以外の機能に関しては変わりありません。
	require:
	module:
		package.requireとpackage.moduleにリネームされています。
		それとは別にrequire関数が存在しますが、一切関係はありません。

・キー指定子
本アプリケーションにおいて、「キー」と行ったらこれをさします。以下一覧表
キー		数値	定数
UP		0	ACT_UP
DOWN		1	ACT_DOWN
LEFT		2	ACT_LEFT
RIGHT		3	ACT_RIGHT
A(格闘)		4	ACT_A
B(弱射撃)	5	ACT_B
C(強射撃)	6	ACT_C
D(飛翔)		7	ACT_D
AB(カード送り)	8	ACT_AB
BC(カード使用)	9	ACT_BC
DOWN+LEFT	10	ACT_DLEFT
DOWN+RIGHT	11	ACT_DRIGHT
UP+LEFT		12	ACT_ULEFT
UP+RIGHT	13	ACT_URIGHT

・対象指定子
本アプリケーションにおいて、プレイヤーを指定する際に使う値です。以下一覧表
0	自分	TAG_MY
1	相手	TAG_ENEMY

・フレーム
本アプリケーションにおける最小単位時間、16ms(約1/60秒)です。
緋想天における最小単位時間が同じ16msであるための仕様です。

・API
yield()
	処理を本体プログラム側に返し、前回のyield実行から数えて1フレーム経つまで待機します。
	環境変数群の更新もここで行われます。
	create_thread関数により作成されたスレッドが存在する場合のみ、そちらへ処理が移行します。
	その場合、プログラムの待機と次変数の更新は全てのスレッドからyieldが呼ばれた後になります
dash()
	front方向へダッシュします、frontのキーがONのまま制御が返ります。
	既にダッシュ中の場合は何もしません。
	ダッシュ状態になるか、120フレーム経過した場合に処理が戻ります。
key_reset()
	全てのキーをOFF(離す)にします。
key_off(key)
	指定したキーをOFFにします。
	方向キーを指定した場合、逆側の方向キーもOFFになります。
key_on(key)
	指定したキーをONにします、既にONの場合は何もしません。
	方向キーを指定した場合、逆側の方向キーはOFFになります。
key_event2(key1,key2)
	二つのキーを同時に押してから離します。
	6A等といったコマンド用です。
	入力が反映されたかのチェックは行わず、必ず4フレーム後に制御が返ります。
key_event(key)
	一つのキーを押してから離します。
	入力が反映されたかのチェックは行わず、必ず4フレーム後に制御が返ります。
dattack()
	dash,key_event,key_resetを一括して行います。
wait(time)
	指定回数だけyieldを実行します。
require(filename)
	指定ファイルをaiスクリプトと認識し実行します。
	相対パスを指定した場合、関数外に記述した場合はファイル位置から
	関数内に記述した場合は定義ファイルを特定できないためexeファイルからの相対になります。
	そのため、関数内での使用は非推奨です。
	ver0.72より、iniのStartupAIの機能がdaialog以外使用可能になりました。
	これにより
	require("対%c2ガード.ai")--相手がアリスなら対aliceガード.aiを読み込む
	といったコードが使用可能です
	置き換え文字一覧表:
	id	%C		%c
	0	霊夢		reimu
	1	魔理沙		marisa
	2	咲夜		sakuya
	3	アリス		alice
	4	パチュリー	patchouli
	5	妖夢		youmu
	6	レミリア	remilia
	7	幽々子		yuyuko
	8	紫		yukari
	9	萃香		suika
	10	優曇華		udonge
	11	文		aya
	12	小町		komachi
	13	衣玖		iku
	14	天子		tenshi
get_skill_lv(player,skill_id)
	player(0で自分、1で相手)の指定ID(0〜14、skill.txtのカードID下二桁と同じ)のスキルのLvを取得します。
	指定IDのスキルが存在しないもしくは使用不能時は-1、デフォルト技は0
	スキルカードによりLvが上がっている場合は1〜4が返ります。
	疎雨時でも習得Lvが返る為、Lv判断に使う場合は天候判断と併用してください。
get_card_id(player,num)
	player(0で自分、1で相手)の指定枚数目のスペルのIDを取得します。
	numには1枚目を0として0〜4を指定できます。
	カードゲージが溜まっていない、もしくは0〜4以外を指定した場合には-1が返ります。
set_key_delay(delay)
	delayで指定されたフレームだけキー入力が遅れて送られるようになります(1フレーム=1/60秒)
	この命令により設定されているdelayは環境変数key_delayから知ることができます、初期値は0です。
	この命令によりdelayが以前より多くなった場合、その差の間は何の入力も送られません。
	例:
		set_key_delay(0);
		key_on(front);
		set_key_delay(20);
		key_off(front);
		このコードを実行した場合、1/3秒間相手に向かって歩き続けます。
	逆に以前よりも短くなった場合、すでに送られた入力は入力時のdelayにあわせて実行されます。
	例:
		set_key_delay(0);
		key_on(front);
		set_key_delay(20);
		key_off(front);
		set_key_delay(10);
		key_event(ACT_A);
		このコードを実行した場合、1/6秒間歩いてから6Aになります。
set_data_delay(delay)
	delayで指定されたフレームだけ環境変数enemy_actとenemy_frame遅れて送られるようになります(1フレーム=1/60秒)
	この命令により設定されているdelayは環境変数data_delayから知ることができます、初期値は0です。
	この命令を実行した場合、以前指定されていたdelayに関わらずdelayフレームの間はenemy_actとenemy_frameを読んでも0が返ります。
get_obj_data(player,num)
	指定プレイヤーのnum個目のオブジェクト(射撃の弾や人形など)の情報を取得します。
	帰ってくる情報はid、x座標、y座標、HP、画像ID、フレーム数、x速度、y速度、固有識別子、攻撃範囲数、食らい範囲数です。
	固有識別子はオブジェクトごとの固有の数値であり、オブジェクトを一意に特定するために使用します。
	別のオブジェクトが同じ識別子を持つことはありません。
	使用例:
	id,ox,oy,hp,img,frame,oxs,oys,oid,attack_n,hit_n = get_obj_data(TAG_MY,0);
set_weather_delay(delay)
	極光時に発現する天候効果がわかるようになるまでの時間を設定します。
	時間は気質カウンター依存で、
	1000-weather_delay>weather_timeが真のときだけ読めるようになります。
	それ以外のときはweatherにアクセスしても極光を示す値が帰ります。
get_card_cost(player,num)
	指定プレイヤーのnum枚目のカードのコストを返します。
	失敗時や晴嵐時は-1を返します。
	この関数は曇天の影響を受けません、曇天による影響を受けたあとの値が必要である場合はget_card_cost2を使ってください。
get_card_cost2(player,num)
	曇天の影響を受けるget_card_cost。
	その他はget_card_costに準拠します。
	weather_delayの影響も受けるため、AIスクリプト上でweatherを参照して計算した場合と完全に等価に機能する。
get_opt_xy(player,num)
	指定プレイヤーのnum+1個目の付属物の座標を返します
	妖夢の半霊、アリスのC射人形、小町の爆破可能霊魂が取得できます。
	使用例:
		--付属物の全座標を出力する
		local i = 0;
		while(true)do
			ox,oy = get_opt_xy(TAG_MY,i);
			if(ox==nil)then break; end
			print(i,ox,oy);
			i = i+1;
		end
command(string)
	コマンド入力記法に似た簡易言語によるキー入力を行います。
	22Bや236Cなどといった文字列を与えることで簡単にコマンド技の実行が可能です。
	また(30)などと書くことで指定フレームだけ待つ作業をはさむことが出来ます。
	例:
	command("AA(10)A(5)236B(50)236B");
	これでAAA>236B>236Bという行動を行いします(カッコ内の数字はコマンド技ごとに調整する必要があります)
	※この命令はツールスレ内の有志によって開発されていたSetInput関数を基に試験的に実装されたものです。
	そのため仕様が大きく変更される恐れがあり、使用は推奨されません。
	安定使用が目的の方はSetInput関数を別途入手してお使いください。
get_deck_list()
	自分のデッキリストを取得します。
	20枚全て順不同で渡されます、テーブルの形ではありません。
	deck = {get_deck_list(0)};
	という形で使えばdeck[1〜20]に格納できます。
	また、あくまでデッキリストであり、まだ引いていないカードではありません。
	プラクティスで2P側に設定した場合読むことは出来ません。
	非想天則では未対応です。
get_key_stat(n)
	キー指定子nがONならば1、OFFならば0が返ります。
	斜めキー(n>=10)の指定は出来ません。
get_key_map()
	キー指定子0〜9のON/OFFをまとめて取得します。
	テーブルではなく10個の返り値として戻ります。
get_real_key_stat(n)
	緋想天のキーコンフィグに関係なく、指定キーのON/OFFを取得します。
	Win32APIのGetKeyStateをluaから呼べる機能です、なので入出力の仕様は http://msdn.microsoft.com/ja-jp/library/cc364676.aspx に準拠します。
	VK_F10 = 121;
	if(get_real_key_stat(VK_F10)<0)then
		--F10が押されていたときの処理
	end
	このように使います。
	純粋なAIとしてではなく、プラクティス用やデバッグ用に使うことが出来ます。
create_thread(name[, param1, param2...])
	nameという名称の関数に0個以上の引数を与えてマイクロスレッドとして実行します。
	関数を直に渡しても、関数名を渡しても動作します。
	引数が対象の関数より多かった場合は読み捨てられ、少なかった場合は足りない部分にnilが渡された物として動作します(Lua言語自体の仕様)
	実行順は登録された順です、順序の変更手段はありません。
	使用例:
	function a()
		while true do
			key_event(ACT_A);
			yield();
		end
	end
	function ab()
		while true do
			key_event(ACT_AB);
			yield();
		end
	end
	function main()
		create_thread("a");
		create_thread("ab");
		while true do
			yield();
		end
	end
	0.71bの修正により、create_threadした時点で指定関数を退避するようになりました。
	そのため、create_thread時点で関数が定義されていない場合はエラーします。
get_special_data(player,n)
	指定プレイヤーの固有な設定値を取得します。
	指定プレイヤーが該当しないキャラクターの場合は-1が返ります。
	以下一覧表
	n	取得できる値
	0	咲夜の世界の残りフレーム数
	1	時符「プライベートスクウェア」の残りフレーム数
	2	「夢想天生」の残りフレーム数
	3	魂符「幽明の苦輪」および魂魄「幽明求聞持聡明の法」の残りフレーム数
	4	体力回復の残りフレーム数
	5	儀符「オーレリーズサン」の残りフレーム数
	6	火水木金土符「賢者の石」の残りフレーム数
	7	生薬「国士無双の薬」の適用数
	8	「夢想天生」の点灯数(7以上にも増えます)
	9	非想「非想非非想の剣」の残りフレーム数(スペルを被弾した側に設定されます)
	10	気符「無念無想の境地」の残りフレーム数
	11	フィールドウルトラレッドの残りフレーム数(相手がフィールド内にいる限り、残りフレーム3で固定)
	12	フィールドウルトラバイオレット(相手がフィールド内にいる限り、残りフレーム3で固定)
	13	水符「ジェリーフィッシュプリンセス」の残りフレーム数
	14	水符「ジェリーフィッシュプリンセス」の残りHP
	15	鬼神「ミッシングパープルパワー」の残りフレーム数
	16	毒煙幕「瓦斯織物の玉」の残りフレーム数
	17	制御棒の使用個数
	18	身代わり人形の使用個数
	19	天狗団扇の使用個数
	20	グリモワールの使用個数
	21	三粒の水滴使用個数(無敵中は3、無敵中再使用でも3のまま、効果終了後は0)
	22	三粒の水滴による無敵時間残りフレーム数
	23	竜星による無敵時間残りフレーム数
	24	神奈子ゲージ使用可能までの残フレーム数
	25	諏訪子ゲージ使用可能までの残フレーム数
	26	長視「赤月下(インフレアドムーン)」の残フレーム数
	27	ダイアモンドハードネスの残フレーム数
	※
	時符「咲夜特性ストップウォッチ」は範囲内キャラのhitstopを1にし続けるスペルカードのため、ここでは識別できません。
get_obj_attackarea(player,num,n)
	指定プレイヤーのnum個目のオブジェクトの攻撃判定を示す四角形のn個目を返します。
	返り値は四角形の頂点をあらわす左、上、右、下の順で四つの値です。
	例:
	left,top,right,bottom = get_obj_attackarea(TAG_MY,0,0);--自分の0個目のオブジェクトの0個目の攻撃判定を取得
get_attackarea(player,n)
	指定プレイヤーの攻撃判定を示す四角形のn個目を返します。
get_obj_hitarea(player,num,n)
	指定プレイヤーのnum個目のオブジェクトの食らい判定を示す四角形のn個目を返します。
get_hitarea(player,n)
	指定プレイヤーの食らい判定を示す四角形のn個目を返します。
get_correction(player,flag)
	指定プレイヤーが相手にflagの特殊補正を与えているか判別します。
	その特殊補正がかかっている場合はtrue、かかっていない場合はfalseが返ります。
	最後に与えた攻撃に関する情報が取得されるので、ヒット確認処理と併用して使用してください。
	flagの詳細は環境変数my_correctionを参照してください。
	例:
	if(get_correction(0,32))then
		--カウンターヒットしたときの処理
	end
get_version()
	AI本体のバージョンを文字列として取得します。
	”ver0.86a”といった形式で返る為、利用には別途処理が必要な場合もあります。
get_fflags(player, flag)
	指定プレイヤーの攻撃に関わらないフラグを取得します。
	指定フラグがたっている場合はtrue、それ以外の場合はfalseが返ります。
	flagの詳細は環境変数my_fflagsを参照してください。
	例:
	if(get_fflags(0,4))then
		--空中にいる時の処理
	end
get_aflags(player, flag)
	指定プレイヤーの攻撃関連フラグを取得します。
	指定フラグがたっている場合はtrue、それ以外の場合はfalseが返ります。
	flagの詳細は環境変数my_aflagsを参照してください。
	例:
	if(get_fflags(1,1))then
		--下段攻撃された時の処理
	end

・環境変数
グローバル変数の扱いでyield関数を呼ぶたびに更新される変数群です。
緋想天から情報を得る主な手段となります。


環境変数一覧:
front:
	相手が居る方向、常に2(ACT_LEFT)か3(ACT_RIGHT)の値をとります。
	相手との位置から判別するため、振り向く前などコマンドが逆になることがあります。
back:
	frontの逆、相手が居ない方向を常に指します。
u_front:
	相手がいる方向+ACT_UPと同義であるキー指定子の値をとります。
d_front:
	相手がいる方向+ACT_DOWNと同義であるキー指定子の値をとります。
u_back:
	u_frontの逆のキー指定子の値をとります。
d_back:
	d_frontと逆のキー指定子の値をとります。
dis:
	相手とのx方向の距離、math.floor(math.abs(x-ex))の返り値と常に同じ数値になります。
dis_x:
	disと同じです。
dis_y:
	相手とのy方向の距離、math.floor(math.abs(y-ey))の返り値と常に同じ数値になります。
dis2:
	相手とのxy含めた距離です。math.floor(math.sqrt(dis_x*dis_x+dis_y*dis_y))の返り値と常に同じ数値になります。
my_act:
	自分の現在モーションです。
	具体的に何のモーションか知りたい場合はmotion.txt&skill.txtをご覧ください
enemy_act:
	相手のモーションです
weather:
	天候です。極光時に限り一定時間すると極光ではなく実際に発動している天候効果の番号が返るようになります。
	set_weather_delayを設定することで効果が判明する時間を設定できます。
	以下対応表
	0:快晴
	1:霧雨
	2:曇天
	3:蒼天
	4:雹
	5:花曇
	6:濃霧
	7:雪
	8:天気雨
	9:疎雨
	10:風雨
	11:晴嵐
	12:川霧
	13:台風
	・緋想天であれば
	14:極光
	16:なし
	・非想天則であれば
	14:凪
	15:ダイヤモンドダスト
	16:黄砂
	17:烈日
	18:梅雨
	19:極光
	21:なし
my_char:
	自分のキャラです、以下対応表
	0:霊夢
	1:魔理沙
	2:咲夜
	3:アリス
	4:パチュリー
	5:妖夢
	6:レミリア
	7:幽々子
	8:紫
	9:萃香
	10:優曇華
	11:文
	12:小町
	13:衣玖
	14:天子
	15:早苗
	16:チルノ
	17:美鈴
	18:空
	19:諏訪子
enemy_char:
	相手のキャラです。
my_hp:
	自分のHPです、最大10000
enemy_hp:
	相手のHPです。
my_rei:
	自分の霊力です、霊力球一個当り200、最大で1000になります。
enemy_rei:
	相手の霊力です。
my_rmax:
	自分の最大霊力値です、最大1000で一つ割れるごとに200減ります。
enemy_rmax:
	相手の最大霊力値です。
my_rei_stop:
	自分の霊力回復停止時間です、ここが0になるまで霊力は回復しません、各種霊力消費行動を行うたびに設定されます。
enemy_rei_stop:
	相手の霊力回復停止時間です。
my_spell:
	自分のスペルカードゲージの量です、一枚当り500で最大2500です。
	晴嵐時は実際の量に関わらず常に0がセットされます。
enemy_spell:
	相手のスペルカードゲージの量です。
my_combo:
	自分のコンボヒット数です、別の攻撃がガードされるかヒットするまで前回のコンボヒット数を指し続けます。
enemy_combo:
	相手のコンボヒット数です。
my_dam:
	自分の合計コンボ与ダメージです。
enemy_dam":
	相手の合計コンボ与ダメージです。
my_limit:
	自分の与リミットです。
enemy_limit:
	相手の与リミットです。
my_rate:
	自分の与レートです。
enemy_rate:
	相手の与レートです。
x:
	自分の現在X座標です。
ex:
	相手の現在X座標です。
y:
	自分の現在Y座標です。
ey:
	相手の現在Y座標です。
obj_dis:
	自分に最も近い敵ダメージ判定の位置です。
	X座標のみを基準に算出しているため、頭上を飛び越える射撃にも反応します。
obj_dis2:
	自分に最も近い敵オブジェクトの位置です。
my_obj_n:
	現在存在している自分のオブジェクト数です。
enemy_obj_n:
	現在存在している相手のオブジェクト数です。
my_card:
	自分の1枚目のカードIDです。
	カードがない、もしくは晴嵐時は-1がセットされます。
	具体的なカードIDはcard.txtやspell.txtやskill.txtを読んでください。
enemy_card:
	相手の1枚目のカードIDです。
my_air:
	自分の空中ダッシュ回数です、これが2(風雨ならば3)の場合空中ダッシュが使用できない状態です。
enemy_air:
	相手の空中ダッシュ回数です。
my_frame:
	自分がそのモーションをはじめてからの経過フレーム数です。
	立ちや歩きなど継続して行える行動の場合は4バイトの限界まで増え続けます。
enemy_frame:
	相手がそのモーションを始めてからの経過フレーム数です。
key_delay:
	set_key_delayで指定できるdelay(キー入力の遅延フレーム数)です。
	このフレーム数だけkey_eventやkey_onなどといったすべてのキー入力命令の実行が遅れます。
	ここに代入してもset_key_delayと同様の効果があります。
data_delay:
	set_data_delayで指定できるdelay(相手状態取得遅延フレーム数)です。
	このフレーム数だけenemy_actとenemy_frameの取得が遅れます。
	ここに代入してもset_data_delayと同様の効果があります。
battle_time:
	対戦開始してからの経過フレーム数です。
	緋想天もしくは非想天則依存のため、動作環境によりyield一回ごとに必ず+1するわけではありません。
	そのため動作目安としても使うことができます。
	i = 0;
	while true do
		print(battle_time-i);
		i = i+1;
		yield();
	end
	このコードを動かして、表示されている数字が変わらないのが理想の環境です。
is_card_use:
	自身の1枚目のカードが使用可能であれば真、そうでないならば偽が格納されます。
	天候晴嵐時は使用可能不可能に関わらず偽が返ります。
weather_time:
	気質カウンター(天候表示部分で増減している数字)を10倍した値です。
	天候無しのときは増加し、天候ありのときは減少していきます。
	0未満になること、および1000以上になることはありません。
	極光時は極光を示す値ではなく、実際に発現している天候の値が帰ります。
	ただし、weather_delayの設定次第で極光の値が帰ることもあります。
weather2:
	天気の予報です。
	気質発現中はweather2と同様の働きをしますが、極光時はweather_delayに関係なく常に極光を示す値が返ります。
weather_delay:
	極光時に天候効果がわかるようになるまでの時間です。
	1000-weather_delay>weather_timeになるとweatherから該当する天候の数値が読めるようになります。
	初期値は300、set_weather_delay関数を用いることで変えることができます。
	この変数に代入を行ってもset_weather_delayと同様の効果があります。
my_dir:
	自分が左を向いているときは-1、右を向いているときは1が格納されます。
enemy_dir:
	相手が左を向いているときは-1、右を向いているときは1が格納されます。
is_dir_front:
	自分が向いている方向に敵が居る場合は真、そうでないならば偽が格納されます。
my_hitstop:
	打撃攻撃を当てたガードさせた、もしくは被弾したガードした時に起こる硬直フレーム数が格納されます。
	咲夜特製ストップウォッチなど、一部特殊技でもこの値が使用されることがあります。
enemy_hitstop:
	相手の硬直フレーム数です。
my_xspeed:
	自分のx方向の速度です。
	緋想天もしくは非想天則内部から取得しているので、my_x差分から計算するよりも1フレーム早く情報を取得できます。
enemy_xspeed:
	相手のx方向の速度です。
my_yspeed:
	自分のy方向の速度です。
enemy_yspeed:
	相手のy方向の速度です。
my_img:
	自分の現在表示されているキャラ画像のIDです。
enemy_img:
	相手の現在表示されているキャラ画像のIDです。
my_hitarea_n:
	自分の食らい判定を示す四角形の個数です
enemy_hitarea_n:
	相手の食らい判定を示す四角形の個数です
my_attackarea_n:
	自分の攻撃判定を示す四角形の個数です。
enemy_attackarea_n:
	相手の攻撃判定を示す四角形の個数です。
my_correction:
	自分が最後に相手に与えた特殊補正のフラグです。
	以下の数字を足した値が設定されます。
	特殊補正名	数値
	Rift Attack	1
	Smash Attack	2
	Border Resist	4
	Chain Arts	8
	Chain Spell	16
	Counter Hit	32
	例:
	吹き飛び属性もちの攻撃をカウンターヒットした場合、2+32で34が格納される。
enemy_correction:
	相手が最後に自分に与えた特殊補正のフラグです。
is_th105:
	起動しているアプリが東方緋想天であれば真が、それ以外であれば偽が返ります。
is_th123:
	起動しているアプリが東方非想天則であれば真が、それ以外であれば偽が返ります。
my_attack_power:
	自分の攻撃倍率です。
	初期値1.0、1.5で普段の1.5倍のダメージを与えられます。
	生薬「国士無双の薬」や制御棒で上昇。
enemy_attack_power:
	相手の攻撃倍率です。
my_defense_power:
	自分の防御倍率です。
	初期値1.0、0.5で普段の1/2しかダメージを受けなくなります。
	生薬「国士無双の薬」や身代わり人形で減少。
enemy_defense_power:
	相手の防御倍率です。
my_speed_power:
	自分の速度倍率です。
	初期値1.0、1.5で普段の1.5倍の速度で移動できます。
	天狗団扇や天候風雨で上昇。
enemy_speed_power:
	相手の速度倍率です。
my_timestop
	自分の時間停止付与フレーム、ここが1以上である間相手は動けない(自分ではなく相手である点に注意)。
	スペル暗転中など自分以外全ての動きが止まる演出時に設定され、1Fごとに1減算されていく。
	咲夜の世界など、一部特殊スペル時にもこの値が設定される。
enemy_timestop
	相手の時間停止付与フレーム。
stage_number
	ステージ番号
	以下一覧表:
	0	倒壊神社
	1	魔法の森
	2	玄武の沢
	3	妖怪の山
	4	玄雲海
	5	有頂天
	6	緋想天
	10	博麗神社
	11	霧雨魔法店
	12	紅魔館時計台
	13	人形の森
	14	紅魔館大図書館
	15	冥界
	16	紅魔館ロビー
	17	白玉楼の雪庭
	18	迷いの竹林
	30	霧の湖の辺
	31	守矢神社
	32	間欠泉地下センター入り口
	33	間欠泉地下センター通路
	34	核融合炉心部
	36	夢の中の時計台2
	37	夢の中の時計台3
	38	夢の中
bgm_number
	BGM番号
	以下一覧表:
	BGM番号	曲名
	0	地の色は黄色
	1	香る樹葉花
	2	踊る水飛沫
	3	嘲りの遊戯
	4	黒い海に紅く 〜 Legendary Fish
	5	有頂天変 〜 Wonderful Heaven
	6	幼心地の有頂天
	10	東方妖恋談
	11	星の器 〜 Casket of Star
	12	フラワリングナイト
	13	ブクレシュティの人形師
	14	広有射怪鳥事 〜 Till When?
	15	ラクトガール 〜 少女密室
	16	幽雅に咲かせ、墨染の桜 〜 Border of Life
	17	亡き王女の為のセプテット
	18	夜が降りてくる
	19	砕月
	20	狂気の瞳 〜 Invisible Full Moon
	21	風神少女
	22	彼岸帰航 〜 Riverside View
	30	信仰は儚き人間の為に
	31	おてんば恋娘
	32	上海紅茶館 〜 Chinese Tea
	33	霊知の太陽信仰 〜 Nuclear Fusion
	34	明日ハレの日、ケの昨日
	35	アンノウンX 〜 Unfound Adventure
	36	空に浮かぶ物体X
	40	二色蓮花蝶 〜 Ancients
	41	恋色マジック
	42	the Grimoire of Alice
	43	ヴワル魔法図書館
fflags
	自分の攻撃に関わらない各種フラグです。
	立っているフラグに対応した以下の数字を足した値が設定されます。
	フラグ			数値		備考
	立ち			1
	座り			2
	空中			4
	不明			8
	ガード可能		16
	行動可能		32		キャンセル含む
	被弾時CH		64
	スーパーアーマー	128		完全スーパーアーマーのみ、その他はspecialdataなどで管理
	ガード			256		常に正ガードされ、ガードモーションも取らない
	ガード			512		256との違いは不明
	グレイズ		1024
	不明			2048
	不明			4096
	地上打撃無敵		8192
	射撃無敵		16384
	空中打撃無敵		32768		当身用?
	中段打撃無敵		65536		当身用?
	下段打撃無敵		131072		当身用?
	一部射撃無敵		262144		当身用?
	不明			524288
	不明			1048576
	不明			2097152
	不明			4194304
	不明			8388608
	不明			16777216
	※現在解析中
aflags
	自身の攻撃関連フラグです。
	立っているフラグに対応した以下の数字を足した値が設定されます。
	フラグ			数値	備考
	不明			1
	中段攻撃		2
	下段攻撃		4
	空中ガード可能		8		空中ガード可能ならtrue
	地上ガード不能		16		地上ガード可能ならfalse
	不明			32
	誤ガ不能		64		誤ガードした場合に通常通りヒットする(ガークラにあらず)
	ガード時相手無敵	128		ガードされるとしばらく相手が無敵状態になり多段ガードにならない
	不明			256
	不明			512
	クラッシュヒット	1024
	不明			2048
	不明			4096
	不明			8192
	不明			16384
	攻撃側ノックバック	32768
	不明			65536
	不明			131072
	不明			262144
	ガードクラッシュ	524288		誤ガード時のみ
	無差別攻撃		1048576		自分敵だけではなくお互いのオブジェクトにも当たる
	不明			2097152		
	射撃属性		4194304		グレイズ可能、正ガードでも霊力減少
	グレイズ不可		8388608		花曇でもグレイズできない、射撃属性なし花曇でもグレイズできない
	不明			16777216
	※現在解析中