code:
;妊娠関連のイベント

;---------------------------------------------------------
;ARG:0番のキャラの妊娠チェック
;---------------------------------------------------------
@CHECK_PREGNANT(ARG:0)
;性別的に膣がない場合は特殊な薬を使わないと妊娠しない
SIF !HAS_VAGINA(ARG:0)
	RETURN

;中出し量の計算　妊娠確率に使用。
LOCAL:2 = 0
FOR LOCAL:0, 0, WOMB_RECORD_MAX
	SIF WOMB_SPERM_ID:(ARG:0):LOCAL == 0
		CONTINUE
	IF IS_ANIMAL_SPERM(WOMB_SPERM_ID:(ARG:0):LOCAL)
		LOCAL:2 += WOMB_SPERM_AMOUNT:(ARG:0):LOCAL / 5
	ELSE
		LOCAL:2 += WOMB_SPERM_AMOUNT:(ARG:0):LOCAL
	ENDIF
NEXT
;モブ妊娠判定のためコメントアウト
;SIF IS_SP_CHARA(ARG:0)
;RETURN

SIF CFLAG:(ARG:0):行動不能状態 == 行動不能_子供
	RETURN

;既に妊娠状態なら判定スキップ
IF CFLAG:(ARG:0):妊娠期間 >= 1
	RETURN
ENDIF

SIF TALENT:(ARG:0):妊娠不能
	RETURN

SIF CFLAG:(ARG:0):避妊薬残ターン
	RETURN

;コンフィグによる妊娠抑制があれば戻る
IF CONFIG:1 == 1
	RETURN
ENDIF

;膣内射精量が0以下なら妊娠判定に入らない
SIF LOCAL:2 <= 0
	RETURN

;中出し量が1以上の場合

;妊娠判定に使う乱数の基本最大値
LOCAL:5 = 3000

;孕みたがり所持だと極めて孕みやすい
IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_孕みたがり)
	IF CFLAG:(ARG:0):排卵誘発剤
		LOCAL:5 /= 10
	ELSE
		LOCAL:5 /= 5
	ENDIF
	;獣変化中は確率上昇
ELSEIF TALENT:(ARG:0):動物耳 || TALENT:(ARG:0):しっぽ
	;排卵誘発剤使用中は確率上昇
	IF CFLAG:(ARG:0):排卵誘発剤
		LOCAL:5 /= 20
	ELSE
		LOCAL:5 /= 8
	ENDIF
	;排卵誘発剤使用中は確率上昇
ELSEIF CFLAG:(ARG:0):排卵誘発剤
	LOCAL:5 /= 6
ENDIF

;危険日の場合確率増加
SIF IS_OVULATION(ARG:0)
	LOCAL:5 /= 6

;良質母胎の場合確率増加
SIF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_良質母胎)
	LOCAL:5 /= 3

DEBUGPRINTFORML ◆%ANAME(ARG)%の妊娠判定
;★デバッグ用(100%妊娠)
[IF_DEBUG]
IF FLCONFIG:絶対妊娠
	DEBUGPRINTL > デバッグ: 絶対妊娠フラグ[ON]
	LOCAL:5 = 1
ENDIF
[ENDIF]

DEBUGPRINTFORML > 妊娠判定: RAND:{LOCAL:5} < {SQRT(LOCAL:2 * 100 + 300)}
IF RAND:(LOCAL:5) < SQRT(LOCAL:2 * 100 + 300)
	DEBUGPRINTL >> 妊娠○
	;誰の子供かを判定
	LOCAL:3 = RAND:(LOCAL:2)
	FOR LOCAL:0, 0, WOMB_RECORD_MAX
		SIF WOMB_SPERM_ID:(ARG:0):(LOCAL:0) == 0
			CONTINUE
		LOCAL:3 -= WOMB_SPERM_AMOUNT:(ARG:0):(LOCAL:0)
		IF LOCAL:3 <= 0
			;妊娠期間を1に設定
			;出来た子供の父親を種付け履歴から予測して記録する
			;いろんな人から種を受けてたらだれが親だかわからなくなったりする処理をする
			CALL RECORD_FATHER_FROM_CREAMPIE_HISTORY(ARG:0)
			;妊娠発覚
			CALL DETECT_PREGNANCY(ARG:0)
			BREAK
		ENDIF
	NEXT
ELSE
	DEBUGPRINTL >> 妊娠×
ENDIF

;---------------------------------------------------------
;妊娠関係のメッセージを表示するかどうか ARG:0=妊娠したキャラの番号
;※直前にTMP_CREATE_RELATION_MAPの呼び出しが必要
;---------------------------------------------------------
@IS_PREGNANT_MSG(ARG:0)
#FUNCTION
;観戦モードでなく、捕虜ないし放浪中の場合、主人公以外は分からない
SIF (CFLAG:MASTER:捕虜先 != 0 || CFLAG:MASTER:所属 == 0) && !FLAG:観戦モード && ARG:0 != MASTER
	RETURNF 0
RETURNF 1

;---------------------------------------------------------
;ターンエンド時に行う妊娠出産関連の処理
;---------------------------------------------------------
@TURNEND_PREGNANT_CHECK
#DIM 仕官させないフラグ

;母親のチェックをする
FOR LOCAL:0, 0, CHARANUM
	;死亡したキャラ、未登場のキャラは処理しない
	IF CFLAG:(LOCAL:0):特殊状態 == 特殊状態_死亡
		CONTINUE
	ELSEIF !IS_APPEAR(LOCAL:0)
		CONTINUE
	ENDIF
	CALL TURNEND_PREGNANT_CHECK_MOTHER(LOCAL:0)
NEXT

;子供の処理をする
FOR LOCAL:0, 0, CHARANUM
	;死亡したキャラは処理しない
	IF CFLAG:(LOCAL:0):特殊状態 == 特殊状態_死亡
		CONTINUE
	ENDIF
	CALL TURNEND_PREGNANT_CHECK_CHILD(LOCAL:0)
NEXT

;---------------------------------------------------------
;ターンエンド時に行う妊娠出産関連の処理の母親系の処理
;---------------------------------------------------------
@TURNEND_PREGNANT_CHECK_MOTHER(ARG:0)
#DIM DYNAMIC 出産必要期間 = 14
#DIM DYNAMIC 臨月開始期間 = 10
IF (GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_良質母胎))
	出産必要期間 = 出産必要期間 / 3 * 2
	臨月開始期間 = 臨月開始期間 / 3 * 2
ENDIF

;出産後
IF CFLAG:(ARG:0):育児期間 >= 1
	;出産後期間を進める
	CFLAG:(ARG:0):育児期間 ++

	;育児対象のキャラ番号を取得
	LOCAL:5 = ID_TO_CHARA(CFLAG:(ARG:0):育児対象)

	;育児中かつ母親が主人公以外で所属が同じ、捕虜でないなら自動で育てる
	; SIF LOCAL:5 >= 0 && ARG:0 != MASTER && CFLAG:(ARG:0):所属 == CFLAG:(LOCAL:5):所属 && !CFLAG:(LOCAL:5):捕虜先 && !CFLAG:(LOCAL:5):行動済み && !CFLAG:(ARG:0):捕虜先
	; 	CALL MOTHER_AUTO_REARING(ARG:0, LOCAL:5, CFLAG:(ARG:0):育児期間)

	;出産後期間が8に達した
	IF CFLAG:(ARG:0):育児期間 >= 出産必要期間
		;出産後の各種初期化処理
		CALL RESET_MOTHER_STATE(ARG:0, 1)
	ENDIF
ENDIF

;妊娠していない
IF TALENT:(ARG:0):妊娠 == 0
	CALL UPDATE_CREAMPIE_HISTORY(ARG:0)
	CALL CHECK_PREGNANT(ARG:0)
	;妊娠中
ELSE
	CALL STOMACH_SPERM_UPDATE(ARG:0)
	CALL ANUS_SPERM_UPDATE(ARG:0)
	;妊娠7期目
	IF CFLAG:(ARG:0):妊娠期間 >= 出産必要期間
		;7期で出産する
		CALL BIRTH_CHILD(ARG:0)
		RETURN 1
		;妊娠5期目
	ELSEIF CFLAG:(ARG:0):妊娠期間 >= 臨月開始期間 && CFLAG:(ARG:0):行動不能状態 != 行動不能_臨月
		;4期たったら臨月となり通常の活動ができなくなる
		IF IS_PREGNANT_MSG(ARG:0)
			CALL KOJO_EVENT(ARG:0, 41)
			SIF CFLAG:(ARG:0):行動不能状態 == 行動不能_育児
				CALL KOJO_EVENT(ID_TO_CHARA(CFLAG:(ARG:0):育児対象), 46)
			CALL SINGLE_EMPTY_LINE()
		ENDIF

		;臨月状態に設定
		CFLAG:(ARG:0):行動不能状態 = 行動不能_臨月
	ENDIF
	;妊娠期間を進める
	CFLAG:(ARG:0):妊娠期間 ++
ENDIF

;---------------------------------------------------------
;妊娠が発覚したときの処理をまとめる関数
;---------------------------------------------------------
@DETECT_PREGNANCY(ARG:0)
#DIM BUSTSIZE
TALENT:(ARG:0):妊娠 = 1
CFLAG:(ARG:0):妊娠期間 = 1
CALL CLEAR_CREAMPIE_HISTORY(ARG:0)

IF IS_PREGNANT_MSG(ARG:0)
	IF ARG:0 == MASTER
		PRINTFORML %ANAME(ARG:0)%は体の変調を感じた…
	ELSE
		PRINTFORML %ANAME(ARG:0)%の様子がおかしい…
	ENDIF
	PRINTFORM どうやら%ANAME(ARG:0)%は
	IF GET_SPERM_NAME(CFLAG:(ARG:0):子の父親) != "不明"
		CALL COLOR_PRINT(GET_SPERM_NAME(CFLAG:(ARG:0):子の父親), カラー_注意, "の")
	ELSE
		CALL COLOR_PRINT("名も知れぬ誰か", カラー_注意, "の")
	ENDIF
	PRINTFORML 子供を身篭った様だ
	SETCOLOR カラー_注意
	PRINTFORMW %ANAME(ARG:0)%は[妊娠]しました
	RESETCOLOR
ENDIF

;体調が変化して母乳が出だす
IF !TALENT:(ARG:0):母乳体質
	IF IS_PREGNANT_MSG(ARG:0)
		SETCOLOR カラー_注意
		PRINTFORMW %ANAME(ARG:0)%の胸から母乳が出るようになりました
		RESETCOLOR
	ENDIF
	TALENT:(ARG:0):母乳体質 = 1
	;妊娠による一時的な母乳体質のフラグ
	CFLAG:(ARG:0):一時的母乳体質 = 1
ENDIF

;女性が妊娠したときすでに妊娠で胸が大きくなっている場合、あるいはもう大きくならない場合を除き胸が大きくなる
IF IS_FEMALE(ARG:0) && GET_BUSTSIZE(ARG:0) != 4 && CFLAG:(ARG:0):妊娠時バストサイズ増加 == 0
	BUSTSIZE = GET_BUSTSIZE(ARG:0)
	CFLAG:(ARG:0):妊娠時バストサイズ増加 = 1
	IF IS_PREGNANT_MSG(ARG:0) && BUSTSIZE < 4
		SETCOLOR カラー_注意
		PRINTFORMW 妊娠により%ANAME(ARG:0)%の胸のサイズが一段階大きくなりました
		RESETCOLOR
	ENDIF
	IF BUSTSIZE != 4
		IF !CONFIG:44
			CALL SET_BUSTSIZE(ARG:0, BUSTSIZE + 1)
		ELSE
			TALENT:(ARG:0):バストサイズ ++
		ENDIF
	ENDIF
ENDIF

IF IS_PREGNANT_MSG(ARG:0)
	CALL KOJO_EVENT(ARG:0, 40)
	;育児中に妊娠したら子供がそれにリアクションをするイベントを挿し込む
	SIF CFLAG:(ARG:0):行動不能状態 == 行動不能_育児 && ID_TO_CHARA(CFLAG:(ARG:0):育児対象) > 0 && CFLAG:(ID_TO_CHARA(CFLAG:(ARG:0):育児対象)):所属 == CFLAG:(ARG:0):所属
		CALL KOJO_EVENT(ID_TO_CHARA(CFLAG:(ARG:0):育児対象), 45)
ENDIF

;あなた以外は状況によって崩壊する場合がある
IF ARG:0 != MASTER
	;父親不明で出産がLv2以下なら崩壊値が増加
	IF CFLAG:(ARG:0):子の父親 == 0 && ABL:(ARG:0):出産 <= 2
		IF CFLAG:(ARG:0):捕虜先 == CFLAG:MASTER:所属
			CFLAG:(ARG:0):崩壊 += 1200
			CALL TALENT_CHECK(ARG:0)
		ELSE
			CFLAG:(ARG:0):崩壊 += 600
			CALL TALENT_CHECK(ARG:0)
		ENDIF
		;父親が主人公、出産がLv2以下、捕虜調教、[恋慕][服従][親友][恋人][烙印]なしなら崩壊値が増加
	ELSEIF CFLAG:(ARG:0):子の父親 == GET_ID(MASTER) && ABL:(ARG:0):出産 <= 2 && CFLAG:(ARG:0):捕虜先 >= 1 && CFLAG:(ARG:0):捕虜先 == CFLAG:MASTER:所属
		IF !TALENT:(ARG:0):恋慕 && !TALENT:(ARG:0):服従 && !TALENT:(ARG:0):親友 && !TALENT:(ARG:0):恋人 && !TALENT:(ARG:0):烙印
			CFLAG:(ARG:0):崩壊 += 1200
			CALL TALENT_CHECK(ARG:0)
		ENDIF
	ENDIF
ENDIF

EXP:(ARG:0):妊娠経験 ++

SIF ID_TO_CHARA(CFLAG:(ARG:0):子の父親) != -1
	EXP:(ID_TO_CHARA(CFLAG:(ARG:0):子の父親) ):孕ませ経験 ++

SIF IS_PREGNANT_MSG(ARG:0)
	CALL SINGLE_EMPTY_LINE()

;---------------------------------------------------------
;中だし履歴から父親を取得して記録する関数
;父親候補が複数いたり子供と母親で記録の方法が別なことを吸収する
;---------------------------------------------------------
@RECORD_FATHER_FROM_CREAMPIE_HISTORY(ARG:0)
#DIM FATHER_CANDIDATE
;父親候補のIDを取得する
;複数候補がいる場合0が帰ってくることに留意
FATHER_CANDIDATE = GET_FATHER_CANDIDATE_FROM_CREAMPIE_HISTORY(ARG:0)

;子供の父親の記録と母親の父親の記録でルールが違うのを吸収する処理
;子供の父親には個人名だけが入るのに対し、母親の相手は種族、グループなどでも父親として記録される
;複数の父親候補がいる場合
IF FATHER_CANDIDATE == 0
	;父親不明にする
	CFLAG:(ARG:0):子の父親 = 0
	;父親の記録をつける(父親不明)
	CALL REFRESH_PREGNANT_RECORD(ARG:0, 0)
	;父親候補が特定のキャラ
ELSE
	;父親のIDを記録
	CFLAG:(ARG:0):子の父親 = FATHER_CANDIDATE
	;父親の記録をつける
	CALL REFRESH_PREGNANT_RECORD(ARG:0, FATHER_CANDIDATE)
	;特殊精液なら、里子フラグをたてる
	;SIF FATHER_CANDIDATE < 0
	;	CFLAG:(ARG:0):里子フラグ = 1
ENDIF

;---------------------------------------------------------
;子供を出産する処理を行う関数
;---------------------------------------------------------
@BIRTH_CHILD(ARG:0)
#DIM 仕官させないフラグ
#DIM 子供

DEBUGPRINTFORML ◆%ANAME(ARG)%が出産
IF IS_CONFISCATE_CHILD(ARG:0)
	DEBUGPRINTL > 子供没収
	SETCOLOR カラー_注意
	PRINTFORMW そろそろ%ANAME(ARG:0)%の子供が産まれそうです
	RESETCOLOR
	PRINTFORMW %ANAME(ARG:0)%は無事に出産を終えました
	PRINTFORMW 生まれた子供は没収されてしまったようだ……
	仕官させないフラグ = 1
ELSE
	;普通の時の処理は長いから切りだし
	;仕官させない場合は-1、そうでないなら子供の番号が帰る
	CALL NORMAL_BIRTH_CHILD(ARG:0)
	IF RESULT == -1
		仕官させないフラグ = 1
	ELSE
		仕官させないフラグ = 0
		子供 = RESULT
	ENDIF
ENDIF
;出産時の状態に合わせた共通処理
IF 仕官させないフラグ
	;仕官させないとき
	;仕官させないときは妊娠休暇終了
	CFLAG:(ARG:0):行動不能状態 = 0
	;育児をしないなら休暇終了
	;バストサイズと母乳体質を戻す
	CFLAG:(ARG:0):行動不能状態 = 0
	CFLAG:(ARG:0):妊娠期間 = 0
	CFLAG:(ARG:0):子の父親 = 0
	TALENT:(ARG:0):妊娠 = 0
	CALL MOTHER_SHRINK_BUSTSIZE(ARG:0)
	CALL MOTHER_STOP_MILKING(ARG:0)
ELSE
	;士官させるとき
	;捕虜でないなら育児状態に設定
	IF CFLAG:(ARG:0):捕虜先 == 0
		;育児をするなら育児休暇
		CFLAG:(ARG:0):行動不能状態 = 行動不能_育児
		CFLAG:(ARG:0):育児対象 = GET_ID(子供)
	ELSE
		;捕虜の場合育児できない
		CFLAG:(ARG:0):行動不能状態 = 0
		CFLAG:(ARG:0):妊娠期間 = 0
		CFLAG:(ARG:0):子の父親 = 0
		TALENT:(ARG:0):妊娠 = 0
		CALL MOTHER_SHRINK_BUSTSIZE(ARG:0)
		CALL MOTHER_STOP_MILKING(ARG:0)
	ENDIF
	;子供を被育児状態に設定
	CFLAG:子供:行動不能状態 = 行動不能_子供
ENDIF

;∨締まりがゆるくなる
;拡張経験付かないのかって？　ホルモンやら何やらの効果でおにくの柔軟性上がってただけだからノーカンノーカン
LOCAL = MAX(TALENT:(ARG:0):Ｖ締まり / 5, 1)
CALL TIGHTNESS_DECREASE_V(ARG:0, (RAND:LOCAL + RAND:LOCAL + RAND:LOCAL) / 3)

EXP:(ARG:0):出産経験 += 1
EXP:(ARG:0):出産経験値 += 1
CALL TRAIN_AUTO_ABLUP(ARG:0, 1)

SIF !仕官させないフラグ
	CFLAG:(ARG:0):育児期間 = 1

;性知識がLv0ならLv1になる
IF ABL:(ARG:0):性知識 == 0
	ABL:(ARG:0):性知識 = 1
	IF IS_PREGNANT_MSG(ARG:0)
		PRINTFORML %ANAME(ARG:0)%は出産を通して最低限の性知識を身につけたようです
		SETCOLOR カラー_オレンジ
		PRINTFORML %ANAME(ARG:0)%の性知識が上昇しました(Lv{ABL:(ARG:0):性知識})
		RESETCOLOR
	ENDIF
ENDIF
;妊娠関係のフラグをクリア
CFLAG:(ARG:0):妊娠期間 = 0
CFLAG:(ARG:0):子の父親 = 0
TALENT:(ARG:0):妊娠 = 0

SIF IS_PREGNANT_MSG(ARG:0)
	CALL SINGLE_EMPTY_LINE()

CALL CLEAR_CREAMPIE_HISTORY(ARG:0)

;---------------------------------------------------------
;通常の子供出産処理を行う
;子供の生成に関係することや子供が仕官するかに影響するものだけをここに書き、そうでないならこの関数の親の方で共通部分として処理することを意図して分けた
;RESULT CASE
;-1:子供仕官しない
;else:仕官する
;---------------------------------------------------------
@NORMAL_BIRTH_CHILD(MOTHER)
#DIM MOTHER
#DIM CHILD
#DIM FATHER

;里子フラグが立っていたら、里子に出したことにする
IF IS_FOSTER_CHILD(MOTHER)
	DEBUGPRINTL > 子供を里子に出した
	IF IS_PREGNANT_MSG(MOTHER)
		SETCOLOR カラー_注意
		PRINTFORMW %ANAME(MOTHER)%が産気づいたようです
		PRINTFORMW 生まれた子供を、%ANAME(MOTHER)%は里子に出しました……
		CALL SINGLE_EMPTY_LINE()
		RESETCOLOR
		RETURN -1
	ELSE
		RETURN -1
	ENDIF
ENDIF

;子供を生成
CALL CREATE_CHILD(MOTHER)
CHILD = RESULT

IF RESULT == -1
	DEBUGPRINTL > 子供を里子に出した (キャラ生成失敗)
	IF IS_PREGNANT_MSG(MOTHER)
		SETCOLOR カラー_注意
		PRINTFORMW %ANAME(MOTHER)%が産気づいたようです
		PRINTFORMW 生まれた子供を、%ANAME(MOTHER)%は里子に出しました……
		RESETCOLOR
		CALL SINGLE_EMPTY_LINE()
		RETURN -1
	ELSE
		RETURN -1
	ENDIF
ENDIF
DEBUGPRINTL > 子供を里子に出さない

;捕虜の場合
IF CFLAG:MOTHER:捕虜先 >= 1
	;子の所属を母親が囚われている勢力にする
	CALL CHANGE_COUNTRY(CHILD, CFLAG:MOTHER:捕虜先, 1)
ELSE
	;子の所属を母親と同じにする
	CALL CHANGE_COUNTRY(CHILD, CFLAG:MOTHER:所属, 1)
ENDIF

