このメモは、def_clc.lua開発者様が書いたものではありません。
th123_ai付属"document.txt"の形式を真似て、私が分かる範囲で書き殴ったものです。
いわゆる自分用メモというやつです。



def_clc.lua仕様




・API
calculation()
	def_clc.luaで定義されている各変数を1F置きに更新する。
		create_thread("calculation")
	というようにマイクロスレッドとして実行するのが正しい使い方。
	※注意※
	def_clc.luaで定義されている各変数・関数を使用する前に、必ずcalculationをマイクロスレッドとして実行しておくこと。
	これを行わないと、各変数・関数を正しく使用することができない。

biorhythm(rad1,rad2,F1,F2)
	（react_wait関数用）
	battle_timeを利用した擬似乱数。環境変数bio_math、引数F1,F2の値が大きいほど関数値が大きくなりやすい。
	※実際の関数値は、次の計算で導かれる。
		math.floor( ((math.sin(math.rad(rad1)*battle_time))*F1 + math.floor((math.cos(math.rad(rad2)*battle_time))*F1) + F2)*bio_math/10000 )
	　概要は次の通り。
		(関数値)  =  A*F1 + (B*F1 + F2)*C
		A,B,Cは変数
		-1 ≦ A ≦ 1
		-1 ≦ B ≦ 1
		 0 ≦ C ≦ 1
		A,Bの値は「対戦時間」battle_timeの値で決定（A=Bではない）
		Cの値は「自分と相手の行動過程」bio_mathの値で決定

react_wait(f)
	超反応抑制。超反応スイッチがオフのとき、適宜ディレイをかける。
	ディレイをかけるかどうか、何フレームかけるかはbiorhythm関数の値に依存する。
	fの値が大きいほどディレイがかかる可能性が高く、長いディレイになりやすい。

key_resetEX()
	キーホールドに対応したkey_reset()。ホールド中のキー以外を全てオフにする。

my_spell_more(cost)
	引数で指定したコストをカードゲージが満たしているかどうか（曇天を考慮する）。コストを満たしていれば真。

card_check(card_ID)
	引数で指定したカードが手札に存在するかどうか。１枚でも存在すれば真。

card_1st(card_ID)
	引数で指定したカードを手札の一番目に持ってくる。

card_use(card_ID)
	引数で指定したカードを使用する。

obj_coming_in(range)
	引数で指定した範囲（ｘ軸方向）内に、自分へ向かってきている敵オブジェクトが存在するかどうか。１つでも存在すれば真。

obj_range_in(range, ff)
	現在から引数ffで指定したフレーム後、引数rangeで指定した範囲（ｘ軸方向,ｙ軸方向）内に、攻撃オブジェクトの判定が存在するか判定する関数。







・環境変数
グローバル変数の扱いでyield関数を呼ぶたびに「calculation関数で更新される」変数群。
※例外的に、現在の仕様では「calculation関数で更新されない」変数が一部存在する。その中には、def_clc.luaの外で適宜更新しなければならないものも存在する。

・環境変数一覧
my_preact：
enemy_preact：
	自分（相手）の過去の行動のモーション値の配列。デフォルトでサイズ3600。

my_preframe：
enemy_preframe：
	自分（相手）の過去の行動のフレーム数。デフォルトでサイズ3600。

my_allframe：
enemy_allframe：
	自分（相手）の行動の総フレーム数。

old_bt：
	1F前のbattle_time。

RnI_B：
RnI_C：
	B（C）ボタンのホールド状況。0でホールドなし、1でホールド中。
	※現在の仕様では、calculation関数で更新されない。def_clc.luaの外で適宜更新する必要がある。
