code:
;SOURCE_CHECKで使用する関数(射精・絶頂・噴乳など)

;-------------------------------------------------
;絶頂に関する処理
;-------------------------------------------------
@SOURCE_ORGASM(CHARA_ID)
#DIM CHARA_ID
#DIM  DYNAMIC 快楽部位
#DIM  DYNAMIC 快楽値
#DIM  DYNAMIC F_COL

#DIMS DYNAMIC 絶頂文字列
#DIM  DYNAMIC 絶頂箇所数
#DIM  DYNAMIC 最強絶頂カウント
#DIM  DYNAMIC 区切り文字フラグ
#DIM  DYNAMIC 絶頂判定フラグ
#DIMS CONST   部位文字列 = "Ｃ", "Ｖ", "Ａ", "Ｂ", "Ｍ", "Ｕ"

CALL SOURCE_ORGASM_SUPPRESS_ORGASM_CHECK(CHARA_ID)
IF RESULT
	TCVAR:(CHARA_ID):絶頂抑制フラグ = 1
ENDIF

;region Ｃ,Ｖ,Ａ,Ｂ,Ｍ,Ｕ絶頂判定と表示
FOR 快楽部位, 0, 6
	絶頂文字列 '= ""
	快楽値 = PALAM:(CHARA_ID):(快楽部位) + CUP:(CHARA_ID):(快楽部位)

	;絶頂した場合
	IF 快楽値 >= 10000 && !TCVAR:(CHARA_ID):絶頂抑制フラグ
		IF 区切り文字フラグ
			PRINT /
		ELSE
			IF !TFLAG:絶頂フラグ
				TFLAG:絶頂フラグ = 1
				PRINTL
			ENDIF
			PRINTFORM %ANAME(CHARA_ID), MAX_CHARANAME_LENGTH, RIGHT%:
		ENDIF

		;絶頂箇所の数を加算
		絶頂箇所数 ++
		区切り文字フラグ = 1

		;絶頂強度に応じてNOWEXをセットし、メッセージの表示を行う
		IF 快楽値 >= 150000
			F_COL = CHARA_ID == MASTER ? 0x800080 # 0xFF4000
			NOWEX:(CHARA_ID):(快楽部位) = 9
			絶頂文字列 '= "最強絶頂"
			;最強絶頂箇所の数を加算
			最強絶頂カウント ++
		ELSEIF 快楽値 >= 80000
			F_COL = CHARA_ID == MASTER ? 0x6000FF # 0xFF4000
			NOWEX:(CHARA_ID):(快楽部位) = 4
			絶頂文字列 '= "超強絶頂"
		ELSEIF 快楽値 >= 30000
			F_COL = CHARA_ID == MASTER ? 0x0080FF # 0xFFC000
			NOWEX:(CHARA_ID):(快楽部位) = 2
			絶頂文字列 '= "強絶頂"
		ELSE
			F_COL = CHARA_ID == MASTER ? 0x0080FF # 0xFFC000
			NOWEX:(CHARA_ID):(快楽部位) = 1
			絶頂文字列 '= "絶頂"
		ENDIF
		絶頂文字列 '= 絶頂文字列 + 部位文字列:(快楽部位)
		CALLF TAG_PRINT(@"@C:{F_COL}@%絶頂文字列%")

		;絶頂経験を増やす
		EXP:(CHARA_ID):絶頂経験 += NOWEX:(CHARA_ID):(快楽部位)
		SIF TCVAR:(CHARA_ID):催眠中 > 0
			EXP:(CHARA_ID):催眠絶頂経験 += NOWEX:(CHARA_ID):(快楽部位)
	ENDIF
NEXT
; #endregion

;region ●噴乳の判定と表示
快楽値 = PALAM:(CHARA_ID):噴乳 + CUP:(CHARA_ID):噴乳

;噴乳した場合
IF 快楽値 >= 10000 && SOURCE:(CHARA_ID):快Ｂ + SOURCE:(CHARA_ID):快Ｖ + SOURCE:(CHARA_ID):快Ａ > 0 && !TCVAR:(CHARA_ID):絶頂抑制フラグ
	IF 区切り文字フラグ
		PRINT /
	ELSE
		IF !TFLAG:絶頂フラグ
			TFLAG:絶頂フラグ = 1
			PRINTL
		ENDIF
		PRINTFORM %ANAME(CHARA_ID), MAX_CHARANAME_LENGTH, RIGHT%:
	ENDIF
	区切り文字フラグ = 1

	;絶頂強度に応じてNOWEXをセットし、メッセージの表示を行う
	IF 快楽値 >= 300000
		F_COL = CHARA_ID == MASTER ? 0x800080 # 0xFF4000
		NOWEX:(CHARA_ID):噴乳 = 9
		絶頂文字列 '= "超々大量噴乳"
	ELSEIF 快楽値 >= 150000
		F_COL = CHARA_ID == MASTER ? 0x6000FF # 0xFF4000
		NOWEX:(CHARA_ID):噴乳 = 4
		絶頂文字列 '= "超大量噴乳"
	ELSEIF 快楽値 >= 50000
		F_COL = CHARA_ID == MASTER ? 0x0080FF # 0xFFC000
		NOWEX:(CHARA_ID):噴乳 = 2
		絶頂文字列 '= "大量噴乳"
	ELSE
		F_COL = CHARA_ID == MASTER ? 0x0080FF # 0xFFC000
		NOWEX:(CHARA_ID):噴乳 = 1
		絶頂文字列 '= "噴乳"
	ENDIF
	CALLF TAG_PRINT(@"@C:{F_COL}@%絶頂文字列%")

	EXP:(CHARA_ID):噴乳経験値 += NOWEX:(CHARA_ID):噴乳

	;触手搾乳中なら相手の魔術経験値をプラス
	IF SELECTCOM == 207 && IS_MTAR(CHARA_ID)
		VARI IDX
		VARI MEQUIP_IDX
		FOR IDX, 0, MPLY_NUM
			EXP:(MPLY:(IDX)):魔術経験値 += NOWEX:(CHARA_ID):噴乳 * 2
		NEXT
	ELSEIF IS_EQUIP_TARGET(CHARA_ID, 207)
		MEQUIP_IDX = SEARCH_EQUIP(207, -1, CHARA_ID)
		IF MEQUIP_IDX >= 0
			FOR IDX, 0, MEQUIP_PLAYER_NUM:(MEQUIP_IDX)
				EXP:(MEQUIP_PLAYER:(MEQUIP_IDX):(IDX)):魔術経験値 += NOWEX:(CHARA_ID):噴乳 * 2
			NEXT
		ENDIF
	ENDIF
ENDIF
; #endregion

;region ●潮吹きの判定と表示
絶頂判定フラグ = 0
IF CONFIG:9 == 1 && NOWEX:(CHARA_ID):射精 == 0 && !TCVAR:(CHARA_ID):絶頂抑制フラグ
	IF (NOWEX:(CHARA_ID):Ｃ絶頂 >= 2 || NOWEX:(CHARA_ID):Ｖ絶頂 >= 2) && PALAM:(CHARA_ID):潮吹き + CUP:(CHARA_ID):潮吹き >= 10000
		絶頂判定フラグ = 1
	ELSEIF (NOWEX:(CHARA_ID):Ｃ絶頂 >= 1 || NOWEX:(CHARA_ID):Ｖ絶頂 >= 1) && PALAM:(CHARA_ID):潮吹き + CUP:(CHARA_ID):潮吹き >= 20000
		絶頂判定フラグ = 1
	ENDIF
ENDIF

IF 絶頂判定フラグ
	IF 区切り文字フラグ
		PRINT /
	ELSE
		IF !TFLAG:絶頂フラグ
			TFLAG:絶頂フラグ = 1
			PRINTL
		ENDIF
		PRINTFORM %ANAME(CHARA_ID), MAX_CHARANAME_LENGTH, RIGHT%:
	ENDIF
	区切り文字フラグ = 1

	IF CHARA_ID == MASTER
		SETCOLOR 0x0080FF
	ELSE
		SETCOLOR 0xFFC000
	ENDIF
	PRINT 潮吹き
	RESETCOLOR

	NOWEX:(CHARA_ID):潮吹き = 1

	SOURCE:(CHARA_ID):露出 += 100
	IF !HAS_VAGINA(CHARA_ID)
		SOURCE:(CHARA_ID):屈従 += 300
	ELSE
		SOURCE:(CHARA_ID):屈従 += 50
	ENDIF
ENDIF
; #endregion

;region ●おもらしの判定と表示
;絶頂・尿意限界によるおもらしの設定が有効の場合
VARI 中毒充足値
IF CONFIG:90 == 1
	;尿意がある状態で絶頂強度の合計が4以上によるおもらし
	IF TCVAR:(CHARA_ID):尿残量 >= 1500 && SUM_NOWEX(CHARA_ID, 1, 0) >= 4
		TCVAR:(CHARA_ID):失禁種類 = 1
		;尿意が高い状態で絶頂することによるおもらし
	ELSEIF TCVAR:(CHARA_ID):尿残量 >= 3000 && SUM_NOWEX(CHARA_ID, 1, 0) >= 1
		TCVAR:(CHARA_ID):失禁種類 = 2
		;尿意の限界によるおもらし
	ELSEIF TCVAR:(CHARA_ID):尿残量 >= 4000
		TCVAR:(CHARA_ID):失禁種類 = 3
	ENDIF
ENDIF

IF TCVAR:(CHARA_ID):失禁種類
	IF 区切り文字フラグ
		PRINT /
	ELSE
		IF !TFLAG:絶頂フラグ
			TFLAG:絶頂フラグ = 1
			PRINTL
		ENDIF
		PRINTFORM %ANAME(CHARA_ID), MAX_CHARANAME_LENGTH, RIGHT%:
	ENDIF
	区切り文字フラグ = 1

	F_COL = CHARA_ID == MASTER ? カラー_シアン # カラー_注意
	IF TCVAR:(CHARA_ID):尿残量 >= 3000
		絶頂文字列 '= "大量おもらし"
		TCVAR:(CHARA_ID):失禁量 = 2
	ELSE
		絶頂文字列 '= "おもらし"
		TCVAR:(CHARA_ID):失禁量 = 1
	ENDIF
	CALLF TAG_PRINT(@"@C:{F_COL}@%絶頂文字列%")

	;尿残量を0にする
	TCVAR:(CHARA_ID):尿残量 = 0

	;おもらしによる経験・ソースの追加
	EXP:(CHARA_ID):排泄経験値 += 1
	EXP:(CHARA_ID):おもらし経験 += TCVAR:(CHARA_ID):失禁量

	中毒充足値 = 400

	SELECTCASE ABL:(CHARA_ID):排泄
		CASE 0
			TIMES 中毒充足値, 0.00
		CASE 1
			TIMES 中毒充足値, 0.10
		CASE 2
			TIMES 中毒充足値, 0.20
		CASE 3
			TIMES 中毒充足値, 0.40
		CASE 4
			TIMES 中毒充足値, 0.70
		CASEELSE
			中毒充足値 = 中毒充足値 * (100 + (ABL:(CHARA_ID):排泄 - 5) * 2) / 100
	ENDSELECT

	SOURCE:(CHARA_ID):露出 += 300
	SOURCE:(CHARA_ID):逸脱 += 80
	SOURCE:(CHARA_ID):中毒充足 += 中毒充足値

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

;●region 射精の判定と表示
快楽値 = PALAM:(CHARA_ID):射精 + CUP:(CHARA_ID):射精

;射精した場合
IF 快楽値 >= 10000 && SOURCE:(CHARA_ID):快Ｐ + NOWEX:(CHARA_ID):Ｖ絶頂 + NOWEX:(CHARA_ID):Ａ絶頂 > 0 && !TCVAR:(CHARA_ID):絶頂抑制フラグ
	CALL PROCESS_EJACULATION(CHARA_ID, 快楽値, 区切り文字フラグ)
	区切り文字フラグ = 1
ENDIF
; #endregion

; region ●ソースの追加・気力の消耗
VARI 補正前体力増減量
VARI 補正前気力増減量
VARI 補正後体力増減量
VARI 補正後気力増減量
FOR 絶頂部位, 0, 8
	補正前体力増減量 = 0
	補正前気力増減量 = 0
	IF NOWEX:(CHARA_ID):(絶頂部位) > 0
		;ソースの追加
		CALL ADD_SOURCE_ORGASM(CHARA_ID, 絶頂部位)

		;絶頂箇所に応じた基本消耗度の設定
		SELECTCASE 絶頂部位
				;Ｃ絶頂
			CASE 0
				補正前体力増減量 = 15000
				補正前気力増減量 = 8000
				;Ｖ絶頂
			CASE 1
				補正前体力増減量 = 15000
				補正前気力増減量 = 10000
				;Ａ絶頂
			CASE 2
				補正前体力増減量 = 25000
				補正前気力増減量 = 17000
				;Ｂ絶頂
			CASE 3
				補正前体力増減量 = 10000
				補正前気力増減量 = 8000
				;Ｍ絶頂
			CASE 4
				補正前体力増減量 = 15000
				補正前気力増減量 = 7000
				;Ｕ絶頂
			CASE 5
				補正前体力増減量 = 15000
				補正前気力増減量 = 8000
				;射精
			CASE 6
				補正前体力増減量 = 15000
				補正前気力増減量 = 10000
				;噴乳
			CASE 7
				補正前体力増減量 = 20000
				補正前気力増減量 = 10000
				;潮吹き
			CASE 8
				補正前体力増減量 = 6000
				補正前気力増減量 = 6000
		ENDSELECT

		;絶頂強度に基づく補正
		補正前体力増減量 *= MAX(NOWEX:(CHARA_ID):(絶頂部位) / 3, 1)
		補正前気力増減量 *= MAX(NOWEX:(CHARA_ID):(絶頂部位) / 3, 1)

		IF LOCAL == GETNUM(EX, "射精")
			;射精による体力・気力の消耗を計算
			;射精Lvによる補正
			SELECTCASE ABL:(CHARA_ID):射精
				CASE 0
					TIMES 補正前体力増減量, 1.00
					TIMES 補正前気力増減量, 1.00
				CASE 1
					TIMES 補正前体力増減量, 0.95
					TIMES 補正前気力増減量, 0.80
				CASE 2
					TIMES 補正前体力増減量, 0.90
					TIMES 補正前気力増減量, 0.70
				CASE 3
					TIMES 補正前体力増減量, 0.85
					TIMES 補正前気力増減量, 0.60
				CASE 4
					TIMES 補正前体力増減量, 0.80
					TIMES 補正前気力増減量, 0.50
				CASEELSE
					補正前体力増減量 = FTIMES(補正前体力増減量, MAX(80 - (ABL:(CHARA_ID):射精 - 5), 20))
					補正前気力増減量 = 補正前気力増減量 / (MIN(ABL:(CHARA_ID):射精 - 5, 55) * 2 + 10)
			ENDSELECT
		ELSEIF LOCAL == GETNUM(EX, "噴乳")
			;噴乳による体力・気力の消耗を計算
			;噴乳Lvによる補正
			SELECTCASE ABL:(CHARA_ID):噴乳
				CASE 0
					TIMES 補正前体力増減量, 1.00
					TIMES 補正前気力増減量, 1.00
				CASE 1
					TIMES 補正前体力増減量, 0.95
					TIMES 補正前気力増減量, 0.80
				CASE 2
					TIMES 補正前体力増減量, 0.90
					TIMES 補正前気力増減量, 0.70
				CASE 3
					TIMES 補正前体力増減量, 0.85
					TIMES 補正前気力増減量, 0.60
				CASE 4
					TIMES 補正前体力増減量, 0.80
					TIMES 補正前気力増減量, 0.50
				CASEELSE
					補正前体力増減量 = FTIMES(補正前体力増減量, MAX(80 - (ABL:(CHARA_ID):噴乳 - 5), 20))
					補正前気力増減量 = 補正前気力増減量 / (MIN(ABL:(CHARA_ID):噴乳 - 5, 55) * 2 + 10)
			ENDSELECT
			IF GETBIT(TALENT:(CHARA_ID):淫乱系, 素質_淫乱_雌牛)
				TIMES 補正前体力増減量, 0.5
				TIMES 補正前気力増減量, 0.25
			ENDIF
		ENDIF
		;欲望Lvによる補正
		IF ABL:(CHARA_ID):欲望 < 5
			補正前体力増減量 = 補正前体力増減量 * (30 - ABL:(CHARA_ID):欲望) / 30
			補正前気力増減量 = 補正前気力増減量 * (15 - ABL:(CHARA_ID):欲望) / 15
		ELSE
			補正前体力増減量 = 補正前体力増減量 * (130 - MIN(ABL:(CHARA_ID):欲望, 30)) / 150
			補正前気力増減量 = 補正前気力増減量 * (45 - MIN(ABL:(CHARA_ID):欲望, 30)) / 60
		ENDIF
		補正前体力増減量 += 補正前体力増減量 / 200
		補正前気力増減量 += 補正前気力増減量 / 200
	ENDIF
NEXT

;●同時絶頂ボーナスの設定
VARI 同時絶頂ボーナス
同時絶頂ボーナス = 1
IF 絶頂箇所数 == 6
	同時絶頂ボーナス = 10
ELSEIF 絶頂箇所数 == 5
	同時絶頂ボーナス = 6
ELSEIF 絶頂箇所数 == 4
	同時絶頂ボーナス = 4
ELSEIF 絶頂箇所数 >= 2
	IF 絶頂箇所数 == 3
		同時絶頂ボーナス = 3
	ELSE
		同時絶頂ボーナス = 2
	ENDIF
ENDIF

VARI 絶頂部位
FOR 絶頂部位, 0, VARSIZE("EX")
	;絶頂回数を加算
	EX:(CHARA_ID):(絶頂部位) += NOWEX:(CHARA_ID):(絶頂部位) * 同時絶頂ボーナス
NEXT

IF 絶頂箇所数 == 6
	;六重絶頂
	IF 最強絶頂カウント == 6
		SETCOLOR カラー_警告
		PRINT  <最 強 六 重 絶 頂>
	ELSE
		SETCOLOR 0xFF4000
		PRINT  <六 重 絶 頂>
	ENDIF
ELSEIF 絶頂箇所数 == 5
	;五重絶頂
	IF 最強絶頂カウント == 5
		SETCOLOR カラー_警告
		PRINT  <最 強 五 重 絶 頂>
	ELSE
		SETCOLOR 0xFF4000
		PRINT  <五 重 絶 頂>
	ENDIF
ELSEIF 絶頂箇所数 == 4
	;四重絶頂
	IF 最強絶頂カウント == 4
		SETCOLOR カラー_オレンジ
		PRINT  <最 強 四 重 絶 頂>
	ELSE
		SETCOLOR 0xFFC000
		PRINT  <四 重 絶 頂>
	ENDIF
ENDIF
RESETCOLOR

IF 絶頂箇所数 > 0
	;絶頂による体力・気力の消耗
	DOWNBASE:(CHARA_ID):体力 += 補正後体力増減量
	DOWNBASE:(CHARA_ID):気力 += 補正後気力増減量
	TCVAR:(CHARA_ID):絶頂抑制カウント = 0
ENDIF

;絶頂抑制による追加消耗
IF TCVAR:(CHARA_ID):絶頂抑制フラグ
	DOWNBASE:(CHARA_ID):気力 += 150
	TCVAR:(CHARA_ID):絶頂抑制カウント ++
ENDIF

SIF BASE:(CHARA_ID):精神力 > 0 && CFLAG:(CHARA_ID):崩壊
	CFLAG:(CHARA_ID):崩壊 = MAX(CFLAG:(CHARA_ID):崩壊 - SUM_NOWEX(CHARA_ID) * 5, 0)

IF 区切り文字フラグ
	PRINTL
ENDIF
; #endregion

;-------------------------------------------------
;射精の内部処理
;-------------------------------------------------
;region 射精の内部処理
@PROCESS_EJACULATION(対象, 強度, スラッシュ)
#DIM 対象
#DIM 射精相手
#DIM 射精先
#DIM 強度
#DIM 射精量
#DIM 補正後射精量
#DIM スラッシュ
#DIMS 出力文字列
#DIMS あふれ文字列
#DIMS 射精先文字列
#DIM 愛情倍率
#DIM 屈従倍率
#DIM 恐怖倍率
#DIM DYNAMIC ROOM_IDX
#DIM DYNAMIC MODULE_IDX

