code:
;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME720
RESULTS:0 = 演奏する
RESULTS:1 = 演奏に付き合う

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE720
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID

;共通部分
CALL COM_ABLE_COMMON(720)
SIF RESULT == 0
	RETURN 0
LOCAL:1 = 0
;コマンドが実行可能な環境にいる
SIF !C_COND("設備用途:演奏",, MPLY)
	RETURN 0
;MPLYは一人のみ
SIF MPLY_NUM != 1
	RETURN 0
;参加者にMASTER以外がいる場合、MASTERはターゲットになれない
SIF !IS_MPLY(MASTER) && IS_MTAR(MASTER)
	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
;プレイヤーの口が塞がっているなら不可
SIF IS_M_HOLD(MPLY:0)
	RETURN 0
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM720
#DIMS DYNAMIC _LIST_MEMBER
#DIM  DYNAMIC MEMBER_NUM
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC RATE
#DIM  DYNAMIC SKILL_LV
#DIM  DYNAMIC 体力消費量
#DIMS DYNAMIC MAP
#DIM CONST 基礎経験値 = 3

IF FLAG:調教モード == 調教_居住区
	;実行対象のキャラを纏めてMTARに登録
	CALL HO_SET_MTAR_PLAY_WITH("演奏中", 0, 0)
	;鑑賞中のキャラを一時的にMTARとして登録
	FOR LOCAL, 0, CHARANUM
		IF C_COND("行動:鑑賞中",,LOCAL) && C_COND_MAP_GET(LOCAL, "エリアIDX") == HO_MASTER現在地
			CALL ADD_MTAR(LOCAL)
			CFLAG:LOCAL:調教参加フラグ = 1
			TCVAR:LOCAL:調教一時参加扱い = 1
			TFLAG:参加者数 ++
		ENDIF
	NEXT
ENDIF

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

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

;;MASTERの処理
;-------------------------------------------------
CHARA_ID = MPLY:0
;親密に応じた歓楽のソース追加
SOURCE:CHARA_ID:歓楽 = 20
CALL ADD_SOURCE_KANRAKU(CHARA_ID, 100)
SOURCE:CHARA_ID:歓楽 = MAX(SOURCE:CHARA_ID:歓楽, 0)

;主導権に応じたソースの追加
CALL ADD_SOURCE_INITIATIVE_N(CHARA_ID, 100, 100)
;失敗
IF TFLAG:コマンド成否 == -1
	TIMES SOURCE:CHARA_ID:歓楽, 0.20
	TIMES SOURCE:CHARA_ID:不安, 1.50
	SOURCE:CHARA_ID:不満 += 300
	TCVAR:CHARA_ID:HOムード値 -= 5
	;成功
ELSEIF TFLAG:コマンド成否 == 0
	TCVAR:CHARA_ID:HOムード値 += 2
	;大成功
ELSE
	TIMES SOURCE:CHARA_ID:歓楽, 2.00
	TIMES SOURCE:CHARA_ID:不安, 0.50
	TCVAR:CHARA_ID:HOムード値 += 5
ENDIF

;体力処理
体力消費量 = FTIMES(250, 100 - MIN(30, ABL:CHARA_ID:身体 / 4))
;演奏スキル補正
SKILL_LV = SKILL_GET_LEVELF(CHARA_ID, スキル_ジャンル_生活, "SKILL_PLAYING")
IF SKILL_LV
	CALL SKILL_GET_EFFECT_RATE(スキル_ジャンル_生活, "SKILL_PLAYING", SKILL_LV)
	体力消費量 = FTIMES(体力消費量, 100 - RESULT)
ENDIF
TCVAR:CHARA_ID:HO体力増減値 -= 体力消費量
TCVAR:CHARA_ID:汗量 += RAND(500, 1000)

RATE = GROWTYPE_RATE(CHARA_ID, "歌唱") * 15 / 10
EXP:(CHARA_ID):GET_EXP(GETNUM(ABL, "歌唱")) += 基礎経験値 * RATE / 100

;;ターゲットの処理
;-------------------------------------------------
FOR LOCAL, 0, MTAR_NUM
	CHARA_ID = MTAR:LOCAL
	;一人で演奏する場合MTAR == MPLYとなるのでこの場合は処理しない
	SIF IS_MPLY(CHARA_ID)
		CONTINUE
	;親密に応じた歓楽のソース追加
	SOURCE:CHARA_ID:歓楽 = 20
	CALL ADD_SOURCE_KANRAKU(CHARA_ID, 100)
	SOURCE:CHARA_ID:歓楽 = MAX(SOURCE:CHARA_ID:歓楽, 0)

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

	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:CHARA_ID:歓楽, 0.20
		TIMES SOURCE:CHARA_ID:不安, 1.50
		SOURCE:CHARA_ID:不満 += 300
		TCVAR:CHARA_ID:HOムード値 -= 5
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		TCVAR:CHARA_ID:HOムード値 += 2
		;大成功
	ELSE
		TIMES SOURCE:CHARA_ID:歓楽, 2.00
		TIMES SOURCE:CHARA_ID:不安, 0.50
		TCVAR:CHARA_ID:HOムード値 += 5
	ENDIF

	;鑑賞者としてのターゲットなら以降の処理を行わない
	SIF C_COND("行動:鑑賞中",,CHARA_ID)
		CONTINUE

	;体力減少処理
	体力消費量 = FTIMES(250, 100 - MIN(30, ABL:CHARA_ID:身体 / 4))
	;演奏スキル補正
	SKILL_LV = SKILL_GET_LEVELF(CHARA_ID, スキル_ジャンル_生活, "SKILL_PLAYING")
	IF SKILL_LV
		CALL SKILL_GET_EFFECT_RATE(スキル_ジャンル_生活, "SKILL_PLAYING", SKILL_LV)
		体力消費量 = FTIMES(体力消費量, 100 - RESULT)
	ENDIF
	TCVAR:CHARA_ID:HO体力増減値 -= 体力消費量
	TCVAR:CHARA_ID:汗量 += RAND(3000, 5000)

	RATE = GROWTYPE_RATE(CHARA_ID, "歌唱") * 15 / 10
	EXP:CHARA_ID:GET_EXP(GETNUM(ABL, "歌唱")) += 基礎経験値 * RATE / 100

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

NEXT

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

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

;クエスト中ステージで演奏する場合の専用処理
IF C_COND("設備用途:公演",, MPLY) && FLAG:クエストモード
	CALL COM_PERFORMANCE("演奏")
ENDIF

IF FLAG:調教モード == 調教_居住区
	MAP '= @"MAP_{HO_MASTER現在地}_ROOM_EFFECT"
	SELECTCASE C_COND_MAP_GET(MASTER, "設備")
		CASE 18 ;ピアノ
			MAP_SET MAP, "ピアノの音色", "0"
		CASE 205, 206 ;舞台、ステージ
			MAP_SET MAP, "歌唱", "0"
		CASEELSE
	ENDSELECT
	IF HO_OCLOCK() >= 1800
		CALL SKILL_GET_LEVEL(MASTER, スキル_大分類_性技, "LEWD_SERENADE")
		IF RESULT > 0
			MAP_SET MAP, "煽欲の小夜曲", "0"
		ENDIF
	ENDIF
ENDIF

CALL FL_PLAYSE("Bell_3.mp3")

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE720
#DIM  DYNAMIC 設備ID
#DIMS DYNAMIC 設備名
#DIMS DYNAMIC 楽器名
#DIM  DYNAMIC 代表共演者ID
#DIM  DYNAMIC 共演者数

FOR LOCAL, 0, MTAR_NUM
	SIF C_COND("行動:鑑賞中",,MTAR:LOCAL)
		CONTINUE
	SIF !代表共演者ID
		代表共演者ID = MTAR:LOCAL
	共演者数 ++
NEXT

;パフォーマンスは専用処理で扱う
IF C_COND("設備用途:公演",, MPLY)
	RETURN
ENDIF

設備ID = C_COND_MAP_GET(MASTER, "設備")
IF GROUPMATCH(設備ID, 18)
	楽器名 = %C_COND_MAP_GETS(MASTER, "設備名")%
ELSE
	設備名 = %C_COND_MAP_GETS(MASTER, "設備名")%
ENDIF
;主導権が主人公側
IF MTAR:0 == MASTER || MPLY == MTAR || !共演者数
	IF 楽器名 != ""
		PRINTFORML %ANAME(MPLY:0)%は%楽器名%を一人で奏でた
	ELSE
		PRINTFORML %ANAME(MPLY:0)%の独唱が%設備名%に響いた
	ENDIF
ELSEIF IS_INITIATIVE(MASTER)
	IF 楽器名 != ""
		PRINTFORML %ANAME(MPLY:0)%は%ANAME(代表共演者ID), 共演者数%と%楽器名%を奏でた
	ELSE
		PRINTFORML %ANAME(MPLY:0)%と%ANAME(代表共演者ID), 共演者数%の歌声が%設備名%に響いた
	ENDIF
ELSE
	;相手より身体値が10以上劣っている
	IF ABL:(MPLY:0):歌唱 + 10 <= ABL:(代表共演者ID):歌唱
		IF 楽器名 != ""
			PRINTFORML %ANAME(MPLY:0)%は%ANAME(代表共演者ID), 共演者数%に%楽器名%の扱いを教わった……
		ELSE
			PRINTFORML %ANAME(MPLY:0)%は%ANAME(代表共演者ID), 共演者数%に歌の発声を教わった……
		ENDIF
	ELSE
		IF 楽器名 != ""
			PRINTFORML %ANAME(MPLY:0)%は%ANAME(代表共演者ID), 共演者数%と%楽器名%を奏でた
		ELSE
			PRINTFORML %ANAME(MPLY:0)%と%ANAME(代表共演者ID), 共演者数%の歌声が%設備名%に響いた
		ENDIF
	ENDIF
ENDIF

IF TFLAG:コマンド成否 == 1
	PRINTFORML 非常によい演奏ができた…！
ELSEIF TFLAG:コマンド成否 == -1
	PRINTFORML ……あまりうまくいかなかった
ENDIF
;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST720

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

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

;-------------------------------------------------
;クエスト中の公演処理
;-------------------------------------------------
;パフォーマンス系変数初期化

;-------------------------------------------------
;クエスト中の公演処理
;-------------------------------------------------
;パフォーマンス系変数初期化
@PERFORMANCE_INIT
TFLAG:公演_見物人数 = 0
TFLAG:公演_連続成功数 = 0
TFLAG:公演_達成率 = 0
TFLAG:公演_達成値補正 = 0
TFLAG:公演_趣向 = 0
TSTR:公演_観客プリセット '= ""

@COM_PERFORMANCE(演目)
#DIMS 演目
#DIM  DYNAMIC 公演者数
#DIM  DYNAMIC 歌唱合計値
#DIM  DYNAMIC 演奏スコア
#DIM  DYNAMIC 獲得達成率
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC 露出度

SELECTCASE 演目
	CASE "演奏"
		IF MTAR_NUM == 0 || MPLY == MTAR
			PRINTFORML %ANAME(MPLY)%の唄声が辺りに響く…
		ELSE
			PRINTFORML %ANAME(MPLY)%と%ANAME(MTAR,MTAR_NUM)%の唄声と演奏が辺りに響く…
		ENDIF
	CASE "演舞"
		IF MTAR_NUM == 0 || MPLY == MTAR
			PRINTFORML %ANAME(MPLY)%は踊りを披露した
		ELSE
			PRINTFORML %ANAME(MPLY)%と%ANAME(MTAR,MTAR_NUM)%は踊りを披露した
		ENDIF
ENDSELECT
IF TFLAG:公演_趣向 == 1
	;メッセージ出力
	{
		CALLF PRINT_RANDC(
			@"観衆はあらわになった%ANAME(MPLY)%の@C:{カラー_ピンク}@%C_COND_MAP_GETS(MPLY, "被覆衣装描写_胸")%@/C@に釘付けになっている…", C_COND("露出_胸:下着",,MPLY)
			,@"ステップの度に震える%ANAME(MPLY)%の@C:{カラー_ピンク}@%STR_BODY("胸：長", MPLY)%@/C@に観衆たちは歓声を上げ、さらに囃し立てる…", C_COND("露出_胸:露出",,MPLY) && 演目 == "演舞"
			,@"あらわになった%ANAME(MPLY)%の@C:{カラー_ピンク}@%STR_BODY("胸：長", MPLY)%@/C@に観衆たちは演奏にそっちのけで釘付けになっている…", C_COND("露出_胸:露出",,MPLY) && 演目 == "演奏"
			,@"あらわになった%ANAME(MPLY)%の@C:{カラー_ピンク}@%C_COND_MAP_GETS(MPLY, "被覆衣装描写_秘部")%@/C@に観衆たちは色めき立っている…", C_COND("露出_秘部:下着",,MPLY)
			,@"あらわになった%ANAME(MPLY)%の@C:{カラー_ピンク}@%STR_BODY("クリ：感度：欲情", MPLY)%@/C@に観衆たちは演奏にそっちのけで釘付けになっている…", C_COND("露出_秘部:露出",,MPLY) && 演目 == "演奏"
			,@"ステップの度にあらわになる%ANAME(MPLY)%の@C:{カラー_ピンク}@%STR_BODY("クリ：感度：欲情", MPLY)%@/C@に観衆たちは歓声を上げ、さらに囃し立てる…", C_COND("露出_秘部:露出",,MPLY) && 演目 == "演舞"
			)
	}
ENDIF

PRINTL
CALL PERFORMANCE_CALC_REVEAL(MPLY)
露出度 = RESULT
CALL PERFORMANCE_CALC_SCORE(演目)
;成功
;-------------------------------------------------
IF RESULT
	;観客へのソース処理
	FOR LOCAL, 0, CHARANUM
		IF IS_PARTICIPATE_TRAIN(LOCAL) && TCVAR:LOCAL:離脱フラグ == 離脱フラグ_観客
			SOURCE:LOCAL:歓楽 += FTIMES(100, 100 + (10 * TFLAG:公演_連続成功数))
			SOURCE:LOCAL:歓喜 += 25
			IF TFLAG:公演_趣向 == 1
				SOURCE:LOCAL:歓喜 += 20 * 露出度
				SOURCE:LOCAL:感応 += 300 * 露出度
			ENDIF
			IF RAND:3
				CFLAG:LOCAL:キャラ滞在時間 += 10
			ENDIF
		ENDIF
	NEXT
	;パフォーマンススコア計算
	TFLAG:公演_連続成功数 += 1
	獲得達成率 += RAND(20, 30)
	獲得達成率 = FTIMES(獲得達成率, (100 + TFLAG:公演_連続成功数 * 2))
	TFLAG:公演_達成率 += 獲得達成率
	;メッセージ出力
	{
		CALLF PRINT_RANDC(
			@"聴衆の一人は腕を組んで%ANAME(MPLY)%の演奏を聞き、なにやらしきりにうなずいている", 演目 == "演奏"
			,@"「姉ちゃんいいぞー！」", IS_FEMALE(MPLY)
			,@"「兄ちゃんいいぞー！」", IS_MALE(MPLY)
			,@"「いいぞー！　もっと脱げー！」", C_COND("露出_胸:下着,露出_秘部:下着","OR",MPLY)
			,@"%ANAME(MPLY)%のパフォーマンスに場が湧いた！", 1
			)
	}
	PRINTL
	PRINTFORML ……パフォーマンスのウケは上々だ！
	;おひねり
	IF TFLAG:公演_達成率 > 100
		PRINTFORML 観衆から何かが放り投げられ、%ANAME(MPLY)%の%S_R("頭にあたった/手前に落ちた/手前に転がり込んだ")%
		PRINTL
		CALL FL_PLAYSE("Money_1.mp3")
		CALL PERFORMANCE_GACHA_GIFT()
		CALL QST_CHANGE_ITEM(RESULTS, 0)
		TFLAG:公演_達成率 -= 100
	ENDIF
	;ゲスト処理
	CALL PERFORMANCE_ADD_GUEST()

	;失敗
	;-------------------------------------------------
ELSE
	;観客へのソース処理
	FOR LOCAL, 0, CHARANUM
		IF IS_PARTICIPATE_TRAIN(LOCAL) && TCVAR:LOCAL:離脱フラグ == 離脱フラグ_観客
			SOURCE:LOCAL:不満 += 300
			CFLAG:LOCAL:キャラ滞在時間 -= 30
		ENDIF
	NEXT
	;パフォーマンススコア計算
	TFLAG:公演_連続成功数 = 0
	;メッセージ出力
	{
		CALLF PRINT_RANDC(
			@"「ひっこめ！」", 1
			,@"「真面目にやれーっ！」", 1
			,@"「おいおい、姉ちゃんもっとがんばれよー！」", IS_FEMALE(MPLY)
			,@"「やれやれ、兄ちゃんもっとがんばれよー！」", IS_MALE(MPLY)
			,@"聴衆の一人は腕を組んで%ANAME(MPLY)%の演奏を聞き、失望した様子で首を横に振っている", 演目 == "演奏"
			,@"「やかましい！」",  演目 == "演奏"
			)
	}
	PRINTL
	PRINTFORML ……観衆からブーイングとヤジが飛んでくる。パフォーマンスは空回りしてしまっている
	PRINTL
	IF !RAND:3
		PRINTFORML 観衆から何かが放り投げられ、%ANAME(MPLY)%の頭に当たった
		PRINTFORML ―― %S_R("あいたっ！/痛っ！/いたいっ！")%%S_R("生卵/小石/小石/紙くず/空き瓶")%だ！
		CALL QST_CHANGE_HP(MPLY, -150)
	ENDIF
	;ゲスト処理
	CALL PERFORMANCE_ADD_GUEST()
