code:
;継続状態や装着物に関する処理

;-------------------------------------------------
;キャラARG:0がコマンド番号ARG:1～ARG:10に対応する継続状態のプレイヤーまたはターゲットなら1を返す関数
;-------------------------------------------------
@IS_EQUIP(ARG:0, ARG:1, ARG:2 = -1, ARG:3 = -1, ARG:4 = -1, ARG:5 = -1, ARG:6 = -1, ARG:7 = -1, ARG:8 = -1, ARG:9 = -1, ARG:10 = -1, ARG:11 = -1, ARG:12 = -1, ARG:13 = -1)
#FUNCTION
FOR LOCAL:0, 0, MEQUIP_NUM
	IF GROUPMATCH(MEQUIP:(LOCAL:0), ARG:1, ARG:2, ARG:3, ARG:4, ARG:5, ARG:6, ARG:7, ARG:8, ARG:9, ARG:10, ARG:11, ARG:12, ARG:13)
		FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
			IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == ARG:0
				RETURNF 1
			ENDIF
		NEXT
		FOR LOCAL:1, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
			IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:1) == ARG:0
				RETURNF 1
			ENDIF
		NEXT
	ENDIF
NEXT
RETURNF 0

;-------------------------------------------------
;キャラARG:0がコマンド番号ARG:1～ARG:8に対応する継続状態のプレイヤーならば1を返す関数
;-------------------------------------------------
@IS_EQUIP_PLAYER(ARG:0, ARG:1, ARG:2 = -1, ARG:3 = -1, ARG:4 = -1, ARG:5 = -1, ARG:6 = -1, ARG:7 = -1, ARG:8 = -1, ARG:9 = -1, ARG:10 = -1, ARG:11 = -1, ARG:12 = -1, ARG:13 = -1)
#FUNCTION
FOR LOCAL:0, 0, MEQUIP_NUM
	IF GROUPMATCH(MEQUIP:(LOCAL:0), ARG:1, ARG:2, ARG:3, ARG:4, ARG:5, ARG:6, ARG:7, ARG:8, ARG:9, ARG:10, ARG:11, ARG:12, ARG:13)
		FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
			IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == ARG:0
				RETURNF 1
			ENDIF
		NEXT
	ENDIF
NEXT
RETURNF 0

;-------------------------------------------------
;キャラARG:0がコマンド番号ARG:1～ARG:8に対応する継続状態のターゲットならば1を返す関数
;-------------------------------------------------
@IS_EQUIP_TARGET(ARG:0, ARG:1, ARG:2 = -1, ARG:3 = -1, ARG:4 = -1, ARG:5 = -1, ARG:6 = -1, ARG:7 = -1, ARG:8 = -1, ARG:9 = -1, ARG:10 = -1, ARG:11 = -1, ARG:12 = -1, ARG:13 = -1)
#FUNCTION
FOR LOCAL:0, 0, MEQUIP_NUM
	IF GROUPMATCH(MEQUIP:(LOCAL:0), ARG:1, ARG:2, ARG:3, ARG:4, ARG:5, ARG:6, ARG:7, ARG:8, ARG:9, ARG:10, ARG:11, ARG:12, ARG:13)
		FOR LOCAL:1, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
			IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:1) == ARG:0
				RETURNF 1
			ENDIF
		NEXT
	ENDIF
NEXT
RETURNF 0

;-------------------------------------------------
;装着対象キャラ(CHARA_ID)のコマンド番号(COM_NUM)に対応する
;コマンドのオプション番号(COM_OPTION)の値を返す関数
;-------------------------------------------------
@GET_EQUIP_OPTION_BY_TARGET_CHARAID(CHARA_ID, COM_NUM)
#FUNCTION
#DIM CHARA_ID
#DIM COM_NUM
#DIM MEQUIP_IDX
#DIM MEQUIP_TARGET_IDX

FOR MEQUIP_IDX, 0, MEQUIP_NUM
	;対象のコマンド番号
	IF MEQUIP:MEQUIP_IDX == COM_NUM
		FOR MEQUIP_TARGET_IDX, 0, MEQUIP_TARGET_NUM:MEQUIP_IDX
			;対象のキャラID
			IF MEQUIP_TARGET:MEQUIP_IDX:MEQUIP_TARGET_IDX == CHARA_ID
				RETURNF MEQUIP_OPTION:MEQUIP_IDX
			ENDIF
		NEXT
	ENDIF
NEXT
RETURNF 0

;-------------------------------------------------
;ARG:0の値に応じて
;  -1→MPLYをプレイヤー、MTAR「以外」をターゲットとする
;  -2→MPLY「以外」をプレイヤー、MTARをターゲットとする
;  -3→MTARをプレイヤー、MPLY「以外」をターゲットとする
;  -4→MTAR「以外」をプレイヤー、MPLYをターゲットとする
;コマンド番号ARG:1～ARG:10に対応する継続状態があれば1を返す関数
;-------------------------------------------------
@IS_EQUIP_OTHERS(ARG:0, ARG:1, ARG:2 = -1, ARG:3 = -1, ARG:4 = -1, ARG:5 = -1, ARG:6 = -1, ARG:7 = -1, ARG:8 = -1, ARG:9 = -1, ARG:10 = -1, ARG:11 = -1, ARG:12 = -1, ARG:13 = -1)
#FUNCTION
FOR LOCAL:6, 1, 14
	IF ARG:(LOCAL:6) < 0
		RETURNF 0
	ENDIF
	IF ARG:0 == -1
		FOR LOCAL:0, 0, MEQUIP_NUM
			IF MEQUIP:(LOCAL:0) == ARG:(LOCAL:6)
				FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
					FOR LOCAL:2, 0, MPLY_NUM
						IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == MPLY:(LOCAL:2)
							FOR LOCAL:3, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
								FOR LOCAL:4, 0, MTAR_NUM
									;won't this just return 1 whenever MTAR_NUM >= 2?
									;I think this is broken
									;Right now the japs only use it for foam play, where >1 target is impossible
									IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:3) != MTAR:(LOCAL:4)
										RETURNF 1
									ENDIF
								NEXT
							NEXT
						ENDIF
					NEXT
				NEXT
			ENDIF
		NEXT
	ELSEIF ARG:0 == -2
		FOR LOCAL:0, 0, MEQUIP_NUM
			IF MEQUIP:(LOCAL:0) == ARG:(LOCAL:6)
				FOR LOCAL:1, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
					FOR LOCAL:2, 0, MTAR_NUM
						IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:1) == MTAR:(LOCAL:2)
							FOR LOCAL:3, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
								FOR LOCAL:4, 0, MPLY_NUM
									IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:3) != MPLY:(LOCAL:4)
										RETURNF 1
									ENDIF
								NEXT
							NEXT
						ENDIF
					NEXT
				NEXT
			ENDIF
		NEXT
	ELSEIF ARG:0 == -3
		FOR LOCAL:0, 0, MEQUIP_NUM
			IF MEQUIP:(LOCAL:0) == ARG:(LOCAL:6)
				FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
					FOR LOCAL:2, 0, MTAR_NUM
						IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == MTAR:(LOCAL:2)
							FOR LOCAL:3, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
								FOR LOCAL:4, 0, MPLY_NUM
									IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:3) != MPLY:(LOCAL:4)
										RETURNF 1
									ENDIF
								NEXT
							NEXT
						ENDIF
					NEXT
				NEXT
			ENDIF
		NEXT
	ELSEIF ARG:0 == -4
		FOR LOCAL:0, 0, MEQUIP_NUM
			IF MEQUIP:(LOCAL:0) == ARG:(LOCAL:6)
				FOR LOCAL:1, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
					FOR LOCAL:2, 0, MPLY_NUM
						IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:1) == MPLY:(LOCAL:2)
							FOR LOCAL:3, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
								FOR LOCAL:4, 0, MTAR_NUM
									IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:3) != MTAR:(LOCAL:4)
										RETURNF 1
									ENDIF
								NEXT
							NEXT
						ENDIF
					NEXT
				NEXT
			ENDIF
		NEXT
	ELSE
		RETURNF 0
	ENDIF
NEXT
RETURNF 0

;-------------------------------------------------
;MEQUIPのコマンド番号がARG:0、プレイヤーがARG:1、ターゲットがARG:2の継続状態を検索し、存在すればMEQUIP番号を返す
;存在しない場合は-1を返す
;プレイヤー・ターゲットに-1を指定すると、そのプレイヤー・ターゲット指定を無視して探索
;-------------------------------------------------
@SEARCH_EQUIP(ARG:0, ARG:1, ARG:2)
#FUNCTION
FOR LOCAL:0, 0, MEQUIP_NUM
	IF MEQUIP:(LOCAL:0) == ARG:0
		FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
			IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == ARG:1 || ARG:1 == -1
				FOR LOCAL:2, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
					IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:2) == ARG:2 || ARG:2 == -1
						RETURNF LOCAL:0
					ENDIF
				NEXT
				BREAK
			ENDIF
		NEXT
	ENDIF
NEXT
RETURNF -1
;;; @SEARCH_EQUIPの短縮形
;;; 引数は@SEARCH_EQUIP_Mに準拠してPLAYER, TARGET, COMMNANDの順とした
@S_EQUIP(PLAYER_ID, TARGET_ID, COM)
#FUNCTION
#DIM PLAYER_ID
#DIM TARGET_ID
#DIM COM
RETURNF SEARCH_EQUIP(COM, PLAYER_ID, TARGET_ID)

;-------------------------------------------------
;as above, with multiple optional arguments
;Arguments: Character 1, Character 2, action1, action2...
;-------------------------------------------------
@SEARCH_EQUIP_M(ARG:0, ARG:1, ARG:2, ARG:3 = -1, ARG:4 = -1, ARG:5 = -1, ARG:6 = -1, ARG:7 = -1, ARG:8 = -1, ARG:9 = -1, ARG:10 = -1, ARG:11 = -1, ARG:12 = -1, ARG:13 = -1)
#FUNCTION
FOR LOCAL:0, 0, MEQUIP_NUM
	IF GROUPMATCH(MEQUIP:(LOCAL:0), ARG:2, ARG:3, ARG:4, ARG:5, ARG:6, ARG:7, ARG:8, ARG:9, ARG:10, ARG:11, ARG:12, ARG:13)
		FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
			IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == ARG:0 || ARG:0 == -1
				FOR LOCAL:2, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
					IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:2) == ARG:1 || ARG:1 == -1
						RETURNF LOCAL:0
					ENDIF
				NEXT
				BREAK
			ENDIF
		NEXT
	ENDIF
NEXT
RETURNF -1

;-------------------------------------------------
;MEQUIPのコマンド番号がARG:0、プレイヤー・ターゲットがARG:1・ARG:2の継続状態を検索し、存在すればMEQUIP番号を返す
;存在しない場合は-1を返す
;SEARCH_EQUIPと違い、ARG:1とARG:2が可換(いずれか片方がプレイヤー、片方がターゲットなら条件を満たす)
;-------------------------------------------------
@SEARCH_EQUIP_IC(ARG:0, ARG:1, ARG:2)
#FUNCTION
FOR LOCAL:0, 0, MEQUIP_NUM
	IF MEQUIP:(LOCAL:0) == ARG:0
		FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
			IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == ARG:1 || ARG:1 == -1
				FOR LOCAL:2, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
					IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:2) == ARG:2 || ARG:2 == -1
						RETURNF LOCAL:0
					ENDIF
				NEXT
				BREAK
			ENDIF
			IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == ARG:2 || ARG:2 == -1
				FOR LOCAL:2, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
					IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:2) == ARG:1 || ARG:1 == -1
						RETURNF LOCAL:0
					ENDIF
				NEXT
				BREAK
			ENDIF
		NEXT
	ENDIF
NEXT
RETURNF -1

;-------------------------------------------------
;as above but with multiple command arguments
;Arguments: Character 1, Character 2, action1, action2...
;-------------------------------------------------
@SEARCH_EQUIP_IC_M(ARG:0, ARG:1, ARG:2, ARG:3 = -1, ARG:4 = -1, ARG:5 = -1, ARG:6 = -1, ARG:7 = -1, ARG:8 = -1, ARG:9 = -1, ARG:10 = -1, ARG:11 = -1, ARG:12 = -1, ARG:13 = -1)
#FUNCTION
FOR LOCAL:0, 0, MEQUIP_NUM
	IF GROUPMATCH(MEQUIP:(LOCAL:0), ARG:2, ARG:3, ARG:4, ARG:5, ARG:6, ARG:7, ARG:8, ARG:9, ARG:10, ARG:11, ARG:12, ARG:13)
		FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
			IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == ARG:0 || ARG:0 == -1
				FOR LOCAL:2, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
					IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:2) == ARG:1 || ARG:1 == -1
						RETURNF LOCAL:0
					ENDIF
				NEXT
				BREAK
			ENDIF
			IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == ARG:1 || ARG:1 == -1
				FOR LOCAL:2, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
					IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:2) == ARG:0 || ARG:0 == -1
						RETURNF LOCAL:0
					ENDIF
				NEXT
				BREAK
			ENDIF
		NEXT
	ENDIF
NEXT
RETURNF -1

;-------------------------------------------------
;MEQUIPのコマンド番号がARG:0、プレイヤー・ターゲットがARG:1・ARG:2の継続状態を検索し、存在すればMEQUIP番号を返す
;存在しない場合は-1を返す
;SEARCH_EQUIP_ICと違い、ARG:1とARG:2はプレイヤーでもターゲットでも良い(両方がプレイヤー／両方がターゲットでも条件を満たす)
;-------------------------------------------------
@SEARCH_EQUIP_EITHER(ARG:0, ARG:1, ARG:2)
#FUNCTION
FOR LOCAL:0, 0, MEQUIP_NUM
	IF MEQUIP:(LOCAL:0) == ARG:0
		FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
			IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == ARG:1 || ARG:1 == -1
				FOR LOCAL:2, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
					IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:2) == ARG:2 || ARG:2 == -1
						RETURNF LOCAL:0
					ENDIF
				NEXT
				FOR LOCAL:2, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
					IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:2) == ARG:2
						RETURNF LOCAL:0
					ENDIF
				NEXT
				BREAK
			ENDIF
		NEXT
		FOR LOCAL:1, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
			IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:1) == ARG:1
				FOR LOCAL:2, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
					IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:2) == ARG:2 || ARG:2 == -1
						RETURNF LOCAL:0
					ENDIF
				NEXT
				FOR LOCAL:2, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
					IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:2) == ARG:2
						RETURNF LOCAL:0
					ENDIF
				NEXT
				BREAK
			ENDIF
		NEXT
	ENDIF
NEXT
RETURNF -1

;-------------------------------------------------
;キャラARG:0がARG:1番のMEQUIPのプレイヤーであるかどうかを返す関数
;-------------------------------------------------
@IS_MPLY_EQUIP(ARG:0, ARG:1)
#FUNCTION
IF ARG:1 >= 0 && ARG:1 < MAX_MEQUIP && MEQUIP:(ARG:1) >= 0
	FOR LOCAL:0, 0, MAX_MEQUIP_PLAYER
		IF MEQUIP_PLAYER:(ARG:1):(LOCAL:0) == ARG:0
			RETURNF 1
		ENDIF
	NEXT
ENDIF
RETURNF 0

;-------------------------------------------------
;キャラARG:0がARG:1番のMEQUIPのターゲットであるかどうかを返す関数
;-------------------------------------------------
@IS_MTAR_EQUIP(ARG:0, ARG:1)
#FUNCTION
IF ARG:1 >= 0 && ARG:1 < MAX_MEQUIP && MEQUIP:(ARG:1) >= 0
	FOR LOCAL:0, 0, MAX_MEQUIP_TARGET
		IF MEQUIP_TARGET:(ARG:1):(LOCAL:0) == ARG:0
			RETURNF 1
		ENDIF
	NEXT
ENDIF
RETURNF 0

;-------------------------------------------------
;COM_NUM番のコマンドの装着/継続状態を設定する関数
;ARG:1に1を指定すると、COM_IS_EQUIPの条件を無視して強制的に継続させる
;MEQUIP_LOCKを指定すると、コマンドが領内活動も継続する
;Returns mequip position of added action or mequip position of already existing action. Or -1 on failure.
;-------------------------------------------------
@SET_EQUIP(COM_NUM, ARG:1 = 0, MEQUIP_LOCK = 0)
#DIM COM_NUM
#DIM MEQUIP_NUM_TMP
#DIM MEQUIP_LOCK
#DIM DYNAMIC CHARA_IDX
#DIM DYNAMIC MPLY_TEMP, MAX_ACTOR
#DIM DYNAMIC MTAR_TEMP, MAX_ACTOR
#DIM DYNAMIC MPLY_NUM_TEMP
#DIM DYNAMIC MTAR_NUM_TEMP
#DIM DYNAMIC CAN_EQUIP
#DIM DYNAMIC ITER_I
#DIM DYNAMIC ITER_J
#DIM DYNAMIC MEQUIP_INDEX ;装着/継続中コマンドの連番
#DIM DYNAMIC MPLY_INDEX
#DIM DYNAMIC MTAR_INDEX

;既にEQUIPの数が限界に達しているなら戻る
IF MEQUIP_NUM >= 50
	RETURN -1
ENDIF

;return if command not continuable
;継続コマンドでないならば戻る
RESULT = 0
TRYCALLFORM COM_IS_EQUIP{COM_NUM}
IF !RESULT && !ARG:1
	RETURN -1
ENDIF