VARSET LOCAL

IF スラッシュ
	PRINT /
ELSE
	IF !TFLAG:絶頂フラグ
		TFLAG:絶頂フラグ = 1
		PRINTL
	ENDIF
	PRINTFORM %ANAME(対象), MAX_CHARANAME_LENGTH, RIGHT%:
ENDIF
出力文字列 =

IF IS_EQUIP_TARGET(対象, 78) && TCVAR:対象:77 == 0
	SETCOLOR カラー_ピンク
	PRINTFORM 射精止め
	RESETCOLOR
	TCVAR:(対象):76 += 強度
	RETURN 0
ENDIF

;絶頂強度に応じてNOWEXをセットし、メッセージの表示を行う
IF 強度 >= 200000 || ((TALENT:(対象):絶倫 || TCVAR:(対象):メイガスの夜) && 強度 >= 80000)
	IF 対象 == MASTER
		SETCOLOR 0x800080
	ELSE
		SETCOLOR 0xFF4000
	ENDIF
	IF !TALENT:対象:絶倫 && !TCVAR:対象:メイガスの夜
		射精量 = 20 + (強度 - 150000) / 20000
	ELSE
		射精量 = 20 + (強度 - 60000) / 10000
	ENDIF
	出力文字列 =  超々大量
ELSEIF 強度 >= 80000 || ((TALENT:(対象):絶倫 || TCVAR:(対象):メイガスの夜) && 強度 >= 40000)
	IF 対象 == MASTER
		SETCOLOR 0x6000FF
	ELSE
		SETCOLOR カラー_オレンジ
	ENDIF
	射精量 = RAND(10, 21)
	出力文字列 = 超大量
ELSEIF 強度 >= 40000 || TALENT:(対象):絶倫 || TCVAR:(対象):メイガスの夜
	IF 対象 == MASTER
		SETCOLOR 0x0080FF
	ELSE
		SETCOLOR 0xFFC000
	ENDIF
	射精量 = RAND(5, 16)
	出力文字列 = 大量
ELSE
	IF 対象 == MASTER
		SETCOLOR カラー_シアン
	ELSE
		SETCOLOR カラー_注意
	ENDIF
	射精量 = RAND(3, 9)
ENDIF

SIF IS_EQUIP_TARGET(対象, GETNUM(TRAINNAME, "玉揉み"))
	射精量 = 射精量 * 3 / 2

IF SOURCE:(対象):快Ｐ == 0 && NOWEX:対象:Ｖ絶頂 + NOWEX:対象:Ａ絶頂 > 0
	出力文字列 = %出力文字列%ところてん
ENDIF
PRINTFORM %出力文字列%射精
RESETCOLOR

;スキルによる補正
CALL LEWDSKILL_CUM_INFLATION(対象, 射精量)
射精量 += RESULT

NOWEX:対象:射精 = 射精量
EXP:(対象):射精経験値 += 射精量 / 3
EXP:(対象):絶頂経験 += 射精量 / 3

;領内活動時にそのエリアと設備で発生した射精量を記録
IF FLAG:ハウジングモード
	ROOM_IDX = C_COND_MAP_GET(対象, "エリアIDX")
	MODULE_IDX = C_COND_MAP_GET(対象, "設備IDX")
	CALL HO_GET_MAPDATA(HO_有効マップID, ROOM_IDX, "射精量")
	IF RESULT != -1
		CALL HO_SET_MAPDATA(ROOM_IDX, "射精量", TOSTR(RESULT + 射精量))
	ELSE
		CALL HO_SET_MAPDATA(ROOM_IDX, "射精量", TOSTR(射精量))
	ENDIF
	IF MODULE_IDX != -1
		CALL HO_GET_MODULE_LIST(MODULE_IDX, "射精量")
		IF RESULT != -1
			CALL HO_SET_MODULE_LIST(MODULE_IDX, "射精量", TOSTR(RESULT + 射精量))
		ELSE
			CALL HO_SET_MODULE_LIST(MODULE_IDX, "射精量", TOSTR(射精量))
		ENDIF
	ENDIF
ENDIF

射精先文字列 =
あふれ文字列 =
VARI 部位あたり射精量
FOR LOCAL:0, 0, STACK_SPERM_CHARA_NUM:対象:0
	部位あたり射精量 = MAX(射精量 / STACK_SPERM_CHARA_NUM:対象:0, 1)
	射精相手 = STACK_SPERM_CHARA_MAP:対象:LOCAL
	射精先 = STACK_SPERM_TO_MAP:対象:LOCAL

	;射精場所に応じた補正を掛けて精愛経験値を加算
	;射精場所に応じたソースを追加(LOCAL:13=愛情倍率、屈従倍率=屈従倍率、恐怖倍率=恐怖倍率)
	愛情倍率 = 20
	屈従倍率 = 20
	恐怖倍率 = 20

	IF !GROUPMATCH(射精先, 射精部位_無駄, 射精部位_触手)
		SELECTCASE ABL:(射精相手):精愛
			CASE 0
				LOCAL:12 = 0
			CASE 1
				LOCAL:12 = 20
			CASE 2
				LOCAL:12 = 50
			CASE 3
				LOCAL:12 = 80
			CASE 4
				LOCAL:12 = 120
			CASEELSE
				LOCAL:12 = MIN(ABL:(射精相手):精愛 * 3 + 150, 2000)
		ENDSELECT
	ENDIF
	SELECTCASE 射精先
			;膣内
		CASE 1
			愛情倍率 = 80
			屈従倍率 = 60
			恐怖倍率 = 200
			IF IS_OVULATION(射精相手)
				TIMES 愛情倍率, 1.5
				TIMES 屈従倍率, 1.5
				TIMES 恐怖倍率, 1.5
				TIMES LOCAL:12, 1.5
			ENDIF
			EXP:射精相手:膣内射精経験 ++
			;アナル
		CASE 2
			愛情倍率 = 40
			屈従倍率 = 120
			恐怖倍率 = 40
			EXP:射精相手:腸内射精経験 ++
		CASE 3
			;口
		CASE 4
			愛情倍率 = 50
			屈従倍率 = 40
			恐怖倍率 = 40
			EXP:射精相手:口内射精経験 ++
			;胸
		CASE 5
			愛情倍率 = 40
			屈従倍率 = 30
			恐怖倍率 = 30
		CASE 6
		CASE 7
			;顔
		CASE 8
			愛情倍率 = 30
			屈従倍率 = 30
			恐怖倍率 = 30
			;髪
		CASE 9
		CASE 10
		CASE 11
			;オナホ
		CASE 12
			;触手
		CASE 13
			;ゴム
		CASE 14
			;その他
		CASEELSE
	ENDSELECT

	;おねだり充足補正
	IF TCVAR:射精相手:精飲おねだりフラグ == 1
		愛情倍率 += 50
		TCVAR:射精相手:精飲おねだりフラグ = 2
	ENDIF

	IF !GROUPMATCH(射精先, 射精部位_無駄, 射精部位_触手)
		;射精量による補正
		SELECTCASE NOWEX:(対象):射精
			CASE 1 TO 3
				TIMES 愛情倍率, 1.00
				TIMES 屈従倍率, 1.00
				TIMES 恐怖倍率, 1.00
			CASE 4 TO 6
				TIMES 愛情倍率, 1.50
				TIMES 屈従倍率, 1.50
				TIMES 恐怖倍率, 1.50
			CASE 7 TO 10
				TIMES 愛情倍率, 2.00
				TIMES 屈従倍率, 2.00
				TIMES 恐怖倍率, 2.00
			CASE IS > 10
				TIMES 愛情倍率, 2.50
				TIMES 屈従倍率, 2.50
				TIMES 恐怖倍率, 2.50
		ENDSELECT
		SIF !GROUPMATCH(射精先, 射精部位_ゴム)
			EXP:(射精相手):精愛経験値 += 部位あたり射精量
	ENDIF

	IF !GROUPMATCH(射精先, 射精部位_無駄, 射精部位_触手)
		;愛情ソースの追加
		CALL ADD_SOURCE_AIZYOU(射精相手, 愛情倍率)
	ENDIF

	;屈従ソースの追加
	CALL ADD_SOURCE_INITIATIVE_U(対象, 0, 屈従倍率)

	補正後射精量 = CUM_AMOUNT_CORRECTION(GET_ID(対象), 射精相手, 射精先, 部位あたり射精量)

	IF !GROUPMATCH(射精先, 射精部位_無駄, 射精部位_触手)
		IF !IS_INITIATIVE(射精相手)
			LOCAL:16 = 100
			IF TALENT:(射精相手):恋慕 || TALENT:(射精相手):服従
				LOCAL:16 = 0
			ELSEIF CFLAG:(射精相手):2 >= 1500
				LOCAL:16 = 30
			ELSEIF CFLAG:(射精相手):2 >= 800
				LOCAL:16 = 60
			ENDIF
			SOURCE:(射精相手):恐怖 += 部位あたり射精量 * 恐怖倍率 * LOCAL:16 / 100
		ENDIF

		SOURCE:(射精相手):中毒充足 += 部位あたり射精量 * LOCAL:12

		;射精箇所が触手なら相手の魔術経験値をプラス
		IF 射精先 == 射精部位_触手
			EXP:(射精相手):魔術経験値 += 部位あたり射精量 * 2
		ENDIF

		;スキル：精飲発情体質持ちなら確率で発情フラグを立てる
		TCVAR:射精相手:精飲発情フラグ = 0
		IF 射精先 == 射精部位_口
			CALL SKILL_GET_LEVEL(射精相手, スキル_大分類_性技, "CUM_ADDICTION")
			IF RESULT
				IF TCVAR:射精相手:精飲おねだりフラグ == 1 && RAND:100 < 50
					TCVAR:射精相手:60 += 1
					TCVAR:射精相手:精飲発情フラグ = 1
				ELSEIF RAND:100 < 30
					TCVAR:射精相手:60 += 1
					TCVAR:射精相手:精飲発情フラグ = 1
				ENDIF
			ENDIF
		ENDIF

		IF 補正後射精量 != CORRECT_CUM_OVERFLOW(射精相手, 射精先, 補正後射精量)
			あふれ文字列=%あふれ文字列%%TOSTR_SPACE(MAX_CHARANAME_LENGTH + 1)%すでにいっぱいの%ANAME(射精相手)%の%CUM_SLOT_NAME:射精先%から、{補正後射精量 - CORRECT_CUM_OVERFLOW(射精相手, 射精先, 補正後射精量)}mlの精液が溢れた……\n
			IF 射精部位_膣内
				;あふれ分の2/3を膨張率に加算する
				WOMB_INFLATION_RATE:射精相手:0 += (((補正後射精量 - CORRECT_CUM_OVERFLOW(射精相手, 射精先, 補正後射精量)) * 2 / 3) * 100) / CALC_WOMB_SIZE(射精相手)
				補正後射精量 = CORRECT_CUM_OVERFLOW(射精相手, 射精先, 補正後射精量)
			ENDIF
		ENDIF
	ENDIF

	;体内に対する射精か見る。コンドームの場合INJECTIONさせない
	IF !IS_EQUIP_PLAYER(対象, 75)
		CALL RECORD_CREAMPIE(射精相手, GET_ID(対象), 補正後射精量, 射精先)
	ENDIF

	CUM_TO_COUNT:(対象):(射精先) ++
	CUM_TO_AMOUNT:(対象):(射精先) += 補正後射精量

	射精先文字列=%射精先文字列%(%CUM_SLOT_NAME:射精先%

	CUM_GET_AMOUNT:(射精相手):(射精先) += 補正後射精量
	CUM_GET_COUNT:(射精相手):射精先 ++
	CUM_CUR_AMOUNT:(射精相手):(射精先) += 補正後射精量
	射精先文字列=%射精先文字列%:{補正後射精量}ml
	IF !GROUPMATCH(射精先, 射精部位_無駄, 射精部位_ゴム, 射精部位_触手)
		射精先文字列=%射精先文字列%:%ANAME(射精相手)%
	ENDIF
	射精先文字列=%射精先文字列%)
NEXT
SIF 射精先文字列 != ""
	PRINTFORM %射精先文字列%
IF あふれ文字列 != ""
	PRINTL
	PRINTFORM %SUBSTRING(あふれ文字列, 0, STRLENS(あふれ文字列) - 1)%
ENDIF

;-------------------------------------------------
;DESC  :口内射精、膣内射精等であふれる場合、入るだけの量に補正する
;-------------------------------------------------
@CORRECT_CUM_OVERFLOW(対象, 射精先, 射精量)
#FUNCTION
#DIM 対象
#DIM 射精先
#DIM 射精量
#DIM 精液量

SIF !GROUPMATCH(射精先, 射精部位_口, 射精部位_アナル, 射精部位_膣内)
	RETURNF 射精量

精液量 = 0
SELECTCASE 射精先
	CASE 射精部位_膣内
		精液量 = SUM_WOMB_SPERM_AMOUNT(対象)
		IF 精液量 >= CALC_WOMB_SIZE(対象)
			RETURNF 0
		ELSEIF 精液量 + 射精量 >= CALC_WOMB_SIZE(対象)
			RETURNF CALC_WOMB_SIZE(対象) - 精液量
		ELSE
			RETURNF 射精量
		ENDIF
	CASE 射精部位_口
		精液量 = SUM_STOMACH_SPERM_AMOUNT(対象)
		IF 精液量 >= CALC_STOMACH_SIZE(対象)
			RETURNF 0
		ELSEIF 精液量 + 射精量 >= CALC_STOMACH_SIZE(対象)
			RETURNF CALC_STOMACH_SIZE(対象) - 精液量
		ELSE
			RETURNF 射精量
		ENDIF
	CASE 射精部位_アナル
		精液量 = SUM_ANUS_SPERM_AMOUNT(対象)
		IF 精液量 >= CALC_ANUS_SIZE(対象)
			RETURNF 0
		ELSEIF 精液量 + 射精量 >= CALC_ANUS_SIZE(対象)
			RETURNF CALC_ANUS_SIZE(対象) - 精液量
		ELSE
			RETURNF 射精量
		ENDIF
ENDSELECT

RETURNF 射精量

;-------------------------------------------------
;DESC  :射精量の補正
;-------------------------------------------------
@CUM_AMOUNT_CORRECTION(精液ID, 射精相手, 射精先, 射精量)
#FUNCTION
#DIM 精液ID
#DIM 射精者
#DIM 射精相手
#DIM 射精先
#DIM 射精量

射精者 = ID_TO_CHARA(精液ID)

IF 射精者 >= 0
	SIF GETBIT(TALENT:射精者:淫乱系, 素質_淫乱_射精狂い)
		射精量 += RAND(5, 16)

	SIF GETBIT(TALENT:射精者:淫乱系, 素質_淫乱_濃厚精液)
		射精量 += RAND(5, 16)
ENDIF

;危険日なら倍
SIF 射精相手 >= 0 && IS_OVULATION(射精相手) && 射精先 == 射精部位_膣内
	射精量 *= 2

SIF 射精者 >= 0
	精液ID = TO_MOB_SPERM_ID(射精者)

;対象が動物の場合、IDを変換
IF 射精者 >= 0 && IS_ANIMAL(射精者)
	SELECTCASE TALENT:射精者:動物
		CASE 動物_犬
			IF CSTR:射精者:モブ識別子 == "ワーグ"
				精液ID = GET_SPERM_ID("ワーグ")
			ELSE
				精液ID = GET_SPERM_ID("犬")
			ENDIF
		CASE 動物_豚
			精液ID = GET_SPERM_ID("豚")
		CASE 動物_馬
			精液ID = GET_SPERM_ID("馬")
		CASE 動物_猿
			精液ID = GET_SPERM_ID("猿")
	ENDSELECT
ENDIF

;対象の精液が触手、動物の場合、クソ多くする
SIF IS_ANIMAL_SPERM(精液ID) || 精液ID == GET_SPERM_ID("触手")
	射精量 += RAND(500, 1501)

RETURNF 射精量

;-------------------------------------------------
;中出し量の記録(妊娠判定用) ※引数に注意
;ARG:0=中出しされたキャラの「キャラ番号」
;ARG:1=中出ししたキャラの「ID」
;ARG:2=精液量
;ARG:3=射精部位
;-------------------------------------------------
@RECORD_CREAMPIE(ARG:0, ARG:1, ARG:2, ARG:3=射精部位_膣内)

SIF !GROUPMATCH(ARG:3, 射精部位_膣内, 射精部位_アナル, 射精部位_口)
	RETURN 0

ARG:2 = CORRECT_CUM_OVERFLOW(ARG:0, ARG:3, ARG:2)

SIF ARG:2 == 0
	RETURN 0

LOCAL:1 = ID_TO_CHARA(ARG:1)

;対象が動物の場合、IDを変換
IF LOCAL:1 >= 0 && IS_ANIMAL(LOCAL:1)
	SELECTCASE TALENT:(LOCAL:1):動物
		CASE 動物_犬
			IF CSTR:(LOCAL:1):モブ識別子 == "ワーグ"
				ARG:1 = GET_SPERM_ID("ワーグ")
			ELSE
				ARG:1 = GET_SPERM_ID("犬")
			ENDIF
		CASE 動物_豚
			ARG:1 = GET_SPERM_ID("豚")
		CASE 動物_馬
			ARG:1 = GET_SPERM_ID("馬")
		CASE 動物_猿
			ARG:1 = GET_SPERM_ID("猿")
	ENDSELECT
ENDIF

;モブの場合、精液IDを変換
SIF LOCAL:1 >= 0
	ARG:1 = TO_MOB_SPERM_ID(LOCAL:1)

;性的嗜好経験値を加算
;危険日なら倍
SIF ARG:3 == 射精部位_膣内
	SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_妊娠したい += IS_OVULATION(ARG:0) + 1

SELECTCASE ARG:3
	CASE 射精部位_膣内
		;既にキャラがリストに存在すれば精液量を追加
		FOR LOCAL:0, 0, WOMB_RECORD_MAX
			IF WOMB_SPERM_ID:(ARG:0):(LOCAL:0) == ARG:1
				WOMB_SPERM_AMOUNT:(ARG:0):(LOCAL:0) += ARG:2
				WOMB_SPERM_COUNT:(ARG:0):(LOCAL:0) ++
				WOMB_SPERM_TIME:(ARG:0):(LOCAL:0) = 0
				WOMB_TOTAL_CREAMPIED_AMOUNT:(ARG:0):0 += ARG:2
				RETURN ARG:2
			ENDIF
		NEXT
		;キャラがリストに載っていなければ新たに追加
		FOR LOCAL:0, 0, WOMB_RECORD_MAX
			IF WOMB_SPERM_ID:(ARG:0):(LOCAL:0) == 0
				;中出ししたキャラのIDと精液量を記録
				WOMB_SPERM_ID:(ARG:0):(LOCAL:0) = ARG:1
				WOMB_SPERM_AMOUNT:(ARG:0):(LOCAL:0) = ARG:2
				WOMB_SPERM_COUNT:(ARG:0):(LOCAL:0) ++
				WOMB_SPERM_TIME:(ARG:0):(LOCAL:0) = 0
				WOMB_TOTAL_CREAMPIED_AMOUNT:(ARG:0):0 += ARG:2
				RETURN ARG:2
			ENDIF
		NEXT
	CASE 射精部位_口
		;既にキャラがリストに存在すれば精液量を追加
		FOR LOCAL:0, 0, WOMB_RECORD_MAX
			IF STOMACH_SPERM_ID:(ARG:0):(LOCAL:0) == ARG:1
				STOMACH_SPERM_AMOUNT:(ARG:0):(LOCAL:0) += ARG:2
				STOMACH_SPERM_COUNT:(ARG:0):(LOCAL:0) ++
				STOMACH_SPERM_TIME:(ARG:0):(LOCAL:0) = 0
				STOMACH_TOTAL_CREAMPIED_AMOUNT:(ARG:0):0 += ARG:2
				RETURN ARG:2
			ENDIF
		NEXT
		;キャラがリストに載っていなければ新たに追加
		FOR LOCAL:0, 0, WOMB_RECORD_MAX
			IF STOMACH_SPERM_ID:(ARG:0):(LOCAL:0) == 0
				;中出ししたキャラのIDと精液量を記録
				STOMACH_SPERM_ID:(ARG:0):(LOCAL:0) = ARG:1
				STOMACH_SPERM_AMOUNT:(ARG:0):(LOCAL:0) = ARG:2
				STOMACH_SPERM_COUNT:(ARG:0):(LOCAL:0) ++
				STOMACH_SPERM_TIME:(ARG:0):(LOCAL:0) = 0
				STOMACH_TOTAL_CREAMPIED_AMOUNT:(ARG:0):0 += ARG:2
				RETURN ARG:2
			ENDIF
		NEXT
	CASE 射精部位_アナル
		;既にキャラがリストに存在すれば精液量を追加
		FOR LOCAL:0, 0, WOMB_RECORD_MAX
			IF ANUS_SPERM_ID:(ARG:0):(LOCAL:0) == ARG:1
				ANUS_SPERM_AMOUNT:(ARG:0):(LOCAL:0) += ARG:2
				ANUS_SPERM_COUNT:(ARG:0):(LOCAL:0) ++
				ANUS_SPERM_TIME:(ARG:0):(LOCAL:0) = 0
				ANUS_TOTAL_CREAMPIED_AMOUNT:(ARG:0):0 += ARG:2
				RETURN ARG:2
			ENDIF
		NEXT
		;キャラがリストに載っていなければ新たに追加
		FOR LOCAL:0, 0, WOMB_RECORD_MAX
			IF ANUS_SPERM_ID:(ARG:0):(LOCAL:0) == 0
				;中出ししたキャラのIDと精液量を記録
				ANUS_SPERM_ID:(ARG:0):(LOCAL:0) = ARG:1
				ANUS_SPERM_AMOUNT:(ARG:0):(LOCAL:0) = ARG:2
				ANUS_SPERM_COUNT:(ARG:0):(LOCAL:0) ++
				ANUS_SPERM_TIME:(ARG:0):(LOCAL:0) = 0
				ANUS_TOTAL_CREAMPIED_AMOUNT:(ARG:0):0 += ARG:2
				RETURN ARG:2
			ENDIF
		NEXT