ENDIF

;ゲスト処理
@PERFORMANCE_ADD_GUEST()
#DIM CHARA_ID

IF TSTR:公演_観客プリセット == ""
	TSTR:公演_観客プリセット '= "観客_街"
ENDIF

IF RAND:2 && TFLAG:参加者数 < 10
	PRINTL
	CALLF TAG_PRINT(@"@C:{カラー_緑}@%ANAME(MPLY)%のパフォーマンスにつられて誰か近づいてきたようだ@/C@",1)
	CALL HO_CREATE_GUEST(HO_MASTER現在地, "観客", TSTR:公演_観客プリセット, RAND:100 < FLCONFIG:公演ゲストの男性率 ? 0 # 1)
	CHARA_ID = RESULT
	IF CHARA_ID > 0
		CFLAG:CHARA_ID:キャラ滞在時間 = RAND(36, 42) * HO_単位時間
		TCVAR:CHARA_ID:相席フラグ = 1
		CALL HO_ADD_COMPANION(CHARA_ID, 1)
		TCVAR:CHARA_ID:離脱フラグ = 離脱フラグ_観客
		CFLAG:CHARA_ID:強制友好化 = 1
		IF TFLAG:公演_趣向 == 1
			ABL:CHARA_ID:Ｃ感 += RAND(3, 5)
			ABL:CHARA_ID:自慰 += RAND(4, 7)
			IF HAS_PENIS(CHARA_ID)
				ABL:CHARA_ID:射精 += RAND(6, 8)
			ENDIF
		ENDIF
	ENDIF
ELSE
	RETURN 0
ENDIF
RETURN 1

; #region @PERFORMANCE_GET_GIFT
;おひねりガチャ
@PERFORMANCE_GACHA_GIFT()
#DIMS DYNAMIC LIST_ITEM
#DIM  DYNAMIC 報酬テーブル

CALL RAND_WT_INIT()
CALL RAND_WT_SET(0, 600 - (100 * TFLAG:公演_難易度))
CALL RAND_WT_SET(1, 200)
CALL RAND_WT_SET(2, 150)
CALL RAND_WT_SET(3, 50)
報酬テーブル = RAND_WT_RESULT()

SELECTCASE 報酬テーブル
	CASE 0
		SELECTCASE RAND:3
			CASE 0
				LIST_ITEM '= @"MONEY,{RAND(750, 1500)},"
			CASE 1
				LIST_ITEM '= @"{ITEM_ディナリア銀貨},{RAND(2, 3)},"
			CASE 2
				IF TFLAG:公演_趣向 == 0
					LIST_ITEM '= @"{ITEM_パン},{RAND(2, 3)},"
				ELSEIF TFLAG:公演_趣向 == 1
					LIST_ITEM '= @"{ITEM_使用済みコンドーム},{RAND(2, 3)},"
				ENDIF
		ENDSELECT
	CASE 1
		SELECTCASE RAND:3
			CASE 0
				LIST_ITEM '= @"{ITEM_銀鉱石},{RAND(3, 6)},"
			CASE 1
				LIST_ITEM '= @"{ITEM_ディナリア銀貨},{RAND(4, 6)},"
			CASEELSE
				LIST_ITEM '= @"MONEY,{RAND(1500, 3000)},"
		ENDSELECT
	CASE 2
		SELECTCASE RAND:3
			CASE 0
				LIST_ITEM '= @"{ITEM_銀インゴット},{RAND(2, 4)},"
			CASE 1
				LIST_ITEM '= @"{ITEM_金鉱石},{RAND(1, 3)},"
			CASE 2
				LIST_ITEM '= @"{ITEM_銀鉱石},{RAND(3, 6)},"
			CASEELSE
				LIST_ITEM '= @"MONEY,{RAND(2500, 3500)},"
		ENDSELECT
	CASE 3
		SELECTCASE RAND:4
			CASE 0
				LIST_ITEM '= @"{ITEM_金インゴット},{RAND(1, 2)},"
			CASE 1
				LIST_ITEM '= @"{ITEM_銀インゴット},{RAND(2, 4)},"
			CASE 2
				LIST_ITEM '= @"{ITEM_金鉱石},{RAND(2, 4)},"
			CASE 3
				LIST_ITEM '= @"{ITEM_銀鉱石},{RAND(4, 6)},"
			CASEELSE
				LIST_ITEM '= @"MONEY,{RAND(3000, 4500)},"
		ENDSELECT
ENDSELECT
RESULTS = %LIST_ITEM%
RETURN
; #endregion

; #region @PERFORMANCE_CALC_SCORE
@PERFORMANCE_CALC_SCORE(演目)
#DIMS 演目
#DIM  DYNAMIC IDX
#DIM  DYNAMIC SCORE
#DIM  DYNAMIC SUM_SCORE
#DIM  DYNAMIC 達成値
#DIM  DYNAMIC 露出度

FOR IDX, 0, MPLY_NUM
	SCORE = ABL:(MPLY:IDX):歌唱
	SELECTCASE 演目
		CASE "演奏"
			SCORE += ABL:(MPLY:IDX):器用 / 3
		CASE "演舞"
			SCORE += ABL:(MPLY:IDX):身体 / 3
	ENDSELECT
	;成長型による補正
	SIF TALENT:(MPLY:IDX):成長型 == 成長型_詩人
		SCORE = FTIMES(SCORE, 175)
	;機嫌による補正
	IF CHECK_EMOTION(MPLY:IDX, "HAPPY")
		SCORE = FTIMES(SCORE, 120)
	ELSEIF CHECK_EMOTION(MPLY:IDX, "NEGATIVE")
		SCORE = FTIMES(SCORE, 50)
	ELSEIF CHECK_EMOTION(MPLY:IDX, "BROKEN")
		SCORE = FTIMES(SCORE, 25)
	ENDIF
	;スケベな趣向の場合露出による補正
	IF TFLAG:公演_趣向 == 1
		CALL HO_CHECK_NAKED(MPLY:IDX)
		IF RESULT
			SCORE = FTIMES(SCORE, 100 + RESULT * 20)
		ELSE
			SCORE = FTIMES(SCORE, 75)
		ENDIF
	ENDIF
	;乱数によるブレ
	SCORE = FTIMES(SCORE, RAND(80, 121))
	SUM_SCORE += SCORE
NEXT

FOR IDX, 0, MTAR_NUM
	SIF IS_MPLY(MTAR:IDX)
		CONTINUE
	SCORE = ABL:(MTAR:IDX):歌唱 / 2
	SCORE += ABL:(MTAR:IDX):器用 / 6
	;成長型による補正
	SIF TALENT:(MTAR:IDX):成長型 == 成長型_詩人
		SCORE = FTIMES(SCORE, 175)
	;機嫌による補正
	IF CHECK_EMOTION(MTAR:IDX, "HAPPY")
		SCORE = FTIMES(SCORE, 120)
	ELSEIF CHECK_EMOTION(MTAR:IDX, "NEGATIVE")
		SCORE = FTIMES(SCORE, 50)
	ELSEIF CHECK_EMOTION(MTAR:IDX, "BROKEN")
		SCORE = FTIMES(SCORE, 25)
	ENDIF
	;スケベな趣向の場合露出による補正
	IF TFLAG:公演_趣向 == 1
		CALL HO_CHECK_NAKED(MTAR:IDX)
		IF RESULT
			SCORE = FTIMES(SCORE, 100 + RESULT * 15)
		ELSE
			SCORE = FTIMES(SCORE, 80)
		ENDIF
	ENDIF
	;乱数によるブレ
	SCORE = FTIMES(SCORE, RAND(80, 121))
	SUM_SCORE += SCORE
NEXT

;難易度による補正と成功値の決定
SELECTCASE TFLAG:公演_難易度
	CASE 0
		SUM_SCORE = FTIMES(SUM_SCORE, RAND(80, 101))
		達成値 = RAND(60, 121)
	CASE 1
		SUM_SCORE = FTIMES(SUM_SCORE, RAND(60, 81))
		達成値 = RAND(90, 151)
	CASE 2
		SUM_SCORE = FTIMES(SUM_SCORE, RAND(40, 61))
		達成値 = RAND(120, 181)
	CASE 3
		SUM_SCORE = FTIMES(SUM_SCORE, RAND(35, 51))
		達成値 = RAND(150, 211)
	CASEELSE
		達成値 = RAND(60, 121)
ENDSELECT
;声援などで達成補正値がマイナスになっている場合易化
達成値 = FTIMES(達成値, 100 + TFLAG:公演_達成値補正)

DEBUGPRINTFORML パフォーマンスのスコア:{SUM_SCORE},達成値:{達成値}
RETURN SUM_SCORE >= 達成値
; #endregion

@PERFORMANCE_CALC_REVEAL(CHARA_ID)
#DIM CHARA_ID
#DIM DYNAMIC 露出度
SIF C_COND("露出_胸:下着",,CHARA_ID)
	露出度 += 1
SIF C_COND("露出_胸:露出",,CHARA_ID)
	露出度 += 2
SIF C_COND("露出_秘部:下着",,CHARA_ID)
	露出度 += 1
SIF C_COND("露出_秘部:露出",,CHARA_ID)
	露出度 += 2
RETURN 露出度


code:
;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME721
RESULTS:0 = 踊る
RESULTS:1 = 踊りに付き合う

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE721
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID

;共通部分
CALL COM_ABLE_COMMON(721)
SIF RESULT == 0
	RETURN 0
LOCAL:1 = 0
;コマンドが実行可能な環境にいる
SIF !C_COND("設備用途:演舞",, MPLY)
	RETURN 0
;MPLYは一人のみ
SIF MPLY_NUM != 1
	RETURN 0
;参加者にMASTER以外がいる場合、MASTERはターゲットになれない
SIF !IS_MPLY(MASTER) && IS_MTAR(MASTER)
	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

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM721
#DIMS DYNAMIC _LIST_MEMBER
#DIM  DYNAMIC MEMBER_NUM
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC RATE
#DIM  DYNAMIC SKILL_LV
#DIM  DYNAMIC 体力消費量
#DIMS DYNAMIC MAP
#DIM CONST 基礎経験値 = 2

IF FLAG:調教モード == 調教_居住区
	;実行対象のキャラを纏めてMTARに登録
	CALL HO_SET_MTAR_PLAY_WITH("演舞中", 0, 0)
	;鑑賞中のキャラを一時的にMTARとして登録
	FOR LOCAL, 0, CHARANUM
		IF C_COND("行動:鑑賞中",,LOCAL) && C_COND_MAP_GET(LOCAL, "エリアIDX") == HO_MASTER現在地
			CALL ADD_MTAR(LOCAL)
			CFLAG:LOCAL:調教参加フラグ = 1
			TCVAR:LOCAL:調教一時参加扱い = 1
			TFLAG:参加者数 ++
		ENDIF
	NEXT
ENDIF

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

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

;;プレイヤーの処理
;-------------------------------------------------
CHARA_ID = MPLY
;親密に応じた歓楽のソース追加
SOURCE:CHARA_ID:歓楽 = 20
CALL ADD_SOURCE_KANRAKU(CHARA_ID, 100)
SOURCE:CHARA_ID:歓楽 = MAX(SOURCE:CHARA_ID:歓楽, 0)

;主導権に応じたソースの追加
CALL ADD_SOURCE_INITIATIVE_N(CHARA_ID, 100, 100)
;露出によるソース追加
IF C_COND("露出_胸:露出",,CHARA_ID)
	SOURCE:CHARA_ID:露出 += 250
	SOURCE:CHARA_ID:逸脱 += 20
	EXP:CHARA_ID:露出経験値 += 1
ENDIF
IF C_COND("露出_秘部:露出",,CHARA_ID)
	SOURCE:CHARA_ID:露出 += 350
	SOURCE:CHARA_ID:逸脱 += 45
	EXP:CHARA_ID:露出経験値 += 1
ENDIF
;失敗
IF TFLAG:コマンド成否 == -1
	TIMES SOURCE:CHARA_ID:歓楽, 0.20
	TIMES SOURCE:CHARA_ID:不安, 1.50
	SOURCE:CHARA_ID:不満 += 300
	TCVAR:CHARA_ID:HOムード値 -= 5
	;成功
ELSEIF TFLAG:コマンド成否 == 0
	TCVAR:CHARA_ID:HOムード値 += 2
	;大成功
ELSE
	TIMES SOURCE:CHARA_ID:歓楽, 2.00
	TIMES SOURCE:CHARA_ID:不安, 0.50
	TCVAR:CHARA_ID:HOムード値 += 5
ENDIF

;体力処理
体力消費量 = FTIMES(250, 100 - MIN(30, ABL:CHARA_ID:身体 / 4))
;スキル補正
SKILL_LV = SKILL_GET_LEVELF(CHARA_ID, スキル_ジャンル_生活, "SKILL_DANCING")
IF SKILL_LV
	CALL SKILL_GET_EFFECT_RATE(スキル_ジャンル_生活, "SKILL_DANCING", SKILL_LV)
	体力消費量 = FTIMES(体力消費量, 100 - RESULT)
ENDIF
TCVAR:CHARA_ID:HO体力増減値 -= 体力消費量
TCVAR:(MPLY:0):汗量 += RAND(500, 1000)

RATE = GROWTYPE_RATE(CHARA_ID, "歌唱") * 15 / 10
EXP:(CHARA_ID):GET_EXP(GETNUM(ABL, "歌唱")) += 基礎経験値 * RATE / 100
IF MPLY != MTAR
	RATE = GROWTYPE_RATE(CHARA_ID, "社交") * 15 / 10
	EXP:(CHARA_ID):GET_EXP(GETNUM(ABL, "社交")) += 基礎経験値 * RATE / 100
ENDIF
;;ターゲットの処理
;-------------------------------------------------
FOR LOCAL, 0, MTAR_NUM
	CHARA_ID = MTAR:LOCAL
	;一人で演奏する場合MTAR == MPLYとなるのでこの場合は処理しない
	SIF IS_MPLY(CHARA_ID)
		CONTINUE
	;親密に応じた歓楽のソース追加
	SOURCE:CHARA_ID:歓楽 = 20
	CALL ADD_SOURCE_KANRAKU(CHARA_ID, 100)
	SOURCE:CHARA_ID:歓楽 = MAX(SOURCE:CHARA_ID:歓楽, 0)

	;主導権に応じたソースの追加
	CALL ADD_SOURCE_INITIATIVE_N(CHARA_ID, 100, 100)
	;露出によるソース追加
	IF C_COND("露出_胸:露出",,CHARA_ID)
		SOURCE:CHARA_ID:露出 += 250
		SOURCE:CHARA_ID:逸脱 += 20
		EXP:CHARA_ID:露出経験値 += 1
	ENDIF
	IF C_COND("露出_秘部:露出",,CHARA_ID)
		SOURCE:CHARA_ID:露出 += 350
		SOURCE:CHARA_ID:逸脱 += 45
		EXP:CHARA_ID:露出経験値 += 1
	ENDIF
	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:CHARA_ID:歓楽, 0.20
		TIMES SOURCE:CHARA_ID:不安, 1.50
		SOURCE:CHARA_ID:不満 += 300
		TCVAR:CHARA_ID:HOムード値 -= 5
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		TCVAR:CHARA_ID:HOムード値 += 2
		;大成功
	ELSE
		TIMES SOURCE:CHARA_ID:歓楽, 2.00
		TIMES SOURCE:CHARA_ID:不安, 0.50
		TCVAR:CHARA_ID:HOムード値 += 5
	ENDIF

	;鑑賞者としてのターゲットなら以降の処理を行わない
	SIF C_COND("行動:鑑賞中",,CHARA_ID)
		CONTINUE

	;体力減少処理
	体力消費量 = FTIMES(250, 100 - MIN(30, ABL:CHARA_ID:身体 / 4))
	;演奏スキル補正
	SKILL_LV = SKILL_GET_LEVELF(CHARA_ID, スキル_ジャンル_生活, "SKILL_DANCING")
	IF SKILL_LV
		CALL SKILL_GET_EFFECT_RATE(スキル_ジャンル_生活, "SKILL_DANCING", SKILL_LV)
		体力消費量 = FTIMES(体力消費量, 100 - RESULT)
	ENDIF
	TCVAR:CHARA_ID:HO体力増減値 -= 体力消費量
	TCVAR:CHARA_ID:汗量 += RAND(3000, 5000)

	RATE = GROWTYPE_RATE(CHARA_ID, "歌唱") * 15 / 10
	EXP:CHARA_ID:GET_EXP(GETNUM(ABL, "歌唱")) += 基礎経験値 * RATE / 100
	IF MPLY != MTAR
		RATE = GROWTYPE_RATE(CHARA_ID, "社交") * 15 / 10
		EXP:(CHARA_ID):GET_EXP(GETNUM(ABL, "社交")) += 基礎経験値 * RATE / 100
	ENDIF
	;失敗
	IF TFLAG:コマンド成否 == -1
		TIMES SOURCE:CHARA_ID:歓楽, 0.20
		TIMES SOURCE:CHARA_ID:不安, 1.50
		SOURCE:CHARA_ID:不満 += 300
		;	LOCAL:2 = 1
		;成功
	ELSEIF TFLAG:コマンド成否 == 0
		;	LOCAL:2 = 1
		;大成功
	ELSE
		TIMES SOURCE:CHARA_ID:歓楽, 2.00
		TIMES SOURCE:CHARA_ID:不安, 0.50
		;	LOCAL:2 = 2
	ENDIF

NEXT

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

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

;クエスト中ステージで演奏する場合の専用処理
IF C_COND("設備用途:公演",, MPLY) && FLAG:クエストモード
	CALL COM_PERFORMANCE("演舞")
ENDIF

IF FLAG:調教モード == 調教_居住区
	MAP '= @"MAP_{HO_MASTER現在地}_ROOM_EFFECT"
	MAP_SET MAP, "演舞", "0"
ENDIF

CALL FL_PLAYSE("Bell_3.mp3")

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE721
#DIMS DYNAMIC 設備名
#DIM  DYNAMIC 代表共演者ID
#DIM  DYNAMIC 共演者数

FOR LOCAL, 0, MTAR_NUM
	SIF C_COND("行動:鑑賞中",,MTAR:LOCAL)
		CONTINUE
	SIF !代表共演者ID
		代表共演者ID = MTAR:LOCAL
	共演者数 ++
NEXT

;パフォーマンスは専用処理で扱う
IF C_COND("設備用途:公演",, MPLY)
	RETURN
ENDIF

設備名 = %C_COND_MAP_GETS(MASTER, "設備名")%
;主導権が主人公側
IF MTAR:0 == MASTER
	PRINTFORML %ANAME(MPLY:0)%は%設備名%で一人で踊った
ELSEIF IS_INITIATIVE(MASTER)
	PRINTFORML %ANAME(MPLY:0)%は%ANAME(代表共演者ID), 共演者数%と%設備名%で踊った
ELSE
	;相手より技能が10以上劣っている
	IF ABL:(MPLY:0):歌唱 + 10 <= ABL:(代表共演者ID):歌唱
		PRINTFORML %ANAME(MPLY:0)%は%ANAME(代表共演者ID), 共演者数%に%設備名%で踊りを教わった……
	ELSE
		PRINTFORML %ANAME(MPLY:0)%は%ANAME(代表共演者ID), 共演者数%と%設備名%で踊った
	ENDIF
ENDIF

IF TFLAG:コマンド成否 == 1
	PRINTFORML 非常によい踊りができた…！
ELSEIF TFLAG:コマンド成否 == -1
	PRINTFORML ……あまりうまくいかなかった
ENDIF
;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST721

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

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

repo_name: pervysquirrelz/erafl

license: unknown


code:
;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME722
RESULTS:0 = 勉強する
RESULTS:1 = 勉強に付き合う

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE722
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
;共通部分
CALL COM_ABLE_COMMON(722)
SIF RESULT == 0
	RETURN 0
;コマンドが実行可能な環境にいる
SIF !C_COND("設備用途:勉強",, MPLY)
	RETURN 0
;実行は一人のみ
SIF MPLY_NUM != 1
	RETURN 0
;主人公のみがMPLYの場合限定
SIF MPLY:0 != MASTER || MPLY_NUM > 1
	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

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM722
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC MODULE_ID
#DIM DYNAMIC RATE
#DIM DYNAMIC 基礎経験値 = 3
#DIM DYNAMIC 教導補正フラグ

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
;疲労しているキャラを除外
FOR LOCAL, 0, MEMBER_NUM
	CHARA_ID = LIST_GETINT(_LIST_MEMBER, LOCAL)
	IF IS_TIRED(CHARA_ID)
		CALL DEL_MTAR(CHARA_ID)
	ENDIF
NEXT

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

;素質補正
FOR LOCAL, 0, MPLY_NUM
	SIF TALENT:(MPLY:LOCAL):教導
		教導補正フラグ = 1
NEXT
FOR LOCAL, 0, MTAR_NUM
	SIF TALENT:(MTAR:LOCAL):教導
		教導補正フラグ = 1
NEXT
SIF 教導補正フラグ
	TIMES 基礎経験値, 1.75
;;MASTERの処理
;-------------------------------------------------
RATE = GROWTYPE_RATE(MPLY:0, "知識") * 15 / 10
EXP:(MPLY:0):GET_EXP(GETNUM(ABL, "知識")) += 基礎経験値 * RATE / 100

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

	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = 15
	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.50
		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

	RATE = GROWTYPE_RATE(MTAR:0, "知識") * 15 / 10
	EXP:(MTAR:0):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_BEFORE722
;主導権が主人公側
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

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

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

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


code:
;-------------------------------------------------
;コマンド名称
;------------------------------------------------
@COM_NAME750
RESULTS:0 = 伐採
RESULTS:1 = 伐採

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE750
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC ROOM_IDX
ROOM_IDX = HO_MASTER現在地
;共通部分
CALL COM_ABLE_COMMON(750)
SIF RESULT == 0
	RETURN 0
LOCAL:1 = 0
;コマンドが実行可能な環境にいる
CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "伐採")
SIF RESULT == 0
	RETURN 0