IF IS_PREGNANT_MSG(MOTHER)
	;父親のキャラ番号を取得
	FATHER = ID_TO_CHARA(CFLAG:MOTHER:子の父親)

	IF MOTHER == MASTER
		SETCOLOR カラー_注意
		PRINTFORMW そろそろ子供が産まれそうです
		RESETCOLOR

		;父親が同一勢力にいれば出産に立ち会う際の口上を表示
		IF FATHER >= 0 && CFLAG:FATHER:捕虜先 == 0 && CFLAG:FATHER:所属 >= 1 && CFLAG:FATHER:特殊状態 == 0 && ((CFLAG:MASTER:捕虜先 == 0 && CFLAG:FATHER:所属 == CFLAG:MASTER:所属) || (CFLAG:MASTER:捕虜先 >= 1 && CFLAG:MASTER:捕虜先 == CFLAG:FATHER:所属))
			CALL KOJO_EVENT(FATHER, 43)
		ELSE
			PRINTFORMW %ANAME(MOTHER)%は無事に出産を終えました
		ENDIF
	ELSE
		SETCOLOR カラー_注意
		PRINTFORMW %ANAME(MOTHER)%が産気づいたようです
		RESETCOLOR

		;口上の表示
		CALL KOJO_EVENT(MOTHER, 42)
	ENDIF

	CALL VIRGIN_COMMON(MOTHER, "出産")

	IF IS_MALE(CHILD)
		PRINTFORMW 元気な男の子です
	ELSE
		PRINTFORMW 元気な女の子です
	ENDIF
	IF !FLAG:観戦モード && (CFLAG:MASTER:所属 == CFLAG:MOTHER:所属 || CFLAG:MASTER:所属 == CFLAG:MOTHER:捕虜先)
		IF CONFIG:16 == 1
			GOTO AUTO_RECRUIT
		ELSEIF CONFIG:16 == 2
			GOTO AUTO_CANCEL
		ENDIF
		;観戦でない
		FLAG:能力表示モード = 0
		CALL SHOW_INFO_WITH_UI(CHILD, 0, 0)
		CALL SINGLE_DRAWLINE
		PRINTFORMW この子をメンバーに加え、冒険者の一員として活躍できるように教育しますか？
		CALL ASK_MULTI("する", "する（今後自動的にメンバーに追加する）", "しない", "しない（今後自動的に無視する）")
		IF GROUPMATCH(RESULT, 2, 3)
			SIF RESULT == 3
				CONFIG:16 = 2
			$AUTO_CANCEL
			PRINTFORMW 教育するのはやめておきます
			CALL DELETE_CHARA(CHILD)
			;仕官させないフラグ
			RETURN -1
		ELSE
			SIF RESULT == 1
				CONFIG:16 = 1
			$AUTO_RECRUIT
			PRINTFORML 自分で名前を付けますか？
			CALL ASK_YN("手動で命名", "ランダムに命名")
			IF RESULT == 0
				;手動での命名処理
				CALL INPUT_CHILD_NAME(CHILD)
				RETURN CHILD
			ENDIF
		ENDIF
	ENDIF
	;ランダムに命名
	CALL RANDOM_CHILD_NAMING(CHILD)
	PRINTFORMW この子の名は「%CSTR:(CHILD):1%」\@ CSTR:(CHILD):2 != "" ? 、字は「%CSTR:(CHILD):2%」 # \@に決まったようです
	CALL SINGLE_EMPTY_LINE()
	;メッセージ表示を行わない場合、ランダムに名前を設定
ELSE
	;ランダムに命名
	CALL RANDOM_CHILD_NAMING(CHILD)
ENDIF
RETURN CHILD

;---------------------------------------------------------
;ARG:0が、産んだ子供を没収されるか
;---------------------------------------------------------
@IS_CONFISCATE_CHILD(ARG:0)
#FUNCTION

SIF FLAG:観戦モード
	RETURNF 1

;主人公の勢力の捕虜になっている場合、没収されない
SIF CFLAG:(ARG:0):捕虜先 && CFLAG:(ARG:0):捕虜先 == CFLAG:MASTER:所属
	RETURNF 0

;特殊勢力所属で、かつその特殊勢力が主人公のところでなければ、没収される
SIF IS_SP_COUNTRY(CFLAG:(ARG:0):所属) && CFLAG:(ARG:0):所属 != CFLAG:MASTER:所属
	RETURNF 1

;捕虜で、かつその勢力が主人公の勢力でない場合、没収される
SIF CFLAG:(ARG:0):捕虜先 && CFLAG:(ARG:0):捕虜先 != CFLAG:MASTER:所属
	RETURNF 1

RETURNF 0

;---------------------------------------------------------
;ARG:0が、産んだ子供を里子に出すか。
;---------------------------------------------------------
@IS_FOSTER_CHILD(ARG:0)
#FUNCTION
#DIM 里子に出す

DEBUGPRINTL ◆里子に出す判定
;出す/出さないが確定でない場合は3/4の確率で里子に出す
里子に出す = RAND:4
[IF_DEBUG]
IF FLCONFIG:里子に出さない
	DEBUGPRINTL ◆デバッグ: 里子に出さない[ON]
	DEBUGPRINTFORML > 確率で里子に出す判定 {里子に出す} → 0
	里子に出す = 0
ENDIF
[ENDIF]

;あなたが母親で放浪中場合は里子に出す
;・現状のFLだとあなたが放浪しないのでデッドコード
IF ARG:0 == MASTER && !IS_COUNTRY(CFLAG:MASTER:所属)
	DEBUGPRINTL > 里子に出す (あなたが母親で放浪中)
	RETURNF 1
ENDIF

;母親があなたと同じ所属の場合は里子に出さない
IF CFLAG:MASTER:所属 == CFLAG:(ARG:0):所属
	DEBUGPRINTL > 里子に出さない (母親があなたと同じ所属)
	RETURNF 0
ENDIF
;SIF CFLAG:(ARG:0):子の父親 < 0 && GROUPMATCH(GET_SPERM_NAME(CFLAG:(ARG:0):子の父親), "", "不明")
;	RETURNF 1

;観戦モード中は確率で里子に出す
;・現状のFLだとあなたが観戦モードがないのでデッドコード
IF FLAG:観戦モード && 里子に出す
	DEBUGPRINTL > 確率で里子に出す (観戦モード中) [{里子に出す}]
	RETURNF 1
ENDIF

;あなたと母親の所属が違う場合
IF CFLAG:MASTER:所属 != CFLAG:(ARG:0):所属
	;父親があなたで陥落済なら里子に出さない
	IF CFLAG:(ARG:0):子の父親 == GET_ID(MASTER) && (IS_FALLEN(ARG:0))
		DEBUGPRINTL > 里子に出さない (陥落済の母親とあなたの子供)
		RETURNF 0
		;それ以外の場合は確率で里子に出す
	ELSE
		DEBUGPRINTL > 確率で里子に出す (その他1) [{里子に出す}]
		RETURNF 里子に出す
	ENDIF
ENDIF

;それ以外の場合は確率で里子に出す
;・デッドコード？
;・あなたと母親が同じ所属の場合、違う所属の場合のそれぞれで完結しているためココまで到達しないはず
DEBUGPRINTL > 確率で里子に出す (その他2) [{里子に出す}]
RETURNF 里子に出す

;---------------------------------------------------------
;ターンエンド時の妊娠出産関係の処理の子供用
;---------------------------------------------------------
@TURNEND_PREGNANT_CHECK_CHILD(ARG:0)

;被育児状態の子供
IF CFLAG:(ARG:0):行動不能状態 == 行動不能_子供
	;一部能力の初期値を現在の値で上書き
	;CALL SET_INI_ABL(ARG:0, "身体")
	;CALL SET_INI_ABL(ARG:0, "知識")
	;CALL SET_INI_ABL(ARG:0, "社交")
	;CALL SET_INI_ABL(ARG:0, "歌唱")
	;CALL SET_INI_ABL(ARG:0, "料理")

	;子供が十分に成長した
	IF CFLAG:(ARG:0):子の成長度 == 6
		;主人公勢力の士官ならメッセージを表示
		IF CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属
			SETCOLOR カラー_注意
			PRINTFORML まだ幼いながらも%ANAME(ARG:0)%は一人で行動できる程度にまで成長しました
			PRINTFORMW %ANAME(ARG:0)%が我が国の士官(？)として加わりました
			CALL SINGLE_EMPTY_LINE
			RESETCOLOR
		ENDIF

		;精神力の設定
		CALL SET_MIND_POWER(ARG:0)
		CALL SET_BODYSIZE(ARG:0)

		;INI_MAXBASE:(ARG:0):2 = MAXBASE:(ARG:0):2
		;被育児状態を解除
		CFLAG:(ARG:0):行動不能状態 = 0
	ENDIF
ENDIF

;[幼児]があり成長度が15以上の子供を成長させる
IF TALENT:(ARG:0):幼児 && CFLAG:(ARG:0):子の成長度 >= 15 && IS_CHILD(ARG:0)
	IF IS_PREGNANT_MSG(ARG:0)
		SETCOLOR カラー_注意
		PRINTFORML 幼かった%ANAME(ARG:0)%は今や立派に成長しました
		PRINTFORMW %ANAME(ARG:0)%は[幼児]を失い、一部の素質が変化しました
		CALL SINGLE_EMPTY_LINE
		RESETCOLOR
	ENDIF
	CALL SET_BUSTSIZE(ARG:0, TALENT:(ARG:0):成長後バスト)
	CALL SET_HIPSIZE(ARG:0, TALENT:(ARG:0):成長後ヒップ)

	IF LINEAGE_TO_FIXED(ARG:0) < 0 && ID_TO_CHARA(CFLAG:(ARG:0):父親) < 0 && ID_TO_CHARA(CFLAG:(ARG:0):母親) < 0
		SELECTCASE RAND:100
			CASE 0 TO 60
				TALENT:(ARG:0):体格 = 体格_普通
			CASE 61 TO 70
				TALENT:(ARG:0):体格 = 体格_小柄
			CASE 71 TO 80
				TALENT:(ARG:0):体格 = 体格_長身
			CASE 81 TO 87
				TALENT:(ARG:0):体格 = 体格_子供
			CASE 88 TO 94
				TALENT:(ARG:0):体格 = 体格_大柄
			CASEELSE
				TALENT:(ARG:0):体格 = 体格_巨大
		ENDSELECT

		SELECTCASE RAND:100
			CASE 0 TO 60
				TALENT:(ARG:0):体型 = 体型_普通
			CASE 61 TO 70
				TALENT:(ARG:0):体型 = 体型_スレンダー
			CASE 71 TO 80
				TALENT:(ARG:0):体型 = 体型_グラマー
			CASE 81 TO 86
				TALENT:(ARG:0):体型 = 体型_豊満
			CASE 87 TO 93
				TALENT:(ARG:0):体型 = 体型_細身
			CASE 94 TO 97
				TALENT:(ARG:0):体型 = 体型_肥満
			CASEELSE
				TALENT:(ARG:0):体型 = 体型_痩せすぎ
		ENDSELECT
	ELSE
		;RAND:31 - 15 is just adding a value between -1.5 and 1.5. Could be RAND:(RANGE*2 + 1) - RANGE.
		TALENT:(ARG:0):体格 = LIMIT(ROUND_NEAREST(HEIGHT_GENE(ARG:0) + RAND:31 - 15, 10), -2, 3)
		TALENT:(ARG:0):体型 = LIMIT(ROUND_NEAREST(WEIGHT_GENE(ARG:0) + RAND:31 - 15, 10), -3, 3)
	ENDIF

	TALENT:(ARG:0):幼稚 = TALENT:(ARG:0):成長後幼稚
	TALENT:(ARG:0):幼児 = 0
	CALL SET_BODYSIZE(ARG:0)
	;ランダムキャラの設定を流用して陰毛を設定
	;あくまで暫定的な措置・完全ランダムで遺伝はしない
	CALL SET_INMOU_RANDOM(ARG:0)
	CALL SET_ARMPIT_RANDOM(ARG:0)
ENDIF

;---------------------------------------------------------
;CALCULATE HEIGHT AND WEIGHT GENETICS
;10* larger than usable to simulate decimal
;---------------------------------------------------------
;This is to compensate for the engine's tendency to round numbers toward zero.
@ROUND_NEAREST(ARG:0 = 0, ARG:1 = 0)
#FUNCTION
IF ARG:0 == 0
	RETURNF ARG:0
ELSEIF ARG:1 == 1 || ARG:1 == 0
	RETURNF ARG:0
ELSEIF ARG:0 > 0
	RETURNF (ARG:0 + (ARG:1 / 2)) / ARG:1
ELSE
	RETURNF (ARG:0 - (ARG:1 / 2)) / ARG:1
ENDIF

@HEIGHT_GENE(ARG:0)
#FUNCTION
LOCAL:0 = LINEAGE_TO_FIXED(ARG:0)
LOCAL:1 = ID_TO_CHARA(CFLAG:(ARG:0):父親)
LOCAL:2 = ID_TO_CHARA(CFLAG:(ARG:0):母親)
SIF LOCAL:0 < 0 && LOCAL:1 < 0 && LOCAL:2 < 0
	RETURNF 0
LOCAL:3 = 0
LOCAL:4 = 0
IF LOCAL:0 >= 0
	LOCAL:3 += TALENT:(LOCAL:0):体格
	LOCAL:4 ++
ENDIF
IF LOCAL:1 >= 0
	LOCAL:3 += TALENT:(LOCAL:1):体格
	LOCAL:4 ++
ENDIF
IF LOCAL:2 >= 0
	LOCAL:3 += TALENT:(LOCAL:2):体格
	LOCAL:4 ++
ENDIF

RETURNF 10 * LOCAL:3 / MAX(LOCAL:4, 1)

@WEIGHT_GENE(ARG:0)
#FUNCTION
LOCAL:0 = LINEAGE_TO_FIXED(ARG:0)
LOCAL:1 = ID_TO_CHARA(CFLAG:(ARG:0):父親)
LOCAL:2 = ID_TO_CHARA(CFLAG:(ARG:0):母親)
SIF LOCAL:0 < 0 && LOCAL:1 < 0 && LOCAL:2 < 0
	RETURNF 0
LOCAL:3 = 0
LOCAL:4 = 0
IF LOCAL:0 >= 0
	LOCAL:3 += TALENT:(LOCAL:0):体型
	LOCAL:4 ++
ENDIF
IF LOCAL:1 >= 0
	LOCAL:3 += TALENT:(LOCAL:1):体型
	LOCAL:4 ++
ENDIF
IF LOCAL:2 >= 0
	LOCAL:3 += TALENT:(LOCAL:2):体型
	LOCAL:4 ++
ENDIF

RETURNF 10 * LOCAL:3 / MAX(LOCAL:4, 1)

;---------------------------------------------------------
;ターンエンド時に行う妊娠関連の処理(ハブ)
;---------------------------------------------------------
@TURNEND_PREGNANT_PHASE
CALL COLOR_LINE
PRINTFORML ◆　妊娠・出産報告
CALL COLOR_LINE
CALL TURNEND_PREGNANT_CHECK_SYOKUSYU
CALL TURNEND_PREGNANT_CHECK

;---------------------------------------------------------
;出産後の腹親の状態を元に戻す(育児解除、胸サイズ変更、母乳体質削除)
;ARG:0は腹親のキャラ番号、ARG:1は各種メッセージを表示するかどうかのフラグ
;---------------------------------------------------------
@RESET_MOTHER_STATE(ARG:0, ARG:1 = 1)
CALL MOTHER_END_REARING(ARG:0, ARG:1)
CALL MOTHER_SHRINK_BUSTSIZE(ARG:0, ARG:1)
CALL MOTHER_STOP_MILKING(ARG:0, ARG:1)

SIF IS_PREGNANT_MSG(ARG:0)
	CALL SINGLE_EMPTY_LINE

;---------------------------------------------------------
;育児の終了処理
;---------------------------------------------------------
@MOTHER_END_REARING(ARG:0, ARG:1 = 1)
;育児対象のキャラ番号を取得
LOCAL:5 = ID_TO_CHARA(CFLAG:(ARG:0):育児対象)

;育児中
IF LOCAL:5 >= 0
	IF CFLAG:(ARG:0):行動不能状態 == 行動不能_臨月
		;例外状況として、子育て中に臨月になる場合がある　それ用の分岐
		IF ARG:1 && IS_PREGNANT_MSG(ARG:0)
			SETCOLOR カラー_注意
			PRINTFORMW %ANAME(ARG:0)%は膨らんだ腹を抱えながら前の子供の育児を終えました
			RESETCOLOR
		ENDIF
	ELSE
		IF ARG:1 && IS_PREGNANT_MSG(ARG:0)
			SETCOLOR カラー_注意
			PRINTFORMW %ANAME(ARG:0)%は育児を終えて復帰しました
			RESETCOLOR
		ENDIF
		;育児状態を解除
		CFLAG:(ARG:0):行動不能状態 = 0
	ENDIF
	CFLAG:(ARG:0):育児対象 = 0
	;子育てが終わると【子供人質】が解除
	IF TALENT:(ARG:0):子供人質 > 0
		SETCOLOR カラー_注意
		PRINTFORMW %ANAME(ARG:0)%は人質であった我が子の逞しく成長した姿に安堵し、%ANAME(MASTER)%に対する恐怖心を克服しました。
		RESETCOLOR
		TALENT:(ARG:0):子供人質 = 0
	ENDIF
	;育児期間のリセット
	CFLAG:(ARG:0):育児期間 = 0
ENDIF

;---------------------------------------------------------
;出産したが育てない場合、ないし育児終了時のバストサイズ戻す処理
;---------------------------------------------------------
@MOTHER_SHRINK_BUSTSIZE(ARG:0, ARG:1)
;育児対象のキャラ番号を取得
LOCAL:5 = ID_TO_CHARA(CFLAG:(ARG:0):育児対象)

;「育児終了時に妊娠している」「出産時に育児中である」場合を除いてバストサイズを戻す
IF !TALENT:(ARG:0):妊娠 && LOCAL:5 < 0 && CFLAG:(ARG:0):妊娠時バストサイズ増加
	IF ARG:1 && IS_PREGNANT_MSG(ARG:0)
		SETCOLOR カラー_注意
		PRINTFORMW 出産により大きくなっていた%ANAME(ARG:0)%の胸は元に戻りました
		RESETCOLOR
	ENDIF
	IF INRANGE(GET_BUSTSIZE(ARG:0), -1, 4)
		IF !CONFIG:44
			CALL SET_BUSTSIZE(ARG:0, GET_BUSTSIZE(ARG:0) - 1)
		ELSE
			TALENT:(ARG:0):バストサイズ --
		ENDIF
	ENDIF
	CFLAG:(ARG:0):妊娠時バストサイズ増加 = 0
ENDIF

;---------------------------------------------------------
;出産したが育てない場合、ないし育児終了時のバストサイズ戻す処理
;---------------------------------------------------------
@MOTHER_STOP_MILKING(ARG:0, ARG:1)
;育児対象のキャラ番号を取得
LOCAL:5 = ID_TO_CHARA(CFLAG:(ARG:0):育児対象)