ENDSELECT

RETURN 1

;-------------------------------------------------
;授乳量の記録 ※引数に注意
;ARG:0=授乳したキャラの「キャラ番号」
;ARG:1=授乳先のキャラの「ID」
;ARG:2=授乳量
;-------------------------------------------------
@RECORD_BREAST_FEED(CHARA_ID, CHARA_UID, AMOUNT)
#DIM CHARA_ID
#DIM CHARA_UID
#DIM AMOUNT

;既にキャラがリストに存在すれば母乳量を追加
FOR LOCAL, 0, WOMB_RECORD_MAX
	IF BREAST_FEED_ID:CHARA_ID:LOCAL == CHARA_UID
		BREAST_FEED_AMOUNT:CHARA_ID:LOCAL += AMOUNT
		RETURN AMOUNT
	ENDIF
NEXT
;キャラがリストに存在しない場合IDと精液量を新たに記録
FOR LOCAL, 0, WOMB_RECORD_MAX
	IF BREAST_FEED_ID:CHARA_ID:LOCAL == 0
		BREAST_FEED_ID:CHARA_ID:LOCAL = CHARA_UID
		BREAST_FEED_AMOUNT:CHARA_ID:LOCAL += AMOUNT
		RETURN AMOUNT
	ENDIF
NEXT

RETURN 0

;授乳量記録の削除
@CLEAR_BREAST_FEED(CHARA_ID)
#DIM CHARA_ID
FOR LOCAL, 0, WOMB_RECORD_MAX
	BREAST_FEED_ID:CHARA_ID:LOCAL = 0
	BREAST_FEED_AMOUNT:CHARA_ID:LOCAL = 0
NEXT

;-------------------------------------------------
;絶頂した／させたときのソースの追加処理  ARG:0=絶頂したキャラの番号、ARG:1=絶頂箇所
;-------------------------------------------------
@ADD_SOURCE_ORGASM(ARG:0, ARG:1)
VARSET LOCAL, 0

SELECTCASE NOWEX:(ARG:0):(ARG:1)
	CASE 1
		LOCAL:2 = 100
	CASE 2
		LOCAL:2 = 150
	CASE 4
		LOCAL:2 = 200
	CASE 9
		LOCAL:2 = 250
ENDSELECT

;●絶頂したキャラへのソースの追加
SELECTCASE ARG:1
		;Ｃ絶頂
	CASE 0
		SOURCE:(ARG:0):露出 += LOCAL:2 * 200 / 100
		SOURCE:(ARG:0):屈従 += LOCAL:2 * 50 / 100
		LOCAL:3 = LOCAL:2 * 100 / 100 + 100
		LOCAL:4 = LOCAL:2 * 60 / 100
		IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫核)
			SOURCE:(ARG:0):中毒充足 += LOCAL:2 * 1000 / 100
		ENDIF
		;Ｖ絶頂
	CASE 1
		SOURCE:(ARG:0):愛情 += LOCAL:2 * 100 / 100
		SOURCE:(ARG:0):露出 += LOCAL:2 * 300 / 100
		SOURCE:(ARG:0):屈従 += LOCAL:2 * 150 / 100
		SOURCE:(ARG:0):欲情追加 += LOCAL:2 * 1000 / 100
		LOCAL:3 = LOCAL:2 * 100 / 100 + 100
		LOCAL:4 = LOCAL:2 * 100 / 100
		IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫壷)
			SOURCE:(ARG:0):中毒充足 += LOCAL:2 * 1000 / 100
		ENDIF
		;Ａ絶頂
	CASE 2
		SOURCE:(ARG:0):露出 += LOCAL:2 * 500 / 100
		SOURCE:(ARG:0):欲情追加 += LOCAL:2 * 1000 / 100
		LOCAL:3 = LOCAL:2 * 100 / 100 + 100
		LOCAL:4 = LOCAL:2 * 160 / 100
		IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_尻穴狂い)
			SOURCE:(ARG:0):中毒充足 += LOCAL:2 * 1000 / 100
		ENDIF
		;Ｂ絶頂
	CASE 3
		SOURCE:(ARG:0):露出 += LOCAL:2 * 200 / 100
		SOURCE:(ARG:0):屈従 += LOCAL:2 * 80 / 100
		LOCAL:3 = LOCAL:2 * 100 / 100 + 100
		LOCAL:4 = LOCAL:2 * 60 / 100
		IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫乳)
			SOURCE:(ARG:0):中毒充足 += LOCAL:2 * 1000 / 100
		ENDIF
		;Ｍ絶頂
	CASE 4
		SOURCE:(ARG:0):愛情 += LOCAL:2 * 100 / 100
		SOURCE:(ARG:0):屈従 += LOCAL:2 * 50 / 100
		LOCAL:3 = LOCAL:2 * 100 / 100 + 100
		LOCAL:4 = LOCAL:2 * 60 / 100
		IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_蕩唇)
			SOURCE:(ARG:0):中毒充足 += LOCAL:2 * 1000 / 100
		ENDIF
		;Ｕ絶頂
	CASE 5
		SOURCE:(ARG:0):露出 += LOCAL:2 * 500 / 100
		SOURCE:(ARG:0):欲情追加 += LOCAL:2 * 1000 / 100
		LOCAL:3 = LOCAL:2 * 100 / 100 + 100
		LOCAL:4 = LOCAL:2 * 160 / 100
		IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_尿道狂い)
			SOURCE:(ARG:0):中毒充足 += LOCAL:2 * 1000 / 100
		ENDIF
		;射精
	CASE 6
		SOURCE:(ARG:0):露出 += LOCAL:2 * 400 / 100
		LOCAL:3 = LOCAL:2 * 200 / 100 + 200
		LOCAL:4 = LOCAL:2 * 80 / 100
		IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_射精狂い)
			SOURCE:(ARG:0):中毒充足 += LOCAL:2 * 1000 / 100
		ENDIF

		FOR LOCAL:0, 0, STACK_SPERM_CHARA_NUM:(ARG:0):0
			;膣内射精の場合(コンドームつけてたらだめ）
			LOCAL:6 = STACK_SPERM_CHARA_MAP:(ARG:0):LOCAL
			IF LOCAL:6 >= 0 && STACK_SPERM_TO_MAP:(ARG:0):LOCAL == 射精部位_膣内 && !IS_EQUIP_PLAYER(LOCAL:6, 75)
				;獣変化中
				IF TALENT:(ARG:0):動物耳 || TALENT:(ARG:0):しっぽ
					SOURCE:(ARG:0):歓喜 += 3000
					;地の文表示用のフラグを立てる
					TCVAR:(ARG:0):獣変化中 = 1
				ENDIF
				;媚薬
				IF TCVAR:(LOCAL:6):媚薬
					SOURCE:(LOCAL:6):歓喜 += 700
				ENDIF
				;麻薬
				IF TCVAR:(LOCAL:6):麻薬 == 1
					SOURCE:(LOCAL:6):歓喜 += 1000
				ENDIF
				;受精中毒
				IF GETBIT(TALENT:(LOCAL:6):淫乱系, 素質_淫乱_孕みたがり)
					SOURCE:(LOCAL:6):歓喜 += 1000
				ENDIF
				;良質母胎
				IF GETBIT(TALENT:(LOCAL:6):淫乱系, 素質_淫乱_良質母胎)
					SOURCE:(LOCAL:6):歓喜 += 1000
				ENDIF
				;桃源香
				IF TFLAG:桃源香使用中 == 1
					SOURCE:(LOCAL:6):歓喜 += 300
				ENDIF
				;中出しした相手が獣変化中
				IF TALENT:(LOCAL:6):動物耳 || TALENT:(LOCAL:6):しっぽ
					SOURCE:(LOCAL:6):歓喜 += 3000
					;地の文表示用のフラグを立てる
					TCVAR:(ARG:0):中出しした相手が獣変化中 = 1
				ENDIF
			ENDIF
			BREAK
		NEXT
		;噴乳
	CASE 7
		SOURCE:(ARG:0):露出 += LOCAL:2 * 300 / 100
		LOCAL:3 = LOCAL:2 * 50 / 100 + 50
		LOCAL:4 = LOCAL:2 * 80 / 100
ENDSELECT

;主導権に応じて優越・屈従のソースを追加
CALL ADD_SOURCE_INITIATIVE_U(ARG:0, LOCAL:3, LOCAL:4)

;●絶頂させたキャラへのソースの追加
IF IS_MTAR(ARG:0)
	LOCAL:10 = 0
ELSEIF IS_MPLY(ARG:0)
	LOCAL:10 = 1
ELSE
	;プレイヤーでもターゲットでもないなら戻る(絶頂させた相手がいない)
	RETURN
ENDIF

FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0) && LOCAL:0 != ARG:0 && ((LOCAL:10 == 0 && IS_MPLY(LOCAL:0)) || (LOCAL:10 == 1 && IS_MTAR(LOCAL:0)))
		SELECTCASE ARG:1
				;Ｃ絶頂
			CASE 0
				LOCAL:3 = LOCAL:2 * 120 / 100
				LOCAL:4 = LOCAL:2 * 30 / 100 + 30
				;Ｖ絶頂
			CASE 1
				LOCAL:3 = LOCAL:2 * 200 / 100
				LOCAL:4 = LOCAL:2 * 30 / 100 + 30
				;Ａ絶頂
			CASE 2
				LOCAL:3 = LOCAL:2 * 320 / 100
				LOCAL:4 = LOCAL:2 * 30 / 100 + 30
				;Ｂ絶頂
			CASE 3
				LOCAL:3 = LOCAL:2 * 120 / 100
				LOCAL:4 = LOCAL:2 * 30 / 100 + 30
				;Ｍ絶頂
			CASE 4
				LOCAL:3 = LOCAL:2 * 120 / 100
				LOCAL:4 = LOCAL:2 * 30 / 100 + 30
				;Ｕ絶頂
			CASE 5
				LOCAL:3 = LOCAL:2 * 120 / 100
				LOCAL:4 = LOCAL:2 * 30 / 100 + 30
				;射精
			CASE 6
				LOCAL:3 = LOCAL:2 * 160 / 100
				LOCAL:4 = LOCAL:2 * 30 / 100 + 30
				;噴乳
			CASE 7
				LOCAL:3 = LOCAL:2 * 160 / 100
				LOCAL:4 = LOCAL:2 * 15 / 100 + 15
				;潮吹き
			CASE 8
				LOCAL:3 = LOCAL:2 * 350 / 100
				LOCAL:4 = LOCAL:2 * 15 / 100 + 15
		ENDSELECT

		SELECTCASE ABL:(LOCAL:0):奉仕
			CASE 0
				TIMES LOCAL:3, 0.50
			CASE 1
				SOURCE:(LOCAL:0):中毒充足 += LOCAL:2 * 40 / 100
				TIMES LOCAL:3, 0.80
			CASE 2
				SOURCE:(LOCAL:0):中毒充足 += LOCAL:2 * 80 / 100
				TIMES LOCAL:3, 1.00
			CASE 3
				SOURCE:(LOCAL:0):中毒充足 += LOCAL:2 * 120 / 100
				TIMES LOCAL:3, 1.10
			CASE 4
				SOURCE:(LOCAL:0):中毒充足 += LOCAL:2 * 160 / 100
				TIMES LOCAL:3, 1.20
			CASEELSE
				SOURCE:(LOCAL:0):中毒充足 += LOCAL:2 * MIN(ABL:(LOCAL:0):奉仕 * 2 + 200, 2000) / 100
				LOCAL:3 = LOCAL:3 * MIN(ABL:(LOCAL:0):奉仕 + 120, 500) / 100
		ENDSELECT

		;主導権に応じて優越・屈従のソースを追加
		CALL ADD_SOURCE_INITIATIVE_U(ARG:0, LOCAL:3, LOCAL:4)

		IF ARG:0 == MASTER
			;主人公を絶頂させた場合、愛情のソースを追加
			CALL ADD_SOURCE_AIZYOU(LOCAL:0, LOCAL:2 * 80 / 100)
		ENDIF

		;絶頂強度に応じて欲望経験値を加算
		EXP:(LOCAL:0):欲望経験値 += NOWEX:(ARG:0):(ARG:1)
	ENDIF
NEXT


code:
;-------------------------------------------------
;;; 絶頂抑制処理
;-------------------------------------------------
@SOURCE_ORGASM_SUPPRESS_ORGASM_CHECK(CHARA_ID)
#DIM  CHARA_ID
#DIM  DYNAMIC 快楽値
#DIM  DYNAMIC 合計快楽値
#DIM  DYNAMIC 快楽部位
#DIM  DYNAMIC 合計快楽変動量
#DIM  DYNAMIC ORGASM_FLAG
#DIM  DYNAMIC TOTAL_SUPPRESS_RATE
#DIMS DYNAMIC TALENT_SUPPRESS_RATE
#DIMS CONST   部位文字列 = "Ｃ", "Ｖ", "Ａ", "Ｂ", "Ｍ", "Ｕ"
;以下の変数は動的取得せず初回の呼び出し結果をキャッシュとして保持する
;通常のゲームにおいて再読み込みしない限り情報ソースであるTALENT.XMLが変更されることはないため
#DIMS TALENT_ID, VARSIZE("TALENT")
#DIM  TALENT_COUNT
#DIM  TALENT_DATA_CASHED_FLAG

; IF CHARA_ID == MASTER
;     RETURN 0
; ENDIF

;意識が無いなら絶頂打ち消し判定を行わない
IF !IS_PLAYABLE(CHARA_ID)
    RETURN 0
ENDIF

;気力が40%以下なら絶頂打ち消し判定を行わない
IF IS_EXHAUSTED(CHARA_ID, 40)
    RETURN 0
ENDIF

;快楽値の合計を算出
FOR 快楽部位, 0, 6
    快楽値 = PALAM:(CHARA_ID):(快楽部位) + CUP:(CHARA_ID):(快楽部位)
    合計快楽変動量 += CUP:(CHARA_ID):(快楽部位)
    合計快楽値 += 快楽値
    SIF 快楽値 >= 10000
        ORGASM_FLAG = 1
NEXT

;射精に対する判定(噴乳,潮吹き,おもらしは抑制対象にしない
;(絶頂を我慢しつつおもらし…のようなケースは成立し得るので))
IF CUP:(CHARA_ID):射精 > 0
    快楽値 = PALAM:(CHARA_ID):射精 + CUP:(CHARA_ID):射精
    合計快楽変動量 += CUP:(CHARA_ID):射精
    SIF 快楽値 >= 10000
        ORGASM_FLAG = 1
ENDIF

;150000を超えている場合判定しない(=最強絶頂は打ち消せない)
IF 快楽値 >= 150000
    RETURN 0
ENDIF

;絶頂に達する可能性が無いなら判定しない
IF ORGASM_FLAG == 0
    RETURN 0
    ;いずれの快楽の追加もなく絶頂抑制カウント中なら抑制成功とみなす(じらされているとみなす)
ELSEIF 合計快楽変動量 <= 0 && TCVAR:(CHARA_ID):絶頂抑制カウント > 0
    RETURN 1
ENDIF

;絶頂打ち消し判定
;デフォルト値
TOTAL_SUPPRESS_RATE = 3 - ((TCVAR:(CHARA_ID):絶頂抑制カウント) * RAND(1, 3))

;快楽に対するスタンスによる補正
TOTAL_SUPPRESS_RATE += CFLAG:CHARA_ID:絶頂抑制スタンス * 10

;快楽合計値に基づく補正
TOTAL_SUPPRESS_RATE -= 合計快楽値 / 8000

;欲情に基づく補正
TOTAL_SUPPRESS_RATE -= GET_PALAMLV(PALAM:(CHARA_ID):欲情) / 2

;感情に基づく補正
TOTAL_SUPPRESS_RATE -= CHECK_EMOTION(CHARA_ID, "GOOD") ? 5 # 0
TOTAL_SUPPRESS_RATE += CHECK_EMOTION(CHARA_ID, "NEGATIVE") ? 5 # 0

;発情に基づく補正
TOTAL_SUPPRESS_RATE -= TCVAR:CHARA_ID:媚薬 * 2

;調教時のイベントによる補正
TOTAL_SUPPRESS_RATE += TCVAR:CHARA_ID:絶頂抑制補正値

;素質による補正
;補正値をxmlから取得
VARI TALENT_IDX
IF !TALENT_DATA_CASHED_FLAG
    TALENT_COUNT = XML_GET(XMLID_TALENT, @"//defname[source/orgasmSuppress/@rate!='']/@id", TALENT_ID, 1)
    TALENT_DATA_CASHED_FLAG = 1
ENDIF
FOR TALENT_IDX, 0, TALENT_COUNT
    IF TALENT:CHARA_ID:TOINT(TALENT_ID:TALENT_IDX)
        XML_GET XMLID_TALENT, @"//defname[@id='%TALENT_ID:TALENT_IDX%']/source/orgasmSuppress/@rate", TALENT_SUPPRESS_RATE, 1
        IF ISNUMERIC(TALENT_SUPPRESS_RATE)
            TOTAL_SUPPRESS_RATE += TOINT(TALENT_SUPPRESS_RATE)
        ELSE
            THROW TALENT_ID %TALENT_ID:TALENT_IDX%: source/orgasmSuppress/@rateを整数に変換できません
        ENDIF
    ENDIF
NEXT

;シチュエーションによる補正
;ウフフ中ではない
SIF !FLAG:ウフフフラグ
    TOTAL_SUPPRESS_RATE += 15
;凌辱されている
SIF CFLAG:CHARA_ID:凌辱被害者フラグ
    TOTAL_SUPPRESS_RATE += 35

DEBUGPRINTFORML %ANAME(CHARA_ID)%の絶頂抑制値:{TOTAL_SUPPRESS_RATE}
;絶頂打ち消し判定
IF TOTAL_SUPPRESS_RATE > 0
    RETURN 1
ELSE
    RETURN 0
ENDIF

@ORGASM_SURPRESS_STANCE_STR(STANCE_VALUE)
#FUNCTIONS
#DIM  STANCE_VALUE
SELECTCASE STANCE_VALUE
    CASE -2
        RETURNF ORGASM_SURPRESS_STANCE_STR:0
    CASE -1
        RETURNF ORGASM_SURPRESS_STANCE_STR:1
    CASE 0
        RETURNF ORGASM_SURPRESS_STANCE_STR:2
    CASE 1
        RETURNF ORGASM_SURPRESS_STANCE_STR:3
    CASE 2
        RETURNF ORGASM_SURPRESS_STANCE_STR:4