;主人公のみがMPLYの場合限定
SIF MPLY:0 != MASTER || MPLY_NUM > 1
	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

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM750
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM RATE
#DIM CONST 基礎経験値 = 2

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

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

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

;;MASTERの処理
;-------------------------------------------------

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

	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = 10
	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
		TFLAG:ムード += 5
		TCVAR:(MTAR:LOCAL):HOムード値 += 5
	ENDIF
	;能力上昇
	RATE = GROWTYPE_RATE(MTAR:LOCAL, "身体") * 12 / 10
	EXP:(MTAR:LOCAL):GET_EXP(GETNUM(ABL, "身体")) += 基礎経験値 * RATE / 100
	;体力減少処理
	TCVAR:(MTAR:LOCAL):HO体力増減値 = -250
	TCVAR:(MTAR:LOCAL):汗量 += RAND(2000, 3000)

NEXT

;能力上昇
RATE = GROWTYPE_RATE(MPLY:0, "身体") * 12 / 10
EXP:(MPLY:0):GET_EXP(GETNUM(ABL, "身体")) += 基礎経験値 * RATE / 100
;対象が複数いる場合のMPLY(MASTER)の体力減少処理
;IF MTAR:0 != MASTER
TCVAR:(MPLY:0):HO体力増減値 = -250
TCVAR:(MPLY:0):汗量 += RAND(2000, 3000)
;ENDIF

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

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

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE750
;主導権が主人公側
IF MTAR:0 == MASTER
	PRINTFORMW %ANAME(MASTER)%は木を伐採した
ELSE
	PRINTFORMW %ANAME(MASTER)%は%ANAME(MTAR:0, MTAR_NUM)%と協力して木を伐採した
ENDIF

;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST750
#DIMS ITEM_NAME
#DIM 基準生産量
#DIM AMOUNT
CALL GET_ITEM_NAME(ITEM_木材)
ITEM_NAME '= RESULTS
CALL GET_ITEM_INFO(ITEM_木材, ITEM_基準生産量)
基準生産量 = RESULT
IF MTAR:0 == MASTER
	AMOUNT = 基準生産量
ELSE
	AMOUNT = 基準生産量 * (MTAR_NUM + 1)
ENDIF
CALL CHANGE_ITEM_STOCK(ITEM_木材, AMOUNT)
PRINTFORMW %ITEM_NAME%を%TOSTR(AMOUNT)%個入手した

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

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


code:
;-------------------------------------------------
;コマンド名称
;------------------------------------------------
@COM_NAME751
RESULTS:0 = Mining
RESULTS:1 = Mining

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE751
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC ROOM_IDX
#DIM DYNAMIC MODULE_ID
ROOM_IDX = HO_MASTER現在地
;共通部分
CALL COM_ABLE_COMMON(751)
SIF RESULT == 0
	RETURN 0
LOCAL:1 = 0
;コマンドが実行可能な環境にいる
CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "採掘")
SIF !RESULT
	RETURN 0
;主人公のみがMPLYの場合限定
SIF MPLY:0 != MASTER || MPLY_NUM > 1
	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

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM751
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM RATE
#DIM CONST 基礎経験値 = 2
#DIM DYNAMIC MODULE_ID
#DIM DYNAMIC PRODUCTION_RATE
#DIM DYNAMIC 合計身体値

MPLY:0 = MASTER
;一度MTARを初期化
CALL CLEAR_MTAR()

CALL HO_GET_USE_MODULE_INFO(MASTER)
MODULE_ID = RESULT
SELECTCASE MODULE_ID
	CASE 157, 158, 162, 164, 165
		CALL HO_SET_MTAR_PLAY_WITH("採掘中")
		CALL HO_CHECK_PLAY_WITH("採掘中")
		_LIST_MEMBER = %RESULTS%
		MEMBER_NUM = RESULT
ENDSELECT

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

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

;;MASTERの処理
;-------------------------------------------------

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

	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = 10
	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

	;能力上昇
	合計身体値 += ABL:CHARA_ID:身体
	RATE = GROWTYPE_RATE(MTAR:LOCAL, "身体") * 12 / 10
	EXP:(MTAR:LOCAL):GET_EXP(GETNUM(ABL, "身体")) += 基礎経験値 * RATE / 100
	;体力減少処理
	TCVAR:(MTAR:LOCAL):HO体力増減値 = -250
	TCVAR:(MTAR:LOCAL):汗量 += RAND(2000, 3000)
	PRODUCTION_RATE += LIMIT((ABL:(MTAR:LOCAL):身体 / 40),1, 4)
NEXT

;MPLY(MASTER)の処理
;能力上昇
合計身体値 += ABL:MASTER:身体
RATE = GROWTYPE_RATE(MPLY:0, "身体") * 12 / 10
EXP:(MPLY:0):GET_EXP(GETNUM(ABL, "身体")) += 基礎経験値 * RATE / 100
TCVAR:(MPLY:0):HO体力増減値 = -250
TCVAR:(MPLY:0):汗量 += RAND(2000, 3000)

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

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

;アイテム獲得処理
VARSET HO_アイテム変化量
CALL HO_GET_USE_MODULE_INFO(MASTER)
PRODUCTION_RATE += LIMIT((合計身体値 / 40),1, 4)
SELECTCASE MODULE_ID
	CASE 157 ;採石場
		HO_アイテム変化量:ITEM_石材 = PRODUCTION_RATE
	CASE 158 ;鉄鉱脈
		HO_アイテム変化量:ITEM_鉄鉱石 = PRODUCTION_RATE
	CASE 162 ;マナ鉱脈
		HO_アイテム変化量:ITEM_マナ結晶 = PRODUCTION_RATE
	CASE 164 ;天然鉱
		;石炭は必ず入手
		HO_アイテム変化量:ITEM_石炭 = PRODUCTION_RATE
		;副産物
		SELECTCASE RAND:2
			CASE 1
				HO_アイテム変化量:ITEM_硫黄 = PRODUCTION_RATE
			CASEELSE
		ENDSELECT
	CASE 165 ;塩坑
		HO_アイテム変化量:ITEM_岩塩 = PRODUCTION_RATE
	CASEELSE
ENDSELECT
CALL FL_PLAYSE("Mining_1.mp3")
CALL CHANGE_ITEM_STOCK_M(HO_アイテム変化量)

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE751
#DIMS DYNAMIC ITEM_NAME
#DIMS DYNAMIC 文字列

IF MTAR:0 == MASTER
	PRINTFORMW %ANAME(MASTER)%は採掘を行った
ELSE
	PRINTFORMW %ANAME(MASTER)%は%ANAME(MTAR:0, MTAR_NUM)%と協力して採掘を行った
ENDIF
;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST751
#DIMS ITEM_NAME
#DIM DYNAMIC アイテム獲得有無
FOR LOCAL, 0, ITEM_LENGTH
	IF HO_アイテム変化量:LOCAL > 0
		CALL GET_ITEM_NAME(LOCAL)
		ITEM_NAME '= RESULTS
		PRINTFORML %ITEM_NAME%を%TOSTR(HO_アイテム変化量:LOCAL)%個入手した
		アイテム獲得有無 ++
	ENDIF
NEXT
IF !アイテム獲得有無
	PRINTFORML しかし何もみつけることができなかった……
ENDIF
WAIT

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

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


code:
;-------------------------------------------------
;コマンド名称
;------------------------------------------------
@COM_NAME752
RESULTS:0 = クラフト
RESULTS:1 = クラフト

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE752
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC ROOM_IDX
#DIM DYNAMIC MODULE_ID
ROOM_IDX = HO_MASTER現在地
;共通部分
CALL COM_ABLE_COMMON(752)
SIF RESULT == 0
	RETURN 0
LOCAL:1 = 0

;コマンドが実行可能な環境にいる
CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "クラフト")
SIF RESULT == 0
	RETURN 0

;主人公のみがMPLYの場合限定
SIF MPLY:0 != MASTER || MPLY_NUM > 1
	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
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM752
#DIMS DYNAMIC _LIST_MEMBER
#DIM  DYNAMIC MEMBER_NUM
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC MODULE_ID
#DIM  DYNAMIC 作業時間
#DIM  DYNAMIC RATE
#DIMS DYNAMIC ABL_NAME
#DIM  CONST 基礎経験値 = 1

CALL HO_GET_USE_MODULE_INFO(MASTER)
MODULE_ID = RESULT

;一度MTARを初期化
CALL CLEAR_MTAR()

SELECTCASE MODULE_ID
	CASE 302 ;キッチン
		;実行対象のキャラを纏めてMTARに登録
		CALL HO_SET_MTAR_PLAY_WITH("炊事中")
		;実行対象のキャラを取得
		CALL HO_CHECK_PLAY_WITH("炊事中")
		_LIST_MEMBER = %RESULTS%
		MEMBER_NUM = RESULT
	CASEELSE
		;実行対象のキャラを纏めてMTARに登録
		CALL HO_SET_MTAR_PLAY_WITH("クラフト中")
		;実行対象のキャラを取得
		CALL HO_CHECK_PLAY_WITH("クラフト中")
		_LIST_MEMBER = %RESULTS%
		MEMBER_NUM = RESULT
ENDSELECT
;同行中のメンバーをMTARに追加
CALL HO_SET_MTAR_PLAY_WITH("同行中", 0)

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

;クラフト対象の選択;
CALL HO_ITEM_CRAFT_MENU(MODULE_ID)
IF RESULT == -1
	RETURN 0
ENDIF

;経験値算出用にクラフトにかけた時間を取得
作業時間 = HO_ITEM_CRAFT_PRODUCTION_TIME

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

SELECTCASE MODULE_ID
	CASE 300 ;作業台
		CALL FL_PLAYSE("Craft_1.mp3")
		ABL_NAME '= "器用"
	CASE 301 ;金床
		CALL FL_PLAYSE("Craft_3.mp3")
		ABL_NAME '= "器用"
	CASE 302 ;キッチン
		CALL FL_PLAYSE("Craft_2.mp3")
		ABL_NAME '= "料理"
	CASE 303 ;錬金台
		CALL FL_PLAYSE("Craft_4.mp3")
		ABL_NAME '= "知識"
	CASE 305 ;織機
		CALL FL_PLAYSE("Craft_6.mp3",,,2)
		ABL_NAME '= "器用"
	CASEELSE
		ABL_NAME '= "器用"
ENDSELECT

;;MASTERの処理
;経験値獲得処理
RATE = GROWTYPE_RATE(MASTER, ABL_NAME)
EXP:(MASTER):GET_EXP(GETNUM(ABL, ABL_NAME)) += MAX(1, 基礎経験値 * (作業時間 / 15) * RATE / 100 )
;体力減少処理
TCVAR:(MASTER):HO体力増減値 = -150
TCVAR:(MASTER):汗量 += RAND(2000, 3000)
;-------------------------------------------------
;;ターゲットの処理
;-------------------------------------------------
FOR LOCAL, 0, MTAR_NUM

	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = 10
	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
	;経験値獲得処理
	RATE = GROWTYPE_RATE((MTAR:LOCAL), ABL_NAME)
	EXP:(MTAR:LOCAL):GET_EXP(GETNUM(ABL, ABL_NAME)) += MAX(1, 基礎経験値 * (作業時間 / 15) * RATE / 100 )
	;体力減少処理
	TCVAR:(MTAR:LOCAL):HO体力増減値 = -150
	TCVAR:(MTAR:LOCAL):汗量 += RAND(2000, 3000)

NEXT

;対象が複数いる場合のMPLY(MASTER)の体力減少処理
;IF MTAR:0 != MASTER
TCVAR:(MPLY:0):HO体力増減値 = -150
TCVAR:(MPLY:0):汗量 += RAND(2000, 3000)
;ENDIF

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

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

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE752
#DIMS DYNAMIC ITEM_NAME
#DIMS DYNAMIC 文字列
IF HO_CRAFT_CATEGORY == HO_CRAFT_CATEGORY_ITEM
	CALL GET_ITEM_NAME(TFLAG:クラフト_アイテムID)
