code:
;--------------------------------------------------------
;@STR_BODY
;指定した部位についての描写を返す
;--------------------------------------------------------
@STR_BODY(ARGS , ARG)
#FUNCTIONS
#DIM 長さ
#DIMS 部位
#DIM 属性
#DIM 文末指定

文末指定 = 0

VARSET 長さ
VARSET 属性
VARSET 文末指定
VARSET LOCAL
VARSET LOCALS

属性 = FLAG_STRBODY(ARGS)
部位 = %RSELECT_STRBODY(ARGS)%

VARSET LOCALS

IF CHECK_STRBODY("長：短：処女確認", 属性)
	長さ = RAND(1, 3)
ELSEIF CHECK_STRBODY("長", 属性)
	長さ = 2
ELSEIF CHECK_STRBODY("短", 属性)
	長さ = 1
ENDIF

SELECTCASE 部位
	CASE "胸"
		IF IS_MALE(ARG)
			IF !CHECK_STRBODY("修飾", 属性)
				IF GROUPMATCH(TALENT:(ARG:0):体格, 体格_子供, 体格_小柄)
					LOCALS:0 = %SPLIT_R("胸")%
				ELSE
					LOCALS:0 = %SPLIT_R("胸：胸板")%
				ENDIF
			ENDIF
		ELSEIF 長さ == 0
			IF IS_PIERCED(ARG, ピアス_乳首) && CHECK_STRBODY("ピアス", 属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("ピアスで飾られている：ピアスの付いた")%
			ELSEIF IS_TATTOOED(ARG, タトゥー_胸) && CHECK_STRBODY("タトゥー", 属性)
				LOCALS:0 = %STR_BODY_MOD("タトゥー", ARG, 属性, "胸")%
			ELSEIF CHECK_STRBODY("感度", 属性)
				SELECTCASE ABL:(ARG:0):Ｂ感 + TALENT:(ARG:0):Ｂ敏感 * 5 - TALENT:(ARG:0):Ｂ鈍感 * 5 + GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫乳) * 15
					CASE IS > 30
						LOCALS:0 = %LOCALS:0%%SPLIT_R("異常な感度の：快感に逆らえない：調教されつくした")%
					CASE IS > 20
						LOCALS:0 = %LOCALS:0%%SPLIT_R("過敏すぎる：快感に弱い：弱点そのものの")%
					CASE IS > 10
						LOCALS:0 = %LOCALS:0%%SPLIT_R("感度の良すぎる：刺激に弱い：弱点の")%
					CASE IS > 4
						LOCALS:0 = %LOCALS:0%%SPLIT_R("感じやすい：刺激に敏感な：反応のいい：性感帯の")%
					CASE IS > 1
						LOCALS:0 = %LOCALS:0%%SPLIT_R("開発途中の：感度の良い")%
				ENDSELECT
			ELSEIF (CHECK_STRBODY("精液汚れ", 属性) || CUM_CUR_AMOUNT:ARG:射精部位_胸 ) && !RAND:2
				IF CHECK_STRBODY("輪姦", 属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("精液まみれの：白濁まみれの：白く染まった")%
				ELSE
					LOCALS:0 = %LOCALS:0%%SPLIT_R("精液で汚れた：白濁で汚れた：ザーメンの滴る：白濁が糸を引く")%
				ENDIF
			ELSEIF CHECK_STRBODY("性交", 属性)
				IF GET_BUSTSIZE(ARG:0) >= 2
					IF CHECK_STRBODY_OR("騎乗位：背面騎乗位：背面座位", 属性) && !RAND:2
						LOCALS:0 = %LOCALS:0%%SPLIT_R("上下に弾む：上下に暴れる：跳ね回る：大きく弾む")%
					ELSE
						LOCALS:0 = %LOCALS:0%%SPLIT_R("激しく揺れる：ぶるぶると弾む：ゆさゆさと揺れる：ぶるんぶるんと暴れる：跳ね回る")%
					ENDIF
				ELSEIF GET_BUSTSIZE(ARG:0) == 1
					IF CHECK_STRBODY_OR("騎乗位：背面騎乗位：背面座位", 属性) && !RAND:2
						LOCALS:0 = %LOCALS:0%%SPLIT_R("上下に弾む：跳ね回る：大きく弾む")%
					ELSE
						LOCALS:0 = %LOCALS:0%%SPLIT_R("揺れる：激しく揺れる：ぶるぶると弾む：ゆさゆさと揺れる")%
					ENDIF
				ELSEIF GET_BUSTSIZE(ARG:0) == -1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("震える：ふるふると震える：ぷるぷると揺れる")%
				ELSEIF GET_BUSTSIZE(ARG:0) != -2
					IF CHECK_STRBODY_OR("騎乗位：背面騎乗位：背面座位", 属性) && !RAND:2
						LOCALS:0 = %LOCALS:0%%SPLIT_R("上下に弾む")%
					ELSE
						LOCALS:0 = %LOCALS:0%%SPLIT_R("揺れる：ぷるぷると揺れる")%
					ENDIF
				ENDIF
			ENDIF
			IF CHECK_STRBODY("愛撫", 属性) && !RAND:2
				IF GET_BUSTSIZE(ARG:0) >= 2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("手に収まらないほどの：抱えるほどの")%%STR_BODY_MOD("胸＿末尾", ARG, 属性)%
				ELSEIF GET_BUSTSIZE(ARG:0) == 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("手から零れるほどの")%%STR_BODY_MOD("胸＿末尾", ARG, 属性)%
				ELSEIF GET_BUSTSIZE(ARG:0) == -1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("手にすっぽり収まる")%%STR_BODY_MOD("胸＿末尾", ARG, 属性)%
				ELSEIF GET_BUSTSIZE(ARG:0) == 0
					LOCALS:0 = %LOCALS:0%%SPLIT_R("手ごろな大きさの")%%STR_BODY_MOD("胸＿末尾", ARG, 属性)%
				ENDIF
			ELSEIF CHECK_STRBODY("感触", 属性)
				IF GET_BUSTSIZE(ARG:0) > 0
					LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな：吸い付くような：重量感のある：むっちりとした：もっちりとした：餅のように柔らかな：マシュマロのような")%%STR_BODY_MOD("胸＿末尾", ARG, 属性, "短")%
				ELSEIF GET_BUSTSIZE(ARG:0) == -1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな：張りのある：脂肪の薄い：ふにふにした")%%STR_BODY_MOD("胸＿末尾", ARG, 属性, "短")%
				ELSEIF GET_BUSTSIZE(ARG:0) == -2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("膨らみの感じられない：脂肪の薄い")%%STR_BODY_MOD("胸＿末尾", ARG, 属性, "短")%
				ELSE
					LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな")%%STR_BODY_MOD("胸＿末尾", ARG, 属性, "短")%
				ENDIF
			ELSE
				LOCALS:0 = %LOCALS:0%%STR_BODY_MOD("胸＿末尾", ARG, 属性)%
			ENDIF
		ELSE
			IF 長さ > 1
				IF CHECK_STRBODY("性交", 属性) && !RAND:2
					IF GET_BUSTSIZE(ARG:0) >= 2
						IF CHECK_STRBODY_OR("騎乗位：背面騎乗位：背面座位", 属性) && !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("突き上げに合わせて揺れる：派手に上下する：上下に暴れ回る")%
						ELSEIF CHECK_STRBODY("後背位", 属性) && !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("うつ伏せで潰れた：激しく前後に揺れる")%
						ELSEIF CHECK_STRBODY("対面座位", 属性) && !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("密着して潰れた：押し付けられて潰れた")%
						ELSE
							LOCALS:0 = %LOCALS:0%%SPLIT_R("抽挿に合わせて揺れる：ぶるんぶるんと暴れる：激しく跳ね回る：だぷんだぷんと跳ねる")%
						ENDIF
					ELSEIF GET_BUSTSIZE(ARG:0) == 1
						IF CHECK_STRBODY_OR("騎乗位：背面騎乗位：背面座位", 属性) && !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("突き上げに合わせて揺れる：派手に上下する")%
						ELSEIF CHECK_STRBODY("後背位", 属性) && !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("うつ伏せで潰れた：激しく前後に揺れる")%
						ELSEIF CHECK_STRBODY("対面座位", 属性) && !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("密着して潰れた：押し付けられて潰れた")%
						ELSE
							LOCALS:0 = %LOCALS:0%%SPLIT_R("抽挿に合わせて揺れる：ぶるんぶるんと暴れる：ゆさゆさと揺れる：激しく揺れる：派手に揺れる")%
						ENDIF
					ELSEIF GET_BUSTSIZE(ARG:0) == -1
						LOCALS:0 = %LOCALS:0%%SPLIT_R("抽挿に合わせて揺れる：ふるふると震える：ぷるぷると揺れる")%
					ELSEIF GET_BUSTSIZE(ARG:0) != -2
						IF CHECK_STRBODY_OR("騎乗位：背面騎乗位：背面座位", 属性) && !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("突き上げに合わせて揺れる：上下に弾む")%
						ELSEIF CHECK_STRBODY("後背位", 属性) && !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("前後に揺れる")%
						ELSEIF CHECK_STRBODY("対面座位", 属性) && !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("密着した：押し付けられた")%
						ELSE
							LOCALS:0 = %LOCALS:0%%SPLIT_R("抽挿に合わせて揺れる：ぷるぷると揺れる")%
						ENDIF
					ENDIF
				ELSEIF TALENT:(ARG:0):母乳体質 && !RAND:3
					LOCALS:0 = %SPLIT_R("母乳の染み出す：ミルクを蓄えた：母乳の滴る")%
				ENDIF
			ENDIF
			IF IS_PIERCED(ARG, ピアス_乳首) && (CHECK_STRBODY("ピアス", 属性) || 長さ > 1 && !RAND:5)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("ピアスで飾られている：ピアスの付いた")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
			ELSEIF IS_TATTOOED(ARG, タトゥー_胸) && !CHECK_STRBODY("性交", 属性) && 長さ > 1 && !RAND:5
				LOCALS:0 = %STR_BODY_MOD("タトゥー", ARG, 属性, "胸")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
			ELSEIF CHECK_STRBODY("感度", 属性) || !CHECK_STRBODY_OR("外見：感触", 属性) && CHECK_STRBODY_OR("愛撫", 属性) && (ABL:(ARG:0):Ｂ感 > 4 || TALENT:(ARG:0):Ｂ敏感) && !RAND:4
				IF ABL:(ARG:0):Ｂ感 == 0 && !TALENT:(ARG:0):Ｂ敏感
					LOCALS:0 = %LOCALS:0%%SPLIT_R("未開発の：開発されていない")%
				ELSE
					SELECTCASE ABL:(ARG:0):Ｂ感 + TALENT:(ARG:0):Ｂ敏感 * 5 - TALENT:(ARG:0):Ｂ鈍感 * 5 + GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫乳) * 15
						CASE IS > 30
							LOCALS:0 = %LOCALS:0%%SPLIT_R("淫らに開発されきった：異常な感度の：快感に逆らえない：調教されつくした")%
						CASE IS > 20
							LOCALS:0 = %LOCALS:0%%SPLIT_R("快楽を教え込まれた：過敏すぎる：快感に弱い：弱点そのものの")%
						CASE IS > 10
							LOCALS:0 = %LOCALS:0%%SPLIT_R("十分に開発された：感度の良すぎる：刺激に弱い：弱点の")%
						CASE IS > 4
							LOCALS:0 = %LOCALS:0%%SPLIT_R("快感を覚えた：感じやすい：刺激に敏感な：反応のいい")%
						CASE IS > 1
							LOCALS:0 = %LOCALS:0%%SPLIT_R("快感を覚えつつある：敏感な")%
					ENDSELECT
				ENDIF
				LOCALS:0 = %LOCALS:0%%STR_BODY_MOD("胸＿末尾", ARG, 属性)%
			ELSEIF CHECK_STRBODY("愛撫", 属性) && GET_BUSTSIZE(ARG:0) != -2 && !RAND:3
				IF GET_BUSTSIZE(ARG:0) >= 2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("手に収まらないほどの：抱えるほどの：指が深く沈み込む")%
				ELSEIF GET_BUSTSIZE(ARG:0) == 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("手から零れるほどの：手に合わせて歪む")%
				ELSEIF GET_BUSTSIZE(ARG:0) == -1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("手にすっぽり収まる")%
				ELSE
					LOCALS:0 = %LOCALS:0%%SPLIT_R("手ごろな大きさの")%
				ENDIF
				LOCALS:0 = %LOCALS:0%%STR_BODY_MOD("胸＿末尾", ARG, 属性, "短")%
			ELSEIF CHECK_STRBODY("接触", 属性) && !RAND:3 || CHECK_STRBODY("感触", 属性)
				IF GET_BUSTSIZE(ARG:0) > 0
					LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな：吸い付くような：重みのある：むっちりとした：もっちりとした：柔和な：マシュマロのような")%
				ELSEIF GET_BUSTSIZE(ARG:0) == -1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな：張りのある：脂肪の薄い：ふにふにした")%
				ELSEIF GET_BUSTSIZE(ARG:0) == -2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("膨らみの感じられない：脂肪の薄い")%
				ELSE
					LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな")%
				ENDIF
				LOCALS:0 = %LOCALS:0%%STR_BODY_MOD("胸＿末尾", ARG, 属性, "短")%
			ELSE
				IF GET_BUSTSIZE(ARG:0) == -2
					IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:3
						LOCALS:0 = %LOCALS:0%外見相応の%STR_BODY_MOD("胸＿末尾長", ARG, 属性, "長")%
					ELSEIF TALENT:(ARG:0):体格 == 体格_小柄 && !RAND:3
						LOCALS:0 = %LOCALS:0%まるで子供のような%STR_BODY_MOD("胸＿末尾長", ARG, 属性, "長")%
					ELSE
						LOCALS:0 = %SPLIT_R("何の起伏も無い：全くふくらみのない：起伏の存在しない")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性, "短")%
					ENDIF
				ELSEIF GET_BUSTSIZE(ARG:0) == -1
					IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:3
						LOCALS:0 = %LOCALS:0%外見相応の%STR_BODY_MOD("胸＿末尾長", ARG, 属性, "長")%
					ELSEIF TALENT:(ARG:0):体格 == 体格_小柄 && !RAND:3
						LOCALS:0 = %LOCALS:0%小柄な身体に見合った%STR_BODY_MOD("胸＿末尾長", ARG, 属性, "長")%
					ELSE
						LOCALS:0 = %LOCALS:0%%SPLIT_R("僅かに膨らんだ：なだらかに膨らんだ")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性, "短")%
					ENDIF
				ELSEIF GET_BUSTSIZE(ARG:0) == 1
					IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫乳) && !RAND:3
						LOCALS:0 = %LOCALS:0%淫らに成熟した%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSEIF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:3
						LOCALS:0 = %LOCALS:0%%SPLIT_R("幼さに見合わない：子供らしからぬ：身体に釣り合わない：発育のいい：大人顔負けの")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSEIF TALENT:(ARG:0):体格 == 体格_小柄 && !RAND:3
						LOCALS:0 = %LOCALS:0%%SPLIT_R("小柄な身体に見合わない")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSE
						IF !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("重量感のある：豊かに膨れた")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性, "短")%
						ELSE
							LOCALS:0 = %LOCALS:0%%SPLIT_R("たわわに実った：存在感のある")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
						ENDIF
					ENDIF
				ELSEIF GET_BUSTSIZE(ARG:0) == 2
					IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫乳) && !RAND:3
						LOCALS:0 = %LOCALS:0%淫らに成熟した%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSEIF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:3
						LOCALS:0 = %LOCALS:0%%SPLIT_R("幼さに見合わない：子供らしからぬ：身体に釣り合わない：発育の良すぎる：大人顔負けの")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSEIF TALENT:(ARG:0):体格 == 体格_小柄 && !RAND:3
						LOCALS:0 = %LOCALS:0%%SPLIT_R("小柄な身体に見合わない：身体に釣り合わない")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSE
						IF !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("重量感のある：まるで牛のような：溢れんばかりのサイズの：並外れたサイズの：はちきれそうな：顔が収まる程の")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性, "短")%
						ELSE
							LOCALS:0 = %LOCALS:0%%SPLIT_R("たわわに実った")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
						ENDIF
					ENDIF
				ELSEIF GET_BUSTSIZE(ARG:0) == 3
					IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫乳) && !RAND:3
						LOCALS:0 = %LOCALS:0%淫らに成熟した%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSEIF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:3
						LOCALS:0 = %LOCALS:0%%SPLIT_R("幼さに見合わない：子供らしからぬ：身体に釣り合わない：発育の良すぎる：大人顔負けの")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSEIF TALENT:(ARG:0):体格 == 体格_小柄 && !RAND:3
						LOCALS:0 = %LOCALS:0%%SPLIT_R("小柄な身体に見合わない：身体に釣り合わない")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSE
						IF !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("重量感のある：まるで牛のような：溢れんばかりのサイズの：並外れたサイズの：はちきれそうな：顔が収まる程の")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性, "短")%
						ELSE
							LOCALS:0 = %LOCALS:0%%SPLIT_R("たわわに実った")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
						ENDIF
					ENDIF
				ELSEIF GET_BUSTSIZE(ARG:0) == 4
					IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫乳) && !RAND:3
						LOCALS:0 = %LOCALS:0%淫らに成熟した%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSEIF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:3
						LOCALS:0 = %LOCALS:0%%SPLIT_R("幼さに見合わない：子供らしからぬ：身体に釣り合わない：発育の良すぎる：大人顔負けの")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSEIF TALENT:(ARG:0):体格 == 体格_小柄 && !RAND:3
						LOCALS:0 = %LOCALS:0%%SPLIT_R("小柄な身体に見合わない：身体に釣り合わない")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSE
						IF !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("重量感のある：まるで牛のような：溢れんばかりのサイズの：並外れたサイズの：はちきれそうな：顔が収まる程の")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性, "短")%
						ELSE
							LOCALS:0 = %LOCALS:0%%SPLIT_R("たわわに実った")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
						ENDIF
					ENDIF
				ELSE
					IF TALENT:(ARG:0):体格 == 体格_小柄 && !RAND:3
						LOCALS:0 = %LOCALS:0%小柄なわりに大きな%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ELSE
						LOCALS:0 = %LOCALS:0%%SPLIT_R("ほどよい大きさの：張りのある")%%STR_BODY_MOD("胸＿末尾長", ARG, 属性)%
					ENDIF
				ENDIF
			ENDIF
		ENDIF
	CASE "乳首"
		IF CHECK_STRBODY("感度", 属性)
			SELECTCASE ABL:(ARG:0):Ｂ感 + TALENT:(ARG:0):Ｂ敏感 * 5 - TALENT:(ARG:0):Ｂ鈍感 * 5 + GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫乳) * 15
				CASE IS > 30
					LOCALS:0 = %LOCALS:0%%SPLIT_R("異常な感度の：快感に逆らえない：調教されつくした")%
				CASE IS > 20
					LOCALS:0 = %LOCALS:0%%SPLIT_R("過敏すぎる：快感に弱い：弱点そのものの")%
				CASE IS > 10
					LOCALS:0 = %LOCALS:0%%SPLIT_R("感度の良すぎる：刺激に弱い：弱点の")%
				CASE IS > 4
					LOCALS:0 = %LOCALS:0%%SPLIT_R("感じやすい：刺激に敏感な：反応のいい：性感帯の")%
				CASE IS > 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("開発途中の：感度良好な")%
			ENDSELECT
		ELSEIF TALENT:(ARG:0):母乳体質 && !RAND:3
			LOCALS:0 = %LOCALS:0%%SPLIT_R("母乳の染み出す：ミルクを零す")%
		ELSEIF IS_PIERCED(ARG, ピアス_乳首) && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("ピアスで飾られている：ピアスの付いた")%
		ENDIF
		IF CHECK_STRBODY("媚薬", 属性) && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("発情した：火照った")%
		ELSEIF CHECK_STRBODY("欲情", 属性)
			LOCALS:0 = %LOCALS:0%%SPLIT_R("ツンと尖った：ビンビンになった：ピンと勃った：勃起した：硬くなった：硬くしこった：膨らんだ")%
		ENDIF
		SIF !CHECK_STRBODY("修飾", 属性)
			LOCALS:0 = %LOCALS:0%%SPLIT_R("乳首：乳頭")%
	CASE "尻", "尻肉"
		IF IS_MALE(ARG)
			SIF !CHECK_STRBODY("修飾", 属性)
				LOCALS:0 = %部位%
		ELSE
			IF (CHECK_STRBODY("タトゥー", 属性) || 長さ > 1 && !RAND:5) && IS_TATTOOED(ARG, タトゥー_尻)
				LOCALS:0 = %STR_BODY_MOD("タトゥー", ARG, 属性, "尻")%
			ELSEIF (CHECK_STRBODY("精液汚れ", 属性) || CUM_CUR_AMOUNT:ARG:射精部位_尻) && !RAND:3
				IF CHECK_STRBODY("輪姦", 属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("精液まみれの：白濁まみれの：白く染まった")%
				ELSE
					LOCALS:0 = %LOCALS:0%%SPLIT_R("精液の滴る：白濁で汚れた")%
				ENDIF
			ELSEIF CHECK_STRBODY("性交", 属性) && (長さ == 0 || !RAND:2)
				IF CHECK_STRBODY_OR("騎乗位：背面騎乗位", 属性)
					IF GET_HIPSIZE(ARG) >= 1
						LOCALS:0 = %LOCALS:0%%SPLIT_R("上下に跳ねる：上下する：波打つ：音を立てて跳ねる：派手に揺れる：貪るように跳ねる：激しく揺すられている：ぶるんぶるんと跳ねる：波打ちながら上下する")%
					ELSE
						LOCALS:0 = %LOCALS:0%%SPLIT_R("上下に跳ねる：上下する：揺れる：激しく揺すられている")%
					ENDIF
				ELSE
					IF GET_HIPSIZE(ARG) >= 1
						LOCALS:0 = %LOCALS:0%%SPLIT_R("波打つ：揺れる：震える：激しく揺れる")%
					ELSE
						LOCALS:0 = %LOCALS:0%%SPLIT_R("揺れる：震える")%
					ENDIF
				ENDIF
			ENDIF
			IF 部位 == "尻"
				IF 長さ == 0 || 長さ < 2 && !RAND:3
					IF RAND:3
						IF TALENT:ARG:体格 != 体格_子供 && !RAND:5
							LOCALS:0 = %LOCALS:0%%SPLIT_R("丸い")%
						ELSEIF TALENT:ARG:美尻
							LOCALS:0 = %LOCALS:0%%SPLIT_R("美しい：綺麗な：形のいい")%
						ELSEIF GET_HIPSIZE(ARG) >= 1
							LOCALS:0 = %LOCALS:0%%SPLIT_R("大きな：豊満な：安産型の")%
						ELSEIF TALENT:(ARG:0):体格 == 体格_子供
							LOCALS:0 = %LOCALS:0%%SPLIT_R("小さな：薄い：幼い")%
						ELSEIF TALENT:ARG:体格 == 体格_小柄
							LOCALS:0 = %LOCALS:0%%SPLIT_R("小さな")%
						ELSE
							LOCALS:0 = %LOCALS:0%%SPLIT_R("丸い")%
						ENDIF
					ENDIF
					SIF !CHECK_STRBODY("修飾", 属性)
						LOCALS:0 = %LOCALS:0%%SPLIT_R("尻：お尻")%
				ELSE
					IF !RAND:2
						IF !CHECK_STRBODY("外見", 属性) && !RAND:4 || CHECK_STRBODY("感触", 属性)
							IF TALENT:ARG:美尻
								LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな：滑らかな：張りのある" + CHECK_STRBODY_ADD("愛撫", 属性, "：手に吸い付くような"))%
							ELSEIF GET_HIPSIZE(ARG) >= 1
								LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな：もちもちとした" + CHECK_STRBODY_ADD("愛撫", 属性, "：手に余るほどの：たっぷりとした手応えの：揉み応えのある"))%
							ELSEIF TALENT:(ARG:0):体格 == 体格_子供
								LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな：張りのある")%
							ELSE
								LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな")%
							ENDIF
						ELSE
							IF TALENT:(ARG:0):体格 != 体格_子供 && !RAND:7
								LOCALS:0 = %LOCALS:0%%SPLIT_R("丸みを帯びた：ふっくらとした")%
							ELSEIF TALENT:ARG:美尻
								LOCALS:0 = %LOCALS:0%%SPLIT_R("綺麗な：形のいい：丸い：美しい：引き締まった：魅惑的な：美しいラインの：染み一つない：美しく形の整った")%
							ELSEIF GET_HIPSIZE(ARG) >= 1
								IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:4
									LOCALS:0 = %LOCALS:0%%SPLIT_R("発育の良すぎる：子供とは思えない")%
								ELSE
									LOCALS:0 = %LOCALS:0%%SPLIT_R("大きな：安産型の：丸い：豊満な：大きくふくらんだ：重量感のある：むっちりとした：はちきれそうな：たっぷりとした：たっぷりと肉のついた：むっちりと肉の乗った")%
								ENDIF
							ELSEIF TALENT:(ARG:0):体格 == 体格_子供
								LOCALS:0 = %LOCALS:0%%SPLIT_R("脂肪の薄い：発育途上の：未発達な：未成熟な：薄い")%
							ELSE
								LOCALS:0 = %LOCALS:0%%SPLIT_R("むっちりとした：丸みを帯びた：ふっくらとした")%
							ENDIF
						ENDIF
					ENDIF
					IF !CHECK_STRBODY("修飾", 属性)
						IF TALENT:(ARG:0):体格 == 体格_子供 && !GET_HIPSIZE(ARG) >= 1
							LOCALS:0 = %LOCALS:0%%SPLIT_R("小尻：尻：お尻")%
						ELSEIF TALENT:ARG:美尻 && !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("桃尻：美尻：尻：お尻")%
						ELSEIF GET_HIPSIZE(ARG) >= 1 && !RAND:2
							LOCALS:0 = %LOCALS:0%%SPLIT_R("桃尻：巨尻：デカ尻：尻：お尻")%
						ELSE
							LOCALS:0 = %LOCALS:0%%SPLIT_R("桃尻：尻：お尻")%
						ENDIF
					ENDIF
				ENDIF
			ELSE
				IF !CHECK_STRBODY("外見", 属性) && !RAND:3 || CHECK_STRBODY("感触", 属性)
					IF TALENT:ARG:美尻
						LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな：滑らかな：張りのある" + CHECK_STRBODY_ADD("愛撫", 属性, "：手に吸い付くような"))%
					ELSEIF GET_HIPSIZE(ARG) >= 1
						LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな：もちもちとした" + CHECK_STRBODY_ADD("愛撫", 属性, "：手に余るほどの：たっぷりとした手応えの：揉み応えのある"))%
					ELSEIF TALENT:(ARG:0):体格 == 体格_子供
						LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな：張りのある")%
					ELSE
						LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな")%
					ENDIF
				ELSEIF 長さ > 0
					IF TALENT:(ARG:0):体格 != 体格_子供 && !RAND:5
						LOCALS:0 = %LOCALS:0%%SPLIT_R("むっちりとした：柔らかな：ふっくらとした")%
					ELSEIF TALENT:ARG:美尻
						LOCALS:0 = %LOCALS:0%%SPLIT_R("美しい：張りのある：引き締まった：染み一つない：美しく形の整った")%
					ELSEIF GET_HIPSIZE(ARG) >= 1
						LOCALS:0 = %LOCALS:0%%SPLIT_R("豊かな：豊満な：大きくふくらんだ：重量感のある：むっちりとした：はちきれそうな：たっぷりとした：むっちりと肉の乗った")%
					ELSEIF TALENT:(ARG:0):体格 == 体格_子供
						LOCALS:0 = %LOCALS:0%%SPLIT_R("未発達な：薄い")%
					ELSE
						LOCALS:0 = %LOCALS:0%%SPLIT_R("むっちりとした：柔らかな：ふっくらとした")%
					ENDIF
				ELSE
					IF TALENT:ARG:美尻
						LOCALS:0 = %LOCALS:0%%SPLIT_R("美しい")%
					ELSEIF GET_HIPSIZE(ARG) >= 1
						LOCALS:0 = %LOCALS:0%%SPLIT_R("豊かな：豊満な")%
					ELSEIF TALENT:(ARG:0):体格 == 体格_子供
						LOCALS:0 = %LOCALS:0%%SPLIT_R("未発達な：薄い")%
					ELSE
						LOCALS:0 = %LOCALS:0%%SPLIT_R("柔らかな")%
					ENDIF
				ENDIF
				SIF !CHECK_STRBODY("修飾", 属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("尻肉")%
			ENDIF
		ENDIF
	CASE "膣"
		IF CHECK_STRBODY("処女確認", 属性) && VIRGIN(ARG)
			IF CHECK_STRBODY("時間経過", 属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("まだ生娘だった：男を知らなかった：清らかだった：誰にも使われたことがなかった：”女”にされた")%
			ELSE
				LOCALS:0 = %LOCALS:0%%SPLIT_R("まだ生娘の：男を知らない：まだ清らかな：誰にも使われたことのない：乙女のままの")%
			ENDIF
		ENDIF
		IF CHECK_STRBODY("感度", 属性)
			SELECTCASE ABL:(ARG:0):Ｖ感 + TALENT:(ARG:0):Ｖ敏感 * 5 - TALENT:(ARG:0):Ｖ鈍感 * 5 + GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫壷) * 15
				CASE IS > 30
					LOCALS:0 = %LOCALS:0%%SPLIT_R("異常な感度の：快感に逆らえない：調教されつくした")%
				CASE IS > 20
					LOCALS:0 = %LOCALS:0%%SPLIT_R("過敏すぎる：快感に弱い：弱点そのものの")%
				CASE IS > 10
					LOCALS:0 = %LOCALS:0%%SPLIT_R("感度の良すぎる：刺激に弱い：弱点の")%
				CASE IS > 4
					LOCALS:0 = %LOCALS:0%%SPLIT_R("感じやすい：刺激に敏感な：反応のいい")%
				CASE IS > 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("開発途中の：敏感な")%
			ENDSELECT
		ELSEIF CHECK_STRBODY("Ｖ挿入", 属性)
			IF CHECK_STRBODY("中出し", 属性)  || CUM_CUR_AMOUNT:ARG:射精部位_膣内
				IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫壷) || CHECK_STRBODY("欲情", 属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("夢中で精液を啜る：精液を飲み干そうと蠢く：搾り取るように収縮する")%
				ELSEIF !CHECK_STRBODY("絶頂", 属性) || !RAND:2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("たっぷりと種付けされた：白濁で埋め尽くされた")%
				ENDIF
			ELSEIF CHECK_STRBODY("絶頂", 属性)
				IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫壷) || CHECK_STRBODY("欲情", 属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("ペニスにしゃぶり付く：夢中で締め付ける：至福の絶頂を味わっている：イキっぱなしの")%
				ELSE
					LOCALS:0 = %LOCALS:0%%SPLIT_R("快感に震える：男根を締め上げる：激しく収縮する")%
				ENDIF
			ELSEIF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫壷) || CHECK_STRBODY("欲情", 属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("ペニスに夢中になっている：すっかり男根の虜になっている：快楽を貪る")%
			ENDIF
		ELSEIF CHECK_STRBODY("媚薬", 属性) && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("発情した：火照った")%
		ELSEIF CHECK_STRBODY("欲情", 属性)
			LOCALS:0 = %LOCALS:0%%SPLIT_R("濡れた：涎を零す")%
		ENDIF
		IF GET_INMOU_LEVEL(ARG) >= 1 && RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("毛の茂った：ふさふさの")%
		ELSEIF GET_INMOU_LEVEL(ARG) == -2 && RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("つるつるの：童女のような")%
		ENDIF
		IF !RAND:3
			SELECTCASE TALENT:(ARG:0):Ｖ締まり
				CASE IS < 締まり_崩壊
					LOCALS:0 = %LOCALS:0%%SPLIT_R("使い込まれた：使われすぎてぐずぐずの：グロテスクな：黒ずんだ花びらのハミ出た")%
				CASE IS >= 締まり_名器
					LOCALS:0 = %LOCALS:0%%SPLIT_R("よく締まる：締まりの良い：まさに名器の：極上の")%
				CASE 締まり_ゆるゆる TO 締まり_普通
					LOCALS:0 = %LOCALS:0%%SPLIT_R("緩くなった：経験を積み緩んだ：締まりの緩い")%
				CASE IS < 締まり_ゆるゆる
					LOCALS:0 = %LOCALS:0%%SPLIT_R("がばがばの：経験を積み閉じなくなった：もう閉じない：ぽっかり口を開けた：緩すぎる")%
			ENDSELECT
		ENDIF
		IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("幼い：未熟な")%
		ELSEIF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫壷) && !CHECK_STRBODY("感度", 属性) && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("淫らな：淫乱な")%
		ELSEIF TALENT:ARG:Ｖ敏感 && !CHECK_STRBODY_OR("感度：処女確認", 属性) && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("敏感な：感じやすい")%
		ENDIF
		SIF !CHECK_STRBODY("修飾", 属性)
			LOCALS:0 = %LOCALS:0%%SPLIT_R("膣：膣穴：雌穴：肉壺")%
	CASE "アナル"
		IF CHECK_STRBODY("感度", 属性)
			SELECTCASE ABL:(ARG:0):Ａ感 + TALENT:(ARG:0):Ａ敏感 * 5 - TALENT:(ARG:0):Ａ鈍感 * 5 + GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_尻穴狂い) * 15
				CASE IS > 30
					LOCALS:0 = %LOCALS:0%%SPLIT_R("異常な感度の：快感に逆らえない：調教されつくした")%
				CASE IS > 20
					LOCALS:0 = %LOCALS:0%%SPLIT_R("過敏すぎる：快感に弱い：弱点そのものの")%
				CASE IS > 10
					LOCALS:0 = %LOCALS:0%%SPLIT_R("性器と化した：感度の良すぎる：刺激に弱い：弱点の")%
				CASE IS > 4
					LOCALS:0 = %LOCALS:0%%SPLIT_R("性器同然の：感じやすい：刺激に敏感な：反応のいい")%
				CASE IS > 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("開発途中の：感度良好な")%
			ENDSELECT
		ELSEIF CHECK_STRBODY("Ａ挿入", 属性)
			IF CHECK_STRBODY("中出し", 属性) || CUM_CUR_AMOUNT:ARG:射精部位_アナル
				IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_尻穴狂い) || CHECK_STRBODY("欲情", 属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("夢中で精液を啜る：精液を飲み干そうと蠢く：搾り取るように収縮する")%
				ELSEIF !CHECK_STRBODY("絶頂", 属性) || !RAND:2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("たっぷりと種付けされた：白濁で埋め尽くされた")%
				ENDIF
			ELSEIF CHECK_STRBODY("絶頂", 属性)
				IF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_尻穴狂い) || CHECK_STRBODY("欲情", 属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("ペニスにしゃぶり付く：夢中で締め付ける：至福の絶頂を味わっている：イキっぱなしの")%
				ELSE
					LOCALS:0 = %LOCALS:0%%SPLIT_R("快感に震える：男根を締め上げる：激しく収縮する")%
				ENDIF
			ELSEIF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_尻穴狂い) || CHECK_STRBODY("欲情", 属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("ペニスに夢中になっている：すっかり男根の虜になっている：快楽を貪る")%
			ENDIF
		ENDIF
		IF GET_INMOU_LEVEL(ARG) == 2 && !RAND:4
			LOCALS:0 = %LOCALS:0%%SPLIT_R("尻毛の生えた")%
		ENDIF
		IF !RAND:3
			SELECTCASE TALENT:(ARG:0):Ａ締まり
				CASE IS >= 締まり_名器
					LOCALS:0 = %LOCALS:0%%SPLIT_R("よく締まる：締まりの良い：まさに名器の：極上の")%
				CASE 締まり_ゆるゆる TO 締まり_普通
					LOCALS:0 = %LOCALS:0%%SPLIT_R("緩くなった：経験を積み緩んだ：締まりの緩い")%
				CASE IS < 締まり_ゆるゆる
					LOCALS:0 = %LOCALS:0%%SPLIT_R("がばがばの：経験を積み閉じなくなった：もう閉じない：ぽっかり口を開けた：緩すぎる")%
			ENDSELECT
		ENDIF
		IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("幼い：小さな：狭い")%
		ELSEIF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_尻穴狂い) && !CHECK_STRBODY("感度", 属性) && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("淫らな：淫乱な：開発済みの：開発されきった")%
		ELSEIF TALENT:ARG:Ａ敏感 && !CHECK_STRBODY("感度", 属性) && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("敏感な：感じやすい")%
		ENDIF
		SIF !CHECK_STRBODY("修飾", 属性)
			LOCALS:0 = %LOCALS:0%%SPLIT_R("アナル：尻穴：お尻の穴：菊門")%
	CASE "腰"
		SIF CHECK_STRBODY("絶頂", 属性) && CUM_CUR_AMOUNT:ARG:射精部位_膣内 && RAND:2
			LOCALS:0 = %LOCALS:0%%S_R(@"たっぷりと種付けされた/%語彙_精液()%で濡れた/%語彙_精液()%でぬめりを帯びた/体液が入り混じってぐしょぐしょに濡れた")%
		SIF !CHECK_STRBODY("修飾", 属性)
			LOCALS:0 = %LOCALS:0%%SPLIT_R("腰：細腰：下半身")%
	CASE "陰唇"
		IF CHECK_STRBODY("処女確認", 属性) && VIRGIN(ARG:0)
			IF CHECK_STRBODY("時間経過", 属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("まだ生娘だった：男を知らなかった：清らかだった：誰にも使われたことがなかった：”女”にされた")%
			ELSE
				LOCALS:0 = %LOCALS:0%%SPLIT_R("まだ生娘の：男を知らない：まだ清らかな：誰にも使われたことのない：乙女のままの")%
			ENDIF
		ENDIF
		IF GET_INMOU_LEVEL(ARG) >= 1 && RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("毛の茂った：ふさふさの")%
		ELSEIF GET_INMOU_LEVEL(ARG) == -2 && RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("つるつるの：童女のような")%
		ENDIF
		IF IS_PIERCED(ARG, ピアス_ラビア) && (CHECK_STRBODY("ピアス", 属性) || 長さ > 1 && !RAND:2)
			LOCALS:0 = %LOCALS:0%%SPLIT_R("ピアスで飾られている：ピアスの付いた")%
		ENDIF
		IF !RAND:3
			SELECTCASE TALENT:(ARG:0):Ａ締まり
				CASE IS < 締まり_ゆるゆる
					LOCALS:0 = %LOCALS:0%%SPLIT_R("がばがばの：経験を積み閉じなくなった：もう閉じない：ぽっかり口を開けた：使い込まれた")%
			ENDSELECT
		ENDIF
		IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("幼い：小さな：狭い")%
		ENDIF
		SIF !CHECK_STRBODY("修飾", 属性)
			LOCALS:0 = %LOCALS:0%%SPLIT_R("秘部：秘所：陰唇：秘唇：性器：膣口")%
	CASE "クリ"
		IF CHECK_STRBODY("感度", 属性)
			SELECTCASE ABL:(ARG:0):Ｃ感 + TALENT:(ARG:0):Ｃ敏感 * 5 - TALENT:(ARG:0):Ｃ鈍感 * 5 + GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫核) * 15
				CASE IS > 30
					LOCALS:0 = %LOCALS:0%%SPLIT_R("異常な感度の：快感に逆らえない：調教されつくした")%
				CASE IS > 20
					LOCALS:0 = %LOCALS:0%%SPLIT_R("過敏すぎる：快感に弱い：弱点そのものの")%
				CASE IS > 10
					LOCALS:0 = %LOCALS:0%%SPLIT_R("感度の良すぎる：刺激に弱い：弱点の")%
				CASE IS > 4
					LOCALS:0 = %LOCALS:0%%SPLIT_R("感じやすい：刺激に敏感な：反応のいい")%
				CASE IS > 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("開発途中の：感度の良い")%
			ENDSELECT
		ELSEIF IS_PIERCED(ARG, ピアス_クリトリス) && (CHECK_STRBODY("ピアス", 属性) || 長さ > 1 && !RAND:2)
			LOCALS:0 = %LOCALS:0%%SPLIT_R("ピアスで飾られている：ピアスの付いた")%
		ENDIF
		IF CHECK_STRBODY("媚薬", 属性) && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("発情した：火照った")%
		ELSEIF CHECK_STRBODY("欲情", 属性)
			LOCALS:0 = %LOCALS:0%%SPLIT_R("ピンと勃った：すっかり熱を帯びた：勃起した：硬くなった：膨らんだ")%
		ENDIF
		IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("幼い：未熟な：小さな")%
		ELSEIF GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_淫核) && !CHECK_STRBODY("感度", 属性) && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("開発されきった：淫らな")%
		ELSEIF TALENT:ARG:Ｃ敏感 && !CHECK_STRBODY("感度", 属性) && !RAND:2
			LOCALS:0 = %LOCALS:0%%SPLIT_R("敏感な：感じやすい")%
		ENDIF
		IF HAS_PENIS(ARG)
			SIF !CHECK_STRBODY("修飾", 属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("陰茎：ペニス")%
		ELSE
			SIF !CHECK_STRBODY("修飾", 属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("陰核：クリトリス")%
		ENDIF
	CASE "尿道"
		IF CHECK_STRBODY("感度", 属性)
			SELECTCASE ABL:(ARG:0):Ｕ感 + GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_尿道狂い) * 15
				CASE IS > 30
					LOCALS:0 = %LOCALS:0%%SPLIT_R("異常な感度の：快感に逆らえない：調教されつくした")%
				CASE IS > 20
					LOCALS:0 = %LOCALS:0%%SPLIT_R("過敏すぎる：快感に弱い：弱点そのものの")%
				CASE IS > 10
					LOCALS:0 = %LOCALS:0%%SPLIT_R("性器と化した：感度の良すぎる：刺激に弱い：弱点の")%
				CASE IS > 4
					LOCALS:0 = %LOCALS:0%%SPLIT_R("性器同然の：感じやすい：刺激に敏感な：反応のいい")%
				CASE IS > 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("開発途中の：刺激に弱い")%
			ENDSELECT
		ENDIF
		SIF !CHECK_STRBODY("修飾", 属性)
			LOCALS:0 = %LOCALS:0%尿道

	CASE "身体"
		IF IS_MALE(ARG)
			SIF !CHECK_STRBODY("修飾", 属性)
				LOCALS:0 = %部位%
		ELSE
			IF TALENT:(ARG:0):体格 == 体格_子供
				LOCALS:0 = %LOCALS:0%%SPLIT_R("小さな：未熟な：幼い：小柄な")%
			ELSEIF TALENT:ARG:体格 == 体格_小柄
				LOCALS:0 = %LOCALS:0%%SPLIT_R("小さな：小柄な")%
			ELSEIF TALENT:ARG:体型 >= 体型_豊満
				LOCALS:0 = %LOCALS:0%%SPLIT_R("ムチムチの：たっぷりとした：ふくよかな")%
			ELSEIF IS_BOIN(ARG) || TALENT:ARG:体型 == 体型_グラマー
				LOCALS:0 = %LOCALS:0%%SPLIT_R("豊満な：肉感的な：男好きのする")%
			ELSEIF GROUPMATCH(TALENT:ARG:体型, 体型_スレンダー, 体型_細身)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("すらりとした：細身の：華奢な")%
			ELSEIF GROUPMATCH(TALENT:ARG:体型, 体型_痩せすぎ)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("ほっそりした：触れれば折れそうな：細い：肉の足りない")%
			ELSEIF TALENT:ARG:魅惑
				LOCALS:0 = %LOCALS:0%%SPLIT_R("魅惑的な：美しい")%
			ENDIF
			SIF !CHECK_STRBODY("修飾", 属性)
				LOCALS:0 = %LOCALS:0%身体
		ENDIF
ENDSELECT
RETURNF LOCALS:0

;--------------------------------------------------------
;@STR_BODY_MOD
;--------------------------------------------------------
@STR_BODY_MOD(ARGS:0, ARG:0 , ARG:1, ARGS:1)
#FUNCTIONS
#DIM 長さ
#DIMS 部位
#DIM 属性
#DIM 親属性

親属性 = ARG:1
VARSET 長さ
VARSET 属性
VARSET LOCAL
VARSET LOCALS

IF ARGS:1 != ""
	属性 = FLAG_STRBODY(ARGS:1)
	部位 = %RSELECT_STRBODY(ARGS:1)%
ELSE
	属性 = 0
	部位 =
ENDIF

IF CHECK_STRBODY("長：短", 属性)
	長さ = RAND(1, 3)
ELSEIF CHECK_STRBODY("長", 属性)
	長さ = 2
ELSEIF CHECK_STRBODY("短", 属性)
	長さ = 1
ENDIF

SELECTCASE ARGS:0
	CASE "胸＿末尾"
		IF GET_BUSTSIZE(ARG:0) == 4
			IF RAND:2 && !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("奇乳：長乳")%
			ELSE
				SIF 長さ != 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("大きすぎる：長大な：育ちすぎた：長く張った")%
				SIF !CHECK_STRBODY("修飾", 親属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房")%
			ENDIF
		ELSEIF GET_BUSTSIZE(ARG:0) == 3
			IF RAND:2 && !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("爆乳：巨乳：豊乳")%
			ELSE
				SIF 長さ != 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("大きすぎる：極巨大な：豊かすぎる：重々しい")%
				SIF !CHECK_STRBODY("修飾", 親属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房")%
			ENDIF
		ELSEIF GET_BUSTSIZE(ARG:0) == 2
			IF RAND:2 && !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("爆乳：巨乳：豊乳")%
			ELSE
				SIF 長さ != 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("大きな：巨大な：豊かな：豊満な")%
				SIF !CHECK_STRBODY("修飾", 親属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房")%
			ENDIF
		ELSEIF GET_BUSTSIZE(ARG:0) == 1
			IF RAND:2 && !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = 巨乳
			ELSE
				SIF 長さ != 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("大きな：豊かな：豊満な")%
				SIF !CHECK_STRBODY("修飾", 親属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房")%
			ENDIF
		ELSEIF GET_BUSTSIZE(ARG:0) == -1
			IF 長さ != 1
				IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("幼い：未成熟な：未発達な")%
				ELSEIF TALENT:(ARG:0):体格 == 体格_小柄 && !RAND:3
					LOCALS:0 = %LOCALS:0%%SPLIT_R("子供のような：控えめな")%
				ELSE
					LOCALS:0 = %LOCALS:0%%SPLIT_R("小さな：小ぶりな：薄い")%
				ENDIF
			ENDIF
			SIF !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房")%
		ELSEIF GET_BUSTSIZE(ARG:0) == -2
			IF 長さ != 1
				IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("幼い：未成熟な：未発達な")%
				ELSE
					LOCALS:0 = %LOCALS:0%%SPLIT_R("まっ平らな：平らな：平坦な")%
				ENDIF
			ENDIF
			SIF !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("胸")%
		ELSE
			IF 長さ != 1
				IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("発育のいい")%
				ENDIF
			ENDIF
			SIF !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房")%
		ENDIF
	CASE "胸＿末尾長"
		IF GET_BUSTSIZE(ARG:0) == 4
			IF RAND:2 && !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("魔乳：長乳：奇乳")%
			ELSE
				SIF 長さ != 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("大きすぎる：膨れ上がった：超巨大な：豊かすぎる")%
				SIF !CHECK_STRBODY("修飾", 親属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房：乳肉：乳塊")%
			ENDIF
		ELSEIF GET_BUSTSIZE(ARG:0) == 3
			IF RAND:2 && !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("爆乳：豊乳：超乳：デカ乳")%
			ELSE
				SIF 長さ != 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("大きな：重そうな：巨大な：豊かすぎる：豊満な")%
				SIF !CHECK_STRBODY("修飾", 親属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房：乳肉：乳塊")%
			ENDIF
		ELSEIF GET_BUSTSIZE(ARG:0) == 2
			IF RAND:2 && !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("爆乳：豊乳：巨乳：デカ乳")%
			ELSE
				SIF 長さ != 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("大きな：重そうな：巨大な：豊かな：豊満な")%
				SIF !CHECK_STRBODY("修飾", 親属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房：乳肉：乳塊")%
			ENDIF
		ELSEIF GET_BUSTSIZE(ARG:0) == 1
			IF RAND:2 && !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("豊乳：巨乳")%
			ELSE
				SIF 長さ != 1
					LOCALS:0 = %LOCALS:0%%SPLIT_R("大きな：重そうな：豊かな：豊満な")%
				SIF !CHECK_STRBODY("修飾", 親属性)
					LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房：乳肉")%
			ENDIF
		ELSEIF GET_BUSTSIZE(ARG:0) == -1
			IF 長さ == 2 || 長さ == 0 && RAND:2
				IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("幼い：未成熟な：未発達な：発育途中の")%
				ELSEIF TALENT:(ARG:0):体格 == 体格_小柄 && !RAND:3
					LOCALS:0 = %LOCALS:0%%SPLIT_R("子供のような：控えめな")%
				ELSE
					LOCALS:0 = %LOCALS:0%%SPLIT_R("小さな：小ぶりな：慎ましい：薄い：かわいらしい")%
				ENDIF
			ENDIF
			SIF !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房")%
		ELSEIF GET_BUSTSIZE(ARG:0) == -2
			IF 長さ == 2 || 長さ == 0 && RAND:2
				IF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("幼い：未成熟な：未発達な")%
				ELSE
					LOCALS:0 = %LOCALS:0%%SPLIT_R("平らな：平坦な")%
				ENDIF
			ENDIF
			SIF !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("胸")%
		ELSE
			IF 長さ == 2 || 長さ == 0 && RAND:2
				IF TALENT:(ARG:0):魅惑 && !RAND:2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("美しい：均整の取れた：魅惑的な")%
				ELSEIF TALENT:(ARG:0):体格 == 体格_子供 && !RAND:2
					LOCALS:0 = %LOCALS:0%%SPLIT_R("発育のいい")%
				ELSEIF !RAND:3
					LOCALS:0 = %LOCALS:0%%SPLIT_R("形のいい")%
				ENDIF
			ENDIF
			SIF !CHECK_STRBODY("修飾", 親属性)
				LOCALS:0 = %LOCALS:0%%SPLIT_R("胸：乳房")%
		ENDIF
	CASE "タトゥー"
		SELECTCASE 部位
			CASE "胸"
				LOCAL:1 = タトゥー_胸
			CASE "尻"
				LOCAL:1 = タトゥー_尻
		ENDSELECT
		LOCALS:0 = 『%TATTOO:(ARG:0):(LOCAL:1)%』の%SPLIT_R("刺青：タトゥー")%が%SPLIT_R("彫られた：刻まれた")%
ENDSELECT
RETURNF LOCALS:0

;--------------------------------------------------------
;@NUM_STRBODY
;指定された属性に対応するビットを返す
;--------------------------------------------------------
@NUM_STRBODY(ARGS)
#FUNCTION

VARSET LOCAL

SELECTCASE ARGS
	CASE "長"
		LOCAL = 1
	CASE "短"
		LOCAL = 2
	CASE "外見"
		LOCAL = 3
	CASE "接触"
		LOCAL = 4
	CASE "サイズ"
		LOCAL = 5
	CASE "シンプル"
		LOCAL = 6
	CASE "露出なし"
		LOCAL = 7
	CASE "欲情"
		LOCAL = 8
	CASE "処女確認"
		LOCAL = 9
	CASE "輪姦"
		LOCAL = 10
	CASE "事前"
		LOCAL = 11
	CASE "事後"
		LOCAL = 12
	CASE "精液汚れ"
		LOCAL = 13
	CASE "媚薬"
		LOCAL = 14
	CASE "絶頂"
		LOCAL = 15
	CASE "拘束"
		LOCAL = 16
	CASE "尻肉"
		LOCAL = 17
	CASE "調教中"
		LOCAL = 18
	CASE "時間経過"
		LOCAL = 19
	CASE "性交"
		LOCAL = 20
	CASE "正常位"
		LOCAL = 21
	CASE "後背位"
		LOCAL = 22
	CASE "騎乗位"
		LOCAL = 23
	CASE "背面騎乗位"
		LOCAL = 24
	CASE "対面座位"
		LOCAL = 25
	CASE "背面座位"
		LOCAL = 26
	CASE "感度"
		LOCAL = 27
	CASE "Ｖ挿入"
		LOCAL = 28
	CASE "Ａ挿入"
		LOCAL = 29
	CASE "中出し"
		LOCAL = 30
	CASE "ピアス"
		LOCAL = 31
	CASE "タトゥー"
		LOCAL = 32
	CASE "愛撫"
		LOCAL = 33
	CASE "感触"
		LOCAL = 34
	CASE "修飾"
		LOCAL = 35
	CASEELSE
		LOCAL = 0
ENDSELECT

RETURNF LOCAL

;--------------------------------------------------------
;@FLAG_STRBODY
;各種フラグを記録
;--------------------------------------------------------
@FLAG_STRBODY(ARGS)
#FUNCTION
#DIM LCOUNT
#DIM 分割数
#DIMS 体位候補, 15
#DIMS 体位

VARSET 体位候補
VARSET LOCAL
VARSET LOCALS

SPLIT ARGS, "：", LOCALS
分割数 = RESULT

FOR LCOUNT, 0, 分割数
	LOCALS:11 = %LOCALS:LCOUNT%
	SELECTCASE LOCALS:11
		CASE "正常位", "後背位", "騎乗位", "背面騎乗位", "対面座位", "背面座位", "側位", "屈曲位"
			IF LOCALS:13 == ""
				LOCALS:13 '= LOCALS:11
			ELSE
				LOCALS:13 '= LOCALS:13 + "：" + LOCALS:11
			ENDIF
		CASEELSE
			SETBIT LOCAL:0, NUM_STRBODY(LOCALS:11)
	ENDSELECT
NEXT

;体位候補からランダムに一つを選ぶ
IF LOCALS:13 != ""
	SPLIT LOCALS:13, "：", 体位候補
	LOCAL:1 = RESULT
	体位 = %体位候補:(RAND:(LOCAL:1))%
	SETBIT LOCAL:0, NUM_STRBODY(体位)
ENDIF

;連動するものをここで設定しておく
SIF CHECK_STRBODY("愛撫", LOCAL:0)
	SETBIT LOCAL:0, NUM_STRBODY("接触")

RETURNF LOCAL:0

;--------------------------------------------------------
;@RSELECT_STRBODY
;指定された部位から一か所を選ぶ
;--------------------------------------------------------
@RSELECT_STRBODY(ARGS)
#FUNCTIONS
#DIM LCOUNT
#DIMS 部位候補, 15
#DIMS 部位
#DIM 部位数
#DIM 分割数

VARSET 部位候補

部位 = ""
部位数 = 0
VARSET LOCAL
VARSET LOCALS

SPLIT ARGS, "：", LOCALS
分割数 = RESULT

FOR LCOUNT, 0, 分割数
	LOCALS:11 = %LOCALS:LCOUNT%
	SELECTCASE LOCALS:11
		CASE "胸", "乳首" , "尻", "膣", "アナル", "腰", "陰唇", "クリ", "尻肉", "身体"
			部位候補:部位数 = %LOCALS:11%
			部位数 ++
	ENDSELECT
NEXT
SIF 部位数 > 0
	部位 = %部位候補:(RAND:部位数)%

RETURNF 部位

;--------------------------------------------------------
;@CHECK_STRBODY
;特定の条件が指定されているかチェックする
;--------------------------------------------------------
@CHECK_STRBODY(ARGS, ARG:0)
#FUNCTION
#DIM LCOUNT
#DIM 分割数

VARSET 分割数
VARSET LOCAL
VARSET LOCALS

SPLIT ARGS, "：", LOCALS
分割数 = RESULT
LOCAL:0 = 1
FOR LCOUNT, 0, 分割数
	LOCALS:11 = %LOCALS:LCOUNT%
	SIF !GETBIT(ARG:0, (NUM_STRBODY(LOCALS:11)))
		RETURNF 0
NEXT

RETURNF 1

;--------------------------------------------------------
;@CHECK_STRBODY_OR
;特定の条件いずれかが指定されているかチェックする
;--------------------------------------------------------
@CHECK_STRBODY_OR(ARGS, ARG:0)
#FUNCTION
#DIM LCOUNT
#DIM 分割数

VARSET LOCALS

SPLIT ARGS, "：", LOCALS
分割数 = RESULT

FOR LCOUNT, 0, 分割数
	LOCALS:11 = %LOCALS:LCOUNT%
	SIF GETBIT(ARG:0, (NUM_STRBODY(LOCALS:11)))
		RETURNF 1
NEXT
RETURNF 0

;--------------------------------------------------------
;@CHECK_STRBODY_ADD
;指定された条件を満たしてしていればARGS:1のテキストを返す
;--------------------------------------------------------
@CHECK_STRBODY_ADD(ARGS:0, ARG, ARGS:1)
#FUNCTIONS
#DIM LCOUNT
#DIM 分割数

VARSET LOCAL
VARSET LOCALS

SPLIT ARGS:0, "：", LOCALS
分割数 = RESULT

FOR LCOUNT, 0, 分割数
	LOCALS:11 = %LOCALS:LCOUNT%
	SETBIT LOCAL:0, NUM_STRBODY(LOCALS:11)
NEXT

VARSET LOCALS

SIF ARG & LOCAL:0
	LOCALS:0 = %ARGS:1%

RETURNF LOCALS:0

;--------------------------------------------------------
;@SPLIT_R
;：で区切られた文字列からランダムに一つを返す
;--------------------------------------------------------
@SPLIT_R(ARGS)
#FUNCTIONS
#DIM LCOUNT

VARSET LOCAL
VARSET LOCALS

SPLIT ARGS, "：", LOCALS

RETURNF LOCALS:(RAND:RESULT)


code:
;主導度・倒錯度に関する処理

;-------------------------------------------------
;素質に応じて主導度・倒錯度を初期設定
;-------------------------------------------------
@INIT_TENDENCY(ARG:0)
;CSVファイルが存在する(東方キャラ)ならCSVの設定をチェック
IF EXISTCSV(NO:(ARG:0))
	LOCAL:10 = CSVABL(NO:(ARG:0), 90)
	LOCAL:11 = CSVABL(NO:(ARG:0), 91)
	LOCAL:12 = CSVABL(NO:(ARG:0), 92)
ELSE
	LOCAL:10 = 0
	LOCAL:11 = 0
	LOCAL:12 = 0
ENDIF

;CSVで主導度Ｎが設定されていればそちらを優先
IF LOCAL:10 != 0
	ABL:(ARG:0):主導度Ｎ = LOCAL:10
ELSE
	LOCAL:0 = 0

	;臆病(－)
	SIF TALENT:(ARG:0):臆病
		LOCAL:0 -= 100

	;反抗的(＋)
	SIF TALENT:(ARG:0):反抗的
		LOCAL:0 += 100

	;気丈(＋)
	SIF TALENT:(ARG:0):気丈
		LOCAL:0 += 50

	;素直(－)
	SIF TALENT:(ARG:0):素直
		LOCAL:0 -= 100

	;大人しい(－)
	SIF TALENT:(ARG:0):大人しい
		LOCAL:0 -= 150

	;プライド高い(＋)
	SIF TALENT:(ARG:0):プライド高い
		LOCAL:0 += 100

	;生意気(＋)
	SIF TALENT:(ARG:0):生意気
		LOCAL:0 += 150

	;プライド低い(－)
	SIF TALENT:(ARG:0):プライド低い
		LOCAL:0 -= 100

	;自制心(－)
	SIF TALENT:(ARG:0):自制心
		LOCAL:0 -= 30

	;無関心(－)
	SIF TALENT:(ARG:0):無関心
		LOCAL:0 -= 80

	;感情乏しい(－)
	SIF TALENT:(ARG:0):感情乏しい
		LOCAL:0 -= 50

	;好奇心(＋)
	SIF TALENT:(ARG:0):好奇心
		LOCAL:0 += 50

	;保守的(－)
	SIF TALENT:(ARG:0):保守的
		LOCAL:0 -= 50

	;楽観的(＋)
	SIF TALENT:(ARG:0):楽観的
		LOCAL:0 += 30

	;悲観的(－)
	SIF TALENT:(ARG:0):悲観的
		LOCAL:0 -= 30

	;目立ちたがり(＋)
	SIF TALENT:(ARG:0):目立ちたがり
		LOCAL:0 += 150

	;恥じらい(－)
	SIF TALENT:(ARG:0):恥じらい
		LOCAL:0 -= 100

	;恥薄い(＋)
	SIF TALENT:(ARG:0):恥薄い
		LOCAL:0 += 50

	;献身的(－)
	SIF TALENT:(ARG:0):献身的
		LOCAL:0 -= 50

	;Ｓ気質(＋)
	SIF TALENT:(ARG:0):Ｓ気質
		LOCAL:0 += 50

	;Ｍ気質(－)
	SIF TALENT:(ARG:0):Ｍ気質
		LOCAL:0 -= 50

	;小悪魔(＋)
	SIF TALENT:(ARG:0):小悪魔
		LOCAL:0 += 100

	ABL:(ARG:0):主導度Ｎ = LIMIT(LOCAL:0, -1000, 1000)
ENDIF

;CSVで主導度Ｕが設定されていればそちらを優先
IF LOCAL:11 != 0
	ABL:(ARG:0):主導度Ｕ = LOCAL:11
ELSE
	LOCAL:0 = ABL:(ARG:0):主導度Ｎ / 10

	;恥じらい(－)
	SIF TALENT:(ARG:0):恥じらい
		LOCAL:0 -= 50

	;恥薄い(＋)
	SIF TALENT:(ARG:0):恥薄い
		LOCAL:0 += 25

	;Ｓ気質(＋)
	SIF TALENT:(ARG:0):Ｓ気質
		LOCAL:0 += 300

	;Ｍ気質(－)
	SIF TALENT:(ARG:0):Ｍ気質
		LOCAL:0 -= 300

	;小悪魔(＋)
	SIF TALENT:(ARG:0):小悪魔
		LOCAL:0 += 100

	ABL:(ARG:0):主導度Ｕ = LIMIT(LOCAL:0, -1000, 1000)
ENDIF

;CSVで倒錯度が設定されていればそちらを優先
IF LOCAL:12 != 0
	ABL:(ARG:0):倒錯度 = LOCAL:12
ELSE
	LOCAL:0 = 0

	;Ｓ気質(＋)
	SIF TALENT:(ARG:0):Ｓ気質
		LOCAL:0 += 100

	;Ｍ気質(＋)
	SIF TALENT:(ARG:0):Ｍ気質
		LOCAL:0 += 100

	;倒錯的(＋)
	SIF TALENT:(ARG:0):倒錯的
		LOCAL:0 += 300

	ABL:(ARG:0):倒錯度 = LIMIT(LOCAL:0, 0, 1000)
ENDIF

repo_name: napo/erafl

license: unknown


code:
;性転換に関する関数

;-------------------------------------------------
;◆ARG:0番のキャラが現在ＴＳしているかどうかを返す関数
;-------------------------------------------------
@TS_IS_O(ARG:0, ふたなりを同性扱いする, 男の娘を男に含める)
#FUNCTION
#DIM ふたなりを同性扱いする
#DIM 男の娘を男に含める

SIF TALENT:(ARG:0):元性別 == 0
	RETURNF 0

IF 男の娘を男に含める && ふたなりを同性扱いする
	RETURNF GROUPMATCH(TALENT:(ARG:0):性別, 1, 2) != GROUPMATCH(TALENT:(ARG:0):元性別, 11, 12)
ELSEIF 男の娘を男に含める
	IF GROUPMATCH(TALENT:(ARG:0):性別, 0, 4) != GROUPMATCH(TALENT:(ARG:0):元性別, 10, 14)
		RETURNF 1
	ELSEIF GROUPMATCH(TALENT:(ARG:0):性別, 3, 5) != GROUPMATCH(TALENT:(ARG:0):元性別, 13, 15)
		RETURNF 1
	ELSEIF GROUPMATCH(TALENT:(ARG:0):性別, 1) != GROUPMATCH(TALENT:(ARG:0):元性別, 11)
		RETURNF 1
	ELSEIF GROUPMATCH(TALENT:(ARG:0):性別, 2) != GROUPMATCH(TALENT:(ARG:0):元性別, 12)
		RETURNF 1
	ENDIF
ELSEIF ふたなりを同性扱いする
	IF GROUPMATCH(TALENT:(ARG:0):性別, 0, 3) != GROUPMATCH(TALENT:(ARG:0):元性別, 10, 13)
		RETURNF 1
	ELSEIF GROUPMATCH(TALENT:(ARG:0):性別, 4, 5) != GROUPMATCH(TALENT:(ARG:0):元性別, 14, 15)
		RETURNF 1
	ELSEIF GROUPMATCH(TALENT:(ARG:0):性別, 1, 2) != GROUPMATCH(TALENT:(ARG:0):元性別, 11, 12)
		RETURNF 1
	ENDIF
ELSE
	RETURNF TALENT:(ARG:0):性別 != (TALENT:(ARG:0):元性別 -10)
ENDIF
RETURNF 0

;-------------------------------------------------
;◆ARG:0番のキャラが現在女性化しているかどうかを返す関数
;元男性or元男の娘が現在女性になっている場合は1を返す
;詳細モードの場合は挙動が変わり、
;元男性 → 男の娘 = 1   元男の娘 → 女性 = 2   元男性 → 女性 = 3
;いずれの場合もふたなりの有無は無視する
;-------------------------------------------------
@TS_IS_F(ARG:0, 詳細モード)
#FUNCTION
#DIM 詳細モード

SIF TALENT:(ARG:0):元性別 == 0 || GROUPMATCH(TALENT:(ARG:0):元性別, 11, 12)
	RETURNF 0

IF 詳細モード
	IF GROUPMATCH(TALENT:(ARG:0):元性別, 10, 13)
		IF GROUPMATCH(TALENT:(ARG:0):性別, 1, 2)
			RETURNF 3
		ELSEIF GROUPMATCH(TALENT:(ARG:0):性別, 4, 5)
			RETURNF 1
		ENDIF
	ELSEIF GROUPMATCH(TALENT:(ARG:0):元性別, 14, 15) && GROUPMATCH(TALENT:(ARG:0):性別, 1, 2)
		RETURNF 2
	ENDIF
ELSE
	RETURNF GROUPMATCH(TALENT:(ARG:0):元性別, 10, 13, 14, 15) == GROUPMATCH(TALENT:(ARG:0):性別, 1, 2)
ENDIF
RETURNF 0

;-------------------------------------------------
;◆ARG:0番のキャラが現在男性化しているかどうかを返す関数
;元女性が現在男性or男の娘になっている場合は1を返す
;詳細モードの場合は挙動が変わり、
;元女性 → 男の娘 = 1   元男の娘 → 男性 = 2   元女性 → 男性 = 3
;いずれの場合もふたなりの有無は無視する
;-------------------------------------------------
@TS_IS_M(ARG:0, 詳細モード)
#FUNCTION
#DIM 詳細モード

SIF TALENT:(ARG:0):元性別 == 0  || GROUPMATCH(TALENT:(ARG:0):性別, 1, 2)
	RETURNF 0

IF 詳細モード
	IF GROUPMATCH(TALENT:(ARG:0):元性別, 11, 12)
		IF GROUPMATCH(TALENT:(ARG:0):性別, 0, 3)
			RETURNF 3
		ELSEIF GROUPMATCH(TALENT:(ARG:0):性別, 4, 5)
			RETURNF 1
		ENDIF
	ELSEIF GROUPMATCH(TALENT:(ARG:0):元性別, 14, 15) && GROUPMATCH(TALENT:(ARG:0):性別, 0, 3)
		RETURNF 2
	ENDIF
ELSE
	RETURNF GROUPMATCH(TALENT:(ARG:0):元性別, 11, 12) == GROUPMATCH(TALENT:(ARG:0):性別, 0, 3, 4, 5)
ENDIF
RETURNF 0

;-------------------------------------------------
;◆ARG:0番のキャラがペニス無の元性別からペニスが生えたかどうかを返す関数
;-------------------------------------------------
@TS_GET_P(ARG:0)
#FUNCTION

SIF HAS_PENIS(ARG:0)
	RETURNF GROUPMATCH(TALENT:(ARG:0):元性別, 11)
RETURNF 0

;-------------------------------------------------
;◆ARG:0番のキャラがペニス有の元性別からペニスを失ったかどうかを返す関数（LOSTのL）
;-------------------------------------------------
@TS_LOST_P(ARG:0)
#FUNCTION

SIF !HAS_PENIS(ARG:0)
	RETURNF GROUPMATCH(TALENT:(ARG:0):元性別, 10, 12, 13, 14, 15)
RETURNF 0

;-------------------------------------------------
;◆ARG:0番のキャラがＶ無の元性別からＶが出来たかどうかを返す関数
;-------------------------------------------------
@TS_GET_V(ARG:0)
#FUNCTION

SIF HAS_VAGINA(ARG:0)
	RETURNF GROUPMATCH(TALENT:(ARG:0):元性別, 10, 14)
RETURNF 0

;-------------------------------------------------
;◆ARG:0番のキャラがＶ有の元性別からＶを失ったかどうかを返す関数（LOSTのL）
;-------------------------------------------------
@TS_LOST_V(ARG:0)
#FUNCTION

SIF !HAS_VAGINA(ARG:0)
	RETURNF GROUPMATCH(TALENT:(ARG:0):元性別, 11, 12, 13, 15)
RETURNF 0

;-------------------------------------------------
;対象キャラの異性化（男の娘は男扱いする）
;-------------------------------------------------
@TS_TO_OTHERSEX(ARG:0, ふたなりを維持する)
#DIM ふたなりを維持する

;ＴＳ経験がない場合の元性別保存処理
SIF TALENT:(ARG:0):元性別 == 0
    TALENT:(ARG:0):元性別 = TALENT:(ARG:0):性別 + 10

;男性が女性化する場合、性偏差が40未満の場合は性偏差を40に
SIF GROUPMATCH(TALENT:(ARG:0):性別, 0, 3) && CFLAG:(ARG:0):性偏差 < 40
    CFLAG:(ARG:0):性偏差 = 40

IF ふたなりを維持する
    SELECTCASE TALENT:(ARG:0):性別
        CASE 0, 4
            TALENT:(ARG:0):性別 = 1
        CASE 3, 5
            TALENT:(ARG:0):性別 = 2
        CASE 1
            TALENT:(ARG:0):性別 = 0
        CASE 2
            TALENT:(ARG:0):性別 = 3
    ENDSELECT
ELSE
    SELECTCASE TALENT:(ARG:0):性別
        CASE 0, 3, 4, 5
            TALENT:(ARG:0):性別 = 1
        CASE 1, 2
            TALENT:(ARG:0):性別 = 0
    ENDSELECT
ENDIF

CALL SET_BODYSIZE(ARG:0)

;-------------------------------------------------
;対象キャラの男の娘化
;-------------------------------------------------
@TS_TO_FEMBOY(ARG:0, ふたなりを維持する)
#DIM ふたなりを維持する

SIF TALENT:(ARG:0):元性別 == 0
    TALENT:(ARG:0):元性別 = TALENT:(ARG:0):性別 + 10

;男性が男の娘化する場合、性偏差が40未満の場合は性偏差を40に
SIF GROUPMATCH(TALENT:(ARG:0):性別, 0, 3) && CFLAG:(ARG:0):性偏差 < 40
    CFLAG:(ARG:0):性偏差 = 40

IF ふたなりを維持する
    SELECTCASE TALENT:(ARG:0):性別
        CASE 0, 1
            TALENT:(ARG:0):性別 = 4
        CASE 2, 3
            TALENT:(ARG:0):性別 = 5
    ENDSELECT
ELSE
    SELECTCASE TALENT:(ARG:0):性別
        CASE 0, 1, 2, 3
            TALENT:(ARG:0):性別 = 4
    ENDSELECT
ENDIF

CALL SET_BODYSIZE(ARG:0)

;-------------------------------------------------
;徐々に女性化していくための性偏差を管理する処理
;-------------------------------------------------
@TS_TO_GETTING(ARG:0, 増減値, メッセージなし)
#DIM 増減値
#DIM メッセージなし

;性偏差増減経験がない場合は初期値設定。男性は1、男の娘と女性は40
IF CFLAG:(ARG:0):性偏差 == 0
    IF GROUPMATCH(TALENT:(ARG:0):性別, 0, 3)
        CFLAG:(ARG:0):性偏差 = 1
    ELSE
        CFLAG:(ARG:0):性偏差 = 40
    ENDIF
ENDIF

CFLAG:(ARG:0):性偏差 += 増減値

;増減後の最低値と最大値の管理
;最低値は1、最高値は女性あるいは男の娘ふたなりの場合120、それ以外は100
IF CFLAG:(ARG:0):性偏差 <= 0
    CFLAG:(ARG:0):性偏差 = 1
ELSEIF GROUPMATCH(TALENT:(ARG:0):性別, 1, 2, 5)
    SIF CFLAG:(ARG:0):性偏差 > 120
        CFLAG:(ARG:0):性偏差 = 120
ELSEIF CFLAG:(ARG:0):性偏差 > 100
    CFLAG:(ARG:0):性偏差 = 100
ENDIF

;男性あるいは男の娘の性偏差が増えた場合の変化処理
IF 増減値 > 0 && IS_MALE(ARG:0, 1)
    ;メッセージなしが有効の場合は飛ばす
    IF メッセージなし == 0
        IF CFLAG:(ARG:0):性偏差 >= 100 && HAS_FUTANARI(ARG:0)
            PRINTFORML %ANAME(ARG:0)%の子宮がドクン、ドクンと脈打って存在を主張する……
            PRINTFORMW かろうじて機能しているペニス以外は完全に女性の身体になってしまったように感じる
            PRINTFORML ……内蔵のどこかか、%ANAME(ARG:0)%の自意識か、見えない部分に男である要素は何か残っているのだろうか
            IF CFLAG:(ARG:0):性偏差 >= 120
                PRINTW
                PRINTFORML %ANAME(ARG:0)%はほとんどが女性化しきってしまった
                PRINTFORML これ以上は特別な処置でも受けなければ、最後に残った決定的な部分が変わることはないだろう
            ENDIF
        ELSEIF CFLAG:(ARG:0):性偏差 >= 100
            PRINTFORML 変わりきった身体は、生来の女性よりも女らしくなってしまっている気さえする
            PRINTFORML ……ペニスがあり子宮がないという以外には%ANAME(ARG:0)%が男である要素は残ってない
            PRINTW
            PRINTFORML %ANAME(ARG:0)%の容姿は女性化しきってしまった
            PRINTFORML これ以上は内蔵の構造でも変わらなければ、女性化が進行することはないだろう
        ELSEIF CFLAG:(ARG:0):性偏差 >= 70
            PRINTFORML 身体の内側から何かが変化している……
            PRINTFORMW もはやペニスが生えている以外に男である要素がなくなっていく気がする
            PRINTFORML ……%ANAME(ARG:0)%が自分は男だと言い張っても、誰も信じはしないだろう
        ELSEIF CFLAG:(ARG:0):性偏差 >= 40 && GROUPMATCH(TALENT:(ARG:0):性別, 4, 5)
            PRINTFORML なんとなく身体がくすぐったい……
            PRINTFORMW ただでさえ男っぽさに乏しいのに、全身がさらに女っぽく変化していくのを感じる
            PRINTFORML ……外見以外のあらゆる要素も、%ANAME(ARG:0)%が男だという証拠を失っていく
        ELSEIF CFLAG:(ARG:0):性偏差 >= 40
            PRINTFORML なんとなく身体がくすぐったい……
            PRINTFORMW 全身のシルエットがさらに柔らかな、女性的なものに変わっているように感じる
            PRINTFORML ……次に鏡を覗いたとき、%ANAME(ARG:0)%は自分が男ではなくなったと錯覚するかもしれない
        ELSEIF CFLAG:(ARG:0):性偏差 >= 20
            PRINTFORML 肌がムズムズする……
            PRINTFORML 気のせいか、肌が柔らかくなり、身体つきが変わってきているように感じる
            IF CFLAG:(ARG:0):性偏差 >= 30
                WAIT
                PRINTFORML ……次に鏡を覗いたとき、%ANAME(ARG:0)%は中性的な顔つきへの変化が進んでいる自分に気がつくだろう
            ENDIF
        ELSEIF CFLAG:(ARG:0):性偏差 >= 0
            PRINTFORML 全身の肌がムズムズとして身体に何かが起こっているのを感じるが、それが何かはわからない
        ENDIF
        PRINTW
    ENDIF
    ;肉体変化は下から順に優先させる
    IF CFLAG:(ARG:0):性偏差 >= 40 && GROUPMATCH(TALENT:(ARG:0):性別, 0, 3)
        CALL TS_TO_FEMBOY(ARG:0, 1)
        IF メッセージなし == 0
            CALLF TAG_PRINT(@"%ANAME(ARG:0)%の容姿は可愛らしく変わり果て、@C:{カラー_ピンク}@%TOSTR_SEX(TALENT:(ARG:0):性別)%@/C@になってしまった！", 1)
            PRINTW
        ENDIF
    ELSEIF CFLAG:(ARG:0):性偏差 >= 50 && TALENT:(ARG:0):ペニスサイズ >= 2
        TALENT:(ARG:0):ペニスサイズ --
        CALL SET_PENISSIZE(ARG:0, TALENT:(ARG:0):ペニスサイズ)
        IF メッセージなし == 0
            CALLF TAG_PRINT(@"%ANAME(ARG:0)%のペニスは肉体の変化に伴い、@C:{カラー_ピンク}@%TOSTR_PENISSIZE(TALENT:(ARG:0):ペニスサイズ)%@/C@サイズに縮んでしまった", 1)
            PRINTW
        ENDIF
    ELSEIF CFLAG:(ARG:0):性偏差 >= 60 && TALENT:(ARG:0):ペニスサイズ >= 1
        TALENT:(ARG:0):ペニスサイズ --
        CALL SET_PENISSIZE(ARG:0, TALENT:(ARG:0):ペニスサイズ)
        IF メッセージなし == 0
            CALLF TAG_PRINT(@"%ANAME(ARG:0)%のペニスは肉体の変化に伴い、@C:{カラー_ピンク}@%TOSTR_PENISSIZE(TALENT:(ARG:0):ペニスサイズ)%@/C@サイズに縮んでしまった", 1)
            PRINTW
        ENDIF
    ELSEIF CFLAG:(ARG:0):性偏差 >= 70 && TALENT:(ARG:0):ヒップサイズ <= -1
        TALENT:(ARG:0):ヒップサイズ ++
        CALL SET_HIPSIZE(ARG:0, TALENT:(ARG:0):ヒップサイズ)
        IF メッセージなし == 0
            CALLF TAG_PRINT(@"薄かった%ANAME(ARG:0)%のお尻は厚みが増し、少し肉感的な@C:{カラー_ピンク}@%TOSTR_HIPSIZE(TALENT:(ARG:0):ヒップサイズ)%@/C@になったようだ", 1)
            PRINTW
        ENDIF
    ELSEIF CFLAG:(ARG:0):性偏差 >= 80 && TALENT:(ARG:0):ペニスサイズ >= 0
        TALENT:(ARG:0):ペニスサイズ --
        CALL SET_PENISSIZE(ARG:0, TALENT:(ARG:0):ペニスサイズ)
        IF メッセージなし == 0
            CALLF TAG_PRINT(@"%ANAME(ARG:0)%のペニスまでも男らしさを失い、@C:{カラー_ピンク}@%TOSTR_PENISSIZE(TALENT:(ARG:0):ペニスサイズ)%@/C@サイズに萎縮してしまった……", 1)
            PRINTW
        ENDIF
    ELSEIF CFLAG:(ARG:0):性偏差 >= 90 && TALENT:(ARG:0):バストサイズ <= -2
        TALENT:(ARG:0):バストサイズ ++
        CALL SET_BUSTSIZE(ARG:0, TALENT:(ARG:0):バストサイズ)
        IF メッセージなし == 0
            CALLF TAG_PRINT(@"%ANAME(ARG:0)%の胸が心なしかふっくらと膨らみ、@C:{カラー_ピンク}@%TOSTR_BUSTSIZE(TALENT:(ARG:0):バストサイズ)%@/C@ながら少女のような乳房になってしまった……", 1)
            PRINTW
        ENDIF
    ELSEIF CFLAG:(ARG:0):性偏差 >= 100 && TALENT:(ARG:0):ペニスサイズ >= -1
        TALENT:(ARG:0):ペニスサイズ --
        CALL SET_PENISSIZE(ARG:0, TALENT:(ARG:0):ペニスサイズ)
        IF メッセージなし == 0
            CALLF TAG_PRINT(@"%ANAME(ARG:0)%のペニスは萎縮が進み、@C:{カラー_ピンク}@%TOSTR_PENISSIZE(TALENT:(ARG:0):ペニスサイズ)%@/C@サイズの可愛らしい突起と化してしまった……", 1)
            PRINTW
        ENDIF
    ENDIF
ENDIF


code:
;-------------------------------------------------
;時間経過イベント
;-------------------------------------------------
@FL_EVENTTURNEND
#DIM DYNAMIC ITER_I
#DIM DYNAMIC ITER_J
#DIM DYNAMIC ITER_K
[IF_DEBUG]
DEBUGPRINTFORML @EVENTTURNEND
[ENDIF]

FLAG:戦略フェイズページ = 1
;FLには期中の概念がないので全行動量消費
SHOP_TIME = CALC_SHOP_TIME()

;拠点フェイズ
IF TIME == 0
	IF SHOP_TIME >= CALC_SHOP_TIME() || CFLAG:MASTER:捕虜先
		CALL TURNEND_LIFE
	ELSE
		BASE:MASTER:体力 = MAXBASE:MASTER:体力
		BASE:MASTER:気力 = MAXBASE:MASTER:気力
		BEGIN SHOP
	ENDIF
	;戦略フェイズ
ELSE
	CALL TURNEND_POLITICS
ENDIF

$SKIPPED

;デッドエンディングならBEGIN TITLE
IF FLAG:強制エンドフラグ == 1

	SETCOLOR カラー_注意
	PRINTFORMW 現時点でのデータを利用し、「周回用セーブ」を作ることができます
	PRINTFORMW 周回用セーブをロードすることで、今の武将やアイテムを引き継いで新規にシナリオを開始できます
	RESETCOLOR

	FLAG:クリア直後フラグ = 1

	CALL SAVE_GAME

	BEGIN TITLE
	;ターンエンド調教が立っているなら即時調教モードに入る
ELSEIF FLAG:ターンエンド調教
	SELECTCASE FLAG:ターンエンド調教
		CASE 調教_閨
			FLAG:調教モード = 1
		CASE 調教_逆調教通常
			FLAG:調教モード = 5
		CASE 調教_慰安
			FLAG:調教モード = 7
			FLAG:慰安モード = 3
	ENDSELECT
	FLAG:ターンエンド調教 = 0
	FLAG:ウフフフラグ = 1
	FLAG:夜這い = 0
	;時間の処理をしないと、「拠点フェイズの終了時にここに到達、調教→交流終了でSLGフェイズのターンエンドが呼ばれ、次期の拠点フェイズに飛ぶ」みたいな挙動になる
	IF TIME == 0
		IF !FLAG:クリアフラグ
			TIME = 1
			DAY --
		ENDIF
	ELSEIF TIME == 1
		TIME = 0
		SHOP_TIME = CALC_SHOP_TIME()
	ENDIF
	FLAG:イベント発生禁止 = 1
	CALL START_TRAIN_COMMON
ELSE
	CALL FL_STOPBGM()
	FLAG:デイリーイベント = 0
	SIF FLAG:調教要求フラグ
		FLAG:調教要求フラグ = 0
	FLAG:イベント発生禁止 = 0

	FOR ITER_I, 0, CHARANUM
		;全員の体力・気力を最大まで回復
		BASE:(LOCAL:0):体力 = MAXBASE:(LOCAL:0):体力
		BASE:(LOCAL:0):気力 = MAXBASE:(LOCAL:0):気力
		;このターンでのコマンド実行回数をリセット
		FOR ITER_J, 0, 3000
			FOR ITER_K, 0, COM_OPTION_NUM
				COM_COUNT_THIS_TURN:ITER_I:ITER_J:ITER_K = 0
			NEXT
		NEXT
	NEXT
	IF !FLCONFIG:処理実行後のログを消去しない
		CLEARLINE LINECOUNT
	ENDIF
	BEGIN SHOP
ENDIF

;-------------------------------------------------
;拠点フェイズ終了時の処理
;-------------------------------------------------
@TURNEND_LIFE
SHOP_TIME = 0
SHOP_WORK_COUNT = 0

SIF FLAG:イベント発生禁止
	GOTO SKIPPED

;夜に起こるイベント(夜這いなど)
;CALL EVENT_NIGHT

IF CONFIG:7 == 0
	;捕虜の扱いを設定
	;CALL SETSTATE_PRISONER
ELSE
	;捕虜の人数をカウント
	LOCAL:5 = 0
	FOR LOCAL:0, 0, CHARANUM
		IF LOCAL:0 != MASTER && CFLAG:(LOCAL:0):捕虜先 != 0 && CFLAG:(LOCAL:0):捕虜先 == CFLAG:MASTER:所属 && CFLAG:(LOCAL:0):軟禁中 == 0
			LOCAL:5 ++
		ENDIF
	NEXT
	;捕虜が一人でもいればラインを引く
	IF LOCAL:5 >= 1
		CALL SINGLE_DRAWLINE
	ENDIF
ENDIF

CALL EVENT_PRISONER

;捕虜でなければ、FLAG:逆調教回数（捕虜調教回数）を消す
IF !CFLAG:MASTER:捕虜先
	FLAG:逆調教メイン調教者 = 0
	FLAG:逆調教回数 = 0
ENDIF

;口上呼び出し
FOR LOCAL:0, 0, CHARANUM
	;主人公と同一勢力の仕官で、捕虜でない
	IF CFLAG:(LOCAL:0):所属 != 0 && LOCAL:0 != MASTER && CFLAG:(LOCAL:0):所属 == CFLAG:MASTER:所属 && CFLAG:(LOCAL:0):捕虜先 == 0
		CALL KOJO_EVENT(LOCAL:0, 30)
	ENDIF
NEXT

CALL TURNEND_COMMON
;BGMを停止
CALL FL_STOPBGM()

$SKIPPED

;統一後の場合
;一期終了時の処理
;クールタイムのリセット
CVARSET COOLTIME, 0

;ターンを進める
DAY ++

;季節変化の告知
IF HO_WEEK() == 1
	CALL PRINT_TITLE(, "季節")
	CALL DRAW_STILL(@"STILL_%HO_SEASON_STR:HO_SEASON()%", @"[BORDER:8px][BORDER_COLOR:#%CVH(HO_SEASON_COLOR:HO_SEASON())%][SIZE_X:480px][SIZE_Y:320px]", 1)
	PRINTL
	SELECTCASE HO_SEASON()
		CASE HO_季節_春
			PRINTFORML 雪解け水が清流をつくり、草花は芽吹き、鮮やかな色彩を大地に添える
			PRINTFORML 冬が終わり、春がやってきた
		CASE HO_季節_夏
			PRINTFORML 燦々たる陽光が降り注ぎ、木々の緑はますます深みを帯びる
			PRINTFORML 春が終わり、夏がやってきた
		CASE HO_季節_秋
			PRINTFORML 山林は紅に染まり、北からの涼風が夏の終わりを告げる
			PRINTFORML 夏が終わり、秋がやってきた
		CASE HO_季節_冬
			PRINTFORML 草花は枯れ落ち、降りしきる雪が大地を白く染める
			PRINTFORML 秋が終わり、冬がやってきた
	ENDSELECT
	WAIT
ENDIF

;デイリーイベント
FLAG:デイリーイベント = 1
CALL EVENT_DAILY
IF !FLAG:ターンエンド調教
	CALL EVENT_KOJO_DAILY
ENDIF
;-------------------------------------------------
;戦略フェイズ終了時の処理
;-------------------------------------------------
@TURNEND_POLITICS

SIF FLAG:イベント発生禁止
	GOTO SKIPPED

;デッドエンディングなら戻る
IF FLAG:強制エンドフラグ == 1
	RETURN
ENDIF

;一期終了時の処理
SIF !FLAG:ターンエンド調教
	CALL TURNEND_COMMON

$SKIPPED

;時間を進める
DAY ++
IF FLAG:観戦モード
	TIME = 1
ELSE
	TIME = 0
ENDIF

;-------------------------------------------------
;一期終了時の処理
;統一前なら戦略フェイズ終了後、統一後なら拠点フェイズ終了後に呼ばれる
;-------------------------------------------------
@TURNEND_COMMON
#DIM DYNAMIC CHARA_ID
VARSET LOCAL, 0
VARSET PRISONER_TARGET, -1

;「会いに行く」の対象リストのチェック
CALL MEET_CHECK_CANDIDATES

;自勢力でなくなった動物の削除
FOR LOCAL:0, CHARANUM - 1, -1, -1
	IF IS_ANIMAL(LOCAL:0) && CFLAG:(LOCAL:0):所属 != CFLAG:MASTER:所属
		CALL DELETE_CHARA(LOCAL:0)
	ENDIF
NEXT

ARENA_DONE = 0
APPOINT_DONE = 0

;捕虜用変数のクリア
CVARSET CFLAG, 30, 0
CVARSET CFLAG, 31, 0
CVARSET CFLAG, 32, 0

;各子育てコマンドの選択回数をクリア
FOR LOCAL:0, 110, 130
	CVARSET CFLAG, LOCAL:0, 0
NEXT

;口上呼び出し
FOR LOCAL:0, 0, CHARANUM
	IF CFLAG:(LOCAL:0):所属 == CFLAG:MASTER:所属 && LOCAL:0 != MASTER
		CALL SINGLE_DRAWLINE()
		CALL KOJO_EVENT(LOCAL:0, 31)
	ENDIF
NEXT

;触手部屋の管理者に経験値を加算
IF ITEM:触手部屋 && ID_TO_CHARA(FLAG:触手部屋管理者) >= 0 && IS_SYOKUSYU_MANAGE(ID_TO_CHARA(FLAG:触手部屋管理者))
	EXP:(ID_TO_CHARA(FLAG:触手部屋管理者)):触手経験値 += 2
	EXP:(ID_TO_CHARA(FLAG:触手部屋管理者)):魔術経験値 += 2
	CALL TRAIN_AUTO_ABLUP(ID_TO_CHARA(FLAG:触手部屋管理者), 1)
ENDIF

;各クエストのクールタイムを減少
FOR LOCAL, 0, QST_MAX_QUESTNUM
	QST_COOLTIME:LOCAL = MAX(0, QST_COOLTIME:LOCAL - 1)
NEXT

CALL DRAW_LINE()
PRINTFORML 【レポート】
CALL DRAW_LINE()
;CALL EVENT_WORK

;朝のイベント
;CALL EVENT_MORNING
;アイテム開発イベント
;CALL ITEM_DEVELOPMENT

CALL COLOR_LINE
PRINTFORML ◆　領地
CALL COLOR_LINE

CALL HO_FIND_MODULE_BY_USAGE("商店",,1)
IF LIST_COUNT(RESULTS)
	;露店の評判
	FLAG:領地評判_商業 += 領地評判_商業_増減値
	PRINTFORML ・商業活動の評判:{FLAG:領地評判_商業} (+{領地評判_商業_増減値})
	領地評判_商業_増減値 = 0
ENDIF
PRINTL

CALL COLOR_LINE
PRINTFORML ◆　キャラクター
CALL COLOR_LINE

;キャラクターのスキルに応じた処理
CALL TURNEND_SKILL_EVENT

;妊娠出産関連の処理
CALL TURNEND_PREGNANT_PHASE

CALL COLOR_LINE
PRINTFORML ◆　素質獲得・関係性の変化
CALL COLOR_LINE

FOR LOCAL:0, 0, CHARANUM
	IF IS_APPEAR(LOCAL:0)
		;恋慕などの素質変化の処理(二回目)
		CALL TALENT_CHECK(LOCAL:0)
	ENDIF
	CALL CHARA_RELATION_IMPROVE_CHECK(LOCAL:0)
NEXT

;ターン終了時のキャラクター能力処理(体力の回復など)
CALL TURNEND_CHARA_PROCESS
PRINTL

CALL COLOR_LINE
PRINTFORML ◆　その他
CALL COLOR_LINE
IF FLAG:ウフフイベント獲得淫堕点 > 0
	CALL QST_CHANGE_ITEM(@"淫堕点,{FLAG:ウフフイベント獲得淫堕点},", 0, 0)
	CALLF TAG_PRINT(@"・逢瀬による獲得淫堕点: {QST_LEWD_POINT - FLAG:ウフフイベント獲得淫堕点} @C:{カラー_ピンク}@+ {FLAG:ウフフイベント獲得淫堕点}@/C@ → {QST_LEWD_POINT}", 1)
	FLAG:ウフフイベント獲得淫堕点= 0
ENDIF

CALL DRAW_LINE()
WAIT

CALL DRAW_LINE()
PRINTFORML 【仲間たちの交流】
CALL DRAW_LINE()
CALL RELATION_EVENT()

;-------------------------------------------------
;キャラの能力の変動
;-------------------------------------------------
@TURNEND_CHARA_PROCESS
#DIM 対象

FOR LOCAL:0, 0, CHARANUM

	SIF !IS_APPEAR(LOCAL:0)
		CONTINUE
	;全員の体力・気力を最大まで回復
	BASE:(LOCAL:0):体力 = MAXBASE:(LOCAL:0):体力
	BASE:(LOCAL:0):気力 = MAXBASE:(LOCAL:0):気力

	;毛が成長
	CALL INMOU_GROW(LOCAL:0)
	CALL ARMPIT_GROW(LOCAL:0)
	;締まりの改善
	CALL TIGHTNESS_GROW(LOCAL:0)

	;このターン～系フラグを折る
	CFLAG:(LOCAL:0):行動済み = 0

	;捕虜でなく、所属が特殊勢力でないなら、調教カウンタを減らしていく
	IF !IS_SP_COUNTRY(CFLAG:LOCAL:捕虜先) && !IS_SP_COUNTRY(CFLAG:LOCAL:所属)
		FOR LOCAL:1, 0, VARSIZE("SP_TRAIN_COUNT")
			SP_TRAIN_COUNT:LOCAL:(LOCAL:1) = MAX(SP_TRAIN_COUNT:LOCAL:(LOCAL:1) - 1, 0)
		NEXT
	ENDIF

	IF CFLAG:(LOCAL:0):避妊薬残ターン
		CFLAG:(LOCAL:0):避妊薬残ターン = MAX(CFLAG:(LOCAL:0):避妊薬残ターン - 1, 0)
		IF CFLAG:(LOCAL:0):避妊薬残ターン == 0
			CALL COLOR_PRINTL(@"%ANAME(LOCAL)%の避妊薬の効果が切れました", カラー_注意)
			CALL CLEAR_CREAMPIE_HISTORY(LOCAL)
		ENDIF
	ENDIF

	IF CFLAG:(LOCAL:0):排卵誘発剤
		CFLAG:(LOCAL:0):排卵誘発剤 = MAX(CFLAG:(LOCAL:0):排卵誘発剤 - 1, 0)
		SIF CFLAG:(LOCAL:0):排卵誘発剤 == 0
			CALL COLOR_PRINTL(@"%ANAME(LOCAL)%の排卵誘発剤の効果が切れました", カラー_注意)
	ENDIF

	;薬物依存値を減らす 薬物中毒あると300以下にならない
	IF GETBIT(TALENT:(LOCAL:0):淫乱系, 素質_淫乱_薬物中毒)
		CFLAG:(LOCAL:0):薬物依存 = MAX(CFLAG:(LOCAL:0):薬物依存 * 9 / 10, 300)
	ELSE
		CFLAG:(LOCAL:0):薬物依存 = MAX(CFLAG:(LOCAL:0):薬物依存 - RAND:(MAX(CFLAG:(LOCAL:0):薬物依存 * 1 / 10, 1)), 0)

	ENDIF

	;捕虜の場合
	IF CFLAG:(LOCAL:0):捕虜先 != 0 && CFLAG:(LOCAL:0):捕虜先 == CFLAG:MASTER:所属
		;捕虜の機嫌変化
		CALL PRISONER_CHANGE_EMOTION(LOCAL:0)

		;被育児状態の子供の場合
	ELSEIF CFLAG:(LOCAL:0):行動不能状態 == 行動不能_子供
		;機嫌は変動しない

		;捕虜でなく、被育児状態の子供でもない場合
	ELSEIF CFLAG:(LOCAL:0):行動不能状態 != 行動不能_子供
		;現在の機嫌を減衰させる
		TIMES PALAM:(LOCAL:0):怒外, 0.60
		TIMES PALAM:(LOCAL:0):哀外, 0.60
		TIMES PALAM:(LOCAL:0):怖外, 0.60
		TIMES PALAM:(LOCAL:0):怒主, 0.05
		TIMES PALAM:(LOCAL:0):哀主, 0.05
		TIMES PALAM:(LOCAL:0):怖主, 0.05

		;●外的要因による機嫌にランダム値を加える
		;<抑圧>持ちは機嫌が変動しない
		IF !TALENT:(LOCAL:0):抑圧
			;怪我をしている場合
			IF CFLAG:(LOCAL:0):行動不能状態 == 3
				IF RAND:2 == 0
					PALAM:(LOCAL:0):怒外 += RAND:1001
				ELSE
					PALAM:(LOCAL:0):怒外 += RAND:301
				ENDIF
				IF RAND:2 == 0
					PALAM:(LOCAL:0):哀外 += RAND:1001
				ELSE
					PALAM:(LOCAL:0):哀外 += RAND:301
				ENDIF

			ELSE
				IF RAND:15 == 0
					PALAM:(LOCAL:0):怒外 += RAND:2001 - 1000
				ELSE
					PALAM:(LOCAL:0):怒外 += RAND:601 - 300
				ENDIF
				IF RAND:15 == 0
					PALAM:(LOCAL:0):哀外 += RAND:2001 - 1000
				ELSE
					PALAM:(LOCAL:0):哀外 += RAND:601 - 300
				ENDIF
			ENDIF
		ENDIF
	ENDIF

	;捕虜の収監によるRELATIONの変化
	SIF CFLAG:(LOCAL:0):捕虜先 != 0
		CALL PRISONER_CHANGE_RELATION(LOCAL:0)

	;精神力の回復
	IF CFLAG:(LOCAL:0):精神力回復量補正 == 0
		BASE:(LOCAL:0):精神力 = MIN(BASE:(LOCAL:0):精神力 + MAXBASE:(LOCAL:0):精神力 / 2, MAXBASE:(LOCAL:0):精神力)
	ELSE
		BASE:(LOCAL:0):精神力 = MIN(BASE:(LOCAL:0):精神力 + (MAXBASE:(LOCAL:0):精神力 / 2 * CFLAG:(LOCAL:0):精神力回復量補正 / 100), MAXBASE:(LOCAL:0):精神力)
		CFLAG:(LOCAL:0):精神力回復量補正 = 0
	ENDIF

	;崩壊値の減少
	SIF !TALENT:(LOCAL:0):崩壊
		CFLAG:(LOCAL:0):崩壊 -= 600 + (MAXBASE:(LOCAL:0):精神力 / 5)

	SIF TALENT:(LOCAL:0):崩壊
		CFLAG:(LOCAL:0):崩壊 -= MAX((MAXBASE:(LOCAL:0):精神力 / 5), 100)

	CFLAG:(LOCAL:0):崩壊 = LIMIT(CFLAG:(LOCAL:0):崩壊, 0, 10000)

	;子供の成長度を加算
	SIF TALENT:(LOCAL:0):幼児
		CFLAG:(LOCAL:0):子の成長度 = MIN(CFLAG:(LOCAL:0):子の成長度 + 1, 999999)

	;授乳量記録の削除
	CALL CLEAR_BREAST_FEED(LOCAL:0)

NEXT

;-------------------------------------------------
;「会いに行く」での放浪中キャラの用意
;-------------------------------------------------
@MEET_CHECK_CANDIDATES()

MEET_CANDIDATES_REST_TURN --

FOR LOCAL, 0, MEET_MAX_CANDIDATES
	LOCAL:1 = ID_TO_CHARA(MEET_CANDIDATES:LOCAL)
	SIF LOCAL:1 == -1
		CONTINUE
	IF CFLAG:(LOCAL:1):特殊状態 != 特殊状態_放浪 || CFLAG:(LOCAL:1):捕虜先
		MEET_CANDIDATES:LOCAL = 0
	ENDIF
NEXT

IF !IS_COUNTRY(CFLAG:MASTER:所属) || IS_SP_COUNTRY(CFLAG:MASTER:所属)
	VARSET MEET_CANDIDATES, 0
	VARSET MEET_CANDIDATES_REST_TURN, 0
	RETURN 0
ENDIF

LOCAL:2 = 1

FOR LOCAL, 0, MEET_MAX_CANDIDATES
	LOCAL:1 = ID_TO_CHARA(MEET_CANDIDATES:LOCAL)
	IF LOCAL:1 != -1
		LOCAL:2 = 0
		BREAK
	ENDIF
NEXT

SIF LOCAL:2
	MEET_CANDIDATES_REST_TURN = 0

SIF MEET_CANDIDATES_REST_TURN > 0
	RETURN 0

VARSET MEET_CANDIDATES, 0
VARSET MEET_CANDIDATES_REST_TURN, 0

CALL SELECT_CHARA_RANDOM_MULTI(MEET_MAX_CANDIDATES, "MEET_CHECK_CANDIDATES")

FOR LOCAL, 0, MIN(MEET_MAX_CANDIDATES, SELECTED_CHARA_NUM)
	MEET_CANDIDATES:LOCAL = GET_ID(SELECTED_CHARA:LOCAL)
NEXT

SIF SELECTED_CHARA_NUM > 0
	MEET_CANDIDATES_REST_TURN = 4

@SELECT_CHARA_RANDOM_LOGIC_MEET_CHECK_CANDIDATES(対象)
#DIM 対象
RETURN 対象 != MASTER && !CFLAG:対象:捕虜先 && CFLAG:対象:特殊状態 == 特殊状態_放浪

;-------------------------------------------------
;解放カウンタに基づいて捕虜を解放する処理
;-------------------------------------------------
@RELEASE_PRISONERS()
#DIM 特殊捕虜先
VARSET LOCAL

;主人公が捕虜で監禁日数が4日以上ときのみ発生
IF CFLAG:MASTER:捕虜先 && CFLAG:MASTER:解放カウンタ >= 5 && RAND:100 < (CFLAG:MASTER:解放カウンタ - 5) * 15 + 15
	CALL SINGLE_DRAWLINE
	PRINTFORMW 兵士たちが%ANAME(MASTER)%の牢を開け、%ANAME(MASTER)%に対して外に出るように言った
	PRINTFORMW どうやら%ANAME(MASTER)%は解放されることになったようだ…
	PRINTL
	IF CFLAG:MASTER:所属 == 0
		SETCOLOR カラー_注意
		PRINTFORMW %ANAME(MASTER)%は放浪の身になりました
		RESETCOLOR
	ELSE
		SETCOLOR カラー_注意
		PRINTFORMW %ANAME(MASTER)%は君主の元へと戻りました
		RESETCOLOR
	ENDIF
	CALL CAPTURE(MASTER, 0)
ENDIF

FOR LOCAL, 1, CHARANUM
	特殊捕虜先 = IS_SP_COUNTRY(CFLAG:LOCAL:捕虜先)
	;もしその国が何らかの理由で滅んでいるのにまだ捕らえられていたら、強制的に解放する
	IF CFLAG:LOCAL:捕虜先 && !IS_COUNTRY(CFLAG:LOCAL:捕虜先)
		IF !LOCAL:1
			CALL SINGLE_DRAWLINE
			LOCAL:1 = 1
		ENDIF
		SETCOLOR カラー_注意
		IF IS_COUNTRY(CFLAG:LOCAL:所属)
			PRINTFORML 囚われていた%ANAME(LOCAL)%は解放され、%ANAME(GET_COUNTRY_BOSS(CFLAG:LOCAL:所属))%のところに戻りました
		ELSE
			PRINTFORML 囚われていた%ANAME(LOCAL)%は解放され、放浪しました
			CFLAG:LOCAL:特殊状態 = 特殊状態_放浪
		ENDIF
		RESETCOLOR
		;通常の解放処理
	ELSEIF LOCAL != MASTER && CFLAG:LOCAL:捕虜先 && CFLAG:LOCAL:捕虜先 != CFLAG:MASTER:所属 && MIN((CFLAG:LOCAL:解放カウンタ - 5) * 5, 30) > RAND:100 && !特殊捕虜先
		IF !LOCAL:1
			CALL SINGLE_DRAWLINE
			LOCAL:1 = 1
		ENDIF
		SETCOLOR カラー_注意
		IF IS_COUNTRY(CFLAG:LOCAL:所属)
			PRINTFORML %ANAME(GET_COUNTRY_BOSS(CFLAG:LOCAL:捕虜先))%に囚われていた%ANAME(LOCAL)%は\@ CFLAG:LOCAL:解放カウンタ >= 10 ? ようやく# \@解放され、%ANAME(GET_COUNTRY_BOSS(CFLAG:LOCAL:所属))%のところに戻りました
		ELSE
			PRINTFORML %ANAME(GET_COUNTRY_BOSS(CFLAG:LOCAL:捕虜先))%に囚われていた%ANAME(LOCAL)%は解放され、放浪しました
		ENDIF
		RESETCOLOR
		CALL CAPTURE(LOCAL:0, 0)
		;たまに脱走する。特殊勢力なら率高め
	ELSEIF (LOCAL != MASTER && CFLAG:LOCAL:捕虜先 && CFLAG:LOCAL:捕虜先 != CFLAG:MASTER:所属 && 特殊捕虜先 * 12 + 3 > RAND:100)
		IF !LOCAL:1
			CALL SINGLE_DRAWLINE
			LOCAL:1 = 1
		ENDIF
		IF CFLAG:LOCAL:捕虜先 != CFLAG:LOCAL:所属 && (!特殊捕虜先 || CFLAG:LOCAL:所属)
			SETCOLOR カラー_注意
			IF IS_COUNTRY(CFLAG:LOCAL:所属)
				PRINTFORML %ANAME(GET_COUNTRY_BOSS(CFLAG:LOCAL:捕虜先))%に囚われていた%ANAME(LOCAL)%は脱走し、%ANAME(GET_COUNTRY_BOSS(CFLAG:LOCAL:所属))%のところに戻りました
			ELSE
				PRINTFORML %ANAME(GET_COUNTRY_BOSS(CFLAG:LOCAL:捕虜先))%に囚われていた%ANAME(LOCAL)%は脱走し、放浪しました
			ENDIF
			RESETCOLOR
			CALL CAPTURE(LOCAL:0, 0)
		ENDIF
	ENDIF
NEXT
CALL KILL_EMPTY_LINE()

;-------------------------------------------------
;@TURNEND_SKILL_EVENT
;
;-------------------------------------------------
;region @TURNEND_SKILL_EVENT
@TURNEND_SKILL_EVENT
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC SKILL_LV
#DIM DYNAMIC EXP_GAIN
#DIM DYNAMIC EFFECT_RATE
#DIM DYNAMIC ITER_I
#DIM DYNAMIC ITER_J

VARI CUM_AMOUNT_TO_M
FOR CHARA_ID, 0, CHARANUM
	;キャラクターのスキルに応じた処理
	;;経口摂取
	CALL SKILL_GET_LEVEL(CHARA_ID, スキル_大分類_性技, "ORAL_INTAKE")
	SKILL_LV = RESULT
	IF SKILL_LV
		CALL SKILL_GET_EFFECT_RATE(スキル_ジャンル_性技, "ORAL_INTAKE", SKILL_LV)
		CALL STOMACH_SPERM_DECREASE(CHARA_ID, RESULT)
		CUM_AMOUNT_TO_M = RESULT
		IF CUM_AMOUNT_TO_M > 0
			PRINTFORML %ANAME(CHARA_ID)%は口腔に注がれた精液のうち{CUM_AMOUNT_TO_M}mlをマナに変換した
			CALL PRINT_ADD_EXP(CHARA_ID, "魔術経験値", CUM_AMOUNT_TO_M / 10, 1)
			CALL TRAIN_AUTO_ABLUP(CHARA_ID)
		ENDIF
	ENDIF
NEXT

VARI MILK_AMOUNT
VARI CUM_AMOUNT_TO_V
VARI CUM_AMOUNT_TO_A
VARI AMOUNT
VARI PROVIDER_ID
VARI EXP_GAIN_CAP_MANA_CUM_PROVIDE
VARI EXP_GAIN_CAP_MANA_BREAST_FEED
VARI EXP_GAIN
;;魔力供乳
FOR CHARA_ID, 0, CHARANUM
	MILK_AMOUNT = 0
	CUM_AMOUNT_TO_V = 0
	CUM_AMOUNT_TO_A = 0
	EXP_GAIN_CAP_MANA_CUM_PROVIDE = 0
	EXP_GAIN_CAP_MANA_BREAST_FEED = 0
	FOR ITER_I, 0, CHARANUM
		PROVIDER_ID = ITER_I
		CALL SKILL_GET_LEVEL(PROVIDER_ID, スキル_大分類_性技, "MANA_CUM_PROVIDE")
		SKILL_LV = RESULT
		IF SKILL_LV
			;魔力供給
			CALL SKILL_GET_EFFECT_RATE(スキル_ジャンル_性技, "MANA_CUM_PROVIDE", SKILL_LV)
			EFFECT_RATE = RESULT
			FOR ITER_J, 0, WOMB_RECORD_MAX
				IF WOMB_SPERM_ID:CHARA_ID:ITER_J == GET_ID(PROVIDER_ID)
					AMOUNT = FTIMES(WOMB_SPERM_AMOUNT:CHARA_ID:ITER_J, EFFECT_RATE)
					CUM_AMOUNT_TO_V += AMOUNT
					;変換した分の精液を減らす
					WOMB_SPERM_AMOUNT:CHARA_ID:ITER_J = MAX(WOMB_SPERM_AMOUNT:CHARA_ID:ITER_J - AMOUNT, 0)
				ENDIF
				IF ANUS_SPERM_ID:CHARA_ID:ITER_J == GET_ID(PROVIDER_ID)
					AMOUNT = FTIMES(ANUS_SPERM_AMOUNT:CHARA_ID:ITER_J, EFFECT_RATE)
					CUM_AMOUNT_TO_A += AMOUNT
					;変換した分の精液を減らす
					ANUS_SPERM_AMOUNT:CHARA_ID:ITER_J = MAX(ANUS_SPERM_AMOUNT:CHARA_ID:ITER_J - AMOUNT, 0)
				ENDIF
			NEXT
			IF (CUM_AMOUNT_TO_V > 0 || CUM_AMOUNT_TO_A > 0)
				EXP_GAIN_CAP_MANA_CUM_PROVIDE += MAX(ABL:PROVIDER_ID:魔術 / 10, 2)
			ENDIF
		ENDIF
		;魔力供乳
		CALL SKILL_GET_LEVEL(PROVIDER_ID, スキル_大分類_性技, "MANA_PROVIDE")
		SKILL_LV = RESULT
		IF SKILL_LV
			CALL SKILL_GET_EFFECT_RATE(スキル_ジャンル_性技, "MANA_PROVIDE", SKILL_LV)
			EFFECT_RATE = RESULT
			FOR ITER_J, 0, WOMB_RECORD_MAX
				IF BREAST_FEED_ID:PROVIDER_ID:ITER_J == GET_ID(CHARA_ID)
					MILK_AMOUNT += FTIMES(BREAST_FEED_AMOUNT:PROVIDER_ID:ITER_J, EFFECT_RATE)
				ENDIF
			NEXT
			IF MILK_AMOUNT > 0
				EXP_GAIN_CAP_MANA_BREAST_FEED += MAX(ABL:PROVIDER_ID:魔術 / 10, 2)
			ENDIF
		ENDIF
	NEXT
	EXP_GAIN = LIMIT(CUM_AMOUNT_TO_V / 15, 0, EXP_GAIN_CAP_MANA_CUM_PROVIDE)
	IF EXP_GAIN  > 0
		CALLF TAG_PRINT(@"@C:{カラー_妊娠}@%ANAME(CHARA_ID)%は膣内に注がれた濃厚な精液{CUM_AMOUNT_TO_V}mlを魔力に変換した@/C@", 1)
		CALL PRINT_ADD_EXP(CHARA_ID, "魔術経験値", EXP_GAIN, 1)
		CALL TRAIN_AUTO_ABLUP(CHARA_ID)
	ENDIF
	EXP_GAIN = LIMIT(CUM_AMOUNT_TO_A / 15, 0, EXP_GAIN_CAP_MANA_CUM_PROVIDE)
	IF EXP_GAIN  > 0
		CALLF TAG_PRINT(@"@C:{カラー_妊娠}@%ANAME(CHARA_ID)%は肛腔に注がれた濃厚な精液{CUM_AMOUNT_TO_A}mlを魔力に変換した@/C@", 1)
		CALL PRINT_ADD_EXP(CHARA_ID, "魔術経験値", EXP_GAIN, 1)
		CALL TRAIN_AUTO_ABLUP(CHARA_ID)
	ENDIF
	EXP_GAIN = LIMIT(MILK_AMOUNT  / 10, 0, EXP_GAIN_CAP_MANA_BREAST_FEED)
	IF EXP_GAIN  > 0
		CALLF TAG_PRINT(@"@C:{カラー_妊娠}@%ANAME(CHARA_ID)%は飲み干した豊潤な母乳{MILK_AMOUNT}mlを魔力に変換した@/C@", 1)
		CALL PRINT_ADD_EXP(CHARA_ID, "魔術経験値", EXP_GAIN, 1)
		CALL TRAIN_AUTO_ABLUP(CHARA_ID)
	ENDIF
NEXT

;#endregion


code:
#DIM  CONST UI_CONTAINER_ID_MAX = 100
#DIMS XML_UI_CONTAINER, UI_CONTAINER_ID_MAX
;文字数単位での最大幅と高さ
#DIM CONST UI_MAXWIDTH = 86
#DIM CONST UI_MAXHEIGHT = 45


code:
;-------------------------------------------------
;;; 疑似UIコンテナ
;-------------------------------------------------
@UIC_INIT()
#DIM CONTAINER_ID ;

CONTAINER_ID ++
IF CONTAINER_ID == UI_CONTAINER_ID_MAX
    CONTAINER_ID = 1
ENDIF

XML_UI_CONTAINER:CONTAINER_ID '= @"<layout><containers id = '{CONTAINER_ID}'></containers></layout>"
RESULT = CONTAINER_ID
RETURN RESULT

;-------------------------------------------------
;;; 指定したIDにUIコンテナを追加する
;;; - ARGS
;;;     - CONTAINER_ID {int}: コンテナID
;;;     - CONTAINER_NAME {string}: コンテナ名
;;;     - TEXT {string}: コンテナ内テキスト
;;;     - DIC_ATTRIBUTES {string}: DIVタグに指定する属性
;;;       - 指定可能な属性の詳細は以下のURLを参照。属性の大文字小文字は区別されない(全て小文字に変換される)
;;;       - https://evilmask.gitlab.io/emuera.em.doc/Emuera/HTML_PRINT.html#div
;;; - RETURN
;;;     - RESULT {int}: 0 失敗 1 成功
;-------------------------------------------------
@UIC_ADD(CONTAINER_ID, CONTAINER_NAME, TEXT = "", DIC_ATTRIBUTES = "")
#DIM  CONTAINER_ID
#DIMS CONTAINER_NAME
#DIMS TEXT
#DIMS DIC_ATTRIBUTES

VARS XML
IF XML_UI_CONTAINER:CONTAINER_ID == ""
    RETURN 0
ENDIF
XML = %XML_UI_CONTAINER:CONTAINER_ID%

;既に同名のコンテナがある場合は追加しない
IF XML_GET(XML, @"//containers[@id = '{CONTAINER_ID}']/container[@name = '%CONTAINER_NAME%']", 1)
    RETURN 0
ENDIF

;DIVタグの追加
XML_ADDNODE XML, @"//containers[@id = '{CONTAINER_ID}']", @"<container name = '%CONTAINER_NAME%'>

</container>"

;DIVタグの属性が指定されていない場合はデフォルト値を設定
IF DIC_ATTRIBUTES == ""
    DIC_ATTRIBUTES '= "[RECT:0,0,0,0]"
ENDIF
DIC_ATTRIBUTES = %TOLOWER(DIC_ATTRIBUTES)%
IF !DIC_CONTAINSKEY(DIC_ATTRIBUTES, "xpos")
    DIC_ATTRIBUTES += "[xpos:0]"
ENDIF
IF !DIC_CONTAINSKEY(DIC_ATTRIBUTES, "ypos")
    DIC_ATTRIBUTES += "[ypos:0]"
ENDIF

;コンテナ配列を更新
XML_UI_CONTAINER:CONTAINER_ID = %XML%

;DIVタグの属性を設定
VARI I
VARI KEY_NUM
VARS KEYS, 100
CALL DIC_KEYS(DIC_ATTRIBUTES)
KEY_NUM = RESULT
ARRAYCOPY "RESULTS", "KEYS"

FOR I, 0, KEY_NUM
    CALL UIC_SET_DIVATTR(CONTAINER_ID, CONTAINER_NAME, TOLOWER(KEYS:I), TOLOWER(DIC_GET(DIC_ATTRIBUTES, KEYS:I)))
NEXT

;コンテナ内テキストの設定
IF TEXT != ""
    CALL UIC_SET_TEXT(CONTAINER_ID, CONTAINER_NAME, TEXT)
ENDIF

RETURN 1

@UIC_SHOW(CONTAINER_ID)
#DIM CONTAINER_ID
VARS DIVS, 100

VARS HTML
VARI CONTAINER_CNT
VARI I
CONTAINER_CNT = XML_GET(XML_UI_CONTAINER:CONTAINER_ID, @"//containers[@id = '{CONTAINER_ID}']/container", DIVS, 2)
FOR I, 0, CONTAINER_CNT
    HTML += DIVS:I
NEXT

HTML_PRINT HTML_UNESCAPE(HTML_UNESCAPE(HTML)), 1
RETURN

;-------------------------------------------------
;;; コンテナにテキストをセットする
;;; - ARGS
;;;     - CONTAINER_ID {int}: コンテナID
;;;     - CONTAINER_NAME {string}: コンテナ名
;;;     - TEXT {string}: セットするテキスト
;;; - RETURN
;;;     - RESULT {int}: 0 失敗 1 成功
;-------------------------------------------------
@UIC_SET_TEXT(CONTAINER_ID, CONTAINER_NAME, TEXT)
#DIM CONTAINER_ID
#DIMS CONTAINER_NAME
#DIMS TEXT

; テキストノードを更新
; HTMLテキストが入ることを前提としているため、HTMLエスケープを行う
XML_SET XML_UI_CONTAINER:CONTAINER_ID, @"//containers[@id = '{CONTAINER_ID}']/container[@name = '%CONTAINER_NAME%']/div", HTML_ESCAPE(TEXT), 0, 2
RETURN RESULT

;-------------------------------------------------
;;; コンテナの存在判定を行う
;;; - ARGS
;;;     - CONTAINER_ID {int}: コンテナID
;;;     - CONTAINER_NAME {string}: コンテナ名
;;; - RETURN
;;;     - RESULT {int}: 0 存在しない 1 存在する
;-------------------------------------------------
@UIC_EXISTS(CONTAINER_ID, CONTAINER_NAME)
#FUNCTION
#DIM CONTAINER_ID
#DIMS CONTAINER_NAME

; XMLドキュメントが存在しない場合
IF XML_UI_CONTAINER:CONTAINER_ID == ""
    RETURNF 0
ENDIF

; コンテナの存在チェック
RETURNF XML_GET(XML_UI_CONTAINER:CONTAINER_ID, @"//containers[@id = '{CONTAINER_ID}']/container[@name = '%CONTAINER_NAME%']")

;-------------------------------------------------
;;; DIVタグの属性値をセットする
;;; - ARGS
;;;     - CONTAINER_ID {int}: コンテナID
;;;     - CONTAINER_NAME {string}: コンテナ名
;;;     - ATTRIBUTE_NAME {string}: 設定したい属性名
;;;     - ATTRIBUTE_VALUE {string}: 設定したい属性値
;;; - RETURN
;;;     - RESULT {int}: 0 失敗 1 成功
;-------------------------------------------------
@UIC_SET_DIVATTR(CONTAINER_ID, CONTAINER_NAME, ATTRIBUTE_NAME, ATTRIBUTE_VALUE)
#DIM CONTAINER_ID
#DIMS CONTAINER_NAME
#DIMS ATTRIBUTE_NAME
#DIMS ATTRIBUTE_VALUE
#DIMS DYNAMIC POS_VALUES, 4
#DIMS RECT_STR
; コンテナの存在確認
IF !UIC_EXISTS(CONTAINER_ID, CONTAINER_NAME)
    RETURN 0
ENDIF

; 属性名は小文字に変換（HTMLの属性は大文字小文字を区別しない）
ATTRIBUTE_NAME = %TOLOWER(ATTRIBUTE_NAME)%
ATTRIBUTE_VALUE = %TOLOWER(ATTRIBUTE_VALUE)%

; 有効な属性名かチェック
SELECTCASE ATTRIBUTE_NAME
        ; サイズと位置関連
    CASE "width", "height", "xpos", "ypos", "size", "rect", "pos"
        ; 表示関連
    CASE "depth", "color", "display"
        ; マージン・パディング・ボーダー関連
    CASE "margin", "padding", "border", "bcolor", "radius"
        ; 無効な属性名の場合
    CASEELSE
        RETURN 0
ENDSELECT

VARS XPATH
XPATH '= @"//containers[@id = '{CONTAINER_ID}']/container[@name = '%CONTAINER_NAME%']/div"

; RECT属性の場合は個別の位置・サイズ属性も設定
IF ATTRIBUTE_NAME == "rect"
    ; x,y,width,heightの形式から数値を取り出す
    SPLIT ATTRIBUTE_VALUE, ",", POS_VALUES
    ; 個別の属性を設定
    XML_ADDATTRIBUTE XML_UI_CONTAINER:CONTAINER_ID, XPATH, "xpos", POS_VALUES:0
    XML_ADDATTRIBUTE XML_UI_CONTAINER:CONTAINER_ID, XPATH, "ypos", POS_VALUES:1
    XML_ADDATTRIBUTE XML_UI_CONTAINER:CONTAINER_ID, XPATH, "width", POS_VALUES:2
    XML_ADDATTRIBUTE XML_UI_CONTAINER:CONTAINER_ID, XPATH, "height", POS_VALUES:3
ELSEIF ATTRIBUTE_NAME == "pos"
    SPLIT ATTRIBUTE_VALUE, ",", POS_VALUES
    XML_ADDATTRIBUTE XML_UI_CONTAINER:CONTAINER_ID, XPATH, "xpos", POS_VALUES:0
    XML_ADDATTRIBUTE XML_UI_CONTAINER:CONTAINER_ID, XPATH, "ypos", POS_VALUES:1
ELSEIF ATTRIBUTE_NAME == "size"
    SPLIT ATTRIBUTE_VALUE, ",", POS_VALUES
    XML_ADDATTRIBUTE XML_UI_CONTAINER:CONTAINER_ID, XPATH, "width", POS_VALUES:0
    XML_ADDATTRIBUTE XML_UI_CONTAINER:CONTAINER_ID, XPATH, "height", POS_VALUES:1
ELSE
    XML_ADDATTRIBUTE XML_UI_CONTAINER:CONTAINER_ID, XPATH, ATTRIBUTE_NAME, ATTRIBUTE_VALUE
ENDIF

; 指定された属性を設定

RETURN 1

;-------------------------------------------------
;;; DIVタグの属性値を取得する
;;; - ARGS
;;;     - CONTAINER_ID {int}: コンテナID
;;;     - CONTAINER_NAME {string}: コンテナ名
;;;     - ATTRIBUTE_NAME {string}: 取得したい属性名
;;; - RETURN
;;;     - RESULTS:0 {string}: 属性値
;;;     - RESULT {int}: 0 失敗 1 成功
;-------------------------------------------------
@UIC_GET_DIVATTR(CONTAINER_ID, CONTAINER_NAME, ATTRIBUTE_NAME)
#DIM CONTAINER_ID
#DIMS CONTAINER_NAME
#DIMS ATTRIBUTE_NAME
#DIMS ATTRIBUTE_VALUE

; 属性名は小文字に変換（HTMLの属性は大文字小文字を区別しない）
ATTRIBUTE_NAME = %TOLOWER(ATTRIBUTE_NAME)%

; コンテナが存在しない、または属性が取得できない場合は失敗を返す
IF !XML_GET(XML_UI_CONTAINER:CONTAINER_ID, @"//containers[@id = '{CONTAINER_ID}']/container[@name = '%CONTAINER_NAME%']/div/@%ATTRIBUTE_NAME%", ATTRIBUTE_VALUE)
    RESULTS:0 = ""
    RETURN 0
ENDIF

RESULTS:0 = %ATTRIBUTE_VALUE%
RETURN 1

;-------------------------------------------------
;;; コンテナの位置とサイズを取得する
;;; - ARGS
;;;     - CONTAINER_ID {int}: コンテナID
;;;     - CONTAINER_NAME {string}: コンテナ名
;;; - RETURN
;;;     - RESULT:0 {int}: 0 失敗 1 成功
;;;     - RESULT:1 {int}: 原点X座標
;;;     - RESULT:2 {int}: 原点Y座標
;;;     - RESULT:3 {int}: 幅
;;;     - RESULT:4 {int}: 高さ
;-------------------------------------------------
@UIC_GET_DIVRECT(CONTAINER_ID, CONTAINER_NAME)
#DIM CONTAINER_ID
#DIMS CONTAINER_NAME
#DIMS DYNAMIC RECT_VALUES, 4

VARS RECT_STR
VARSET RECT_VALUES

;XPOS属性が存在する場合はその値をそのまま使用する
VARI ERROR_CNT
CALL UIC_GET_DIVATTR(CONTAINER_ID, CONTAINER_NAME, "XPOS")
IF RESULT
    RECT_VALUES:0 = %RESULTS:0%
    CALL UIC_GET_DIVATTR(CONTAINER_ID, CONTAINER_NAME, "YPOS")
    IF RESULT
        RECT_VALUES:1 = %RESULTS:0%
    ELSE
        ERROR_CNT++
    ENDIF
    CALL UIC_GET_DIVATTR(CONTAINER_ID, CONTAINER_NAME, "WIDTH")
    IF RESULT
        RECT_VALUES:2 = %RESULTS:0%
    ELSE
        ERROR_CNT++
    ENDIF
    CALL UIC_GET_DIVATTR(CONTAINER_ID, CONTAINER_NAME, "HEIGHT")
    IF RESULT
        RECT_VALUES:3 = %RESULTS:0%
    ELSE
        ERROR_CNT++
    ENDIF
    IF ERROR_CNT
        RETURN 0, 0, 0, 0, 0
    ELSE
        RETURN 1, TOINT(RECT_VALUES:0), TOINT(RECT_VALUES:1), TOINT(RECT_VALUES:2), TOINT(RECT_VALUES:3)
    ENDIF
ELSE
    ;UICは基本的にすべてXPOS, YPOS, WIDTH, HEIGHT属性で保持しているはず。RECT属性が存在するか一応確認
    CALL UIC_GET_DIVATTR(CONTAINER_ID, CONTAINER_NAME, "RECT")
    ; [RECT:x,y,width,height]の形式から数値を取り出す
    SPLIT RECT_STR, ",", RECT_VALUES
    RETURN 1, TOINT(RECT_VALUES:0), TOINT(RECT_VALUES:1), TOINT(RECT_VALUES:2), TOINT(RECT_VALUES:3)
ENDIF

;-------------------------------------------------
;;; コンテナの基準点座標を取得する
;;; - ARGS
;;;     - CONTAINER_ID {int}: コンテナID
;;;     - CONTAINER_NAME {string}: コンテナ名
;;;     - PIVOT_POINT {string}: 基準点の指定
;;;       - LEFT_TOP: 左上
;;;       - LEFT_BOTTOM: 左下
;;;       - RIGHT_TOP: 右上
;;;       - RIGHT_BOTTOM: 右下
;;;       - CENTER: 中央
;;;       - TOP: 上辺中央
;;;       - RIGHT: 右辺中央
;;;       - BOTTOM: 下辺中央
;;;       - LEFT: 左辺中央
;;; - RETURN
;;;     - RESULT:0 {int}: 0 失敗 1 成功
;;;     - RESULT:1 {int}: 基準点のX座標
;;;     - RESULT:2 {int}: 基準点のY座標
;-------------------------------------------------
@UIC_GET_PIVOT(CONTAINER_ID, CONTAINER_NAME, PIVOT_POINT)
#DIM CONTAINER_ID
#DIMS CONTAINER_NAME
#DIMS PIVOT_POINT

; コンテナの矩形情報を取得
CALL UIC_GET_DIVRECT(CONTAINER_ID, CONTAINER_NAME)
SIF !RESULT
    RETURN 0, 0, 0

; 基準点の座標を計算
CALL UIC_CALC_RECT_PIVOT(RESULT:1, RESULT:2, RESULT:3, RESULT:4, PIVOT_POINT)
RETURN RESULT, RESULT:1, RESULT:2

;-------------------------------------------------
;;; 矩形の基準点座標を取得する
;;; - ARGS
;;;     - X {int}: 矩形の左上X座標
;;;     - Y {int}: 矩形の左上Y座標
;;;     - WIDTH {int}: 矩形の幅
;;;     - HEIGHT {int}: 矩形の高さ
;;;     - PIVOT_POINT {string}: 基準点の指定 @UIC_GET_PIVOT参照
;;; - RETURN
;;;     - RESULT:0 {int}: 0 失敗 1 成功
;;;     - RESULT:1 {int}: 基準点のX座標
;;;     - RESULT:2 {int}: 基準点のY座標
;-------------------------------------------------
@UIC_CALC_RECT_PIVOT(POS_X, POS_Y, WIDTH, HEIGHT, PIVOT_POINT)
#DIM POS_X
#DIM POS_Y
#DIM WIDTH
#DIM HEIGHT
#DIMS PIVOT_POINT

SELECTCASE TOUPPER(PIVOT_POINT)
        ; 四隅
    CASE "LEFT_TOP"
        RETURN 1, POS_X, POS_Y
    CASE "LEFT_BOTTOM"
        RETURN 1, POS_X, POS_Y + HEIGHT
    CASE "RIGHT_TOP"
        RETURN 1, POS_X + WIDTH, POS_Y
    CASE "RIGHT_BOTTOM"
        RETURN 1, POS_X + WIDTH, POS_Y + HEIGHT
        ; 中央
    CASE "CENTER"
        RETURN 1, POS_X + (WIDTH / 2), POS_Y + (HEIGHT / 2)
        ; 各辺の中点
    CASE "TOP"
        RETURN 1, POS_X + (WIDTH / 2), POS_Y
    CASE "RIGHT"
        RETURN 1, POS_X + WIDTH, POS_Y + (HEIGHT / 2)
    CASE "BOTTOM"
        RETURN 1, POS_X + (WIDTH / 2), POS_Y + HEIGHT
    CASE "LEFT"
        RETURN 1, POS_X, POS_Y + (HEIGHT / 2)
    CASEELSE
        ; 無効な基準点が指定された場合
        RETURN 0, 0, 0
ENDSELECT

;-------------------------------------------------
;;; コンテナの相対位置を設定する
;;; - ARGS
;;;     - CONTAINER_ID {int}: コンテナID
;;;     - TARGET_NAME {string}: 位置を設定するコンテナ名
;;;     - REFERENCE_NAME {string}: 基準となるコンテナ名
;;;     - ANCHOR {string}: ターゲットコンテナのアンカーポイント
;;;       - LEFT_TOP: 左上
;;;       - LEFT_BOTTOM: 左下
;;;       - RIGHT_TOP: 右上
;;;       - RIGHT_BOTTOM: 右下
;;;       - CENTER: 中央
;;;       - TOP: 上辺中央
;;;       - RIGHT: 右辺中央
;;;       - BOTTOM: 下辺中央
;;;       - LEFT: 左辺中央
;;;     - TARGET_PIVOT {string}: 基準コンテナの基準点。指定パラメータ名はアンカーポイントと同様
;;;     - PADDING {int}: コンテナ間の余白
;;; - RETURN
;;;     - RESULT {int}: 0 失敗 1 成功
;-------------------------------------------------
@UIC_SET_LAYOUT(CONTAINER_ID, TARGET_NAME, DIC_LAYOUT)
#DIM CONTAINER_ID
#DIMS TARGET_NAME
#DIMS DIC_LAYOUT
VARS REFERENCE_NAME
VARS ANCHOR
VARS TARGET_PIVOT
VARI PADDING
VARI REF_X
VARI REF_Y
VARI ANCHOR_X
VARI ANCHOR_Y
VARI TARGET_X
VARI TARGET_Y
VARI TARGET_WIDTH
VARI TARGET_HEIGHT
VARS PADDING_STR
VARS PADDING_VALUES, 2

IF DIC_CONTAINSKEY(DIC_LAYOUT, "TARGET")
    REFERENCE_NAME = %DIC_GET(DIC_LAYOUT, "TARGET")%
ELSE
    REFERENCE_NAME = "LINE_LEFT"
ENDIF

IF DIC_CONTAINSKEY(DIC_LAYOUT, "ANCHOR")
    ANCHOR = %DIC_GET(DIC_LAYOUT, "ANCHOR")%
ELSE
    ANCHOR = "LEFT_TOP"
ENDIF

IF DIC_CONTAINSKEY(DIC_LAYOUT, "TARGET_PIVOT")
    TARGET_PIVOT = %DIC_GET(DIC_LAYOUT, "TARGET_PIVOT")%
ELSE
    TARGET_PIVOT = "LEFT_TOP"
ENDIF

IF DIC_CONTAINSKEY(DIC_LAYOUT, "PADDING")
    PADDING_STR = %DIC_GET(DIC_LAYOUT, "PADDING")%
    ; カンマで区切られているかチェック
    IF STRCOUNT(PADDING_STR, ",")
        ; 水平・垂直パディングを個別に設定
        SPLIT PADDING_STR, ",", PADDING_VALUES
    ELSE
        ; 単一の値を両方に設定
        PADDING_VALUES:0 = %PADDING_STR%
        PADDING_VALUES:1 = %PADDING_STR%
    ENDIF
ELSE
    PADDING_VALUES:0 = 0
    PADDING_VALUES:1 = 0
ENDIF

IF REFERENCE_NAME == "LINE_LEFT"
    REF_X = 0
    REF_Y = 0
ELSEIF REFERENCE_NAME == "LINE_RIGHT"
    REF_X = UI_MAXWIDTH * 100
    REF_Y = 0
ELSE
    ; 基準コンテナの指定位置を取得
    CALL UIC_GET_PIVOT(CONTAINER_ID, REFERENCE_NAME, TARGET_PIVOT)
    SIF !RESULT
        RETURN 0
    REF_X = RESULT:1
    REF_Y = RESULT:2
ENDIF
; レイアウト変更対象コンテナのサイズを取得
CALL UIC_GET_DIVRECT(CONTAINER_ID, TARGET_NAME)
SIF !RESULT
    RETURN 0
TARGET_WIDTH = RESULT:3
TARGET_HEIGHT = RESULT:4

; ターゲットコンテナのアンカー位置を計算
CALL UIC_CALC_RECT_PIVOT(0, 0, TARGET_WIDTH, TARGET_HEIGHT, ANCHOR)
SIF !RESULT
    RETURN 0
ANCHOR_X = RESULT:1
ANCHOR_Y = RESULT:2

; パディングを考慮した最終位置を計算
SELECTCASE TARGET_PIVOT
    CASE "LEFT_TOP", "LEFT", "LEFT_BOTTOM"
        TARGET_X = REF_X - ANCHOR_X + TOINT(PADDING_VALUES:0)
    CASE "RIGHT_TOP", "RIGHT", "RIGHT_BOTTOM"
        TARGET_X = REF_X - ANCHOR_X - TOINT(PADDING_VALUES:0)
    CASEELSE
        TARGET_X = REF_X - ANCHOR_X
ENDSELECT

SELECTCASE TARGET_PIVOT
    CASE "LEFT_TOP", "TOP", "RIGHT_TOP"
        TARGET_Y = REF_Y - ANCHOR_Y + TOINT(PADDING_VALUES:1)
    CASE "LEFT_BOTTOM", "BOTTOM", "RIGHT_BOTTOM"
        TARGET_Y = REF_Y - ANCHOR_Y - TOINT(PADDING_VALUES:1)
    CASEELSE
        TARGET_Y = REF_Y - ANCHOR_Y
ENDSELECT

; 位置を設定
CALL UIC_SET_DIVATTR(CONTAINER_ID, TARGET_NAME, "POS", @"{TARGET_X},{TARGET_Y}")
RETURN RESULT

;-------------------------------------------------
;;; 指定IDのコンテナを破棄する
;;; - ARGS
;;;     - CONTAINER_ID {int}: コンテナID, 無指定の場合はすべてのコンテナを破棄
;-------------------------------------------------
@UIC_DISPOSE(CONTAINER_ID = -1)
#DIM CONTAINER_ID

IF CONTAINER_ID == -1
    VARSET XML_UI_CONTAINER
ELSE
    XML_UI_CONTAINER:CONTAINER_ID '= ""
ENDIF

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

@NEWLINE(ARG)
VARI I
FOR I, 0, ARG
    PRINTL
NEXT
RETURN

@HTML_UNESCAPE(ARGS)
#FUNCTIONS
#DIMS DYNAMIC RESULT_TEXT
#DIMS DYNAMIC TARGET_TEXT

TARGET_TEXT = %ARGS%

; HTML特殊文字のアンエスケープ
TARGET_TEXT = %REPLACE(TARGET_TEXT, "<", "<")%
TARGET_TEXT = %REPLACE(TARGET_TEXT, ">", ">")%
TARGET_TEXT = %REPLACE(TARGET_TEXT, """, "\"")%
TARGET_TEXT = %REPLACE(TARGET_TEXT, "'", "'")%
TARGET_TEXT = %REPLACE(TARGET_TEXT, "'", "'")%
TARGET_TEXT = %REPLACE(TARGET_TEXT, "'", "'")%
TARGET_TEXT = %REPLACE(TARGET_TEXT, "/", "/")%
TARGET_TEXT = %REPLACE(TARGET_TEXT, "`", "`")%
TARGET_TEXT = %REPLACE(TARGET_TEXT, " ", " ")%
TARGET_TEXT = %REPLACE(TARGET_TEXT, "&", "&")%

RETURNF TARGET_TEXT

;-------------------------------------------------
;;; EM-EE V50で実装されたテキスト行連結時の改行コード置換文字列変更機能を用いて
;;; FLでは改行コードを\t\tに変更している
;;; この関数はその前提で行連結を用いて記載されたテキストを行単位に分割する
;;;
;;; ※解釈する行連結文字列はスペースインデントにもタブインデントにも対応しているが、スペースインデント推奨
;;; タブインデントは数次第では正しく分割できない可能性がある
;-------------------------------------------------
@TEXT_SPLIT_RAWTEXT(TEXT, SPLIT_ARRAY)
#DIMS TEXT
#DIMS REF SPLIT_ARRAY
#DIM  LINE_CNT

; 2つ以上のタブで区切られた行を分割する
; 二つ目の条件は空行に対応するため。特殊なインデントでTEXTを投入されると正しく分割できないかもしれない
REGEXPMATCH TEXT, "[^\t]+ \t|[\t]+ \t",RESULT, SPLIT_ARRAY
LINE_CNT = RESULT
VARI I
;スペースインデントの冒頭スペース、タブインデント、改行符丁の文末\s\tを除去
;デイリーイベントにつけられた改行符丁\nもV50以降は不要なので除去
FOR I, 0, LINE_CNT
    SPLIT_ARRAY:I = %REPLACE(SPLIT_ARRAY:I, "^[ |\t|\n]+| \t$", "")%
NEXT

RETURN LINE_CNT


code:
;-------------------------------------------------
;与えたバージョン文字列に対応するバージョン数値の取得
;-------------------------------------------------
@GET_VERSION_VALUE(バージョン文字列)
#FUNCTION
#DIMS バージョン文字列
VARSET LOCALS
;RESULT退避
LOCAL = RESULT
SPLIT バージョン文字列, ".", LOCALS
RESULT = LOCAL

RETURNF TOINT(LOCALS:0) * 10000 + TOINT(LOCALS:1) * 1000 + TOINT(LOCALS:2)
;-------------------------------------------------
;与えたバージョン数値に対応するバージョン文字列の取得
;-------------------------------------------------
@GET_VERSION_STRING(バージョン数値)
#FUNCTIONS
#DIM バージョン数値

RETURNF TOSTR(バージョン数値 / 10000) + "." + TOSTR(バージョン数値 % 10000)
;-------------------------------------------------
;与えたバージョン文字列と今のバージョンを比較し、アプデが必要か調べる
;-------------------------------------------------
@CHECK_UPDATE(バージョン文字列)
#FUNCTION
#DIMS バージョン文字列

RETURNF LASTLOAD_VERSION < GET_VERSION_VALUE(バージョン文字列)

;-------------------------------------------------
;セーブデータのアップデート処理
;-------------------------------------------------
@UPDATE
#DIM 強制引き継ぎフラグ
#DIM L_CNT
#DIM CHARA_ID
DEBUGPRINTFORML @UPDATE CALLED
強制引き継ぎフラグ = 0

; キャラの追加
FOR LOCAL:0, 0, MAX_FIXED_CHARA
	;CSVファイルの存在判定
	SIF EXISTCSV(LOCAL:0) && GETCHARA(LOCAL:0) == -1
		CALL ADD_CHARA_FROM_CSV(LOCAL:0)
NEXT

; ポートレートサイズ
IF PORTRAIT_倍率 == 0
	PORTRAIT_サイズ設定値 = 1
	PORTRAIT_倍率 = PORTRAIT_サイズ設定定義:PORTRAIT_サイズ設定値
ENDIF

; キャラに対する更新
FOR LOCAL, 0, CHARANUM
	;毎調教事に初期化すべきフラグ・変数で初期化が漏れていたフラグの初期化
	VARSET COM_FORBIDDEN:LOCAL:0, 0
	;TALENTの陥落判定とFLAGの同期
	IF TALENT:LOCAL:恋慕 && !CFLAG:LOCAL:陥落済み
		FLAG:陥落人数 += 1
		CFLAG:LOCAL:陥落済み = 1
	ENDIF
	;最低スキルポイント付与
	L_CNT = 0
	FOR L_CNT, 0, SKILL_MAJOR_GENRE_NUM
		IF BASE_SKILL_POINT:LOCAL:L_CNT == 0
			BASE_SKILL_POINT:LOCAL:L_CNT = 初期SP
		ENDIF
	NEXT
	;一部のキャラクターは口上カラーコードの初期設定が欠けているためここでセット
	CFLAG:NAME_TO_CHARA("エル"):口上カラーコード = エル_口上カラー
	IF !CFLAG:NAME_TO_CHARA("あなた"):口上カラーコード
		CFLAG:NAME_TO_CHARA("あなた"):口上カラーコード = カラー_白
	ENDIF
	;不正なキャラデータの修正
	;-------------------------------------------------
	;親が育児状態だが育児対象キャラがデータ上存在しない
	IF CFLAG:LOCAL:育児対象 > 0 && ID_TO_CHARA(CFLAG:LOCAL:育児対象) == -1
		CFLAG:LOCAL:行動不能状態 = 0
		CFLAG:LOCAL:育児対象 = 0
		CFLAG:LOCAL:育児期間 = 0
		TALENT:LOCAL:子供人質 = 0
	ENDIF
	IF LOCAL == NAME_TO_CHARA("UC_オリヴィア")
		SIF CFLAG:LOCAL:所属 == 所属_プレイヤー
			CFLAG:LOCAL:ゲストモブ = 0
		SIF !TALENT:LOCAL:動物耳
			TALENT:LOCAL:動物耳 = 1
		SIF !TALENT:LOCAL:しっぽ
			TALENT:LOCAL:しっぽ = 1
	ENDIF
	;触手妊娠バグの補正
	SIF !TALENT:LOCAL:妊娠 && !TALENT:LOCAL:触手妊娠 && CFLAG:LOCAL:妊娠期間 > 0
		CFLAG:LOCAL:妊娠期間 = 0
NEXT

; 所持武器リストのDB変換
CALL UPDATE_CONVERT_DIC_WEAPON_STOCK_LIST_TO_DT()
IF RESULT
	; 武器定義ファイルからテーブルへの武器ステータス読込
	CALL LOAD_WEAPON_DATA_TO_TABLE()
ENDIF

;暫定対応：不正な状態になったデータのリカバリ処理
DT_SELECT "WEAPON_STOCK",@"EQUIP_CHARA_ID > {CHARANUM -1}"
FOR LOCAL, 0, RESULT
	DT_CELL_SET "WEAPON_STOCK", RESULT:(LOCAL + 1), "EQUIP_CHARA_ID", -2, 1
NEXT

;クエストデータに関する補正
;深森の忘都のクエスト進行度不具合の補正
IF QST_SV_QUEST_FLAG:30 == 1
	;ダイラオルム討伐済みならクリア扱いにする
	IF QST_SV_EVENT_FLAG:30:110 == 1
		QST_SV_QUEST_FLAG:30 = 2
	ENDIF
ENDIF

;-------------------------------------------------
;バージョンアップによるセーブデータ修正
;-------------------------------------------------
IF CHECK_UPDATE("0.4.001")
	;追加素質<魔人>をアステに適用
	TALENT:NAME_TO_CHARA("UC_アステ"):魔人 = 1
	;追加したコンフィグの初期値設定
	FLCONFIG:ステータスタブ切替ショートカット = 2
ENDIF

IF CHECK_UPDATE("0.3.801")
	FOR LOCAL, 0, CHARANUM
		IF FACE_PARTS:LOCAL:IMG_鼻 == ""
			CALL SET_FACE_DEFAULT_NOSE_PARTS(LOCAL)
		ENDIF
	NEXT
ENDIF
IF CHECK_UPDATE("0.3.722")
	;追加したコンフィグの初期値設定
	FLCONFIG:宿泊ゲストの男性率 = 40
	FLCONFIG:カップル客の生成率 = 50
	FLCONFIG:カップル客の個室以外での逢瀬を許可 = 1
	FLCONFIG:同性カップル客の生成率 = 20
	FLCONFIG:女性同性カップルの許可 = 1
	FLCONFIG:男性同性カップルの許可 = 0
ENDIF
IF CHECK_UPDATE("0.3.721")
	;関係性レコードのキャラ削除時の不具合に対する暫定補正対応
	CALL CHARA_RELATION_DELETE_INVALID_RECORD()
ENDIF
IF CHECK_UPDATE("0.3.400")
	;エンチャントルーンの在庫管理テーブルを作成
	CALL CREATE_RUNE_STOCK_TABLE()
	FLCONFIG:エネミーの好色率 = 50
ENDIF
IF CHECK_UPDATE("0.3.332")
	;「eraFL_v0.331用_ユーザビリティ向上パッチ」対応
	;■ルビ表示の調整対応
	;あなたのルビを削除
	;・名前が「あなた」以外でルビが「アナタ」になっていたら削除する
	IF CSTR:MASTER:名 != "あなた" && CSTR:MASTER:名カナ == "アナタ"
		DEBUGPRINTL CHECK_UPDATE 0.3.332: 「%ANAME(MASTER)%」のルビを削除
		CSTR:MASTER:名カナ '= ""
	ENDIF

	;■TALENT:ミドルネーム洋風の追加対応
	;キャラをチェックして「TALENT:ミドルネーム洋風」を設定する
	;・中華名(名前が性＋名)でないキャラはミドルネーム洋風
	FOR CHARA_ID, 0, CHARANUM
		IF NAME:CHARA_ID != CSTR:CHARA_ID:姓 + CSTR:CHARA_ID:名
			DEBUGPRINTFORML CHECK_UPDATE 0.3.332: [{CHARA_ID}] %ANAME(CHARA_ID)% に「TALENT:ミドルネーム洋風」を設定
			TALENT:CHARA_ID:ミドルネーム洋風 = 1
		ENDIF
	NEXT
ENDIF
IF CHECK_UPDATE("0.3.323")
	;ススキとミニョネットのキャラ番号が重複していた場合補正
	IF NAME_TO_CHARA("UC_ススキ") == -1 && NAME_TO_CHARA("ミニョネット") > 0
		;ミニョネットの番号を14->15に変更
		NO:NAME_TO_CHARA("ミニョネット") = 15
		;ススキを追加
		CALL ADD_CHARA_FROM_CSV(14)
	ENDIF
	;★ここから追加
	;ススキとeraRx4358の追加キャラ番号が重複していた場合補正
	IF NAME_TO_CHARA("UC_ススキ") == -1 && NAME_TO_CHARA("ディック・デイビッド") > 0
		NO:NAME_TO_CHARA("ディック・デイビッド") = 50
		;催淫蟲も移動
		NO:NAME_TO_CHARA("催淫蟲") = 51
		;ススキを追加
		CALL ADD_CHARA_FROM_CSV(14)
	ENDIF
	;追加ここまで
ENDIF
;v0.320で発生したモブ増殖バグで不正な状態になったデータのリカバリ処理
IF CHECK_UPDATE("0.3.211")
	DT_SELECT "WEAPON_STOCK",@"EQUIP_CHARA_ID > {CHARANUM -1}"
	FOR LOCAL, 0, RESULT
		DT_CELL_SET "WEAPON_STOCK", RESULT:(LOCAL + 1), "EQUIP_CHARA_ID", -2, 1
	NEXT
ENDIF
IF CHECK_UPDATE("0.3.110")
	CALL CREATE_CRAFT_ORDER_TABLE
ENDIF
IF CHECK_UPDATE("0.2.910")
	FLCONFIG:BGMの音量 = 30
	FLCONFIG:SEの音量 = 80
ENDIF
IF CHECK_UPDATE("0.2.901")
	;オリヴィアが重複して追加される不具合の対応
	L_CNT = 0
	FOR LOCAL, 0, CHARANUM
		IF CSTR:LOCAL:99 == "UC_オリヴィア"
			L_CNT ++
		ENDIF
		;二人目のオリヴィアを強制削除
		IF L_CNT == 2 && CSTR:LOCAL:99 == "UC_オリヴィア"
			CALL DELETE_CHARA(LOCAL, 1)
			BREAK
		ENDIF
	NEXT
ENDIF
IF CHECK_UPDATE("0.2.80")
	;衣装プリセット初期設定
	CALL CREATE_CLOTH_DRAWER_TABLE
ENDIF
IF CHECK_UPDATE("0.2.72")
	;クエスト編成プリセットがキャラ削除時に破損する不具合の対応
	VARSET _LIST_QST_PARTY_PRESET
ENDIF
IF CHECK_UPDATE("0.2.60")
	FLCONFIG:売春ゲストの男性率 = 80
ENDIF
IF CHECK_UPDATE("0.2.61")
	FOR LOCAL, 0, CHARANUM
		IF NAME:LOCAL == "スキュラ"
			CFLAG:LOCAL:慰安モブ = 1
		ENDIF
	NEXT
	FLCONFIG:公演ゲストの男性率 = 50
ENDIF
IF CHECK_UPDATE("0.1.70")
	CALL INIT_CONFIG_FLCONFIG()
ENDIF


code:
;-------------------------------------------------
; @FL_INIT_LOADER から呼ばれる口上初期読み込み
;-------------------------------------------------
@KOJO_DEFINE_K99
#DIMS CONST XML_PATH_COMBAT = "ERB/TRAIN/CLOSE_COMBAT/99_戦闘メッセージ"
#DIMS CONST XML_PATTERN_COMBAT = "KOJO_K99_COMBAT*"
#DIM CONST 汎用口上番号 = 99

CALL KOJO_XML_REGISTER_FROM_SPLIT_FILES(XML_PATH_COMBAT, XML_PATTERN_COMBAT, "data", 汎用口上番号, XMLID_KOJO_CLASS_COMBAT)
RETURN 1

;口上選択画面の表示名
@KOJO_DEFINE_NAME_K99
RESULTS '= "戦闘メッセージ地の文"
RETURN 1

;口上選択画面で表示する口上情報、サンプル
@KOJO_DEFINE_KOJO_INFO_K99(CHARA_ID)
#DIM CHARA_ID
#DIM カラー
カラー = CFLAG:CHARA_ID:口上カラーコード

CALLF TAG_PRINT(@"@C:{カラー_注釈}@◇　口上の特徴　◇@/C@", 1)
PRINTFORML 口上XMLの記述サンプル
PRINTL
PRINTFORML

;口上出力前の初期処理。共通処理以外で口上出力前に予め取得しておきたい情報があれば別途ここに記述
@KOJO_XML_INIT_K99(KOJO_CHARA_ID)
#DIM  KOJO_CHARA_ID
;出力前の共通初期処理
CALL KOJO_XML_INIT_COMMON_BEFORE_PRINT(KOJO_CHARA_ID)

;-------------------------------------------------
; SELECTCOMがどのグループに属するのかを文字列で返す
; RESULTSで返却するグループ名のリストは口上シートA列COM|GROUPに指定した名称と一致している必要がある
; KOJO_CHARA_ID 口上参照キャラの登録番号
; PLACE 口上出力箇所 コマンド実行前と後で参照グループを切り替えたいならばこの引数を見る
; REUSLT = 0 合致グループなし
; REUSLT = 1 合致グループあり
; REUSLT = 2 合致グループあり、排他(該当グループ以外に適合する条件の口上があっても該当するグループのみ出力)
; RESULTS: グループ名のリスト
;-------------------------------------------------
@KOJO_XML_COMGROUP_K99(KOJO_CHARA_ID, PLACE)
#DIM  KOJO_CHARA_ID
#DIMS PLACE
;口上固有の条件グループはここに定義

;共通のコマンドグループ
CALL KOJO_GET_COMGROUP(KOJO_CHARA_ID, PLACE)

RETURN RESULT