ENDSELECT

repo_name: napo/erafl

license: unknown


code:
;SOURCE_CHECKで使用する関数(雑多なもの)

;-------------------------------------------------
;;; MASTERに対する好感度上昇の処理
;-------------------------------------------------
@LOVE_UP_CHECK_MASTER(ARG:0)
; #region 好感度上昇の処理

;能力固定フラグが立っているなら処理しない
IF CFLAG:(ARG:0):能力固定フラグ
	RETURN
ENDIF

;MASTER不在なら処理しない
SIF !IS_PARTICIPATE_TRAIN(MASTER)
	RETURN

;催眠術実行中はダメ
SIF TCVAR:(ARG:0):催眠中 > 0
	RETURN

SIF FLAG:調教モード == 7
	RETURN

VARI 好感度上昇量
VARI 好感度減少量
VARI 依存度上昇量
VARI 依存度減少量
VARI 従属度上昇量
VARI 従属度減少量
VARI 支配度上昇量
VARI 支配度減少量

CALL LOVE_UP_CHECK_好感度(ARG:0)
好感度上昇量 = RESULT:0
好感度減少量 = RESULT:1

CALL LOVE_UP_CHECK_依存度(ARG:0)
依存度上昇量 = RESULT:0
依存度減少量 = RESULT:1

CALL LOVE_UP_CHECK_従属度(ARG:0)
従属度上昇量 = RESULT:0
従属度減少量 = RESULT:1

CALL LOVE_UP_CHECK_支配度(ARG:0)
支配度上昇量 = RESULT:0
支配度減少量 = RESULT:1

;●ウフフ中は好感度上昇量が低下
IF FLAG:ウフフフラグ
	TIMES 好感度上昇量, 0.30
ENDIF

;●特殊勢力に堕ちていると好感度・依存度・従属度全ての上昇率が低下
;ただし救済策として最低保証がつく
;なお支配度は上昇
IF IS_FALLEN_TO_SP_COUNTRY(ARG:0) && !IS_SP_COUNTRY(CFLAG:MASTER:所属)
	FOR LOCAL:0, 10, 13
		TIMES TCVAR:(ARG:0):(LOCAL:0), 0.20
		TCVAR:(ARG:0):(LOCAL:0) = MAX(TCVAR:(ARG:0):(LOCAL:0), RAND:10)
	NEXT
	TIMES 支配度上昇量, 1.25
ENDIF

;●浮気癖の場合上昇率が低下
IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_浮気癖)
	TIMES 好感度上昇量, 0.6
	TIMES 依存度上昇量, 0.6
	TIMES 従属度上昇量, 0.6
	;TIMES TCVAR:(ARG:0):処女喪失フラグ, 0.6
	TIMES 支配度上昇量, 0.6
ENDIF

;●実際の変動量をLOCAL:1～3にセット
LOCAL:1 = (好感度上昇量 - 好感度減少量) / 100
LOCAL:2 = (依存度上昇量 - 依存度減少量) / 100
LOCAL:3 = (従属度上昇量 - 従属度減少量) / 100
LOCAL:4 = (支配度上昇量 - 支配度減少量) / 100

;依存度の変動は最低でも-1
LOCAL:2 = MAX(LOCAL:2, -1)

;●天の御遣いで上昇好感度が低い時さらに＋補正
IF TALENT:MASTER:天の御遣い
	SELECTCASE LOCAL:1
		CASE IS < 0
			LOCAL:1 += 10
		CASE IS < 15
			LOCAL:1 += 5
		CASE IS < 25
			LOCAL:1 += 3
		CASE IS < 50
			LOCAL:1 += 1
	ENDSELECT
ENDIF

;●求心力で上昇依存度が低いときさらに＋補正
IF TALENT:MASTER:求心力
	SELECTCASE LOCAL:2
		CASE IS < 0
			LOCAL:2 += 10
		CASE IS < 15
			LOCAL:2 += 5
		CASE IS < 25
			LOCAL:2 += 3
		CASE IS < 50
			LOCAL:2 += 1
	ENDSELECT
ENDIF

;●君主の器で上昇従属度が低いときさらに＋補正
IF TALENT:MASTER:君主の器
	SELECTCASE LOCAL:3
		CASE IS < 0
			LOCAL:3 += 10
		CASE IS < 15
			LOCAL:3 += 5
		CASE IS < 25
			LOCAL:3 += 3
		CASE IS < 50
			LOCAL:3 += 1
	ENDSELECT
ENDIF

IF FLAG:主導権所有者 == ARG:0
	SELECTCASE LOCAL:4
		CASE IS < 0
			LOCAL:4 += 3
		CASE IS < 15
			LOCAL:4 += 2
		CASE IS < 25
			LOCAL:4 += 1
	ENDSELECT
ENDIF

IF TALENT:(ARG:0):君主の器 || GROUPMATCH(FLAG:調教モード, 調教_逆調教特殊, 調教_逆調教通常, 調教_慰安)
	SELECTCASE LOCAL:4
		CASE IS < 0
			LOCAL:4 += 10
		CASE IS < 15
			LOCAL:4 += 5
		CASE IS < 25
			LOCAL:4 += 3
		CASE IS < 50
			LOCAL:4 += 1
	ENDSELECT
ENDIF

;●主人公以外からの行為は好感度・依存度・従属度全ての変動量が低下
;ただし浮気癖がある場合は無効化
IF ((!IS_MPLY(MASTER) && !IS_MTAR(MASTER)) || (!IS_MPLY(ARG:0) && !IS_MTAR(ARG:0))) && !GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_浮気癖)
	;捕虜調教のメインターゲットは影響緩和
	IF FLAG:調教モード == 2 && FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
		TIMES LOCAL:1, 0.50
		TIMES LOCAL:2, 0.50
		TIMES LOCAL:3, 0.50
		TIMES LOCAL:4, 0.50
	ELSE
		TIMES LOCAL:1, 0.25
		TIMES LOCAL:2, 0.25
		TIMES LOCAL:3, 0.25
		TIMES LOCAL:4, 0.25
	ENDIF
ENDIF

;●失神中・離脱中は好感度・依存度・従属度が変動しない
IF TCVAR:(ARG:0):失神フラグ || TCVAR:(ARG:0):離脱フラグ
	LOCAL:1 = 0
	LOCAL:2 = 0
	LOCAL:3 = 0
	LOCAL:4 = 0
ENDIF

;FL用の好感度補正
TIMES LOCAL:1, 0.6
TIMES LOCAL:2, 0.6
TIMES LOCAL:3, 0.6
TIMES LOCAL:4, 0.6

;●好感度・依存度・従属度を加算
CFLAG:(ARG:0):好感度 = LIMIT(CFLAG:(ARG:0):好感度 + LOCAL:1, -1000, 999999999999)
CFLAG:(ARG:0):依存度 = LIMIT(CFLAG:(ARG:0):依存度 + LOCAL:2, -1000, 999999999999)
CFLAG:(ARG:0):従属度 = LIMIT(CFLAG:(ARG:0):従属度 + LOCAL:3, -1000, 999999999999)
CFLAG:(ARG:0):支配度 = LIMIT(CFLAG:(ARG:0):支配度 + LOCAL:4, -1000, 999999999999)

IF LOCAL:1 || LOCAL:2 || LOCAL:3 || LOCAL:4
	PRINTFORM (%SNAME(ARG:0), 12, LEFT% ⇒ %SNAME(MASTER), 12, LEFT%)
	SIF ABS(LOCAL:1) > 0
		PRINTFORM 好感度%TOSTR_SIGN(LOCAL:1)%{ABS(LOCAL:1), 3, RIGHT}(計:{CFLAG:(ARG:0):好感度, 5})
	SIF ABS(LOCAL:2) > 0
		PRINTFORM 依存度%TOSTR_SIGN(LOCAL:2)%{ABS(LOCAL:2), 3, RIGHT}(計:{CFLAG:(ARG:0):依存度, 5})
	SIF ABS(LOCAL:3) > 0
		PRINTFORM 従属度%TOSTR_SIGN(LOCAL:3)%{ABS(LOCAL:3), 3, RIGHT}(計:{CFLAG:(ARG:0):従属度, 5})
	SIF ABS(LOCAL:4) > 0
		PRINTFORM 支配度%TOSTR_SIGN(LOCAL:4)%{ABS(LOCAL:4), 3, RIGHT}(計:{CFLAG:(ARG:0):支配度, 5})
	PRINTL
ENDIF

;関係を改善
LOCAL:4 = LIMIT((LOCAL:1 + LOCAL:3) / 10, 0, 20)
CALL CHANGE_RELATION_O_TO_O(ARG:0, MASTER, LOCAL:4, LOCAL:4 * -1)

SIF FLAG:調教モード == 調教_捕虜調教 && CFLAG:(ARG:0):所属 != CFLAG:MASTER:所属 && IS_COUNTRY(CFLAG:(ARG:0):所属)
	CALL CHANGE_RELATION_O_TO_C(ARG:0, CFLAG:(ARG:0):所属, LOCAL:4 * -1 / 2, 0)

;●今回の好感度・依存度・従属度の変動量をTCVAR:70～72に記録
TCVAR:(ARG:0):今回の好感度の変動量 = LOCAL:1
TCVAR:(ARG:0):今回の依存度の変動量 = LOCAL:2
TCVAR:(ARG:0):今回の従属度の変動量 = LOCAL:3
TCVAR:(ARG:0):今回の支配度の変動量 = LOCAL:4

;-------------------------------------------------
;●好感度の処理
;-------------------------------------------------
@LOVE_UP_CHECK_好感度(ARG:0, TO_ID = 0)
; #region 好感度
#DIM TO_ID
;素質による増減
;LOCAL:1は上昇成分に掛かる補正
LOCAL:1 = 100
;LOCAL:2は減少成分に掛かる補正
LOCAL:2 = 100

SIF !TO_ID
	TO_ID = MASTER

SIF TALENT:(ARG:0):素直
	LOCAL:1 += 10
SIF TALENT:(ARG:0):献身的
	LOCAL:1 += 5
IF TO_ID == MASTER
	SIF TALENT:(ARG:0):恋慕
		LOCAL:1 += 10
	SIF TALENT:(ARG:0):親友
		LOCAL:1 += 10
	SIF TALENT:(ARG:0):親愛
		LOCAL:1 += 10
	SIF TALENT:(ARG:0):恋人
		LOCAL:1 += 10
	SIF TALENT:(ARG:0):服従
		LOCAL:1 += 10
	SIF TALENT:(ARG:0):隷属
		LOCAL:1 += 10
	SIF TALENT:(ARG:0):主人
		LOCAL:1 += 10
	SIF TALENT:(ARG:0):所有者
		LOCAL:1 += 10
	SIF TALENT:MASTER:天の御遣い
		LOCAL:1 += 20
	SIF TALENT:MASTER:魅惑
		LOCAL:1 += 10
	SIF TALENT:MASTER:謎の魅力
		LOCAL:1 += 10
	SIF TALENT:MASTER:人気
		LOCAL:1 += 10
ENDIF
SIF TALENT:(ARG:0):幼稚
	LOCAL:1 += 10
SIF TALENT:(ARG:0):チョロイン
	LOCAL:1 += 10

SIF TALENT:(ARG:0):反抗的
	LOCAL:2 += 10
SIF TALENT:(ARG:0):生意気
	LOCAL:2 += 10
SIF TALENT:(ARG:0):プライド高い
	LOCAL:2 += 10
SIF TALENT:(ARG:0):男嫌い && IS_MALE(TO_ID)
	LOCAL:2 += 10
SIF TALENT:(ARG:0):女嫌い && IS_FEMALE(TO_ID)
	LOCAL:2 += 10
SIF TALENT:(ARG:0):幼稚
	LOCAL:2 += 10
SIF TALENT:(ARG:0):チョロイン
	LOCAL:2 -= 10

SIF TALENT:(ARG:0):反抗的
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):生意気
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):無関心
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):感情乏しい
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):孤高
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):男嫌い && IS_MALE(TO_ID)
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):女嫌い && IS_FEMALE(TO_ID)
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):抑圧
	LOCAL:1 = LOCAL:1 * (180 - YOKUATSU_RATE(ARG:0)) / 180
SIF TALENT:(ARG:0):孤高
	LOCAL:1 = LOCAL:1 * (250 - KOKOU_RATE(ARG:0)) / 250

SIF TALENT:(ARG:0):献身的
	TIMES LOCAL:2, 0.95
SIF TALENT:(ARG:0):大人しい
	TIMES LOCAL:2, 0.90
IF TO_ID == MASTER
	SIF TALENT:(ARG:0):恋慕
		TIMES LOCAL:2, 0.90
	SIF TALENT:(ARG:0):親友
		TIMES LOCAL:2, 0.90
	SIF TALENT:(ARG:0):親愛
		TIMES LOCAL:2, 0.90
	SIF TALENT:(ARG:0):服従
		TIMES LOCAL:2, 0.90
	SIF TALENT:(ARG:0):隷属
		TIMES LOCAL:2, 0.90
	SIF TALENT:(ARG:0):主人
		TIMES LOCAL:2, 0.90
	SIF TALENT:(ARG:0):所有者
		TIMES LOCAL:2, 0.90
	SIF TALENT:(ARG:0):烙印
		TIMES LOCAL:2, 0.90
	SIF TALENT:MASTER:魅惑
		TIMES LOCAL:2, 0.90
	SIF TALENT:MASTER:謎の魅力
		TIMES LOCAL:2, 0.90
	SIF TALENT:MASTER:人気
		TIMES LOCAL:2, 0.90
ENDIF
SIF TALENT:(ARG:0):無関心
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):感情乏しい
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):チョロイン
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):抑圧
	LOCAL:2 = LOCAL:2 * (180 - YOKUATSU_RATE(ARG:0)) / 180

;素質による補正の最低値を50、最高値を180とする
LOCAL:1 = LIMIT(LOCAL:1, 50, 180)
LOCAL:2 = LIMIT(LOCAL:2, 50, 180)

;機嫌に応じた上下
SELECTCASE TOSTR_EMOTION(ARG:0)
	CASE "幸"
		TIMES LOCAL:1, 2.20
		TIMES LOCAL:2, 0.50
	CASE "悦"
		TIMES LOCAL:1, 1.80
		TIMES LOCAL:2, 0.60
	CASE "良"
		TIMES LOCAL:1, 1.30
		TIMES LOCAL:2, 0.80
	CASE "恨"
		TIMES LOCAL:1, 0.30
		TIMES LOCAL:2, 3.50
	CASE "怒"
		TIMES LOCAL:1, 0.60
		TIMES LOCAL:2, 1.80
	CASE "憤"
		TIMES LOCAL:1, 0.85
		TIMES LOCAL:2, 1.40
	CASE "鬱"
		TIMES LOCAL:1, 0.10
		TIMES LOCAL:2, 1.50
	CASE "悲"
		TIMES LOCAL:1, 0.40
		TIMES LOCAL:2, 1.20
	CASE "憂"
		TIMES LOCAL:1, 0.70
		TIMES LOCAL:2, 1.10
	CASE "狂"
		TIMES LOCAL:1, 0.20
		TIMES LOCAL:2, 2.00
	CASE "恐"
		TIMES LOCAL:1, 0.50
		TIMES LOCAL:2, 1.50
	CASE "怯"
		TIMES LOCAL:1, 0.80
		TIMES LOCAL:2, 1.20
	CASE "壊"
		LOCAL:1 = 0
		LOCAL:2 = 0
	CASE "虚"
		TIMES LOCAL:1, 0.10
		TIMES LOCAL:2, 0.10
ENDSELECT

VARI 好感度上昇量
VARI 好感度減少量

好感度上昇量 = TCVAR:(ARG:0):好感度上昇値 * LOCAL:1 / 100
好感度減少量 = TCVAR:(ARG:0):好感度減少値 * LOCAL:2 / 100

;機嫌に応じた上下
IF GROUPMATCH(TOSTR_EMOTION(ARG:0), "悦", "幸")
	;絶頂による好感度上昇
	好感度上昇量 += SUM_NOWEX(ARG:0) * 5
ENDIF

;体力が尽きていると好感度にペナルティ
IF TCVAR:(ARG:0):行動不能フラグ
	TIMES 好感度上昇量, 0.20
	TIMES 好感度減少量, 2.00
ENDIF

RETURN 好感度上昇量, 好感度減少量
; #endregion

;-------------------------------------------------
;●依存度の処理
;-------------------------------------------------
@LOVE_UP_CHECK_依存度(ARG:0)
; #region 依存度
LOCAL:0 = 0

;素質による増減
;LOCAL:1は上昇成分に掛かる補正
LOCAL:1 = 100
;LOCAL:2は減少成分に掛かる補正
LOCAL:2 = 100

SIF TALENT:(ARG:0):素直
	LOCAL:1 += 10
SIF TALENT:(ARG:0):抑圧
	LOCAL:1 += 20
SIF TALENT:(ARG:0):孤高
	LOCAL:1 += 20
SIF TALENT:(ARG:0):恋慕
	LOCAL:1 += 10
SIF TALENT:(ARG:0):親友
	LOCAL:1 += 10
SIF TALENT:(ARG:0):親愛
	LOCAL:1 += 10
SIF TALENT:(ARG:0):恋人
	LOCAL:1 += 10
SIF TALENT:(ARG:0):服従
	LOCAL:1 += 10
SIF TALENT:(ARG:0):隷属
	LOCAL:1 += 10
SIF TALENT:(ARG:0):烙印
	LOCAL:1 += 10
SIF TALENT:(ARG:0):主人
	LOCAL:1 += 10
SIF TALENT:(ARG:0):所有者
	LOCAL:1 += 10
SIF TALENT:(ARG:0):プライド低い
	LOCAL:1 += 10
SIF TALENT:MASTER:求心力
	LOCAL:1 += 20
SIF TALENT:MASTER:小悪魔
	LOCAL:1 += 10
SIF TALENT:MASTER:魅惑
	LOCAL:1 += 10
SIF TALENT:MASTER:謎の魅力
	LOCAL:1 += 10

SIF TALENT:(ARG:0):プライド高い
	LOCAL:2 += 10
SIF TALENT:(ARG:0):反抗的
	LOCAL:2 += 10
SIF TALENT:(ARG:0):自制心
	LOCAL:2 += 10
SIF TALENT:(ARG:0):男嫌い && IS_MALE(MASTER)
	LOCAL:2 += 10
SIF TALENT:(ARG:0):女嫌い && IS_FEMALE(MASTER)
	LOCAL:2 += 10

SIF TALENT:(ARG:0):気丈
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):プライド高い
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):反抗的
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):無関心
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):感情乏しい
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):自制心
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):男嫌い && IS_MALE(MASTER)
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):女嫌い && IS_FEMALE(MASTER)
	TIMES LOCAL:1, 0.90

SIF TALENT:(ARG:0):恋慕
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):親友
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):親愛
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):服従
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):隷属
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):主人
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):所有者
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):プライド低い
	TIMES LOCAL:2, 0.90
SIF TALENT:MASTER:魅惑
	TIMES LOCAL:2, 0.90
SIF TALENT:MASTER:謎の魅力
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):無関心
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):感情乏しい
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):抑圧
	TIMES LOCAL:2, 0.30

;素質による補正の最低値を50、最高値を180とする
LOCAL:1 = LIMIT(LOCAL:1, 50, 180)
LOCAL:2 = LIMIT(LOCAL:2, 50, 180)

;機嫌に応じた上下
SELECTCASE TOSTR_EMOTION(ARG:0)
	CASE "幸"
		TIMES LOCAL:1, 2.00
		TIMES LOCAL:2, 0.50
	CASE "悦"
		TIMES LOCAL:1, 1.50
		TIMES LOCAL:2, 0.70
	CASE "良"
		TIMES LOCAL:1, 1.20
		TIMES LOCAL:2, 0.90
	CASE "恨"
		TIMES LOCAL:1, 0.70
		TIMES LOCAL:2, 1.30
	CASE "怒"
		TIMES LOCAL:1, 0.80
		TIMES LOCAL:2, 1.20
	CASE "憤"
		TIMES LOCAL:1, 0.90
		TIMES LOCAL:2, 1.10
	CASE "鬱"
		TIMES LOCAL:1, 0.70
		TIMES LOCAL:2, 1.30
	CASE "悲"
		TIMES LOCAL:1, 0.80
		TIMES LOCAL:2, 1.20
	CASE "憂"
		TIMES LOCAL:1, 0.90
		TIMES LOCAL:2, 1.10
	CASE "狂"
		TIMES LOCAL:1, 2.00
		TIMES LOCAL:2, 0.50
	CASE "恐"
		TIMES LOCAL:1, 1.60
		TIMES LOCAL:2, 0.70
	CASE "怯"
		TIMES LOCAL:1, 1.30
		TIMES LOCAL:2, 0.90
	CASE "壊"
		LOCAL:1 = 0
		LOCAL:2 = 0
	CASE "虚"
		TIMES LOCAL:1, 0.10
		TIMES LOCAL:2, 0.10