ELSEIF HO_CRAFT_CATEGORY == HO_CRAFT_CATEGORY_WEAPON
	CALL GET_WEAPON_STOCK_TABLE(TFLAG:クラフト_武器IDX, "WEAPON_NAME")
ELSEIF HO_CRAFT_CATEGORY == HO_CRAFT_CATEGORY_CLOTH
	CALL GET_CLOTH_NAME(TFLAG:クラフト_衣装部位, TFLAG:クラフト_アイテムID)
ENDIF
ITEM_NAME '= RESULTS
;協力者の有無
IF MTAR_NUM == 0
	PRINTFORML %ANAME(MASTER)%は%ITEM_NAME%の作成を試みた……
ELSE
	PRINTFORML %ANAME(MASTER)%は%ANAME(MTAR:0, MTAR_NUM)%と協力して%ITEM_NAME%の作成を試みた……
ENDIF
PRINTL
IF TFLAG:クラフト_作成量 > 1
	PRINTFORML %ITEM_NAME%を{TFLAG:クラフト_作成量}個入手した！
ELSE
	PRINTFORML %ITEM_NAME%を入手した！
ENDIF

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

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

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


code:
;-------------------------------------------------
;コマンド名称
;------------------------------------------------
@COM_NAME753
RESULTS:0 = 狩猟
RESULTS:1 = 狩猟

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE753
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC ROOM_IDX
#DIM DYNAMIC MODULE_ID
ROOM_IDX = HO_MASTER現在地
;共通部分
CALL COM_ABLE_COMMON(753)
SIF RESULT == 0
	RETURN 0
LOCAL:1 = 0
;コマンドが実行可能な環境にいる
CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "狩猟")
SIF RESULT == 0
	RETURN 0
;主人公のみがMPLYの場合限定
SIF MPLY:0 != MASTER || MPLY_NUM > 1
	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

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM753
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM RATE
#DIM CONST 基礎経験値 = 2

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

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

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

;;MASTERの処理
;-------------------------------------------------

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

	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = 10
	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
	;能力上昇
	RATE = GROWTYPE_RATE(MTAR:LOCAL, "器用") * 12 / 10
	EXP:(MTAR:LOCAL):GET_EXP(GETNUM(ABL, "器用")) += 基礎経験値 * RATE / 100
	;体力減少処理
	TCVAR:(MTAR:LOCAL):HO体力増減値 = -250
	TCVAR:(MTAR:LOCAL):汗量 += RAND(2000, 3000)

NEXT

;能力上昇
RATE = GROWTYPE_RATE(MPLY:0, "器用") * 12 / 10
EXP:(MPLY:0):GET_EXP(GETNUM(ABL, "器用")) += 基礎経験値 * RATE / 100
;対象が複数いる場合のMPLY(MASTER)の体力減少処理
;IF MTAR:0 != MASTER
TCVAR:(MPLY:0):HO体力増減値 = -250
TCVAR:(MPLY:0):汗量 += RAND(2000, 3000)
;ENDIF

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

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

;アイテム獲得処理
VARSET HO_アイテム変化量

;大成功かつ抽選で上位肉入手(観察＋身体の値で鮮肉の大塊を引く可能性アップ）
IF RAND:(MAX(40, 200 - (ABL:(MPLY:0):観察 + ABL:(MPLY:0):身体))) < 40 && TFLAG:コマンド成否 >= 1
	HO_アイテム変化量:ITEM_鮮肉の大塊 = 1
ELSE
	HO_アイテム変化量:ITEM_動物の肉 = RAND(0,2) + TFLAG:コマンド成否
ENDIF

IF HO_アイテム変化量:ITEM_動物の肉 > 0
	HO_アイテム変化量:ITEM_動物の革 = RAND(0,2)
ELSEIF HO_アイテム変化量:ITEM_鮮肉の大塊  > 0
	HO_アイテム変化量:ITEM_動物の革 = RAND(0,5)
ENDIF
CALL CHANGE_ITEM_STOCK_M(HO_アイテム変化量)

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE753
#DIMS DYNAMIC ITEM_NAME
#DIMS DYNAMIC 文字列

IF MTAR:0 == MASTER
	PRINTFORMW %ANAME(MASTER)%は狩りを行った
ELSE
	PRINTFORMW %ANAME(MASTER)%は%ANAME(MTAR:0, MTAR_NUM)%と協力して狩りを行った
ENDIF

;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST753
#DIMS ITEM_NAME
#DIM DYNAMIC アイテム獲得有無
FOR LOCAL, 0, ITEM_LENGTH
	IF HO_アイテム変化量:LOCAL > 0
		CALL GET_ITEM_NAME(LOCAL)
		ITEM_NAME '= RESULTS
		PRINTFORML %ITEM_NAME%を%TOSTR(HO_アイテム変化量:LOCAL)%個入手した
		アイテム獲得有無 ++
	ENDIF
NEXT
IF !アイテム獲得有無
	PRINTFORML しかし何も獲物を捉えることができなかった……
ENDIF
WAIT

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

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


code:
;-------------------------------------------------
;コマンド名称
;------------------------------------------------
@COM_NAME754
RESULTS:0 '= TR("採集")
RESULTS:1 '= TR("採集")

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE754
#DIM DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC ROOM_IDX
#DIM DYNAMIC MODULE_ID
ROOM_IDX = HO_MASTER現在地
;共通部分
CALL COM_ABLE_COMMON(754)
SIF RESULT == 0
	RETURN 0
LOCAL:1 = 0
;コマンドが実行可能な環境にいる
CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "採集")
SIF RESULT == 0
	RETURN 0
;主人公のみがMPLYの場合限定
SIF MPLY:0 != MASTER || MPLY_NUM > 1
	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

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM754
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC PRODUCT_ITEMS, ITEM_LENGTH
#DIM  DYNAMIC GAIN_EXP
#DIMS DYNAMIC EXP_NAME
#DIM  DYNAMIC MODULE_ID

MPLY:0 = MASTER
;一度MTARを初期化
CALL CLEAR_MTAR()

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

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

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

;;MASTERの処理
;-------------------------------------------------

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

	;親密に応じた歓楽のソース追加
	SOURCE:(MTAR:LOCAL):歓楽 = 10
	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体力増減値 = -250
	TCVAR:(MTAR:LOCAL):汗量 += RAND(2000, 3000)

NEXT

TCVAR:(MPLY:0):HO体力増減値 = -250
TCVAR:(MPLY:0):汗量 += RAND(2000, 3000)
;ENDIF

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

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

;アイテム獲得処理:MASTER
VARSET HO_アイテム変化量
CALL HO_生産物定義_採集(PRODUCT_ITEMS, MASTER)
EXP_NAME = %RESULTS%
GAIN_EXP = RESULT
FOR LOCAL, 0, ITEM_LENGTH
	HO_アイテム変化量:LOCAL += PRODUCT_ITEMS:LOCAL
NEXT
;能力上昇
EXP:(MPLY:0):GET_EXP(GETNUM(ABL, EXP_NAME)) += GAIN_EXP

;アイテム獲得処理:同行者
FOR LOCAL, 0, MEMBER_NUM
	CALL HO_生産物定義_採集(PRODUCT_ITEMS, MTAR:LOCAL)
	EXP_NAME = %RESULTS%
	GAIN_EXP = RESULT
	FOR (LOCAL:1), 0, ITEM_LENGTH
		HO_アイテム変化量:(LOCAL:1) += PRODUCT_ITEMS:(LOCAL:1)
	NEXT
	;能力上昇
	EXP:(MTAR:LOCAL):GET_EXP(GETNUM(ABL, EXP_NAME)) += GAIN_EXP
NEXT

;サウンド処理
CALL HO_GET_USE_MODULE_INFO(MASTER)
MODULE_ID = RESULT
SELECTCASE MODULE_ID
	CASE 27;小川
		CALL FL_PLAYSE("Water_0.mp3")
	CASE 156;伐採場
		CALL FL_PLAYSE("Woodcut_0.mp3")
	CASEELSE
		CALL FL_PLAYSE("Dig_1.mp3")
ENDSELECT

;獲得アイテムを在庫に反映
CALL CHANGE_ITEM_STOCK_M(HO_アイテム変化量)

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE754
#DIMS DYNAMIC ITEM_NAME
#DIMS DYNAMIC 文字列

IF MTAR:0 == MASTER
	PRINTFORMW %TR(ANAME(MASTER),"は採集を行った")%
ELSE
	PRINTFORMW %TR(ANAME(MASTER),"は",ANAME(MTAR:0, MTAR_NUM),"と協力して採集を行った")%
ENDIF

;-------------------------------------------------
;地の文(パラメータ・刻印変動後)
;-------------------------------------------------
@COM_TEXT_LAST754
#DIMS ITEM_NAME
#DIM DYNAMIC アイテム獲得有無
#DIM DYNAMIC MODULE_ID

CALL HO_GET_USE_MODULE_INFO(MASTER)
MODULE_ID = RESULT

FOR LOCAL, 0, ITEM_LENGTH
	IF HO_アイテム変化量:LOCAL > 0
		CALL GET_ITEM_NAME(LOCAL)
		ITEM_NAME '= RESULTS
		IF MODULE_ID == 27;小川
			PRINTFORML %TR(ITEM_NAME,"を",TOSTR(HO_アイテム変化量:LOCAL),"匹入手した")%
		ELSE
			PRINTFORML %TR(ITEM_NAME,"を",TOSTR(HO_アイテム変化量:LOCAL),"個入手した")%
		ENDIF
		アイテム獲得有無 ++
	ENDIF
NEXT
IF !アイテム獲得有無
	PRINTFORML %TR("しかし何もみつけることができなかった……")%
ENDIF
WAIT

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

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


code:
;拉致

;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME759
RESULTS:0 = Look at items

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE759
;共通部分
CALL COM_ABLE_COMMON(759)
SIF RESULT == 0
	RETURN 0
;主人公がプレイヤーのとき限定
SIF MPLY:0 != MASTER
	RETURN 0
;MPLY,MTAR各1名のみ
SIF MPLY_NUM !=1 || MTAR_NUM != 1
	RETURN 0
;MTARがSHOP在庫情報を持っていないなら実行不可
SIF DICS_GUEST_SHOP_STOCK:(MTAR:0):0 == ""
	RETURN 0
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM759
#DIMS SHOP_STOCK_ARRAY, MAX_SHOP_STOCKNUM
#DIM  DYNAMIC SHOP_STOCK
#DIM  DYNAMIC IS_NOT_STOCK_VACANT
; ;商店情報一時格納領域にキャラの商店在庫を格納
FOR LOCAL, 0, MAX_SHOP_STOCKNUM
	DICS_SHOP_STOCK_TEMP:LOCAL = %DICS_GUEST_SHOP_STOCK:(MTAR:0):LOCAL%
NEXT
;購入メニュー呼び出し
CALL HO_SHOP_MENU(@"GUEST_SHOP", @"%ANAME(MTAR:0)%の荷物", "DICS_SHOP_STOCK_TEMP")
;購買結果を商店情報一時格納領域からキャラの商店在庫に反映
FOR LOCAL, 0, MAX_SHOP_STOCKNUM
	SIF DICS_SHOP_STOCK_TEMP:LOCAL == ""
		CONTINUE
	IF DIC_GET(DICS_SHOP_STOCK_TEMP:LOCAL, "SHOP_STOCK") != ""
		SHOP_STOCK = TOINT(DIC_GET(DICS_SHOP_STOCK_TEMP:LOCAL, "SHOP_STOCK"))
		IF SHOP_STOCK > 0
			IS_NOT_STOCK_VACANT = 1
		ENDIF
	ELSE
		;在庫数無制限の品がある
		IS_NOT_STOCK_VACANT = 1
	ENDIF
	DICS_GUEST_SHOP_STOCK:(MTAR:0):LOCAL = %DICS_SHOP_STOCK_TEMP:LOCAL%
NEXT
;全品欠品しているならそのキャラの在庫情報をクリア
IF !IS_NOT_STOCK_VACANT
	FOR LOCAL, 0, MAX_SHOP_STOCKNUM
		DICS_GUEST_SHOP_STOCK:(MTAR:0):LOCAL '= ""
	NEXT
ENDIF
RETURN 0

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

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

@COM_AVAILABLE_WHEN759
RETURN コマンド_居住区


code:
;拉致

;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME851
RESULTS:0 '= TR("押し倒す")
RESULTS:1 '= TR("押し倒す")
RESULTS:2 '= TR("誘い受ける")
RESULTS:3 '= TR("誘い受ける")
RESULTS:4 '= TR("誘い受ける")
RESULTS:5 '= TR("誘い受ける")

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE851
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID

;共通部分
CALL COM_ABLE_COMMON(851)
SIF RESULT == 0
	RETURN 0
;主人公が実行または対象であること
SIF !IS_MPLY(MASTER) && !IS_MTAR(MASTER)
	RETURN 0
;ターゲットがいない時不可
SIF MTAR_NUM == 0
	RETURN 0

CALL HO_GET_COMPANION_LIST()
_LIST_MEMBER = %RESULTS%
MEMBER_NUM = RESULT
FOR LOCAL:0, 0, MEMBER_NUM
	CHARA_ID = TOINT(LIST_GET(_LIST_MEMBER, LOCAL:0))
	;同行者が一人でも衆目の目に晒されている場合不可
	CALL HO_CHECK_PUBLIC_EYE(CHARA_ID)
	SIF RESULT == 1
		RETURN 0
	;実行者が行動可能であること
	SIF IS_MPLY(CHARA_ID) && !IS_PLAYABLE(CHARA_ID)
		RETURN 0
NEXT
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM851
#DIM 捕虜調教判定
#DIM 売春判定
#DIM MOB_ID
#DIM DYNAMIC CHARA_ID
#DIM CONST 判定_誘い受け = 3

VARSET PRISONER_TARGET, -1

;●実行値の計算
;実行判定
CALL COM_ORDER_COMMON
SIF RESULT == 0
	RETURN 0

VARI ERR_FLG

FOR LOCAL:0, 0, MPLY_NUM
	CHARA_ID = MPLY:LOCAL
	SIF CHARA_ID == MASTER
		CONTINUE
	IF IS_MTAR(MASTER)
		CALL HO_JUDGE_PUSHDOWN(CHARA_ID, 判定_誘い受け)
	ELSE
		CALL HO_JUDGE_PUSHDOWN(CHARA_ID)
	ENDIF
	IF RESULT == 0
		ERR_FLG ++
	ENDIF
NEXT
FOR LOCAL:0, 0, MTAR_NUM
	CHARA_ID = MTAR:LOCAL
	SIF CHARA_ID == MASTER
		CONTINUE
	IF IS_MTAR(MASTER)
		CALL HO_JUDGE_PUSHDOWN(CHARA_ID, 判定_誘い受け)
	ELSE
		CALL HO_JUDGE_PUSHDOWN(CHARA_ID)
	ENDIF
	IF RESULT == 0
		ERR_FLG ++
	ELSEIF RESULT == 2
		PRISONER_TARGET = MTAR:(LOCAL:0)
		捕虜調教判定 = 1
	ENDIF
NEXT
SIF ERR_FLG > 0
	RETURN 0

;相席状態で押し倒した場合は同行状態にする
FOR LOCAL:0, 0, MTAR_NUM
	IF TCVAR:(MTAR:LOCAL):相席フラグ == 1 && CFLAG:(MTAR:LOCAL):調教参加フラグ == 1
		TCVAR:(MTAR:LOCAL):相席フラグ = 0
		CALL HO_SET_CHARAACT((MTAR:LOCAL), "同行中")
		TCVAR:(MTAR:LOCAL):行動待機時間 = 0
	ENDIF
NEXT

FLAG:ウフフフラグ = 1
CALL HO_PRESERVE_PRETRAIN_STATUS()
TFLAG:調教開始時刻 = HO_TIME
IF !捕虜調教判定
	FLAG:調教モード = 1
ELSE
	FLAG:調教モード = 調教_捕虜調教
ENDIF

IF C_COND("設備用途:触手",,MPLY)
	FOR LOCAL, 0, 2
		CALL QST_TRAIN_MOB_PRESET("触手_設備", "触手")
		MOB_ID = RESULT
		CFLAG:MOB_ID:設備モブ = 1
		TFLAG:参加者数 ++
	NEXT
ELSEIF C_COND("設備用途:獣姦_馬",,MPLY)
	FOR LOCAL, 0, 1
		CALL QST_TRAIN_MOB_PRESET("馬", "牡馬")
		MOB_ID = RESULT
		CFLAG:MOB_ID:設備モブ = 1
		TFLAG:参加者数 ++
	NEXT
ELSEIF C_COND("設備用途:獣姦_豚",,MPLY)
	FOR LOCAL, 0, 2
		CALL QST_TRAIN_MOB_PRESET("豚", "豚")
		MOB_ID = RESULT
		CFLAG:MOB_ID:設備モブ = 1
		TFLAG:参加者数 ++
	NEXT