;継続コマンドと同一条件で実行中のコマンドがある場合は戻る
TRYCCALLFORM COM_ALREADY_HAPPENING{COM_NUM}
	SIF RESULT > 0
		RETURN -1
CATCH
	SIF COM_ALREADY_HAPPENING(COM_NUM) > 0
		RETURN -1
ENDCATCH

; DEBUGPRINTFORML STARTING MEQUIP,MEQUIP_NUM{MEQUIP_NUM}
; FOR LOCAL, 0, MEQUIP_NUM
; 	DEBUGPRINTFORML MEQUIP {MEQUIP:(LOCAL)}, PLY {MEQUIP_PLAYER:LOCAL:0} TAR {MEQUIP_TARGET:LOCAL:0}
; NEXT
; DEBUGPRINTFORML ------------------------

;TMP変数を初期化
VARSET MEQUIP_TMP
VARSET MEQUIP_PLAYER_NUM_TMP
VARSET MEQUIP_TARGET_NUM_TMP
VARSET MEQUIP_INITIATIVE_TMP
VARSET MEQUIP_OPTION_TMP
VARSET MEQUIP_TURN_TMP
VARSET HO_MEQUIP_LOCK_TMP
VARSET MEQUIP_PLAYER_TMP
VARSET MEQUIP_TARGET_TMP

;store current MEQUIP data in temporary arrays
;現在の装着物リストを退避
MEQUIP_NUM_TMP = MEQUIP_NUM
FOR MEQUIP_INDEX, 0, MEQUIP_NUM
	;SIF MEQUIP:MEQUIP_INDEX != -1
	;    PRINTFORML MEQUIP {MEQUIP:MEQUIP_INDEX} STORED AT TMP POSITION {MEQUIP_INDEX} WITH PLY {MEQUIP_PLAYER:MEQUIP_INDEX:0} TAR {MEQUIP_TARGET:MEQUIP_INDEX:0}
	MEQUIP_TMP:MEQUIP_INDEX = MEQUIP:MEQUIP_INDEX
	MEQUIP_PLAYER_NUM_TMP:MEQUIP_INDEX = MEQUIP_PLAYER_NUM:MEQUIP_INDEX
	MEQUIP_TARGET_NUM_TMP:MEQUIP_INDEX = MEQUIP_TARGET_NUM:MEQUIP_INDEX
	MEQUIP_INITIATIVE_TMP:MEQUIP_INDEX = MEQUIP_INITIATIVE:MEQUIP_INDEX
	MEQUIP_OPTION_TMP:MEQUIP_INDEX = MEQUIP_OPTION:MEQUIP_INDEX
	MEQUIP_TURN_TMP:MEQUIP_INDEX = MEQUIP_TURN:MEQUIP_INDEX
	HO_MEQUIP_LOCK_TMP:MEQUIP_INDEX = HO_MEQUIP_LOCK:MEQUIP_INDEX

	;装着物の実行者を退避
	FOR CHARA_IDX, 0, MEQUIP_PLAYER_NUM:MEQUIP_INDEX
		MEQUIP_PLAYER_TMP:MEQUIP_INDEX:CHARA_IDX = MEQUIP_PLAYER:MEQUIP_INDEX:CHARA_IDX
	NEXT
	;装着物の対象者を退避
	FOR CHARA_IDX, 0, MEQUIP_TARGET_NUM:MEQUIP_INDEX
		MEQUIP_TARGET_TMP:MEQUIP_INDEX:CHARA_IDX = MEQUIP_TARGET:MEQUIP_INDEX:CHARA_IDX
	NEXT
NEXT
;store MPLY, MTAR, MPLY_NUM, MTAR_NUM
FOR MPLY_INDEX, 0, MPLY_NUM
	MPLY_TEMP:MPLY_INDEX = MPLY:MPLY_INDEX
NEXT
FOR MTAR_INDEX, 0, MTAR_NUM
	MTAR_TEMP:MTAR_INDEX = MTAR:MTAR_INDEX
NEXT
MPLY_NUM_TEMP = MPLY_NUM
MTAR_NUM_TEMP = MTAR_NUM

;replace MEQUIP:0 with the currently selected action
; MEQUIP:0に現在のコマンドを装着
MEQUIP:0 = COM_NUM
MEQUIP_PLAYER_NUM:0 = MPLY_NUM
MEQUIP_TARGET_NUM:0 = MTAR_NUM
;MEQUIP_PLAYER:0を初期化
FOR ITER_I, 0, MAX_MEQUIP_PLAYER
	MEQUIP_PLAYER:0:ITER_I = -1
NEXT
;MEQUIP_PLAYER:0に現在の実行者を指定
FOR MPLY_INDEX, 0, MPLY_NUM
	;主導権
	SIF IS_INITIATIVE(MPLY:(MPLY_INDEX))
		MEQUIP_INITIATIVE:0 = MPLY:(MPLY_INDEX)
	MEQUIP_PLAYER:0:(MPLY_INDEX) = MPLY:(MPLY_INDEX)
NEXT
;MEQUIP_TARGET:0を初期化
FOR ITER_I, 0, MAX_MEQUIP_TARGET
	MEQUIP_TARGET:0:ITER_I = -1
NEXT
;MEQUIP_TARGET:0に現在の対象者を指定
FOR MTAR_INDEX, 0, MTAR_NUM
	;主導権
	SIF IS_INITIATIVE(MTAR:(MTAR_INDEX))
		MEQUIP_INITIATIVE:0 = MTAR:(MTAR_INDEX)
	MEQUIP_TARGET:0:(MTAR_INDEX) = MTAR:(MTAR_INDEX)
NEXT
MEQUIP_OPTION:0 = COM_OPTION:(COM_NUM)
HO_MEQUIP_LOCK:0 = MEQUIP_LOCK
;装着物数を1に設定
MEQUIP_NUM = 1

;add the stored actions back to MEQUIP, if they are still possible
;既存の装着物を一つずつ再装着
FOR MEQUIP_INDEX, 0, MIN(MEQUIP_NUM_TMP, MAX_MEQUIP-1)
	;MPLYの設定
	FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM_TMP:MEQUIP_INDEX
		MPLY:(LOCAL:1) = MEQUIP_PLAYER_TMP:(MEQUIP_INDEX):(LOCAL:1)
	NEXT
	;MTARの設定
	FOR LOCAL:1, 0, MEQUIP_TARGET_NUM_TMP:MEQUIP_INDEX
		MTAR:(LOCAL:1) = MEQUIP_TARGET_TMP:(MEQUIP_INDEX):(LOCAL:1)
	NEXT
	MPLY_NUM = MEQUIP_PLAYER_NUM_TMP:MEQUIP_INDEX
	MTAR_NUM = MEQUIP_TARGET_NUM_TMP:MEQUIP_INDEX

	SIF MEQUIP_TMP:MEQUIP_INDEX== -1
		CONTINUE

	;再装着可能判定
	COM_ENABLE = 1
	FLAG:RECHECKING = 1
	RESULT = 0
	TRYCALLFORM COM_ABLE{MEQUIP_TMP:MEQUIP_INDEX}
	FLAG:RECHECKING = 0
	COM_ENABLE = 0
	; DEBUGPRINTFORML COMABLE for {MEQUIP_TMP:MEQUIP_INDEX} IS {RESULT} with MPLY:0 {MPLY:0} and MTAR:0 {MTAR:0} MPLYNUM {MPLY_NUM} MTARNUM {MTAR_NUM}
	IF RESULT > 0
		CAN_EQUIP = 1
	ENDIF
	; 領内活動中も継続する装着物の場合
	IF HO_MEQUIP_LOCK_TMP:MEQUIP_INDEX && !CAN_EQUIP
		COM_ENABLE = 1
		FLAG:RECHECKING = 1
		; 継続ロック時の強制解除判定
		TRYCALLFORM COM_ABLE_AT_EQUIP_LOCKED{MEQUIP_TMP:MEQUIP_INDEX}
		COM_ENABLE = 0
		FLAG:RECHECKING = 0
		IF RESULT > 0
			CAN_EQUIP = 1
		ENDIF
	ENDIF
	; DEBUGPRINTFORML READDING {MEQUIP_TMP:MEQUIP_INDEX} to {MEQUIP_NUM} with PLY {MPLY:0} and TAR {MTAR:0}
	IF CAN_EQUIP
		MEQUIP:(MEQUIP_NUM) = MEQUIP_TMP:MEQUIP_INDEX
		MEQUIP_INITIATIVE:MEQUIP_NUM = MEQUIP_INITIATIVE_TMP:MEQUIP_INDEX
		MEQUIP_OPTION:MEQUIP_NUM = MEQUIP_OPTION_TMP:MEQUIP_INDEX
		HO_MEQUIP_LOCK:MEQUIP_NUM = HO_MEQUIP_LOCK_TMP:MEQUIP_INDEX
		;MPLY
		FOR ITER_I, 0, MAX_MEQUIP_PLAYER
			MEQUIP_PLAYER:(MEQUIP_NUM):ITER_I = -1
		NEXT
		FOR MPLY_INDEX, 0, MPLY_NUM
			MEQUIP_PLAYER:(MEQUIP_NUM):(MPLY_INDEX) = MPLY:(MPLY_INDEX)
		NEXT
		;MTAR
		FOR ITER_I, 0, MAX_MEQUIP_TARGET
			MEQUIP_TARGET:(MEQUIP_NUM):ITER_I = -1
		NEXT
		FOR MTAR_INDEX, 0, MTAR_NUM
			MEQUIP_TARGET:(MEQUIP_NUM):(MTAR_INDEX) = MTAR:(MTAR_INDEX)
		NEXT
		MEQUIP_PLAYER_NUM:(MEQUIP_NUM) = MEQUIP_PLAYER_NUM_TMP:MEQUIP_INDEX
		MEQUIP_TARGET_NUM:(MEQUIP_NUM) = MEQUIP_TARGET_NUM_TMP:MEQUIP_INDEX
		MEQUIP_TURN:MEQUIP_NUM = MEQUIP_TURN_TMP:MEQUIP_INDEX
		MEQUIP_NUM ++
	ELSE
		CALL COLOR_PRINTL(@"※%TRAINNAME:(COM_NUM)%と干渉する、%TRAINNAME:(MEQUIP_TMP:MEQUIP_INDEX)%を解除しました※", カラー_選択不可)
	ENDIF
NEXT

;退避していたMPLYとMTARを元に戻す
MPLY_NUM = MPLY_NUM_TEMP
MTAR_NUM = MTAR_NUM_TEMP
;restore mply and mtar
FOR LOCAL, 0, MPLY_NUM
	MPLY:LOCAL = MPLY_TEMP:LOCAL
NEXT
FOR LOCAL, 0, MTAR_NUM
	MTAR:LOCAL = MTAR_TEMP:LOCAL
NEXT

RETURN 0

;-------------------------------------------------
;;;実行対象を指定してEQUIPをセットする関数
;;;@ARGS
;;;- COMMAND {int} :コマンド番号
;;;- MPLY_ID {int} :プレイヤーのキャラ番号
;;;- MTAR_ID {int} :ターゲットのキャラ番号
;;;- MEQUIP_LOCK {int} :継続ロックするかどうか
;-------------------------------------------------
@SET_EQUIP_EX(COMMAND, MPLY_ID, MTAR_ID, MEQUIP_LOCK = 0)
;region
#DIM COMMAND
#DIM MPLY_ID
#DIM MTAR_ID
#DIM MEQUIP_LOCK

#DIM DYNAMIC MPLY_TEMP, MAX_ACTOR
#DIM DYNAMIC MTAR_TEMP, MAX_ACTOR
#DIM DYNAMIC TEMP_MPLY_NUM
#DIM DYNAMIC TEMP_MTAR_NUM

;MPLYとMTARを退避
ARRAYCOPY "MPLY", "MPLY_TEMP"
ARRAYCOPY "MTAR", "MTAR_TEMP"
TEMP_MPLY_NUM = MPLY_NUM
TEMP_MTAR_NUM = MTAR_NUM

CALL CLEAR_ACTOR()
CALL ADD_MPLY(MPLY_ID)
CALL ADD_MTAR(MTAR_ID)
CALL SET_EQUIP(COMMAND, 1, MEQUIP_LOCK)

;退避したMPLYとMTARを復帰
ARRAYCOPY "MPLY_TEMP", "MPLY"
ARRAYCOPY "MTAR_TEMP", "MTAR"
MPLY_NUM = TEMP_MPLY_NUM
MTAR_NUM = TEMP_MTAR_NUM

;#endregion

;-------------------------------------------------
;EQUIP解除の処理
; 引数
;  MEQUIP_INDEX: MEQUIPの配列番号
;  ALLOW_AUTOCOMMAND: 逆調教中の解除を許すか
; 解除が行われた場合1を返す
;-------------------------------------------------
@RELEASE_EQUIP(MEQUIP_INDEX, ALLOW_AUTOCOMMAND = 0, SHOW_MESSAGE_FLAG = 1)
#DIM DYNAMIC MEQUIP_INDEX
#DIM DYNAMIC ALLOW_AUTOCOMMAND
#DIM DYNAMIC SHOW_MESSAGE_FLAG

;逆調教中でALLOW_AUTOCOMMANDが0なら解除不能
IF GROUPMATCH(FLAG:調教モード, 4, 5, 7) && ALLOW_AUTOCOMMAND == 0
	RETURN 0
ENDIF

IF MEQUIP_INDEX >= 0 && MEQUIP_INDEX < MEQUIP_NUM
	LOCAL:5 = MEQUIP:MEQUIP_INDEX
	LOCAL:6 = MEQUIP_PLAYER:MEQUIP_INDEX:0

	;継続を解除した際の処理があれば呼び出す
	TRYCALLFORM COM_RELEASE_EQUIP{MEQUIP:MEQUIP_INDEX}(MEQUIP_INDEX)
	IF SHOW_MESSAGE_FLAG
		;コマンドごとの地の文表示
		TRYCALLFORM COM_TEXT_RELEASE_EQUIP{MEQUIP:MEQUIP_INDEX}(MEQUIP_INDEX)
	ENDIF

	;削除するMEQUIPの分、配列番号を詰める
	FOR LOCAL:0, MEQUIP_INDEX, MEQUIP_NUM - 1
		MEQUIP:(LOCAL:0) = MEQUIP:(LOCAL:0 + 1)
		MEQUIP_PLAYER_NUM:(LOCAL:0) = MEQUIP_PLAYER_NUM:(LOCAL:0 + 1)
		MEQUIP_TARGET_NUM:(LOCAL:0) = MEQUIP_TARGET_NUM:(LOCAL:0 + 1)
		MEQUIP_INITIATIVE:(LOCAL:0) = MEQUIP_INITIATIVE:(LOCAL:0 + 1)
		MEQUIP_OPTION:(LOCAL:0) = MEQUIP_OPTION:(LOCAL:0 + 1)
		HO_MEQUIP_LOCK:(LOCAL:0) = HO_MEQUIP_LOCK:(LOCAL:0 + 1)
		FOR LOCAL:1, 0, MAX_MEQUIP_PLAYER
			MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) = MEQUIP_PLAYER:(LOCAL:0 + 1):(LOCAL:1)
		NEXT
		FOR LOCAL:1, 0, MAX_MEQUIP_TARGET
			MEQUIP_TARGET:(LOCAL:0):(LOCAL:1) = MEQUIP_TARGET:(LOCAL:0 + 1):(LOCAL:1)
		NEXT
		MEQUIP_TURN:(LOCAL:0) = MEQUIP_TURN:(LOCAL:0 + 1)
	NEXT

	;最後尾のデータをクリア
	LOCAL:2 = MEQUIP_NUM - 1
	MEQUIP:(LOCAL:2) = -1
	MEQUIP_PLAYER_NUM:(LOCAL:2) = 0
	MEQUIP_TARGET_NUM:(LOCAL:2) = 0
	MEQUIP_INITIATIVE:(LOCAL:2) = -1
	MEQUIP_OPTION:(LOCAL:2) = 0
	HO_MEQUIP_LOCK:(LOCAL:2) = 0
	FOR LOCAL:1, 0, MAX_MEQUIP_PLAYER
		MEQUIP_PLAYER:(LOCAL:2):(LOCAL:1) = -1
	NEXT
	FOR LOCAL:1, 0, MAX_MEQUIP_TARGET
		MEQUIP_TARGET:(LOCAL:2):(LOCAL:1) = -1
	NEXT
	MEQUIP_TURN:(LOCAL:2) = 0

	MEQUIP_NUM --

	;継続状態が不正に残るバグの暫定対処
	IF MEQUIP_NUM == 0
		CALL INIT_EQUIP
	ENDIF

	RETURN 1
ENDIF

RETURN 0

;-------------------------------------------------
;EQUIP解除の処理  ARG:0=MEQUIPに対応するコマンド番号 ARG:1=プレイヤーのキャラ番号 ARG:2=ターゲットのキャラ番号
;プレイヤー・ターゲットに-1を指定すると、そのプレイヤー・ターゲット指定を無視して探索
;-------------------------------------------------
@RELEASE_EQUIP_EX(ARG:0, ARG:1, ARG:2)
FOR LOCAL:0, 0, MAX_MEQUIP
	CALL RELEASE_EQUIP(SEARCH_EQUIP(ARG:0, ARG:1, ARG:2), 1, 0)
	IF !RESULT
		BREAK
	ENDIF
NEXT