ENDSELECT

VARI 依存度上昇量
VARI 依存度減少量

依存度上昇量 = TCVAR:(ARG:0):依存度上昇値 * LOCAL:1 / 100
依存度減少量 = TCVAR:(ARG:0):依存度減少値 * LOCAL:2 / 100

;機嫌に応じた上下
IF GROUPMATCH(TOSTR_EMOTION(ARG:0), "壊", "虚") == 0
	;絶頂による依存度上昇
	依存度上昇量 += SUM_NOWEX(ARG:0) * 50
ENDIF

RETURN 依存度上昇量, 依存度減少量
; #endregion

;-------------------------------------------------
;●従属度の処理
;-------------------------------------------------
@LOVE_UP_CHECK_従属度(ARG:0)
; #region 従属度
;素質による増減
;LOCAL:1は上昇成分に掛かる補正
LOCAL:1 = 100
;LOCAL:2は減少成分に掛かる補正
LOCAL:2 = 100

SIF TALENT:(ARG:0):素直
	LOCAL:1 += 10
SIF TALENT:(ARG:0):臆病
	LOCAL:1 += 10
SIF TALENT:(ARG:0):プライド低い
	LOCAL:1 += 10
SIF TALENT:(ARG:0):服従
	LOCAL:1 += 10
SIF TALENT:(ARG:0):隷属
	LOCAL:1 += 10
SIF TALENT:(ARG:0):烙印
	LOCAL:1 += 10
SIF TALENT:MASTER:君主の器
	LOCAL:1 += 20
SIF TALENT:MASTER:小悪魔
	LOCAL:1 += 10
SIF TALENT:MASTER:魅惑
	LOCAL:1 += 10
SIF TALENT:MASTER:謎の魅力
	LOCAL:1 += 10
SIF TALENT:(ARG:0):チョロイン
	LOCAL:1 += 10

SIF TALENT:(ARG:0):プライド高い
	LOCAL:2 += 10
SIF TALENT:(ARG:0):反抗的
	LOCAL:2 += 10
SIF TALENT:(ARG:0):孤高
	LOCAL:2 += 10
SIF TALENT:(ARG:0):自制心
	LOCAL:2 += 10
SIF TALENT:(ARG:0):チョロイン
	LOCAL:2 -= 10

SIF TALENT:(ARG:0):気丈
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):プライド高い
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):反抗的
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):無関心
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):感情乏しい
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):孤高
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):自制心
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):男嫌い && IS_MALE(MASTER)
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):女嫌い && IS_FEMALE(MASTER)
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):抑圧
	LOCAL:1 = LOCAL:1 * (180 - YOKUATSU_RATE(ARG:0)) / 180
SIF TALENT:(ARG:0):孤高
	LOCAL:1 = LOCAL:1 * (250 - KOKOU_RATE(ARG:0)) / 250

SIF TALENT:(ARG:0):臆病
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):プライド低い
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):服従
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):隷属
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):烙印
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):無関心
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):感情乏しい
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):チョロイン
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):抑圧
	LOCAL:2 = LOCAL:2 * (180 - YOKUATSU_RATE(ARG:0)) / 180

;最低値を50、最高値を180とする
LOCAL:1 = LIMIT(LOCAL:1, 50, 180)
LOCAL:2 = LIMIT(LOCAL:2, 50, 180)

;機嫌に応じた上下
SELECTCASE TOSTR_EMOTION(ARG:0)
	CASE "幸"
		TIMES LOCAL:1, 1.50
		TIMES LOCAL:2, 0.70
	CASE "悦"
		TIMES LOCAL:1, 1.30
		TIMES LOCAL:2, 0.80
	CASE "良"
		TIMES LOCAL:1, 1.15
		TIMES LOCAL:2, 0.90
	CASE "恨"
		TIMES LOCAL:1, 0.20
		TIMES LOCAL:2, 2.50
	CASE "怒"
		TIMES LOCAL:1, 0.50
		TIMES LOCAL:2, 1.60
	CASE "憤"
		TIMES LOCAL:1, 0.80
		TIMES LOCAL:2, 1.20
	CASE "鬱"
		TIMES LOCAL:1, 0.10
		TIMES LOCAL:2, 1.50
	CASE "悲"
		TIMES LOCAL:1, 0.40
		TIMES LOCAL:2, 1.25
	CASE "憂"
		TIMES LOCAL:1, 0.75
		TIMES LOCAL:2, 1.10
	CASE "狂"
		TIMES LOCAL:1, 3.00
		TIMES LOCAL:2, 0.20
	CASE "恐"
		TIMES LOCAL:1, 2.20
		TIMES LOCAL:2, 0.50
	CASE "怯"
		TIMES LOCAL:1, 1.50
		TIMES LOCAL:2, 0.75
	CASE "壊"
		LOCAL:1 = 0
		LOCAL:2 = 0
	CASE "虚"
		TIMES LOCAL:1, 0.10
		TIMES LOCAL:2, 0.10
ENDSELECT

VARI 従属度上昇量
VARI 従属度減少量

従属度上昇量 = TCVAR:(ARG:0):従属度上昇値
従属度減少量 = TCVAR:(ARG:0):従属度減少値

IF FLAG:主導権所有者
	TIMES 従属度上昇量, 0.7
	TIMES 従属度減少量, 1.2
ENDIF
従属度上昇量 = 従属度上昇量 * LOCAL:1 / 100
従属度減少量 = 従属度減少量 * LOCAL:2 / 100

;機嫌に応じた上下
IF GROUPMATCH(TOSTR_EMOTION(ARG:0), "壊", "虚", "狂", "恐") == 0
	;絶頂による従属度上昇
	従属度上昇量 += SUM_NOWEX(ARG:0)
ENDIF

RETURN 従属度上昇量, 従属度減少量
; #endregion

;-------------------------------------------------
;●支配度の処理
;-------------------------------------------------
@LOVE_UP_CHECK_支配度(ARG:0)
; #region 支配度
;素質による増減
;LOCAL:1は上昇成分に掛かる補正
LOCAL:1 = 100
;LOCAL:2は減少成分に掛かる補正
LOCAL:2 = 100

SIF TALENT:(ARG:0):反抗的
	LOCAL:1 += 10
SIF TALENT:(ARG:0):気丈
	LOCAL:1 += 10
SIF TALENT:(ARG:0):プライド高い
	LOCAL:1 += 10
SIF TALENT:(ARG:0):主人
	LOCAL:1 += 10
SIF TALENT:(ARG:0):所有者
	LOCAL:1 += 10
SIF TALENT:(ARG:0):君主の器
	LOCAL:1 += 20
SIF TALENT:(ARG:0):小悪魔
	LOCAL:1 += 10
SIF TALENT:(ARG:0):魅惑
	LOCAL:1 += 10
SIF TALENT:(ARG:0):謎の魅力
	LOCAL:1 += 10

SIF TALENT:(ARG:0):プライド低い
	LOCAL:2 += 10
SIF TALENT:(ARG:0):素直
	LOCAL:2 += 10
SIF TALENT:(ARG:0):臆病
	LOCAL:2 += 10
SIF TALENT:(ARG:0):自制心
	LOCAL:2 += 10
SIF TALENT:(ARG:0):チョロイン
	LOCAL:2 -= 10

SIF TALENT:(ARG:0):素直
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):プライド低い
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):大人しい
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):無関心
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):感情乏しい
	TIMES LOCAL:1, 0.90

SIF TALENT:(ARG:0):男嫌い && IS_MALE(MASTER)
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):女嫌い && IS_FEMALE(MASTER)
	TIMES LOCAL:1, 0.90
SIF TALENT:(ARG:0):抑圧
	LOCAL:1 = LOCAL:1 * (180 - YOKUATSU_RATE(ARG:0)) / 180
SIF TALENT:(ARG:0):孤高
	LOCAL:1 = LOCAL:1 * (250 - KOKOU_RATE(ARG:0)) / 250

SIF TALENT:(ARG:0):反抗的
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):プライド高い
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):主人
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):所有者
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):小悪魔
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):気丈
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):感情乏しい
	TIMES LOCAL:2, 0.90
SIF TALENT:(ARG:0):チョロイン
	TIMES LOCAL:2, 0.90

SIF TALENT:(ARG:0):抑圧
	LOCAL:2 = LOCAL:2 * (180 - YOKUATSU_RATE(ARG:0)) / 180

;最低値を50、最高値を180とする
LOCAL:1 = LIMIT(LOCAL:1, 50, 180)
LOCAL:2 = LIMIT(LOCAL:2, 50, 180)

;機嫌に応じた上下
SELECTCASE TOSTR_EMOTION(ARG:0)
	CASE "幸"
		TIMES LOCAL:1, 1.50
		TIMES LOCAL:2, 0.70
	CASE "悦"
		TIMES LOCAL:1, 1.30
		TIMES LOCAL:2, 0.80
	CASE "良"
		TIMES LOCAL:1, 1.15
		TIMES LOCAL:2, 0.90
	CASE "恨"
		TIMES LOCAL:1, 1.00
		TIMES LOCAL:2, 1.50
	CASE "怒"
		TIMES LOCAL:1, 1.00
		TIMES LOCAL:2, 1.30
	CASE "憤"
		TIMES LOCAL:1, 1.30
		TIMES LOCAL:2, 1.00
	CASE "鬱"
		TIMES LOCAL:1, 0.10
		TIMES LOCAL:2, 1.50
	CASE "悲"
		TIMES LOCAL:1, 0.40
		TIMES LOCAL:2, 1.25
	CASE "憂"
		TIMES LOCAL:1, 0.75
		TIMES LOCAL:2, 1.10
	CASE "狂"
		TIMES LOCAL:1, 0.75
		TIMES LOCAL:2, 1.50
	CASE "恐"
		TIMES LOCAL:1, 0.75
		TIMES LOCAL:2, 1.25
	CASE "怯"
		TIMES LOCAL:1, 1.00
		TIMES LOCAL:2, 1.25
	CASE "壊"
		LOCAL:1 = 0
		LOCAL:2 = 0
	CASE "虚"
		TIMES LOCAL:1, 0.10
		TIMES LOCAL:2, 0.10
ENDSELECT

VARI 支配度上昇量
VARI 支配度減少量

支配度上昇量 = TCVAR:(ARG:0):支配度上昇値
支配度減少量 = TCVAR:(ARG:0):支配度減少値

IF FLAG:主導権所有者 == ARG:0
	TIMES 支配度上昇量, 1.2
	TIMES 支配度減少量, 0.7
ENDIF

IF GROUPMATCH(FLAG:調教モード, 調教_逆調教特殊, 調教_逆調教通常, 調教_慰安)
	TIMES 支配度上昇量, 1.3
	TIMES 支配度減少量, 0.7
ENDIF

支配度上昇量 = 支配度上昇量 * LOCAL:1 / 100
支配度減少量 = 支配度減少量 * LOCAL:2 / 100

;機嫌に応じた上下
IF GROUPMATCH(TOSTR_EMOTION(ARG:0), "壊", "虚") == 0
	;絶頂による支配度上昇
	支配度上昇量 += SUM_NOWEX(MASTER) * 50
ENDIF

RETURN 支配度上昇量, 支配度減少量
; #endregion

;-------------------------------------------------
;ARG:0番のキャラに対してソース以外の各種変動処理を行う
;-------------------------------------------------
@SOURCE_CHANGE_OTHER_STATUS(ARG:0)
;ウフフ中限定
IF FLAG:ウフフフラグ
	;恐怖によるおもらしの設定が有効の場合
	IF CONFIG:91 == 1
		;尿意がある程度の状態で恐怖上昇量3000以上、または尿意が高い状態で恐怖上昇量1000以上
		IF (CUP:(ARG:0):怖主 >= 1000 && TCVAR:(ARG:0):尿残量 >= 3000) || (CUP:(ARG:0):怖主 >= 2500 && TCVAR:(ARG:0):尿残量 >= 1000)
			IF TCVAR:(ARG:0):尿残量 >= 3000
				TCVAR:(ARG:0):失禁量 = 2
			ELSE
				TCVAR:(ARG:0):失禁量 = 1
			ENDIF

			TCVAR:(ARG:0):失禁種類 = 4
			EXP:(ARG:0):排泄経験値 += 1
			EXP:(ARG:0):おもらし経験 += TCVAR:(ARG:0):失禁量

			;尿残量を0にする
			TCVAR:(ARG:0):尿残量 = 0
		ENDIF
	ENDIF

	;利尿剤使用中なら尿残量を追加
	IF TCVAR:(ARG:0):利尿剤
		IF TALENT:(ARG:0):おもらし癖
			TCVAR:(ARG:0):尿残量 += 500
		ELSE
			TCVAR:(ARG:0):尿残量 += 300
		ENDIF
		;おもらし癖なら常に尿残量を補充
	ELSEIF TALENT:(ARG:0):おもらし癖 && TCVAR:(ARG:0):尿残量 < 2000
		TCVAR:(ARG:0):尿残量 += 200
	ENDIF

	;絶頂・尿意限界によるおもらしの設定が無効の場合
	IF CONFIG:90 == 0
		;尿残量が最大でも2000までしか溜まらない
		TCVAR:(ARG:0):尿残量 = MIN(TCVAR:(ARG:0):尿残量, 2000)

		;設定が有効の場合
	ELSE
		;蜂蜜水を使用しても尿残量がたまっていく
		IF TCVAR:(ARG:0):エインズの露 >= 1
			TCVAR:(ARG:0):尿残量 += TCVAR:(ARG:0):エインズの露 * 50
			TCVAR:(ARG:0):エインズの露 --
		ENDIF
	ENDIF
ENDIF

;スケベモブは無条件で焦らされ度上昇
IF CFLAG:(ARG:0):スケベモブ
	TCVAR:(ARG:0):焦らされ度 += RAND(10, 15) * (1 + GET_PALAMLV(PALAM:(ARG:0):欲情))
ENDIF

;PALAMの値だけ気力が削れていく
DOWNBASE:(ARG:0):気力 += MIN((CUP:(ARG:0):怖主 + (CUP:(ARG:0):哀主 / 2)) / 30, 300)

;体力・気力・精神力の減少
DOWNBASE:(ARG:0):体力 = CALC_LOSEBASE_EXP_CORRECTION(ARG:0, DOWNBASE:(ARG:0):体力)
DOWNBASE:(ARG:0):気力 = CALC_LOSEBASE_EXP_CORRECTION(ARG:0, DOWNBASE:(ARG:0):気力)

;素質<絶倫>またはアイテム「メイガスの夜」使用で消耗を軽減
IF TCVAR:(ARG:0):メイガスの夜
	DOWNBASE:(ARG:0):体力 /= 5
	DOWNBASE:(ARG:0):気力 /= 5
ELSEIF TALENT:(ARG:0):絶倫
	DOWNBASE:(ARG:0):体力 /= 3
	DOWNBASE:(ARG:0):気力 /= 3
ENDIF

IF CFLAG:(ARG:0):調教中BASE減らない
	DOWNBASE:(ARG:0):体力 = 0
	DOWNBASE:(ARG:0):気力 = 0
ENDIF

SIF DOWNBASE:(ARG:0):体力 > 0
	BASE:(ARG:0):体力 -= DOWNBASE:(ARG:0):体力

SIF DOWNBASE:(ARG:0):気力 > 0
	BASE:(ARG:0):気力 -= DOWNBASE:(ARG:0):気力

IF FLAG:ハウジングモード
	BASE:(ARG:0):体力 += TCVAR:(ARG:0):HO体力増減値
	BASE:(ARG:0):体力 = LIMIT(BASE:(ARG:0):体力, 0, MAXBASE:(ARG:0):体力)
	BASE:(ARG:0):気力 += TCVAR:(ARG:0):HO気力増減値
	BASE:(ARG:0):気力 = LIMIT(BASE:(ARG:0):気力, 0, MAXBASE:(ARG:0):気力)
ENDIF

IF FLAG:調教モード == 2 && FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
	;気絶してたら回復
	IF TCVAR:(ARG:0):失神フラグ
		LOCAL = RAND(-100, 0)
	ELSE
		LOCAL = LIMIT(CUP:(ARG:0):怖主 * 50 / 100 - CUP:(ARG:0):怒主 * 10 / 100 - MAXBASE:(ARG:0):精神力 / RAND(14, 20), -500, MAXBASE:(ARG:0):精神力 / 4)
		SIF LOCAL > 0
			LOCAL = LOCAL * MAX(10000 - MAX(CFLAG:(ARG:0):好感度, CFLAG:(ARG:0):従属度, 0), 5000) / 10000
	ENDIF
	SELECTCASE INRANGEARRAY(PRISONER_TARGET, 0, CHARANUM + 1)
		CASE 2
			SIF LOCAL >= 0
				TIMES LOCAL, 1.30
		CASE 3
			SIF LOCAL >= 0
				TIMES LOCAL, 1.50
	ENDSELECT
	IF BASE:(ARG:0):精神力 - LOCAL < 0
		TIMES LOCAL, 0.75
	ENDIF
	BASE:(ARG:0):精神力 = LIMIT(BASE:(ARG:0):精神力 - LOCAL, -500, MAXBASE:(ARG:0):精神力)
	IF BASE:(ARG:0):精神力 < 0
		CFLAG:(ARG:0):崩壊 += (100 - BASE:(ARG:0):精神力 / 2) * 1000 / (MAX(MAXBASE:(ARG:0):精神力, 1000))
	ENDIF
ENDIF

;-------------------------------------------------
;体力気力消費量の、絶頂経験での補正
;絶頂経験に比例して減る
;-------------------------------------------------
@CALC_LOSEBASE_EXP_CORRECTION(対象, 消費量)
#FUNCTION
#DIM 対象
#DIM 消費量
;PRINTFORML 消費量{消費量}
;PRINTFORML 補正後{消費量 - 消費量 * MIN(EXP:対象:絶頂経験, 5000) / 10000}
;絶頂経験1につき0.1%、700で70%で打ち止め
RETURNF 消費量 - 消費量 * MIN(EXP:対象:絶頂経験, 700) / 1000

;RETURNF 消費量 * (10000 / MAX(EXP:対象:絶頂経験 / 50, 1)) / 10000

;-------------------------------------------------
;@PRINT_EXP_UP内で使用する関数
;-------------------------------------------------
@PRINT_COM_RESULT(ARGS:0)
IF TFLAG:95
	TFLAG:95 = 0
	PRINTFORM 　%ANAME(TFLAG:94), 16, LEFT%:
	LOCAL:0 = 9
ELSE
	PRINT
ENDIF

LOCAL:0 += STRLENS(ARGS:0) + 1

IF LOCAL:0 >= 80
	PRINTL
	PRINTFORM %TOSTR_SPACE(19)%
	LOCAL:0 = 9
ENDIF

PRINTFORM %ARGS:0%

;-------------------------------------------------
;ARG:0番のキャラがコマンド実行により得た失った体力を表示
;-------------------------------------------------
@PRINT_BASE_LOSE(ARG:0)
;●体力・気力の表示
TFLAG:94 = ARG:0
TFLAG:95 = 1

FOR LOCAL:0, 0, 2
	IF DOWNBASE:(ARG:0):(LOCAL:0) > 0
		CALL PRINT_COM_RESULT(@"%BASENAME:(LOCAL:0)%-{DOWNBASE:(ARG:0):(LOCAL:0)}")
	ENDIF
NEXT