B_count：
C_count：
	B（C）ボタンのホールド経過時間。
	※現在の仕様では、calculation関数で更新されない。def_clc.luaの外で適宜更新する必要がある。
	
	使用例（1フレーム毎の処理）：13_iku_main.aiより抜粋
		--■簡易版：龍神の怒り保持用■
		if RnI_B==1 then
			B_count = B_count+1
		else
			B_count = 0
		end
		
		if RnI_C==1 then
			C_count = C_count+1
		else
			C_count = 0
		end
		
		if (my_act>=50 and my_act<=145) or
		(RnI_B==1 and get_key_stat(ACT_B)==0) or 
		(B_count>=300) then  
			RnI_B = 0
		end
		
		if (my_act>=50 and my_act<=145) or
		(RnI_C==1 and get_key_stat(ACT_C)==0) or
		(C_count>=300) then  
			RnI_C = 0
		end
		
		if (my_act>=50 and my_act<=166) or (my_act<300 and not(my_act>=50 and my_act<=199) and enemy_act>=300 and enemy_act<400) then
			if RnI_B==1 then
				key_off(ACT_B);
			end
			if RnI_C==1 then
				key_off(ACT_C);
			end
		end
	
	使用例（ホールド実行時の処理）：13_iku_main.aiより抜粋
		print("Ｂ龍神の怒り");
		key_resetEX();
		key_resetEX();
		lvr22h(ACT_B);
		wait(2);
		RnI_B = 1
		B_count = 0


old_x：
old_ex：
	1F前の（e）x。

my_xspeedEX：
enemy_xspeedEX：
	(ene)my_xspeedに代わる、演算から導かれた自分（相手）のx方向速度。

old_m_ys：
old_e_ys：
	1F前の自分（相手）のy方向速度。

m_gs：
e_gs：
	1F前の自分（相手）の重力加速度。

old_obj_dis：
	1F前のobj_dis。

obj_speedEX：
	演算から導かれたオブジェクト速度。

obj_disEX：
	obj_disに代わる、演算から導かれた自分に最も近い敵ダメージ判定の位置。

old_obj_disEX：
	1F前のobj_disEX。
	※現在の仕様では使用できない、していない。

enemy_hitarea_right：
enemy_hitarea_left：
enemy_hitarea_top：
enemy_hitarea_bottom：
	相手の喰らい判定の右（左,上,下）端の配列。デフォルトでサイズ10。

pre0_enemy_obj_n：
	1F前のenemy_obj_n。

true_math：
	(caution_state_obj関数用変数)
	自分の周囲に存在する、特定のオブジェクトの個数。caution_state_obj関数実行後、その関数値がtrue_mathに記憶される。
	※calculation関数で更新されない。caution_state_obj関数実行後のみ更新される。

bio_math：
	(biorhythm関数用変数)
	超反応スイッチがオフのとき、反応が鈍くなる度合い。calculation関数で更新される。bio_mathの値が大きい状態ほど、反応が鈍くなりやすい。

graund_math：
air_math：
	相手が連続して地上（空中）に居たフレーム数。

enemy_obj_act：
enemy_obj_x：
enemy_obj_y：
enemy_obj_hp：
enemy_obj_img：
enemy_obj_frame：
enemy_obj_xspeed：
enemy_obj_yspeed：
enemy_obj_id：
enemy_obj_attackarea_n：
enemy_obj_hit_n：
	相手のオブジェクトデータの配列。デフォルトでサイズ1024。
	それぞれget_obj_data関数の各戻り値に対応している。
	calculation関数で次のように更新される。
		for i=0,enemy_obj_n-1,1 do
			enemy_obj_act[i],enemy_obj_x[i],enemy_obj_y[i],enemy_obj_hp[i],enemy_obj_img[i],enemy_obj_frame[i],enemy_obj_xspeed[i],enemy_obj_yspeed[i],enemy_obj_id[i],enemy_obj_attackarea_n[i],enemy_obj_hit_n[i] = get_obj_data(1,i);
		end