;一時的に母乳体質になっていた場合(
IF CFLAG:(ARG:0):一時的母乳体質 && !TALENT:(ARG:0):妊娠 && LOCAL:5 < 0
	;胸の大きさに応じたABL:噴乳を持ってると母乳体質が永続化する
	IF ( GET_BUSTSIZE(ARG:0) < 0 && ABL:(ARG:0):噴乳 >= ランク閾値:ランク_その他:ランク_A ) || ( GET_BUSTSIZE(ARG:0) == 0 && ABL:(ARG:0):噴乳 >= ランク閾値:ランク_その他:ランク_B ) || ( GET_BUSTSIZE(ARG:0) > 0 && ABL:(ARG:0):噴乳 >= ランク閾値:ランク_その他:ランク_C )
		IF ARG:1 && IS_PREGNANT_MSG(ARG:0)
			SETCOLOR カラー_注意
			PRINTFORMW %ANAME(ARG:0)%は度重なる噴乳により、子育てが終わったにも係わらず母乳が止まらなくなりました
			RESETCOLOR
			CALL KOJO_EVENT(ARG:0, 99)
		ENDIF
	ELSE
		IF ARG:1 && IS_PREGNANT_MSG(ARG:0)
			SETCOLOR カラー_注意
			PRINTFORMW %ANAME(ARG:0)%の母乳は止まりました
			RESETCOLOR
		ENDIF
		TALENT:(ARG:0):母乳体質 = 0
	ENDIF
	;妊娠による一時的な母乳体質のフラグ
	CFLAG:(ARG:0):一時的母乳体質 = 0
ENDIF

;---------------------------------------------------------
;手動で子供の名前を設定する関数  ARG:0=子供のキャラ番号
;---------------------------------------------------------
@INPUT_CHILD_NAME(ARG:0)
#DIM FIRST_LINE
;父親、母親のキャラ番号を取得
LOCAL:5 = ID_TO_CHARA(CFLAG:(ARG:0):父親)
LOCAL:6 = ID_TO_CHARA(CFLAG:(ARG:0):母親)

;姓の初期設定
IF LOCAL:5 >= 0 && CSTR:(LOCAL:5):姓 != ""
	CSTR:(ARG:0):姓 = %CSTR:(LOCAL:5):姓%
	CSTR:(ARG:0):姓カナ = %CSTR:(LOCAL:5):姓カナ%
	SIF TALENT:(LOCAL:5):姓名逆転
		TALENT:(ARG:0):姓名逆転 = 1
ELSEIF LOCAL:6 >= 0 && CSTR:(LOCAL:6):姓 != ""
	CSTR:(ARG:0):姓 = %CSTR:(LOCAL:6):姓%
	CSTR:(ARG:0):姓カナ = %CSTR:(LOCAL:6):姓カナ%
	SIF TALENT:(LOCAL:6):姓名逆転
		TALENT:(ARG:0):姓名逆転 = 1
ENDIF
FIRST_LINE = LINECOUNT
$SHOW_LOOP

CALL SINGLE_DRAWLINE
PRINTFORML ★★★この子にどんな名前を付けますか？★★★
CALL SINGLE_DRAWLINE

;命名
PRINTFORM   姓:%CSTR:(ARG:0):姓, 10, LEFT%%CSTR:(ARG:0):姓カナ, 10, LEFT%
IF LOCAL:5 >= 0 && CSTR:(LOCAL:5):姓 != ""
	PRINTBUTTON "[父方]", 110
ELSE
	SETCOLOR カラー_選択不可
	PRINTPLAIN [父方]
	RESETCOLOR
ENDIF
IF LOCAL:6 >= 0 && CSTR:(LOCAL:6):姓 != ""
	PRINTBUTTON "[母方]", 111
ELSE
	SETCOLOR カラー_選択不可
	PRINTPLAIN [母方]
	RESETCOLOR
ENDIF
IF CSTR:(ARG:0):姓 != ""
	PRINTBUTTON "[消去]", 112
ENDIF
PRINTL
PRINTFORM   名:%CSTR:(ARG:0):名, 10, LEFT%%CSTR:(ARG:0):名カナ, 10, LEFT%
PRINTBUTTON "[入力]", 120
PRINTBUTTON "[ランダム(漢字)]", 121
PRINTBUTTON "[ランダム(カナ)]", 123
PRINTBUTTON "[ランダム(日本名)]", 124
IF CSTR:(ARG:0):名 != ""
	PRINTBUTTON "[消去]", 122
ENDIF
PRINTL
PRINTFORM   字:%CSTR:(ARG:0):字, 10, LEFT%%CSTR:(ARG:0):字カナ, 10, LEFT%
PRINTBUTTON "[入力]", 130
PRINTBUTTON "[ランダム]", 131
IF CSTR:(ARG:0):字 != ""
	PRINTBUTTON "[消去]", 132
ENDIF
PRINTL
PRINTFORM 愛称:%CSTR:(ARG:0):愛称, 10, LEFT%
PRINTBUTTON "[入力]", 140
IF CSTR:(ARG:0):愛称 != ""
	PRINTBUTTON "[消去]", 141
ENDIF
PRINTL
PRINTL
PRINTL ※名は必須です
IF CSTR:(ARG:0):名 == ""
	SETCOLOR カラー_選択不可
	PRINTPLAIN [決定]
	RESETCOLOR
ELSE
	PRINTBUTTON "[決定]", 999
ENDIF

;他のキャラとの重複チェック
LOCAL:1 = 0
FOR LOCAL:0, 0, CHARANUM
	IF LOCAL:0 != ARG:0 && CSTR:(ARG:0):姓 == CSTR:(LOCAL:0):姓 && CSTR:(ARG:0):名 == CSTR:(LOCAL:0):名
		LOCAL:1 = 1
		BREAK
	ENDIF
NEXT
IF LOCAL:1
	SETCOLOR 0xc41818
	PRINT   ◆同姓同名のキャラが存在します◆
	RESETCOLOR
ENDIF
PRINTL

REDRAW 0

$INPUT_LOOP
INPUT

IF RESULT == 110 && LOCAL:5 >= 0 && CSTR:(LOCAL:5):姓 != ""
	CSTR:(ARG:0):姓 = %CSTR:(LOCAL:5):姓%
	CSTR:(ARG:0):姓カナ = %CSTR:(LOCAL:5):姓カナ%
	TALENT:(ARG:0):姓名逆転 = 0
	SIF TALENT:(LOCAL:5):姓名逆転
		TALENT:(ARG:0):姓名逆転 = 1
	GOTO SHOW_LOOP

ELSEIF RESULT == 111 && LOCAL:6 >= 0 && CSTR:(LOCAL:6):姓 != ""
	CSTR:(ARG:0):姓 = %CSTR:(LOCAL:6):姓%
	CSTR:(ARG:0):姓カナ = %CSTR:(LOCAL:6):姓カナ%
	CLEARLINE LINECOUNT - FIRST_LINE
	TALENT:(ARG:0):姓名逆転 = 0
	SIF TALENT:(LOCAL:6):姓名逆転
		TALENT:(ARG:0):姓名逆転 = 1
	GOTO SHOW_LOOP

ELSEIF RESULT == 112
	CSTR:(ARG:0):姓 =
	CSTR:(ARG:0):姓カナ =
	CLEARLINE LINECOUNT - FIRST_LINE
	TALENT:(ARG:0):姓名逆転 = 0
	GOTO SHOW_LOOP

ELSEIF RESULT == 120
	PRINTL 設定する名を入力して下さい
	$INPUTS_LOOP3
	INPUTS
	IF RESULTS == ""
		CSTR:(ARG:0):名 =
		CSTR:(ARG:0):名カナ =
	ELSE
		CSTR:(ARG:0):名 = %RESULTS%
		PRINTL (必要な場合は)読みをカタカナで入力して下さい
		$INPUTS_LOOP3_1
		INPUTS
		IF CSTR:(ARG:0):名 == RESULTS
			CSTR:(ARG:0):名カナ =
		ELSE
			CSTR:(ARG:0):名カナ = %RESULTS%
		ENDIF
	ENDIF
	GOTO SHOW_LOOP

ELSEIF RESULT == 121
	LOCAL:0 = TARGET
	TARGET = ARG:0
	CALL SET_FIRST_NAME
	TARGET = LOCAL:0
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP

ELSEIF RESULT == 122
	CSTR:(ARG:0):名 =
	CSTR:(ARG:0):名カナ =
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP

ELSEIF RESULT == 123
	LOCAL:0 = TARGET
	TARGET = ARG:0
	IF IS_MALE(TARGET)
		CALL SET_FIRST_NAME_KM
	ELSE
		CALL SET_FIRST_NAME_KF
	ENDIF
	TARGET = LOCAL:0
	CLEARLINE 11
	GOTO SHOW_LOOP

ELSEIF RESULT == 124
	LOCAL:0 = TARGET
	TARGET = ARG:0
	IF IS_MALE(TARGET)
		CALL SET_FIRST_NAME_JM
	ELSE
		CALL SET_FIRST_NAME_JF
	ENDIF
	TARGET = LOCAL:0
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP

ELSEIF RESULT == 130
	PRINTL 設定する字を入力して下さい
	$INPUTS_LOOP4
	INPUTS
	IF RESULTS == ""
		CSTR:(ARG:0):字 =
		CSTR:(ARG:0):字カナ =
	ELSE
		CSTR:(ARG:0):字 = %RESULTS%
		PRINTL (必要な場合は)読みをカタカナで入力して下さい
		$INPUTS_LOOP4_1
		INPUTS
		IF CSTR:(ARG:0):字 == RESULTS
			CSTR:(ARG:0):字カナ =
		ELSE
			CSTR:(ARG:0):字カナ = %RESULTS%
		ENDIF
	ENDIF
	GOTO SHOW_LOOP

ELSEIF RESULT == 131
	LOCAL:0 = TARGET
	TARGET = ARG:0
	CALL SET_MIDDLE_NAME
	TARGET = LOCAL:0
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP

ELSEIF RESULT == 132
	CSTR:(ARG:0):字 =
	CSTR:(ARG:0):字カナ =
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 140
	PRINTL 設定する愛称を入力して下さい
	INPUTS
	CSTR:(ARG:0):愛称 = %RESULTS%
	GOTO SHOW_LOOP
ELSEIF RESULT == 141
	CSTR:(ARG:0):愛称 =
	GOTO SHOW_LOOP
ELSEIF RESULT != 999 || (CALLNAME:(ARG:0) == "" && CSTR:(ARG:0):名 == "")
	CLEARLINE 1
	GOTO INPUT_LOOP
ENDIF

REDRAW 1

PRINTL 名前はどういう形式にしますか？
PRINTL [0] 名のみ（和名風・洋風）
PRINTL [1] 姓名合わせて（中華風）
$INPUT_LOOP2
INPUT
IF RESULT == 0
	PRINTFORMW 名のみで設定しました
	NAME:(ARG:0) = %CSTR:(ARG:0):名%
ELSEIF RESULT == 1
	PRINTFORMW 姓名合わせてで設定しました
	;姓名を合わせて名前を設定
	NAME:(ARG:0) = %CSTR:(ARG:0):姓%%CSTR:(ARG:0):名%
ELSE
	GOTO INPUT_LOOP2
ENDIF

;CALLNAMEはNAMEと同一に
CALLNAME:(ARG:0) = %NAME:(ARG:0)%

;---------------------------------------------------------
;ランダムに子供の名前を設定する関数  ARG:0=子供のキャラ番号
;---------------------------------------------------------
@RANDOM_CHILD_NAMING(ARG:0)
LOCAL:4 = TARGET
TARGET = ARG:0

;父親、母親のキャラ番号を取得
LOCAL:5 = ID_TO_CHARA(CFLAG:24)
LOCAL:6 = ID_TO_CHARA(CFLAG:21)

;姓の設定(父親優先)
IF LOCAL:5 >= 0 && CSTR:(LOCAL:5):姓 != ""
	CSTR:姓 = %CSTR:(LOCAL:5):姓%
	CSTR:姓カナ = %CSTR:(LOCAL:5):姓カナ%
	SIF TALENT:(LOCAL:5):姓名逆転
		TALENT:姓名逆転 = 1
ELSEIF LOCAL:6 >= 0 && CSTR:(LOCAL:6):姓 != ""
	CSTR:姓 = %CSTR:(LOCAL:6):姓%
	CSTR:姓カナ = %CSTR:(LOCAL:6):姓カナ%
	SIF TALENT:(LOCAL:6):姓名逆転
		TALENT:姓名逆転 = 1
ENDIF

;姓がなく親が動物キャラならカタカナ名
LOCAL:10 = (LOCAL:5 >= 0 && (TALENT:(LOCAL:5):動物耳 || TALENT:(LOCAL:5):しっぽ))
LOCAL:11 = (LOCAL:6 >= 0 && (TALENT:(LOCAL:6):動物耳 || TALENT:(LOCAL:6):しっぽ))
IF (LOCAL:10 || LOCAL:11) && CSTR:姓 == ""
	;↓これだとFAMILYNAMEまで設定されるっぽいか
	;カナ名の決定
	;CALL SET_RANDOM_NAME_K(TALENT:性別)
	;名からNAMEとCALLNAMEを設定
	;NAME = %CSTR:姓%
	;CALLNAME = %CSTR:姓%

	;東方系は姓なしかつカナ名ではない動物キャラが結構おおく一括でカナ名にすると違和感が出る
	;未発表バリアントで自作したカナ判定を流用して使用する

	;父親不明の場合の処理がよくわからんかったので母親依存にしちゃえ
	IF CHECK_KATAKANA(NAME:(LOCAL:6), 0)
		IF IS_MALE(ARG:0)
			CALL SET_FIRST_NAME_KM
		ELSE
			CALL SET_FIRST_NAME_KF
		ENDIF
		;名でNAMEを設定
		NAME = %CSTR:名%
		CALLNAME = %NAME%
		CSTR:NAMEカナ = %CSTR:名カナ%
	ELSE
		IF IS_MALE(ARG:0)
			CALL SET_FIRST_NAME_JM
		ELSE
			CALL SET_FIRST_NAME_JF
		ENDIF
		;名でNAMEを設定
		NAME = %CSTR:名%
		CALLNAME = %NAME%
		CSTR:NAMEカナ = %CSTR:名カナ%
	ENDIF
ELSE
	;暫定で一律洋名
	IF IS_MALE(ARG:0)
		CALL SET_FIRST_NAME_KM
	ELSE
		CALL SET_FIRST_NAME_KF
	ENDIF
	;名でNAMEを設定
	NAME = %CSTR:名%
	CALLNAME = %NAME%
	CSTR:NAMEカナ = %CSTR:名カナ%
	; SELECTCASE RAND:100
	; 	CASE 0 TO 80
	; 		IF IS_MALE(ARG:0)
	; 			CALL SET_FIRST_NAME_JM
	; 		ELSE
	; 			CALL SET_FIRST_NAME_JF
	; 		ENDIF
	; 		;名でNAMEを設定
	; 		NAME = %CSTR:名%
	; 		CALLNAME = %NAME%
	; 		CSTR:NAMEカナ = %CSTR:名カナ%
	; 	CASEELSE
	; 		IF IS_MALE(ARG:0)
	; 			CALL SET_FIRST_NAME_KM
	; 		ELSE
	; 			CALL SET_FIRST_NAME_KF
	; 		ENDIF
	; 		;名でNAMEを設定
	; 		NAME = %CSTR:名%
	; 		CALLNAME = %NAME%
	; 		CSTR:NAMEカナ = %CSTR:名カナ%
	; ENDSELECT
ENDIF

TARGET = LOCAL:4

;---------------------------------------------------------
;母親による自動育児処理  ARG:0=母親のキャラ番号、ARG:1=子供のキャラ番号、ARG:2=育児期間
;---------------------------------------------------------
@MOTHER_AUTO_REARING(ARG:0, ARG:1, ARG:2)

MPLY:0 = ARG:0
MTAR:0 = ARG:1

SIF IS_COUNTRY(CFLAG:(ARG:0):所属) && CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属
	PRINTFORML %ANAME(ARG:0)%は%ANAME(ARG:1)%を教育している……

FOR LOCAL, 0, 5
	SELECTCASE RAND:6
		CASE 0
			LOCAL:1 = GETNUM(ABL, "身体")
		CASE 1
			LOCAL:1 = GETNUM(ABL, "器用")
		CASE 2
			LOCAL:1 = GETNUM(ABL, "知識")
		CASE 3
			LOCAL:1 = GETNUM(ABL, "社交")
		CASE 4
			LOCAL:1 = GETNUM(ABL, "歌唱")
		CASE 5
			LOCAL:1 = GETNUM(ABL, "料理")
	ENDSELECT
	CALL COM_SLG_TRAIN_MAIN_PROCESS(LOCAL:1, 1)
NEXT

CALL TRAIN_AUTO_ABLUP(ARG:1, 1)

;-----------------------------------------
;相手の子を産んだことがあるか調べる
;相手専用を立てとくと、それ以外の子を産んだことがある場合に0が帰るようになる
;-----------------------------------------
@HAVE_GIVEN_BIRTH_ITS_CHILD(対象, 相手, 相手専用 = 0)
#FUNCTION
#DIM 対象
#DIM 妊娠記録
#DIM 相手
#DIM 相手ID
#DIM 相手の子産んだフラグ
#DIM 相手専用

相手ID = GET_ID(相手)
相手の子産んだフラグ = 0

FOR 妊娠記録, 0, PREGNANT_RECORD_MAX
	;専用フラグが立っていて、相手以外の子を孕んでいる場合はダメ
	IF 相手専用 && !GROUPMATCH(PREGNANT_RECORD_FATHER:対象:妊娠記録, 0, 相手ID)
		RETURNF 0
	ELSEIF PREGNANT_RECORD_FATHER:対象:妊娠記録 == 相手ID
		相手の子産んだフラグ = 1
	ENDIF
NEXT

RETURNF 相手の子産んだフラグ

;--------------------------------------------------------
;Looks backward through character # ARG:0's lineage for the first fixed (non-master) character found
;ARG:1 is a flag for checking animals
;returns character #
;-1 Default
;-2 Dog
;-3 Pig
;-4 Horse
;-5 Monkey
;--------------------------------------------------------
@LINEAGE_TO_FIXED(ARG:0, ARG:1 = 0)
#FUNCTION
#DIM BRANCH, MAX_CHARANUM + 1
#DIM BLACKLIST, 1000
#DIM BRANCH_P
#DIM BLACKLIST_P

VARSET BRANCH, -1
VARSET BLACKLIST, -1
BRANCH_P = 0
BLACKLIST_P = 0

BRANCH:BRANCH_P = ARG:0

WHILE BRANCH_P != -1 && BRANCH_P < VARSIZE("BRANCH") - 1 && BLACKLIST_P < VARSIZE("BLACKLIST")
	IF IS_UNIQUE_CHARA(BRANCH:BRANCH_P) && BRANCH:BRANCH_P != 0
		;found a fixed character
		RETURNF BRANCH:BRANCH_P
	ELSEIF ARG:1 && (CFLAG:(BRANCH:BRANCH_P):父親 != 0) && (CFLAG:(BRANCH:BRANCH_P):父親 == GET_SPERM_ID("犬") || TALENT:(BRANCH:BRANCH_P):動物 == 動物_犬)
		;dog, or dog father
		RETURNF -2
	ELSEIF ARG:1 && (CFLAG:(BRANCH:BRANCH_P):父親 != 0) && (CFLAG:(BRANCH:BRANCH_P):父親 == GET_SPERM_ID("豚") || TALENT:(BRANCH:BRANCH_P):動物 == 動物_豚)
		;pig, or pig father
		RETURNF -3
	ELSEIF ARG:1 && (CFLAG:(BRANCH:BRANCH_P):父親 != 0) && (CFLAG:(BRANCH:BRANCH_P):父親 == GET_SPERM_ID("馬") || TALENT:(BRANCH:BRANCH_P):動物 == 動物_馬)
		;horse, or horse father
		RETURNF -4
	ELSEIF ARG:1 && (CFLAG:(BRANCH:BRANCH_P):父親 != 0) && (CFLAG:(BRANCH:BRANCH_P):父親 == GET_SPERM_ID("猿") || TALENT:(BRANCH:BRANCH_P):動物 == 動物_猿)
		;monkey, or monkey father
		RETURNF -5
	ELSEIF (ID_TO_CHARA(CFLAG:(BRANCH:BRANCH_P):母親) == -1 || MATCH(BLACKLIST, ID_TO_CHARA(CFLAG:(BRANCH:BRANCH_P):母親))) && (ID_TO_CHARA(CFLAG:(BRANCH:BRANCH_P):父親) == -1 || MATCH(BLACKLIST, ID_TO_CHARA(CFLAG:(BRANCH:BRANCH_P):父親)))
		;both mother and father are blacklisted or null so blacklist this character and step back to the last branch
		BLACKLIST:BLACKLIST_P = BRANCH:BRANCH_P
		BLACKLIST_P ++
		BRANCH_P --
	ELSEIF ID_TO_CHARA(CFLAG:(BRANCH:BRANCH_P):母親) == -1 || MATCH(BLACKLIST, ID_TO_CHARA(CFLAG:(BRANCH:BRANCH_P):母親))
		;mother is blacklisted or null so continue down father path
		BRANCH:(BRANCH_P+1) = ID_TO_CHARA(CFLAG:(BRANCH:BRANCH_P):父親)
		BRANCH_P ++
	ELSE
		;mother available so continue down that path
		BRANCH:(BRANCH_P+1) = ID_TO_CHARA(CFLAG:(BRANCH:BRANCH_P):母親)
		BRANCH_P ++
	ENDIF
WEND

RETURNF -1


code:
;-------------------------------------------------
;■妊娠記録に関する変数
;-------------------------------------------------
;妊娠記録の最大件数
#DIM CONST PREGNANT_RECORD_MAX = 100

;このキャラを妊娠させた父親のID
#DIM CHARADATA SAVEDATA PREGNANT_RECORD_FATHER, PREGNANT_RECORD_MAX

;このキャラが各父親に妊娠させられた回数
#DIM CHARADATA SAVEDATA PREGNANT_RECORD_TIMES, PREGNANT_RECORD_MAX

;このキャラのモブ孕ませ履歴
#DIMS CHARADATA SAVEDATA PREGNANT_RECORD_MOB_NAME, PREGNANT_RECORD_MAX

#DIM CONST WOMB_RECORD_MAX = 50

#DIM CHARADATA SAVEDATA WOMB_TOTAL_CREAMPIED_AMOUNT
#DIM CHARADATA SAVEDATA ANUS_TOTAL_CREAMPIED_AMOUNT
#DIM CHARADATA SAVEDATA STOMACH_TOTAL_CREAMPIED_AMOUNT

;子宮内精液のID
#DIM CHARADATA SAVEDATA WOMB_SPERM_ID, WOMB_RECORD_MAX
;子宮内精液の量
#DIM CHARADATA SAVEDATA WOMB_SPERM_AMOUNT, WOMB_RECORD_MAX
;子宮内に出された回数
#DIM CHARADATA SAVEDATA WOMB_SPERM_COUNT, WOMB_RECORD_MAX
;その精液が子宮から削除されるまでの残り時間
#DIM CHARADATA SAVEDATA WOMB_SPERM_TIME, WOMB_RECORD_MAX
;子宮膨張率
#DIM CHARADATA WOMB_INFLATION_RATE

;尻穴内精液のID
#DIM CHARADATA SAVEDATA ANUS_SPERM_ID, WOMB_RECORD_MAX
;尻穴内精液の量
#DIM CHARADATA SAVEDATA ANUS_SPERM_AMOUNT, WOMB_RECORD_MAX
;尻穴内に出された回数
#DIM CHARADATA SAVEDATA ANUS_SPERM_COUNT, WOMB_RECORD_MAX
;その精液が尻穴から削除されるまでの残り時間
#DIM CHARADATA SAVEDATA ANUS_SPERM_TIME, WOMB_RECORD_MAX

;胃内精液のID
#DIM CHARADATA SAVEDATA STOMACH_SPERM_ID, WOMB_RECORD_MAX
;胃内精液の量
#DIM CHARADATA SAVEDATA STOMACH_SPERM_AMOUNT, WOMB_RECORD_MAX
;胃内に出された回数
#DIM CHARADATA SAVEDATA STOMACH_SPERM_COUNT, WOMB_RECORD_MAX
;その精液が胃から削除されるまでの残り時間
#DIM CHARADATA SAVEDATA STOMACH_SPERM_TIME, WOMB_RECORD_MAX

;授乳先情報の記録
#DIM CHARADATA BREAST_FEED_ID, WOMB_RECORD_MAX
#DIM CHARADATA BREAST_FEED_AMOUNT, WOMB_RECORD_MAX

;記録件数. 50なら50人
;#DIM SAVEDATA PREGNANT_RECORD_LENGTH = 30

;記録開始位置の指定.
;#DIM SAVEDATA PREGNANT_RECORD_BEGIN_CFLAG = 250
;#DIM SAVEDATA PREGNANT_RECORD_BEGIN_CSTR = 100
#DIM CONST SPERM_MAX_ADDRESS = 1000
#DIMS SAVEDATA SPERM_NAME_ARRAY, SPERM_MAX_ADDRESS
#DIM SAVEDATA BROTHER_SPERM_FLAG, SPERM_MAX_ADDRESS

repo_name: napo/erafl

license: unknown


code:
;-------------------------
;精液マップを作成
;下に下に追加していくこと
;-------------------------
@CREATE_SPERM_MAP
SPERM_NAME_ARRAY:0 = 不明
CALL ADD_SPERM("野盗")
CALL ADD_SPERM("触手")
CALL ADD_SPERM("淫魔")
CALL ADD_SPERM("ゴブリン")
CALL ADD_SPERM("オーク")
CALL ADD_SPERM("犬")
CALL ADD_SPERM("ワーグ")
CALL ADD_SPERM("豚")
CALL ADD_SPERM("馬")
CALL ADD_SPERM("猿")
CALL ADD_SPERM("蟲")
CALL ADD_SPERM("スライム")
CALL ADD_SPERM("ドライアド")
CALL ADD_SPERM("スキュラ")
CALL ADD_SPERM("魔物")
CALL ADD_SPERM("機械")
;CALL ADD_SPERM("外来人")
;CALL ADD_SPERM("自警団")
;CALL ADD_SPERM("「実験動物」")
;CALL ADD_SPERM("薬売り")
;CALL ADD_SPERM("金貸しの客")
;CALL ADD_SPERM("催眠術師")
;CALL ADD_SPERM("娼館の客")
;CALL ADD_SPERM("兵士")
;CALL ADD_SPERM("鬼")
;CALL ADD_SPERM("野良妖怪")
;CALL ADD_SPERM("浮浪者")
;CALL ADD_SPERM("チャラ男")
;CALL ADD_SPERM("山賊")
;CALL ADD_SPERM("やくざ")
;CALL ADD_SPERM("チンピラ")
;CALL ADD_SPERM("ごろつき")
;CALL ADD_SPERM("奴隷商人")
;CALL ADD_SPERM("痴漢")
;CALL ADD_SPERM("子供")
;CALL ADD_SPERM("地主")
;CALL ADD_SPERM("ならず者")
;CALL ADD_SPERM("行きずりの男")
;CALL ADD_SPERM("医者")
;CALL ADD_SPERM("貴族")
;CALL ADD_SPERM("領民")
;CALL ADD_SPERM("老人")
;CALL ADD_SPERM("悪魔")
;CALL ADD_SPERM("ゾンビ")
;CALL ADD_SPERM("天狗")
;CALL ADD_SPERM("AV男優")
;CALL ADD_SPERM("カジノの客")
;CALL ADD_SPERM("狂信者")

;-------------------------
;指定した名前をもつ精液を追加
;二重登録禁止
;-------------------------
@ADD_SPERM(SPERMNAME)
#DIMS SPERMNAME
;登録済みならスルー
SIF FINDELEMENT(SPERM_NAME_ARRAY, SPERMNAME, 0, SPERM_MAX_ADDRESS, 1) != -1
	RETURN 0
FOR LOCAL, 0, SPERM_MAX_ADDRESS
	SIF SPERM_NAME_ARRAY:LOCAL == ""
		GOTO FOUND
NEXT

THROW SPERM_NAME_ARRAYがいっぱいです

$FOUND

SPERM_NAME_ARRAY:LOCAL = %SPERMNAME%

RETURN 1

;-------------------------
;指定した名前の精液が動物のものかどうか判断
;-------------------------
@IS_ANIMAL_SPERM(SPERM)
#FUNCTION
#DIM SPERM
RETURNF GROUPMATCH(GET_SPERM_NAME(SPERM), "犬", "豚", "馬", "牛", "猿", "ワーグ")

;-------------------------
;指定した名前をもつ精液のIDを取得
;-------------------------
@GET_SPERM_ID(SPERMNAME)
#FUNCTION
#DIMS SPERMNAME
LOCAL = FINDELEMENT(SPERM_NAME_ARRAY, SPERMNAME, 0, SPERM_MAX_ADDRESS, 1)
IF LOCAL == -1
	FOR LOCAL, 0, SPERM_MAX_ADDRESS
		SIF SPERM_NAME_ARRAY:LOCAL == ""
			GOTO FOUND
	NEXT
	$FOUND
	SPERM_NAME_ARRAY:LOCAL = %SPERMNAME%
ENDIF
RETURNF LOCAL * -1

;-------------------------
;指定したキャラがモブの場合、対応する精液IDを返す
;でなければ普通にIDを返す
;-------------------------
@TO_MOB_SPERM_ID(対象)
#FUNCTION
#DIM 対象

;対象が特殊勢力の場合、IDを変換
SIF TALENT:対象:特殊勢力素質
	RETURNF GET_SPERM_ID(SP_COUNTRY_NAME:(TALENT:対象:特殊勢力素質))
;対象が慰安モブの場合、IDを変換
SIF TALENT:対象:慰安モブ && CSTR:対象:モブ識別子 == ""
	RETURNF GET_SPERM_ID(IAN_SPERM_ARRAY:(TALENT:対象:慰安モブ))
SIF CSTR:対象:モブ識別子 != ""
	RETURNF GET_SPERM_ID(CSTR:対象:モブ識別子)

RETURNF GET_ID(対象)

;-------------------------
;指定したIDをもつ精液の名前を取得
;-------------------------
@GET_SPERM_NAME(SPERMID)
#FUNCTIONS
#DIM SPERMID
IF SPERMID > 0
	LOCAL = ID_TO_CHARA(SPERMID)
	SIF LOCAL == -1
		RETURNF "不明"
	RETURNF ANAME(LOCAL)
ENDIF
LOCALS = %SPERM_NAME_ARRAY:(SPERMID * -1)%
SIF LOCALS == ""
	RETURNF "不明"
RETURNF LOCALS

;-------------------------
;ゲームのバージョンが上がった場合に、精液マップをクリーンする処理
;領地探索とか絶対に（絶対に）表記ゆれさせてくるに違いないので。
;-------------------------
@CLEAN_SPERM_MAP()
FOR LOCAL, 1, SPERM_MAX_ADDRESS
	SIF SPERM_NAME_ARRAY:LOCAL == ""
		CONTINUE
	FOR LOCAL:1, 0, CHARANUM
		SIF CFLAG:(LOCAL:1):父親 * -1 == LOCAL
			GOTO FOUND
		FOR LOCAL:2, 0, PREGNANT_RECORD_MAX
			SIF PREGNANT_RECORD_FATHER:(LOCAL:1):(LOCAL:2) * -1 == LOCAL
				GOTO FOUND
		NEXT
		FOR LOCAL:2, 0, WOMB_RECORD_MAX
			SIF WOMB_SPERM_ID:(LOCAL:1):(LOCAL:2) * -1 == LOCAL
				GOTO FOUND
		NEXT
	NEXT
	SPERM_NAME_ARRAY:LOCAL = ""
	$FOUND
NEXT

;-------------------------
;指定した東方キャラ間に兄弟・姉妹の関係を設定
;-------------------------
@SET_SIBLING_RELATION(ARG:0 = -1, ARG:1 = -1, ARG:2 = -1, ARG:3 = -1, ARG:4 = -1, ARG:5 = -1, ARG:6 = -1, ARG:7 = -1, ARG:8 = -1, ARG:9 = -1)

;Look for existing fathers/mothers
LOCAL:5 = 0
LOCAL:6 = 0
FOR LOCAL:1, 0, 10
	SIF ARG:(LOCAL:1) == -1
		BREAK
	SIF CFLAG:(ARG:(LOCAL:1)):父親 > 0 && !LOCAL:5
		LOCAL:5 = CFLAG:(ARG:(LOCAL:1)):父親
	SIF CFLAG:(ARG:(LOCAL:1)):母親 > 0 && !LOCAL:6
		LOCAL:6 = CFLAG:(ARG:(LOCAL:1)):母親
NEXT
;Copy the first one found onto all characters
FOR LOCAL:1, 0, 10
	SIF ARG:(LOCAL:1) == -1
		BREAK
	SIF LOCAL:5 > 0
		CFLAG:(ARG:(LOCAL:1)):父親 = LOCAL:5
	SIF LOCAL:6 > 0
		CFLAG:(ARG:(LOCAL:1)):母親 = LOCAL:6
NEXT

;If one was found, the characters are now at least half-siblings. We return.
SIF LOCAL:5 || LOCAL:6
	RETURN 0

;Otherwise, generate a unique sperm named "Unknown" and use that as both their parents
FOR LOCAL, 0, SPERM_MAX_ADDRESS
	IF SPERM_NAME_ARRAY:LOCAL == ""
		LOCAL:2 = LOCAL
		LOCAL --
		BREAK
	ENDIF
NEXT

SIF LOCAL == SPERM_MAX_ADDRESS
	THROW SPERM_NAME_ARRAYがいっぱいです

SPERM_NAME_ARRAY:(LOCAL:2) = 不明
BROTHER_SPERM_FLAG:(LOCAL:2) = 1
FOR LOCAL:1, 0, 10
	SIF ARG:(LOCAL:1) == -1
		BREAK
	CFLAG:(ARG:(LOCAL:1)):父親 = LOCAL:2 * -1
	CFLAG:(ARG:(LOCAL:1)):母親 = LOCAL:2 * -1
NEXT

RETURN 1

@INIT_CHARA_SIBLING_RELATION()
CALL SET_SIBLING_RELATION(NAME_TO_CHARA("レミリア"), NAME_TO_CHARA("フランドール"))
CALL SET_SIBLING_RELATION(NAME_TO_CHARA("静葉"), NAME_TO_CHARA("穣子"))
CALL SET_SIBLING_RELATION(NAME_TO_CHARA("ルナサ"), NAME_TO_CHARA("リリカ"), NAME_TO_CHARA("メルラン"))
CALL SET_SIBLING_RELATION(NAME_TO_CHARA("豊姫"), NAME_TO_CHARA("依姫"))
CALL SET_SIBLING_RELATION(NAME_TO_CHARA("さとり"), NAME_TO_CHARA("こいし"))
CALL SET_SIBLING_RELATION(NAME_TO_CHARA("弁々"), NAME_TO_CHARA("八橋"))
CALL SET_SIBLING_RELATION(NAME_TO_CHARA("夢月"), NAME_TO_CHARA("幻月"))
CALL SET_SIBLING_RELATION(NAME_TO_CHARA("命蓮"), NAME_TO_CHARA("白蓮"))
CALL SET_SIBLING_RELATION(NAME_TO_CHARA("紫苑"), NAME_TO_CHARA("女苑"))


code:
;妊娠した子供の父親を記録する

;---------------------------------------------------------
;母親のキャラ番号と父親のIDを受け取り、母親の妊娠記録を更新する
;P_TIMESは回数 通常は1
;---------------------------------------------------------
@REFRESH_PREGNANT_RECORD(MOTHER, FATHER_ID, P_TIMES = 1)
#DIM MOTHER
#DIM FATHER_ID
#DIM P_TIMES

IF P_TIMES <= 0
	RETURN
ENDIF

;既に同一のIDが記録されているか調べる
FOR LOCAL:0, 0, PREGNANT_RECORD_MAX
	IF PREGNANT_RECORD_FATHER:MOTHER:(LOCAL:0) == FATHER_ID
		;同一のIDが見つかった場合、その父親による妊娠回数をP_TIMES分増やして終了
		PREGNANT_RECORD_TIMES:MOTHER:(LOCAL:0) += P_TIMES
		RETURN
	ENDIF
NEXT

;既存の記録が見つからなかった場合、空いている場所に新たに記録
FOR LOCAL:0, 0, PREGNANT_RECORD_MAX
	IF PREGNANT_RECORD_FATHER:MOTHER:(LOCAL:0) == 0
		PREGNANT_RECORD_FATHER:MOTHER:(LOCAL:0) = FATHER_ID
		PREGNANT_RECORD_TIMES:MOTHER:(LOCAL:0) = P_TIMES
		RETURN
	ENDIF
NEXT

;---------------------------------------------------------
; ARG:0番のキャラの妊娠記録を一括表示する
;---------------------------------------------------------
@SHOW_PREGNANT_RECORD(ARG:0)
#DIM 表示回数
#DIM その他
VARSET 表示回数
VARSET その他
VARSET LOCAL, 0
CALL SINGLE_DRAWLINE
PRINTFORML ○%ANAME(ARG:0)%の妊娠記録○

;FOR LOCAL:0, 0, PREGNANT_RECORD_MAX
;	LOCAL:1 = PREGNANT_RECORD_FATHER:(ARG:0):(LOCAL:0)
;	LOCAL:2 = PREGNANT_RECORD_TIMES:(ARG:0):(LOCAL:0)
;	;父親が不明または既に削除されている場合
;	IF LOCAL:1 == 0 || (LOCAL:1 > 0 && ID_TO_CHARA(LOCAL:1) == -1)
;		IF LOCAL:2 > 0
;			;「その他」の項目に回数を加算する
;			その他 += LOCAL:2
;		ENDIF
;	ENDIF
;NEXT

LOCAL:499 = 0
LOCAL:500 = 0

FOR LOCAL, 0, PREGNANT_RECORD_MAX
	LOCAL:1 = PREGNANT_RECORD_FATHER:(ARG:0):(LOCAL:0)
	LOCAL:2 = PREGNANT_RECORD_TIMES:(ARG:0):(LOCAL:0)
	LOCAL:499 += PREGNANT_RECORD_TIMES:(ARG:0):(LOCAL:0)
	IF LOCAL:2 > 0
		LOCAL:3 = 1
		;父親が不明または既に削除されている場合、その他扱いなのでCONTINUE
		;SIF LOCAL:1 == 0 || (LOCAL:1 > 0 && ID_TO_CHARA(LOCAL:1) == -1)
		;	CONTINUE
		IF LOCAL:500 >= 1
			IF LOCAL:500 % 4 == 0
				PRINTL
			ELSE
				PRINT
			ENDIF
		ENDIF
		LOCAL:500 ++
		;父親がキャラの場合
		SIF ID_TO_CHARA(LOCAL:1) >= 0
			PRINTFORM %SNAME(ID_TO_CHARA(LOCAL:1)), 18, LEFT%{LOCAL:2, 4, RIGHT}
		;父親が特殊精液の場合
		SIF ID_TO_CHARA(LOCAL:1) < 0 && GET_SPERM_NAME(LOCAL:1) != ""
			PRINTFORM %GET_SPERM_NAME(LOCAL:1), 18, LEFT%{LOCAL:2, 4, RIGHT}
	ENDIF
NEXT

;表示件数ゼロなら無しと表示しておく
IF !LOCAL:3
	PRINTFORML なし
ELSE
	PRINTFORML \n合計: {LOCAL:499}
ENDIF

CALL COLOR_LINE
PRINTFORML ○%ANAME(ARG:0)%の種付け記録○
VARSET LOCAL, 0
FOR LOCAL, 0, CHARANUM
	; 一旦非所属対象はモブキャラとして扱う
	IF CFLAG:(LOCAL):所属 == 所属_プレイヤー || CSTR:(LOCAL):識別名 != ""
	; If only use cstr500 as the filter, some mob without cstr500 will lead to duplicated pregnanted record while fertiled but not deleted, enemys in quest 4 are examples.
	; quest_汎用モブ does not contain cstr500 as while.
		FOR LOCAL:1, 0, PREGNANT_RECORD_MAX
			IF PREGNANT_RECORD_FATHER:(LOCAL:0):(LOCAL:1) == GET_ID(ARG:0)
				IF LOCAL:500 >= 1
					IF LOCAL:500 % 4 == 0
						PRINTL
					ELSE
						PRINT
					ENDIF
				ENDIF
				LOCAL:500 ++
				LOCAL:499 += PREGNANT_RECORD_TIMES:(LOCAL:0):(LOCAL:1)
				LOCAL:2 = PREGNANT_RECORD_TIMES:(LOCAL:0):(LOCAL:1)
				PRINTFORM %SNAME(LOCAL:0), 18, LEFT%{LOCAL:2, 4, RIGHT}
				LOCAL:3 ++
				BREAK
			ENDIF
		NEXT
	ENDIF
NEXT

CALL PRINT_MOB_PREGNANTION(ARG:0, LOCAL:500)
LOCAL:3 += RESULT
LOCAL:499 += RESULT

LOCAL:498 = EXP:(ARG:0):孕ませ経験 - LOCAL:499
IF LOCAL:498 != 0
	PRINTL
	PRINTFORM %"顔も忘れた誰か", 18, LEFT%{LOCAL:498, 4, RIGHT}
	PRINT
ENDIF

;表示件数ゼロなら無しと表示しておく
IF EXP:(ARG:0):孕ませ経験 == 0
	PRINTFORML なし
ELSE
	PRINTFORML \n合計: {EXP:(ARG:0):孕ませ経験}
ENDIF

CALL SHOW_CHILDREN(ARG:0)
CALL SHOW_SIBLING(ARG:0)
CALL SHOW_STOMACH_SPERM(ARG:0)
IF HAS_VAGINA(ARG:0)
	CALL SHOW_WOMB_SPERM(ARG:0)
ENDIF
CALL SHOW_ANUS_SPERM(ARG:0)

;---------------------------------------------------------
; ARG:0番のキャラの子供を一括表示する
;---------------------------------------------------------
@SHOW_CHILDREN(ARG:0)
#DIM 表示回数
#DIM 親種別
#DIM 親ID
#DIM ARG0_ID

ARG0_ID = GET_ID(ARG:0)

FOR 親種別, 0, 2
	CALL COLOR_LINE
	表示回数 = 0
	SELECTCASE 親種別
		CASE 0
			PRINTFORML ○%ANAME(ARG:0)%を父親に持つ子供○
		CASE 1
			PRINTFORML ○%ANAME(ARG:0)%を母親に持つ子供○
	ENDSELECT
	FOR LOCAL, 0, CHARANUM
		SELECTCASE 親種別
			CASE 0
				親ID = CFLAG:(LOCAL:0):父親
			CASE 1
				親ID = CFLAG:(LOCAL:0):母親
		ENDSELECT
		IF 親ID == ARG0_ID
			IF 表示回数 >= 1
				IF 表示回数 % 4 == 0
					PRINTL
				ELSE
					PRINT
				ENDIF
			ENDIF
			表示回数 ++
			PRINTFORM %SNAME(LOCAL:0), 18, LEFT%
		ENDIF
	NEXT

	;表示件数ゼロなら無しと表示しておく
	IF !表示回数
		PRINTFORML %"なし", 18, LEFT%
	ELSE
		PRINTFORML \n合計: {表示回数}
	ENDIF
NEXT

;---------------------------------------------------------
; 対象のきょうだいを表示する
;---------------------------------------------------------
@SHOW_SIBLING(対象)
#DIM 対象
#DIM 父ID
#DIM 母ID
#DIM 相手父ID
#DIM 相手母ID
#DIM 表示回数
#DIM 表示種別

父ID = CFLAG:対象:父親
母ID = CFLAG:対象:母親

IF ALLSAMES(0, 父ID, 母ID)
	CALL COLOR_LINE
	PRINTFORML 〇%ANAME(対象)%の兄弟・姉妹〇
	PRINTFORML 両親ともに不明のため、わからない
	RETURN
ENDIF

FOR 表示種別, 0, 3
	CALL COLOR_LINE
	SELECTCASE 表示種別
		CASE 0
			PRINTFORML 〇%ANAME(対象)%の兄弟・姉妹〇
		CASE 1
			PRINTFORML 〇%ANAME(対象)%の異母兄弟・姉妹〇
		CASE 2
			PRINTFORML 〇%ANAME(対象)%の異父兄弟・姉妹〇
	ENDSELECT
	表示回数 = 0

	FOR LOCAL, 0, CHARANUM
		SIF LOCAL == 対象
			CONTINUE
		相手父ID = CFLAG:LOCAL:父親
		相手母ID = CFLAG:LOCAL:母親

		SIF ALLSAMES(0, 相手父ID, 相手母ID)
			CONTINUE

		SELECTCASE 表示種別
			CASE 0
				;兄弟でない == 父と母いずれかが異なる　父母不明は別人とみなす
				SIF !IS_PURE_BROTHER(対象, LOCAL)
					CONTINUE
			CASE 1
				;異母兄弟
				SIF !(HAS_SAME_FATHER(対象, LOCAL) && !HAS_SAME_MOTHER(対象, LOCAL))
					CONTINUE
			CASE 2
				;異父兄弟
				SIF !(!HAS_SAME_FATHER(対象, LOCAL) && HAS_SAME_MOTHER(対象, LOCAL))
					CONTINUE
		ENDSELECT
		IF 表示回数 >= 1
			IF 表示回数 % 4 == 0
				PRINTL
			ELSE
				PRINT
			ENDIF
		ENDIF
		表示回数 ++
		PRINTFORM %SNAME(LOCAL:0), 18, LEFT%
	NEXT

	;表示件数ゼロなら無しと表示しておく
	IF !表示回数
		PRINTFORML なし
	ELSE
		PRINTFORML \n合計: {表示回数}
	ENDIF
NEXT

;ARG:1がARG:0の父親であるか判定する
@IS_FATHER(ARG:0, ARG:1)
#FUNCTION
RETURNF CFLAG:(ARG:0):父親 == GET_ID(ARG:1)

@IS_MOTHER(ARG:0, ARG:1)
#FUNCTION
RETURNF CFLAG:(ARG:0):母親 == GET_ID(ARG:1)

;キャラふたりの父親が同一であるか判定する
@HAS_SAME_FATHER(ARG:0, ARG:1)
#FUNCTION
#DIM 父ID, 2
SIF ARG:0 == ARG:1
	RETURNF 0
父ID:0 = CFLAG:(ARG:0):父親
父ID:1 = CFLAG:(ARG:1):父親
IF 父ID:0 == 父ID:1
	IF 父ID:0 > 0 && 父ID:1 > 0
		RETURNF 1
	ELSEIF 父ID:0 < 0 && 父ID:1 < 0 && BROTHER_SPERM_FLAG:(父ID:0 * -1) == 1
		RETURNF 1
	ENDIF
ENDIF
RETURNF 0

;キャラふたりの母親が同一であるか判定する
@HAS_SAME_MOTHER(ARG:0, ARG:1)
#FUNCTION
#DIM 母ID, 2
SIF ARG:0 == ARG:1
	RETURNF 0
母ID:0 = CFLAG:(ARG:0):母親
母ID:1 = CFLAG:(ARG:1):母親
IF 母ID:0 == 母ID:1
	IF 母ID:0 > 0 && 母ID:1 > 0
		RETURNF 1
	ELSEIF 母ID:0 < 0 && 母ID:1 < 0 && BROTHER_SPERM_FLAG:(母ID:0 * -1) == 1
		RETURNF 1
	ENDIF
ENDIF
RETURNF 0

;キャラふたりが兄弟であるか判定する
@IS_PURE_BROTHER(ARG:0, ARG:1)
#FUNCTION
RETURNF HAS_SAME_FATHER(ARG:0, ARG:1) && HAS_SAME_MOTHER(ARG:0, ARG:1)

;---------------------------------------------------------
; 対象の子宮内精液量を表示する
;---------------------------------------------------------
@SHOW_WOMB_SPERM(ARG:0)
#DIM 表示
#DIM 総量
#DIM FIRST_LINE

総量 = SUM_WOMB_SPERM_AMOUNT(ARG:0)

CALL COLOR_LINE
PRINTFORM 〇%ANAME(ARG:0)%の子宮内の精液〇
CALL PRINT_GRADATIONBAR(MIN(総量, CALC_WOMB_SIZE(ARG:0)), CALC_WOMB_SIZE(ARG:0), 10, 0xFFEDB8, , 1)
PRINTFORML  {総量}/{CALC_WOMB_SIZE(ARG:0)}ml

FIRST_LINE = LINECOUNT

FOR LOCAL:0, 0, WOMB_RECORD_MAX
	SIF WOMB_SPERM_ID:(ARG:0):(LOCAL:0) == 0
		CONTINUE
	PRINTFORM %GET_SPERM_NAME(WOMB_SPERM_ID:(ARG:0):(LOCAL:0)), MAX_CHARANAME_LENGTH, LEFT%:
	PRINTFORML {WOMB_SPERM_AMOUNT:(ARG:0):(LOCAL:0), 5, RIGHT} ml({WOMB_SPERM_COUNT:(ARG:0):(LOCAL:0)}発分)
NEXT

SIF FIRST_LINE == LINECOUNT
	PRINTFORML なし

;---------------------------------------------------------
;子宮内の精液量を合算する
;---------------------------------------------------------
@SUM_WOMB_SPERM_AMOUNT(対象)
#FUNCTION
#DIM 対象
#DIM 総量
総量 = 0
FOR LOCAL:0, 0, WOMB_RECORD_MAX
	SIF WOMB_SPERM_ID:対象:LOCAL == 0
		CONTINUE
	総量 += WOMB_SPERM_AMOUNT:対象:LOCAL
NEXT

RETURNF 総量

;---------------------------------------------------------
;子宮内の精液量を調整する
;---------------------------------------------------------
@CUT_WOMB_SPERM_AMOUNT(対象)
#DIM 対象
#DIM 総量
#DIM 子宮サイズ
#DIM 余剰

総量 = SUM_WOMB_SPERM_AMOUNT(対象)
子宮サイズ = CALC_WOMB_SIZE(対象)
余剰 = 総量 - 子宮サイズ

SIF 余剰 <= 0
	RETURN 0

FOR LOCAL, 0, WOMB_RECORD_MAX
	SIF WOMB_SPERM_ID:対象:LOCAL == 0
		CONTINUE

	WOMB_SPERM_AMOUNT:対象:LOCAL -= 余剰 * (WOMB_SPERM_AMOUNT:対象:LOCAL * 100 / 総量) / 100 + 1

	IF WOMB_SPERM_AMOUNT:対象:LOCAL <= 0
		WOMB_SPERM_ID:対象:LOCAL = 0
		WOMB_SPERM_AMOUNT:対象:LOCAL = 0
		WOMB_SPERM_COUNT:対象:LOCAL = 0
		WOMB_SPERM_TIME:対象:LOCAL = 0
	ENDIF
NEXT

;---------------------------------------------------------
; 対象の子宮内精液量を表示する
;---------------------------------------------------------
@SHOW_ANUS_SPERM(ARG:0)
#DIM 表示
#DIM 総量
#DIM FIRST_LINE

総量 = SUM_ANUS_SPERM_AMOUNT(ARG:0)

CALL COLOR_LINE
PRINTFORM 〇%ANAME(ARG:0)%の腸内の精液〇
CALL PRINT_GRADATIONBAR(MIN(総量, CALC_ANUS_SIZE(ARG:0)), CALC_ANUS_SIZE(ARG:0), 10, 0xFFEDB8, , 1)
PRINTFORML  {総量}/{CALC_ANUS_SIZE(ARG:0)}ml

FIRST_LINE = LINECOUNT

FOR LOCAL:0, 0, WOMB_RECORD_MAX
	SIF ANUS_SPERM_ID:(ARG:0):(LOCAL:0) == 0
		CONTINUE
	PRINTFORM %GET_SPERM_NAME(ANUS_SPERM_ID:(ARG:0):(LOCAL:0)), MAX_CHARANAME_LENGTH, LEFT%:
	PRINTFORML {ANUS_SPERM_AMOUNT:(ARG:0):(LOCAL:0), 5, RIGHT} ml({ANUS_SPERM_COUNT:(ARG:0):(LOCAL:0)}発分)
NEXT

SIF FIRST_LINE == LINECOUNT
	PRINTFORML なし

;---------------------------------------------------------
;子宮内の精液量を合算する
;---------------------------------------------------------
@SUM_ANUS_SPERM_AMOUNT(対象)
#FUNCTION
#DIM 対象
#DIM 総量
総量 = 0
FOR LOCAL:0, 0, WOMB_RECORD_MAX
	SIF ANUS_SPERM_ID:対象:LOCAL == 0
		CONTINUE
	総量 += ANUS_SPERM_AMOUNT:対象:LOCAL
NEXT

RETURNF 総量

;---------------------------------------------------------
; 対象の子宮内精液量を表示する
;---------------------------------------------------------
@SHOW_STOMACH_SPERM(ARG:0)
#DIM 表示
#DIM 総量
#DIM FIRST_LINE

総量 = SUM_STOMACH_SPERM_AMOUNT(ARG:0)

CALL COLOR_LINE
PRINTFORM 〇%ANAME(ARG:0)%の胃内の精液〇
CALL PRINT_GRADATIONBAR(MIN(総量, CALC_STOMACH_SIZE(ARG:0)), CALC_STOMACH_SIZE(ARG:0), 10, 0xFFEDB8, , 1)
PRINTFORML  {総量}/{CALC_STOMACH_SIZE(ARG:0)}ml

FIRST_LINE = LINECOUNT

FOR LOCAL:0, 0, WOMB_RECORD_MAX
	SIF STOMACH_SPERM_ID:(ARG:0):(LOCAL:0) == 0
		CONTINUE
	PRINTFORM %GET_SPERM_NAME(STOMACH_SPERM_ID:(ARG:0):(LOCAL:0)), MAX_CHARANAME_LENGTH, LEFT%:
	PRINTFORML {STOMACH_SPERM_AMOUNT:(ARG:0):(LOCAL:0), 5, RIGHT} ml({STOMACH_SPERM_COUNT:(ARG:0):(LOCAL:0)}発分)
NEXT

SIF FIRST_LINE == LINECOUNT
	PRINTFORML なし

;---------------------------------------------------------
;胃内の精液量を合算する
;---------------------------------------------------------
@SUM_STOMACH_SPERM_AMOUNT(対象)
#FUNCTION
#DIM 対象
#DIM 総量
総量 = 0
FOR LOCAL:0, 0, WOMB_RECORD_MAX
	SIF STOMACH_SPERM_ID:対象:LOCAL == 0
		CONTINUE
	総量 += STOMACH_SPERM_AMOUNT:対象:LOCAL
NEXT

RETURNF 総量


code:
;---------------------------------------------------------
;ターンエンド時に行う妊娠出産関連の処理(触手出産)
;---------------------------------------------------------
@TURNEND_PREGNANT_CHECK_SYOKUSYU
#DIM 触手産卵実行者ID

FOR LOCAL:0, 0, CHARANUM
	IF CFLAG:(LOCAL:0):触手産卵実行者
		CALL TURNEND_PREGNANT_CHECK_SYOKUSYU_V(LOCAL)
	ENDIF
	IF CFLAG:(LOCAL:0):触手Ａ産卵実行者
		CALL TURNEND_PREGNANT_CHECK_SYOKUSYU_A(LOCAL)
	ENDIF
	IF CFLAG:(LOCAL:0):触手Ｕ産卵実行者
		CALL TURNEND_PREGNANT_CHECK_SYOKUSYU_U(LOCAL)
	ENDIF
NEXT

;-------------------------------------------------
; 触手出産
;-------------------------------------------------
@TURNEND_PREGNANT_CHECK_SYOKUSYU_V(CHARA_ID)
; #region
#DIM DYNAMIC 触手産卵実行者ID
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC 出産回数
#DIM DYNAMIC 獲得魔術経験値
#DIM DYNAMIC 崩壊度
#DIM DYNAMIC 崩壊度補正
#DIM DYNAMIC 能力値補正

IF CFLAG:(CHARA_ID):触手産卵実行者
	IF CFLAG:(CHARA_ID):妊娠期間 < (C_COND("素質:苗床",, CHARA_ID) ? 4 # 6)
		IF !TALENT:CHARA_ID:妊娠
			CFLAG:(CHARA_ID):妊娠期間 ++
		ENDIF
		RETURN
	ENDIF
	SETCOLOR カラー_注意
	PRINTFORMW %ANAME(CHARA_ID)%に産み付けられた触手の子供は、瞬く間に大きく育ち%ANAME(CHARA_ID)%のお腹から這い出そうとしています
	SIF GETBIT(TALENT:(CHARA_ID):淫乱系, 素質_淫乱_苗床)
		PRINTFORMW 苗床と化した%ANAME(CHARA_ID)%は、触手の子を産み出せることにこの上ない悦びを覚えているようだ……
	RESETCOLOR
	PRINTL

	;口上の表示
	CALL KOJO_EVENT(CHARA_ID, 44)

	IF CFLAG:(CHARA_ID):触手産卵実行者
		出産回数 = RAND:2 + 3
		能力値補正 = MIN(ABL:(CHARA_ID):Ｖ感, 25) * LOCAL:12 * LIMIT(ABL:(CHARA_ID):触手 * 50 + EXP:(CHARA_ID):Ｖ拡張経験, 50, 200) / 100
		CALL FUCK(CHARA_ID, "Ｖ, 触手, Ｖ拡張")
	ENDIF

	PRINTL
	PRINTFORML <%ANAME(CHARA_ID)%>
	CALL PRINT_ADD_EXP(CHARA_ID, "出産経験", 1)
	CALL PRINT_ADD_EXP(CHARA_ID, "触手出産経験", 出産回数)
	CALL TRAIN_AUTO_ABLUP(CHARA_ID)
	PRINTL

	;妊娠履歴の記録
	CALL REFRESH_PREGNANT_RECORD(CHARA_ID, GET_SPERM_ID("触手"), 出産回数)

	;嫌悪要素
	IF ABL:(CHARA_ID):出産 < 3 && ABL:(CHARA_ID):触手 < 3
		崩壊度 += 1600
		崩壊度補正 = 1
	ENDIF

	;苦痛要素
	IF CFLAG:(CHARA_ID):触手産卵実行者 >= 1 && ABL:(CHARA_ID):Ｖ感 < 5
		崩壊度 += 900 + 崩壊度補正 * 1200
	ELSE
		崩壊度 += 600 + 崩壊度補正 * 800
	ENDIF

	;妊娠要素
	IF TALENT:(LOCAL:0):妊娠
		TIMES LOCAL:31, 1.50
		LOCAL:31 += 800
	ENDIF

	CFLAG:(CHARA_ID):崩壊 += 崩壊度

	IF TALENT:(CHARA_ID):妊娠 && CFLAG:(CHARA_ID):触手産卵実行者
		SETCOLOR カラー_注意
		PRINTFORMW 触手は%ANAME(CHARA_ID)%の胎内に宿っていた子供を取り込み、同化したようだ…
		PRINTL
		RESETCOLOR
		; IF CFLAG:(CHARA_ID):育児期間 == 0
		; 	PRINTFORMW 触手による堕胎のショックで体の反応が収まっていく
		; 	CALL MOTHER_SHRINK_BUSTSIZE(CHARA_ID)
		; 	CALL MOTHER_STOP_MILKING(CHARA_ID)
		; ENDIF
	ENDIF

	;妊娠関係のフラグをクリア
	SIF CFLAG:(CHARA_ID):行動不能状態 == 行動不能_臨月
		CFLAG:(CHARA_ID):行動不能状態 = 0
	CFLAG:(CHARA_ID):妊娠期間 = 0
	CFLAG:(CHARA_ID):子の父親 = 0
	TALENT:(CHARA_ID):妊娠 = 0
	;バストサイズと母乳体質を戻す
	CALL MOTHER_SHRINK_BUSTSIZE(CHARA_ID)
	CALL MOTHER_STOP_MILKING(CHARA_ID)

	;中出し履歴をクリア
	CALL CLEAR_CREAMPIE_HISTORY(CHARA_ID)

	触手産卵実行者ID = ID_TO_CHARA(CFLAG:(CHARA_ID):触手産卵実行者)
	獲得魔術経験値 = 出産回数 * 4 + 能力値補正 / 3 + CFLAG:(CHARA_ID):妊娠期間

	IF 触手産卵実行者ID >= 0 && TALENT:触手産卵実行者ID:魔術師
		PRINTFORML <%ANAME(触手産卵実行者ID)%
		CALL PRINT_ADD_EXP(触手産卵実行者ID, "魔術経験値", 獲得魔術経験値)
		CALL TRAIN_AUTO_ABLUP(触手産卵実行者ID)
	ENDIF

	PRINTFORML 触手の産卵とともに母体外に排出された残滓から、有用な物質を回収した……
	CALL QST_CHANGE_ITEM(@"{ITEM_魔獣の肉片},{(獲得魔術経験値 / 8) * (MAX(1, CFLAG:(CHARA_ID):妊娠期間))},", 0)
	CALL QST_CHANGE_ITEM(@"{ITEM_精液},{(獲得魔術経験値 / 5) * (MAX(1, CFLAG:(CHARA_ID):妊娠期間))},", 0)
	IF C_COND("素質:母乳体質",,CHARA_ID)
		CALL QST_CHANGE_ITEM(@"{ITEM_乳},{(獲得魔術経験値 / 5) * (MAX(1, CFLAG:(CHARA_ID):妊娠期間))},", 0)
	ENDIF

	PRINTW

	TALENT:(CHARA_ID):触手妊娠 = 0
	CFLAG:(CHARA_ID):触手産卵実行者 = 0
ENDIF
; #endregion

;-------------------------------------------------
; Ａ触手出産
;-------------------------------------------------
@TURNEND_PREGNANT_CHECK_SYOKUSYU_A(CHARA_ID)
; #region
#DIM DYNAMIC 触手産卵実行者ID
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC 出産回数
#DIM DYNAMIC 獲得魔術経験値
#DIM DYNAMIC 崩壊度
#DIM DYNAMIC 崩壊度補正
#DIM DYNAMIC 能力値補正

IF CFLAG:(CHARA_ID):触手Ａ産卵実行者
	IF CFLAG:(CHARA_ID):Ａ妊娠期間 < (C_COND("素質:苗床",, CHARA_ID) ? 4 # 6)
		CFLAG:(CHARA_ID):Ａ妊娠期間 ++
		RETURN
	ENDIF
	SETCOLOR カラー_注意
	PRINTFORMW %ANAME(CHARA_ID)%に産み付けられた触手の子供は、瞬く間に大きく育ち%ANAME(CHARA_ID)%のお腹から這い出そうとしています
	SIF GETBIT(TALENT:(CHARA_ID):淫乱系, 素質_淫乱_苗床)
		PRINTFORMW 苗床と化した%ANAME(CHARA_ID)%は、触手の子を産み出せることにこの上ない悦びを覚えているようだ……
	RESETCOLOR
	PRINTL

	;口上の表示
	CALL KOJO_EVENT(CHARA_ID, 44)

	IF CFLAG:(CHARA_ID):触手Ａ産卵実行者
		出産回数 = RAND:2 + 3
		能力値補正 = MIN(ABL:(CHARA_ID):Ａ感, 25) * 出産回数 * LIMIT(ABL:(CHARA_ID):触手 * 50 + EXP:(CHARA_ID):Ａ拡張経験, 50, 200) / 100
		CALL FUCK(CHARA_ID, "Ａ, 触手, Ａ拡張")
	ENDIF

	PRINTL
	PRINTFORML <%ANAME(CHARA_ID)%>
	CALL PRINT_ADD_EXP(CHARA_ID, "出産経験", 1)
	CALL PRINT_ADD_EXP(CHARA_ID, "触手出産経験", 出産回数)
	CALL TRAIN_AUTO_ABLUP(CHARA_ID)
	PRINTL

	;妊娠履歴の記録
	CALL REFRESH_PREGNANT_RECORD(CHARA_ID, GET_SPERM_ID("触手"), 出産回数)

	;嫌悪要素
	IF ABL:(CHARA_ID):出産 < 3 && ABL:(CHARA_ID):触手 < 3
		崩壊度 += 1600
		崩壊度補正 = 1
	ENDIF

	;苦痛要素
	IF CFLAG:(CHARA_ID):触手Ａ産卵実行者 >= 1 && ABL:(CHARA_ID):Ａ感 < 5
		崩壊度 += 900 + 崩壊度補正 * 1200
	ELSE
		崩壊度 += 600 + 崩壊度補正 * 800
	ENDIF

	CFLAG:(CHARA_ID):崩壊 += 崩壊度

	触手産卵実行者ID = ID_TO_CHARA(CFLAG:(CHARA_ID):触手Ａ産卵実行者)
	獲得魔術経験値 = 出産回数 * 4 + 能力値補正 / 3 + CFLAG:(CHARA_ID):Ａ妊娠期間

	IF 触手産卵実行者ID >= 0 && TALENT:触手産卵実行者ID:魔術師
		PRINTFORML <%ANAME(触手産卵実行者ID)%>
		CALL PRINT_ADD_EXP(触手産卵実行者ID, "魔術経験値", 獲得魔術経験値)
		CALL TRAIN_AUTO_ABLUP(触手産卵実行者ID)
	ENDIF

	PRINTFORML 触手の産卵とともに母体外に排出された残滓から、有用な物質を回収した……
	CALL QST_CHANGE_ITEM(@"{ITEM_魔獣の肉片},{(獲得魔術経験値 / 8) * (MAX(1, CFLAG:(CHARA_ID):Ａ妊娠期間))},", 0)
	CALL QST_CHANGE_ITEM(@"{ITEM_精液},{(獲得魔術経験値 / 5) * (MAX(1, CFLAG:(CHARA_ID):Ａ妊娠期間))},", 0)
	IF C_COND("素質:母乳体質",,CHARA_ID)
		CALL QST_CHANGE_ITEM(@"{ITEM_乳},{(獲得魔術経験値 / 5) * (MAX(1, CFLAG:(CHARA_ID):Ａ妊娠期間))},", 0)
	ENDIF

	PRINTW

	TALENT:(CHARA_ID):Ａ触手妊娠 = 0
	CFLAG:(CHARA_ID):Ａ妊娠期間 = 0
	CFLAG:(CHARA_ID):触手Ａ産卵実行者 = 0
ENDIF
; #endregion

;-------------------------------------------------
; Ｕ触手出産
;-------------------------------------------------
@TURNEND_PREGNANT_CHECK_SYOKUSYU_U(CHARA_ID)
; #region
#DIM DYNAMIC 触手産卵実行者ID
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC 出産回数
#DIM DYNAMIC 獲得魔術経験値
#DIM DYNAMIC 崩壊度
#DIM DYNAMIC 崩壊度補正
#DIM DYNAMIC 能力値補正

IF CFLAG:(CHARA_ID):触手Ｕ産卵実行者
	IF CFLAG:(CHARA_ID):Ｕ妊娠期間 < (C_COND("素質:苗床",, CHARA_ID) ? 4 # 6)
		CFLAG:(CHARA_ID):Ｕ妊娠期間 ++
		RETURN
	ENDIF
	SETCOLOR カラー_注意
	PRINTFORMW %ANAME(CHARA_ID)%に産み付けられた触手の子供は、瞬く間に大きく育ち%ANAME(CHARA_ID)%のお腹から這い出そうとしています
	SIF GETBIT(TALENT:(CHARA_ID):淫乱系, 素質_淫乱_苗床)
		PRINTFORMW 苗床と化した%ANAME(CHARA_ID)%は、触手の子を産み出せることにこの上ない悦びを覚えているようだ……
	RESETCOLOR
	PRINTL

	;口上の表示
	CALL KOJO_EVENT(CHARA_ID, 44)

	IF CFLAG:(CHARA_ID):触手Ｕ産卵実行者
		出産回数 = RAND:2 + 3
		能力値補正 = MIN(ABL:(CHARA_ID):Ａ感, 25) * 出産回数 * LIMIT(ABL:(CHARA_ID):触手 * 50 + EXP:(CHARA_ID):Ｕ開発経験, 50, 200) / 100
		CALL FUCK(CHARA_ID, "Ｕ, 触手")
	ENDIF

	PRINTL
	PRINTFORML <%ANAME(CHARA_ID)%>
	CALL PRINT_ADD_EXP(CHARA_ID, "出産経験", 1)
	CALL PRINT_ADD_EXP(CHARA_ID, "触手出産経験", 出産回数)
	CALL TRAIN_AUTO_ABLUP(CHARA_ID)
	PRINTL
	PRINTL

	;妊娠履歴の記録
	CALL REFRESH_PREGNANT_RECORD(CHARA_ID, GET_SPERM_ID("触手"), 出産回数)

	;嫌悪要素
	IF ABL:(CHARA_ID):出産 < 3 && ABL:(CHARA_ID):触手 < 3
		崩壊度 += 1600
		崩壊度補正 = 1
	ENDIF

	;苦痛要素
	IF CFLAG:(CHARA_ID):触手Ｕ産卵実行者 >= 1 && ABL:(CHARA_ID):Ａ感 < 5
		崩壊度 += 900 + 崩壊度補正 * 1200
	ELSE
		崩壊度 += 600 + 崩壊度補正 * 800
	ENDIF

	CFLAG:(CHARA_ID):崩壊 += 崩壊度

	触手産卵実行者ID = ID_TO_CHARA(CFLAG:(CHARA_ID):触手Ｕ産卵実行者)
	獲得魔術経験値 = 出産回数 * 4 + 能力値補正 / 3 + CFLAG:(CHARA_ID):Ｕ妊娠期間

	IF 触手産卵実行者ID >= 0 && TALENT:触手産卵実行者ID:魔術師
		PRINTFORML <%ANAME(触手産卵実行者ID)%>
		CALL PRINT_ADD_EXP(触手産卵実行者ID, "魔術経験値", 獲得魔術経験値)
		CALL TRAIN_AUTO_ABLUP(触手産卵実行者ID)
	ENDIF

	PRINTFORML 触手の産卵とともに母体外に排出された残滓から、有用な物質を回収した……
	CALL QST_CHANGE_ITEM(@"{ITEM_魔獣の肉片},{(獲得魔術経験値 / 8) * (MAX(1, CFLAG:(CHARA_ID):Ｕ妊娠期間))},", 0)
	CALL QST_CHANGE_ITEM(@"{ITEM_精液},{(獲得魔術経験値 / 5) * (MAX(1, CFLAG:(CHARA_ID):Ｕ妊娠期間))},", 0)
	IF C_COND("素質:母乳体質",,CHARA_ID)
		CALL QST_CHANGE_ITEM(@"{ITEM_乳},{(獲得魔術経験値 / 5) * (MAX(1, CFLAG:(CHARA_ID):Ｕ妊娠期間))},", 0)
	ENDIF

	PRINTW

	TALENT:(CHARA_ID):Ｕ触手妊娠 = 0
	CFLAG:(CHARA_ID):Ｕ妊娠期間 = 0
	CFLAG:(CHARA_ID):触手Ｕ産卵実行者 = 0
ENDIF
; #endregion


code:
;調教中のEQUIP表示(服装やエロアイテム装備など)

;-------------------------------------------------
;EQUIPの状況を表示する関数
;-------------------------------------------------
@SHOW_EQUIP
#DIM SHOW
FOR LOCAL:0, 0, MEQUIP_NUM
	RESULTS =

	;★
	;PRINTFORML 継続メッセージ 配列番号={LOCAL:0} MEQUIP={MEQUIP:(LOCAL:0)} PN={MEQUIP_PLAYER_NUM:(LOCAL:0)} TN={MEQUIP_TARGET_NUM:(LOCAL:0)}
	;PRINTFORMW                P1={MEQUIP_PLAYER:(LOCAL:0):0} T1={MEQUIP_TARGET:(LOCAL:0):0}

	;継続メッセージをRESULTSに取得
	TRYCALLFORM EQUIP_MESSAGE{MEQUIP:(LOCAL:0)}(LOCAL:0)

	SHOW = !FLAG:継続コマンド表示絞り込み
	IF !SHOW
		FOR LOCAL:1, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
			IF MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1) == FLAG:継続コマンド表示絞り込み選択中キャラ
				SHOW = 1
				GOTO FOUND
			ENDIF
		NEXT
		FOR LOCAL:1, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
			IF MEQUIP_TARGET:(LOCAL:0):(LOCAL:1) == FLAG:継続コマンド表示絞り込み選択中キャラ
				SHOW = 1
				GOTO FOUND
			ENDIF
		NEXT

	ENDIF
	$FOUND
	;IF !(IS_PARTICIPATE_TRAIN(MEQUIP_PLAYER:(LOCAL:0):(LOCAL:1))) || !(IS_PARTICIPATE_TRAIN(MEQUIP_TARGET:(LOCAL:0):(LOCAL:1)))
	;SHOW = 0
	;ENDIF
	IF SHOW && RESULTS != ""
		PRINTPLAINFORM %RESULTS, 50, LEFT%

		;逆調教中は解除不可
		[IF_DEBUG]
		PRINTFORML [{LOCAL:0 + 6000}] 解除
		[ENDIF]
		[IF_NDEBUG]
		IF GROUPMATCH(FLAG:調教モード, 4, 5, 7)
			SETCOLOR カラー_選択不可
			PRINTPLAINFORM [{LOCAL:0 + 6000}] 解除
			RESETCOLOR
		ELSE
			PRINTFORM [{LOCAL:0 + 6000}] 解除
		ENDIF
		PRINTL
		[ENDIF]

		[IF_DEBUG]
		IF !FLAG:調教中表示簡略化
			VARI CHARA_IDX
			RESULTS =    実行者:
			FOR CHARA_IDX, 0, MEQUIP_PLAYER_NUM:(LOCAL:0)
				IF MEQUIP_PLAYER:(LOCAL:0):CHARA_IDX == -1
					RESULTS += "不明"
				ELSE
					RESULTS += @"%ANAME(MEQUIP_PLAYER:(LOCAL:0):CHARA_IDX)%"
				ENDIF
				SIF CHARA_IDX != MEQUIP_PLAYER_NUM:(LOCAL:0) -1
					RESULTS += ", "
			NEXT
			PRINTPLAINFORM %RESULTS, 60, LEFT%
			PRINTL
			RESULTS =    対象者:
			FOR CHARA_IDX, 0, MEQUIP_TARGET_NUM:(LOCAL:0)
				IF MEQUIP_TARGET:(LOCAL:0):CHARA_IDX == -1
					RESULTS += "不明"
				ELSE
					RESULTS += @"%ANAME(MEQUIP_TARGET:(LOCAL:0):CHARA_IDX)%"
				ENDIF
				SIF CHARA_IDX != MEQUIP_TARGET_NUM:(LOCAL:0) -1
					RESULTS += ","
			NEXT
			PRINTPLAINFORM %RESULTS, 60, LEFT%
			PRINTL
		ENDIF
		[ENDIF]
	ENDIF
NEXT

;-------------------------------------------------
;挿入中の体位を示す変数(ARG:0)を文字列に変換する関数
;-------------------------------------------------
@TOSTR_INSERT_STATE(ARG:0)
#FUNCTIONS
SELECTCASE ARG:0
	CASE 1
		RETURNF "正常位"
	CASE 2
		RETURNF "後背位"
	CASE 3
		RETURNF "対面座位"
	CASE 4
		RETURNF "背面座位"
	CASE 5
		RETURNF "騎乗位"
ENDSELECT
RETURNF "----"


code:
;調教中の情報表示

;-------------------------------------------------
;調教中の情報表示
;-------------------------------------------------
@FL_SHOW_STATUS
#DIMS _LIST_MEMBER
; #region SHOW_STATUS
;FLOWINPUTS 1
;FLOWINPUT -1, 1

VARI FIRST_LINE
FIRST_LINE = LINECOUNT

REDRAW 0

IF !FLCONFIG:処理実行後のログを消去しない
	CLEARLINE LINECOUNT
ENDIF

;ターン最初の変数の初期化
TFLAG:おまかせ中 = 0
TSTR:COM_SITUATION '= ""
TSTR:会話モード  '= ""
FOR LOCAL, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL)
		CALL C_COND_SET_INFO_TO_MAP(LOCAL, "SHOW_STATUS_TOP")
	ENDIF
NEXT

;体力気力を0～最大値の範囲に収める
CALL LIFE_LIMIT

;調教モードが切り替えられた場合は実行/対象をリセット
IF PREV_TRAINMODE != FLAG:調教モード
	CALL RESET_ACTOR()
ENDIF
PREV_TRAINMODE = FLAG:調教モード

;逆調教なら常時主人公をプレイヤーに
IF GROUPMATCH(FLAG:調教モード, 4, 5, 7)
	CALL CLEAR_MPLY()
	CALL CLEAR_MTAR()
	; SIF FLAG:調教モード != 7
	; 	CALL ADD_MPLY(MASTER)
ENDIF

;主導権を握っているキャラが疲労・失神・睡眠・離脱状態になっていれば主導権を解除
IF FLAG:主導権所有者 >= 0
	IF TCVAR:(FLAG:主導権所有者):行動不能フラグ || TCVAR:(FLAG:主導権所有者):失神フラグ || TCVAR:(FLAG:主導権所有者):離脱フラグ
		;観客は声援などで離脱中も主導権を握る場合がある
		IF TCVAR:(FLAG:主導権所有者):離脱フラグ != 離脱フラグ_観客
			FLAG:主導権所有者 = -1
		ENDIF
	ENDIF
ENDIF

;居住区モードの場合の処理
IF FLAG:調教モード == 調教_居住区 || FLAG:ハウジングモード == 1
	CALL HOUSING_INIT_PER_TURN
ENDIF

;表示に関する処理
;-------------------------------------------------

;FLの情報に関する表示
IF FLAG:調教モード == 調教_居住区 || FLAG:ハウジングモード == 1
	REDRAW 0
	CALL HOUSING_DRAW_GUI
	;時間などの情報を表示
	CALL SHOW_STATUS_SHOW_HOUSING_INFO_BAR
	;TODO 調教コマンドパネルの表示
	;CALL FL_COMMAND_PANEL()
ELSE
	REDRAW 0
ENDIF

;ポートレイト画像表示のヘッダ部分を表示
CALL SHOW_STATUS_SHOW_HOUSING_MEMBER_BAR
;キャラクター一覧(主人公除く)を取得
CALL GET_DISPLAY_MEMBER_LIST
_LIST_MEMBER = %RESULTS%
;キャラクターのポートレイト画像を表示
CALL HOUSING_SHOW_MEMBER(_LIST_MEMBER)
;キャラクター詳細を表示
IF FLAG:ハウジングモード
	CALL HOUSING_CHARAACT_DESC_MAIN
ENDIF
CALL COLOR_LINE

CALL TITLE_CATEGORY_GENERAL("現在の状態")
PRINTFORM %TOSTR_SPACE(34)%
IF FLAG:継続コマンド表示絞り込み
	PRINTBUTTON "[絞り込み:有効]", 5904
ELSE
	PRINTBUTTON "[絞り込み:無効]", 5904
ENDIF
PRINT
IF FLAG:調教中表示簡略化
	PRINTBUTTON "[表示:簡略]", 5903
ELSE
	PRINTBUTTON "[表示:詳細]", 5903
ENDIF
PRINTL

;奉仕モードの場合は奉仕状態を表示
IF TFLAG:奉仕モード > 0
	CALL SHOW_SERVICE_STATUS(_LIST_MEMBER)
ENDIF
;継続コマンドを表示
CALL SHOW_EQUIP
CALL COLOR_LINE

CALL SHOW_COMMAND

CALL COLOR_LINE

;逆調教または主人公が行動不能
; IF GROUPMATCH(FLAG:調教モード, 4, 5, 7) || !IS_PLAYABLE(MASTER)
; 	CALL TITLE_CATEGORY_GENERAL("キャラの情報")
; ELSE
; 	CALL TITLE_CATEGORY_GENERAL("現在の対象")
; ENDIF
; PRINTL

;逆調教
IF GROUPMATCH(FLAG:調教モード, 4, 5, 7)
	PRINTFORML %TOSTR_SPACE((MAX_CHARANAME_LENGTH/2) + 6)%%TOSTR_SPACE(48)%機嫌 体力%TOSTR_SPACE(9)%気力%TOSTR_SPACE(9)%    敏/鈍   状態
ELSEIF TFLAG:参加者数 >= 1
	PRINTFORML %TOSTR_SPACE((MAX_CHARANAME_LENGTH/2) + 4)%<主導権><実行>  <対象>%TOSTR_SPACE(19)%性感/処女%TOSTR_SPACE(20)%機嫌 体力%TOSTR_SPACE(9)%気力%TOSTR_SPACE(9)% 敏/鈍   状態
ELSE
	;;TODO:おそらくFLでは以下のUI表示は不要。問題ないことが確認できたら削除
	;会いに行く
	IF FLAG:調教モード == 0
		IF FLAG:ウフフフラグ
			PRINTFORML %TOSTR_SPACE((MAX_CHARANAME_LENGTH/2) + 6)%<主導権>%TOSTR_SPACE(50)%機嫌 酔い 体力%TOSTR_SPACE(9)%気力%TOSTR_SPACE(9)% 敏/鈍   状態
		ELSE
			PRINTFORML %TOSTR_SPACE((MAX_CHARANAME_LENGTH/2) + 6)%<主導権>%TOSTR_SPACE(50)%機嫌 酔い
		ENDIF
		;子育て
	ELSEIF FLAG:調教モード == 3
		PRINTFORML %TOSTR_SPACE((MAX_CHARANAME_LENGTH/2) + 6)%<主導権>%TOSTR_SPACE(50)%機嫌
	ELSE
		PRINTFORML %TOSTR_SPACE((MAX_CHARANAME_LENGTH/2) + 6)%<主導権>%TOSTR_SPACE(50)%機嫌 体力%TOSTR_SPACE(9)%気力%TOSTR_SPACE(9)% 敏/鈍   状態
	ENDIF
ENDIF

;対象キャラの選択コマンド
CALL SHOW_PARTICIPANT_SELECTOR

IF FLAG:調教モード != 調教_居住区
	SIF FLAG:ハウジングモード && !FLAG:クエストモード
		RETURN
	SIF FLAG:クエストモード && (!FLAG:ウフフフラグ || FLAG:クエスト_交流コマンド許可) && GROUPMATCH(FLAG:調教モード, 調教_クエスト, 調教_閨)
		RETURN
	CALL COLOR_LINE
	CALL TITLE_CATEGORY_GENERAL("現在の状況")

	;非ウフフ
	IF !FLAG:ウフフフラグ
		;ムード表示
		PRINT     ムード
		LOCAL:0 = MAX(0, TFLAG:ムード)
		LOCAL:1 = MAX(0, TFLAG:ムード - 60)
		SETCOLOR 0x00FF00
		FOR LOCAL:2, 0, 6
			IF LOCAL:0 / 10 > LOCAL:2
				PRINTFORM %UNICODE(0x2665)%
			ELSE
				PRINTFORM _
			ENDIF
		NEXT
		SETCOLOR 0xFF80FF
		FOR LOCAL:2, 0, 26
			IF LOCAL:1 / 10 > LOCAL:2
				PRINTFORM %UNICODE(0x2665)%
			ELSE
				PRINTFORM _
			ENDIF
		NEXT
		RESETCOLOR
		PRINTL
		PRINT
	ENDIF

	;残り時間表示
	PRINT   残り時間
	FOR LOCAL:0, 0, TFLAG:調教ターン数
		IF FLAG:ウフフフラグ
			SETCOLOR 0xFF8080
			;デートにより追加された時間(7番以降)は紫色で表示
		ELSEIF LOCAL:0 >= 7
			SETCOLOR 0xFF00FF
		ELSE
			SETCOLOR カラー_注意
		ENDIF
		IF TFLAG:調教経過時間 > LOCAL:0
			PRINT ★
		ELSE
			PRINT ☆
		ENDIF
		SIF LOCAL:0 != 0 && LOCAL:0 % 5 == 4
			PRINT |
	NEXT
	RESETCOLOR

ENDIF
PRINTL

REDRAW 1

;領内活動開始時のイベント
;;開始時に一度だけ実行
IF FLAG:調教モード == 調教_居住区 && !FLAG:領内活動開始時イベント実施済み
	;チュートリアルメッセージ
	CALL HOUSING_TUTORIAL()
	;領内活動開始時イベント呼び出し
	CALL HOUSING_START_EVENT()
	FLAG:領内活動開始時イベント実施済み = 1
ENDIF

@SHOW_STATUS_SHOW_HOUSING_INFO_BAR()

;マップを伴わないクエストならなにも表示しない
SIF QST_QUEST_TYPE == "DIALOGUE"
	RETURN 0

;朝昼晩の背景画像表示
SELECTCASE HO_TIME
	CASE HO_CLOCK(400) TO HO_CLOCK(1530)
		LOCALS '= "BG01"
	CASE HO_CLOCK(1500) TO HO_CLOCK(1859)
		LOCALS '= "BG02"
	CASEELSE
		LOCALS '= "BG03"
ENDSELECT
HTML_PRINT @"

", 1
LOCALS '= ""
IF FLAG:ハウジングモード
	LOCALS += @"季節:%HO_SEASON_STR:HO_SEASON()%　"
ENDIF
LOCALS += @"TIME:{HO_TIME / 60}:%TOSTR(HO_TIME % 60 ,"00")%　"
LOCALS += @"MONEY:%MONEY_FORMAT(MONEY)%"
LOCALS += "
"
LOCALS += @"現在地:%C_COND_MAP_GETS(MASTER, "エリア名")%　"
LOCALS += @"使用中の設備:%C_COND_MAP_GETS(MASTER, "設備名")%"
HTML_PRINT @"
%LOCALS%
", 1
PRINTL

CALL 画像描画終了
CALL DRAW_LINE("─", カラー_ダークグレー)

;-------------------------------------------------
;ポートレイト画像表示のヘッダ部分を表示
;-------------------------------------------------
@SHOW_STATUS_SHOW_HOUSING_MEMBER_BAR
CALL HO_CHARAACT_DESC()

CALL TITLE_CATEGORY_GENERAL("このエリアにいるキャラ")
CALLF TAG_PRINT(@"@C:{カラー_注釈}@[画像サイズ:@/C@")
FOR LOCAL, 0, VARSIZE("PORTRAIT_サイズ設定文字列")
	{
		CALLF TAG_PRINT(@"@B:{HO_画像サイズ切替ボタンID + LOCAL}@
			@C:{PORTRAIT_サイズ設定値 == LOCAL ? カラー_白 # カラー_選択不可}@
			\@PORTRAIT_サイズ設定値 == LOCAL ?☑ #☐\@
			%PORTRAIT_サイズ設定文字列:LOCAL%@/C@@/B@ ", 4)
	}
NEXT
CALLF TAG_PRINT(@"@C:{カラー_注釈}@]@/C@")

IF FLAG:ハウジングモード && !FLAG:クエストモード
	;BGM ON/OFF
	IF !FLCONFIG:サウンドを再生しない
		LOCALS = %HO_BGM_SWITCH ? "■" # "➡"%
		CALLF TAG_PRINT(@"@C:{カラー_注釈}@　[BGM:@B:{HO_BGMスイッチID}@%LOCALS%@/B@]@/C@", 4)
	ENDIF
ENDIF

PRINTL

;-------------------------------------------------
;奉仕状況を表示
;  引数: 対象キャラIDリスト
;-------------------------------------------------
@SHOW_SERVICE_STATUS(_LIST_MEMBER)
#DIMS _LIST_MEMBER
#DIMS DYNAMIC _LIST_SERVICE_PROVIDER
#DIMS DYNAMIC _LIST_SERVICE_RECEIVER
#DIMS SERVICE_PROVIDER_NAME
#DIMS SERVICE_RECEIVER_NAME
#DIMS SERVICE_TYPE
#DIM MEMBER_NUM
#DIM CHARA_ID

MEMBER_NUM = LIST_COUNT(_LIST_MEMBER)

;奉仕者リストを設定
IF TCVAR:MASTER:奉仕者フラグ > 0
	_LIST_SERVICE_PROVIDER = %LIST_ADD(_LIST_SERVICE_PROVIDER, TOSTR(MASTER))%
ENDIF
;被奉仕者リストを設定
IF TCVAR:MASTER:被奉仕者フラグ > 0
	_LIST_SERVICE_RECEIVER = %LIST_ADD(_LIST_SERVICE_RECEIVER, TOSTR(MASTER))%
ENDIF

;主人公以外の設定
FOR LOCAL, 0, MEMBER_NUM
	CHARA_ID = LIST_GETINT(_LIST_MEMBER, LOCAL)
	;主人公から視認不可能かつ調教非参加キャラは対象外(例:同部屋別設備の逢瀬など)
	CALL HO_IS_TARGET_VISIBLE(MASTER, CHARA_ID)
	SIF RESULT <= 0 && CFLAG:CHARA_ID:調教参加フラグ == 0
		CONTINUE

	;奉仕者リストを設定
	IF TCVAR:CHARA_ID:奉仕者フラグ > 0
		_LIST_SERVICE_PROVIDER = %LIST_ADD(_LIST_SERVICE_PROVIDER, TOSTR(CHARA_ID))%
	ENDIF
	;被奉仕者リストを設定
	IF TCVAR:CHARA_ID:被奉仕者フラグ > 0
		_LIST_SERVICE_RECEIVER = %LIST_ADD(_LIST_SERVICE_RECEIVER, TOSTR(CHARA_ID))%
	ENDIF
NEXT

;奉仕者名の設定
SELECTCASE LIST_COUNT(_LIST_SERVICE_PROVIDER)
	CASE 0
		RETURN 0
	CASE 1
		SERVICE_PROVIDER_NAME = %ANAME(LIST_GETINT(_LIST_SERVICE_PROVIDER,0))%
	CASE 2
		SERVICE_PROVIDER_NAME = %ANAME(LIST_GETINT(_LIST_SERVICE_PROVIDER,0))%と%ANAME(LIST_GETINT(_LIST_SERVICE_PROVIDER,1))%
	CASEELSE
		SERVICE_PROVIDER_NAME = %ANAME(LIST_GETINT(_LIST_SERVICE_PROVIDER,0),3)%
ENDSELECT

;被奉仕者名の設定
SELECTCASE LIST_COUNT(_LIST_SERVICE_RECEIVER)
	CASE 0
		SERVICE_RECEIVER_NAME '= ""
	CASE 1
		SERVICE_RECEIVER_NAME = %ANAME(LIST_GETINT(_LIST_SERVICE_RECEIVER,0))%に
	CASE 2
		SERVICE_RECEIVER_NAME = %ANAME(LIST_GETINT(_LIST_SERVICE_RECEIVER,0))%と%ANAME(LIST_GETINT(_LIST_SERVICE_RECEIVER,1))%に
	CASEELSE
		SERVICE_RECEIVER_NAME = %ANAME(LIST_GETINT(_LIST_SERVICE_RECEIVER,0),3)%に
ENDSELECT

;奉仕タイプの取得
SERVICE_TYPE = %GET_SERVICE_TYPE_NAME(TCVAR:(LIST_GETINT(_LIST_SERVICE_PROVIDER,0)):奉仕者フラグ)%

IF SERVICE_TYPE == ""
	LOCALS = %SERVICE_PROVIDER_NAME%が%SERVICE_RECEIVER_NAME%奉仕中
ELSE
	LOCALS = %SERVICE_PROVIDER_NAME%が%SERVICE_RECEIVER_NAME%%SERVICE_TYPE%で奉仕中
ENDIF

PRINTPLAINFORM %LOCALS, 60, LEFT%
PRINTL


code:
;-------------------------------------------------
;ソースの処理など
;-------------------------------------------------
@FL_SOURCE_CHECK
#DIM Ignore
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC ITER_I
#DIM DYNAMIC ITER_J
#DIM DYNAMIC 誰かが射精

;そのコマンドに対応する継続状態の処理を中断
FOR LOCAL:0, 0, MPLY_NUM
	FOR LOCAL:1, 0, MTAR_NUM
		;prevents chosen continuous action from stacking on an identical existing one
		;PRINTFORML CUTTING {SELECTCOM} WITH PLY {MPLY:0} AND TAR {MTAR:0}
		CALL RELEASE_EQUIP_EX(SELECTCOM, MPLY:(LOCAL:0), MTAR:(LOCAL:1))
	NEXT
NEXT

;調教参加キャラに対して口上出力時に参照する状態や属性の連想配列を作成する
FOR LOCAL, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL)
		CALL C_COND_SET_INFO_TO_MAP(LOCAL, "COM_BEFORE")
	ENDIF
NEXT

;コマンド実行時の地の文
CALL COM_TEXT_BEFORE

;コマンドを実行するにあたって干渉するコマンドを外す
;継続中コマンドと干渉する場合
IF COM_CONFLICT_FLAG:(SELECTCOM)
	RESULT = 0
	TRYCALLFORM COM_IS_EQUIP{SELECTCOM}
	;継続コマンドの場合はSET_EQUIP関数で干渉コマンドが解消される
	;IF RESULT > 0
	;CALL RELEASE_CONFLICT_COM(SELECTCOM)
	;CALL SET_EQUIP(SELECTCOM,,TFLAG:継続ロックフラグ)
	;単独コマンドの場合
	IF RESULT == 0
		;干渉コマンドを解除
		CALL RELEASE_CONFLICT_COM(SELECTCOM)
	ENDIF
ENDIF

Ignore = -1

;装着系アイテムや継続状態の開始および干渉コマンドの解除
TRYCCALLFORM SET_EQUIP{SELECTCOM}
CATCH
	CALL SET_EQUIP(SELECTCOM,,TFLAG:継続ロックフラグ)
ENDCATCH

;Single action selected in cancel mode(単発実行時)
;We had to put it in MEQUIP:0 to see what it conflicted with, but now we delete it (干渉コマンドを解除したので継続状態を解除する)
IF (RESULT == 0) && TFLAG:非継続フラグ
	CALL RELEASE_EQUIP(0, 1, 0)
	;continuing action in either mode
ELSE
	;record the action we just called COM_TEXT_BEFORE and SET_EQUIP on, and ignore it for the rest of this turn
	;装着した場合は装着物の連番を記録
	Ignore = RESULT
ENDIF

;装着系アイテムや継続状態の処理
FOR LOCAL:0, 0, MAX_MEQUIP
	;装着直後のコマンドは実行しない
	SIF (LOCAL == Ignore)
		CONTINUE
	IF MEQUIP:(LOCAL:0) >= 0
		TRYCALLFORM COM_EQUIP{MEQUIP:(LOCAL:0)}(LOCAL:0)
	ENDIF
NEXT

;EQUIPに対応する地の文
FOR LOCAL:0, 0, MAX_MEQUIP
	;装着直後のコマンドは実行しない
	IF (LOCAL == Ignore)
		CONTINUE
	ENDIF
	;地の文カットフラグが立っているなら表示しない
	IF MEQUIP:(LOCAL:0) >= 0 && !MEQUIP_CUT:(LOCAL:0)
		TRYCALLFORM COM_TEXT_BEFORE_EQUIP{MEQUIP:(LOCAL:0)}(LOCAL:0)
	ELSE
	ENDIF
NEXT

;同性の場合のソース補正
FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0)
		CALL SOURCE_SEX_CHECK(LOCAL:0)
	ENDIF
NEXT

;C_COND更新処理
FOR LOCAL, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL)
		CALL C_COND_SET_INFO_TO_MAP(LOCAL, "COM")
	ENDIF
NEXT

;コマンド実行時の口上
;CALL KOJO_COM
CALL KOJO_COM_NEW("MIDDLE")

;★コマンドによる体力の消費を0にする暫定措置
;CVARSET DOWNBASE, 0, 0

;●露出ソースの保存
FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0)
		SOURCE:(LOCAL:0):露出保存 = SOURCE:(LOCAL:0):露出
	ENDIF