;-------------------------------------------------
;キャラCHARA_IDが関わるEQUIPを全て解除する関数
;「継続ロックコマンドを解除しない」が1の場合、領内活動で装着し続ける装着物(HO_MEQUIP_LOCK配列で管理)は解除しない
;-------------------------------------------------
@RELEASE_ALL_EQUIP(CHARA_ID, 継続ロックコマンドを解除しない = 0)
#DIM 継続ロックコマンドを解除しない
#DIM CHARA_ID
#DIM CHARA_IDX
#DIM MEQUIP_INDEX
#DIM MEQUIP_RELEASE_FLAG

MEQUIP_INDEX = 0
LOCAL:2 = MEQUIP_NUM
; 全装着物について確認
WHILE MEQUIP_INDEX < LOCAL:2
	MEQUIP_RELEASE_FLAG = 0
	;対象キャラが装着させた装着物の場合の確認
	FOR CHARA_IDX, 0, MEQUIP_PLAYER_NUM:MEQUIP_INDEX
		IF MEQUIP_PLAYER:MEQUIP_INDEX:CHARA_IDX == CHARA_ID
			IF !(HO_MEQUIP_LOCK:MEQUIP_INDEX && 継続ロックコマンドを解除しない)
				MEQUIP_RELEASE_FLAG = 1
				BREAK
			ENDIF
		ENDIF
	NEXT
	IF !MEQUIP_RELEASE_FLAG
		;対象キャラが装着中の装着物の場合の確認
		FOR CHARA_IDX, 0, MEQUIP_TARGET_NUM:MEQUIP_INDEX
			IF MEQUIP_TARGET:MEQUIP_INDEX:CHARA_IDX == CHARA_ID
				IF !(HO_MEQUIP_LOCK:MEQUIP_INDEX && 継続ロックコマンドを解除しない)
					MEQUIP_RELEASE_FLAG = 1
					BREAK
				ENDIF
			ENDIF
		NEXT
	ENDIF
	IF MEQUIP_RELEASE_FLAG
		CALL RELEASE_EQUIP(MEQUIP_INDEX, 1, 0)
		LOCAL:2 --
	ELSE
		MEQUIP_INDEX ++
	ENDIF
WEND

;-------------------------------------------------
;キャラARG:0が気絶した時のEQUIP解除
;-------------------------------------------------
@DOWN_RELEASE_EQUIP(ARG:0)
LOCAL:0 = 0
LOCAL:2 = MEQUIP_NUM
WHILE LOCAL:0 < LOCAL:2
	LOCAL:5 = 0
	FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
		IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == ARG:0
			IF !GROUPMATCH(MEQUIP:(LOCAL:0), 13, 34, 44, 61, 62, 63, 64, 67, 75, 85, 84, 112, 114)
				LOCAL:5 = 1
				BREAK
			ENDIF
		ENDIF
	NEXT
	IF LOCAL:5
		CALL RELEASE_EQUIP(LOCAL:0, 1, 0)
		LOCAL:2 --
	ELSE
		LOCAL:0 ++
	ENDIF
WEND

;-------------------------------------------------
;EQUIPを初期化する関数
;-------------------------------------------------
@INIT_EQUIP
VARSET MEQUIP, -1
MEQUIP_NUM = 0
VARSET MEQUIP_PLAYER, -1
VARSET MEQUIP_TARGET, -1
VARSET MEQUIP_INITIATIVE, -1
VARSET MEQUIP_OPTION, 0
VARSET MEQUIP_PLAYER_NUM, 0
VARSET MEQUIP_TARGET_NUM, 0
VARSET MEQUIP_TURN, 0
VARSET HO_MEQUIP_LOCK, 0

;--------------------------------------------------------
;継続コマンドのプレイヤー名称を取得 ARG:0=MEQUIPの配列番号
;--------------------------------------------------------
@EQUIP_PLAYER_ANAME(ARG:0)
#FUNCTIONS
LOCALS:0 =
IF MEQUIP_PLAYER_NUM:(ARG:0) >= 3
	LOCALS:0 = %ANAME(MEQUIP_PLAYER:(ARG:0):0)%たち
ELSEIF MEQUIP_PLAYER_NUM:(ARG:0) == 2
	LOCALS:0 = %ANAME(MEQUIP_PLAYER:(ARG:0):0)%と%ANAME(MEQUIP_PLAYER:(ARG:0):1)%
ELSEIF MEQUIP_PLAYER_NUM:(ARG:0) ==1
	LOCALS:0 = %ANAME(MEQUIP_PLAYER:(ARG:0):0)%
ENDIF
RETURNF LOCALS:0

;--------------------------------------------------------
;継続コマンドのターゲット名称を取得 ARG:0=MEQUIPの配列番号
;--------------------------------------------------------
@EQUIP_TARGET_ANAME(ARG:0)
#FUNCTIONS
LOCALS:0 =
IF MEQUIP_TARGET_NUM:(ARG:0) >= 3
	LOCALS:1 = %ANAME(MEQUIP_TARGET:(ARG:0):0)%たち
ELSEIF MEQUIP_TARGET_NUM:(ARG:0) == 2
	LOCALS:1 = %ANAME(MEQUIP_TARGET:(ARG:0):0)%と%ANAME(MEQUIP_TARGET:(ARG:0):1)%
ELSEIF MEQUIP_TARGET_NUM:(ARG:0) == 1
	LOCALS:1 = %ANAME(MEQUIP_TARGET:(ARG:0):0)%
ENDIF
RETURNF LOCALS:1

;-------------------------------------------------
;現在調教に参加していて継続コマンドを実行中のプレイヤーの数
;-------------------------------------------------
@EQUIP_PLAYER_NUM_PARTICIPANTS(ARG:0)
#FUNCTION
#DIM DYNAMIC ACTOR_NUM
FOR LOCAL, 0, MEQUIP_PLAYER_NUM:(ARG:0)
	IF IS_PARTICIPATE_TRAIN(MEQUIP_PLAYER:(ARG:0):LOCAL)
		ACTOR_NUM ++
	ENDIF
NEXT
RETURNF ACTOR_NUM

;-------------------------------------------------
;現在調教に参加していて継続コマンドを実行中のターゲットの数
;-------------------------------------------------
@EQUIP_TARGET_NUM_PARTICIPANTS(ARG:0)
#FUNCTION
#DIM DYNAMIC ACTOR_NUM
FOR LOCAL, 0, MEQUIP_TARGET_NUM:(ARG:0)
	IF IS_PARTICIPATE_TRAIN(MEQUIP_TARGET:(ARG:0):LOCAL)
		ACTOR_NUM ++
	ENDIF
NEXT
RETURNF ACTOR_NUM

;-------------------------------------------------
;キャラARG:0のソースを一時的に退避する関数
;-------------------------------------------------
@PUTOUT_SOURCE(ARG:0)
FOR LOCAL:0, 0, 100
	MEMORY_SOURCE:(ARG:0):(LOCAL:0) = SOURCE:(ARG:0):(LOCAL:0)
	SOURCE:(ARG:0):(LOCAL:0) = 0
NEXT

;-------------------------------------------------
;キャラARG:0の退避したソースを再び加算する関数
;-------------------------------------------------
@SUM_SOURCE(ARG:0)
FOR LOCAL:0, 0, 100
	SOURCE:(ARG:0):(LOCAL:0) += MEMORY_SOURCE:(ARG:0):(LOCAL:0)
	MEMORY_SOURCE:(ARG:0):(LOCAL:0) = 0
NEXT

;-------------------------------------------------
;キャラARG:0のＶが埋まっているかどうかを判定する関数
;-------------------------------------------------
@IS_V_HOLD(ARG:0)
#DIM EXCLUDE_TOY
#FUNCTION

;貝合わせ、双頭バイブ
SIF IS_EQUIP(ARG:0, 21, 22)
	RETURNF 1
;性交
SIF IS_EQUIP_TARGET(ARG:0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39)
	RETURNF 1
SIF IS_EQUIP_TARGET(ARG:0, 52, 55, 57, 160)
	RETURNF 1
;指挿入、尻尾挿入, バイブ、拡張バルーン、フィスト, 触手挿入
SIF IS_EQUIP_TARGET(ARG:0, 3, 6, 61, 65, 87, 101, 201, 108)
	RETURNF 1
;顔面騎乗, V Self-insert
SIF IS_EQUIP_PLAYER(ARG:0, 101, 108)
	RETURNF 0

;-------------------------------------------------
;キャラARG:0のＡが埋まっているかどうかを判定する関数
;-------------------------------------------------
@IS_A_HOLD(ARG:0)
#FUNCTION
;Ａ性交
SIF IS_EQUIP_TARGET(ARG:0, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49) || IS_EQUIP_TARGET(ARG:0, 53, 56, 58, 161)
	RETURNF 1

;アナル愛撫、尻尾Ａ挿入、アナル舐め, 尻尾、Ａバイブ、拡張バルーン、Ａフィスト、浣腸＆プラグ, 触手Ａ挿入
SIF IS_EQUIP_TARGET(ARG:0, 4, 7, 8, 62, 66, 88, 142, 202)
	RETURNF 1

;Ａ顔面騎乗、Ｗ顔面騎乗, 尻尾セルフA
SIF IS_EQUIP_PLAYER(ARG:0, 102, 105, 109)
	RETURNF 1

;-------------------------------------------------
;キャラARG:0の口が埋まっているかどうかを判定する関数
;-------------------------------------------------
@IS_M_HOLD(ARG:0)
#FUNCTION
;kissing
SIF IS_EQUIP(ARG:0, 20, 342)
	RETURNF 1
;cunnilingus, rimjob, nipple suck, blowjob, ball licking, footlicking, glans bj, autofellatio, 指フェラ, 舌を這わす
SIF IS_EQUIP_PLAYER(ARG:0, 2, 8, 9, 11, 19, 104, 107, 117, 24, 28)
	RETURNF 1
;strapon-gag, gag, facefuck, tentacle m fuck, facesitting,
SIF IS_EQUIP_TARGET(ARG:0, 68, 86, 90, 210, 101, 102, 105)
	RETURNF 1
RETURNF 0

;-------------------------------------------------
;キャラARG:0のペニスが埋まっているか判断する関数
;性交は取得しないので注意！
;-------------------------------------------------
@IS_P_HOLD(ARG:0)
#FUNCTION
;手コキ、フェラ、パイズリ、素股、脚コキ、オナホ、尻尾、髪, 亀頭責め、電気あんま、触手オナホ
IF IS_EQUIP_TARGET(ARG:0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 106, 107, 103, 205) || IS_EQUIP_TARGET(ARG:0, 206)
	RETURNF 1
ENDIF
;イラマ、セルフオナホ、セルフフェラ、ニプルファック
IF IS_EQUIP_PLAYER(ARG:0, 90, 108, 109, 116, 117, 25)
	RETURNF 1
ENDIF
SIF IS_INSERT_SINGLE(MPLY:0, "Ｐ")
	RETURNF 1
RETURNF 0

;-------------------------------------------------
;Returns whether ARG:0's nipples are occupied
;-------------------------------------------------
@IS_N_HOLD(ARG:0)
#FUNCTION
;nipple sucking, nipple caps, milker, tentacle milking, tentacle mammary insertion, ニプルファック
IF IS_EQUIP_TARGET(ARG:0, 9, 64, 67, 207, 214, 25)
	RETURNF 1
ENDIF
RETURNF 0

;-------------------------------------------------
;キャラARG:0の尿道が埋まっているか判断する関数
;-------------------------------------------------
@IS_U_HOLD(ARG:0)
#FUNCTION
;尿道カテーテル,指挿入,尿道挿入、
IF IS_EQUIP_TARGET(ARG:0, 170, 171,172,215)
	RETURNF 1
ENDIF
RETURNF 0

;-------------------------------------------------
;キャラARG:0が拘束状態にあるかどうかを判定する関数
; RETURNF 1: 拘束, 2:吊り下げ、縛り付け
;-------------------------------------------------
@IS_BIND(ARG:0)
#FUNCTION
;縄
IF IS_EQUIP_TARGET(ARG:0, 85)
	;コマンドオプションを取得
	SELECTCASE GET_EQUIP_OPTION_BY_TARGET_CHARAID(ARG:0, 85)
			;拘束
		CASE 0
			RETURNF 1
			;吊り下げ、縛り付け
		CASEELSE
			RETURNF 2
	ENDSELECT
	;触手緊縛
ELSEIF IS_EQUIP_TARGET(ARG:0, 208)
	RETURNF 1
ENDIF
RETURNF 0

;-------------------------------------------------
;キャラARG:0が顔面騎乗中かどうかを判定する関数 ARG:1にターゲットを指定可能
;-------------------------------------------------
@IS_RIDE(ARG:0, ARG:1 = -1)
#FUNCTION
IF ARG:1 < 0
	SIF IS_EQUIP_PLAYER(ARG:0, 101, 102, 105)
		RETURNF 1
ELSE
	SIF SEARCH_EQUIP_M(ARG:0, ARG:1, 101, 102, 105) >= 0
		RETURNF 1
ENDIF
RETURNF 0

;-------------------------------------------------
;キャラARG:0が顔面騎乗されているかどうかを判定する関数 ARG:1にプレイヤーを指定可能
;-------------------------------------------------
@IS_RIDDEN(ARG:0, ARG:1 = -1)
#FUNCTION
IF ARG:1 < 0
	SIF IS_EQUIP_TARGET(ARG:0, 101, 102, 105)
		RETURNF 1
ELSE
	SIF SEARCH_EQUIP_M(ARG:1, ARG:0, 101, 102, 105) >= 0
		RETURNF 1
ENDIF
RETURNF 0