ELSEIF C_COND("設備用途:獣姦_ワーグ",,MPLY)
	FOR LOCAL, 0, 2
		CALL QST_TRAIN_MOB_PRESET("ワーグ", "ワーグ")
		MOB_ID = RESULT
		CFLAG:MOB_ID:設備モブ = 1
		TFLAG:参加者数 ++
	NEXT
ENDIF

CALL FL_PLAYSE("Cloth_undress_0.mp3")

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE851
PRINTFORMW %ANAME(MPLY:0)%は%ANAME(MTAR:0, MTAR_NUM)%を押し倒した……

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

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

@COM_AVAILABLE_WHEN851
RETURN コマンド_居住区


code:
;-------------------------------------------------
;コマンド名称　服を脱ぐ
; ＮＰＣ自発コマンド専用コマンド
;-------------------------------------------------
@COM_NAME852
RESULTS:0 = 服を脱ぐ

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE852
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID

;リアクションコマンド実行または割込コマンドでのみ実行可能
SIF !TFLAG:リアクションコマンド実行 && !TFLAG:割込コマンド実行
	RETURN 0
;実行者は一人
SIF MPLY_NUM != 1
	RETURN 0
;共通部分
CALL COM_ABLE_COMMON(852)
SIF RESULT == 0
	RETURN 0
;拘束されていたらダメ
SIF IS_BIND(MPLY:0)
	RETURN 0
;完全に露出しているならダメ
SIF C_COND("露出_胸:露出, 露出_秘部:露出","AND",MPLY:0)
	RETURN 0

RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM852
;●実行値の計算
;実行判定
CALL COM_ORDER_COMMON
SIF RESULT == 0
	RETURN 0