NEXT

;●ペニバン装着時の快Ｐソースを快Ｃソースに変換
FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0) && !HAS_PENIS(LOCAL:0)
		SOURCE:(LOCAL:0):快Ｃ += SOURCE:(LOCAL:0):快Ｐ / 6
		SOURCE:(LOCAL:0):快Ｐ = 0
	ENDIF
NEXT

;射精先スタックの生成
CALL CREATE_STACK_SPERM_MAP()

;●主人のソース処理
;CALL SOURCE_CHECK_MASTER
IF IS_PARTICIPATE_TRAIN(MASTER)
	CALL SOURCE_CHECK_1(MASTER)
	CALL SOURCE_CHECK_2(MASTER)
ENDIF

;以下、MASTERは処理済みのため弾く

;●ターゲットのソース処理
;快楽系ソースと絶頂の処理
FOR LOCAL:0, 0, MTAR_NUM
	SIF MTAR:(LOCAL:0) != MASTER
		CALL SOURCE_CHECK_1(MTAR:(LOCAL:0))
NEXT

;快楽系以外のソースの処理
FOR LOCAL:0, 0, MTAR_NUM
	SIF MTAR:(LOCAL:0) != MASTER
		CALL SOURCE_CHECK_2(MTAR:(LOCAL:0))