;--------------------------------------------------------
;対Ｐ奉仕系コマンドの継続フラグを解除する関数
;--------------------------------------------------------
@RELEASE_SERVE_P
FOR LOCAL:0, 0, MPLY_NUM
	FOR LOCAL:1, 0, MTAR_NUM
		CALL RELEASE_EQUIP_EX(10, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(11, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(12, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(13, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(14, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(15, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(16, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(17, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(18, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(91, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(94, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(103, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(106, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(107, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(108, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(109, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
		CALL RELEASE_EQUIP_EX(90, MTAR:(LOCAL:0), MPLY:(LOCAL:1))
	NEXT
NEXT

;--------------------------------------------------------
;口上の互換性をとるための関数／口が塞がっているかどうかをチェックする
;--------------------------------------------------------
@IS_EQUIP_CONTINUE(ARG:0, ARGS:1)
#FUNCTION
IF ARGS:1 == "口装着"
	;口枷・イラマチオ
	IF IS_EQUIP_TARGET(ARG:0, 86) || IS_EQUIP_TARGET(ARG:0, 90)
	ENDIF
ENDIF

RETURNF 0

;-------------------------------------------------
;Returns 1 if ARG:0 and ARG:1 cannot face due to an ongoing action
;-------------------------------------------------
;@CANNOT_FACE(ARG:0, ARG:1)
;#FUNCTION
;assjob
;SIF SEARCH_EQUIP_IC(15, ARG:0, ARG:1) >= 0
;	RETURNF 1

;-------------------------------------------------
;Returns 1 if ARG:0 and ARG:1 are forced to face due to an ongoing action
;-------------------------------------------------
;@MUST_FACE(ARG:0, ARG:1)
;#FUNCTION
;facing away (giving assjob)
;RETURNF 0

;-------------------------------------------------
;Returns if ARG:0 is capable of reaching most of ARG:1's body with their hands
;-------------------------------------------------
@CAN_REACH_BODY(ARG:0, ARG:1)
#FUNCTION
;bound
SIF IS_BIND(ARG:0)
	RETURNF 0
;unconscious
SIF !IS_PLAYABLE(ARG:0)
	RETURNF 0
;grovelling
SIF IS_EQUIP_PLAYER(ARG:0, 110)
	RETURNF 0
;giving/receiving footjob, buttjob, tribbing, doubledildo, trampling, footlicking
SIF SEARCH_EQUIP_IC_M(ARG:0, ARG:1, 14, 15, 21, 22, 103, 104) >= 0
	RETURNF 0
;fucked from behind (target of doggy/sitting backwards/reverse cowgirl/standing behind)
SIF GROUPMATCH(GET_SEX_POSITION(ARG:1, ARG:0), 2, 4, 6, 11)
	RETURNF 0

RETURNF 1

;Returns if there is an ongoing action that has CAN_REACH_BODY as a requirement
;actions like bondage that don't require continual manual work are exempt
@REACHING_BODY(ARG:0, ARG:1)
#FUNCTION
;caress, breast caress, foam play, boobjob, onahole, choke
SIF (SEARCH_EQUIP_M(ARG:0, ARG:1, 0, 1, 5, 12, 16, 94) >= 0)
	RETURNF 1
RETURNF 0

;-------------------------------------------------
; PLAYER(ARG:0)がTARGET(ARG:1)の性器に辿りつけるか
;Returns whether ARG:0 is capable of reaching ARG:1's groin with their hands
;-------------------------------------------------
@CAN_REACH_GROIN(ARG:0, ARG:1)
#FUNCTION
;limbs bound
IF IS_BIND(ARG:0)
	RETURNF 0
ENDIF
;unconscious
IF !IS_PLAYABLE(ARG:0)
	RETURNF 0
ENDIF
;grovelling	(土下座)
IF IS_EQUIP_PLAYER(ARG:0, 110)
	RETURNF 0
ENDIF
;giving/receiving footjob or trampling
IF SEARCH_EQUIP_IC_M(ARG:0, ARG:1, 14, 103) >= 0
	RETURNF 0
ENDIF
;fucked by target in doggy/sitting backwards/reverse standing positions
;->これらの体位は下腹部に手が届いても不自然でないはず
; IF GROUPMATCH(GET_SEX_POSITION(ARG:1, ARG:0), 2, 4, 11)
; 	RETURNF 0
; ENDIF
RETURNF 1

;Returns if there is an ongoing action that had CAN_REACH_GROIN as a requirement
@REACHING_GROIN(ARG:0, ARG:1)
#FUNCTION
SIF (SEARCH_EQUIP_M(ARG:0, ARG:1, 3, 4, 10, 18, 87, 88, 106, 107) >= 0)
	RETURNF 1

RETURNF 0

;-------------------------------------------------
;Returns whether ARG:0 is capable of reaching ARG:1's groin with their mouth
; ARG:0 PLAYER, ARG:1 TARGET
;-------------------------------------------------
@CAN_LICK_GROIN(ARG:0, ARG:1, ARG:2 = 0)
#FUNCTION
;mouth occupied
SIF IS_M_HOLD(ARG:0)
	RETURNF 0

;unconscious
SIF !IS_PLAYABLE(ARG:0) && ARG:2 == 0
	RETURNF 0
;fucking each other
SIF IS_INSERT_MUTUAL(ARG:0, ARG:1)
	RETURNF 0
;player is hardly bound
SIF IS_BIND(ARG:0) >= 2
	RETURNF 0
;both bound
SIF (IS_BIND(ARG:0) && IS_BIND(ARG:1))
	RETURNF 0
;target is riding someone else
SIF IS_RIDE(ARG:1) && !IS_RIDE(ARG:1, ARG:0)
	RETURNF 0
;giving/receiving scissoring, doubledildo, frotting, trampling, footlicking, footjob
SIF SEARCH_EQUIP_IC_M(ARG:0, ARG:1, 21, 22, 23, 103, 104, 14) >= 0
	RETURNF 0
;facing away (giving assjob)
SIF SEARCH_EQUIP(15, ARG:0, ARG:1) >= 0
	RETURNF 0
;target is fucked or fucking in sitting position
SIF IS_EQUIP_TARGET(ARG:1, 32, 42) || IS_EQUIP_PLAYER(ARG:1, 32, 42)
	RETURNF 0
;one participant grovelling, but not the other
SIF (IS_EQUIP_PLAYER(ARG:0, 110) + IS_EQUIP_PLAYER(ARG:1, 110)) == 1
	RETURNF 0

RETURNF 1

;-------------------------------------------------
;Returns if there is an ongoing action that had CAN_LICK_GROIN as a requirement
;-------------------------------------------------
@LICKING_GROIN(ARG:0, ARG:1)
#FUNCTION
;cunnilingus, BJ, rimjob, ball licking, facefuck, glans blowjob
SIF (SEARCH_EQUIP_M(ARG:0, ARG:1, 2, 11, 8, 19, 90, 107) >= 0)
	RETURNF 1

RETURNF 0

;-------------------------------------------------
;;; 手を自由に使える状態か
;-------------------------------------------------
@CAN_USE_HAND(ARG:0)
#FUNCTION
IF IS_BIND(ARG:0)
	RETURNF 0
ENDIF
;unconscious
IF !IS_PLAYABLE(ARG:0)
	RETURNF 0
ENDIF
RETURNF 1

;-------------------------------------------------
;Returns whether ARG:0 is capable of reaching most of ARG:1's frontal body with their mouth
;-------------------------------------------------
@CAN_LICK_BODY(ARG:0, ARG:1)
#FUNCTION
;mouth occupied
SIF IS_M_HOLD(ARG:0)
	RETURNF 0
;unconscious
SIF !IS_PLAYABLE(ARG:0)
	RETURNF 0
;both bound
SIF (IS_BIND(ARG:0) && IS_BIND(ARG:1))
	RETURNF 0
;player is ridden
SIF IS_RIDDEN(ARG:0)
	RETURNF 0
;not facing - fucking or fucked from behind by target (doggy/sitting backwards/reverse cowgirl/standing behind)
SIF GROUPMATCH(GET_SEX_POSITION(ARG:1, ARG:0), 2, 4, 6, 11) || GROUPMATCH(GET_SEX_POSITION(ARG:0, ARG:1), 2, 4, 6, 11)
	RETURNF 0

;giving/receiving tribadism, doubleidlo, assjob, trampling, footlicking, footjob)
SIF SEARCH_EQUIP_IC_M(ARG:0, ARG:1, 21, 22, 15, 103, 104, 14) >= 0
	RETURNF 0

;one participant grovelling, but not the other
SIF (IS_EQUIP_PLAYER(ARG:0, 110) + IS_EQUIP_PLAYER(ARG:1, 110)) == 1
	RETURNF 0

RETURNF 1

;-------------------------------------------------
;Returns if there is an ongoing action that had CAN_LICK_BODY as a requirement
;-------------------------------------------------
@LICKING_BODY(ARG:0, ARG:1)
#FUNCTION
;nipple sucking, kissing
SIF (SEARCH_EQUIP_M(ARG:0, ARG:1, 9) >= 0)
	RETURNF 1
RETURNF 0

;-------------------------------------------------
;Returns whether a penis action can be stacked on those already ongoing
;Args: 0:Player, 1:target, 2:action (command number). ARG:0 is rarely important.
;-------------------------------------------------
@P_STACKABLE(ARG:0, ARG:1, ARG:2)
#FUNCTION
LOCAL:1 = 0

;Existing action requires whole thing - blowjob trample, buttjob, frotting, sex
;Sex+tailjob is allowed
SIF IS_EQUIP_TARGET(ARG:1, 11, 103, 15) || IS_EQUIP(ARG:1, 23, 25) || (IS_INSERT_SINGLE(ARG:1, "Ｐ") && (!GROUPMATCH(ARG:2, GETNUM(TRAINNAME, "手コキ"), GETNUM(TRAINNAME, "尻尾コキ"))))
	RETURNF 0

;Weird special case: handjobs can be overlapped on top of a tentacle onahole
SIF IS_EQUIP_TARGET(ARG:1, 205) && !IS_EQUIP_TARGET(ARG:1, 10) && (ARG:2 == 10)
	RETURNF 1

;Tip in use - glans handjob, glans blowjob, facefuck, self-suck
SIF IS_EQUIP_TARGET(ARG:1, 106, 107) || IS_EQUIP_PLAYER(ARG:1, 117, 90)
	LOCAL:1 += 1

;Shaft in use - handjob, boobjob, footjob, onahole, tailjob, hairjob, T onahole, tentaclejob, onahole masturbation
;masturbation and Tmasturbation is a special case, it requires the shaft only if ARG:1 is solely male. This doesn't exactly match @COM. M and F masturbation ought to be different actions.
SIF IS_EQUIP_TARGET(ARG:1, 10, 12, 14, 16, 17, 18, 205, 206) || IS_EQUIP_PLAYER(ARG:1, 120, 116) || (IS_EQUIP_PLAYER(ARG:1, 120, 211) && !HAS_VAGINA(ARG:1))
	LOCAL:1 += 2

;tip+shaft used
SIF LOCAL:1 == 3
	RETURNF 0

;part already used, and command requires whole thing
SIF LOCAL:1 && ((ARG:2 >= 30 && ARG:2 <= 49) || GROUPMATCH(ARG:2, 52, 53, 55, 56, 57, 58, 160, 161) || GROUPMATCH(ARG:2, 11, 15, 23, 103))
	RETURNF 0

;shaft already used, and command requires shaft
SIF (LOCAL:1 == 2) && GROUPMATCH(ARG:2, 10, 12, 14, 16, 17, 18, 120, 211, 205, 206, 116)
	RETURNF 0

;tip already used, and command requires tip
SIF (LOCAL:1 == 1) && GROUPMATCH(ARG:2, 90, 106, 107, 117)
	RETURNF 0

RETURNF 1

;-------------------------------------------------
;returns whether ARG0 can fuck ARG1.
;-------------------------------------------------
@CAN_FUCK(ARG:0, ARG:1, ARG:2)
#FUNCTION

;player needs penis/strapon
SIF !HAS_PENIS(ARG:0, 1) && !IS_EQUIP_PLAYER((ARG:0), 50)
	RETURNF 0

;unconscious/left
SIF !IS_PLAYABLE(ARG:0)
	RETURNF 0

;penis occupied
SIF IS_P_HOLD(ARG:0)
	RETURNF 0

;being fucked by target
SIF IS_INSERT_MUTUAL(ARG:0, ARG:1) > 0
	RETURNF 0

;player is bound hardly
SIF IS_BIND(ARG:0) >= 2
	RETURNF 0

;both player and target are bound
SIF IS_BIND(ARG:0) && IS_BIND(ARG:1)
	RETURNF 0

;action requires player mobility
;プレイヤーの腕が自由
IF GROUPMATCH(ARG:2, 39, 49, 90)
	;player's limbs bound
	SIF IS_BIND(ARG:0)
		RETURNF 0
ENDIF

;プレイヤーが仰向け状態以外(騎乗位系以外)
IF !GROUPMATCH(ARG:2, 34, 44)
	;player is ridden by anyone (プレイヤーが顔面騎乗されている)
	SIF IS_RIDDEN(ARG:0)
		RETURNF 0
ENDIF

;action requires target mobility
;ターゲットが仰向け状態以外(正常位系以外)
IF !GROUPMATCH(ARG:2, 30, 38, 40, 48, 55, 56, 57, 58)
	;target is ridden by anyone
	SIF IS_RIDDEN(ARG:1)
		RETURNF 0
ENDIF

;action requires target to sit or lay down
;ターゲットが仰向け、うつ伏せ、座り状態
IF GROUPMATCH(ARG:2, 13, 21, 30, 31, 32, 33, 34, 35, 37, 38, 40, 41, 44, 45, 47, 48, 59, 90)
	;吊り下げ、縛り付け
	SIF IS_BIND(ARG:1) >= 2
		RETURNF 0
ENDIF

;prostrate player
SIF IS_EQUIP_PLAYER(ARG:0, 110)
	RETURNF 0

;prostrate target, unless doggy
SIF IS_EQUIP_PLAYER(ARG:1, 110) && !GROUPMATCH(ARG:2, 31, 41, 172)
	RETURNF 0

;player or target is riding
SIF IS_RIDE(ARG:0) || IS_RIDE(ARG:1)
	RETURNF 0

;ridden by target
SIF IS_RIDDEN(ARG:0, ARG:1)
	RETURNF 0

;giving foam play to someone besides target
SIF IS_EQUIP_PLAYER(ARG:0, 5) && !(SEARCH_EQUIP(5, ARG:0, ARG:1) >= 0)
	RETURNF 0
;giving (to target) or receiving (from target) Boobjob, Thighjob, Footjob, Buttjob, Hairjob, Facefuck, trample, Foot licking
SIF (SEARCH_EQUIP_IC_M(ARG:0, ARG:1, 12, 13, 14, 15, 18, 90, 103) >= 0)
	RETURNF 0

;receiving footlicking from target, unless reverse cowgirl
SIF (SEARCH_EQUIP(104, ARG:1, ARG:0) >= 0) && ARG:2 != 35 && ARG:2 != 45
	RETURNF 0

;giving footlicking to target, unless cowgirl or mating press
SIF (SEARCH_EQUIP(104, ARG:0, ARG:1) >= 0) && !GROUPMATCH(ARG:2, 34, 38, 44, 48)
	RETURNF 0

;target is getting a footjob, unless doggy, sitting backwards, cowgirl, reverse cowgirl
SIF (IS_EQUIP_TARGET(ARG:1, 14) && !GROUPMATCH(ARG:2, 31, 33, 34, 35, 41, 43, 44, 45, 172))
	RETURNF 0

;being fucked by a third party: tribadism, doubledildo, frotting
SIF IS_EQUIP(ARG:0, 21, 22, 23)
	RETURNF 0
;licking groin or having groin licked
SIF LICKING_GROIN(ARG:0, ARG:1) || LICKING_GROIN(ARG:1, ARG:0)
	RETURNF 0
RETURNF 1

;-------------------------------------------------
;Returns 1 if an action is already happening with the exact same MPLYs and MTARs
;-------------------------------------------------
@COM_ALREADY_HAPPENING(COM)
#FUNCTION
#DIM COM
#DIM MEQUIP_IDX
#DIM Found
;全継続コマンドについて確認
FOR MEQUIP_IDX, 0, MEQUIP_NUM
	;対象コマンドと継続コマンドが同一
	IF MEQUIP:(MEQUIP_IDX) == COM
		;継続コマンドと現在選択中の実行者と対象者の総数がそれぞれ同一
		IF MEQUIP_PLAYER_NUM:(MEQUIP_IDX) == MPLY_NUM && MEQUIP_TARGET_NUM:(MEQUIP_IDX) == MTAR_NUM
			;継続コマンドの全実行者について確認
			FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(MEQUIP_IDX)
				Found = 0
				;現在選択中の全実行者について確認
				FOR LOCAL:2, 0, MPLY_NUM
					SIF MEQUIP_PLAYER:(MEQUIP_IDX):(LOCAL:1) == MPLY:(LOCAL:2)
						Found = 1
				NEXT
				SIF !Found
					GOTO NO_MATCH
			NEXT
			;継続コマンドの全対象者について確認
			FOR LOCAL:1, 0, MEQUIP_TARGET_NUM:(MEQUIP_IDX)
				Found = 0
				;現在選択中の全対象者について確認
				FOR LOCAL:2, 0, MTAR_NUM
					SIF MEQUIP_TARGET:(MEQUIP_IDX):(LOCAL:1) == MTAR:(LOCAL:2)
						Found = 1
				NEXT
				SIF !Found
					GOTO NO_MATCH
			NEXT
			;all players and targets checked
			RETURNF 1
		ENDIF
	ENDIF
	$NO_MATCH
NEXT

RETURNF 0

@SWAP_MEQUIP(ARG:0, ARG:1)
SWAP MEQUIP:(ARG:0), MEQUIP:(ARG:1)
FOR LOCAL, 0, MAX_MEQUIP_PLAYER
	SWAP MEQUIP_PLAYER:(ARG:0):(LOCAL), MEQUIP_PLAYER:(ARG:1):(LOCAL)
NEXT
FOR LOCAL, 0, MAX_MEQUIP_TARGET
	SWAP MEQUIP_TARGET:(ARG:0):(LOCAL), MEQUIP_TARGET:(ARG:1):(LOCAL)
NEXT
SWAP MEQUIP_PLAYER_NUM:(ARG:0), MEQUIP_PLAYER_NUM:(ARG:1)
SWAP MEQUIP_TARGET_NUM:(ARG:0), MEQUIP_TARGET_NUM:(ARG:1)
SWAP MEQUIP_INITIATIVE:(ARG:0), MEQUIP_INITIATIVE:(ARG:1)
SWAP MEQUIP_OPTION:(ARG:0), MEQUIP_OPTION:(ARG:1)
SWAP MEQUIP_TURN:(ARG:0), MEQUIP_TURN:(ARG:1)
SWAP MEQUIP_CUT:(ARG:0), MEQUIP_CUT:(ARG:1)


code:
;声援
;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME600
IF TFLAG:公演_趣向 == 1
	RESULTS:0 = 囃し立てる
ELSE
	RESULTS:0 = 声援
ENDIF
;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE600
;共通部分
CALL COM_ABLE_COMMON(600)
SIF RESULT == 0
	RETURN 0
IF FLAG:クエストモード
	SIF TCVAR:(MPLY:0):離脱フラグ != 離脱フラグ_観客
		RETURN 0
ELSE
	SIF !C_COND("行動:鑑賞中",,MPLY)
		RETURN 0
ENDIF
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM600
#DIM CHARA_ID
#DIM  DYNAMIC 露出度
#DIMS DYNAMIC 衣装名_胸
#DIMS DYNAMIC 衣装名_秘部
#DIMS DYNAMIC 衣装描写
#DIM  DYNAMIC 誘惑レート

衣装名_胸 '= @"%C_COND_MAP_GETS(MTAR, "被覆衣装名_胸")%"
衣装名_秘部 '= @"%C_COND_MAP_GETS(MTAR, "被覆衣装名_秘部")%"
CALL SKILL_GET_LEVEL(MTAR, スキル_大分類_性技, "SEDUCTION")
誘惑レート = RESULT
;スケベ公演
IF TFLAG:公演_趣向 == 1
	CALL HO_CHECK_NAKED(MTAR)
	露出度 = RESULT
	IF 露出度 < 3
		PRINTFORMW %ANAME(MPLY:0, MPLY_NUM)%は下品な笑みを浮かべ%ANAME(MTAR)%に服を脱ぐよう要求してきた…
		{
			LOCALS = %TEXT_CONCATEC(
				@"<button value='100'>[(上)%衣装名_胸%を脱ぐ]</button>" + "
", !C_COND("露出_胸:露出",,MTAR) && 誘惑レート > 0
				,@"<button value='101'>[(下)%衣装名_秘部%を脱ぐ]</button>" + "
", !C_COND("露出_秘部:露出",,MTAR) && 誘惑レート > 0
				,@"<button value='102'>[(上)%衣装名_胸%をアピール]</button>" + "
", C_COND("露出_胸:下着",,MTAR) && 誘惑レート > 0
				,@"<button value='103'>[(下)%衣装名_秘部%をアピール]</button>" + "
", C_COND("露出_秘部:下着",,MTAR) && 誘惑レート > 0
				,@"<button value='104'>[そんなことは出来ない]</button>" + "
", 1
				)%
		}
		HTML_PRINT LOCALS
		WHILE 1
			ONEINPUT
			CLEARLINE 1
			IF INRANGE(RESULT, 100, 104)
				BREAK
			ENDIF
		WEND
		PRINTL
		SELECTCASE RESULT
				;脱ぐ
			CASE 100, 101
				IF RESULT == 100
					衣装描写 '= @"%C_COND_MAP_GETS(MTAR, "被覆衣装描写_胸")%"
					PRINTFORML %ANAME(MTAR)%は観衆の要望に応えるように%衣装描写%を脱ぎ下ろした…
					CALL HO_STRIP(MTAR, 被覆部位_乳首, RAND:3 ? 衣装状態_脱 # 衣装状態_半脱, 1)
					衣装描写 '= @"%C_COND_MAP_GETS(MTAR, "被覆衣装描写_胸")%"
					IF C_COND("露出_胸:下着",,MTAR)
						CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%衣装描写%@/C@が観衆たちの前にあらわになった……", 1)
					ELSEIF C_COND("露出_胸:露出",,MTAR)
						CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%STR_BODY("胸：長", MTAR)%@/C@が観衆たちの前にあらわになった……", 1)
					ENDIF
					PRINTL
					;イベント口上設定
					CALL ADD_SITU("脱衣_胸")
					CALL KJ_EVENT(MTAR, "公演_脱衣")
				ELSE
					衣装描写 '= @"%C_COND_MAP_GETS(MTAR, "被覆衣装描写_秘部")%"
					PRINTFORML %ANAME(MTAR)%は観衆の要望に応えるように%衣装描写%を脱ぎ下ろした…
					CALL HO_STRIP(MTAR, 被覆部位_秘部, RAND:3 ? 衣装状態_脱 # 衣装状態_半脱, 1)
					衣装描写 '= @"%C_COND_MAP_GETS(MTAR, "被覆衣装描写_秘部")%"
					IF C_COND("露出_秘部:下着",,MTAR)
						CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%衣装描写%@/C@が観衆たちの前にあらわになった……", 1)
					ELSEIF C_COND("露出_秘部:露出",,MTAR)
						IF !HAS_PENIS(MTAR)
							CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%STR_BODY("クリ：感度：欲情", CHARA_ID)%@/C@が観衆たちの前にあらわになった……", 1)
						ELSE
							CALLF TAG_PRINT(@"@C:{カラー_ピンク}@ペニス@/C@が観衆たちの前にあらわになった……", 1)
						ENDIF
					ENDIF
					;イベント口上設定
					CALL ADD_SITU("脱衣_秘部")
					CALL KJ_EVENT(MTAR, "公演_脱衣")
					PRINTL
				ENDIF
				PRINTFORMW 観客から歓声が巻き起こる…
				FOR LOCAL, 0, MPLY_NUM
					CHARA_ID = MPLY:LOCAL
					SOURCE:CHARA_ID:歓楽 += 150
					SOURCE:CHARA_ID:嗜虐 += 25
					SOURCE:CHARA_ID:感応 += 900
				NEXT
				FOR LOCAL, 0, MTAR_NUM
					CHARA_ID = MTAR:LOCAL
					SOURCE:CHARA_ID:露出 = 800
					SOURCE:CHARA_ID:逸脱 = 20
					SOURCE:CHARA_ID:不安 = 30
					EXP:CHARA_ID:露出経験値 += 2
				NEXT
				TFLAG:公演_達成率 += RAND(25, 35)
				TFLAG:公演_達成値補正 -= RAND(10, 15)
				;下着アピール
			CASE 102,103
				IF RESULT == 102
					衣装描写 '= @"%C_COND_MAP_GETS(MTAR, "被覆衣装描写_胸")%"
					PRINTFORML %ANAME(MTAR)%は%S_R(@"身体を反らせて%衣装描写%をさらけ出し/身体を屈めて%衣装描写%と胸元を見せつけて")%、観衆の劣情を煽り立てた
					CALL ADD_SITU("アピール_胸")
				ELSE
					衣装描写 '= @"%C_COND_MAP_GETS(MTAR, "被覆衣装描写_秘部")%"
					PRINTFORML %ANAME(MTAR)%は%S_R(@"脚を広げて%衣装描写%をさらけ出し/尻を突き出して%衣装描写%を見せつけて")%、観衆の劣情を煽り立てた
					CALL ADD_SITU("アピール_秘部")
				ENDIF
				;イベント口上設定
				CALL KJ_EVENT(MTAR, "公演_アピール")
				PRINTL
				PRINTFORMW 観客から歓声が巻き起こる…
				FOR LOCAL, 0, MPLY_NUM
					CHARA_ID = MPLY:LOCAL
					SOURCE:CHARA_ID:歓楽 += 75
					SOURCE:CHARA_ID:嗜虐 += 10
					SOURCE:CHARA_ID:感応 += 500
				NEXT
				FOR LOCAL, 0, MTAR_NUM
					CHARA_ID = MTAR:LOCAL
					SOURCE:CHARA_ID:露出 = 400
					SOURCE:CHARA_ID:逸脱 = 10
					SOURCE:CHARA_ID:不安 = 15
					EXP:CHARA_ID:露出経験値 += 1
				NEXT
				TFLAG:公演_達成率 += RAND(5, 15)
				TFLAG:公演_達成値補正 -= RAND(5, 10)
			CASE 104
				CALL KJ_EVENT(MTAR, "公演_脱衣拒否")
				PRINTFORMW %ANAME(MTAR)%が毅然と拒否すると、たちまち観客からブーイングが飛んできた…
				FOR LOCAL, 0, MPLY_NUM
					CHARA_ID = MPLY:LOCAL
					SOURCE:CHARA_ID:反感 = 400
					TFLAG:公演_達成率 -= RAND(10, 20)
					TFLAG:公演_達成値補正 += RAND(10, 15)
				NEXT
		ENDSELECT
	ELSE
		FOR LOCAL, 0, MPLY_NUM
			CHARA_ID = MPLY:LOCAL
			SOURCE:CHARA_ID:歓楽 += 100
		NEXT
		FOR LOCAL, 0, MTAR_NUM
			CHARA_ID = MTAR:LOCAL
			SOURCE:CHARA_ID:露出 = 400
			SOURCE:CHARA_ID:逸脱 = 10
			SOURCE:CHARA_ID:不安 = 15
		NEXT
		TFLAG:公演_達成率 += RAND(10, 20)
	ENDIF
ELSE
	FOR LOCAL, 0, MPLY_NUM
		CHARA_ID = MPLY:LOCAL
		SOURCE:CHARA_ID:歓楽 = 100
		TFLAG:公演_達成率 += RAND(10, 20)
	NEXT
	FOR LOCAL, 0, MTAR_NUM
		CHARA_ID = MTAR:LOCAL
		SOURCE:CHARA_ID:歓楽 = 50
	NEXT
	TFLAG:公演_達成値補正 -= RAND(5, 10)
ENDIF

CALL FL_PLAYSE("Whistle_0.mp3")

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE600
IF TFLAG:公演_趣向 == 1
	PRINTFORML %ANAME(MPLY:0, MPLY_NUM)%は%ANAME(MTAR:0, MTAR_NUM)%を囃し立て、野卑なヤジを飛ばした！
ELSE
	PRINTFORML %ANAME(MPLY:0, MPLY_NUM)%は%ANAME(MTAR:0, MTAR_NUM)%に声援を送った！
ENDIF

;--------------------------------------------------------
;地の文(パラメータ・刻印変動後)
;--------------------------------------------------------
@COM_TEXT_LAST600

;-------------------------------------------------
;コマンド区分
;-------------------------------------------------

@COM_AVAILABLE_WHEN600
RETURN コマンド_居住区

repo_name: napo/erafl

license: unknown


code:
;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME703
RESULTS:0 = 一緒に遊ぶ
RESULTS:1 = 一緒に遊ぶ
RESULTS:2 = 一緒に遊ぶ
RESULTS:3 = 一緒に遊ぶ
RESULTS:4 = 一緒に遊ぶ
RESULTS:5 = 一緒に遊ぶ

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE703
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
;共通部分
CALL COM_ABLE_COMMON(703)
SIF RESULT == 0
	RETURN 0
LOCAL:1 = 0
;遊べる場所にいる
CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "遊戯")
SIF RESULT == 0
	RETURN 0
;一緒に遊べる相手が最低一人は必要
CALL HO_CHECK_PLAY_WITH("遊戯中")
SIF RESULT == 0
	RETURN 0
;主人公がプレイヤーのとき限定
SIF MPLY:0 != MASTER
	RETURN 0
;プレイヤーの口が塞がっているなら不可
SIF IS_M_HOLD(MPLY:0)
	RETURN 0
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM703
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID

MPLY:0 = MASTER
;一度MTARを初期化
CALL CLEAR_MTAR()
;実行対象のキャラを纏めてMTARに登録
CALL HO_SET_MTAR_PLAY_WITH("遊戯中")
;実行対象のキャラを取得
CALL HO_CHECK_PLAY_WITH("遊戯中")
_LIST_MEMBER = %RESULTS%
MEMBER_NUM = RESULT

;コマンドの成否をTFLAG:コマンド成否にセット
CALL JUDGE_COM_RESULT(MTAR:0, 5, 5)

;;MASTERの処理
;-------------------------------------------------
;固定で入るソース
SOURCE:(MPLY:0):接触 = 40
;親密に応じた歓楽のソース追加
SOURCE:(MPLY:0):歓楽 = 10
CALL ADD_SOURCE_KANRAKU(MPLY:0, 180)
SOURCE:(MPLY:0):歓楽 = MAX(SOURCE:(MPLY:0):歓楽, 0)
;主導権に応じたソースの追加
CALL ADD_SOURCE_INITIATIVE_N(MPLY:0, 50, 50)
;失敗
IF TFLAG:コマンド成否 == -1
	TIMES SOURCE:(MPLY:0):歓楽, 0.20
	TIMES SOURCE:(MPLY:0):愛情, 0.20
	SOURCE:(MPLY:0):不満 += 500
	;成功
ELSEIF TFLAG:コマンド成否 == 0
	;大成功
ELSE
	TIMES SOURCE:(MPLY:0):歓楽, 2.00
	TIMES SOURCE:(MPLY:0):愛情, 2.00
ENDIF
TCVAR:(MPLY:0):HO体力増減値 = -300

;;ターゲットの処理
;-------------------------------------------------
FOR LOCAL,0 ,MEMBER_NUM
	;固定で入るソース
	SOURCE:(MTAR:LOCAL):接触 = 40

	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = 20
	CALL ADD_SOURCE_KANRAKU(MTAR:LOCAL, 180)
	SOURCE:(MTAR:LOCAL):歓楽 = MAX(SOURCE:(MTAR:LOCAL):歓楽, 0)

	;ターゲットが子供なら歓楽が多めに
	IF TALENT:(MTAR:LOCAL):幼児 || TALENT:(MTAR:LOCAL):幼稚
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 1.20
		TIMES SOURCE:(MTAR:LOCAL):愛情, 0.70
	ENDIF

	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_N(MTAR:LOCAL, 50, 50)

	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 0.20
		TIMES SOURCE:(MTAR:LOCAL):愛情, 0.20
		SOURCE:(MTAR:LOCAL):不満 += 500
		TCVAR:(MTAR:LOCAL):HOムード値 -= 5
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		TCVAR:(MTAR:LOCAL):HOムード値 += 2
		;大成功
	ELSE
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 2.00
		TIMES SOURCE:(MTAR:LOCAL):愛情, 2.00
		TCVAR:(MTAR:LOCAL):HOムード値 += 5
	ENDIF
	TCVAR:(MTAR:LOCAL):HO体力増減値 = -300
NEXT
;ゲームに勝ってもボーナスなどはつかないのでただのフレーバー
LOCAL:0 = RAND(0, MEMBER_NUM + 1)
IF LOCAL:0 <= MEMBER_NUM
	TFLAG:コマンド代表者 = TOINT(LIST_GET(_LIST_MEMBER, LOCAL:0))
ELSE
	TFLAG:コマンド代表者 = MASTER
ENDIF

;主導度変化基準値
TFLAG:主導度変化基準値 = 2

;倒錯度変化基準値
TFLAG:倒錯度変化基準値 = -2

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE703
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
CALL HO_CHECK_PLAY_WITH("遊戯中")
_LIST_MEMBER = %RESULTS%
MEMBER_NUM = RESULT
CALL HO_GET_USE_MODULE_INFO(MASTER)
IF STRFINDU(RESULTS, "テーブル") != -1
	LOCALS = %SPLIT_RAND("ポーカー/セブンブリッジ/ババ抜き/ブラックジャック",1)%
	PRINTFORML %ANAME(MASTER)%は%ANAME(TOINT(LIST_GET(_LIST_MEMBER, 0)), MEMBER_NUM)%と一緒に%LOCALS%に興じた
	PRINTFORML ゲームの勝者は%ANAME(TFLAG:コマンド代表者)%のようだ
ELSEIF STRFINDU(RESULTS, "ビリヤード") != -1
	PRINTFORML 見事⑨ボールを射落としたのは%ANAME(TFLAG:コマンド代表者)%のようだ
ELSE
	PRINTFORML %ANAME(MASTER)%は%ANAME(TOINT(LIST_GET(_LIST_MEMBER, 0)), MEMBER_NUM)%と一緒にゲームに興じた
	PRINTFORML このラウンドを制したのは%ANAME(TFLAG:コマンド代表者)%のようだ
ENDIF
;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST703

;-------------------------------------------------

;コマンド区分
;-------------------------------------------------
@COM_AVAILABLE_WHEN703
RETURN コマンド_居住区


code:
;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME704
RESULTS:0 = 食事する
RESULTS:1 = 食事する
RESULTS:2 = 食事する
RESULTS:3 = 食事する
RESULTS:4 = 食事する
RESULTS:5 = 食事する

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE704
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
;共通部分
CALL COM_ABLE_COMMON(704)
SIF RESULT == 0
	RETURN 0
;食事できる場所にいる
CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "食事")
SIF RESULT == 0
	RETURN 0
;主人公が空腹のときのみ
SIF TCVAR:MASTER:空腹度 < 280
	RETURN 0
;主人公がプレイヤーのとき限定
SIF MPLY:0 != MASTER || MPLY_NUM > 1
	RETURN 0
;プレイヤーの口が塞がっているなら不可
SIF IS_M_HOLD(MPLY:0)
	RETURN 0
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM704
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID

MPLY:0 = MASTER
TCVAR:MASTER:空腹度 = 0
;一度MTARを初期化
CALL CLEAR_MTAR()
CALL HO_GET_COMPANION_LIST()
_LIST_MEMBER = %RESULTS%
MEMBER_NUM = RESULT

FOR LOCAL, 0, MEMBER_NUM
	CHARA_ID = TOINT(LIST_GET(_LIST_MEMBER, LOCAL))
	;同行中なら空腹時のみMTARに追加
	IF TCVAR:CHARA_ID:相席フラグ != 1
		IF TCVAR:CHARA_ID:空腹度 >= 300
			CALL ADD_MTAR(CHARA_ID)
			TCVAR:CHARA_ID:空腹度 = 0
		ENDIF
		;食事中ならMTARに追加。食事中アクション実行時に空腹度は0になってるため空腹度は初期化しない
	ELSE
		CALL HO_GET_CHARAACT(CHARA_ID)
		IF RESULTS == "食事中"
			CALL ADD_MTAR(CHARA_ID)
		ENDIF
	ENDIF
NEXT

;MTARが誰もいない場合はMTARに自分自身を指定
SIF MTAR_NUM == 0
	MTAR:0 = MPLY:0

;コマンドの成否をTFLAG:コマンド成否にセット
CALL JUDGE_COM_RESULT(MTAR:0, 5, 5)

;;MASTERの処理
;-------------------------------------------------
;固定で入るソース
SOURCE:(MPLY:0):接触 = 80
;親密に応じた歓楽のソース追加
CALL ADD_SOURCE_KANRAKU(MPLY:0, 200)
SOURCE:(MPLY:0):歓楽 = MAX(SOURCE:(MPLY:0):歓楽, 0)

;主導権に応じたソースの追加
CALL ADD_SOURCE_INITIATIVE_N(MPLY:0, 50, 50)
;失敗
IF TFLAG:コマンド成否 == -1
	TIMES SOURCE:(MPLY:0):歓楽, 0.20
	TIMES SOURCE:(MPLY:0):愛情, 0.20
	;成功
ELSEIF TFLAG:コマンド成否 == 0
	;大成功
ELSE
	TIMES SOURCE:(MPLY:0):歓楽, 2.00
	TIMES SOURCE:(MPLY:0):愛情, 2.00
ENDIF

;体力・気力を回復
TCVAR:(MPLY:0):HO体力増減値 = 300 + (100 * TFLAG:料理準備度 / 2)
TCVAR:(MPLY:0):HO気力増減値 = 200 + (100 * TFLAG:料理準備度 / 2)
;口の中を綺麗に
CUM_CUR_AMOUNT:MPLY:射精部位_口 = 0

;;ターゲットの処理
;-------------------------------------------------
FOR LOCAL,0 , MTAR_NUM
	;MTARがMASTERならMPLYで処理済みのはずなので処理しない
	SIF MTAR:LOCAL == MASTER
		CONTINUE
	;固定で入るソース
	SOURCE:(MTAR:LOCAL):接触 = 80

	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = 10
	CALL ADD_SOURCE_KANRAKU(MTAR:LOCAL, 200)
	SOURCE:(MTAR:LOCAL):歓楽 = MAX(SOURCE:(MTAR:LOCAL):歓楽, 0)

	;親密に応じた愛情のソース追加
	CALL ADD_SOURCE_AIZYOU(MTAR:LOCAL, 60)

	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_N(MTAR:LOCAL, 50, 50)

	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 0.20
		TIMES SOURCE:(MTAR:LOCAL):愛情, 0.20
		TCVAR:(MTAR:LOCAL):HOムード値 -= 5
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		TCVAR:(MTAR:LOCAL):HOムード値 += 2
		;大成功
	ELSE
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 2.00
		TIMES SOURCE:(MTAR:LOCAL):愛情, 2.00
		TCVAR:(MTAR:LOCAL):HOムード値 += 5
	ENDIF

	;体力・気力を回復
	TCVAR:(MTAR:LOCAL):HO体力増減値 = 300 + (100 * TFLAG:料理準備度 / 2)
	TCVAR:(MTAR:LOCAL):HO気力増減値 = 200 + (100 * TFLAG:料理準備度 / 2)
	;口の中を綺麗に
	CUM_CUR_AMOUNT:(MTAR:LOCAL):射精部位_口 = 0
NEXT

;主導度変化基準値
TFLAG:主導度変化基準値 = 2

;倒錯度変化基準値
TFLAG:倒錯度変化基準値 = -2

CALL FL_PLAYSE("Put_0.mp3")

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE704
#DIMS MAP
#DIMS 料理名
#DIMS 生産者表記
MAP '= @"MAP_{HO_MASTER現在地}_ROOM_EFFECT"

IF MTAR:0 == MASTER
	PRINTFORML %ANAME(MASTER)%は一人で食事をとった
ELSE
	PRINTFORML %ANAME(MASTER)%は%ANAME(MTAR:0, MTAR_NUM)%と一緒に食事をとった
ENDIF
IF MAP_HAS(MAP, "昼食準備済") > 0 || MAP_HAS(MAP, "夕食準備済") > 0 || MAP_HAS(MAP, "軽食準備済") > 0
	料理名 = %HO_献立名リスト()%
	IF LIST_COUNT(HO_LIST_調理担当者) > 0
		生産者表記 = %ANAME(TOINT(LIST_RAND(HO_LIST_調理担当者)))%%S_R("が料理した/特製の/が手作りした/お手製の/の作った")%
		CALLF TAG_PRINT(@"　……献立は@C:{カラー_黄}@%生産者表記 + 料理名%@/C@だ", 1)
	ELSE
		CALLF TAG_PRINT(@"　……献立は@C:{カラー_黄}@%料理名%@/C@だ", 1)
	ENDIF
ELSEIF HO_OCLOCK() > 1130
	PRINTFORML 　……特に準備もないのでありあわせの糧食で済ませた
ENDIF
;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST704

;-------------------------------------------------

;コマンド区分
;-------------------------------------------------
@COM_AVAILABLE_WHEN704
RETURN コマンド_居住区


code:
;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME705
RESULTS:0 = 休憩する
IF IS_BATHING(MPLY)
	RESULTS:0 = 湯船でくつろぐ
ENDIF

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE705
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
;共通部分
CALL COM_ABLE_COMMON(705)
SIF RESULT == 0
	RETURN 0

SIF MPLY_NUM > 1
	RETURN 0

IF FLAG:ハウジングモード && !FLAG:クエストモード
	SIF MPLY != MASTER
		RETURN 0
ENDIF

IF IS_BATHING(MPLY) && !TCVAR:MPLY:HO入浴済フラグ
	SIF !C_COND("設備属性:浴槽",,MPLY)
		RETURN 0
ELSE
	;休憩できる場所にいる
	SIF !C_COND("設備用途:休憩",,MPLY)
		RETURN 0
ENDIF
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM705
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID

IF !IS_BATHING(MPLY)
	;全ての継続状況を初期化
	FOR LOCAL, 0, MPLY_NUM
		CALL RELEASE_ALL_EQUIP(MPLY:LOCAL, 1)
	NEXT
	FOR LOCAL, 0, MTAR_NUM
		CALL RELEASE_ALL_EQUIP(MTAR:LOCAL, 1)
	NEXT
ENDIF

;一度MTARを初期化
CALL CLEAR_MTAR()
CALL HO_GET_COMPANION_LIST()
_LIST_MEMBER = %RESULTS%
MEMBER_NUM = RESULT

FOR LOCAL, 0, MEMBER_NUM
	CHARA_ID = TOINT(LIST_GET(_LIST_MEMBER, LOCAL))
	IF TCVAR:CHARA_ID:相席フラグ != 1
		CALL ADD_MTAR(CHARA_ID)
		;入浴判定
	ELSEIF IS_BATHING(MPLY) && IS_BATHING(CHARA_ID)
		IF !TCVAR:CHARA_ID:HO入浴済フラグ
			CALL ADD_MTAR(CHARA_ID)
		ENDIF
	ELSE
		;同一行動中ならMTARに追加。
		CALL HO_GET_CHARAACT(CHARA_ID)
		IF RESULTS == "休憩中"
			CALL ADD_MTAR(CHARA_ID)
		ENDIF
	ENDIF
NEXT

;MTARが誰もいない場合はMTARに自分自身を指定
SIF MTAR_NUM == 0
	CALL ADD_MTAR(MPLY)

;コマンドの成否をTFLAG:コマンド成否にセット
CALL JUDGE_COM_RESULT(MTAR:0, 5, 5)

;PLAYERの処理
;-------------------------------------------------
;単独実行ではなく相手がいる場合のみ
IF MPLY != MTAR
	;固定で入るソース
	SOURCE:(MPLY:0):接触 = 20
	;親密に応じた歓楽のソース追加
	CALL ADD_SOURCE_KANRAKU(MPLY:0, 50)
	SOURCE:(MPLY:0):歓楽 = MAX(SOURCE:(MPLY:0):歓楽, 0)

	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_N(MPLY:0, 30, 30)
	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:(MPLY:0):歓楽, 0.20
		TIMES SOURCE:(MPLY:0):愛情, 0.20
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		;大成功
	ELSE
		TIMES SOURCE:(MPLY:0):歓楽, 2.00
		TIMES SOURCE:(MPLY:0):愛情, 2.00
	ENDIF
ENDIF

IF IS_BATHING(MPLY:0)
	;体力・気力を回復
	TCVAR:(MPLY:0):HO体力増減値 = 500
	TCVAR:(MPLY:0):HO気力増減値 = 150
	TCVAR:(MPLY:0):HO入浴済フラグ = 1
ELSE
	;体力・気力を回復
	TCVAR:(MPLY:0):HO体力増減値 = 150
	TCVAR:(MPLY:0):HO気力増減値 = 50
ENDIF
;;ターゲットの処理
;-------------------------------------------------
FOR LOCAL,0 , MTAR_NUM
	;MTARとMPLYが同一人物(単独での実行)ならMPLYで処理済みのはずなので処理しない
	SIF MTAR:LOCAL == MPLY
		CONTINUE
	;固定で入るソース
	SOURCE:(MTAR:LOCAL):接触 = 20

	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = 10
	CALL ADD_SOURCE_KANRAKU(MTAR:LOCAL, 50)
	SOURCE:(MTAR:LOCAL):歓楽 = MAX(SOURCE:(MTAR:LOCAL):歓楽, 0)

	;親密に応じた愛情のソース追加
	CALL ADD_SOURCE_AIZYOU(MTAR:LOCAL, 30)

	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_N(MTAR:LOCAL, 30, 30)

	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 0.20
		TIMES SOURCE:(MTAR:LOCAL):愛情, 0.20
		TCVAR:(MTAR:LOCAL):HOムード値 -= 5
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		TCVAR:(MTAR:LOCAL):HOムード値 += 2
		;大成功
	ELSE
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 2.00
		TIMES SOURCE:(MTAR:LOCAL):愛情, 2.00
		TCVAR:(MTAR:LOCAL):HOムード値 += 5
	ENDIF
	IF IS_BATHING(MTAR:LOCAL)
		;体力・気力を回復
		TCVAR:(MTAR:LOCAL):HO体力増減値 = 500
		TCVAR:(MTAR:LOCAL):HO気力増減値 = 150
		TCVAR:(MTAR:LOCAL):HO入浴済フラグ = 1
	ELSE
		;体力・気力を回復
		TCVAR:(MTAR:LOCAL):HO体力増減値 = 150
		TCVAR:(MTAR:LOCAL):HO気力増減値 = 50
	ENDIF
NEXT

;主導度変化基準値
TFLAG:主導度変化基準値 = 2

;倒錯度変化基準値
TFLAG:倒錯度変化基準値 = -2

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE705
IF IS_BATHING(MPLY)
	IF MTAR:0 == MPLY
		PRINTFORML %ANAME(MPLY)%は湯船でゆったりとくつろいだ
	ELSE
		PRINTFORML %ANAME(MPLY)%は%ANAME(MTAR:0, MTAR_NUM)%と一緒に湯船でゆったりとくつろいだ
	ENDIF
ELSE
	IF MTAR:0 == MPLY
		PRINTFORML %ANAME(MPLY)%は少し休憩をとった
	ELSE
		PRINTFORML %ANAME(MPLY)%は%ANAME(MTAR:0, MTAR_NUM)%と一緒に少し休憩をとった
	ENDIF
ENDIF
;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST705

;-------------------------------------------------

;コマンド区分
;-------------------------------------------------
@COM_AVAILABLE_WHEN705
RETURN コマンド_居住区


code:
;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME706
RESULTS:0 = 運動する
RESULTS:1 = 運動に付き合う

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE706
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
;共通部分
CALL COM_ABLE_COMMON(706)
SIF RESULT == 0
	RETURN 0
LOCAL:1 = 0
;コマンドが実行可能な環境にいる
SIF !C_COND("設備用途:運動",, MPLY)
	RETURN 0
;実行は一人のみ
SIF MPLY_NUM != 1
	RETURN 0
;臨月or怪我なら不可
FOR LOCAL, 0, MTAR_NUM
	SIF CFLAG:(MTAR:LOCAL):行動不能状態 == 行動不能_臨月 || CFLAG:(MTAR:LOCAL):行動不能状態 == 3
		RETURN 0
NEXT
;体力30%以下のメンバーは実行不可
FOR LOCAL, 0, MPLY_NUM
	SIF IS_TIRED(MPLY:LOCAL)
		RETURN 0
NEXT
FOR LOCAL, 0, MTAR_NUM
	SIF IS_TIRED(MTAR:LOCAL)
		RETURN 0
NEXT
;プレイヤーの口が塞がっているなら不可
SIF IS_M_HOLD(MPLY:0)
	RETURN 0
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM706
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC MODULE_ID
#DIM DYNAMIC RATE
#DIM DYNAMIC 基礎経験値 = 3

;一度MTARを初期化
CALL CLEAR_MTAR()
;実行対象のキャラを纏めてMTARに登録
CALL HO_SET_MTAR_PLAY_WITH("運動中,訓練中")
;実行対象のキャラを取得
CALL HO_CHECK_PLAY_WITH("運動中,訓練中")
_LIST_MEMBER = %RESULTS%
MEMBER_NUM = RESULT
;疲労しているキャラを除外
FOR LOCAL, 0, MEMBER_NUM
	CHARA_ID = LIST_GETINT(_LIST_MEMBER, LOCAL)
	IF IS_TIRED(CHARA_ID)
		CALL DEL_MTAR(CHARA_ID)
	ENDIF
NEXT

;MTARが誰もいない場合はMTARに自分自身を指定
; SIF MTAR_NUM == 0
; 	CALL ADD_MTAR(MPLY)

IF MTAR_NUM > 0
	;コマンドの成否をTFLAG:コマンド成否にセット
	CALL JUDGE_COM_RESULT(MTAR:0, 5, 5)
ENDIF

;使用している設備による補正
CALL HO_GET_USE_MODULE_INFO(MASTER)
MODULE_ID = RESULT
IF MODULE_ID == 50 ;修練場を使用
	基礎経験値 += 2
ENDIF

;;MASTERの処理
;-------------------------------------------------
;体力の強化
CALL HO_ABLUP_MAXHP(MPLY:0, "運動")
TCVAR:(MPLY:0):HO体力増減値 = -600
TCVAR:(MPLY:0):汗量 += RAND(3000, 5000)

RATE = GROWTYPE_RATE(MPLY:0, "身体") * 15 / 10
EXP:(MPLY:0):GET_EXP(GETNUM(ABL, "身体")) += 基礎経験値 * RATE / 100

;;ターゲットの処理
;-------------------------------------------------
FOR LOCAL, 0, MTAR_NUM

	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = 20
	CALL ADD_SOURCE_KANRAKU(MTAR:LOCAL, 100)
	SOURCE:(MTAR:LOCAL):歓楽 = MAX(SOURCE:(MTAR:LOCAL):歓楽, 0)

	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_N(MTAR:LOCAL, 100, 100)

	;ターゲットがサボり魔なら効果減少
	IF TALENT:(MTAR:LOCAL):サボり魔
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 0.80
		SOURCE:(MTAR:LOCAL):反感 = 70 - SOURCE:(MTAR:LOCAL):歓楽 / 3
	ENDIF

	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 0.20
		TIMES SOURCE:(MTAR:LOCAL):不安, 1.50
		SOURCE:(MTAR:LOCAL):不満 += 300
		TCVAR:(MTAR:LOCAL):HOムード値 -= 5
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		TCVAR:(MTAR:LOCAL):HOムード値 += 2
		;大成功
	ELSE
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 2.00
		TIMES SOURCE:(MTAR:LOCAL):不安, 0.50
		TCVAR:(MTAR:LOCAL):HOムード値 += 5
	ENDIF
	;体力の強化
	CALL HO_ABLUP_MAXHP((MTAR:LOCAL), "運動")
	TCVAR:(MTAR:LOCAL):HO体力増減値 = -600
	TCVAR:(MTAR:LOCAL):汗量 += RAND(3000, 5000)

	RATE = GROWTYPE_RATE(MTAR:LOCAL, "身体") * 15 / 10
	EXP:(MTAR:LOCAL):GET_EXP(GETNUM(ABL, "身体")) += 基礎経験値 * RATE / 100

	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 0.20
		TIMES SOURCE:(MTAR:LOCAL):不安, 1.50
		SOURCE:(MTAR:LOCAL):不満 += 300
		;	LOCAL:2 = 1
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		;	LOCAL:2 = 1
		;大成功
	ELSE
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 2.00
		TIMES SOURCE:(MTAR:LOCAL):不安, 0.50
		;	LOCAL:2 = 2
	ENDIF

NEXT

;主導度変化基準値
TFLAG:主導度変化基準値 = 2

;倒錯度変化基準値
TFLAG:倒錯度変化基準値 = -2

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE706
;単独
IF !MTAR_NUM
	PRINTFORML %ANAME(MPLY:0)%は一人で運動した
ELSEIF IS_INITIATIVE(MASTER)
	PRINTFORML %ANAME(MPLY:0)%は%ANAME(MTAR:0), MTAR_NUM%と運動した
ELSE
	;相手より身体値が10以上劣っている
	IF ABL:(MPLY:0):身体 + 10 <= ABL:(MTAR:0):身体
		PRINTFORML %ANAME(MPLY:0)%は%ANAME(MTAR:0), MTAR_NUM%にみっちりと鍛えられた……
	ELSE
		PRINTFORML %ANAME(MPLY:0)%は%ANAME(MTAR:0), MTAR_NUM%の運動に付き合った
	ENDIF
ENDIF

IF TFLAG:コマンド成否 == 1
	PRINTFORML とても良い汗をかいた！
ELSEIF TFLAG:コマンド成否 == -1
	PRINTFORML ……あまり運動に身が入らなかった
ENDIF
PRINTFORML %ANAME(MPLY:0, MTAR_NUM + 1)%の体力が少し増えたようだ
;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST706

;-------------------------------------------------

;コマンド区分
;-------------------------------------------------
@COM_AVAILABLE_WHEN706
RETURN コマンド_居住区


code:
;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME707
RESULTS:0 = 模擬戦
RESULTS:1 = 模擬戦

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE707
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
;共通部分
CALL COM_ABLE_COMMON(707)
SIF RESULT == 0
	RETURN 0
;コマンドが実行可能な環境にいる
CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "運動")
SIF RESULT == 0
	RETURN 0
;主人公のみがMPLYの場合限定
SIF MPLY:0 != MASTER || MPLY_NUM > 1
	RETURN 0
;ターゲットがいない時不可
SIF MTAR:0 == -1 || TFLAG:参加者数 == 0
	RETURN 0
;臨月or怪我なら不可
FOR LOCAL, 0, MTAR_NUM
	SIF CFLAG:(MTAR:LOCAL):行動不能状態 == 行動不能_臨月 || CFLAG:(MTAR:LOCAL):行動不能状態 == 3
		RETURN 0
NEXT
;プレイヤーの口が塞がっているなら不可
SIF IS_M_HOLD(MPLY:0)
	RETURN 0
;体力30%以下のメンバーは実行不可
FOR LOCAL, 0, MPLY_NUM
	SIF IS_TIRED(MPLY:LOCAL)
		RETURN 0
NEXT
FOR LOCAL, 0, MTAR_NUM
	SIF IS_TIRED(MTAR:LOCAL)
		RETURN 0
NEXT
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM707
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC MODULE_ID
#DIM DYNAMIC TRAINER_LV
#DIM DYNAMIC TRAINER_ID
#DIM DYNAMIC EXP_RATE
#DIM DYNAMIC EXP_GAIN
#DIM DYNAMIC EXP_BASE_POINT = 3

#DIM DYNAMIC ATK_MEMBER_NUM
#DIM DYNAMIC DEF_MEMBER_NUM

MPLY:0 = MASTER
;一度MTARを初期化
CALL CLEAR_MTAR()
CALL HO_GET_COMPANION_LIST()
_LIST_MEMBER = %RESULTS%
MEMBER_NUM = RESULT
FOR LOCAL, 0, MEMBER_NUM
	SIF TOINT(LIST_GET(_LIST_MEMBER, LOCAL)) == MASTER
		CONTINUE
	CALL ADD_MTAR(TOINT(LIST_GET(_LIST_MEMBER, LOCAL)))
NEXT

;使用している設備による補正
CALL HO_GET_USE_MODULE_INFO(MASTER)
MODULE_ID = RESULT
IF MODULE_ID == 50 ;修練場を使用
	EXP_BASE_POINT += 2
ENDIF

;;戦闘イベント呼出
;-------------------------------------------------
;参加メンバーの初期化
CALL CC_INIT()
;MASTERは常に攻撃側
CALL CC_ADDCHARA("ATTACKER", MASTER)
ATK_MEMBER_NUM ++

;人数に応じてチーム分け
FOR LOCAL , 0, MEMBER_NUM
	CHARA_ID = TOINT(LIST_GET(_LIST_MEMBER, LOCAL))
	IF LOCAL == 0
		CALL CC_ADDCHARA("DEFENDER", CHARA_ID)
		DEF_MEMBER_NUM ++
	ELSE
		IF RAND:2 && ATK_MEMBER_NUM < 6
			CALL CC_ADDCHARA("ATTACKER", CHARA_ID)
			ATK_MEMBER_NUM ++
		ELSEIF DEF_MEMBER_NUM < 6
			CALL CC_ADDCHARA("DEFENDER", CHARA_ID)
			DEF_MEMBER_NUM ++
		ENDIF
	ENDIF
NEXT
;戦闘イベント呼出
CALL CLOSE_COMBAT()
;経験値算出
FOR LOCAL, 0, MPLY_NUM
	CALL SKILL_GET_LEVEL(MPLY:LOCAL, スキル_大分類_生活, "TRAINER_SKILL_BATTLE")
	IF RESULT > TRAINER_LV
		TRAINER_LV = RESULT
		TRAINER_ID = MPLY:LOCAL
	ENDIF
NEXT
FOR LOCAL, 0, MTAR_NUM
	CALL SKILL_GET_LEVEL(MTAR:LOCAL, スキル_大分類_生活, "TRAINER_SKILL_BATTLE")
	IF RESULT > TRAINER_LV
		TRAINER_LV = RESULT
		TRAINER_ID = MTAR:LOCAL
	ENDIF
NEXT
IF TRAINER_LV
	CALL SKILL_GET_EFFECT_RATE(スキル_ジャンル_生活, "TRAINER_SKILL_BATTLE", TRAINER_LV)
	EXP_RATE = RESULT
ENDIF
EXP_GAIN = (EXP_BASE_POINT * (EXP_RATE + 100)) / 100
CALL CC_ADD_COMBAT_EXP(EXP_GAIN)

;コマンドの成否をTFLAG:コマンド成否にセット
CALL JUDGE_COM_RESULT(MTAR:0, 5, 5)

;;MASTERの処理
;-------------------------------------------------
TCVAR:(MPLY:0):HO体力増減値 = -600
TCVAR:(MPLY:0):汗量 += RAND(3000, 5000)

;;ターゲットの処理
;-------------------------------------------------
FOR LOCAL, 0, MEMBER_NUM

	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = 20
	CALL ADD_SOURCE_KANRAKU(MTAR:LOCAL, 100)
	SOURCE:(MTAR:LOCAL):歓楽 = MAX(SOURCE:(MTAR:LOCAL):歓楽, 0)

	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_N(MTAR:LOCAL, 100, 100)

	;ターゲットがサボり魔なら効果減少
	IF TALENT:(MTAR:LOCAL):サボり魔
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 0.80
		SOURCE:(MTAR:LOCAL):反感 = 70 - SOURCE:(MTAR:LOCAL):歓楽 / 3
	ENDIF

	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 0.20
		TIMES SOURCE:(MTAR:LOCAL):不安, 1.50
		SOURCE:(MTAR:LOCAL):不満 += 300
		TCVAR:(MTAR:LOCAL):HOムード値 -= 5
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		TCVAR:(MTAR:LOCAL):HOムード値 += 2
		;大成功
	ELSE
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 2.00
		TIMES SOURCE:(MTAR:LOCAL):不安, 0.50
		TCVAR:(MTAR:LOCAL):HOムード値 += 5
	ENDIF
	TCVAR:(MTAR:LOCAL):HO体力増減値 = -600
	TCVAR:(MTAR:LOCAL):汗量 += RAND(3000, 5000)
NEXT

;主導度変化基準値
TFLAG:主導度変化基準値 = 2

;倒錯度変化基準値
TFLAG:倒錯度変化基準値 = -2

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE707
;主導権が主人公側

PRINTFORML %ANAME(MPLY:0)%は%ANAME(MTAR:0), MTAR_NUM%と模擬戦を行った…

IF TFLAG:コマンド成否 == 1
	PRINTFORML とても良い汗をかいた！
ELSEIF TFLAG:コマンド成否 == -1
	PRINTFORML ……あまり運動に身が入らなかった
ENDIF
PRINTL
WAIT
;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST707

;-------------------------------------------------
;コマンド区分
;-------------------------------------------------
@COM_AVAILABLE_WHEN707
RETURN コマンド_居住区


code:
;入浴

;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME708
RESULTS:0 = 入浴する
IF SEARCH_EQUIP(708, MPLY:0, MTAR:0) >= 0
	RESULTS:0 = 身体を洗う
ENDIF

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE708
;共通部分
CALL COM_ABLE_COMMON(708)
SIF RESULT == 0
	RETURN 0
;プレイヤーは常に1名
SIF MPLY_NUM != 1
	RETURN 0
;主人公のみ可
SIF MPLY:0 != MASTER
	RETURN 0
SIF !C_COND("設備用途:入浴,設備用途:精液風呂","OR",MASTER)
	RETURN 0
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM708
;実行判定
CALL COM_ORDER_COMMON
IF RESULT == 0
	RETURN 0
ENDIF

IF MTAR_NUM
	IF MPLY:0 == MASTER
		;コマンドの成否をTFLAG:コマンド成否にセット
		CALL JUDGE_COM_RESULT(MTAR:0, 5, 10)
		LOCAL:1 = MTAR:0
	ELSE
		;コマンドの成否をTFLAG:コマンド成否にセット
		CALL JUDGE_COM_RESULT(MPLY:0, 5, 10)
		LOCAL:1 = MPLY:0
	ENDIF

	IF TALENT:(LOCAL:1):恋人 || TALENT:(LOCAL:1):烙印
		TFLAG:17 = 1
		;レズ・ＢＬ経験基準値
		TFLAG:レズ・ＢＬ経験基準値 = 1
	ELSE
		TFLAG:17 = 0
	ENDIF
ENDIF

;MPLYについて処理
FOR LOCAL, 0, MPLY_NUM
	;露出
	SOURCE:(MPLY:LOCAL):露出 = 40
	;主導権に応じた優越・受動のソース追加
	CALL ADD_SOURCE_INITIATIVE_N(MPLY:LOCAL, 100, 100)
	SOURCE:(MPLY:LOCAL):接触 = 220
	;親密に応じた歓楽のソース追加
	SOURCE:(MPLY:LOCAL):歓楽 = -30
	CALL ADD_SOURCE_KANRAKU(MPLY:LOCAL, 170)
	SOURCE:(MPLY:LOCAL):歓楽 = MAX(SOURCE:(MPLY:LOCAL):歓楽, 0)
	;親密に応じた愛情のソース追加
	CALL ADD_SOURCE_AIZYOU(MPLY:LOCAL, 100)
	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_U(MPLY:LOCAL, 20, 20)
	;成否による修正
	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:(MPLY:LOCAL):歓楽, 0.10
		TIMES SOURCE:(MPLY:LOCAL):優越, 0.50
		TIMES SOURCE:(MPLY:LOCAL):愛情, 0.50
		SOURCE:(MPLY:LOCAL):不満 += 500
		TCVAR:(MPLY:LOCAL):HOムード値 -= 5
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		TCVAR:(MPLY:LOCAL):HOムード値 += 2
		;大成功
	ELSE
		TIMES SOURCE:(MPLY:LOCAL):歓楽, 2.00
		TIMES SOURCE:(MPLY:LOCAL):優越, 2.00
		TIMES SOURCE:(MPLY:LOCAL):愛情, 2.00
		TCVAR:(MPLY:LOCAL):HOムード値 += 5
	ENDIF
	CALL HO_UNDRESS(MPLY:0)
	;身体を洗う
	IF IS_EQUIP(MPLY:LOCAL, 708) >= 0
		CALL HO_WASH(MPLY:LOCAL)
	ENDIF
NEXT
;MTARに付いて処理
FOR LOCAL, 0, MTAR_NUM
	;主導権に応じた優越・受動のソース追加
	CALL ADD_SOURCE_INITIATIVE_N(MTAR:LOCAL, 100, 100)
	SOURCE:(MTAR:LOCAL):接触 = 180
	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = -30
	CALL ADD_SOURCE_KANRAKU(MTAR:LOCAL, 170)
	SOURCE:(MTAR:LOCAL):歓楽 = MAX(SOURCE:(MTAR:LOCAL):歓楽, 0)
	;親密に応じた愛情のソース追加
	CALL ADD_SOURCE_AIZYOU(MTAR:LOCAL, 100)
	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_U(MTAR:LOCAL, 20, 20)
	;成否による修正
	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 0.10
		TIMES SOURCE:(MTAR:LOCAL):優越, 0.50
		TIMES SOURCE:(MTAR:LOCAL):愛情, 0.50
		SOURCE:(MTAR:LOCAL):不満 += 500
		TCVAR:(MTAR:LOCAL):HOムード値 -= 5
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		TCVAR:(MTAR:LOCAL):HOムード値 += 2
		;大成功
	ELSE
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 2.00
		TIMES SOURCE:(MTAR:LOCAL):優越, 2.00
		TIMES SOURCE:(MTAR:LOCAL):愛情, 2.00
		TCVAR:(MTAR:LOCAL):HOムード値 += 5
	ENDIF
	CALL HO_UNDRESS(MTAR:LOCAL)
	;身体を洗う
	IF IS_EQUIP(MTAR:LOCAL, 708) >= 0
		CALL HO_WASH(MTAR:LOCAL)
	ENDIF
NEXT

;主導度変化基準値
TFLAG:主導度変化基準値 = 3

;倒錯度変化基準値
TFLAG:倒錯度変化基準値 = -1

RETURN 1

;-------------------------------------------------
;継続コマンドかどうかを設定
;-------------------------------------------------
@COM_IS_EQUIP708
RETURN 1

;-------------------------------------------------
;継続状態の処理
;-------------------------------------------------
@COM_EQUIP708(ARG:0)
#DIM PLAYER_ID
#DIM TARGET_ID
PLAYER_ID = MEQUIP_PLAYER:(ARG:0):0
;ソースを退避
CALL PUTOUT_SOURCE(PLAYER_ID)

;●プレイヤーの処理
SOURCE:(PLAYER_ID):歓楽 = -25 / 4
SOURCE:(PLAYER_ID):接触 = 200 / 4
SOURCE:(PLAYER_ID):愛情 = -54 / 4
SOURCE:(PLAYER_ID):性行動 = 25
SOURCE:(MPLY:0):露出 = 40

;親密に応じた歓楽のソース追加
CALL ADD_SOURCE_KANRAKU(PLAYER_ID, 50 / 4)
SOURCE:(PLAYER_ID):歓楽 = MAX(SOURCE:(PLAYER_ID):歓楽, 0)

;親密に応じた愛情のソース追加
CALL ADD_SOURCE_AIZYOU(PLAYER_ID, 180 / 4)
SOURCE:(PLAYER_ID):愛情 = MAX(SOURCE:(PLAYER_ID):愛情, 0)

IF PLAYER_ID != MASTER && !TALENT:(PLAYER_ID):恋人
	SOURCE:(PLAYER_ID):逸脱 = 200 / 4
ENDIF

IF PLAYER_ID != MASTER
	IF CFLAG:(PLAYER_ID):2 < 300
		SOURCE:(PLAYER_ID):反感 = 220
	ELSEIF CFLAG:(PLAYER_ID):2 < 500
		SOURCE:(PLAYER_ID):反感 = 120
	ELSEIF CFLAG:(PLAYER_ID):2 < 800
		SOURCE:(PLAYER_ID):反感 = 20
	ENDIF
ENDIF

;主導権に応じたソースの追加
CALL ADD_SOURCE_INITIATIVE_U(PLAYER_ID, 20, 20)

;倒錯度変化基準値
TCVAR:(PLAYER_ID):50 -= 1
;退避したソースを加算
CALL SUM_SOURCE(PLAYER_ID)

;●ターゲットの処理
IF MEQUIP_TARGET_NUM:(ARG:0)
	TARGET_ID = MEQUIP_TARGET:(ARG:0):0

	CALL PUTOUT_SOURCE(TARGET_ID)
	SOURCE:(TARGET_ID):歓楽 = -25 / 4
	SOURCE:(TARGET_ID):接触 = 200 / 4
	SOURCE:(TARGET_ID):愛情 = -54 / 4
	SOURCE:(TARGET_ID):性行動 = 25
	SOURCE:(TARGET_ID):露出 = 60

	;親密に応じた歓楽のソース追加
	CALL ADD_SOURCE_KANRAKU(TARGET_ID, 50 / 4)
	SOURCE:(TARGET_ID):歓楽 = MAX(SOURCE:(TARGET_ID):歓楽, 0)

	;親密に応じた愛情のソース追加
	CALL ADD_SOURCE_AIZYOU(TARGET_ID, 180 / 4)
	SOURCE:(TARGET_ID):愛情 = MAX(SOURCE:(TARGET_ID):愛情, 0)

	IF TARGET_ID != MASTER && !TALENT:(TARGET_ID):恋人
		SOURCE:(TARGET_ID):逸脱 = 200 / 4
	ENDIF

	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_U(TARGET_ID, 20, 20)

	;倒錯度変化基準値
	TCVAR:(TARGET_ID):50 -= 1

	;退避したソースを加算
	CALL SUM_SOURCE(TARGET_ID)
ENDIF

;-------------------------------------------------
;継続中の表示
;-------------------------------------------------
@EQUIP_MESSAGE708(ARG:0)
IF MEQUIP_TARGET_NUM:(ARG:0)
	RESULTS = %EQUIP_PLAYER_ANAME(ARG:0)%は%EQUIP_TARGET_ANAME(ARG:0)%と入浴している
ELSE
	RESULTS = %EQUIP_PLAYER_ANAME(ARG:0)%は一人で入浴している
ENDIF

;-------------------------------------------------
;継続中の地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE_EQUIP708(ARG:0)
IF MEQUIP_TARGET_NUM:(ARG:0)
	PRINTFORML %EQUIP_PLAYER_ANAME(ARG:0)%は%EQUIP_TARGET_ANAME(ARG:0)%と入浴している
ELSE
	PRINTFORML %EQUIP_PLAYER_ANAME(ARG:0)%は一人で入浴している
ENDIF

;-------------------------------------------------
;継続を解除したときの地の文
;-------------------------------------------------
@COM_TEXT_RELEASE_EQUIP708(ARG:0)
IF MEQUIP_TARGET_NUM:(ARG:0)
	PRINTFORMW %EQUIP_PLAYER_ANAME(ARG:0)%は%EQUIP_TARGET_ANAME(ARG:0)%との入浴を止めた
ELSE
	PRINTFORMW %EQUIP_PLAYER_ANAME(ARG:0)%は入浴を止めた
ENDIF

;-------------------------------------------------
;固有の実行判定
;-------------------------------------------------
@COM_ORDER_PLAYER708(ARG:0)
CALL COM_ORDER_COMMON708(ARG:0)
RETURN 1

@COM_ORDER_TARGET708(ARG:0)
CALL COM_ORDER_COMMON708(ARG:0)
RETURN 1

@COM_ORDER_COMMON708(ARG:0)
;実行値の設定
TCVAR:(ARG:0):実行値 = 42

;共通部分
CALL COM_ORDER(ARG:0)

CALL COM_ORDER_ELEMENT(ARG:0, @"欲望Lv{ABL:(ARG:0):欲望}", ABL:(ARG:0):欲望 * 2)
CALL COM_ORDER_ELEMENT(ARG:0, @"奉仕Lv{ABL:(ARG:0):奉仕}", ABL:(ARG:0):奉仕 * 3)

;好感度
IF CFLAG:(ARG:0):好感度 < 400
	IF CFLAG:(ARG:0):好感度 < 50
		LOCAL:0 = -40
	ELSEIF CFLAG:(ARG:0):好感度 < 150
		LOCAL:0 = -20
	ELSEIF CFLAG:(ARG:0):好感度 < 300
		LOCAL:0 = -10
	ELSE
		LOCAL:0 = -5
	ENDIF
	CALL COM_ORDER_ELEMENT(ARG:0, @"好感度不足", LOCAL:0)
ELSE
	LOCAL:0 = CFLAG:(ARG:0):好感度 / 75
	CALL COM_ORDER_ELEMENT(ARG:0, @"好感度", LOCAL:0)
ENDIF

IF TALENT:(ARG:0):恥じらい
	CALL COM_ORDER_ELEMENT(ARG:0, "恥じらい", -3)
ENDIF
IF TALENT:(ARG:0):貞操観念
	CALL COM_ORDER_ELEMENT(ARG:0, "貞操観念", -4)
ENDIF
IF TALENT:(ARG:0):貞操無頓着
	CALL COM_ORDER_ELEMENT(ARG:0, "貞操無頓着", 3)
ENDIF
IF TALENT:(ARG:0):献身的
	CALL COM_ORDER_ELEMENT(ARG:0, "献身的", 5)
ENDIF

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE708
IF MTAR_NUM
	;主導権が主人公側
	IF IS_INITIATIVE(MASTER)
		PRINTFORMW %ANAME(MPLY:0)%は%LOCALS:0%%ANAME(MTAR:0)%と入浴した
		;主導権が相手側
	ELSE
		PRINTFORMW %ANAME(MPLY:0)%は%LOCALS:0%%ANAME(MTAR:0)%に促され入浴した
	ENDIF
ELSE
	PRINTFORMW %ANAME(MPLY:0)%は一人で入浴した
ENDIF

;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST708
IF MTAR_NUM
	;日常コマンドに共通の地の文
	CALL COM_TEXT_LAST_LIFE
ENDIF

;-------------------------------------------------

;コマンド区分
;-------------------------------------------------

@COM_AVAILABLE_WHEN708
IF FLAG:調教モード != 調教_居住区 && FLAG:調教モード != 調教_クエスト
	RETURN コマンド_ウフフ
ELSE
	RETURN コマンド_居住区
ENDIF


code:
;サウナ

;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME709
IF SEARCH_EQUIP_EITHER(709, MPLY:0, MTAR:0) >= 0
	RESULTS:0 = サウナでくつろぐ
	CALLF COM_EQUIPFLAG709(1)
ELSE
	RESULTS:0 = サウナに入る
	CALLF COM_EQUIPFLAG709(0)
ENDIF

;-------------------------------------------------
; このコマンドがどのタブに入るか
;-------------------------------------------------
@COM_CATEGORY709
RETURN 9

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE709
;共通部分
CALL COM_ABLE_COMMON(709)
SIF RESULT == 0
	RETURN 0
;プレイヤーは常に1名
SIF MPLY_NUM != 1
	RETURN 0
;主人公のみ可
SIF MPLY:0 != MASTER
	RETURN 0
SIF !C_COND("設備名:サウナルーム",, MASTER)
	RETURN 0
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM709
;実行判定
CALL COM_ORDER_COMMON
IF RESULT == 0
	RETURN 0
ENDIF

IF MTAR_NUM
	IF MPLY:0 == MASTER
		;コマンドの成否をTFLAG:コマンド成否にセット
		CALL JUDGE_COM_RESULT(MTAR:0, 5, 10)
		LOCAL:1 = MTAR:0
	ELSE
		;コマンドの成否をTFLAG:コマンド成否にセット
		CALL JUDGE_COM_RESULT(MPLY:0, 5, 10)
		LOCAL:1 = MPLY:0
	ENDIF

	IF TALENT:(LOCAL:1):恋人 || TALENT:(LOCAL:1):烙印
		TFLAG:17 = 1
		;レズ・ＢＬ経験基準値
		TFLAG:レズ・ＢＬ経験基準値 = 1
	ELSE
		TFLAG:17 = 0
	ENDIF
ENDIF

;MPLYについて処理
FOR LOCAL, 0, MPLY_NUM
	;露出
	SOURCE:(MPLY:LOCAL):露出 = 40
	;主導権に応じた優越・受動のソース追加
	CALL ADD_SOURCE_INITIATIVE_N(MPLY:LOCAL, 100, 100)
	SOURCE:(MPLY:LOCAL):接触 = 220
	;親密に応じた歓楽のソース追加
	SOURCE:(MPLY:LOCAL):歓楽 = -30
	CALL ADD_SOURCE_KANRAKU(MPLY:LOCAL, 170)
	SOURCE:(MPLY:LOCAL):歓楽 = MAX(SOURCE:(MPLY:LOCAL):歓楽, 0)
	;親密に応じた愛情のソース追加
	CALL ADD_SOURCE_AIZYOU(MPLY:LOCAL, 100)
	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_U(MPLY:LOCAL, 20, 20)
	;成否による修正
	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:(MPLY:LOCAL):歓楽, 0.10
		TIMES SOURCE:(MPLY:LOCAL):優越, 0.50
		TIMES SOURCE:(MPLY:LOCAL):愛情, 0.50
		SOURCE:(MPLY:LOCAL):不満 += 500
		TCVAR:(MPLY:LOCAL):HOムード値 -= 5
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		TCVAR:(MPLY:LOCAL):HOムード値 += 2
		;大成功
	ELSE
		TIMES SOURCE:(MPLY:LOCAL):歓楽, 2.00
		TIMES SOURCE:(MPLY:LOCAL):優越, 2.00
		TIMES SOURCE:(MPLY:LOCAL):愛情, 2.00
		TCVAR:(MPLY:LOCAL):HOムード値 += 5
	ENDIF
	CALL HO_UNDRESS(MPLY:LOCAL)

	;体力の強化
	SIF RAND:100 < GROWTYPE_RATE(MPLY:0, "身体")
		EXP:(MPLY:0):GET_EXP(GETNUM(ABL, "身体"))++
	;体力・気力を回復
	TCVAR:(MPLY:LOCAL):HO体力増減値 = 75
	TCVAR:(MPLY:LOCAL):HO気力増減値 = 30
	;汗量の増大
	TCVAR:(MPLY:LOCAL):汗量 += RAND(200, 400)
NEXT

;MTARに付いて処理
FOR LOCAL, 0, MTAR_NUM
	;主導権に応じた優越・受動のソース追加
	CALL ADD_SOURCE_INITIATIVE_N(MTAR:LOCAL, 100, 100)
	SOURCE:(MTAR:LOCAL):接触 = 180
	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = -30
	CALL ADD_SOURCE_KANRAKU(MTAR:LOCAL, 170)
	SOURCE:(MTAR:LOCAL):歓楽 = MAX(SOURCE:(MTAR:LOCAL):歓楽, 0)
	;親密に応じた愛情のソース追加
	CALL ADD_SOURCE_AIZYOU(MTAR:LOCAL, 100)
	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_U(MTAR:LOCAL, 20, 20)
	;成否による修正
	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 0.10
		TIMES SOURCE:(MTAR:LOCAL):優越, 0.50
		TIMES SOURCE:(MTAR:LOCAL):愛情, 0.50
		SOURCE:(MTAR:LOCAL):不満 += 500
		TCVAR:(MTAR:LOCAL):HOムード値 -= 5
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		TCVAR:(MTAR:LOCAL):HOムード値 += 2
		;大成功
	ELSE
		TIMES SOURCE:(MTAR:LOCAL):歓楽, 2.00
		TIMES SOURCE:(MTAR:LOCAL):優越, 2.00
		TIMES SOURCE:(MTAR:LOCAL):愛情, 2.00
		TCVAR:(MTAR:LOCAL):HOムード値 += 5
	ENDIF
	CALL HO_UNDRESS(MTAR:LOCAL)

	;体力の強化
	SIF RAND:100 < GROWTYPE_RATE(MTAR:0, "身体")
		EXP:(MTAR:0):GET_EXP(GETNUM(ABL, "身体"))++
	;体力・気力を回復
	TCVAR:(MTAR:LOCAL):HO体力増減値 = 75
	TCVAR:(MTAR:LOCAL):HO気力増減値 = 30
	;汗量の増大
	TCVAR:(MTAR:LOCAL):汗量 += RAND(200, 400)
NEXT

;主導度変化基準値
TFLAG:主導度変化基準値 = 3

;倒錯度変化基準値
TFLAG:倒錯度変化基準値 = -1

RETURN 1

;-------------------------------------------------
;継続コマンドかどうかを設定
;-------------------------------------------------
@COM_IS_EQUIP709
RETURN 2

;-------------------------------------------------
;継続状態の処理
;-------------------------------------------------
@COM_EQUIP709(ARG:0)
#DIM PLAYER_ID
#DIM TARGET_ID
PLAYER_ID = MEQUIP_PLAYER:(ARG:0):0
;ソースを退避
CALL PUTOUT_SOURCE(PLAYER_ID)

;●プレイヤーの処理
SOURCE:(PLAYER_ID):歓楽 = -25 / 4
SOURCE:(PLAYER_ID):接触 = 200 / 4
SOURCE:(PLAYER_ID):愛情 = -54 / 4
SOURCE:(PLAYER_ID):性行動 = 25
SOURCE:(MPLY:0):露出 = 40

;親密に応じた歓楽のソース追加
CALL ADD_SOURCE_KANRAKU(PLAYER_ID, 50 / 4)
SOURCE:(PLAYER_ID):歓楽 = MAX(SOURCE:(PLAYER_ID):歓楽, 0)

;親密に応じた愛情のソース追加
CALL ADD_SOURCE_AIZYOU(PLAYER_ID, 180 / 4)
SOURCE:(PLAYER_ID):愛情 = MAX(SOURCE:(PLAYER_ID):愛情, 0)

IF PLAYER_ID != MASTER && !TALENT:(PLAYER_ID):恋人
	SOURCE:(PLAYER_ID):逸脱 = 200 / 4
ENDIF

IF PLAYER_ID != MASTER
	IF CFLAG:(PLAYER_ID):2 < 300
		SOURCE:(PLAYER_ID):反感 = 220
	ELSEIF CFLAG:(PLAYER_ID):2 < 500
		SOURCE:(PLAYER_ID):反感 = 120
	ELSEIF CFLAG:(PLAYER_ID):2 < 800
		SOURCE:(PLAYER_ID):反感 = 20
	ENDIF
ENDIF

;主導権に応じたソースの追加
CALL ADD_SOURCE_INITIATIVE_U(PLAYER_ID, 20, 20)

;倒錯度変化基準値
TCVAR:(PLAYER_ID):50 -= 1
;退避したソースを加算
CALL SUM_SOURCE(PLAYER_ID)

;●ターゲットの処理
IF MEQUIP_TARGET_NUM:(ARG:0)
	TARGET_ID = MEQUIP_TARGET:(ARG:0):0

	CALL PUTOUT_SOURCE(TARGET_ID)
	SOURCE:(TARGET_ID):歓楽 = -25 / 4
	SOURCE:(TARGET_ID):接触 = 200 / 4
	SOURCE:(TARGET_ID):愛情 = -54 / 4
	SOURCE:(TARGET_ID):性行動 = 25
	SOURCE:(TARGET_ID):露出 = 60

	;親密に応じた歓楽のソース追加
	CALL ADD_SOURCE_KANRAKU(TARGET_ID, 50 / 4)
	SOURCE:(TARGET_ID):歓楽 = MAX(SOURCE:(TARGET_ID):歓楽, 0)

	;親密に応じた愛情のソース追加
	CALL ADD_SOURCE_AIZYOU(TARGET_ID, 180 / 4)
	SOURCE:(TARGET_ID):愛情 = MAX(SOURCE:(TARGET_ID):愛情, 0)

	IF TARGET_ID != MASTER && !TALENT:(TARGET_ID):恋人
		SOURCE:(TARGET_ID):逸脱 = 200 / 4
	ENDIF

	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_U(TARGET_ID, 20, 20)

	;倒錯度変化基準値
	TCVAR:(TARGET_ID):50 -= 1

	;退避したソースを加算
	CALL SUM_SOURCE(TARGET_ID)
ENDIF

;-------------------------------------------------
;継続中の表示
;-------------------------------------------------
@EQUIP_MESSAGE709(ARG:0)
IF MEQUIP_TARGET_NUM:(ARG:0)
	RESULTS = %EQUIP_PLAYER_ANAME(ARG:0)%は%EQUIP_TARGET_ANAME(ARG:0)%とサウナで汗を流している
ELSE
	RESULTS = %EQUIP_PLAYER_ANAME(ARG:0)%はサウナで汗を流している
ENDIF

;-------------------------------------------------
;継続中の地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE_EQUIP709(ARG:0)
IF MEQUIP_TARGET_NUM:(ARG:0)
	PRINTFORML %EQUIP_PLAYER_ANAME(ARG:0)%は%EQUIP_TARGET_ANAME(ARG:0)%とサウナで汗を流している
ELSE
	PRINTFORML %EQUIP_PLAYER_ANAME(ARG:0)%はサウナで汗を流している
ENDIF

;-------------------------------------------------
;継続を解除したときの地の文
;-------------------------------------------------
@COM_TEXT_RELEASE_EQUIP709(ARG:0)
IF MEQUIP_TARGET_NUM:(ARG:0)
	PRINTFORMW %EQUIP_PLAYER_ANAME(ARG:0)%と%EQUIP_TARGET_ANAME(ARG:0)%はサウナルームを後にした
ELSE
	PRINTFORMW %EQUIP_PLAYER_ANAME(ARG:0)%はサウナルームを後にした
ENDIF

;-------------------------------------------------
;固有の実行判定
;-------------------------------------------------
@COM_ORDER_PLAYER709(ARG:0)
CALL COM_ORDER_COMMON709(ARG:0)
RETURN 1

@COM_ORDER_TARGET709(ARG:0)
CALL COM_ORDER_COMMON709(ARG:0)
RETURN 1

@COM_ORDER_COMMON709(ARG:0)
;実行値の設定
TCVAR:(ARG:0):実行値 = 42

;共通部分
CALL COM_ORDER(ARG:0)

CALL COM_ORDER_ELEMENT(ARG:0, @"欲望Lv{ABL:(ARG:0):欲望}", ABL:(ARG:0):欲望 * 2)
CALL COM_ORDER_ELEMENT(ARG:0, @"奉仕Lv{ABL:(ARG:0):奉仕}", ABL:(ARG:0):奉仕 * 3)

;好感度
IF CFLAG:(ARG:0):好感度 < 400
	IF CFLAG:(ARG:0):好感度 < 50
		LOCAL:0 = -40
	ELSEIF CFLAG:(ARG:0):好感度 < 150
		LOCAL:0 = -20
	ELSEIF CFLAG:(ARG:0):好感度 < 300
		LOCAL:0 = -10
	ELSE
		LOCAL:0 = -5
	ENDIF
	CALL COM_ORDER_ELEMENT(ARG:0, @"好感度不足", LOCAL:0)
ELSE
	LOCAL:0 = CFLAG:(ARG:0):好感度 / 75
	CALL COM_ORDER_ELEMENT(ARG:0, @"好感度", LOCAL:0)
ENDIF

IF TALENT:(ARG:0):恥じらい
	CALL COM_ORDER_ELEMENT(ARG:0, "恥じらい", -3)
ENDIF
IF TALENT:(ARG:0):貞操観念
	CALL COM_ORDER_ELEMENT(ARG:0, "貞操観念", -4)
ENDIF
IF TALENT:(ARG:0):貞操無頓着
	CALL COM_ORDER_ELEMENT(ARG:0, "貞操無頓着", 3)
ENDIF
IF TALENT:(ARG:0):献身的
	CALL COM_ORDER_ELEMENT(ARG:0, "献身的", 5)
ENDIF

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE709
IF COM_EQUIPFLAG709()
	IF MTAR:0 == -1
		PRINTFORM %ANAME(MPLY)%は一人で
	ELSE
		PRINTFORM %ANAME(MPLY)%は%ANAME(MTAR:0, MTAR_NUM)%と一緒に
	ENDIF
	PRINTDATAW
		DATAFORM サウナルームでのんびりとくつろいでいる……
		DATAFORM サウナを満喫している……
	ENDDATA
ELSE
	IF MTAR_NUM
		;主導権が主人公側
		IF IS_INITIATIVE(MASTER)
			PRINTFORMW %ANAME(MPLY:0)%は%LOCALS:0%%ANAME(MTAR:0)%とサウナルームに入ると、ゆったりとくつろぎ始めた
		;主導権が相手側
		ELSE
			PRINTFORMW %ANAME(MPLY:0)%は%LOCALS:0%%ANAME(MTAR:0)%に促されサウナルームに入ると、ゆったりとくつろぎ始めた
		ENDIF
	ELSE
		PRINTFORMW %ANAME(MPLY:0)%は一人でサウナルームに入ると、ゆったりとくつろぎ始めた
	ENDIF
ENDIF

;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST709
IF MTAR_NUM
	;日常コマンドに共通の地の文
	CALL COM_TEXT_LAST_LIFE
ENDIF

;-------------------------------------------------

;コマンド区分
;-------------------------------------------------

@COM_AVAILABLE_WHEN709
IF FLAG:調教モード != 調教_居住区 && FLAG:調教モード != 調教_クエスト
	RETURN コマンド_ウフフ
ELSE
	RETURN コマンド_居住区
ENDIF

;-------------------------------------------------
;継続状態管理関数
;地の文(前文)のタイミングでEQUIP情報が参照できなくなるため自前で記憶
;-------------------------------------------------
@COM_EQUIPFLAG709(ARG:0 = -1)
#FUNCTION
#DIM EQUIPFLAG
SIF ARG:0 != -1
	EQUIPFLAG = ARG:0
RETURNF EQUIPFLAG