;●全プレイヤーについて処理
FOR LOCAL, 0, MPLY_NUM
	SOURCE:(MPLY:LOCAL):逸脱 = 20
	SOURCE:(MPLY:LOCAL):反感 = 10
	SOURCE:(MPLY:LOCAL):露出 = 800

	;主導権に応じた優越・屈従のソース追加
	CALL ADD_SOURCE_INITIATIVE_U(MPLY:LOCAL, 50, 200)

	;どの部位の脱衣を試みるか
	;じっと見られた部位を優先
	CALL RAND_WT_INIT()
	CALL RAND_WT_SET(被覆部位_秘部, 100)
	CALL RAND_WT_SET(被覆部位_乳首, 100)
	IF PREVCOM == T_N("見つめあう")
		SELECTCASE C_COND_MAP_GETS(PREV_MPLY:0, "視線")
			CASE "胸"
				CALL RAND_WT_SET(被覆部位_乳首, 1000)
			CASE "股", "尻"
				CALL RAND_WT_SET(被覆部位_秘部, 1000)
		ENDSELECT
	ENDIF
	;すでに露出してる部位は0補正
	IF C_COND("露出_胸:露出",, MPLY:LOCAL)
		CALL RAND_WT_SET(被覆部位_乳首, 0)
	ENDIF
	IF C_COND("露出_秘部:露出",, MPLY:LOCAL)
		CALL RAND_WT_SET(被覆部位_秘部, 0)
	ENDIF
	LOCAL:3 = RAND_WT_RESULT()
	SELECTCASE LOCAL:3
		CASE 被覆部位_乳首
			CALL C_COND_MAP_SET(MPLY:LOCAL, "服を脱ぐ_脱衣衣装描写", C_COND_MAP_GETS(MPLY:LOCAL, "被覆衣装描写_胸"))
			CALL C_COND_MAP_SET(MPLY:LOCAL, "服を脱ぐ_脱衣部位", "胸")
			CALL HO_STRIP(MPLY:LOCAL, 被覆部位_乳首, RAND:3 ? 衣装状態_脱 # 衣装状態_半脱, 1)
		CASE 被覆部位_秘部
			CALL C_COND_MAP_SET(MPLY:LOCAL, "服を脱ぐ_脱衣衣装描写", C_COND_MAP_GETS(MPLY:LOCAL, "被覆衣装描写_秘部"))
			CALL C_COND_MAP_SET(MPLY:LOCAL, "服を脱ぐ_脱衣部位", "秘部")
			IF C_COND("衣装属性:秘部:めくり可能",, MPLY:LOCAL)
				CALL C_COND_MAP_SET(MPLY:LOCAL, "服を脱ぐ_脱衣", "たくし上げ")
				CALL HO_STRIP(MPLY:LOCAL, 被覆部位_秘部, 衣装状態_半脱, 1)
			ELSE
				CALL HO_STRIP(MPLY:LOCAL, 被覆部位_秘部, RAND:3 ? 衣装状態_脱 # 衣装状態_半脱, 1)
			ENDIF
	ENDSELECT
NEXT

;●全ターゲットについて処理
FOR LOCAL, 0, MTAR_NUM
	SOURCE:(MTAR:LOCAL):感応 = 25
	SOURCE:(MTAR:LOCAL):逸脱 = 20
	SOURCE:(MTAR:LOCAL):嗜虐 = 10
	;主導権に応じた優越・屈従のソース追加
	CALL ADD_SOURCE_INITIATIVE_U(MTAR:LOCAL, 160, 80)
NEXT

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

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

;レズ・ＢＬ経験基準値
TFLAG:レズ・ＢＬ経験基準値 = 4

CALL FL_PLAYSE("Cloth_undress_0.mp3")

RETURN 1

;-------------------------------------------------
;固有の実行判定
;-------------------------------------------------
@COM_ORDER_TARGET852(ARG:0)
;実行値の設定
TCVAR:(ARG:0):実行値 = 60

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

CALL COM_ORDER_ELEMENT(ARG:0, @"欲望Lv{ABL:(ARG:0):欲望}", ABL:(ARG:0):欲望 * 3)
CALL COM_ORDER_ELEMENT(ARG:0, @"露出Lv{ABL:(ARG:0):露出}", ABL:(ARG:0):露出 * 4)

LOCAL:0 = GET_PALAMLV(PALAM:(ARG:0):欲情)
CALL COM_ORDER_ELEMENT(ARG:0, @"欲情Lv{LOCAL:0}", MIN(LOCAL:0 * 3, 30))

IF TCVAR:(ARG:0):媚薬
	CALL COM_ORDER_ELEMENT(ARG:0, "媚薬", 6)
ENDIF

IF TALENT:(ARG:0):恥じらい
	CALL COM_ORDER_ELEMENT(ARG:0, "恥じらい", -12)
ENDIF
IF TALENT:(ARG:0):恥薄い
	CALL COM_ORDER_ELEMENT(ARG:0, "恥薄い", 8)
ENDIF
IF TALENT:(ARG:0):自制心
	CALL COM_ORDER_ELEMENT(ARG:0, "自制心", -6)
ENDIF
IF TALENT:(ARG:0):目立ちたがり
	CALL COM_ORDER_ELEMENT(ARG:0, "目立ちたがり", 6)
ENDIF
IF !TALENT:(ARG:0):合意 && !TALENT:(ARG:0):親友
	CALL COM_ORDER_ELEMENT(ARG:0, "合意なし", -10)
ENDIF

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE852
#DIMS DYNAMIC 衣装描写
#DIMS DYNAMIC 下着描写
#DIMS DYNAMIC 実行名
#DIMS DYNAMIC 態度描写

FOR LOCAL, 0, MPLY_NUM
	実行名 = %ANAME(MPLY:LOCAL)%

	態度描写 '= ""
	IF CHECK_EMOTION(MPLY:LOCAL, "GOOD")
		CALLF ATTITUDE(MPLY:LOCAL, "露出")
		IF RESULT:0 > 1
			IF RESULT:1 < -1
				態度描写 '= "羞恥に頬を染めながらも笑みを浮かべて、"
			ELSEIF RESULT:1 > 1
				態度描写 '= "誘うような蠱惑的な笑みを浮かべて、"
			ENDIF
		ELSEIF RESULT:0 < -1 && RESULT:1 < -1
			態度描写 '= "羞恥のあまり耳まで朱に焦がしながら、伏し目がちに"
		ELSEIF RESULT:0 < -1
			態度描写 '= "羞恥に頬を染めながら、おずおずと"
		ENDIF
	ENDIF

	衣装描写 = %C_COND_MAP_GETS(MPLY:LOCAL, "服を脱ぐ_脱衣衣装描写")%
	IF C_COND_MAP_GETS(MPLY:LOCAL, "服を脱ぐ_脱衣") == "たくし上げ"

		PRINTFORML %実行名%は%態度描写%%ANAME(MTAR, MTAR_NUM)%の前で%衣装描写%をそっとたくし上げてみせた…

		下着描写 = %C_COND_MAP_GETS(MPLY:LOCAL, "被覆衣装描写_秘部_下着")%
		IF 下着描写 != ""
			SIF IS_WET(MPLY:LOCAL) && IS_ESTRUS(MPLY:LOCAL)
				下着描写 = %語彙_愛液()%%S_R(@"でとろとろになった/でぐっしょり濡れた/の滴る/で湿った")%%下着描写%
			CALLF TAG_PRINTH(@"つまみ上げた布地の下から@C:{カラー_ピンク}@%下着描写%@/C@があらわになった…")
		ELSEIF !HAS_PENIS(MPLY:LOCAL)
			CALLF TAG_PRINTH(@"つまみ上げた布地の下から@C:{カラー_ピンク}@%STR_BODY("クリ：感度：欲情", MPLY:LOCAL)%@/C@があらわになった…")
		ELSE
			CALLF TAG_PRINTH(@"つまみ上げた布地の下から@C:{カラー_ピンク}@ペニス@/C@があらわになった…")
		ENDIF
		WAIT
	ELSE
		PRINTFORML %実行名%は%態度描写%%ANAME(MTAR, MTAR_NUM)%の前で%衣装描写%をそっと脱ぎ下ろした…
		IF C_COND("露出_胸:露出",,MPLY:LOCAL) && C_COND("服を脱ぐ_脱衣部位:胸",,MPLY:LOCAL)
			CALLF TAG_PRINT(@"その下から@C:{カラー_ピンク}@%STR_BODY("胸：長", MPLY:LOCAL)%@/C@があらわになった…", 1)
		ELSEIF C_COND("露出_秘部:露出",,MPLY:LOCAL) && C_COND("服を脱ぐ_脱衣部位:秘部",,MPLY:LOCAL)
			IF !HAS_PENIS(MPLY:LOCAL)
				CALLF TAG_PRINT(@"その下から@C:{カラー_ピンク}@%STR_BODY("クリ：感度：欲情", MPLY:LOCAL)%@/C@があらわになった…", 1)
				IF IS_WET(MPLY:LOCAL) && IS_ESTRUS(MPLY:LOCAL)
					CALLF TAG_PRINT(@"@C:{カラー_ピンク}@すでにすっかり濡れそぼっており、%語彙_愛液()%が%S_R("とろりと糸を引いて滴っている/滴っている/とろとろと糸を引いている/透明な糸を引いている")%@/C@", 1)
				ENDIF
			ELSE
				CALLF TAG_PRINT(@"その下から@C:{カラー_ピンク}@ペニス@/C@があらわになった…", 1)
			ENDIF
		ENDIF
		WAIT
	ENDIF
	CALL C_COND_MAP_REMOVE(MPLY:LOCAL, "服を脱ぐ_脱衣")
	CALL C_COND_MAP_REMOVE(MPLY:LOCAL, "服を脱ぐ_脱衣衣装描写")
	CALL C_COND_MAP_REMOVE(MPLY:LOCAL, "服を脱ぐ_脱衣部位")
NEXT
;-------------------------------------------------

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

@COM_AVAILABLE_WHEN852
IF FLAG:調教モード != 調教_居住区
	RETURN コマンド_ウフフ
ELSE
	RETURN コマンド_居住区
ENDIF


code:
;-------------------------------------------------
;コマンド名称　服を脱がす
;-------------------------------------------------
@COM_NAME853
VARS COM_NAME

SELECTCASE COM_OPTION:853
	CASE 0
		COM_NAME '= TR("服を脱がす")
	CASE 1
		COM_NAME '= TR("服を脱がす(上)")
	CASE 2
		COM_NAME '= TR("服を脱がす(下)")
ENDSELECT

RESULTS:0 = %COM_NAME%
RESULTS:1 = %COM_NAME%
RESULTS:2 = %COM_NAME%
RESULTS:3 = %COM_NAME%
RESULTS:4 = %COM_NAME%
RESULTS:5 = %COM_NAME%

;-------------------------------------------------
; このコマンドがどのタブに入るか
;-------------------------------------------------
@COM_CATEGORY853
IF FLAG:調教モード != 調教_居住区 && FLAG:調教モード != 調教_クエスト
	RETURN 0
ELSE
	RETURN 10
ENDIF

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE853
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID

;実行/対象は一人
SIF MPLY_NUM != 1 || MTAR_NUM != 1
	RETURN 0
;共通部分
CALL COM_ABLE_COMMON(853)
SIF RESULT == 0
	RETURN 0
;拘束されていたらダメ
SIF IS_BIND(MPLY:0)
	RETURN 0
;届かないならダメ
SIF !CAN_REACH_BODY(MPLY, MTAR)
	RETURN 0
;完全に露出しているならダメ
SIF C_COND("露出_胸:露出, 露出_秘部:露出","AND",MTAR:0)
	RETURN 0
RETURN 1

;-------------------------------------------------
;オプションを持つコマンドの場合オプション数を指定
;-------------------------------------------------
@COM_HAS_OPTION853
RETURN 2

;-------------------------------------------------
;オプションの実行可否判定
;-------------------------------------------------
@COM_OPTION_ABLE853(COMOPTION)
#DIM COMOPTION
SELECTCASE COMOPTION
	CASE 0
		RETURN 1
	CASE 1
		IF !C_COND("露出_胸:露出",,MTAR:0)
			RETURN 1
		ENDIF
	CASE 2
		IF !C_COND("露出_秘部:露出",,MTAR:0)
			RETURN 1
		ENDIF
ENDSELECT

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM853
#DIM CHARA_ID
;●実行値の計算
;実行判定
CALL COM_ORDER_COMMON
SIF RESULT == 0
	RETURN 0

;●プレイヤーについて処理
FOR LOCAL:0, 0, MPLY_NUM
	CHARA_ID = MPLY:(LOCAL:0)
	DOWNBASE:(CHARA_ID):体力 += 75

	SOURCE:(CHARA_ID):接触 = 45
	CALL ADD_SOURCE_INITIATIVE_U(CHARA_ID, 75, 10)
NEXT

;主導権に応じた優越・屈従のソース追加

;●全ターゲットについて処理
FOR LOCAL:0, 0, MTAR_NUM
	CHARA_ID = MTAR:(LOCAL:0)

	DOWNBASE:(CHARA_ID):体力 += 60
	SOURCE:(CHARA_ID):露出 = 150
	SOURCE:(CHARA_ID):接触 = 45

	;主導権に応じた優越・屈従のソース追加
	CALL ADD_SOURCE_INITIATIVE_U(CHARA_ID, 0, 50)

	;コマンドオプションが未設定なら乱数で
	IF (RAND:2 && !C_COND("露出_胸:露出",,CHARA_ID) && !COM_OPTION:853) || (COM_OPTION:853 == 1 && !C_COND("露出_胸:露出",,CHARA_ID))
		CALL C_COND_MAP_SET(CHARA_ID, "脱衣衣装属性", C_COND_MAP_GETS(CHARA_ID, "被覆衣装属性_胸"))
		CALL C_COND_MAP_SET(CHARA_ID, "脱衣衣装描写", C_COND_MAP_GETS(CHARA_ID, "被覆衣装描写_胸"))
		CALL HO_STRIP(CHARA_ID, 被覆部位_乳首, RAND:2 ? 衣装状態_脱 # 衣装状態_半脱, 1)
	ELSE
		CALL C_COND_MAP_SET(CHARA_ID, "脱衣衣装属性", C_COND_MAP_GETS(CHARA_ID, "被覆衣装属性_秘部"))
		CALL C_COND_MAP_SET(CHARA_ID, "脱衣衣装描写", C_COND_MAP_GETS(CHARA_ID, "被覆衣装描写_秘部"))
		CALL HO_STRIP(CHARA_ID, 被覆部位_秘部, RAND:2 ? 衣装状態_脱 # 衣装状態_半脱, 1)
	ENDIF
NEXT

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

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

;レズ・ＢＬ経験基準値
TFLAG:レズ・ＢＬ経験基準値 = 2

CALL FL_PLAYSE("Cloth_undress_0.mp3")

RETURN 1

;-------------------------------------------------
;固有の実行判定
;-------------------------------------------------
@COM_ORDER_TARGET853(ARG:0)

;特定のフラグが立っている場合強制成功
SIF CFLAG:(ARG:0):凌辱被害者フラグ
	RETURN 0
SIF TFLAG:リアクションコマンド実行 || TFLAG:割込コマンド実行
	RETURN 0

;実行値の設定
TCVAR:(ARG:0):実行値 = 110

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

CALL COM_ORDER_ELEMENT(ARG:0, @"欲望Lv{ABL:(ARG:0):欲望}", ABL:(ARG:0):欲望 * 1)

LOCAL:0 = GET_PALAMLV(PALAM:(ARG:0):欲情)
CALL COM_ORDER_ELEMENT(ARG:0, @"欲情Lv{LOCAL:0}", MIN(LOCAL:0 * 1, 10))

IF TALENT:(ARG:0):大人しい
	CALL COM_ORDER_ELEMENT(ARG:0, "大人しい", -3)
ENDIF
IF TALENT:(ARG:0):恥じらい
	CALL COM_ORDER_ELEMENT(ARG:0, "恥じらい", -2)
ENDIF
IF TALENT:(ARG:0):献身的
	CALL COM_ORDER_ELEMENT(ARG:0, "献身的", 3)
ENDIF

IF ABL:(ARG:0):主導度Ｕ >= 500
	CALL COM_ORDER_ELEMENT(ARG:0, "主導度", 15)
ELSEIF ABL:(ARG:0):主導度Ｕ >= 300
	CALL COM_ORDER_ELEMENT(ARG:0, "主導度", 10)
ELSEIF ABL:(ARG:0):主導度Ｕ >= 100
	CALL COM_ORDER_ELEMENT(ARG:0, "主導度", 5)
ELSEIF ABL:(ARG:0):主導度Ｕ > -100
	CALL COM_ORDER_ELEMENT(ARG:0, "主導度", 0)
ELSE
	CALL COM_ORDER_ELEMENT(ARG:0, "主導度", -5)
ENDIF

IF ABL:(ARG:0):倒錯度 >= 800
	CALL COM_ORDER_ELEMENT(ARG:0, "倒錯度", 20)
ELSEIF ABL:(ARG:0):倒錯度 >= 500
	CALL COM_ORDER_ELEMENT(ARG:0, "倒錯度", 15)
ELSEIF ABL:(ARG:0):倒錯度 >= 300
	CALL COM_ORDER_ELEMENT(ARG:0, "倒錯度", 10)
ELSEIF ABL:(ARG:0):倒錯度 >= 100
	CALL COM_ORDER_ELEMENT(ARG:0, "倒錯度", 5)
ELSE
	CALL COM_ORDER_ELEMENT(ARG:0, "倒錯度", 0)
ENDIF

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE853
#DIMS DYNAMIC 衣装属性
#DIMS DYNAMIC 衣装描写
#DIMS DYNAMIC 実行名
#DIMS DYNAMIC 対象名

実行名 = %ANAME(MPLY:0)%
対象名 = %ANAME(MTAR:0, MTAR_NUM)%

FOR LOCAL, 0, MTAR_NUM
	衣装描写 = %C_COND_MAP_GETS(MTAR:LOCAL, "脱衣衣装描写")%
	衣装属性 = %C_COND_MAP_GETS(MTAR:LOCAL, "脱衣衣装属性")%
	IF LIST_INDEXOF(衣装属性, "ボタン") != -1
		PRINTFORM %実行名%は%対象名%の%衣装描写%
		PRINTFORMW %S_R("のボタンを一つ一つ外していった/のボタンに指をかけ、上から外していった/のボタンを順番に外していった")%……
	ELSEIF LIST_INDEXOF(衣装属性, "肩紐") != -1
		PRINTFORM %実行名%は%対象名%の%衣装描写%
		PRINTFORMW %S_R("の肩紐に指を掛け、するりと脱がし下ろした/の肩紐を下ろし、素肌をさらけ出させた/の肩紐をするりと下げた")%……
	ELSEIF LIST_INDEXOF(衣装属性, "パンティ") != -1 || LIST_INDEXOF(衣装属性, "パンツ") != -1
		PRINTFORM %実行名%は%対象名%の%衣装描写%
		PRINTFORMW %S_R("を手でつまみ、するりと脱がし下ろした/に手をかけ、取り払った/に手をのせ、するりと下げた")%……
	ELSEIF LIST_INDEXOF(衣装属性, "バックル") != -1
		PRINTFORM %実行名%は%対象名%の%衣装描写%のバックルに指をかけて外し、
		PRINTFORMW %S_R("ゆっくりと脱がし下ろした/するりと下ろした")%……
	ELSE
		PRINTFORM %実行名%は%対象名%の%衣装描写%
		PRINTFORMW %S_R("に手を掛け、脱がし下ろした/を取り払った")%……
	ENDIF
	CALL C_COND_MAP_REMOVE(MTAR:LOCAL, "脱衣衣装描写")
	CALL C_COND_MAP_REMOVE(MTAR:LOCAL, "脱衣衣装属性")
NEXT
;-------------------------------------------------

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

@COM_AVAILABLE_WHEN853
IF FLAG:調教モード != 調教_居住区
	RETURN コマンド_ウフフ
ELSE
	RETURN コマンド_居住区
ENDIF


code:
;-------------------------------------------------
;コマンド名称　服を破る
;-------------------------------------------------
@COM_NAME854
LOCALS:0 = 服

RESULTS:0 '= TR(LOCALS:0,"を破る")
RESULTS:1 '= TR(LOCALS:0,"を破らさせられる")
RESULTS:2 '= TR(LOCALS:0,"を破らせる")
RESULTS:3 '= TR(LOCALS:0,"を破られる")
RESULTS:4 '= TR(LOCALS:0,"を破らせる")
RESULTS:5 '= TR(LOCALS:0,"破り見せつけ")

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE854
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID

;実行/対象は一人
SIF MPLY_NUM != 1 || MTAR_NUM != 1
	RETURN 0
;共通部分
CALL COM_ABLE_COMMON(854)
SIF RESULT == 0
	RETURN 0
;実行者が対象者に手が届く
SIF !CAN_REACH_BODY(MPLY:0, MTAR:0) && !FLAG:RECHECKING
	RETURN 0
;完全に露出しているならダメ
SIF C_COND("露出_胸:露出, 露出_秘部:露出","AND",MTAR:0)
	RETURN 0
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM854
#DIM CHARA_ID
;●実行値の計算
;実行判定
CALL COM_ORDER_COMMON
SIF RESULT == 0
	RETURN 0

;●プレイヤーについて処理
FOR LOCAL:0, 0, MPLY_NUM
	CHARA_ID = MPLY:(LOCAL:0)
	DOWNBASE:(CHARA_ID):体力 += 100
	EXP:(CHARA_ID):嗜虐経験値 += RAND:3 + 1

	SOURCE:(CHARA_ID):嗜虐 = 150
	SOURCE:(CHARA_ID):逸脱 = 50
	SOURCE:(CHARA_ID):接触 = 30
	CALL ADD_SOURCE_INITIATIVE_U(CHARA_ID, 150, 50)
NEXT

;主導権に応じた優越・屈従のソース追加

;●全ターゲットについて処理
FOR LOCAL:0, 0, MTAR_NUM
	CHARA_ID = MTAR:(LOCAL:0)

	DOWNBASE:(CHARA_ID):体力 += 60
	SOURCE:(CHARA_ID):苦痛 = 25
	SOURCE:(CHARA_ID):露出 = 150
	SOURCE:(CHARA_ID):逸脱 = 50
	SOURCE:(CHARA_ID):接触 = 30

	EXP:(CHARA_ID):被虐経験値 += RAND:3 + 1

	;主導権に応じた優越・屈従のソース追加
	CALL ADD_SOURCE_INITIATIVE_U(CHARA_ID, 0, 150)
	FOR LOCAL:2, 0, MPLY_NUM
		IF GETBIT(TALENT:(MPLY:(LOCAL:2)):淫乱系, 素質_淫乱_サド)
			TIMES SOURCE:(CHARA_ID):苦痛, 1.50
		ENDIF
	NEXT
	;服を破る
	IF RAND:2 && !C_COND("露出_胸:露出",,CHARA_ID)
		CALL C_COND_MAP_SET(CHARA_ID, "脱衣衣装属性", C_COND_MAP_GETS(CHARA_ID, "被覆衣装属性_胸"))
		CALL C_COND_MAP_SET(CHARA_ID, "脱衣衣装描写", C_COND_MAP_GETS(CHARA_ID, "被覆衣装描写_胸"))
		CALL HO_STRIP(CHARA_ID, 被覆部位_乳首, 衣装状態_破, 1)
	ELSE
		CALL C_COND_MAP_SET(CHARA_ID, "脱衣衣装属性", C_COND_MAP_GETS(CHARA_ID, "被覆衣装属性_秘部"))
		CALL C_COND_MAP_SET(CHARA_ID, "脱衣衣装描写", C_COND_MAP_GETS(CHARA_ID, "被覆衣装描写_秘部"))
		CALL HO_STRIP(CHARA_ID, 被覆部位_秘部, 衣装状態_破, 1)
	ENDIF
NEXT

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

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

;レズ・ＢＬ経験基準値
TFLAG:レズ・ＢＬ経験基準値 = 2

CALL FL_PLAYSE("Tear_0.mp3")

RETURN 1

;-------------------------------------------------
;固有の実行判定
;-------------------------------------------------
@COM_ORDER_TARGET854(ARG:0)

;特定のフラグが立っている場合強制成功
SIF CFLAG:(ARG:0):凌辱被害者フラグ || CFLAG:(ARG:0):捕虜先 == CFLAG:MASTER:所属
	RETURN 0
;実行値の設定
TCVAR:(ARG:0):実行値 = 110

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

CALL COM_ORDER_ELEMENT(ARG:0, @"欲望Lv{ABL:(ARG:0):欲望}", ABL:(ARG:0):欲望 * 1)
CALL COM_ORDER_ELEMENT(ARG:0, @"マゾLv{ABL:(ARG:0):マゾ}", ABL:(ARG:0):マゾ * 3)

LOCAL:0 = GET_PALAMLV(PALAM:(ARG:0):欲情)
CALL COM_ORDER_ELEMENT(ARG:0, @"欲情Lv{LOCAL:0}", MIN(LOCAL:0 * 1, 10))

IF TALENT:(ARG:0):大人しい
	CALL COM_ORDER_ELEMENT(ARG:0, "大人しい", -3)
ENDIF
IF TALENT:(ARG:0):恥じらい
	CALL COM_ORDER_ELEMENT(ARG:0, "恥じらい", -2)
ENDIF
IF TALENT:(ARG:0):献身的
	CALL COM_ORDER_ELEMENT(ARG:0, "献身的", 3)
ENDIF
IF TALENT:(ARG:0):Ｓ気質
	CALL COM_ORDER_ELEMENT(ARG:0, "Ｍ気質", 6)
ENDIF

IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_マゾ)
	CALL COM_ORDER_ELEMENT(ARG:0, "マゾ", 40)
ELSE
	IF ABL:(ARG:0):主導度Ｕ >= 500
		CALL COM_ORDER_ELEMENT(ARG:0, "主導度", 15)
	ELSEIF ABL:(ARG:0):主導度Ｕ >= 300
		CALL COM_ORDER_ELEMENT(ARG:0, "主導度", 10)
	ELSEIF ABL:(ARG:0):主導度Ｕ >= 100
		CALL COM_ORDER_ELEMENT(ARG:0, "主導度", 5)
	ELSEIF ABL:(ARG:0):主導度Ｕ > -100
		CALL COM_ORDER_ELEMENT(ARG:0, "主導度", 0)
	ELSE
		CALL COM_ORDER_ELEMENT(ARG:0, "主導度", -5)
	ENDIF

	IF ABL:(ARG:0):倒錯度 >= 800
		CALL COM_ORDER_ELEMENT(ARG:0, "倒錯度", 20)
	ELSEIF ABL:(ARG:0):倒錯度 >= 500
		CALL COM_ORDER_ELEMENT(ARG:0, "倒錯度", 15)
	ELSEIF ABL:(ARG:0):倒錯度 >= 300
		CALL COM_ORDER_ELEMENT(ARG:0, "倒錯度", 10)
	ELSEIF ABL:(ARG:0):倒錯度 >= 100
		CALL COM_ORDER_ELEMENT(ARG:0, "倒錯度", 5)
	ELSE
		CALL COM_ORDER_ELEMENT(ARG:0, "倒錯度", 0)
	ENDIF
ENDIF

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE854
#DIMS DYNAMIC 衣装属性
#DIMS DYNAMIC 衣装描写
#DIMS DYNAMIC 実行名
#DIMS DYNAMIC 対象名

実行名 = %ANAME(MPLY:0)%
対象名 = %ANAME(MTAR:0, MTAR_NUM)%

FOR LOCAL, 0, MTAR_NUM
	衣装描写 = %C_COND_MAP_GETS(MTAR:LOCAL, "脱衣衣装描写")%
	衣装属性 = %C_COND_MAP_GETS(MTAR:LOCAL, "脱衣衣装属性")%
	IF LIST_INDEXOF(衣装属性, "ボタン") != -1 || LIST_INDEXOF(衣装属性, "シャツ") != -1 || LIST_INDEXOF(衣装属性, "ブラ") != -1
		PRINTFORM %実行名%は%対象名%%S_R("にのしかかると/を押さえつけると/に馬乗りになると/の")%
		PRINTFORMW %衣装描写%の胸元を鷲掴みにし、強引に%S_R("剥ぎ取った/引き裂いた/むしり取った")%……！
	ELSEIF LIST_INDEXOF(衣装属性, "スカート") != -1
		PRINTFORM %実行名%は%対象名%%S_R("にのしかかると/を押さえつけると/に馬乗りになると/の")%
		PRINTFORMW スカートを捲り上げ、引き裂くように%衣装描写%をむしり取った……！
	ELSEIF LIST_INDEXOF(衣装属性, "パンティ") != -1 || LIST_INDEXOF(衣装属性, "パンツ") != -1
		PRINTFORM %実行名%は%対象名%%S_R("にのしかかると/を押さえつけると/に馬乗りになると/の")%
		PRINTFORMW %衣装描写%を%S_R("引き裂くようにむしり取った/ずり下げ、奪い取るように剥ぎ取った/強引に引き裂いた")%……！
	ELSE
		PRINTFORM %実行名%は%対象名%%S_R("にのしかかると/を押さえつけると/に馬乗りになると/の")%
		PRINTFORMW %衣装描写%を掴むと%S_R("引き裂くようにむしり取った/強引に引き裂いた")%……！
	ENDIF
	CALL C_COND_MAP_REMOVE(MTAR:LOCAL, "脱衣衣装描写")
	CALL C_COND_MAP_REMOVE(MTAR:LOCAL, "脱衣衣装属性")
NEXT
;-------------------------------------------------

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

@COM_AVAILABLE_WHEN854
IF FLAG:調教モード != 調教_居住区
	RETURN コマンド_ウフフ
ELSE
	RETURN コマンド_居住区
ENDIF


code:
;-------------------------------------------------
;コマンド名称　着替え
;-------------------------------------------------
@COM_NAME855
RESULTS:0 = Change of clothes

;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE855
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID

;共通部分
CALL COM_ABLE_COMMON(855)
SIF RESULT == 0
	RETURN 0
;実行は一人
SIF MPLY_NUM != 1
	RETURN 0
;拘束されていたらダメ
SIF IS_BIND(MPLY:0)
	RETURN 0
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM855
#DIM CHARA_ID
#DIM DYNAMIC PRESET

PRINTFORML どの服に着替えようか。衣装ドロアに衣装を準備してあれば着替えることができる

PRINTL
LOCALS '= ""

{
	LOCALS = %TEXT_CONCATEC(
		"<button value='0'>[いつもの服]</button>" + "
", 1
		,"<button value='1'>[夜間の装い]</button>" + "
", 1
		,"<button value='2'>[冒険用の服]</button>" + "
", 1
		,"<button value='3'>[水着]</button>" + "
", 1
		,"<button value='4'>[舞台用衣装]</button>" + "
", 1
		,"
", 1
		,"<button value='9'>[やっぱりやめる]</button>" + "
", 1
		)%
}

HTML_PRINT LOCALS

BINPUT
CLEARLINE 1
PRESET = RESULT
SELECTCASE PRESET
	CASE 0 TO 4
		FOR LOCAL, 0, MPLY_NUM
			CFLAG:(MPLY:LOCAL):衣装プリセット = PRESET
			CALL HO_REDRESS(MPLY:LOCAL)
		NEXT
		FOR LOCAL, 0, MTAR_NUM
			CFLAG:(MTAR:LOCAL):衣装プリセット = PRESET
			CALL HO_REDRESS(MTAR:LOCAL)
		NEXT
	CASE 9
		RETURN 0
ENDSELECT
PRINTL
PRINTFORMW 着替え終わった！

RETURN 0

;-------------------------------------------------
;コマンド区分
;-------------------------------------------------
@COM_AVAILABLE_WHEN855
IF FLAG:調教モード != 調教_居住区
	RETURN コマンド_日常
ELSE
	RETURN コマンド_居住区
ENDIF


code:
;-------------------------------------------------
;コマンド名称
;-------------------------------------------------
@COM_NAME860
LOCALS:0 '= "奉仕"

RESULTS:0 '= TR(LOCALS:0,"を要求")
RESULTS:1 '= TR(LOCALS:0,"を要求")
RESULTS:2 '= TR(LOCALS:0,"する")
RESULTS:3 '= TR(LOCALS:0,"する")
RESULTS:4 '= TR(LOCALS:0,"する")
RESULTS:5 '= TR(LOCALS:0,"させる")
;-------------------------------------------------
;選択可否判定
;-------------------------------------------------
@COM_ABLE860
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC スケベモブがいる

;共通部分
CALL COM_ABLE_COMMON(860)
SIF RESULT == 0
	RETURN 0
SIF MPLY_NUM == 0 || MTAR_NUM == 0
	RETURN 0

;各メンバーの判定
CALL HO_GET_COMPANION_LIST()
_LIST_MEMBER = %RESULTS%
MEMBER_NUM = RESULT
FOR LOCAL:0, 0, MEMBER_NUM
	CHARA_ID = TOINT(LIST_GET(_LIST_MEMBER, LOCAL:0))
	;同行者が一人でも衆目の目に晒されている場合不可
	CALL HO_CHECK_PUBLIC_EYE(CHARA_ID)
	SIF RESULT == 1
		RETURN 0
	;能動的にコマンドを実行できないなら不可
	SIF !IS_PLAYABLE(CHARA_ID)
		RETURN 0
	;疲れているなら不可
	SIF IS_TIRED(CHARA_ID)
		RETURN 0
NEXT
;DEBUGPRINTFORML MPLY:0 = {MPLY:0},MTAR:0 = {MTAR:0}
RETURN 1

;-------------------------------------------------
;メイン処理
;-------------------------------------------------
@COM860
#DIM 捕虜調教判定
#DIM 売春判定
#DIM  DYNAMIC MODULE_ID
#DIM  DYNAMIC MOB_ID
#DIM  DYNAMIC 過激な奉仕
#DIMS DYNAMIC 奉仕タイプ詳細

VARSET PRISONER_TARGET, -1

;●実行値の計算
;実行判定
CALL COM_ORDER_COMMON
SIF RESULT == 0
	RETURN 0

CALL HO_GET_USE_MODULE_INFO(MPLY)
MODULE_ID = RESULT

;奉仕カテゴリ選択
TFLAG:奉仕カテゴリ = 0
PRINTL
IF MPLY == MASTER
	PRINTFORML %ANAME(MTAR, MTAR_NUM)%にどんな奉仕をさせよう……
ELSE
	PRINTFORML %ANAME(MPLY)%は%ANAME(MTAR, MTAR_NUM)%にどんな奉仕を望んでいるのだろう……
ENDIF
PRINTL
IF C_COND("設備属性:グローリーホール",,MPLY)
	{
		LOCALS = %TEXT_CONCATEC(
			"<button value='101'>[壁越しに口で奉仕させる]</button>" + "
",
			,"<button value='102'>[手で奉仕させる]</button>" + "
", 1
			,"<button value='200'>[やっぱりやめる]</button>" + "
", 1
			)%
	}
ELSEIF C_COND("設備用途:触手",,MPLY)
	{
		LOCALS = %TEXT_CONCATEC(
			"<button value='150'>[触手の群れに捧げる]</button>" + "
",
			,"<button value='151'>[一緒に触手に飛び込む]</button>" + "
", 1
			,"<button value='200'>[やっぱりやめる]</button>" + "
", 1
			)%
	}
ELSEIF C_COND("設備用途:獣姦_馬",,MPLY)
	{
		LOCALS = %TEXT_CONCATEC(
			"<button value='161'>[牡馬に種付させる]</button>" + "
",
			,"<button value='162'>[一緒に牡馬に種付される]</button>" + "
", 1
			,"<button value='200'>[やっぱりやめる]</button>" + "
", 1
			)%
	}
ELSEIF C_COND("設備用途:獣姦_豚",,MPLY)
	{
		LOCALS = %TEXT_CONCATEC(
			"<button value='171'>[豚の群れに放り込む]</button>" + "
",
			,"<button value='172'>[一緒に豚の群れに飛び込む]</button>" + "
", 1
			,"<button value='200'>[やっぱりやめる]</button>" + "
", 1
			)%
	}
ELSEIF C_COND("設備用途:獣姦_ワーグ",,MPLY)
	{
		LOCALS = %TEXT_CONCATEC(
			"<button value='181'>[ワーグにあてがう]</button>" + "
",
			,"<button value='182'>[一緒にワーグに身を捧げる]</button>" + "
", 1
			,"<button value='200'>[やっぱりやめる]</button>" + "
", 1
			)%
	}
ELSE
	{
		LOCALS = %TEXT_CONCATEC(
			"<button value='100'>[好きにさせる]</button>" + "
", 1
			,"<button value='101'>[口で奉仕させる]</button>" + "
", 1
			,"<button value='102'>[手で奉仕させる]</button>" + "
", 1
			,"<button value='103'>[Ｖ性交させる]</button>" + "
", MPLY == MASTER || (MPLY != MASTER && ABL:MPLY:性知識 > 1)
			,"<button value='104'>[Ａ性交させる]</button>" + "
", MPLY == MASTER || (MPLY != MASTER && ABL:MPLY:性知識 > 1)
			,"<button value='105'>[自分を慰めさせる]</button>" + "
", 1
			,"<button value='200'>[やっぱりやめる]</button>" + "
", 1
			)%
	}
ENDIF
HTML_PRINT LOCALS
WHILE 1
	ONEINPUT
	IF INRANGE(RESULT, 100, 200)
		BREAK
	ENDIF
WEND
PRINTL

SELECTCASE RESULT
	CASE 100
		TFLAG:奉仕カテゴリ = 奉仕_通常
	CASE 101
		TFLAG:奉仕カテゴリ = 奉仕_口淫
		IF !HAS_PENIS(MPLY) && !HAS_PENIS(MTAR)
			TFLAG:奉仕カテゴリ = 奉仕_舌技させる
		ENDIF
	CASE 102
		TFLAG:奉仕カテゴリ = 奉仕_手淫
	CASE 103
		TFLAG:奉仕カテゴリ = 奉仕_Ｖ性交
	CASE 104
		TFLAG:奉仕カテゴリ = 奉仕_Ａ性交
	CASE 105
		TFLAG:奉仕カテゴリ = 奉仕_自慰させる
	CASE 150
		TFLAG:奉仕カテゴリ = 奉仕_触手に捧げる
		過激な奉仕 = 1
	CASE 151
		TFLAG:奉仕カテゴリ = 奉仕_触手乱交
		過激な奉仕 = 1
	CASE 161
		TFLAG:奉仕カテゴリ = 奉仕_獣姦される
		奉仕タイプ詳細 '= "獣姦_馬"
		過激な奉仕 = 1
	CASE 162
		TFLAG:奉仕カテゴリ = 奉仕_獣姦乱交
		奉仕タイプ詳細 '= "獣姦_馬"
		過激な奉仕 = 1
	CASE 171
		TFLAG:奉仕カテゴリ = 奉仕_獣姦される
		奉仕タイプ詳細 '= "獣姦_豚"
		過激な奉仕 = 1
	CASE 172
		TFLAG:奉仕カテゴリ = 奉仕_獣姦乱交
		奉仕タイプ詳細 '= "獣姦_豚"
		過激な奉仕 = 1
	CASE 181
		TFLAG:奉仕カテゴリ = 奉仕_獣姦される
		奉仕タイプ詳細 '= "獣姦_ワーグ"
		過激な奉仕 = 1
	CASE 182
		TFLAG:奉仕カテゴリ = 奉仕_獣姦乱交
		奉仕タイプ詳細 '= "獣姦_ワーグ"
		過激な奉仕 = 1
	CASEELSE
		RETURN 0
ENDSELECT
CLEARLINE 1

; IF MPLY == MASTER
; 	TFLAG:おまかせ中コマンド許可 = 1
; ENDIF

;特定設備で奉仕カテゴリを変える
IF GROUPMATCH(TFLAG:奉仕カテゴリ, 奉仕_口淫, 奉仕_手淫)
	CALL HO_CHECK_USE_MODULE_ELEMENT(MPLY:0, "机")
	IF RESULT
		TFLAG:奉仕カテゴリ = 奉仕_手コキフェラ
	ENDIF
ENDIF

;奉仕実行可否判定
LOCAL:1 = 0
FOR LOCAL:0, 0, MPLY_NUM
	IF MPLY:LOCAL == MASTER || CFLAG:(MPLY:(LOCAL:0)):スケベモブ
		CONTINUE
	ENDIF
	CALL HO_JUDGE_PUSHDOWN(MPLY:(LOCAL:0), 過激な奉仕 == 1 ? 2 # 1)
	IF RESULT == 0
		LOCAL:1 ++
	ELSEIF RESULT == 2
		PRISONER_TARGET = MPLY:(LOCAL:0)
		捕虜調教判定 = 1
	ENDIF
NEXT
FOR LOCAL:0, 0, MTAR_NUM
	IF MTAR:LOCAL == MASTER
		CONTINUE
	ENDIF
	CALL HO_JUDGE_PUSHDOWN(MTAR:(LOCAL:0), 過激な奉仕 == 1 ? 2 # 1)
	IF RESULT == 0
		LOCAL:1 ++
	ELSEIF RESULT == 2
		PRISONER_TARGET = MTAR:(LOCAL:0)
		捕虜調教判定 = 1
	ENDIF
NEXT
SIF LOCAL:1 > 0
	RETURN 0

FOR LOCAL:0, 0, MPLY_NUM
	;相席状態で押し倒した場合は同行状態にする
	IF TCVAR:(MPLY:LOCAL):相席フラグ == 1 && CFLAG:(MPLY:LOCAL):調教参加フラグ == 1
		TCVAR:(MPLY:LOCAL):相席フラグ = 0
		CALL HO_SET_CHARAACT((MPLY:LOCAL), "同行中")
		TCVAR:(MPLY:LOCAL):行動待機時間 = 0
	ENDIF
	;奉仕者フラグをセット
	TCVAR:(MPLY:LOCAL):被奉仕者フラグ = TFLAG:奉仕カテゴリ
	;特殊な奉仕フラグ処理
	IF GROUPMATCH(TFLAG:奉仕カテゴリ, 奉仕_触手に捧げる, 奉仕_獣姦される)
		TCVAR:(MPLY:LOCAL):被奉仕者フラグ = 0
	ELSEIF GROUPMATCH(TFLAG:奉仕カテゴリ, 奉仕_触手乱交, 奉仕_獣姦乱交)
		CFLAG:(MPLY:LOCAL):主導除外 = 1
	ENDIF
NEXT
FOR LOCAL:0, 0, MTAR_NUM
	;相席状態で押し倒した場合は同行状態にする
	IF TCVAR:(MTAR:LOCAL):相席フラグ == 1 && CFLAG:(MTAR:LOCAL):調教参加フラグ == 1
		TCVAR:(MTAR:LOCAL):相席フラグ = 0
		CALL HO_SET_CHARAACT((MTAR:LOCAL), "同行中")
		TCVAR:(MTAR:LOCAL):行動待機時間 = 0
	ENDIF
	;奉仕者フラグをセット
	TCVAR:(MTAR:LOCAL):奉仕者フラグ = TFLAG:奉仕カテゴリ
	;特殊な奉仕フラグ処理
	IF GROUPMATCH(TFLAG:奉仕カテゴリ, 奉仕_触手に捧げる, 奉仕_触手乱交, 奉仕_獣姦される, 奉仕_獣姦乱交)
		TCVAR:(MTAR:LOCAL):奉仕者フラグ = 0
		TCVAR:(MTAR:LOCAL):被奉仕者フラグ = TFLAG:奉仕カテゴリ
		CFLAG:(MTAR:LOCAL):主導除外 = 1
	ELSEIF GROUPMATCH(TFLAG:奉仕カテゴリ, 奉仕_舌技させる, 奉仕_ＳＭさせる, 奉仕_自慰させる)
		CFLAG:(MTAR:LOCAL):主導除外 = 1
	ENDIF
NEXT

FLAG:調教モード = 調教_逆調教通常
FLAG:ウフフフラグ = 1
TFLAG:奉仕モード = 1
CALL HO_PRESERVE_PRETRAIN_STATUS()
TFLAG:調教開始時刻 = HO_TIME
;特殊奉仕
IF GROUPMATCH(TFLAG:奉仕カテゴリ, 奉仕_触手に捧げる, 奉仕_触手乱交)
	FOR LOCAL, 0, 2
		CALL QST_TRAIN_MOB_PRESET("触手_設備", "触手")
		MOB_ID = RESULT
		TCVAR:MOB_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
		CFLAG:MOB_ID:設備モブ = 1
		TFLAG:参加者数 ++
	NEXT
ELSEIF 奉仕タイプ詳細 == "獣姦_馬"
	FOR LOCAL, 0, 1
		CALL QST_TRAIN_MOB_PRESET("馬", "牡馬")
		MOB_ID = RESULT
		TCVAR:MOB_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
		CFLAG:MOB_ID:設備モブ = 1
		TFLAG:参加者数 ++
	NEXT
ELSEIF 奉仕タイプ詳細 == "獣姦_豚"
	FOR LOCAL, 0, 4
		CALL QST_TRAIN_MOB_PRESET("豚", "豚")
		MOB_ID = RESULT
		TCVAR:MOB_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
		CFLAG:MOB_ID:設備モブ = 1
		TFLAG:参加者数 ++
	NEXT
ELSEIF 奉仕タイプ詳細 == "獣姦_ワーグ"
	FOR LOCAL, 0, 2
		CALL QST_TRAIN_MOB_PRESET("ワーグ", "ワーグ")
		MOB_ID = RESULT
		TCVAR:MOB_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
		CFLAG:MOB_ID:設備モブ = 1
		TFLAG:参加者数 ++
	NEXT
ENDIF

IF !IS_MPLY(MASTER) && !IS_MTAR(MASTER)
	TCVAR:MASTER:離脱フラグ = 離脱フラグ_一時離脱
ENDIF
CALL RESERVE_ACTOR_BEFORE_SERVICE

RETURN 1

;-------------------------------------------------
;地の文(前文)
;-------------------------------------------------
@COM_TEXT_BEFORE860
PRINTFORMW %ANAME(MPLY:0)%は%ANAME(MTAR:0, MTAR_NUM)%に身体での奉仕を要求した……

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

@COM_AVAILABLE_WHEN860
RETURN コマンド_居住区

;-------------------------------------------------
;奉仕モードで設備ごとに許容するコマンド
;-------------------------------------------------
@COM_AVAILABLE_AT_SERVICE860(COM)
#DIM COM
#DIM DYNAMIC MODULE_ID

;奉仕中に許容するコマンド
IF FLAG:ハウジングモード
	CALL HO_GET_USE_MODULE_INFO(MPLY)
	MODULE_ID = RESULT

	;設備固有のコマンド制約
	SELECTCASE MODULE_ID
		CASE 450, 453 ;グローリーホール,懺悔室
			IF !GROUPMATCH(COM, 10, 11, 16, 106, 107, 90, 132, 120, 100)
				RETURN 0
			ENDIF
		CASEELSE
	ENDSELECT
ENDIF

;奉仕カテゴリによるコマンド制約
SELECTCASE TFLAG:奉仕カテゴリ
	CASE 奉仕_口淫 ,奉仕_手コキフェラ
		IF TFLAG:奉仕カテゴリ == 奉仕_口淫
			IF !GROUPMATCH(COM, 8, 10, 11, 24, 26, 104, 106, 107, 90, 12, 18, 19, 132, 120, 100)
				RETURN 0
			ENDIF
		ELSEIF TFLAG:奉仕カテゴリ == 奉仕_手コキフェラ
			IF !GROUPMATCH(COM, 10, 11, 26, 106, 107, 90, 19, 132, 120, 100)
				RETURN 0
			ENDIF
		ENDIF
	CASE 奉仕_手淫
		IF !GROUPMATCH(COM, 0, 1, 3, 4, 0, 106, 16, 17, 18, 26, 19, 100, 120, 339)
			RETURN 0
		ENDIF
	CASE 奉仕_自慰, 奉仕_自慰する, 奉仕_自慰させる
		IF !GROUPMATCH(COM, 24, 111, 120, 100, 116)
			RETURN 0
		ENDIF
	CASE 奉仕_Ｖ性交
		IF !GROUPMATCH(COM, 0, 1, 2, 3, 21, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 52, 55, 57, 160)
			RETURN 0
		ENDIF
	CASE 奉仕_騎乗位のみ
		IF !GROUPMATCH(COM, 0, 34, 35, 44, 45)
			RETURN 0
		ENDIF
	CASE 奉仕_Ａ性交
		IF !GROUPMATCH(COM, 0, 1, 8, 4, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 53, 56, 58, 161)
			RETURN 0
		ENDIF
	CASE 奉仕_愛撫
		IF !GROUPMATCH(COM, 0, 1, 3, 4, 20, 339)
			RETURN 0
		ENDIF
	CASE 奉仕_見抜き
		IF !GROUPMATCH(COM, 325, 100, 120, 852)
			RETURN 0
		ENDIF
	CASE 奉仕_手コキのみ
		IF !GROUPMATCH(COM, 0, 10, 106, 339)
			RETURN 0
		ENDIF
	CASE 奉仕_耳舐め手コキ
		IF !GROUPMATCH(COM, 0, 10, 106, 339, 28)
			RETURN 0
		ENDIF
	CASE 奉仕_パイズリ
		IF !GROUPMATCH(COM, 12, 107)
			RETURN 0
		ENDIF
	CASE 奉仕_オナホ搾精, 奉仕_オナホ搾精する, 奉仕_オナホ搾精させる
		IF !GROUPMATCH(COM, 0, 16, 339)
			RETURN 0
		ENDIF
	CASE 奉仕_ＳＭ, 奉仕_ＳＭする, 奉仕_ＳＭさせる
		IF !GROUPMATCH(COM, 80, 81, 82, 83, 84, 85, 86, 89, 90, 93, 94, 97, 99, 103, 854)
			RETURN 0
		ENDIF
	CASE 奉仕_舌技する, 奉仕_舌技させる
		IF !GROUPMATCH(COM,2, 8, 9, 11, 107, 19, 28, 104)
			RETURN 0
		ENDIF
ENDSELECT
RETURN 1

;-------------------------------------------------
;奉仕モード終了判定
;@EVENTCOMENDからCALL
;-------------------------------------------------
@COM_EXIT_SERVICE860()
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC FLG_EXIT
#DIMS DYNAMIC _LIST_FOLLOWERS
SIF FLAG:クエストモード && TFLAG:調教継続時間 == 0
	RETURN 0

IF TFLAG:調教継続時間 == 0
	IF HO_TIME - TFLAG:調教開始時刻 > RAND(150, 200)
		FLG_EXIT ++
	ENDIF
ELSE
	IF HO_TIME - TFLAG:調教開始時刻 > TFLAG:調教継続時間
		TFLAG:調教継続時間 = 0
		FLG_EXIT ++
	ENDIF
ENDIF
;MASTERがいるなら延長可
IF IS_PARTICIPATE_TRAIN(MASTER) && FLG_EXIT
	IF TFLAG:覗き見モード
		PRINTL
		CALL PRINT_NOTICE("そろそろ情事を切り上げるようだ。気が付かれる前に退散しよう……!")
		PRINTL
	ELSEIF TSTR:モーニングコール種別 != ""
		CHARA_ID = LIST_GETINT(TSTR:モーニングコール参加者)
		PRINTL
		CALL KJ_EVENT(CHARA_ID, "モーニングコール終了前")
		IF RESULT < 1
			PRINTFORML %ANAME(CHARA_ID)%は朝から%ANAME(MASTER)%を十分に堪能したのかご満悦のようだが……
		ENDIF
		PRINTL
		CALL ASK_YN("もう十分", "もっと求める")
		IF RESULT
			FLG_EXIT = 0
			TFLAG:調教継続時間 += RAND(90, 120) + HO_TIME - TFLAG:調教開始時刻
			CALL KJ_EVENT(CHARA_ID, "モーニングコール延長")
			PRINTW
		ELSE
			CALL KJ_EVENT(CHARA_ID, "モーニングコール終了")
			TSTR:モーニングコール種別 '= ""
		ENDIF
	ELSE
		PRINTL
		PRINTFORML そろそろ奉仕を切り上げられる頃合いだが……
		PRINTL
		CALL ASK_YN("やめる", "まだ続ける")
		PRINTW
		IF RESULT
			FLG_EXIT = 0
			TFLAG:調教継続時間 += RAND(150, 200) + HO_TIME - TFLAG:調教開始時刻
		ELSE
			;同行者を相席モードに変更する
			;->V0.3721:相席モードに変更する必要がないような
			; CALL HO_GET_FOLLOWER_LIST
			; _LIST_FOLLOWERS = %RESULTS%
			; FOR LOCAL, 0, LIST_COUNT(_LIST_FOLLOWERS)
			; 	CALL HO_REMOVE_COMPANION(LIST_GETINT(_LIST_FOLLOWERS, LOCAL), 1)
			; NEXT
		ENDIF
	ENDIF
ENDIF

IF FLG_EXIT
	RETURN 1
ELSE
	RETURN 0
ENDIF
;-------------------------------------------------ｓ
;奉仕モード終了時の地の文
;@TRAIN_EXIT からCALL
;EXIT_MODE 時間切れ = 0,コマンドによる終了 = 1
;-------------------------------------------------
@COM_TEXT_TRAIN_EXIT860(EXIT_MODE, TIMER)
#DIM EXIT_MODE
#DIM TIMER

IF EXIT_MODE
	PRINTFORMW (奉仕を切り上げました…)
ELSE
	PRINTFORMW (奉仕の時間が終了しました…)
ENDIF

;-------------------------------------------------
;;; カテゴリの優先度補正
;;; @COM_AUTOSELECT_SET_CATEGORY_PRIORIT から呼び出される
;-------------------------------------------------
@COM_AUTOSELECT_SET_CATEGORY_PRIORITY_FOR_SERVICE860(MAIN_PLAYER, MAIN_TARGET)
#DIM MAIN_PLAYER
#DIM MAIN_TARGET
SELECTCASE TFLAG:奉仕カテゴリ
	CASE 奉仕_スキュラが奉仕
		COM_AUTO_CATEGORY_PRIORITY:COM_AUTO_CATEGORY_NUM_道具使う = -1
		COM_AUTO_CATEGORY_PRIORITY:COM_AUTO_CATEGORY_NUM_道具使わせる = -1
		COM_AUTO_CATEGORY_PRIORITY:COM_AUTO_CATEGORY_NUM_加虐する = -1
		COM_AUTO_CATEGORY_PRIORITY:COM_AUTO_CATEGORY_NUM_酷く加虐する = -1
		;性交させるの優先度を上げる
		IF HAS_PENIS(MAIN_TARGET, 1) && HAS_VAGINA(MAIN_PLAYER, 1) && !IS_INSERT_MUTUAL(MAIN_TARGET, MAIN_PLAYER)
			COM_AUTO_CATEGORY_PRIORITY:COM_AUTO_CATEGORY_NUM_性交させる = 999
		ELSEIF HAS_PENIS(MAIN_TARGET, 1) && HAS_VAGINA(MAIN_PLAYER, 1)
			COM_AUTO_CATEGORY_PRIORITY:COM_AUTO_CATEGORY_NUM_性交する = 100
			COM_AUTO_CATEGORY_PRIORITY:COM_AUTO_CATEGORY_NUM_触手を扱う *= 9
		ENDIF
	CASE 奉仕_見抜き
		IF IS_MALE(MAIN_PLAYER) && (TALENT:MAIN_PLAYER:特殊勢力素質 || TALENT:MAIN_PLAYER:慰安モブ)
			COM_AUTO_CATEGORY_PRIORITY:COM_AUTO_CATEGORY_NUM_露出する = 100
		ENDIF
	CASEELSE
ENDSELECT

;-------------------------------------------------
; コマンドの優先度補正
; @COM_AUTOSELECT_SET_COM_PRIORITY から呼び出される
;-------------------------------------------------
@COM_AUTO_SELECT_PRIORITY_FOR_SERVICE860(COM, MAIN_PLAYER, MAIN_TARGET)
#DIM COM
#DIM MAIN_PLAYER
#DIM MAIN_TARGET

#DIM SEXUAL_PREFERENCE_ADD = 100000
#DIM SEXUAL_PREFERENCE_MULTI = 4

SELECTCASE TFLAG:奉仕カテゴリ
	CASE 奉仕_口淫 ,奉仕_手コキフェラ
		IF TFLAG:奉仕カテゴリ == 奉仕_口淫
			;
		ELSEIF TFLAG:奉仕カテゴリ == 奉仕_手コキフェラ
			;
		ENDIF
	CASE 奉仕_見抜き
		IF GROUPMATCH(COM, 100, 120)
			SEXUAL_PREFERENCE_MULTI = 8
			COM_AUTO_COM_PRIORITY:(COM) *= SEXUAL_PREFERENCE_MULTI
		ELSEIF GROUPMATCH(COM, 852)
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) += SEXUAL_PREFERENCE_ADD
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) *= SEXUAL_PREFERENCE_MULTI
		ENDIF
	CASE 奉仕_手淫
	CASE 奉仕_自慰, 奉仕_自慰する, 奉仕_自慰させる
		IF GROUPMATCH(COM, 100, 120)
			SEXUAL_PREFERENCE_MULTI = 8
			COM_AUTO_COM_PRIORITY:(COM) *= SEXUAL_PREFERENCE_MULTI
		ENDIF
		IF TFLAG:奉仕カテゴリ == 奉仕_自慰する
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) = -1
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_第三者に実行) = -1
		ELSEIF TFLAG:奉仕カテゴリ == 奉仕_自慰させる
			COM_AUTO_COM_PRIORITY:(COM) = -1
		ENDIF
	CASE 奉仕_Ｖ性交
		IF LIST_INDEXOF(_LIST_COM_VSEX, TOSTR(COM)) != -1
			SEXUAL_PREFERENCE_ADD = 100000
			SEXUAL_PREFERENCE_MULTI = 25
			IF HAS_PENIS(MAIN_PLAYER) && TCVAR:MAIN_PLAYER:被奉仕者フラグ
				COM_AUTO_COM_PRIORITY:(COM) += SEXUAL_PREFERENCE_ADD
				COM_AUTO_COM_PRIORITY:(COM) *= SEXUAL_PREFERENCE_MULTI
			ELSEIF HAS_VAGINA(MAIN_PLAYER) && TCVAR:MAIN_PLAYER:奉仕者フラグ
				COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) += SEXUAL_PREFERENCE_ADD
				COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) *= SEXUAL_PREFERENCE_MULTI
			ELSE
				COM_AUTO_COM_PRIORITY:(COM+ ADD_NUM_第三者に実行) += SEXUAL_PREFERENCE_ADD
				COM_AUTO_COM_PRIORITY:(COM+ ADD_NUM_第三者に実行) *= SEXUAL_PREFERENCE_MULTI
			ENDIF
		ENDIF
	CASE 奉仕_Ａ性交
		IF LIST_INDEXOF(_LIST_COM_ASEX, TOSTR(COM)) != -1
			SEXUAL_PREFERENCE_ADD = 100000
			SEXUAL_PREFERENCE_MULTI = 25
			IF HAS_PENIS(MAIN_PLAYER) && TCVAR:MAIN_PLAYER:被奉仕者フラグ
				COM_AUTO_COM_PRIORITY:(COM) += SEXUAL_PREFERENCE_ADD
				COM_AUTO_COM_PRIORITY:(COM) *= SEXUAL_PREFERENCE_MULTI
			ELSEIF HAS_VAGINA(MAIN_PLAYER) && TCVAR:MAIN_PLAYER:奉仕者フラグ
				COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) += SEXUAL_PREFERENCE_ADD
				COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) *= SEXUAL_PREFERENCE_MULTI
			ELSE
				COM_AUTO_COM_PRIORITY:(COM+ ADD_NUM_第三者に実行) += SEXUAL_PREFERENCE_ADD
				COM_AUTO_COM_PRIORITY:(COM+ ADD_NUM_第三者に実行) *= SEXUAL_PREFERENCE_MULTI
			ENDIF
		ENDIF
	CASE 奉仕_騎乗位のみ
		IF GROUPMATCH(COM, 34, 35, 44, 45)
			SEXUAL_PREFERENCE_ADD = 100000
			SEXUAL_PREFERENCE_MULTI = 25
			IF HAS_PENIS(MAIN_PLAYER) && TCVAR:MAIN_PLAYER:被奉仕者フラグ
				COM_AUTO_COM_PRIORITY:(COM) += SEXUAL_PREFERENCE_ADD
				COM_AUTO_COM_PRIORITY:(COM) *= SEXUAL_PREFERENCE_MULTI
			ELSEIF HAS_VAGINA(MAIN_PLAYER) && TCVAR:MAIN_PLAYER:奉仕者フラグ
				COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) += SEXUAL_PREFERENCE_ADD
				COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) *= SEXUAL_PREFERENCE_MULTI
			ELSE
				COM_AUTO_COM_PRIORITY:(COM+ ADD_NUM_第三者に実行) += SEXUAL_PREFERENCE_ADD
				COM_AUTO_COM_PRIORITY:(COM+ ADD_NUM_第三者に実行) *= SEXUAL_PREFERENCE_MULTI
			ENDIF
		ENDIF
	CASE 奉仕_愛撫
	CASE 奉仕_手コキのみ
	CASE 奉仕_耳舐め手コキ
		IF GROUPMATCH(COM, 10, 106, 339, 28)
			IF TCVAR:MAIN_PLAYER:奉仕者フラグ
				COM_AUTO_COM_PRIORITY:(COM) += SEXUAL_PREFERENCE_ADD
				COM_AUTO_COM_PRIORITY:(COM) *= SEXUAL_PREFERENCE_MULTI
				;舌を這わすを継続していないならさらに優先度を上げる
				IF !IS_EQUIP_PLAYER(MAIN_PLAYER, 28)
					COM_AUTO_COM_PRIORITY:(COM) *= 2
				ENDIF
			ELSEIF TCVAR:MAIN_TARGET:奉仕者フラグ
				COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) += SEXUAL_PREFERENCE_ADD
				COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) *= SEXUAL_PREFERENCE_MULTI
				;舌を這わすを継続していないならさらに優先度を上げる
				IF !IS_EQUIP_PLAYER(MAIN_TARGET, 28)
					COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) *= 2
				ENDIF
			ENDIF
			;舌を這わすの場合耳舐めオプションの優先度を上げる
			IF COM == 28
				TRYCALLFORM COM_HAS_OPTION{28}()
				FOR LOCAL, 0, RESULT + 1
					IF LOCAL == 5 ;耳舐め
						COM_AUTO_COM_OPTION_PRIORITY:28:LOCAL += SEXUAL_PREFERENCE_ADD
					ELSE
						COM_AUTO_COM_OPTION_PRIORITY:28:LOCAL = 0
					ENDIF
				NEXT
			ENDIF
		ENDIF
	CASE 奉仕_パイズリ
	CASE 奉仕_オナホ搾精, 奉仕_オナホ搾精する, 奉仕_オナホ搾精させる
		IF GROUPMATCH(COM, 16)
			COM_AUTO_COM_PRIORITY:(COM) += SEXUAL_PREFERENCE_ADD
			COM_AUTO_COM_PRIORITY:(COM) *= SEXUAL_PREFERENCE_MULTI
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) += SEXUAL_PREFERENCE_ADD
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) *= SEXUAL_PREFERENCE_MULTI
			COM_AUTO_COM_PRIORITY:(COM+ ADD_NUM_第三者に実行) += SEXUAL_PREFERENCE_ADD
			COM_AUTO_COM_PRIORITY:(COM+ ADD_NUM_第三者に実行) *= SEXUAL_PREFERENCE_MULTI
		ENDIF
		IF TFLAG:奉仕カテゴリ == 奉仕_オナホ搾精する
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) = -1
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_第三者に実行) = -1
		ELSEIF TFLAG:奉仕カテゴリ == 奉仕_オナホ搾精させる
			COM_AUTO_COM_PRIORITY:(COM) = -1
		ENDIF
	CASE 奉仕_舌技する, 奉仕_舌技させる
		IF TFLAG:奉仕カテゴリ == 奉仕_舌技する
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) = -1
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_第三者に実行) = -1
		ELSEIF TFLAG:奉仕カテゴリ == 奉仕_舌技させる
			COM_AUTO_COM_PRIORITY:(COM) = -1
		ENDIF
	CASE 奉仕_ＳＭする, 奉仕_ＳＭさせる
		IF TFLAG:奉仕カテゴリ == 奉仕_ＳＭする
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_対象が実行) = -1
			COM_AUTO_COM_PRIORITY:(COM + ADD_NUM_第三者に実行) = -1
		ELSEIF TFLAG:奉仕カテゴリ == 奉仕_ＳＭさせる
			COM_AUTO_COM_PRIORITY:(COM) = -1
		ENDIF
	CASE 奉仕_スキュラが奉仕