NEXT

;●ターゲット以外のソース処理
FOR LOCAL:0, 0, CHARANUM
	IF LOCAL != MASTER && IS_PARTICIPATE_TRAIN(LOCAL:0) && !IS_MTAR(LOCAL:0)
		;居住区モードで情事を目撃していない場合ソース処理を行わない
		{
			IF FLAG:ハウジングモード == 1
				&& (FLAG:調教モード == 調教_居住区 || TFLAG:奉仕モード)
				&& !IS_MPLY(LOCAL:0)
		}
			CALL HO_CHECK_UFUFU(LOCAL:0)
			SIF !RESULT
				CONTINUE
		ENDIF
		;快楽系ソースと絶頂の処理
		CALL SOURCE_CHECK_1(LOCAL:0)
	ENDIF
NEXT

FOR LOCAL:0, 0, CHARANUM
	IF LOCAL != MASTER && IS_PARTICIPATE_TRAIN(LOCAL:0) && !IS_MTAR(LOCAL:0)
		;居住区モードで情事を目撃していない場合ソース処理を行わない
		{
			IF FLAG:ハウジングモード == 1
				&& (FLAG:調教モード == 調教_居住区 || TFLAG:奉仕モード)
				&& !IS_MTAR(LOCAL:0)
		}
			CALL HO_CHECK_UFUFU(LOCAL:0)
			SIF !RESULT
				CONTINUE
		ENDIF
		;快楽系以外のソースの処理
		CALL SOURCE_CHECK_2(LOCAL:0)
	ENDIF