pre0_enemy_obj_act：
pre0_enemy_obj_x：
pre0_enemy_obj_y：
pre0_enemy_obj_hp：
pre0_enemy_obj_img：
pre0_enemy_obj_frame：
pre0_enemy_obj_xspeed：
pre0_enemy_obj_yspeed：
pre0_enemy_obj_id：
pre0_enemy_obj_attackarea_n：
pre0_enemy_obj_hit_n：
	1F前の相手のオブジェクトデータの配列。デフォルトでサイズ1024。
	それぞれenemy_obj_act,…,enemy_obj_hit_nに対応している。

enemy_obj_attackarea_left：
enemy_obj_attackarea_top：
enemy_obj_attackarea_right：
enemy_obj_attackarea_bottom：
	相手の各オブジェクトの攻撃判定の左（上,右,下）端座標の配列。デフォルトでサイズ1024。
	インデクスに注意。「i番目のオブジェクトのn番目の攻撃判定」の場合、「i*100+n」で参照する。
	calculation関数で次のように更新される。
		for i=0,enemy_obj_n-1,1 do
			for n=0,enemy_obj_attackarea_n[i]-1,1 do
				enemy_obj_attackarea_left[(i+1)*100+(n+1)],enemy_obj_attackarea_top[(i+1)*100+(n+1)],enemy_obj_attackarea_right[(i+1)*100+(n+1)],enemy_obj_attackarea_bottom[(i+1)*100+(n+1)] = get_obj_attackarea(1,i,n);
			end
		end

enemy_obj_xaccel：
enemy_obj_yaccel：
	相手の各オブジェクトのx（y）軸方向加速度の配列。デフォルトでサイズ1024。

countD：
	飛翔用カウント。飛翔コマンド入力からの経過フレーム数。
	※現在の仕様では、calculation関数で更新されない。def_clc.luaの外で適宜更新する必要がある。
	使用例：07_yuyuko_main.aiより抜粋
		key_resetEX();
		countD = 0;
		key_on(ACT_D);
		key_on(u_back);
		while countD<=30 and not((enemy_act==306 and dis<=200 and dis_y<=100 and is_dir_front) or (enemy_act==307 and dis<=400 and dis_y<=150 and is_dir_front) or (enemy_act==309 and dis<=200 and ey<=y-150)) do
			countD = countD +1;
			yield();
		end
		countD = 0;
		key_on(front);
		while countD<=20 and not((enemy_act==306 and dis<=200 and dis_y<=100 and is_dir_front) or (enemy_act==307 and dis<=400 and dis_y<=150 and is_dir_front) or (enemy_act==309 and dis<=200 and ey<=y-150)) do
			countD = countD +1;
			yield();
		end
		countD = 0;
		key_resetEX();


after_guard_count：
	ガード後のカウント。ガード開始時に最大値60に初期化。ガード継続で値-1（最小値1）。


loop_count：
	whileループ等のループカウント。
	※現在の仕様では使用できない、していない。

my_backside：
enemy_backside：
	自分（相手）の後方画面端までの距離。

my_airEX：
enemy_airEX：
	自分（相手）が使用できる飛翔・空中ダッシュの残り回数。
	※（ene）my_airは自分（相手）が地上から空中に行ってから飛翔・空中ダッシュを使用した回数。

recovary_time：
	（不明）

flag_kishitu：
	「緋想の剣」使用フラグ。
	0で何もなし、1で「緋想の剣」使用、2で「緋想の剣」発現中

atk_count：
shoot_count：
	連携の打撃択・射撃択を行う積極性。数値が高いほど積極的に打撃択・射撃択を行おうとする。
	相手の正ガードに対して打撃択、誤ガードに対して射撃択を狙う。

datk_count：
	ダッシュ攻撃を相手にガードさせた回数。

break_wait：
	(react_wait関数用変数)
	初期値は0。react_wait関数のyieldループ（行動待機）を途中でbreakした場合、react_wait関数終了後に1の値をとる。
	※現在の仕様では、react_wait関数及びcalculation関数で0に初期化されない。def_clc.luaの外で適宜初期化する必要がある。
	