IF FLAG:ハウジングモード
	IF TCVAR:(ARG:0):HO体力増減値 > 0
		CALL PRINT_COM_RESULT(@"%BASENAME:0%+{TCVAR:(ARG:0):HO体力増減値}")
	ELSEIF TCVAR:(ARG:0):HO体力増減値 < 0
		CALL PRINT_COM_RESULT(@"%BASENAME:0%{TCVAR:(ARG:0):HO体力増減値}")
	ENDIF
	IF TCVAR:(ARG:0):HO気力増減値 > 0
		CALL PRINT_COM_RESULT(@"%BASENAME:1%+{TCVAR:(ARG:0):HO気力増減値}")
	ELSEIF TCVAR:(ARG:0):HO気力増減値 < 0
		CALL PRINT_COM_RESULT(@"%BASENAME:1%{TCVAR:(ARG:0):HO気力増減値}")
	ENDIF
ENDIF

IF !TFLAG:95
	PRINTL
ENDIF

;-------------------------------------------------
;ARG:0番のキャラがコマンド実行により得たEXPを表示
;主導度・倒錯度の変化もここで処理
;-------------------------------------------------
@PRINT_EXP_UP(対象)
#DIM 対象
#DIM 主導度変化量
#DIM 倒錯度変化量
#DIM 倒錯度変化基準
LOCAL:5 = 1

TFLAG:94 = 対象
TFLAG:95 = 1

;●主導度・倒錯度の変動と表示
;能力固定フラグが立っている場合も変動させない
IF !CFLAG:対象:能力固定フラグ
	主導度変化量 = TFLAG:主導度変化基準値
	倒錯度変化量 = TFLAG:倒錯度変化基準値 + TCVAR:対象:50
	倒錯度変化基準 = TCVAR:対象:50

	IF TALENT:対象:Ｓ気質 && TFLAG:主導度変化基準値 > 0
		TIMES 主導度変化量, 2.00
	ENDIF
	IF TALENT:対象:Ｍ気質 && TFLAG:主導度変化基準値 < 0
		TIMES 主導度変化量, 2.00
	ENDIF
	IF TALENT:対象:倒錯的 && TFLAG:倒錯度変化基準値 > 0
		TIMES 倒錯度変化量, 2.00
		TIMES 倒錯度変化基準, 2.00
	ENDIF
	;自動コマンド実行では主導度変化量を減らす
	IF TFLAG:リアクションコマンド実行 || TFLAG:奉仕モード
		TIMES 主導度変化量, 0.25
	ENDIF

	IF IS_MPLY(対象)
		;ウフフ中
		IF FLAG:ウフフフラグ
			SELECTCASE GET_COM_INITIATIVE()
				CASE 0
				CASE 1
					主導度変化量 *= -1
				CASE 2
					主導度変化量 = 1
				CASE 3
					主導度変化量 = -1
			ENDSELECT
			ABL:対象:主導度Ｕ = LIMIT(ABL:対象:主導度Ｕ + 主導度変化量, -1000, 1000)
			;非ウフフ
		ELSE
			SELECTCASE GET_COM_INITIATIVE()
				CASE 0
				CASE 1
					主導度変化量 *= -1
			ENDSELECT
			ABL:対象:主導度Ｎ = LIMIT(ABL:対象:主導度Ｎ + 主導度変化量, -1000, 1000)
		ENDIF

	ELSEIF IS_MTAR(対象)
		;ウフフ中
		IF FLAG:ウフフフラグ
			SELECTCASE GET_COM_INITIATIVE()
				CASE 0
					主導度変化量 *= -1
				CASE 1
				CASE 2
					主導度変化量 = -1
				CASE 3
					主導度変化量 = 1
			ENDSELECT
			;非ウフフ
		ELSE
			SELECTCASE GET_COM_INITIATIVE()
				CASE 0
					主導度変化量 *= -1
				CASE 1
			ENDSELECT
		ENDIF

	ELSE
		主導度変化量 = 0
		倒錯度変化量 = 倒錯度変化基準
	ENDIF

	IF FLAG:ウフフフラグ
		;コマンドに参加しているほど、回復しにくくなる
		FOR LOCAL:0, 0, MEQUIP_NUM
			FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
				IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == 対象
					FOR LOCAL:3, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
						IF MEQUIP_INITIATIVE:(LOCAL:0) == MEQUIP_PLAYER:(LOCAL:0):(LOCAL:3)
							主導度変化量 ++
							GOTO FOUND
						ENDIF
					NEXT
					FOR LOCAL:3, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
						IF MEQUIP_INITIATIVE:(LOCAL:0) == MEQUIP_TARGET:(LOCAL:0):(LOCAL:3)
							主導度変化量 --
							GOTO FOUND
						ENDIF
					NEXT
					GOTO FOUND
				ENDIF
			NEXT
			FOR LOCAL:1, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
				IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:1) == 対象
					FOR LOCAL:3, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
						IF MEQUIP_INITIATIVE:(LOCAL:0) == MEQUIP_TARGET:(LOCAL:0):(LOCAL:3)
							主導度変化量 ++
							GOTO FOUND
						ENDIF
					NEXT
					FOR LOCAL:3, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
						IF MEQUIP_INITIATIVE:(LOCAL:0) == MEQUIP_PLAYER:(LOCAL:0):(LOCAL:3)
							主導度変化量 --
							GOTO FOUND
						ENDIF
					NEXT
					GOTO FOUND
				ENDIF
			NEXT
			$FOUND
		NEXT
	ENDIF

	ABL:対象:倒錯度 = LIMIT(ABL:対象:倒錯度 + 倒錯度変化量, 0, 1000)

	IF FLAG:ウフフフラグ
		;スキルによる補正
		IF HAS_SKILL(対象, "WPN_SEXUAL_INITIATIVE", スキル_大分類_武器)
			IF 主導度変化量 > 0
				TIMES 主導度変化量, 4.00
			ELSE
				TIMES 主導度変化量, 0.50
			ENDIF
		ELSEIF HAS_SKILL(対象, "WPN_SEXUAL_FOLLOWER", スキル_大分類_武器)
			IF 主導度変化量 > 0
				TIMES 主導度変化量, 0.50
			ELSE
				TIMES 主導度変化量, 4.00
			ENDIF
		ENDIF
		ABL:対象:主導度Ｕ = LIMIT(ABL:対象:主導度Ｕ + 主導度変化量, -1000, 1000)
	ELSE
		ABL:対象:主導度Ｎ = LIMIT(ABL:対象:主導度Ｎ + 主導度変化量, -1000, 1000)
	ENDIF

	IF 主導度変化量 != 0
		CALL PRINT_COM_RESULT(@"主導度%TOSTR_SIGN(主導度変化量)%{ABS(主導度変化量)}")
	ENDIF
	IF 倒錯度変化量 != 0
		CALL PRINT_COM_RESULT(@"倒錯度%TOSTR_SIGN(倒錯度変化量)%{ABS(倒錯度変化量)}")
	ENDIF
ENDIF

;●主人公が取得できない経験をリセット
;IF 対象 == MASTER
;	EXP:MASTER:奉仕経験値 = TCVAR:MASTER:110
;	EXP:MASTER:性交経験値 = TCVAR:MASTER:111
;	EXP:MASTER:レズ経験値 = TCVAR:MASTER:112
;	EXP:MASTER:ＢＬ経験値 = TCVAR:MASTER:113
;	EXP:MASTER:露出経験値 = TCVAR:MASTER:114
;	EXP:MASTER:自慰経験値 = TCVAR:MASTER:115
;	EXP:MASTER:精愛経験値 = TCVAR:MASTER:116
;	EXP:MASTER:排泄経験値 = TCVAR:MASTER:119
;	EXP:MASTER:触手経験値 = TCVAR:MASTER:120
;	EXP:MASTER:出産経験値 = TCVAR:MASTER:121
;	EXP:MASTER:欲望経験値 = TCVAR:MASTER:131
;ENDIF

;●能力固定フラグが立っている場合、全ての経験をリセット
IF CFLAG:対象:能力固定フラグ
	FOR LOCAL:0, 0, 100
		EXP:対象:(LOCAL:0) = TCVAR:対象:(LOCAL:0 + 100)
	NEXT
ENDIF

;●経験の表示
FOR LOCAL:0, 0, 94
	IF EXP:対象:(LOCAL:0) > TCVAR:対象:(LOCAL:0 + 100)
		CALL PRINT_COM_RESULT(@"%EXPNAME:(LOCAL:0)%+{EXP:対象:(LOCAL:0) - TCVAR:対象:(LOCAL:0 + 100)}")
	ENDIF
NEXT

IF !TFLAG:95
	PRINTL
ENDIF

;-------------------------------------------------
;キャラARG:0にレベルARG:1の既成事実を取得させる関数(既に指定以上のレベルなら無視)
;-------------------------------------------------
@SET_COUPLE_STEP(ARG:0, ARG:1)
IF ARG:0 != MASTER && ARG:1 > MARK:(ARG:0):既成事実
	MARK:(ARG:0):既成事実 = ARG:1
	PRINTFORM %ANAME(ARG:0)%が
	SETCOLOR カラー_注意
	PRINTFORM 既成事実Lv{ARG:1}
	RESETCOLOR
	PRINTW を取得
ENDIF

;-------------------------------------------------
;同性の場合のソース補正
;-------------------------------------------------
@SOURCE_SEX_CHECK(ARG:0)
LOCAL:5 = -1
;自身がターゲットなら、プレイヤーに少なくとも一人同性のキャラが必要
IF IS_MTAR(ARG:0)
	FOR LOCAL:0, 0, MPLY_NUM
		IF IS_SAMESEX(MPLY:(LOCAL:0), ARG:0)
			IF IS_MALE(ARG:0, 1)
				LOCAL:5 = ABL:(ARG:0):ＢＬ
			ELSE
				LOCAL:5 = ABL:(ARG:0):レズ
			ENDIF
			BREAK
		ENDIF
	NEXT
	;自身がプレイヤーなら、ターゲットに少なくとも一人同性のキャラが必要
ELSEIF IS_MPLY(ARG:0)
	FOR LOCAL:0, 0, MTAR_NUM
		IF IS_SAMESEX(MTAR:(LOCAL:0), ARG:0)
			IF IS_MALE(ARG:0, 1)
				LOCAL:5 = ABL:(ARG:0):ＢＬ
			ELSE
				LOCAL:5 = ABL:(ARG:0):レズ
			ENDIF
			BREAK
		ENDIF
	NEXT
ENDIF

;同性補正を受ける状況でないなら戻る
IF LOCAL:5 == -1
	RETURN
ENDIF

;●快感ソースの補正
SELECTCASE LOCAL:5
	CASE 0
		LOCAL:6 = 700
	CASE 1
		LOCAL:6 = 850
	CASE 2
		LOCAL:6 = 1000
	CASE 3
		LOCAL:6 = 1050
	CASE 4
		LOCAL:6 = 1100
	CASEELSE
		LOCAL:6 = MIN(1150 + (LOCAL:5 - 5) * 5, 2000)
ENDSELECT
FOR LOCAL:0, 0, 5
	SOURCE:(ARG:0):(LOCAL:0) = SOURCE:(ARG:0):(LOCAL:0) * LOCAL:6 / 1000
NEXT

;●快感以外のソースの補正
;[両刀]がない相手にウフフコマンドを行った場合
IF !TALENT:(ARG:0):両刀 && FLAG:ウフフフラグ
	SELECTCASE LOCAL:5
		CASE 0
			SOURCE:(ARG:0):逸脱 += MIN(SOURCE:(ARG:0):接触, 150) * 3
		CASE 1
			SOURCE:(ARG:0):逸脱 += MIN(SOURCE:(ARG:0):接触, 150) * 2
		CASE 2
			SOURCE:(ARG:0):逸脱 += MIN(SOURCE:(ARG:0):接触, 150) * 1
		CASE 3
			SOURCE:(ARG:0):逸脱 += MIN(SOURCE:(ARG:0):接触, 150) / 2
		CASE 4
			SOURCE:(ARG:0):逸脱 += MIN(SOURCE:(ARG:0):接触, 150) / 5
	ENDSELECT
ENDIF

SELECTCASE LOCAL:5
	CASE 0
		TIMES SOURCE:(ARG:0):愛情, 0.20
		SOURCE:(ARG:0):中毒充足 += 0
	CASE 1
		TIMES SOURCE:(ARG:0):愛情, 0.50
		SOURCE:(ARG:0):中毒充足 += MIN(SOURCE:(ARG:0):接触, 150) / 10
	CASE 2
		TIMES SOURCE:(ARG:0):愛情, 0.80
		SOURCE:(ARG:0):中毒充足 += MIN(SOURCE:(ARG:0):接触, 150) / 3
	CASE 3
		TIMES SOURCE:(ARG:0):愛情, 1.00
		SOURCE:(ARG:0):中毒充足 += MIN(SOURCE:(ARG:0):接触, 150) * 1
	CASE 4
		TIMES SOURCE:(ARG:0):愛情, 1.05
		SOURCE:(ARG:0):中毒充足 += MIN(SOURCE:(ARG:0):接触, 150) * 3 / 2
	CASEELSE
		SOURCE:(ARG:0):愛情 = SOURCE:(ARG:0):愛情 * MIN(110 + (LOCAL:5 - 5), 150) / 100
		SOURCE:(ARG:0):中毒充足 += MIN(SOURCE:(ARG:0):接触, 150) * ((LOCAL:5 - 5) * 1 + 20) / 10
ENDSELECT

;-------------------------------------------------
;快感系の経験を取得
;ARG:0=キャラ番号 ARG:1=EXP番号 ARG:2=変動前のPALAM
;-------------------------------------------------
@ADD_EXP_SENSE(ARG:0, ARG:1, ARG:2)

IF NOWEX:(ARG:0):(ARG:1) >= 1
	SELECTCASE CUP:(ARG:0):(ARG:1)
		CASE IS < 1500
			LOCAL:5 = 3
		CASE IS < 3000
			LOCAL:5 = 5
		CASE IS < 6000
			LOCAL:5 = 15
		CASE IS < 30000
			LOCAL:5 = 25
		CASE IS < 50000
			LOCAL:5 = 35
		CASE IS < 100000
			LOCAL:5 = 60
		CASE IS < 200000
			LOCAL:5 = 80
		CASE IS < 400000
			LOCAL:5 = 120
		CASEELSE
			LOCAL:5 = 160
	ENDSELECT
	GOTO FINALLY
ENDIF

SIF PALAM:(ARG:0):(ARG:1) - ARG:2 == 0
	RETURN 0

SELECTCASE PALAM:(ARG:0):(ARG:1) - ARG:2
	CASE IS < 500
		LOCAL:5 = 1
	CASE IS < 1500
		LOCAL:5 = 2
	CASE IS < 3000
		LOCAL:5 = 4
	CASE IS < 5000
		LOCAL:5 = 8
	CASE IS < 7500
		LOCAL:5 = 12
	CASE IS < 10000
		LOCAL:5 = 17
	CASEELSE
		LOCAL:5 = 22
ENDSELECT

$FINALLY

SIF LOCAL:5 <= 0
	RETURN

FOR LOCAL, 0, 9
	SIF LOCAL == ARG:1
		CONTINUE
	LOCAL:5 += NOWEX:(ARG:0):LOCAL
NEXT
EXP:(ARG:0):(ARG:1) += LOCAL:5

;-------------------------------------------------
;各種経験の取得
;-------------------------------------------------
@EXP_GOT_CHECK(ARG:0)

;経験とコマンド実行回数を加算
IF IS_MPLY(ARG:0)
	COM_EXP:(ARG:0):SELECTCOM = MIN(COM_EXP:(ARG:0):SELECTCOM + 10, 99999990)
	COM_COUNT_THIS_TURN:(ARG:0):SELECTCOM:(COM_OPTION:SELECTCOM) ++
	COM_COUNT_THIS_TRAIN:(ARG:0):SELECTCOM:(COM_OPTION:SELECTCOM) ++
ELSEIF IS_MTAR(ARG:0)
	COM_EXP:(ARG:0):(SELECTCOM + 1000) = MIN(COM_EXP:(ARG:0):(SELECTCOM + 1000) + 10, 99999990)
	COM_COUNT_THIS_TURN:(ARG:0):(SELECTCOM + 1000):(COM_OPTION:SELECTCOM) ++
	COM_COUNT_THIS_TRAIN:(ARG:0):(SELECTCOM + 1000):(COM_OPTION:SELECTCOM) ++
ELSE
	COM_EXP:(ARG:0):(SELECTCOM + 2000) = MIN(COM_EXP:(ARG:0):(SELECTCOM + 2000) + 10, 99999990)
	COM_COUNT_THIS_TURN:(ARG:0):(SELECTCOM + 2000):(COM_OPTION:SELECTCOM) ++
	COM_COUNT_THIS_TRAIN:(ARG:0):(SELECTCOM + 2000):(COM_OPTION:SELECTCOM) ++
ENDIF

;継続中のコマンドにも半分の経験が入る
FOR LOCAL:0, 0, MAX_MEQUIP
	IF MEQUIP:(LOCAL:0) >= 0 && MEQUIP:(LOCAL:0) != SELECTCOM
		IF IS_MPLY_EQUIP(ARG:0, LOCAL:0)
			COM_EXP:(ARG:0):(MEQUIP:(LOCAL:0)) = MIN(COM_EXP:(ARG:0):(MEQUIP:(LOCAL:0)) + 5, 99999990)
			COM_COUNT_THIS_TURN:(ARG:0):(SELECTCOM):(COM_OPTION:SELECTCOM) ++
			COM_COUNT_THIS_TRAIN:(ARG:0):(SELECTCOM):(COM_OPTION:SELECTCOM) ++
		ELSEIF IS_MTAR_EQUIP(ARG:0, LOCAL:0)
			COM_EXP:(ARG:0):(MEQUIP:(LOCAL:0) + 1000) = MIN(COM_EXP:(ARG:0):(MEQUIP:(LOCAL:0) + 1000) + 5, 99999990)
			COM_COUNT_THIS_TURN:(ARG:0):(SELECTCOM + 1000):(COM_OPTION:SELECTCOM) ++
			COM_COUNT_THIS_TRAIN:(ARG:0):(SELECTCOM + 1000):(COM_OPTION:SELECTCOM) ++
		ELSE
			COM_EXP:(ARG:0):(MEQUIP:(LOCAL:0) + 2000) = MIN(COM_EXP:(ARG:0):(MEQUIP:(LOCAL:0) + 2000) + 5, 99999990)
			COM_COUNT_THIS_TURN:(ARG:0):(SELECTCOM + 2000):(COM_OPTION:SELECTCOM) ++
			COM_COUNT_THIS_TRAIN:(ARG:0):(SELECTCOM + 2000):(COM_OPTION:SELECTCOM) ++
		ENDIF
	ENDIF
NEXT

IF TCVAR:(ARG:0):催眠中 > 0
	EXP:(ARG:0):催眠経験値 += MAX(TCVAR:(ARG:0):催眠中 / 2 , 1)
	EXP:(ARG:0):被催眠経験 ++
	SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_催眠をかけられたい ++
	IF TCVAR:(ARG:0):催眠実行者 != -1
		EXP:(TCVAR:(ARG:0):催眠実行者):催眠経験値 ++
	ENDIF
ENDIF

;コマンド実行分
IF IS_MPLY(ARG:0)
	FOR LOCAL, 0, MTAR_NUM
		;獣姦経験
		IF FLAG:ウフフフラグ && IS_ANIMAL(MTAR:(LOCAL))
			EXP:(ARG:0):獣姦経験 ++
			SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_獣と交わりたい ++
		ENDIF
		;触手経験
		SIF TALENT:(MTAR:LOCAL):特殊勢力素質 == 特殊勢力_触手
			EXP:(ARG:0):触手経験値 ++
		;近親相姦経験
		IF FLAG:ウフフフラグ && (HAS_SAME_FATHER(ARG:0, MTAR:LOCAL) || HAS_SAME_MOTHER(ARG:0, MTAR:LOCAL) || IS_FATHER(ARG:0, MTAR:LOCAL) || IS_MOTHER(ARG:0, MTAR:LOCAL) || IS_FATHER(MTAR:LOCAL, ARG:0) || IS_MOTHER(MTAR:LOCAL, ARG:0))
			EXP:(ARG:0):近親相姦経験 ++
			SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_近親相姦したい ++
		ENDIF
	NEXT
ENDIF