NEXT

;ここまでMASTERを弾く

;絶頂表示を行った場合は改行
IF TFLAG:絶頂フラグ
	PRINTL
ENDIF

FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0)
		;ソース以外の変動処理
		CALL SOURCE_CHANGE_OTHER_STATUS(LOCAL:0)
		;C_COND更新処理
		CALL C_COND_SET_INFO_TO_MAP(LOCAL, "COM_AFTER")
	ENDIF
NEXT

LOCAL:10 = 0
;メッセージ表示
CALL COM_TEXT_AFTER

LOCAL:10 |= RESULT
IF LOCAL:10
	PRINTL
ENDIF

;パラメータ変動後の口上
;CALL KOJO_COM
CALL KOJO_COM_NEW("BOTTOM")

LOCAL:10 |= RESULT
IF LOCAL:10
	PRINTL
ENDIF

;各種経験の取得
FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0)
		CALL EXP_GOT_CHECK(LOCAL:0)
	ENDIF
NEXT

;テキストの表示
CALL COM_TEXT_LAST

;-------------------------------------------------
;ここで一度ウェイト
;-------------------------------------------------
PRINTW

FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0)
		CALL TRAIN_AUTO_ABLUP(LOCAL:0)
		CALL TALENT_CHECK(LOCAL:0)
		CALL CHECK_SEXUAL_PREFERENCE(LOCAL:0)
		;誰かが射精していたら効果音を鳴らす
		SIF NOWEX:LOCAL:射精 > 0
			誰かが射精 = 1
	ENDIF