ENDSELECT


code:
;-------------------------------------------------
;コマンド実行に要する時間定義(ターンで定義)
;未定義の場合は1ターン(実際の経過時間はターン×HO単位時間(5分))
;-------------------------------------------------
@HO_GET_COM_DURATION
SELECTCASE SELECTCOM
        ;媚薬,コンドーム装着
    CASE 71, 75
        RETURN 1
        ;会話する
    CASE 300
        RETURN 3
        ;なにもしない,一緒に遊ぶ,休憩する
    CASE 292, 703, 705
        RETURN 6
        ;食事する
    CASE 704
        RETURN 9
        ;酒池肉林
    CASE 51
        RETURN 36
        ;運動する,勉強する
    CASE 706, 722
        RETURN 12
        ;クラフト
    CASE 752
        RETURN HO_ITEM_CRAFT_PRODUCTION_TIME / HO_単位時間
        ;作業系(伐採,採掘,狩猟など)
    CASE 750, 751, 753, 754
        RETURN 18
        ;待機
    CASE 700
        SELECTCASE COM_OPTION:700
            CASE 0
                RETURN 1
            CASE 1
                RETURN 3
            CASE 2
                RETURN 6
            CASE 3
                RETURN 12
            CASE 4
                RETURN 24
            CASE 5
                RETURN 36
        ENDSELECT
ENDSELECT
RETURN 2

path: ERB/TRAIN/COMF/ハウジングコマンド/コマンド別所要時間定義.ERB