IF IS_MTAR(ARG:0)
	FOR LOCAL, 0, MPLY_NUM
		;獣姦経験
		IF FLAG:ウフフフラグ && IS_ANIMAL(MPLY:(LOCAL))
			EXP:(ARG:0):獣姦経験 ++
			SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_獣と交わりたい ++
		ENDIF
		;触手経験
		IF TALENT:(MPLY:LOCAL):特殊勢力素質 == 特殊勢力_触手
			EXP:(ARG:0):触手経験値 ++
			SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_触手で犯されたい ++
		ENDIF
		;近親相姦経験
		IF FLAG:ウフフフラグ && (HAS_SAME_FATHER(ARG:0, MPLY:LOCAL) || HAS_SAME_MOTHER(ARG:0, MPLY:LOCAL) || IS_FATHER(ARG:0, MPLY:LOCAL) || IS_MOTHER(ARG:0, MPLY:LOCAL) || IS_FATHER(MPLY:LOCAL, ARG:0) || IS_MOTHER(MPLY:LOCAL, ARG:0))
			EXP:(ARG:0):近親相姦経験 ++
			SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_近親相姦したい ++
		ENDIF
	NEXT
ENDIF

;継続分
;獣姦経験(MEQUIP)
FOR LOCAL:0, 0, MEQUIP_NUM
	IF MEQUIP:(LOCAL:0) >= 0 && MEQUIP:(LOCAL:0) != SELECTCOM
		;対象のがプレイヤーになっているMEQUIPに関して、ターゲットに動物がいたら獣姦経験を加算
		IF IS_MPLY_EQUIP(ARG:0, LOCAL:0)
			FOR LOCAL:1, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
				LOCAL:2 = MEQUIP_TARGET:(LOCAL:0):(LOCAL:1)
				IF FLAG:ウフフフラグ && IS_ANIMAL(LOCAL:2)
					EXP:(ARG:0):獣姦経験 ++
					SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_獣と交わりたい ++
				ENDIF
				IF FLAG:ウフフフラグ && (HAS_SAME_FATHER(ARG:0, LOCAL:2) || HAS_SAME_MOTHER(ARG:0, LOCAL:2) || IS_FATHER(ARG:0, LOCAL:2) || IS_MOTHER(ARG:0, LOCAL:2) || IS_FATHER(LOCAL:2, ARG:0) || IS_MOTHER(LOCAL:2, ARG:0))
					EXP:(ARG:0):近親相姦経験 ++
					SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_近親相姦したい ++
				ENDIF
				IF IS_SAMESEX(LOCAL:2, ARG:0)
					IF IS_MALE(ARG:0, 1)
						EXP:(ARG:0):ＢＬ経験値 += 1
					ELSE
						EXP:(ARG:0):レズ経験値 += 1
					ENDIF
					SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_同性と交わりたい ++
				ENDIF
			NEXT

			;上記のターゲットとプレイヤーが逆のバージョン
		ELSEIF IS_MTAR_EQUIP(ARG:0, LOCAL:0)
			FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
				LOCAL:2 = MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1)
				IF FLAG:ウフフフラグ && IS_ANIMAL(LOCAL:2)
					EXP:(ARG:0):獣姦経験 ++
					SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_獣と交わりたい ++
				ENDIF
				IF FLAG:ウフフフラグ && (HAS_SAME_FATHER(ARG:0, LOCAL:2) || HAS_SAME_MOTHER(ARG:0, LOCAL:2) || IS_FATHER(ARG:0, LOCAL:2) || IS_MOTHER(ARG:0, LOCAL:2) || IS_FATHER(LOCAL:2, ARG:0) || IS_MOTHER(LOCAL:2, ARG:0))
					EXP:(ARG:0):近親相姦経験 ++
					SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_近親相姦したい ++
				ENDIF
				IF IS_SAMESEX(LOCAL:2, ARG:0)
					IF IS_MALE(ARG:0, 1)
						EXP:(ARG:0):ＢＬ経験値 += 1
					ELSE
						EXP:(ARG:0):レズ経験値 += 1
					ENDIF
					SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_同性と交わりたい ++
				ENDIF
			NEXT
		ENDIF
	ENDIF
NEXT

;●レズ・ＢＬ経験
IF TFLAG:レズ・ＢＬ経験基準値 > 0
	IF IS_MTAR(ARG:0)
		FOR LOCAL:0, 0, MPLY_NUM
			IF IS_SAMESEX(MPLY:(LOCAL:0), ARG:0) && MPLY:(LOCAL:0) != ARG:0
				IF IS_MALE(ARG:0, 1)
					EXP:(ARG:0):ＢＬ経験値 += TFLAG:レズ・ＢＬ経験基準値
				ELSE
					EXP:(ARG:0):レズ経験値 += TFLAG:レズ・ＢＬ経験基準値
				ENDIF
				SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_同性と交わりたい ++
			ENDIF
		NEXT
	ELSEIF IS_MPLY(ARG:0)
		FOR LOCAL:0, 0, MTAR_NUM
			IF IS_SAMESEX(MTAR:(LOCAL:0), ARG:0) && MTAR:(LOCAL:0) != ARG:0
				IF IS_MALE(ARG:0, 1)
					EXP:(ARG:0):ＢＬ経験値 += TFLAG:レズ・ＢＬ経験基準値
				ELSE
					EXP:(ARG:0):レズ経験値 += TFLAG:レズ・ＢＬ経験基準値
				ENDIF
				SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_同性と交わりたい ++
			ENDIF
		NEXT
	ENDIF
ENDIF

IF TFLAG:売春フラグ && TCVAR:(ARG:0):奉仕者フラグ == 1
	SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_春を売りたい ++
ELSEIF FLAG:調教モード == 調教_捕虜調教 && FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
	SEXUAL_PREFERENCE_EXP:(ARG:0):性的嗜好_調教されたい ++
ENDIF

;●奉仕経験値
;奉仕経験値を得られるコマンドのフラグ
IF TCVAR:(ARG:0):奉仕経験取得可能
	LOCAL:0 = CUP_SENSE(ARG:0)
	LOCAL:1 = 0
	IF LOCAL:0 >= 12000
		LOCAL:1 = 16
		IF CUP:(ARG:0):怒主 > 0
			TIMES CUP:(ARG:0):怒主, 0.40
		ENDIF
	ELSEIF LOCAL:0 >= 8000
		LOCAL:1 = 12
		IF CUP:(ARG:0):怒主 > 0
			TIMES CUP:(ARG:0):怒主, 0.50
		ENDIF
	ELSEIF LOCAL:0 >= 5000
		LOCAL:1 = 8
		IF CUP:(ARG:0):怒主 > 0
			TIMES CUP:(ARG:0):怒主, 0.60
		ENDIF
	ELSEIF LOCAL:0 >= 3000
		LOCAL:1 = 4
		IF CUP:(ARG:0):怒主 > 0
			TIMES CUP:(ARG:0):怒主, 0.70
		ENDIF
	ELSEIF LOCAL:0 >= 1000
		LOCAL:1 = 2
		IF CUP:(ARG:0):怒主 > 0
			TIMES CUP:(ARG:0):怒主, 0.80
		ENDIF
	ELSEIF LOCAL:0 >= 300
		LOCAL:1 = 1
		IF CUP:(ARG:0):怒主 > 0
			TIMES CUP:(ARG:0):怒主, 0.90
		ENDIF
	ENDIF
	CALL CALC_ABLUP_EXP20(ARG:0)
	LOCAL:1 = MIN(LOCAL:1, RESULT * 2)

	EXP:(ARG:0):奉仕経験値 += LOCAL:1
ENDIF

;●苦痛快楽経験
LOCAL:0 = CUP_SENSE(ARG:0)
LOCAL:1 = 0
IF LOCAL:0 >= 3000 && SOURCE:(ARG:0):苦痛 >= 2000
	LOCAL:1 = 16
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.40
	ENDIF
ELSEIF LOCAL:0 >= 2500 && SOURCE:(ARG:0):苦痛 >= 1500
	LOCAL:1 = 12
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.50
	ENDIF
ELSEIF LOCAL:0 >= 1500 && SOURCE:(ARG:0):苦痛 >= 1000
	LOCAL:1 = 8
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.60
	ENDIF
ELSEIF LOCAL:0 >= 1000 && SOURCE:(ARG:0):苦痛 >= 500
	LOCAL:1 = 4
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.70
	ENDIF
ELSEIF LOCAL:0 >= 600 && SOURCE:(ARG:0):苦痛 >= 300
	LOCAL:1 = 2
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.80
	ENDIF
ELSEIF LOCAL:0 >= 300 && SOURCE:(ARG:0):苦痛 >= 100
	LOCAL:1 = 1
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.90
	ENDIF
ENDIF
EXP:(ARG:0):苦痛快楽経験 += LOCAL:1

;●露出快楽経験
LOCAL:0 = CUP_SENSE(ARG:0)
LOCAL:1 = 0
IF LOCAL:0 >= 10000 && SOURCE:(ARG:0):露出保存 >= 2000
	LOCAL:1 = 16
ELSEIF LOCAL:0 >= 6000 && SOURCE:(ARG:0):露出保存 >= 1500
	LOCAL:1 = 12
ELSEIF LOCAL:0 >= 3000 && SOURCE:(ARG:0):露出保存 >= 1000
	LOCAL:1 = 8
ELSEIF LOCAL:0 >= 1500 && SOURCE:(ARG:0):露出保存 >= 600
	LOCAL:1 = 4
ELSEIF LOCAL:0 >= 600 && SOURCE:(ARG:0):露出保存 >= 300
	LOCAL:1 = 2
ELSEIF LOCAL:0 >= 300 && SOURCE:(ARG:0):露出保存 >= 100
	LOCAL:1 = 1
ENDIF
EXP:(ARG:0):露出経験値 += LOCAL:1

;●トラウマ経験の取得
LOCAL:0 = CUP:(ARG:0):怖主
IF LOCAL:0 >= 10000
	EXP:(ARG:0):トラウマ経験 += 16
ELSEIF LOCAL:0 >= 5000
	EXP:(ARG:0):トラウマ経験 += 8
ELSEIF LOCAL:0 >= 3000
	EXP:(ARG:0):トラウマ経験 += 4
ELSEIF LOCAL:0 >= 1500
	EXP:(ARG:0):トラウマ経験 += 2
ELSEIF LOCAL:0 >= 500
	EXP:(ARG:0):トラウマ経験 += 1
ENDIF

;-------------------------------------------------
;性癖設定に応じたソースの追加
;-------------------------------------------------
@ADD_SOURCE_TENDENCY(ARG:0)
;今回実行したコマンドの処理
IF IS_MPLY(ARG:0)
	SELECTCASE COM_TENDENCY:(ARG:0):SELECTCOM
		CASE 1
			SOURCE:(ARG:0):中毒充足 += 200
		CASE 2
			SOURCE:(ARG:0):中毒充足 += 500
		CASE 3
			SOURCE:(ARG:0):中毒充足 += 1000
	ENDSELECT
ELSEIF IS_MTAR(ARG:0)
	SELECTCASE COM_TENDENCY:(ARG:0):(SELECTCOM + 1000)
		CASE 1
			SOURCE:(ARG:0):中毒充足 += 200
		CASE 2
			SOURCE:(ARG:0):中毒充足 += 500
		CASE 3
			SOURCE:(ARG:0):中毒充足 += 1000
	ENDSELECT
ELSE
	SELECTCASE COM_TENDENCY:(ARG:0):(SELECTCOM + 2000)
		CASE 1
			SOURCE:(ARG:0):中毒充足 += 100
		CASE 2
			SOURCE:(ARG:0):中毒充足 += 250
		CASE 3
			SOURCE:(ARG:0):中毒充足 += 500
	ENDSELECT
ENDIF

;EQUIP関係の処理
FOR LOCAL:0, 0, MAX_MEQUIP
	IF MEQUIP:(LOCAL:0) >= 0
		LOCAL:5 = 2
		FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
			IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == ARG:0
				LOCAL:5 = 0
				BREAK
			ENDIF
		NEXT
		IF LOCAL:5 == 2
			FOR LOCAL:1, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
				IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:1) == ARG:0
					LOCAL:5 = 1
					BREAK
				ENDIF
			NEXT
		ENDIF
		IF SELECTCOM >= 0 && SELECTCOM <= 299
			IF LOCAL:5 == 0
				SELECTCASE COM_TENDENCY:(ARG:0):SELECTCOM
					CASE 1
						SOURCE:(ARG:0):中毒充足 += 100
					CASE 2
						SOURCE:(ARG:0):中毒充足 += 250
					CASE 3
						SOURCE:(ARG:0):中毒充足 += 500
				ENDSELECT
			ELSEIF LOCAL:5 == 1
				SELECTCASE COM_TENDENCY:(ARG:0):(SELECTCOM + 1000)
					CASE 1
						SOURCE:(ARG:0):中毒充足 += 100
					CASE 2
						SOURCE:(ARG:0):中毒充足 += 250
					CASE 3
						SOURCE:(ARG:0):中毒充足 += 500
				ENDSELECT
			ELSE

				SELECTCASE COM_TENDENCY:(ARG:0):(SELECTCOM + 2000)
					CASE 1
						SOURCE:(ARG:0):中毒充足 += 50
					CASE 2
						SOURCE:(ARG:0):中毒充足 += 125
					CASE 3
						SOURCE:(ARG:0):中毒充足 += 250
				ENDSELECT
			ENDIF
		ENDIF
	ENDIF
NEXT


code:
;SOURCE_CHECKで使用する関数(TALENT系)

;-------------------------------------------------
;素質などによるパラメータ上昇の補正(快楽系)
;-------------------------------------------------
@UP_TALENT_CHECK1(ARG:0)
IF TALENT:(ARG:0):自制心 && !GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫乱)
	IF !IS_FALLEN(ARG:0)
		TIMES CUP:(ARG:0):快Ｃ, 0.75
		TIMES CUP:(ARG:0):快Ｖ, 0.70
		TIMES CUP:(ARG:0):快Ａ, 0.80
		TIMES CUP:(ARG:0):快Ｂ, 0.60
		TIMES CUP:(ARG:0):快Ｍ, 0.80
		TIMES CUP:(ARG:0):快Ｕ, 0.80
	ENDIF
ENDIF

;機嫌の影響
SELECTCASE TOSTR_EMOTION(ARG:0)
	CASE "幸"
		TIMES CUP:(ARG:0):快Ｃ, 1.30
		TIMES CUP:(ARG:0):快Ｖ, 1.30
		TIMES CUP:(ARG:0):快Ａ, 1.30
		TIMES CUP:(ARG:0):快Ｂ, 1.30
		TIMES CUP:(ARG:0):快Ｍ, 1.30
		TIMES CUP:(ARG:0):快Ｕ, 1.30
	CASE "悦"
		TIMES CUP:(ARG:0):快Ｃ, 1.20
		TIMES CUP:(ARG:0):快Ｖ, 1.20
		TIMES CUP:(ARG:0):快Ａ, 1.20
		TIMES CUP:(ARG:0):快Ｂ, 1.20
		TIMES CUP:(ARG:0):快Ｍ, 1.20
		TIMES CUP:(ARG:0):快Ｕ, 1.20
	CASE "良"
		TIMES CUP:(ARG:0):快Ｃ, 1.10
		TIMES CUP:(ARG:0):快Ｖ, 1.10
		TIMES CUP:(ARG:0):快Ａ, 1.10
		TIMES CUP:(ARG:0):快Ｂ, 1.10
		TIMES CUP:(ARG:0):快Ｍ, 1.10
		TIMES CUP:(ARG:0):快Ｕ, 1.10
	CASE "恨"
	CASE "怒"
	CASE "憤"
	CASE "鬱"
		TIMES CUP:(ARG:0):快Ｃ, 0.60
		TIMES CUP:(ARG:0):快Ｖ, 0.60
		TIMES CUP:(ARG:0):快Ａ, 0.60
		TIMES CUP:(ARG:0):快Ｂ, 0.60
		TIMES CUP:(ARG:0):快Ｍ, 0.60
		TIMES CUP:(ARG:0):快Ｕ, 0.60
	CASE "悲"
		TIMES CUP:(ARG:0):快Ｃ, 0.75
		TIMES CUP:(ARG:0):快Ｖ, 0.75
		TIMES CUP:(ARG:0):快Ａ, 0.75
		TIMES CUP:(ARG:0):快Ｂ, 0.75
		TIMES CUP:(ARG:0):快Ｍ, 0.75
		TIMES CUP:(ARG:0):快Ｕ, 0.75
	CASE "憂"
		TIMES CUP:(ARG:0):快Ｃ, 0.80
		TIMES CUP:(ARG:0):快Ｖ, 0.80
		TIMES CUP:(ARG:0):快Ａ, 0.80
		TIMES CUP:(ARG:0):快Ｂ, 0.80
		TIMES CUP:(ARG:0):快Ｍ, 0.80
		TIMES CUP:(ARG:0):快Ｕ, 0.80
	CASE "狂"
	CASE "恐"
	CASE "怯"
	CASE "壊"
		TIMES CUP:(ARG:0):快Ｃ, 0.50
		TIMES CUP:(ARG:0):快Ｖ, 0.50
		TIMES CUP:(ARG:0):快Ａ, 0.50
		TIMES CUP:(ARG:0):快Ｂ, 0.50
		TIMES CUP:(ARG:0):快Ｍ, 0.50
		TIMES CUP:(ARG:0):快Ｕ, 0.50
	CASE "虚"
		TIMES CUP:(ARG:0):快Ｃ, 0.85
		TIMES CUP:(ARG:0):快Ｖ, 0.85
		TIMES CUP:(ARG:0):快Ａ, 0.85
		TIMES CUP:(ARG:0):快Ｂ, 0.85
		TIMES CUP:(ARG:0):快Ｍ, 0.85
		TIMES CUP:(ARG:0):快Ｕ, 0.85
ENDSELECT

;男性・男の娘
IF !HAS_VAGINA(ARG:0)
	TIMES CUP:(ARG:0):快Ａ, 1.20
ENDIF

;目隠し
IF IS_EQUIP_TARGET(ARG:0, 84)
	TIMES CUP:(ARG:0):快Ｃ, 1.10
	TIMES CUP:(ARG:0):快Ｖ, 1.10
	TIMES CUP:(ARG:0):快Ａ, 1.10
	TIMES CUP:(ARG:0):快Ｂ, 1.10
	TIMES CUP:(ARG:0):快Ｍ, 1.10
	TIMES CUP:(ARG:0):快Ｕ, 1.10
ENDIF

IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_浮気癖)
	IF ((IS_MPLY(MASTER) && IS_MTAR(ARG:0)) || (IS_MPLY(ARG:0) && IS_MTAR(MASTER)))
		TIMES CUP:(ARG:0):快Ｃ, 0.7
		TIMES CUP:(ARG:0):快Ｖ, 0.7
		TIMES CUP:(ARG:0):快Ａ, 0.7
		TIMES CUP:(ARG:0):快Ｂ, 0.7
		TIMES CUP:(ARG:0):快Ｍ, 0.7
		TIMES CUP:(ARG:0):快Ｕ, 0.7
	ELSE
		TIMES CUP:(ARG:0):快Ｃ, 1.15
		TIMES CUP:(ARG:0):快Ｖ, 1.15
		TIMES CUP:(ARG:0):快Ａ, 1.15
		TIMES CUP:(ARG:0):快Ｂ, 1.15
		TIMES CUP:(ARG:0):快Ｍ, 1.15
		TIMES CUP:(ARG:0):快Ｕ, 1.15
	ENDIF
ENDIF

;-------------------------------------------------
;素質などによるパラメータ上昇の補正(快楽系以外)
;-------------------------------------------------
@UP_TALENT_CHECK2(ARG:0)
;TRAINの外で欲情がリセットされないままこの関数が呼び出されたことでオーバーフローの可能性があった
;機嫌系を別関数に切り出してこっちから呼び出す

IF TALENT:(ARG:0):反抗的
	TIMES CUP:(ARG:0):欲情, 0.70
ENDIF

IF TALENT:(ARG:0):気丈
	TIMES CUP:(ARG:0):欲情, 0.8
ENDIF

IF TALENT:(ARG:0):大人しい
	TIMES CUP:(ARG:0):欲情, 0.8
ENDIF

IF TALENT:(ARG:0):無関心
	TIMES CUP:(ARG:0):欲情, 0.7
ENDIF

IF TALENT:(ARG:0):感情乏しい
	TIMES CUP:(ARG:0):欲情, 0.7
ENDIF