NEXT
IF 誰かが射精
	CALL FL_PLAYSE(S_R("Ejac_0.mp3/Ejac_1.mp3/Ejac_3.mp3/Ejac_4.mp3"),, "SEX")
ENDIF

;搾精中の完了判定・実行処理
IF LIST_GET(FL_TRAIN_RESERVED_COM_NAME_LIST,0) == "搾精する"
	CALL TRAIN_SPERM_SQUEEZED
ENDIF

CALL COLOR_LINE
;-------------------------------------------------
; ポートレイト表示、パラメータ変動表示
;-------------------------------------------------
;ポートレイトの表示
LOCALS '= ""
FOR LOCAL, 0, MPLY_NUM
	LOCALS:1 '= ""
	IF IS_INITIATIVE(MPLY:LOCAL)
		LOCALS:1 '= @"@S:1@@C:{カラー_注釈}@<主導>@/C@@/S@"
	ELSE
		LOCALS:1 '= ""
	ENDIF
	IF LOCAL == 0
		LOCALS += TAG_PRINT_SHAPE(@"@C:{カラー_男}@<実行> @/C@%ANAME(MPLY:LOCAL)%%LOCALS:1%", PX_TO_STRLENSU(PORTRAIT_BASE_SIZEX), 1, 0)
	ELSE
		LOCALS += TAG_PRINT_SHAPE(@"%ANAME(MPLY:LOCAL)%%LOCALS:1%", PX_TO_STRLENSU(PORTRAIT_BASE_SIZEX + 10), 1, 0)
	ENDIF
	CALL HO_SET_PORTRAIT_SPRITE(MPLY:LOCAL, "コマンド実行後")
	CALL 画像セット_P((CSTR:(MPLY:LOCAL):キャラ顔グラ), 0, 10, PORTRAIT_BASE_SIZEX, PORTRAIT_BASE_SIZEY)
NEXT

;待機などあなたが一人で実行可能なコマンドは対象表示を省略する
IF IS_SOLO_PLAY()
ELSE
	IF MPLY_NUM > 0
		CALL 画像セット_P("DUMMY", 0, 0, 50, PORTRAIT_BASE_SIZEY)
		LOCALS += TAG_PRINT_SHAPE(@"→", PX_TO_STRLENSU(50), 1, 2)
	ENDIF
	FOR LOCAL, 0, MTAR_NUM
		LOCALS:1 '= ""
		IF IS_INITIATIVE(MTAR:LOCAL)
			LOCALS:1 '= @"@S:1@@C:{カラー_注釈}@<主導>@/C@@/S@"
		ELSE
			LOCALS:1 '= ""
		ENDIF
		IF LOCAL == 0
			;鑑賞者としてMTARに追加された場合
			IF C_COND("行動:鑑賞中",, MTAR:LOCAL) && TCVAR:(MTAR:LOCAL):調教一時参加扱い
				LOCALS += TAG_PRINT_SHAPE(@"@C:{カラー_女}@<対象> @/C@%ANAME(MTAR:LOCAL)%%LOCALS:1%@C:{カラー_注釈}@(鑑賞中)@/C@", PX_TO_STRLENSU(PORTRAIT_BASE_SIZEX), 1, 0)
			ELSE
				LOCALS += TAG_PRINT_SHAPE(@"@C:{カラー_女}@<対象> @/C@%ANAME(MTAR:LOCAL)%%LOCALS:1%", PX_TO_STRLENSU(PORTRAIT_BASE_SIZEX), 1, 0)
			ENDIF
		ELSE
			LOCALS += TAG_PRINT_SHAPE(@"%ANAME(MTAR:LOCAL)%%LOCALS:1%", PX_TO_STRLENSU(PORTRAIT_BASE_SIZEX + (PORTRAIT_BASE_SIZEX / 10)), 1, 0)
		ENDIF
		CALL HO_SET_PORTRAIT_SPRITE(MTAR:LOCAL, "コマンド実行後")
		CALL 画像セット_P((CSTR:(MTAR:LOCAL):キャラ顔グラ), 0, 10, PORTRAIT_BASE_SIZEX, PORTRAIT_BASE_SIZEY)
	NEXT
ENDIF
CALLF TAG_PRINT(LOCALS, 1)
CALL 画像一斉表示("LEFT", 0, 1)

;好感度・依存度・従属度の変動処理とその表示
; #region 好感度・依存度・従属度の変動処理
;-------------------------------------------------
SETCOLOR COLOR("シルバー")
VARI TARGET_ID
FOR CHARA_ID, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(CHARA_ID) && CHARA_ID != MASTER
		IF IS_MPLY(MASTER) || IS_MTAR(MASTER) || IS_INITIATIVE(MASTER)
			CALL LOVE_UP_CHECK_MASTER(CHARA_ID)
		ENDIF
		; 実行側の好感度処理
		IF IS_MPLY(CHARA_ID)
			FOR ITER_I, 0, MTAR_NUM
				CALL LOVE_UP_CHECK_ANOTHER(CHARA_ID, MTAR:ITER_I)
			NEXT
			;対象側の好感度処理
		ELSEIF IS_MTAR(CHARA_ID)
			FOR ITER_I, 0, MPLY_NUM
				CALL LOVE_UP_CHECK_ANOTHER(CHARA_ID, MPLY:ITER_I)
			NEXT
		ENDIF
	ENDIF
NEXT
PRINTL
; #endregion

SIF FLAG:調教中表示簡略化
	SKIPDISP 1

FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0)
		CALL PRINT_BASE_LOSE(LOCAL:0)
	ENDIF
NEXT
PRINTL

FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0)
		CALL PRINT_EXP_UP(LOCAL:0)
	ENDIF
NEXT

;調教ソースの表示
FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0)
		CALL SHOW_SOURCE(LOCAL:0)
	ENDIF
NEXT
SIF FLAG:調教中表示簡略化
	SKIPDISP 0

PRINTL

RESETCOLOR

IF FLAG:ハウジングモード
	CALL HO_COM_AFTER
ENDIF

;逆調教中なら機嫌を常にリセット
IF FLAG:調教モード == 4
	FOR LOCAL:0, 0, CHARANUM
		IF IS_PARTICIPATE_TRAIN(LOCAL:0)
			FOR LOCAL:1, 10, 16
				PALAM:(LOCAL:0):(LOCAL:1) = 0
			NEXT
		ENDIF
	NEXT
ENDIF

;MASTERは機嫌を0に
FOR LOCAL:0, 10, 16
	PALAM:MASTER:LOCAL = 0
NEXT

;疲労回復判定
FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0) && TCVAR:(LOCAL:0):行動不能フラグ
		;毎ターンの自然回復
		TCVAR:(LOCAL:0):疲労深度 -= 100 + TALENT:(LOCAL:0):回復早い * 50 - TALENT:(LOCAL:0):回復遅い * 50

		;疲労回復のソースによる回復
		TCVAR:(LOCAL:0):疲労深度 -= SOURCE:(LOCAL:0):疲労回復

		;疲労深度が0以下なら復帰
		IF TCVAR:(LOCAL:0):疲労深度 <= 0
			TCVAR:(LOCAL:0):行動不能フラグ = 0
			BASE:(LOCAL:0):体力 = MIN(MAX(BASE:(LOCAL:0):体力, 100) + MAX(MAXBASE:(LOCAL:0):体力 * MAX(RAND:10 + 25 - TCVAR:(LOCAL:0):体力上昇最大値 * 2, 5) / 100, 100), MAXBASE:(LOCAL:0):体力)
			CALL KOJO_EVENT(LOCAL:0, 19)
			SETCOLOR カラー_注意
			PRINTFORML %ANAME(LOCAL:0)%の疲労状態は落ち着いた！
			RESETCOLOR
			;1-1の捕虜調教中に主人公の体力が枯渇し、かつ逆調教が始まった場合、
			;ここでMPLYを再指定しなおさないと詰む
			IF LOCAL:0 == MASTER && FLAG:調教モード == 調教_捕虜調教 && TRAIN_GET_PARTICIPANT_COUNT() == 2
				CALL RESET_ACTOR()
			ENDIF
		ENDIF
	ENDIF
NEXT

FOR LOCAL:0, 0, CHARANUM
	CHARA_ID = LOCAL
	;気絶回復判定
	IF IS_PARTICIPATE_TRAIN(CHARA_ID) && TCVAR:(CHARA_ID):52
		;毎ターンの自然回復
		TCVAR:(CHARA_ID):23 -= 100 + TALENT:(CHARA_ID):回復早い * 50 - TALENT:(CHARA_ID):回復遅い * 50

		;絶頂による回復
		TCVAR:(CHARA_ID):23 -= SUM_NOWEX(CHARA_ID) * 50

		;苦痛のソースによる回復
		TCVAR:(CHARA_ID):23 -= SOURCE:(CHARA_ID):苦痛 / 2

		;気絶回復のソースによる回復
		TCVAR:(CHARA_ID):23 -= SOURCE:(CHARA_ID):気絶回復

		;気絶深度が0以下なら復帰
		IF TCVAR:(CHARA_ID):23 <= 0
			TCVAR:(CHARA_ID):52 = 0
			BASE:(CHARA_ID):気力 = MIN(MAX(BASE:(CHARA_ID):気力, 100) + MAX(MAXBASE:(CHARA_ID):気力 * MAX(RAND:10 + 25 - TCVAR:(CHARA_ID):22 * 2, 5) / 100, 100), MAXBASE:(CHARA_ID):気力)
			CALL KOJO_EVENT(CHARA_ID, 19)
			SETCOLOR カラー_注意
			IF SUM_NOWEX(CHARA_ID) >= 1
				IF SOURCE:(CHARA_ID):苦痛 >= 50
					PRINTFORML %ANAME(CHARA_ID)%は痛みと快感で無理やり意識を引き戻された！
				ELSE
					PRINTFORML %ANAME(CHARA_ID)%は激しい快感で意識を引き戻された！
				ENDIF
			ELSEIF SOURCE:(CHARA_ID):苦痛 >= 50
				PRINTFORML %ANAME(CHARA_ID)%は苦痛のあまり意識を引き戻された！
			ELSEIF SOURCE:(CHARA_ID):気絶回復 >= 50
				PRINTFORML %ANAME(CHARA_ID)%は無理やり意識を引き戻された！
			ELSE
				PRINTFORML %ANAME(CHARA_ID)%は意識を取り戻した！
			ENDIF
			RESETCOLOR
		ENDIF
	ENDIF
	;睡眠深度処理(目安は0で覚醒,10000で熟睡)
	IF IS_PARTICIPATE_TRAIN(CHARA_ID) && TCVAR:CHARA_ID:53 == 離脱フラグ_睡眠
		;絶頂による回復、射精と噴乳はＣＢ絶頂でカウントするので数えない
		TCVAR:CHARA_ID:睡眠深度 = MAX(0, TCVAR:CHARA_ID:睡眠深度 - MIN(3500, SUM_NOWEX(CHARA_ID) * 1000))

		;苦痛のソースによる回復
		TCVAR:CHARA_ID:睡眠深度 = MAX(0, TCVAR:CHARA_ID:睡眠深度 - SOURCE:CHARA_ID:苦痛 * 20)

		;睡眠深度が0以下なら復帰
		IF TCVAR:(CHARA_ID):睡眠深度 <= 0
			TCVAR:(CHARA_ID):53 = 0
			;目を覚ました時に酩酊以上の場合、ある程度酔いを覚ます
			IF IS_DRUNK(CHARA_ID) > 2
				PALAM:CHARA_ID:酔い = 6000
			ENDIF
			BASE:(CHARA_ID):気力 = MIN(MAX(BASE:(CHARA_ID):気力, 100) + MAX(MAXBASE:(CHARA_ID):気力 * MAX(RAND:10 + 25 - TCVAR:(CHARA_ID):22 * 2, 5) / 100, 100), MAXBASE:(CHARA_ID):気力)
			;CALL KOJO_EVENT(CHARA_ID, 19)
			SETCOLOR カラー_注意
			IF SUM_NOWEX(CHARA_ID) >= 1
				IF SOURCE:(CHARA_ID):苦痛 >= 50
					PRINTFORML %ANAME(CHARA_ID)%は痛みと快感のあまり飛び起きた！
				ELSE
					PRINTFORML %ANAME(CHARA_ID)%は激しい快感のあまり飛び起きた！
				ENDIF
			ELSEIF SOURCE:(CHARA_ID):苦痛 >= 50
				PRINTFORML %ANAME(CHARA_ID)%は苦痛のあまり飛び起きた！
			ELSE
				PRINTFORML %ANAME(CHARA_ID)%は目を覚ました！
			ENDIF
			RESETCOLOR
			;領内活動中なら起床イベント
			IF FLAG:ハウジングモード && !FLAG:クエストモード
				CALL HO_GET_UP_EVENT(LOCAL:0)
			ENDIF
		ELSEIF IS_MPLY(CHARA_ID) || IS_MTAR(CHARA_ID)
			LOCALS '= @"%COLOR_BAR_H(TCVAR:CHARA_ID:睡眠深度, 10000, 18, カラー_パステルブルー, カラー_青, カラー_ダークグレー, 0, "Z")%"
			HTML_PRINT @"　%ANAME(CHARA_ID)%の眠りの深さ：　%LOCALS%"
		ENDIF
	ENDIF
NEXT

;体力切れによる行動不能判定
FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0) && !TCVAR:(LOCAL:0):行動不能フラグ && !TCVAR:(LOCAL:0):離脱フラグ && BASE:(LOCAL:0):体力 <= 0
		WAIT
		PRINTL
		;捕虜調教かつターゲット場合
		IF FLAG:調教モード == 2 && LOCAL:0 != MASTER
			CALL KOJO_EVENT(LOCAL:0, 17)
			PRINTFORML %ANAME(LOCAL:0)%は疲れ果ててぐったりしている…
			;体力0による行動不能
			TCVAR:(LOCAL:0):行動不能フラグ = 1
			;逆調教で主人公の場合
		ELSEIF FLAG:調教モード == 4 && LOCAL:0 == MASTER
			PRINTFORML %ANAME(LOCAL:0)%は既に体力の限界だ…
			;体力0による行動不能
			TCVAR:(LOCAL:0):行動不能フラグ = 1
			;捕虜調教でない、あるいは捕虜調教でターゲットでない場合
		ELSE
			IF FLAG:調教モード == 2
				PRINTFORML %ANAME(LOCAL:0)%は疲れてしまい、これ以上調教を続けられそうにない…
				;体力0による行動不能
				TCVAR:(LOCAL:0):行動不能フラグ = 1
			ELSE
				CALL KOJO_EVENT(LOCAL:0, 11)
				PRINTFORML %ANAME(LOCAL:0)%は疲れ果ててぐったりしている…
				;体力0による行動不能
				TCVAR:(LOCAL:0):行動不能フラグ = 1
			ENDIF
		ENDIF
		;行動不能回数を加算
		TCVAR:(LOCAL:0):体力上昇最大値 ++
		;行動不能深度
		TCVAR:(LOCAL:0):疲労深度 = RAND:301 + 150 + TCVAR:(LOCAL:0):体力上昇最大値 * 100
		;行動不能になった時のEQUIP解除
		CALL DOWN_RELEASE_EQUIP(LOCAL:0)
	ENDIF
NEXT

;気力切れによる失神判定
FOR LOCAL:0, 0, CHARANUM
	IF IS_PARTICIPATE_TRAIN(LOCAL:0) && !TCVAR:(LOCAL:0):失神フラグ && !TCVAR:(LOCAL:0):離脱フラグ && BASE:(LOCAL:0):気力 <= 0
		WAIT
		PRINTL
		;捕虜調教かつターゲット場合
		IF FLAG:調教モード == 2 && LOCAL:0 != MASTER
			CALL KOJO_EVENT(LOCAL:0, 18)
			PRINTFORML %ANAME(LOCAL:0)%は快感のあまり気を失ってしまった…
			;逆調教で主人公の場合
		ELSEIF FLAG:調教モード == 4 && LOCAL:0 == MASTER
			PRINTFORML %ANAME(LOCAL:0)%は快感のあまり気を失ってしまった…
			;捕虜調教でない、あるいは捕虜調教でターゲットでない場合
		ELSE
			CALL KOJO_EVENT(LOCAL:0, 12)
			PRINTFORML %ANAME(LOCAL:0)%は快感のあまり気を失ってしまった…
			;調教参加キャラが１人の場合
			IF TFLAG:参加者数 == 1
				;行動不能になったのがプレイヤーなら行動側反転
				IF IS_MPLY(LOCAL:0)
					LOCAL:5 = MPLY:0
					LOCAL:6 = MTAR:0
					CALL CLEAR_MPLY
					CALL CLEAR_MTAR
					CALL ADD_MPLY(LOCAL:6)
					CALL ADD_MTAR(LOCAL:5)
				ENDIF
				;調教参加キャラが複数の場合
			ELSE
				;行動不能になったキャラをプレイヤーから外す
				CALL DEL_MPLY(LOCAL:0)
			ENDIF
		ENDIF
		;気力0による失神
		TCVAR:(LOCAL:0):失神フラグ = 1
		;気絶深度
		TCVAR:(LOCAL:0):気絶深度 = RAND:301 + 150 + TCVAR:(LOCAL:0):気絶回数 * 100
		;気絶回数を加算
		TCVAR:(LOCAL:0):気絶回数 ++
		;行動不能になった時のEQUIP解除
		CALL DOWN_RELEASE_EQUIP(LOCAL:0)
	ENDIF
NEXT

;催眠の場合の催眠解除判定
FOR LOCAL:0, 0, CHARANUM
	SIF !IS_PARTICIPATE_TRAIN(LOCAL) || TCVAR:LOCAL:催眠中 <= 0
		CONTINUE
	IF RAND:100 >= (TCVAR:LOCAL:催眠中 * 3) - MAX(ABL:MASTER:催眠 * 5 + ABL:LOCAL:催眠 * 5 + SQRT(EXP:LOCAL:被催眠経験)) + (SUM_NOWEX(LOCAL) / 5) - GETBIT(TALENT:LOCAL:淫乱系, 素質_淫乱_傀儡) * 30
		TCVAR:LOCAL:催眠中 ++
		TCVAR:LOCAL:催眠経過ターン数 ++
	ELSEIF TCVAR:LOCAL:催眠実行者 == MASTER
		CALL COLOR_PRINTL(@"%ANAME(LOCAL)%の催眠が解けてしまった！", カラー_注意)
		LOCAL:1 = MAX(TCVAR:LOCAL:催眠中 * 50 - MAX(ABL:MASTER:催眠 + ABL:LOCAL:催眠 / 2, 0) * 10, 0)
		CFLAG:LOCAL:好感度 -= LOCAL:1
		CFLAG:LOCAL:従属度 -= LOCAL:1
		CFLAG:LOCAL:依存度 -= LOCAL:1
		CFLAG:LOCAL:支配度 -= LOCAL:1
		TCVAR:LOCAL:催眠中 = -1
		TCVAR:LOCAL:催眠経過ターン数 = 0
	ELSE
		CALL COLOR_PRINTL(@"%ANAME(LOCAL)%の催眠が解けた！", カラー_注意)
		TCVAR:LOCAL:催眠中 = -1
		TCVAR:LOCAL:催眠経過ターン数 = 0
	ENDIF
NEXT

;離脱判定
FOR LOCAL:0, 0, CHARANUM
	;疲労中、気絶中は判定しない
	IF IS_PARTICIPATE_TRAIN(LOCAL:0) && !TCVAR:(LOCAL:0):行動不能フラグ && !TCVAR:(LOCAL:0):失神フラグ && !TCVAR:(LOCAL:0):離脱フラグ && !IS_ANIMAL(LOCAL:0)
		LOCALS:0 = %TOSTR_EMOTION(LOCAL:0)%

		;酔い限界
		IF PALAM:(LOCAL:0):酔い >= 10000 + MAX((ABL:(LOCAL:0):肝臓 - 5) * 1000, 0)
			WAIT
			PRINTL
			CALL KOJO_EVENT(LOCAL:0, 32)
			TCVAR:(LOCAL:0):離脱フラグ = 離脱フラグ_睡眠
			TCVAR:(LOCAL:0):睡眠深度 = 10000
			;EQUIP解除
			CALL RELEASE_EQUIP(LOCAL:0)
			;酔い潰れたキャラは実行者になれない
			CALL DEL_MPLY(LOCAL:0)
			;感情が「怒」「恨」で主人公に対して怒りを感じた場合(会いに行く・閨に呼ぶ・捕虜会話のとき、または捕虜調教でメインターゲットでない（助手である）とき)
		ELSEIF (LOCALS:0 == "怒" || LOCALS:0 == "恨") && CUP:(LOCAL:0):怒主 > 0 && (GROUPMATCH(FLAG:調教モード, 0, 1, 6) || (FLAG:調教モード == 2 && FINDELEMENT(PRISONER_TARGET, LOCAL:0) == -1))
			SIF CFLAG:(LOCAL:0):調教中帰らない
				CONTINUE
			SIF TALENT:(LOCAL:0):特殊勢力素質
				CONTINUE
			SIF IS_SP_COUNTRY(CFLAG:MASTER:所属) && CFLAG:(LOCAL:0):所属 == CFLAG:MASTER:所属 && GETBIT(TALENT:(LOCAL:0):特殊勢力陥落系, SP_COUNTRY_TO_CONST(CFLAG:MASTER:所属))
				CONTINUE
			IF IS_BIND(LOCAL:0)
				WAIT
				PRINTL
				;とりあえず50以上の身体でランダムで抜け出されることにしたが、もうすこしランダムの比重を減らしたい（さらに体力と気力も加えて計算するか）
				;縄を使用してた場合アイテムとしての縄が消滅するペナルティがあっても良いかもしれない
				IF ABL:(LOCAL:0):身体 > RAND(50, 200)
					SETCOLOR カラー_警告
					PRINTFORML %ANAME(LOCAL:0)%は拘束を引き裂いた
					RESETCOLOR
					;縄抜け判定失敗につき、離脱キャンセル
				ELSE
					SETCOLOR カラー_注意
					PRINTFORML %ANAME(LOCAL:0)%は拘束を解こうともがいている
					RESETCOLOR
					CONTINUE
				ENDIF
			ENDIF
			WAIT
			PRINTL
			PRINTFORMW %ANAME(LOCAL:0)%の怒りが限界に達したようだ
			IF FLAG:調教モード == 1 || TFLAG:デート場所 > 0
				CALL KOJO_EVENT(LOCAL:0, 15)
				TCVAR:(LOCAL:0):離脱フラグ = 5
			ELSE
				CALL KOJO_EVENT(LOCAL:0, 13)
				TCVAR:(LOCAL:0):離脱フラグ = 3
			ENDIF
			CALL DEL_MPLY(LOCAL:0)
			CALL DEL_MTAR(LOCAL:0)
			;EQUIP解除
			CALL RELEASE_ALL_EQUIP(LOCAL:0)
			;領内活動中なら同行解除
			IF FLAG:ハウジングモード && !FLAG:クエストモード
				CALL HO_GET_OUT_EVENT(LOCAL:0)
			ENDIF
			;感情が「悲」「鬱」で主人公に対して哀しみを感じた場合(会いに行く・閨に呼ぶ・捕虜会話のとき、または捕虜調教でメインターゲットでない（助手である）とき)
		ELSEIF (LOCALS:0 == "悲" || LOCALS:0 == "鬱") && CUP:(LOCAL:0):哀主 > 0 && (GROUPMATCH(FLAG:調教モード, 0, 1, 6) || (FLAG:調教モード == 2 && FINDELEMENT(PRISONER_TARGET, LOCAL:0) == -1))
			SIF CFLAG:(LOCAL:0):調教中帰らない
				CONTINUE
			SIF TALENT:(LOCAL:0):特殊勢力素質
				CONTINUE
			SIF IS_SP_COUNTRY(CFLAG:MASTER:所属) && CFLAG:(LOCAL:0):所属 == CFLAG:MASTER:所属 && GETBIT(TALENT:(LOCAL:0):特殊勢力陥落系, SP_COUNTRY_TO_CONST(CFLAG:MASTER:所属))
				CONTINUE
			SIF IS_BIND(LOCAL:0)
				CONTINUE
			WAIT
			PRINTL
			PRINTFORMW %ANAME(LOCAL:0)%の哀しみが限界に達したようだ
			IF FLAG:調教モード == 1 || TFLAG:デート場所 > 0
				CALL KOJO_EVENT(LOCAL:0, 16)
				TCVAR:(LOCAL:0):離脱フラグ = 6
			ELSE
				CALL KOJO_EVENT(LOCAL:0, 14)
				TCVAR:(LOCAL:0):離脱フラグ = 4
			ENDIF
			CALL DEL_MPLY(LOCAL:0)
			CALL DEL_MTAR(LOCAL:0)
			;EQUIP解除
			CALL RELEASE_ALL_EQUIP(LOCAL:0)
			;領内活動中なら同行解除
			IF FLAG:ハウジングモード && !FLAG:クエストモード
				CALL HO_GET_OUT_EVENT(LOCAL:0)
			ENDIF
		ENDIF
	ENDIF
NEXT

FOR ITER_I, 0, CHARANUM
	FOR ITER_J, 0, VARSIZE("NOWEX")
		PREV_EX:ITER_I:ITER_J = NOWEX:ITER_I:ITER_J
	NEXT
NEXT

;-------------------------------------------------
;主人公の快楽系ソースと射精・絶頂の処理を行う
;-------------------------------------------------
@SOURCE_CHECK_MASTER
;●ソースが上限値を超えた場合、上限値に修正
FOR LOCAL:0, 0, 100
	SOURCE:MASTER:(LOCAL:0) = LIMIT(SOURCE:MASTER:(LOCAL:0), 0, 100000000)
NEXT

;●ソースの計算(MASTER専用)
FOR LOCAL:0, 0, 100
	TRYCALLFORM CALC_SOURCE_MASTER{LOCAL:0}(MASTER)
NEXT

;●絶頂の処理
CALL SOURCE_ORGASM(MASTER)

;●PALAMにCUPの値を加える
;CUPCHECKだと表示面で不都合があるため、独自に処理
FOR LOCAL:0, 0, 100
	IF GROUPMATCH(LOCAL:0, 40)
		;潤滑はLv9まで
		LOCAL:1 = PALAMLV:9
	ENDIF

	;快感パラメータは独自処理(絶頂により低下)
	IF LOCAL:0 >= 0 && LOCAL:0 <= 9
		LOCAL:2 = PALAM:MASTER:(LOCAL:0)
		PALAM:MASTER:(LOCAL:0) = LIMIT(PALAM:MASTER:(LOCAL:0) + CUP:MASTER:(LOCAL:0) - 100000 * NOWEX:MASTER:(LOCAL:0), 0, 99999)

		IF LOCAL:0 <= 5
			;快感系の経験取得
			CALL ADD_EXP_SENSE(MASTER, LOCAL:0, LOCAL:2)
		ENDIF
		;パラメータ上昇量にキャップを掛ける
	ELSEIF PALAM:MASTER:(LOCAL:0) + CUP:MASTER:(LOCAL:0) > LOCAL:1
		PALAM:MASTER:(LOCAL:0) = LOCAL:1
	ELSE
		PALAM:MASTER:(LOCAL:0) += CUP:MASTER:(LOCAL:0)
	ENDIF
NEXT

IF NOWEX:MASTER:射精 >= 1
	;射精した場合潮吹きのPALAMを0に
	PALAM:MASTER:潮吹き = 0
ENDIF

;-------------------------------------------------
;ARG:0番のキャラについて、快楽系ソースと絶頂の処理を行う
;-------------------------------------------------
@SOURCE_CHECK_1(ARG:0)
;●ソースが上限値を超えた場合、上限値に修正
FOR LOCAL:0, 0, 100
	SOURCE:(ARG:0):(LOCAL:0) = LIMIT(SOURCE:(ARG:0):(LOCAL:0), 0, 100000000)
NEXT

;●快楽系ソースの計算
;快楽系(0～9)のみを計算
FOR LOCAL:0, 0, 10
	TRYCALLFORM CALC_SOURCE{LOCAL:0}(ARG:0)
NEXT

;●状況に応じたパラメータ上昇の補正
;FOR LOCAL:0, 0, 5
;	;異常経験による効果増加(異常経験1000で約1.5倍、10000で約6倍)
;	IF EXP:(ARG:0):デート経験 >= 1000000
;		CUP:(ARG:0):(LOCAL:0) = CUP:(ARG:0):(LOCAL:0) * (12 + (EXP:(ARG:0):デート経験 / 1000000 * 5 + 95) / 100)
;	ELSEIF EXP:(ARG:0):デート経験 >= 10000
;		CUP:(ARG:0):(LOCAL:0) = CUP:(ARG:0):(LOCAL:0) * (6 + (EXP:(ARG:0):デート経験 / 10000 * 5 + 95) / 100)
;	ELSEIF EXP:(ARG:0):デート経験 >= 100
;		CUP:(ARG:0):(LOCAL:0) = CUP:(ARG:0):(LOCAL:0) * (EXP:(ARG:0):デート経験 / 100 * 5 + 95) / 100
;	ENDIF
;NEXT

;●素質などによるパラメータ上昇の補正(快感系)
CALL UP_TALENT_CHECK1(ARG:0)

;領内活動の設備補正
IF FLAG:ハウジングモード
	CALL HOUSING_INTERIOR_EFFECT_SOURCE_CHECK1_BEFORE_ORGASM(ARG:0)
ENDIF

;●絶頂の処理
CALL SOURCE_ORGASM(ARG:0)

;領内活動の設備補正
IF FLAG:ハウジングモード
	CALL HOUSING_INTERIOR_EFFECT_SOURCE_CHECK1_AFTER_ORGASM(ARG:0)
ENDIF

;●ターゲット以外のキャラに感応のソースを追加する
;プレイヤーまたはターゲットなら欲情上昇量を記録
IF IS_MPLY(ARG:0) || IS_MTAR(ARG:0)
	TFLAG:欲情上昇量 += CUP:(ARG:0):欲情
	TFLAG:58 = MAX(SOURCE:(ARG:0):逸脱, TFLAG:58)

	;ターゲットが絶頂していた場合
	FOR LOCAL:0, 0, 6
		IF NOWEX:(ARG:0):(LOCAL:0) > 0
			TFLAG:絶頂数 += NOWEX:(ARG:0):(LOCAL:0)
			;ターゲットとしてとられ絶頂した場合、焦らされ度を減少させる
			TCVAR:(ARG:0):焦らされ度 = MAX(TCVAR:(ARG:0):焦らされ度 - ((NOWEX:(ARG:0):(LOCAL:0)) * 5), 0)
		ENDIF
	NEXT

	;プレイヤー・ターゲットでないなら記録した欲情上昇量に応じて感応・逸脱のソースを追加する(行動不能なら除く)
ELSEIF IS_PLAYABLE(ARG:0)
	IF TFLAG:欲情上昇量 >= 30000
		SOURCE:(ARG:0):感応 += 3000
		TCVAR:(ARG:0):焦らされ度 += RAND(15, 20)
	ELSEIF TFLAG:欲情上昇量 >= 10000
		SOURCE:(ARG:0):感応 += 1500
		TCVAR:(ARG:0):焦らされ度 += RAND(10, 15)
	ELSEIF TFLAG:欲情上昇量 >= 3000
		SOURCE:(ARG:0):感応 += 500
		TCVAR:(ARG:0):焦らされ度 += 8
	ELSEIF TFLAG:欲情上昇量 >= 500
		SOURCE:(ARG:0):感応 += 150
		TCVAR:(ARG:0):焦らされ度 += 6
	ELSEIF TFLAG:欲情上昇量 >= 100
		SOURCE:(ARG:0):感応 += 50
		TCVAR:(ARG:0):焦らされ度 += 3
	ENDIF
	SOURCE:(ARG:0):感応 += TFLAG:絶頂数 * 100
	SOURCE:(ARG:0):逸脱 += TFLAG:58 / 3
ENDIF

;麻薬つかってたら歓喜が入る
SIF TCVAR:(ARG:0):麻薬
	SOURCE:(ARG:0):歓喜 += 500

;-------------------------------------------------
;ARG:0番のキャラについて、快楽系以外のソースの処理を行う
;-------------------------------------------------
;気絶・睡眠中・催眠中は感情に関わるソースを全てゼロにする
@SOURCE_CHECK_2(ARG:0)
IF TCVAR:(ARG:0):失神フラグ || TCVAR:(ARG:0):離脱フラグ == 1 || TCVAR:(ARG:0):催眠中 > 0
	FOR LOCAL:0, 10, 40
		IF SOURCENAME:(LOCAL:0) != "苦痛"
			SOURCE:(ARG:0):(LOCAL:0) = 0
		ENDIF
	NEXT
	SOURCE:(ARG:0):欲情追加 = 0
ENDIF

;各ソースによるパラメータの変動量を計算(快楽系(0～9)は飛ばす)
FOR LOCAL:0, 10, 100
	TRYCALLFORM CALC_SOURCE{LOCAL:0}(ARG:0)
NEXT

;●性癖設定に応じたソースの追加
CALL ADD_SOURCE_TENDENCY(ARG:0)

;●素質などによるパラメータ上昇の補正(快感系以外)
CALL UP_TALENT_CHECK2(ARG:0)

;●デート場所によるパラメータ上昇の補正(快感系以外)
CALL UP_DATE_CHECK2(ARG:0)

;領内活動の設備補正
IF FLAG:ハウジングモード
	;コマンド実行後のエリア効果の更新
	CALL HO_ROOM_EFFECT_REMOVE_CHECK(HO_MASTER現在地)
	CALL HOUSING_INTERIOR_EFFECT_SOURCE_CHECK2(ARG:0)
ENDIF

;●欲望経験値の取得
;今回の欲情パラメータの増加量と絶頂回数が影響する
LOCAL:0 = MIN(CUP:(ARG:0):欲情 / ((ABL:(ARG:0):欲望 + 1) * (ABL:(ARG:0):欲望 + 1) * 100), 30)
EXP:(ARG:0):欲望経験値 += LOCAL:0

;●潤滑増加の処理
IF !IS_MALE(ARG:0)
	;快感による潤滑増加
	LOCAL:0 = (CUP:(ARG:0):0 + CUP:(ARG:0):1 + CUP:(ARG:0):2 + CUP:(ARG:0):3 + CUP:(ARG:0):4) / 5
	;快感パラメータの上昇が合計100以下なら潤滑は増加しない
	IF LOCAL:0 < 20
		LOCAL:0 = 0
	ENDIF

	;欲情上昇による潤滑の増加
	IF FLAG:ウフフフラグ
		;ウフフ中
		LOCAL:0 += CUP:(ARG:0):欲情 / 2
	ELSE
		;非ウフフ
		LOCAL:0 += CUP:(ARG:0):欲情 / 10
	ENDIF

	IF TALENT:(ARG:0):濡れやすい
		TIMES LOCAL:0, 2.50
	ENDIF
	IF TALENT:(ARG:0):濡れにくい
		TIMES LOCAL:0, 0.40
	ENDIF
	;男性・男の娘は少し濡れづらい
	;濡れやすいがある場合は除外
	IF GROUPMATCH(TALENT:(ARG:0):性別, 0, 4) && TALENT:(ARG:0):濡れやすい == 0
		TIMES LOCAL:0, 0.60
	ENDIF

	CUP:(ARG:0):潤滑 += LOCAL:0
ENDIF

;●失神or睡眠状態なら機嫌の変動量をゼロにする
IF TCVAR:(ARG:0):失神フラグ || TCVAR:(ARG:0):離脱フラグ == 1
	FOR LOCAL:0, 10, 16
		CUP:(ARG:0):(LOCAL:0) = 0
	NEXT
ENDIF

;●PALAMにCUPの値を加える
;CUPCHECKだと表示面で不都合があるため、独自に処理
FOR LOCAL:0, 0, 100
	IF GROUPMATCH(LOCAL:0, 40)
		;潤滑はLv9まで
		LOCAL:1 = PALAMLV:9
	ELSEIF GROUPMATCH(LOCAL:0, 10, 11, 12, 13, 14, 15)
		;機嫌は1000000まで
		LOCAL:1 = 1000000
	ELSE
		;それ以外はLv25まで
		LOCAL:1 = PALAMLV:25
	ENDIF

	;強制友好化ありなら補正
	IF CFLAG:(ARG:0):強制友好化 && GROUPMATCH(LOCAL, GETNUM(CUP, "怒主"), GETNUM(CUP, "哀主"), GETNUM(CUP, "怖主"), GETNUM(CUP, "怒外"), GETNUM(CUP, "哀外"), GETNUM(CUP, "怖外"))
		IF CUP:(ARG:0):(LOCAL:0) > 0
			CUP:(ARG:0):(LOCAL:0) = 0
		ELSEIF CUP:(ARG:0):(LOCAL:0) > -100
			CUP:(ARG:0):(LOCAL:0) += RAND(-20, 0)
		ENDIF
	ENDIF

	IF CFLAG:(ARG:0):凌辱被害者フラグ && GROUPMATCH(LOCAL, GETNUM(CUP, "怒主"), GETNUM(CUP, "哀主"), GETNUM(CUP, "怖主"), GETNUM(CUP, "怒外"), GETNUM(CUP, "哀外"), GETNUM(CUP, "怖外"))
		IF CUP:(ARG:0):(LOCAL:0) > 0
			CUP:(ARG:0):(LOCAL:0) += (CUP:(ARG:0):(LOCAL:0)) * 3
		ELSEIF CUP:(ARG:0):(LOCAL:0) < -5
			CUP:(ARG:0):(LOCAL:0) = RAND(-5, 0)
		ENDIF
	ENDIF

	;強制友好化ありなら補正
	;	SIF GROUPMATCH(LOCAL, GETNUM(CUP, "怒主"), GETNUM(CUP, "哀主"), GETNUM(CUP, "怖主"), GETNUM(CUP, "怒外"), GETNUM(CUP, "哀外"), GETNUM(CUP, "怖外"))
	;		PRINTFORML PALAM %PALAMNAME:(LOCAL)% : {CUP:(ARG:0):LOCAL}

	;快感パラメータは独自処理(絶頂により低下)
	IF LOCAL:0 >= 0 && LOCAL:0 <= 9
		LOCAL:2 = PALAM:(ARG:0):(LOCAL:0)
		PALAM:(ARG:0):(LOCAL:0) = LIMIT(PALAM:(ARG:0):(LOCAL:0) + CUP:(ARG:0):(LOCAL:0) - 100000 * NOWEX:(ARG:0):(LOCAL:0), 0, 99999)

		IF LOCAL:0 <= 5
			;快感系の経験取得
			CALL ADD_EXP_SENSE(ARG:0, LOCAL:0, LOCAL:2)
		ENDIF
		;パラメータ上昇量にキャップを掛ける
	ELSEIF PALAM:(ARG:0):(LOCAL:0) + CUP:(ARG:0):(LOCAL:0) > LOCAL:1
		PALAM:(ARG:0):(LOCAL:0) = LOCAL:1
	ELSE
		PALAM:(ARG:0):(LOCAL:0) += CUP:(ARG:0):(LOCAL:0)
	ENDIF
NEXT

IF NOWEX:(ARG:0):射精 >= 1
	;射精した場合潮吹きのPALAMを0に
	PALAM:(ARG:0):潮吹き = 0
ENDIF

;-------------------------------------------------
;調教ソースの表示
;-------------------------------------------------
@SHOW_SOURCE(ARG:0)
LOCAL:2 = 0
LOCAL:4 = 0
SETCOLOR COLOR("シルバー")
FOR LOCAL:0, 0, 100
	;SOURCEの並び設定を取得
	LOCAL:1 = GET_SORTED_SOURCE(LOCAL:0)
	IF LOCAL:1 >= 0 && SOURCE:(ARG:0):(LOCAL:1) > 0
		;Local:2 is flipped to 1 on the first nonzero source
		IF !LOCAL:2
			LOCAL:2 = 1
			PRINTFORM 　%ANAME(ARG:0), 16, LEFT%:
			LOCAL:4 = 10
		ENDIF

		LOCALS:0 = %SOURCENAME:(LOCAL:1)%({SOURCE:(ARG:0):(LOCAL:1)})
		LOCAL:4 += STRLENS(LOCALS:0) + 1
		PRINTFORM %LOCALS:0%
		IF LOCAL:4 >= 100
			PRINTL
			PRINT
			LOCAL:4 = 12
		ENDIF
	ENDIF
NEXT
IF LOCAL:2
	PRINTL
ENDIF
RESETCOLOR