IF TALENT:(ARG:0):抑圧
	CUP:(ARG:0):欲情 = CUP:(ARG:0):欲情 * (125 - YOKUATSU_RATE(ARG:0)) / 125
ENDIF

IF TALENT:(ARG:0):解放
	TIMES CUP:(ARG:0):欲情, 1.5
ENDIF

IF TALENT:(ARG:0):孤高
	TIMES CUP:(ARG:0):欲情, 0.80
ENDIF

SIF TALENT:(ARG:0):快感に素直
	TIMES CUP:(ARG:0):欲情, 1.8
SIF TALENT:(ARG:0):快感の否定
	TIMES CUP:(ARG:0):欲情, 0.7

IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_浮気癖)
	IF ((IS_MPLY(MASTER) && IS_MTAR(ARG:0)) || (IS_MPLY(ARG:0) && IS_MTAR(MASTER)))
		TIMES CUP:(ARG:0):欲情, 0.8
	ELSE
		TIMES CUP:(ARG:0):欲情, 1.5
	ENDIF
ENDIF

;機嫌の影響
SELECTCASE TOSTR_EMOTION(ARG:0)
	CASE "幸"
		TIMES CUP:(ARG:0):欲情, 1.15
	CASE "悦"
		TIMES CUP:(ARG:0):欲情, 1.10
	CASE "良"
		TIMES CUP:(ARG:0):欲情, 1.05
	CASE "恨"
	CASE "怒"
	CASE "憤"
	CASE "鬱"
		TIMES CUP:(ARG:0):欲情, 0.30
	CASE "悲"
		TIMES CUP:(ARG:0):欲情, 0.60
	CASE "憂"
		TIMES CUP:(ARG:0):欲情, 0.80
	CASE "狂"
	CASE "恐"
	CASE "怯"
	CASE "壊"
		TIMES CUP:(ARG:0):欲情, 0.20
	CASE "虚"
		TIMES CUP:(ARG:0):欲情, 0.60
ENDSELECT

;機嫌系を後から呼び出す
CALL UP_TALENT_CHECK3(ARG:0)

;素質などによるパラメータ上昇の補正(機嫌系)
;TRAINの外でCUPを安全に扱うために機嫌を隔離
@UP_TALENT_CHECK3(ARG:0)
;目隠し
IF IS_EQUIP_TARGET(ARG:0, 84)
	TIMES CUP:(ARG:0):怖主, 1.20
ENDIF

IF TALENT:(ARG:0):臆病
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.75
	ENDIF
	IF CUP:(ARG:0):哀主 > 0
		TIMES CUP:(ARG:0):哀主, 1.2
	ENDIF
	IF CUP:(ARG:0):怖主 > 0
		TIMES CUP:(ARG:0):怖主, 1.3
	ENDIF
ENDIF

IF TALENT:(ARG:0):反抗的
	IF CUP:(ARG:0):怒主 > 0
		IF TALENT:(ARG:0):子供人質
			TIMES CUP:(ARG:0):怒主, 1.2
		ELSE
			TIMES CUP:(ARG:0):怒主, 1.4
		ENDIF
	ENDIF
ENDIF

IF TALENT:(ARG:0):気丈
	IF CUP:(ARG:0):怒主 > 0
		IF TALENT:(ARG:0):子供人質
			TIMES CUP:(ARG:0):怒主, 1.1
		ELSE
			TIMES CUP:(ARG:0):怒主, 1.2
		ENDIF
	ENDIF
	IF CUP:(ARG:0):哀主 > 0
		TIMES CUP:(ARG:0):哀主, 0.7
	ENDIF
	IF CUP:(ARG:0):怖主 > 0
		TIMES CUP:(ARG:0):怖主, 0.7
	ENDIF
ENDIF

IF TALENT:(ARG:0):素直
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.8
	ENDIF
ENDIF

IF TALENT:(ARG:0):大人しい
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.6
	ENDIF
	IF CUP:(ARG:0):哀主 > 0
		TIMES CUP:(ARG:0):哀主, 1.5
	ENDIF
ENDIF

IF TALENT:(ARG:0):プライド高い
	IF CUP:(ARG:0):怒主 > 0
		IF TALENT:(ARG:0):子供人質
			TIMES CUP:(ARG:0):怒主, 1.2
		ELSE
			TIMES CUP:(ARG:0):怒主, 1.4
		ENDIF
	ENDIF
	IF CUP:(ARG:0):怖主 > 0
		TIMES CUP:(ARG:0):怖主, 0.8
	ENDIF
ENDIF

IF TALENT:(ARG:0):プライド低い
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.8
	ENDIF
	IF CUP:(ARG:0):怖主 > 0
		TIMES CUP:(ARG:0):怖主, 1.2
	ENDIF
ENDIF

IF TALENT:(ARG:0):無関心
	TIMES CUP:(ARG:0):怒主, 0.7
	TIMES CUP:(ARG:0):哀主, 0.7
	TIMES CUP:(ARG:0):怖主, 0.7
ENDIF

IF TALENT:(ARG:0):感情乏しい
	TIMES CUP:(ARG:0):怒主, 0.5
	TIMES CUP:(ARG:0):哀主, 0.5
	TIMES CUP:(ARG:0):怖主, 0.5
ENDIF

IF TALENT:(ARG:0):好奇心
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.9
	ENDIF
	IF CUP:(ARG:0):怖主 > 0
		TIMES CUP:(ARG:0):怖主, 0.9
	ENDIF
ENDIF

IF TALENT:(ARG:0):保守的
	IF CUP:(ARG:0):怒主 > 0
		IF TALENT:(ARG:0):子供人質
			TIMES CUP:(ARG:0):怒主, 1.1
		ELSE
			TIMES CUP:(ARG:0):怒主, 1.2
		ENDIF
	ENDIF
	IF CUP:(ARG:0):怖主 > 0
		TIMES CUP:(ARG:0):怖主, 1.20
	ENDIF
ENDIF

IF TALENT:(ARG:0):楽観的
	IF CUP:(ARG:0):哀主 > 0
		TIMES CUP:(ARG:0):哀主, 0.6
	ENDIF
	IF CUP:(ARG:0):怖主 > 0
		TIMES CUP:(ARG:0):怖主, 0.80
	ENDIF
ENDIF

IF TALENT:(ARG:0):悲観的
	IF CUP:(ARG:0):哀主 > 0
		TIMES CUP:(ARG:0):哀主, 1.5
	ENDIF
	IF CUP:(ARG:0):怖主 > 0
		TIMES CUP:(ARG:0):怖主, 1.1
	ENDIF
ENDIF

IF TALENT:(ARG:0):抑圧
	CUP:(ARG:0):怒主 = CUP:(ARG:0):怒主 * (150 - YOKUATSU_RATE(ARG:0)) / 150
	CUP:(ARG:0):哀主 = CUP:(ARG:0):哀主 * (150 - YOKUATSU_RATE(ARG:0)) / 150
	CUP:(ARG:0):怖主 = CUP:(ARG:0):怖主 * (150 - YOKUATSU_RATE(ARG:0)) / 150
ENDIF

IF TALENT:(ARG:0):解放
	TIMES CUP:(ARG:0):怒主, 1.15
	TIMES CUP:(ARG:0):哀主, 1.15
	TIMES CUP:(ARG:0):怖主, 0.9
ENDIF

IF TALENT:(ARG:0):孤高
	TIMES CUP:(ARG:0):哀主, 0.75
	TIMES CUP:(ARG:0):怖主, 0.5
	IF CUP:(ARG:0):怒主 > 0
		IF TALENT:(ARG:0):子供人質
			TIMES CUP:(ARG:0):怒主, 1.15
		ELSE
			TIMES CUP:(ARG:0):怒主, 1.2
		ENDIF
	ENDIF
ENDIF

IF TALENT:(ARG:0):Ｓ気質
	IF CUP:(ARG:0):怒主 > 0
		IF TALENT:(ARG:0):子供人質
			TIMES CUP:(ARG:0):怒主, 1.1
		ELSE
			TIMES CUP:(ARG:0):怒主, 1.15
		ENDIF
	ENDIF
	IF CUP:(ARG:0):怖主 > 0
		TIMES CUP:(ARG:0):怖主, 0.80
	ENDIF
ENDIF

IF TALENT:(ARG:0):小悪魔
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.90
	ENDIF
	IF CUP:(ARG:0):哀主 > 0
		TIMES CUP:(ARG:0):哀主, 0.60
	ENDIF
	IF CUP:(ARG:0):怖主 > 0
		TIMES CUP:(ARG:0):怖主, 0.60
	ENDIF
ENDIF

IF (IS_MPLY(ARG:0) && IS_MTAR(MASTER)) || (IS_MTAR(ARG:0) && IS_MPLY(MASTER))
	IF TALENT:(ARG:0):親愛
		CUP:(ARG:0):怒主 = SET_RATE_EMOTION(CUP:(ARG:0):怒主,  60, 200)
		CUP:(ARG:0):哀主 = SET_RATE_EMOTION(CUP:(ARG:0):哀主,  60, 200)
		CUP:(ARG:0):怖主 = SET_RATE_EMOTION(CUP:(ARG:0):怖主,  60, 200)
	ELSEIF TALENT:(ARG:0):恋慕 || TALENT:(ARG:0):親友
		CUP:(ARG:0):怒主 = SET_RATE_EMOTION(CUP:(ARG:0):怒主,  80, 150)
		CUP:(ARG:0):哀主 = SET_RATE_EMOTION(CUP:(ARG:0):哀主,  80, 150)
		CUP:(ARG:0):怖主 = SET_RATE_EMOTION(CUP:(ARG:0):怖主,  80, 150)
	ELSEIF TALENT:(ARG:0):恋人
		CUP:(ARG:0):怒主 = SET_RATE_EMOTION(CUP:(ARG:0):怒主,  80, 120)
		CUP:(ARG:0):哀主 = SET_RATE_EMOTION(CUP:(ARG:0):哀主,  80, 120)
		CUP:(ARG:0):怖主 = SET_RATE_EMOTION(CUP:(ARG:0):怖主,  80, 120)
	ENDIF

	IF TALENT:(ARG:0):隷属
		CUP:(ARG:0):怒主 = SET_RATE_EMOTION(CUP:(ARG:0):怒主,  10, 300)
		CUP:(ARG:0):哀主 = SET_RATE_EMOTION(CUP:(ARG:0):哀主,  20, 250)
		CUP:(ARG:0):怖主 = SET_RATE_EMOTION(CUP:(ARG:0):怖主, 150,  50)
	ELSEIF TALENT:(ARG:0):服従
		CUP:(ARG:0):怒主 = SET_RATE_EMOTION(CUP:(ARG:0):怒主,  50, 200)
		CUP:(ARG:0):哀主 = SET_RATE_EMOTION(CUP:(ARG:0):哀主,  50, 200)
		CUP:(ARG:0):怖主 = SET_RATE_EMOTION(CUP:(ARG:0):怖主, 125,  75)
	ENDIF

	IF TALENT:(ARG:0):所有者
		CUP:(ARG:0):怒主 = SET_RATE_EMOTION(CUP:(ARG:0):怒主,  60, 200)
		CUP:(ARG:0):哀主 = SET_RATE_EMOTION(CUP:(ARG:0):哀主,  60, 200)
		CUP:(ARG:0):怖主 = SET_RATE_EMOTION(CUP:(ARG:0):怖主,  60, 200)
	ELSEIF TALENT:(ARG:0):主人
		CUP:(ARG:0):怒主 = SET_RATE_EMOTION(CUP:(ARG:0):怒主,  80, 150)
		CUP:(ARG:0):哀主 = SET_RATE_EMOTION(CUP:(ARG:0):哀主,  80, 150)
		CUP:(ARG:0):怖主 = SET_RATE_EMOTION(CUP:(ARG:0):怖主,  80, 150)
	ENDIF

	IF TALENT:(ARG:0):烙印
		CUP:(ARG:0):怒主 = SET_RATE_EMOTION(CUP:(ARG:0):怒主,  75, 125)
		CUP:(ARG:0):怖主 = SET_RATE_EMOTION(CUP:(ARG:0):怖主, 110,  75)
	ENDIF
ENDIF

;Ａ快楽による補正
LOCAL:0 = CUP:(ARG:0):快Ａ
IF LOCAL:0 >= 12000
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.70
	ENDIF
ELSEIF LOCAL:0 >= 8000
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.75
	ENDIF
ELSEIF LOCAL:0 >= 5000
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.80
	ENDIF
ELSEIF LOCAL:0 >= 3000
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.85
	ENDIF
ELSEIF LOCAL:0 >= 2000
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.90
	ENDIF
ELSEIF LOCAL:0 >= 1000
	IF CUP:(ARG:0):怒主 > 0
		TIMES CUP:(ARG:0):怒主, 0.95
	ENDIF
ENDIF

;機嫌の影響
SELECTCASE TOSTR_EMOTION(ARG:0)
	CASE "幸"
	CASE "悦"
	CASE "良"
	CASE "恨"
	CASE "怒"
	CASE "憤"
	CASE "鬱"
	CASE "悲"
	CASE "憂"
	CASE "狂"
	CASE "恐"
	CASE "怯"
	CASE "壊"
		CUP:(ARG:0):怒主 = 0
		CUP:(ARG:0):哀主 = 0
		CUP:(ARG:0):怖主 = 0
	CASE "虚"
ENDSELECT

;精神力の影響
IF MAXBASE:(ARG:0):精神力 > 0
	LOCAL:0 = BASE:(ARG:0):精神力 * 100 / MAXBASE:(ARG:0):精神力
ELSE
	LOCAL:0 = 100
ENDIF
IF LOCAL:0 < 50
	TIMES CUP:(ARG:0):怒主, 0.10
	TIMES CUP:(ARG:0):哀主, 0.10
	TIMES CUP:(ARG:0):怖主, 1.7
ELSEIF LOCAL:0 < 75
	TIMES CUP:(ARG:0):怒主, 0.50
	TIMES CUP:(ARG:0):哀主, 0.50
	TIMES CUP:(ARG:0):怖主, 1.25
ENDIF

;酔いの影響
IF PALAM:(ARG:0):酔い >= 150
	CUP:(ARG:0):怒主 = MIN(CUP:(ARG:0):怒主 * (15000 - PALAM:(ARG:0):酔い) / 15000, CUP:(ARG:0):怒主) - PALAM:(ARG:0):酔い / 150
	CUP:(ARG:0):哀主 = MIN(CUP:(ARG:0):哀主 * (15000 - PALAM:(ARG:0):酔い) / 15000, CUP:(ARG:0):哀主) - PALAM:(ARG:0):酔い / 150
	CUP:(ARG:0):怖主 = MIN(CUP:(ARG:0):怖主 * (15000 - PALAM:(ARG:0):酔い) / 15000, CUP:(ARG:0):怖主) - PALAM:(ARG:0):酔い / 150
ENDIF

IF TALENT:(ARG:0):抑圧
	;全ての感情が自動的に0に近づく
	CUP:(ARG:0):怒主 -= SIGN(PALAM:(ARG:0):怒主 + CUP:(ARG:0):怒主) * MIN(100, ABS(PALAM:(ARG:0):怒主 + CUP:(ARG:0):怒主))
	CUP:(ARG:0):哀主 -= SIGN(PALAM:(ARG:0):哀主 + CUP:(ARG:0):哀主) * MIN(100, ABS(PALAM:(ARG:0):哀主 + CUP:(ARG:0):哀主))
	CUP:(ARG:0):怖主 -= SIGN(PALAM:(ARG:0):怖主 + CUP:(ARG:0):怖主) * MIN(100, ABS(PALAM:(ARG:0):怖主 + CUP:(ARG:0):怖主))
	CUP:(ARG:0):怒外 -= SIGN(PALAM:(ARG:0):怒外 + CUP:(ARG:0):怒外) * MIN(100, ABS(PALAM:(ARG:0):怒外 + CUP:(ARG:0):怒外))
	CUP:(ARG:0):哀外 -= SIGN(PALAM:(ARG:0):哀外 + CUP:(ARG:0):哀外) * MIN(100, ABS(PALAM:(ARG:0):哀外 + CUP:(ARG:0):哀外))
	CUP:(ARG:0):怖外 -= SIGN(PALAM:(ARG:0):怖外 + CUP:(ARG:0):怖外) * MIN(100, ABS(PALAM:(ARG:0):怖外 + CUP:(ARG:0):怖外))
ENDIF

;ツンデレ＆恋慕＆非恋人＆「会いに行く」＆非ウフフ
IF TALENT:(ARG:0):ツンデレ && !IS_LOVER(ARG:0) && !IS_SLAVE(ARG:0) && FLAG:調教モード == 0 && !FLAG:ウフフフラグ
	;怒・哀の感情が下がらない
	CUP:(ARG:0):怒主 = MAX(CUP:(ARG:0):怒主, 0)
	CUP:(ARG:0):哀主 = MAX(CUP:(ARG:0):哀主, 0)
ENDIF
;-------------------------------------------------
;素質<抑圧>による諸々の補正率を返す関数 ARG:0は対象のキャラ番号
;-------------------------------------------------
@YOKUATSU_RATE(ARG:0)
#FUNCTION
IF CFLAG:(ARG:0):依存度 < 10
	RETURNF 70
ELSEIF CFLAG:(ARG:0):依存度 < 50
	RETURNF 60
ELSEIF CFLAG:(ARG:0):依存度 < 100
	RETURNF 50
ELSEIF CFLAG:(ARG:0):依存度 < 200
	RETURNF 40
ELSEIF CFLAG:(ARG:0):依存度 < 300
	RETURNF 30
ELSEIF CFLAG:(ARG:0):依存度 < 500
	RETURNF 20
ELSEIF CFLAG:(ARG:0):依存度 < 800
	RETURNF 10
ELSEIF CFLAG:(ARG:0):依存度 < 1500
	RETURNF 5
ELSEIF CFLAG:(ARG:0):依存度 < 3000
	RETURNF 1
ENDIF
RETURNF 1

;-------------------------------------------------
;素質<孤高>による諸々の補正率を返す関数 ARG:0は対象のキャラ番号
;-------------------------------------------------
@KOKOU_RATE(ARG:0)
#FUNCTION
IF TALENT:(ARG:0):子供人質
	IF CFLAG:(ARG:0):依存度 < 10
		RETURNF 49
	ELSEIF CFLAG:(ARG:0):依存度 < 50
		RETURNF 42
	ELSEIF CFLAG:(ARG:0):依存度 < 100
		RETURNF 35
	ELSEIF CFLAG:(ARG:0):依存度 < 200
		RETURNF 28
	ELSEIF CFLAG:(ARG:0):依存度 < 300
		RETURNF 21
	ELSEIF CFLAG:(ARG:0):依存度 < 500
		RETURNF 14
	ELSEIF CFLAG:(ARG:0):依存度 < 800
		RETURNF 7
	ELSEIF CFLAG:(ARG:0):依存度 < 1500
		RETURNF 4
	ELSEIF CFLAG:(ARG:0):依存度 < 3000
		RETURNF 1
	ENDIF
ELSE
	IF CFLAG:(ARG:0):依存度 < 10
		RETURNF 70
	ELSEIF CFLAG:(ARG:0):依存度 < 50
		RETURNF 60
	ELSEIF CFLAG:(ARG:0):依存度 < 100
		RETURNF 50
	ELSEIF CFLAG:(ARG:0):依存度 < 200
		RETURNF 40
	ELSEIF CFLAG:(ARG:0):依存度 < 300
		RETURNF 30
	ELSEIF CFLAG:(ARG:0):依存度 < 500
		RETURNF 20
	ELSEIF CFLAG:(ARG:0):依存度 < 800
		RETURNF 10
	ELSEIF CFLAG:(ARG:0):依存度 < 1500
		RETURNF 5
	ELSEIF CFLAG:(ARG:0):依存度 < 3000
		RETURNF 1
	ENDIF
ENDIF
RETURNF 1

;-------------------------------------------------
;値ARG:0に、正なら(ARG:1)/100を、負なら(ARG:2)/100を掛ける関数
;-------------------------------------------------
@SET_RATE_EMOTION(ARG:0, ARG:1, ARG:2)
#FUNCTION
IF ARG:0 >= 0
	RETURNF ARG:0 * ARG:1 / 100
ENDIF
RETURNF -(ABS(ARG:0) * ARG:2 / 100)