code:
;-------------------------------------------------
;■ランダムキャラの名前に関する変数
;-------------------------------------------------
;姓の候補リスト
#DIMS FAMILY_NAME_LIST, 200
;読み仮名
#DIMS FAMILY_NAME_RUBY, 200
;次に記録する配列番号
#DIM FAMILY_NAME_ADDRESS

;名の候補リスト
#DIMS FIRST_NAME_LIST, 200
;読み仮名
#DIMS FIRST_NAME_RUBY, 200
;次に記録する配列番号
#DIM FIRST_NAME_ADDRESS

;カナ性の候補リスト
#DIMS FAMILY_NAME_K_LIST, 200
#DIM FAMILY_NAME_K_ADDRESS

;カナ名(男)の候補リスト
#DIMS FIRST_NAME_KM_LIST, 200
;次に記録する配列番号
#DIM FIRST_NAME_KM_ADDRESS

;カナ名(女)の候補リスト
#DIMS FIRST_NAME_KF_LIST, 200
;次に記録する配列番号
#DIM FIRST_NAME_KF_ADDRESS

;日本性の候補リスト
#DIMS FAMILY_NAME_J_LIST, 1000
#DIMS FAMILY_NAME_J_RUBY, 1000
#DIM FAMILY_NAME_J_ADDRESS

;日本名(男)の候補リスト
#DIMS FIRST_NAME_JM_LIST, 1000
;読み仮名
#DIMS FIRST_NAME_JM_RUBY, 1000
;次に記録する配列番号
#DIM FIRST_NAME_JM_ADDRESS

;日本名(女)の候補リスト
#DIMS FIRST_NAME_JF_LIST, 1000
;読み仮名
#DIMS FIRST_NAME_JF_RUBY, 1000
;次に記録する配列番号
#DIM FIRST_NAME_JF_ADDRESS

;字の候補リスト
#DIMS MIDDLE_NAME_LIST, 200
;読み仮名
#DIMS MIDDLE_NAME_RUBY, 200
;次に記録する配列番号
#DIM MIDDLE_NAME_ADDRESS

;男性の真名の候補リスト
#DIMS TRUE_NAME_M_LIST, 200
;読み仮名
#DIMS TRUE_NAME_M_RUBY, 200
;次に記録する配列番号
#DIM TRUE_NAME_M_ADDRESS

;女性の真名の候補リスト
#DIMS TRUE_NAME_F_LIST, 200
;読み仮名
#DIMS TRUE_NAME_F_RUBY, 200
;次に記録する配列番号
#DIM TRUE_NAME_F_ADDRESS

repo_name: pervysquirrelz/erafl

license: unknown


code:
;ランダムキャラの処理

;-------------------------
;汎用武将の作成
;ARG:0=ケモ率、ARG:1=能力傾向、ARG:2=性別
;生成したキャラの番号を返すが、人数の限界により生成に失敗した場合-1を返す
;男性キャラクターの画像が無いので一律非生成としている。ポートレイトを表示させたい場合 ポートレイト強制生成に1を指定
;-------------------------
@CREATE_RANDOM_CHARA(ARG:0 = 1, ARG:1 = -1, ARG:2 = -1, ARG:3 = 0, ポートレイト強制生成 = 0, CALL_FROM = "")
#DIM  L_CNT
#DIM  ポートレイト強制生成
#DIMS CALL_FROM

IF !CAN_ADD_RANDOM_CHARA()
	PRINTFORML モブキャラ数:{FLAG:汎用武将カウント}
	PRINTFORML 追加しようとしているキャラクター数が上限を超えています。スレッドかDiscordにこのエラーログをご報告ください
	PRINTFORML ※あわせてセーブデータを提供してもらえると大変助かります
	THROW ERROR
	RETURN -1
ENDIF

;ターゲットを退避
LOCAL:0 = TARGET

;キャラを追加
ADDVOIDCHARA

;作成したキャラをターゲットにする
TARGET = CHARANUM - 1

;NOの設定
NO = FLAG:汎用武将カウント + MIN_NO_RANDOM_CHARA
FLAG:汎用武将カウント ++

;タグの設定
;[人材を探す]で種族タグが設定されている場合、設定値を適用する
CALL TAG_INIT(TARGET, NO:(TARGET))
IF FINDELEMENT(TAG_FILTER, 1) != -1
	FOR L_CNT, 0, MAX_TAGNUM
		IF TAG_FILTER:L_CNT
			CALL ADD_TAG(TARGET, L_CNT)
		ENDIF
	NEXT
ELSE
	CALL RANDOM_CHARA_TAG_SETTING()
ENDIF

;職業の設定
IF CALL_FROM == "RECRUIT_RANDOM_CHARA"
	TALENT:職業 = 職業候補 == -1 ? RAND:(VARSIZE("JOB_NAME")) # 職業候補
ELSE
	TALENT:職業 = RAND:(VARSIZE("JOB_NAME"))
ENDIF
;素質と能力の決定
CALL RANDOM_CHARA_SETTING(ARG:0, ARG:1, ARG:2)

;名前の決定(※素質決定後に行う)
CALL RANDOM_CHARA_NAMING(ARG:3)

;初期設定(※素質決定後に行う)
CALL INIT_NEWCHARA(TARGET)

;スキルの習得
;CALL RANDOM_CHARA_SKILL_SETTING()

;衣装の設定
CALL RANDOM_CHARA_CLOTH_SETTING()

;ランダムキャラの顔グラ画像設定
;男は暫定DUMMY
IF IS_MALE(TARGET)
	CSTR:TARGET:キャラ顔グラ '= "FACE_DUMMY"
ELSE
	CALL RANDOM_CHARA_CREATE_PORTRAIT(TARGET)
ENDIF

CALL KOJO_SET_COLOR_FROM_HAIR_COLOR(TARGET)

;居住区かクエスト中にキャラが生成された場合
IF FLAG:ハウジングモード || FLAG:クエストモード
	;衣装の設定
	FOR LOCAL, 0, CLOTH_PART_NUM
		調教用衣装:TARGET:(LOCAL) = CLOTH:TARGET:(LOCAL)
	NEXT
ENDIF

;ターゲットの再設定
TARGET = LOCAL:0
RETURN CHARANUM - 1

;-------------------------
;汎用武将の素質と能力を決定する
;ARG:0=ケモ率、ARG:1=能力傾向、ARG:2=性別
;-------------------------
@RANDOM_CHARA_SETTING(ARG:0, ARG:1, ARG:2)
#DIM L_CNT

IF ARG:2 > 5
	THROW @"RANDOM_CHARA_SETTING 関数に設定された性別が不正です(ARG:2 = {ARG:2})"
ENDIF

;性別を指定の通りに設定、指定がない場合は設定された男性率に応じて性別をランダムに決定
LOCAL:0 = ARG:2
IF LOCAL:0 <= -1
	IF RAND:100 < CONFIG:3
		IF RAND:30 == 0
			LOCAL:0 = 4
		ELSEIF RAND:30 == 0
			LOCAL:0 = 3
		ELSE
			LOCAL:0 = 0
		ENDIF
	ELSE
		IF RAND:20 == 0
			LOCAL:0 = 2
		ELSE
			LOCAL:0 = 1
		ENDIF
	ENDIF
ENDIF

SELECTCASE LOCAL:0
	CASE 0
		;男性
		TALENT:性別 = 0
		;童貞かどうかをランダムに設定
		TALENT:童貞 = RAND:100 < JOB_VERGIN_PER:(TALENT:職業)
		TALENT:処女 = 1
		TALENT:アナル処女 = 1
		;キス経験をランダムに設定
		IF TALENT:童貞
			TALENT:キス未経験 = (RAND:4 != 0)
		ELSE
			TALENT:キス未経験 = (RAND:3 == 0)
		ENDIF
	CASE 1
		;女性
		TALENT:性別 = 1
		;処女・キス経験をランダムに設定
		TALENT:童貞 = 1
		TALENT:処女 = RAND:100 < JOB_VERGIN_PER:(TALENT:職業)
		TALENT:アナル処女 = (RAND:10 != 0)
		IF TALENT:処女
			TALENT:キス未経験 = (RAND:4 != 0)
		ELSE
			TALENT:キス未経験 = (RAND:3 == 0)
		ENDIF
	CASE 2
		;女ふた
		TALENT:性別 = 2
		;童貞・処女かどうかをランダムに設定
		TALENT:童貞 = RAND:100 < JOB_VERGIN_PER:(TALENT:職業)
		TALENT:処女 = RAND:100 < JOB_VERGIN_PER:(TALENT:職業)
		TALENT:アナル処女 = (RAND:10 != 0)
		IF TALENT:処女
			TALENT:キス未経験 = (RAND:4 != 0)
		ELSE
			TALENT:キス未経験 = (RAND:3 == 0)
		ENDIF
	CASE 3
		;男ふた
		TALENT:性別 = 3
		;童貞・処女かどうかをランダムに設定
		TALENT:童貞 = RAND:100 < JOB_VERGIN_PER:(TALENT:職業)
		TALENT:処女 = RAND:100 < JOB_VERGIN_PER:(TALENT:職業)
		TALENT:アナル処女 = (RAND:10 != 0)
		IF TALENT:処女
			TALENT:キス未経験 = (RAND:4 != 0)
		ELSE
			TALENT:キス未経験 = (RAND:3 == 0)
		ENDIF
	CASE 4
		;男の娘
		TALENT:性別 = 4
		;童貞かどうかをランダムに設定(男性より童貞率高め)
		TALENT:童貞 = RAND:100 < JOB_VERGIN_PER:(TALENT:職業)
		TALENT:処女 = 1
		TALENT:アナル処女 = (RAND:10 != 0)
		;キス経験をランダムに設定
		IF TALENT:童貞
			TALENT:キス未経験 = (RAND:4 != 0)
		ELSE
			TALENT:キス未経験 = (RAND:3 == 0)
		ENDIF
	CASE 5
		;男の娘ふた
		TALENT:性別 = 5
		;童貞・処女かどうかをランダムに設定
		TALENT:童貞 = RAND:100 < JOB_VERGIN_PER:(TALENT:職業)
		TALENT:処女 = RAND:100 < JOB_VERGIN_PER:(TALENT:職業)
		TALENT:アナル処女 = (RAND:10 != 0)
		IF TALENT:処女
			TALENT:キス未経験 = (RAND:4 != 0)
		ELSE
			TALENT:キス未経験 = (RAND:3 == 0)
		ENDIF
ENDSELECT
SIF TALENT_FILTER:1
	TALENT:処女 = 1
SIF TALENT_FILTER:2
	TALENT:童貞 = 1
SIF TALENT_FILTER:3
	TALENT:キス未経験 = 1

;■BASE値の決定
LOCAL:2 = RAND:6 + RAND:5 - 4
MAXBASE:体力 = 1600 + LOCAL:2 * 100

LOCAL:2 = RAND:8 + RAND:7 - 6
IF LOCAL:2 < 0
	MAXBASE:気力 = 1300 - ABS(LOCAL:2) / 2 * 100
ELSE
	MAXBASE:気力 = 1300 + LOCAL:2 * 100
ENDIF

BASE:体力 = MAXBASE:体力
BASE:気力 = MAXBASE:気力

;■戦闘系能力と成長型の設定
;多能
IF ARG:1 == 0
	TALENT:成長型 = RANDOM_ARRAY(1, 2, 3, 4) - 1
	;武官
ELSEIF ARG:1 == 1
	TALENT:成長型 = RANDOM_ARRAY(1, 3, 4)
	;軍師
ELSEIF ARG:1 == 2
	TALENT:成長型 = RANDOM_ARRAY(1, 2, 5)
	;政務官
ELSEIF ARG:1 == 3
	TALENT:成長型 = RANDOM_ARRAY(2, 3, 6)
	;アイドル
ELSEIF ARG:1 == 4
	TALENT:成長型 = RANDOM_ARRAY(1, 8) - 1
	;料理人
ELSEIF ARG:1 == 5
	TALENT:成長型 = RANDOM_ARRAY(1, 9) - 1
	;指定なし
ELSE
	IF RAND:100 == 0
		TALENT:成長型 = 9
	ELSE
		TALENT:成長型 = RANDOM_ARRAY(1, 2, 3, 4, 5, 6, 7, 9) - 1
	ENDIF
ENDIF

IF JOB_NAME:(TALENT:職業) == "魔術師"
	TALENT:成長型 = 成長型_魔術
ENDIF

SELECTCASE TALENT:成長型
	CASE 0
		ABL:身体 = RAND:46 + 25
		ABL:器用 = RAND:46 + 25
		ABL:知識 = RAND:46 + 25
		ABL:社交 = RAND:46 + 25
		ABL:観察 = RAND:46 + 25
		ABL:話術 = RAND:26 + 15
		ABL:戦闘 = RAND:26 + 15
	CASE 1
		ABL:身体 = RAND:21 + RAND:10 + 35
		ABL:器用 = RAND:21 + RAND:10 + 35
		ABL:知識 = RAND:21 + RAND:10 + 35
		ABL:社交 = RAND:61 + 5
		ABL:観察 = RAND:61 + 5
		ABL:話術 = RAND:21 + RAND:10 + 15
		ABL:戦闘 = RAND:31 + 5
	CASE 2
		ABL:身体 = RAND:51 + 15
		ABL:器用 = RAND:51 + 15
		ABL:知識 = RAND:21 + RAND:11 + 40
		ABL:社交 = RAND:21 + RAND:11 + 40
		ABL:観察 = RAND:21 + RAND:11 + 40
		ABL:話術 = RAND:21 + RAND:11 + 10
		ABL:戦闘 = RAND:21 + RAND:11 + 10
	CASE 3
		ABL:身体 = RAND:21 + RAND:11 + 40
		ABL:器用 = RAND:21 + RAND:11 + 40
		ABL:知識 = RAND:51 + 15
		ABL:社交 = RAND:21 + RAND:11 + 40
		ABL:観察 = RAND:21 + RAND:11 + 40
		ABL:話術 = RAND:21 + 15
		ABL:戦闘 = RAND:21 + RAND:11 + 10
	CASE 4
		ABL:身体 = RAND:16 + RAND:6 + 55
		ABL:器用 = RAND:16 + RAND:6 + 55
		ABL:知識 = RAND:51 + 15
		ABL:社交 = RAND:51 + 15
		ABL:観察 = RAND:51 + 15
		ABL:話術 = RAND:31 + 5
		ABL:戦闘 = RAND:31 + 5
	CASE 5
		ABL:身体 = RAND:51 + 15
		ABL:器用 = RAND:51 + 15
		ABL:知識 = RAND:16 + RAND:6 + 55
		ABL:社交 = RAND:51 + 15
		ABL:観察 = RAND:51 + 15
		ABL:話術 = RAND:16 + RAND:6 + 35
		ABL:戦闘 = RAND:31 + 5
	CASE 6
		ABL:身体 = RAND:51 + 15
		ABL:器用 = RAND:51 + 15
		ABL:知識 = RAND:51 + 15
		ABL:社交 = RAND:16 + RAND:6 + 55
		ABL:観察 = RAND:16 + RAND:6 + 55
		ABL:話術 = RAND:31 + 5
		ABL:戦闘 = RAND:16 + RAND:6 + 35
	CASE 7
		ABL:身体 = RAND:41 + 20
		ABL:器用 = RAND:41 + 20
		ABL:知識 = RAND:41 + 20
		ABL:社交 = RAND:41 + 20
		ABL:観察 = RAND:41 + 20
		ABL:話術 = RAND:21 + 10
		ABL:戦闘 = RAND:21 + 10
	CASE 8
		ABL:身体 = RAND:41 + 20
		ABL:器用 = RAND:41 + 20
		ABL:知識 = RAND:41 + 20
		ABL:社交 = RAND:41 + 20
		ABL:観察 = RAND:41 + 20
		ABL:話術 = RAND:21 + 10
		ABL:戦闘 = RAND:21 + 10
	CASE 成長型_魔術
		ABL:身体 = RAND:15 + 5
		ABL:器用 = RAND:31 + 5
		ABL:知識 = RAND:51 + 15
		ABL:社交 = RAND:31 + 5
		ABL:観察 = RAND:41 + 15
		ABL:話術 = RAND:15 + 5
		ABL:戦闘 = RAND:15 + 5
		ABL:魔術 = RAND:31 + 15
ENDSELECT

;eraFL能力下方補正(とりあえずK水準の0.75倍に)
ABL:身体 = ABL:身体 * 75 / 100
ABL:器用 = ABL:器用 * 75 / 100
ABL:知識 = ABL:知識 * 75 / 100
ABL:社交 = ABL:社交 * 75 / 100
ABL:観察 = ABL:観察 * 75 / 100
ABL:話術 = ABL:話術 * 75 / 100
ABL:戦闘 = ABL:戦闘 * 75 / 100

IF TALENT:成長型 == 7 || ARG:1 == 4
	ABL:歌唱 = RAND:41 + 25
	IF RAND:4 == 0
		ABL:歌唱 += RAND:11
		ABL:話術 += RAND:6
	ENDIF
	IF RAND:8 == 0
		ABL:歌唱 -= RAND:11
	ENDIF
ELSE
	ABL:歌唱 = RAND:21
	IF RAND:4 == 0
		ABL:歌唱 += RAND:26
		IF RAND:4 == 0
			ABL:歌唱 += RAND:31
		ENDIF
	ENDIF
ENDIF
IF TALENT:成長型 == 8 || ARG:1 == 5
	ABL:料理 = RAND:41 + 25
	IF RAND:4 == 0
		ABL:料理 += RAND:11
		ABL:戦闘 += RAND:6
	ENDIF
	IF RAND:8 == 0
		ABL:料理 -= RAND:11
	ENDIF
ELSE
	ABL:料理 = RAND:21
	IF RAND:4 == 0
		ABL:料理 += RAND:26
		IF RAND:4 == 0
			ABL:料理 += RAND:31
		ENDIF
	ENDIF
ENDIF

;指定多能(全てにボーナス)
IF ARG:1 == 0
	ABL:身体 += RAND:4
	ABL:器用 += RAND:4
	ABL:知識 += RAND:4
	ABL:社交 += RAND:4
	ABL:歌唱 += RAND:4
	ABL:料理 += RAND:4
	ABL:話術 += RAND:4
	ABL:戦闘 += RAND:4
	;指定武官(身体を最大に＆ボーナス)
ELSEIF ARG:1 == 1
	SIF ABL:身体 < ABL:社交
		SWAP ABL:身体, ABL:社交
	SIF ABL:身体 < ABL:知識
		SWAP ABL:身体, ABL:知識
	ABL:身体 += RAND:6
	;指定軍師(知識を最大に＆ボーナス)
ELSEIF ARG:1 == 2
	SIF ABL:知識 < ABL:身体
		SWAP ABL:知識, ABL:身体
	SIF ABL:知識 < ABL:社交
		SWAP ABL:知識, ABL:社交
	ABL:知識 += RAND:6
	ABL:話術 += RAND:6
	;指定政務官(社交を最大に＆ボーナス)
ELSEIF ARG:1 == 3
	SIF ABL:社交 < ABL:身体
		SWAP ABL:社交, ABL:身体
	SIF ABL:社交 < ABL:知識
		SWAP ABL:社交, ABL:知識
	ABL:社交 += RAND:6
	ABL:戦闘 += RAND:6
	;指定アイドル(歌唱にボーナス)
ELSEIF ARG:1 == 4
	ABL:歌唱 += RAND:6
	ABL:話術 += RAND:6
	;指定料理人
ELSEIF ARG:1 == 5
	ABL:料理 += RAND:6
	ABL:戦闘 += RAND:6
ENDIF

;能力値に応じて精神力を設定
CALL SET_MIND_POWER(TARGET)

;■素質の決定
;臆病、気丈
CALL RCHARA_TALENT_OPPOSE, 10, 12, 12, 12
;反抗的、素直
CALL RCHARA_TALENT_OPPOSE, 11, 13, 20, 20
;大人しい
CALL RCHARA_TALENT_SINGLE, 14, 7
;プライド高い、プライド低い
CALL RCHARA_TALENT_OPPOSE, 15, 17, 12, 3
;生意気(素直を持つなら確率低下)
IF TALENT:素直
	CALL RCHARA_TALENT_SINGLE, 16, 3
ELSE
	CALL RCHARA_TALENT_SINGLE, 16, 12
ENDIF
;ツンデレ(反抗的を持つキャラは高確率・素直と同居しない)
IF TALENT:反抗的
	CALL RCHARA_TALENT_SINGLE, 18, 23
ELSEIF !TALENT:素直
	CALL RCHARA_TALENT_SINGLE, 18, 5
ENDIF
;快感に素直、快感の否定
CALL RCHARA_TALENT_OPPOSE, 70, 71, 9, 5
;自制心(快感に素直と同居しない)
IF !TALENT:快感に素直
	CALL RCHARA_TALENT_SINGLE, 20, 7
ENDIF
;好奇心、保守的
CALL RCHARA_TALENT_OPPOSE, 23, 24, 13, 6
;楽観的、悲観的
CALL RCHARA_TALENT_OPPOSE, 25, 26, 11, 7
;一線越えない
CALL RCHARA_TALENT_SINGLE, 27, 6
;目立ちたがり
CALL RCHARA_TALENT_SINGLE, 28, 9
;貞操観念、貞操無頓着
CALL RCHARA_TALENT_OPPOSE, 30, 31, 10, 6
;抑圧(一部素質と同居しない)
IF !TALENT:生意気 && !TALENT:好奇心 && !TALENT:楽観的 && !TALENT:目立ちたがり && !TALENT:快感に素直
	CALL RCHARA_TALENT_SINGLE, 32, 6
ENDIF
;孤高(素直を持たないキャラ限定)
IF !TALENT:素直
	CALL RCHARA_TALENT_SINGLE, 34, 6
ENDIF
;恥じらい、恥薄い(目立ちたがりを持つなら確率変動)
IF TALENT:目立ちたがり
	CALL RCHARA_TALENT_OPPOSE, 35, 36, 3, 13
ELSE
	CALL RCHARA_TALENT_OPPOSE, 35, 36, 13, 7
ENDIF
;無関心(一部素質と同居しない)
IF !TALENT:好奇心 && !TALENT:目立ちたがり
	CALL RCHARA_TALENT_SINGLE, 21, 7
ENDIF
;感情乏しい(一部素質と同居しない)
IF !TALENT:臆病 && !TALENT:生意気 && !TALENT:好奇心 && !TALENT:目立ちたがり && !TALENT:恥じらい
	CALL RCHARA_TALENT_SINGLE, 22, 8
ENDIF
;解放(同居しない素質多数)
IF !TALENT:臆病 && !TALENT:ツンデレ && !TALENT:自制心 && !TALENT:感情乏しい && !TALENT:保守的 && !TALENT:悲観的
	IF !TALENT:一線越えない && !TALENT:貞操観念 && !TALENT:抑圧 && !TALENT:孤高 && !TALENT:恥じらい && !TALENT:快感の否定
		CALL RCHARA_TALENT_SINGLE, 33, 12
	ENDIF
ENDIF
;痛みに強い、痛みに弱い(身体の初期値に応じて確率変動)
CALL RCHARA_TALENT_OPPOSE, 41, 40, ABL:身体 / 4 - 5, 13 - ABL:身体 / 4
;濡れやすい、濡れにくい
CALL RCHARA_TALENT_OPPOSE, 42, 43, 8, 5
;習得早い、習得遅い(知識の初期値に応じて確率変動)
CALL RCHARA_TALENT_OPPOSE, 50, 51, ABL:知識 / 4 - 5, 13 - ABL:知識 / 4
;舌使い
CALL RCHARA_TALENT_SINGLE, 52, 5
;自慰しやすい
CALL RCHARA_TALENT_SINGLE, 60, 7
;汚臭鈍感、汚臭敏感
CALL RCHARA_TALENT_OPPOSE, 61, 62, 8, 8
;献身的
CALL RCHARA_TALENT_SINGLE, 63, 9
;中毒しやすい
CALL RCHARA_TALENT_SINGLE, 72, 8
;倒錯的
CALL RCHARA_TALENT_SINGLE, 80, 8
;両刀(女性は少し確率高め、男の娘は極端に確率が高い)
IF TALENT:性別 == 0
	CALL RCHARA_TALENT_SINGLE, 81, 8
ELSEIF TALENT:性別 == 4
	CALL RCHARA_TALENT_SINGLE, 81, 30
ELSE
	CALL RCHARA_TALENT_SINGLE, 81, 14
ENDIF
;男嫌い、女嫌い(異性限定)
IF IS_MALE(TARGET)
	CALL RCHARA_TALENT_SINGLE, 83, 9
ELSE
	CALL RCHARA_TALENT_SINGLE, 82, 9
ENDIF
;Ｓ気質、Ｍ気質
CALL RCHARA_TALENT_OPPOSE, 84, 85, 8, 8
;小悪魔(女性・男の娘は確率高め)
IF TALENT:性別 == 0
	CALL RCHARA_TALENT_SINGLE, 86, 3
ELSE
	CALL RCHARA_TALENT_SINGLE, 86, 10
ENDIF
;魅惑
CALL RCHARA_TALENT_SINGLE, 87, 8
;謎の魅力
CALL RCHARA_TALENT_SINGLE, 88, 2
;回復早い、回復遅い(身体の初期値に応じて確率変動)
CALL RCHARA_TALENT_OPPOSE, 111, 112, ABL:身体 / 7 + 3, 12 - ABL:身体 / 7
;幼稚
CALL RCHARA_TALENT_SINGLE, 132, 6

;酒豪(身体派の方が確率高め)
CALL RCHARA_TALENT_SINGLE, 134, ABL:身体 / 7 + 3

;下戸(知識派の方が確率高め)
IF !TALENT:酒豪
	CALL RCHARA_TALENT_SINGLE, 136, ABL:知識 / 7 + 3
ENDIF

;指定の確率に応じて動物耳、尻尾
IF RAND:100 < ARG:0
	TALENT:動物耳 = 1
	TALENT:しっぽ = RAND:8 != 0
ENDIF

;美脚
SIF !TALENT:性別 == 0
	CALL RCHARA_TALENT_SINGLE, 113, 12
;美尻
SIF !TALENT:性別 == 0
	CALL RCHARA_TALENT_SINGLE, 114, 12

;母乳体質
SIF IS_FEMALE(TARGET)
	CALL RCHARA_TALENT_SINGLE, GETNUM(TALENT, "母乳体質"), 5

;■敏鈍感素質の決定
CALL RANDOM_CHARA_SENSE

;職業によるTALENTの付与と削除
CALL UPDATE_BY_JOB

CALL SET_TALENT_FILTER(TARGET)

;■性的能力の決定
;処女・童貞の場合
IF TALENT:処女 && TALENT:童貞
	;1/7の確率で完全無垢に(全ての性経験・性知識が0)
	IF RAND:7 != 0
		LOCAL:0 = RAND:10
		IF LOCAL:0 < 6
			LOCAL:0 = -2
			EXP:絶頂経験 = 0
		ELSEIF LOCAL:0 < 9
			LOCAL:0 = -1
			EXP:絶頂経験 = (RAND:10 - 7) * 5
		ELSE
			LOCAL:0 = 0
			EXP:絶頂経験 = (RAND:6 + 1) * 5
		ENDIF

		ABL:欲望 = MAX(LOCAL:0 + RAND:2 + RAND:2, 0)
		ABL:性技 = MAX(LOCAL:0 + RAND:2 + RAND:2, 0)
		ABL:奉仕 = MAX(LOCAL:0 + RAND:4 - 1, 0)
		ABL:露出 = MAX(LOCAL:0 + RAND:20 - 17, 0)
		ABL:自慰 = MAX(LOCAL:0 + RAND:7 - 4, 0)

		IF HAS_PENIS(TARGET)
			ABL:射精 = MAX(LOCAL:0 + RAND:4 - 1, 0)
		ENDIF

		IF TALENT:両刀
			IF RAND:2
				IF IS_MALE(TARGET, 1)
					ABL:ＢＬ = MAX(RAND:3 + 1)
					ABL:性交 = MAX(ABL:ＢＬ + RAND:6 - 5, 0)
					ABL:精愛 = MAX(ABL:ＢＬ + RAND:6 - 5, 0)
					ABL:Ａ感 = MAX(ABL:ＢＬ + RAND:6 - 5, 0)
				ELSE
					ABL:レズ = MAX(RAND:3 + 1)
				ENDIF
			ENDIF
		ELSE
			IF RAND:15 == 0
				IF IS_MALE(TARGET, 1)
					ABL:ＢＬ = MAX(RAND:2 + 1)
					ABL:性交 = MAX(ABL:ＢＬ + RAND:6 - 5, 0)
					ABL:精愛 = MAX(ABL:ＢＬ + RAND:6 - 5, 0)
					ABL:Ａ感 = MAX(ABL:ＢＬ + RAND:6 - 5, 0)
				ELSE
					ABL:レズ = MAX(RAND:2 + 1)
				ENDIF
			ENDIF
		ENDIF

		LOCAL:1 = 30 - ABL:自慰 * 10
		ABL:Ｃ感 = MAX(TALENT:Ｃ敏感 - TALENT:Ｃ鈍感 + RAND:(LOCAL:1 + 2) - LOCAL:1, 0)
		ABL:Ｂ感 = MAX(TALENT:Ｂ敏感 - TALENT:Ｂ鈍感 + RAND:(LOCAL:1 + 2) - LOCAL:1, 0)

		IF ABL:Ａ感 == 0
			LOCAL:2 = 60 - ABL:自慰 * 15
			ABL:Ａ感 = MAX(TALENT:Ａ敏感 - TALENT:Ａ鈍感 + RAND:(LOCAL:2 + 2) - LOCAL:2, 0)
		ENDIF

		IF !TALENT:キス未経験
			ABL:Ｍ感 = MAX(TALENT:Ｍ敏感 - TALENT:Ｍ鈍感 + RAND:30 - 28, 0)
		ENDIF

		ABL:Ｕ感 = MAX(TALENT:Ｕ敏感 - TALENT:Ｕ鈍感 + RAND:8 - 6, 0)

		LOCAL:0 = RAND:100
		IF LOCAL:0 < 50
			ABL:性知識 = 1
		ELSEIF LOCAL:0 < 85
			ABL:性知識 = 2
		ELSEIF LOCAL:0 < 97
			ABL:性知識 = 3
		ELSE
			ABL:性知識 = 4
		ENDIF

		SELECTCASE RAND:100
			CASE IS < 60
				ABL:サド = 0
			CASE IS < 85
				ABL:サド = 1
			CASE IS < 90
				ABL:サド = 2
			CASEELSE
				ABL:サド = 3
		ENDSELECT
		ABL:サド += TALENT:Ｓ気質

		SELECTCASE RAND:100
			CASE IS < 60
				ABL:マゾ = 0
			CASE IS < 85
				ABL:マゾ = 1
			CASE IS < 90
				ABL:マゾ = 2
			CASEELSE
				ABL:マゾ = 3
		ENDSELECT
		ABL:マゾ += TALENT:Ｍ気質

	ENDIF

	;経験ありの場合
ELSE
	LOCAL:0 = RAND:10
	IF LOCAL:0 < 5
		LOCAL:0 = -1
		EXP:絶頂経験 = (RAND:10 - 7) * 5
	ELSEIF LOCAL:0 < 9
		LOCAL:0 = 0
		EXP:絶頂経験 = (RAND:6 + 1) * 5
	ELSE
		LOCAL:0 = 1
		EXP:絶頂経験 = (RAND:9 + 2) * 5
	ENDIF

	ABL:欲望 = MAX(LOCAL:0 + RAND:2 + RAND:2, 0)
	ABL:性技 = MAX(LOCAL:0 + RAND:2 + RAND:2, 0)
	ABL:奉仕 = MAX(LOCAL:0 + RAND:4 - 1, 0)
	ABL:性交 = MAX(LOCAL:0 + RAND:4 - 1, 0)
	ABL:露出 = MAX(LOCAL:0 + RAND:7 - 4, 0)
	ABL:自慰 = MAX(LOCAL:0 + RAND:5 - 2, 0)

	IF IS_FEMALE(TARGET)
		ABL:精愛 = MAX(LOCAL:0 + RAND:5 - 2, 0)
	ENDIF

	IF HAS_PENIS(TARGET)
		ABL:射精 = MAX(LOCAL:0 + RAND:4 - 1, 0)
	ENDIF

	IF TALENT:両刀
		IF RAND:3 != 0
			IF IS_MALE(TARGET, 1)
				ABL:ＢＬ = MAX(RAND:3 + 1)
				ABL:精愛 = MAX(ABL:ＢＬ + RAND:4 - 3, 0)
				ABL:Ａ感 = MAX(ABL:ＢＬ + RAND:4 - 3, 0)
			ELSE
				ABL:レズ = MAX(RAND:3 + 1)
			ENDIF
		ENDIF
	ELSE
		IF RAND:8 == 0
			IF IS_MALE(TARGET, 1)
				ABL:ＢＬ = MAX(RAND:2 + 1)
				ABL:精愛 = MAX(ABL:ＢＬ + RAND:4 - 3, 0)
				ABL:Ａ感 = MAX(ABL:ＢＬ + RAND:4 - 3, 0)
			ELSE
				ABL:レズ = MAX(RAND:2 + 1)
			ENDIF
		ENDIF
	ENDIF

	ABL:Ｃ感 = MAX(TALENT:Ｃ敏感 - TALENT:Ｃ鈍感 + RAND:5 - 3, 0)
	ABL:Ｂ感 = MAX(TALENT:Ｂ敏感 - TALENT:Ｂ鈍感 + RAND:5 - 3, 0)
	ABL:Ｖ感 = MAX(TALENT:Ｖ敏感 - TALENT:Ｖ鈍感 + RAND:5 - 3, 0)

	IF ABL:Ａ感 == 0
		ABL:Ａ感 = MAX(TALENT:Ａ敏感 - TALENT:Ａ鈍感 + RAND:20 - 18, 0)
	ENDIF

	ABL:Ｍ感 = MAX(TALENT:Ｍ敏感 - TALENT:Ｍ鈍感 + RAND:8 - 6, 0)
	ABL:Ｕ感 = MAX(TALENT:Ｕ敏感 - TALENT:Ｕ鈍感 + RAND:8 - 6, 0)

	LOCAL:0 = RAND:100
	IF LOCAL:0 < 35
		ABL:性知識 = 1
	ELSEIF LOCAL:0 < 75
		ABL:性知識 = 2
	ELSEIF LOCAL:0 < 94
		ABL:性知識 = 3
	ELSEIF LOCAL:0 < 98
		ABL:性知識 = 4
	ELSE
		ABL:性知識 = 5
	ENDIF

	SELECTCASE RAND:100
		CASE IS < 60
			ABL:マゾ = 0
		CASE IS < 85
			ABL:マゾ = 1
		CASE IS < 90
			ABL:マゾ = 2
		CASEELSE
			ABL:マゾ = 3
	ENDSELECT
	ABL:マゾ += TALENT:Ｍ気質

ENDIF

IF TALENT:下戸
	ABL:肝臓 = RAND(0, 3)
ELSEIF TALENT:酒豪
	ABL:肝臓 = RAND(4, 6)
ELSE
	ABL:肝臓 = RAND(2, 4)
ENDIF

;■バストサイズの決定
CALL RANDOM_CHARA_BUSTSIZE
CALL RANDOM_CHARA_PENISSIZE
CALL RANDOM_CHARA_HIPSIZE

IF FINDELEMENT(TAG:TARGET:0, タグ_ドワーフ) != -1 || FINDELEMENT(TAG:TARGET:0, タグ_妖精) != -1
	SELECTCASE RAND:100
		CASE 0 TO 60
			TALENT:体格 = 体格_小柄
		CASE 61 TO 70
			TALENT:体格 = 体格_子供
		CASE 71 TO 90
			TALENT:体格 = 体格_普通
		CASE 95 TO 99
			TALENT:体格 = 体格_長身
		CASEELSE
			TALENT:体格 = 体格_大柄
	ENDSELECT
ELSE
	SELECTCASE RAND:100
		CASE 0 TO 60
			TALENT:体格 = 体格_普通
		CASE 61 TO 70
			TALENT:体格 = 体格_小柄
		CASE 71 TO 80
			TALENT:体格 = 体格_長身
		CASE 81 TO 87
			TALENT:体格 = 体格_子供
		CASE 88 TO 94
			TALENT:体格 = 体格_大柄
		CASEELSE
			TALENT:体格 = 体格_巨大
	ENDSELECT
ENDIF

SELECTCASE RAND:100
	CASE 0 TO 60
		TALENT:体型 = 体型_普通
	CASE 61 TO 70
		TALENT:体型 = 体型_スレンダー
	CASE 71 TO 80
		TALENT:体型 = 体型_グラマー
	CASE 81 TO 86
		TALENT:体型 = 体型_豊満
	CASE 87 TO 93
		TALENT:体型 = 体型_細身
	CASE 94 TO 97
		TALENT:体型 = 体型_肥満
	CASEELSE
		TALENT:体型 = 体型_痩せすぎ
ENDSELECT

;■性格の決定
CALL SET_CHARACTER(TARGET)

;■髪色・髪の長さの決定
CALL SET_HAIR(TARGET)

;■陰毛の長さの決定
CALL SET_INMOU_RANDOM(TARGET)
CALL SET_ARMPIT_RANDOM(TARGET)

TALENT:TARGET:Ｖ締まり = GET_RANDOM_TIGHTNESS()
TALENT:TARGET:Ａ締まり = GET_RANDOM_TIGHTNESS()
SIF TALENT:TARGET:処女
	TALENT:TARGET:Ｖ締まり = GET_DEFAULT_TIGHTNESS("ぎちぎち")
SIF TALENT:TARGET:アナル処女
	TALENT:TARGET:Ａ締まり = GET_DEFAULT_TIGHTNESS("ぎちぎち")
ABL:野心 = RAND(30, 71)

SIF TALENT:反抗的
	ABL:野心 += 5
SIF TALENT:気丈
	ABL:野心 += 5
SIF TALENT:プライド高い
	ABL:野心 += 7
SIF TALENT:生意気
	ABL:野心 += 3
SIF TALENT:好奇心
	ABL:野心 += 3
SIF TALENT:孤高
	ABL:野心 += 15
SIF TALENT:臆病
	ABL:野心 -= 5
SIF TALENT:素直
	ABL:野心 -= 5
SIF TALENT:大人しい
	ABL:野心 -= 5
SIF TALENT:自制心
	ABL:野心 -= 5
SIF TALENT:無関心
	ABL:野心 -= 5
SIF TALENT:プライド低い
	ABL:野心 -= 10
SIF TALENT:抑圧
	ABL:野心 -= 10
ABL:野心 = MAX(ABL:野心, 0)

;-------------------------
;汎用武将にスキルを設定する
;-------------------------
@RANDOM_CHARA_SKILL_SETTING()
#DIM スキルID群, SKILL_GENRE_NUM, MAX_SKILLS
#DIM スキルレベル群, SKILL_GENRE_NUM, MAX_SKILLS
#DIM スキル数, SKILL_GENRE_NUM
#DIM ジャンル
#DIM スキルID
#DIM スキル位置
#DIM 試行回数
#DIM 習得確率
VARSET スキルID群
VARSET スキルレベル群
VARSET スキル数

FOR ジャンル, 0, SKILL_GENRE_NUM
	FOR スキルID, 0, MAX_SKILLS
		TRYCCALLFORM SKILL_0_%SKILL_GENRE_ENG:ジャンル%_{スキルID}_NO_LEARN_INIT
		CATCH
			CONTINUE
		ENDCATCH
		TRYCCALLFORM SKILL_0_%SKILL_GENRE_ENG:ジャンル%_{スキルID}_EXIST
			スキルID群:ジャンル:(スキル数:ジャンル) = スキルID
			CALLFORM SKILL_0_%SKILL_GENRE_ENG:ジャンル%_{スキルID}_LEVEL
			スキルレベル群:ジャンル:(スキル数:ジャンル) = RESULT
			スキル数:ジャンル ++
		CATCH
		ENDCATCH
	NEXT
NEXT

FOR 試行回数, 0, 4
	ジャンル = RAND:SKILL_GENRE_NUM
	;汎用スキルは今んとこ全ジャンルあるのでここは大丈夫
	SIF スキル数:ジャンル == 0
		CONTINUE
	スキル位置 = RAND:(スキル数:ジャンル)
	SELECTCASE スキルレベル群:ジャンル:スキル位置
		CASE 5
			習得確率 = 3
		CASE 4
			習得確率 = 10
		CASE 3
			習得確率 = 20
		CASE 2
			習得確率 = 30
		CASE 1
			習得確率 = 50
	ENDSELECT
	SIF 習得確率 <= RAND:100
		CONTINUE
	CALL SKILL_LEARN(TARGET, ジャンル, 0, スキルID群:ジャンル:スキル位置)
NEXT

;-------------------------
;汎用武将にタグを設定する
;-------------------------
@RANDOM_CHARA_TAG_SETTING

;人間か、人外か
CALL ADD_TAG(TARGET, タグ_人間)
RETURN
SIF 50 > RAND:100
	CALL ADD_TAG(TARGET, タグ_人間)

IF 5 > RAND:100 || (50 > RAND:100 && !HAS_TAG(TARGET, タグ_人間))
	SELECTCASE RAND:100
		CASE IS < 45
			CALL ADD_TAG(TARGET, タグ_人間)
		CASE IS < 65
			CALL ADD_TAG(TARGET, タグ_ドワーフ)
		CASE IS < 75
			CALL ADD_TAG(TARGET, タグ_亜人)
		CASE IS < 80
			CALL ADD_TAG(TARGET, タグ_エルフ)
	ENDSELECT
ENDIF
;-------------------------
;バストサイズをランダムに設定する関数
;-------------------------
@RANDOM_CHARA_BUSTSIZE
LOCAL:2 = RAND:100
LOCAL = 0
IF TALENT:体格 == 体格_子供
	;並(40%)
	IF LOCAL:2 < 40
		;貧(48%)
	ELSEIF LOCAL:2 < 88
		LOCAL = -1
		;巨(5%)
	ELSEIF LOCAL:2 < 93
		LOCAL = 1
		;絶(7%)
	ELSE
		LOCAL = -2
	ENDIF
ELSEIF TALENT:体格 == 体格_小柄
	;並(40%)
	IF LOCAL:2 < 40
		;貧(36%)
	ELSEIF LOCAL:2 < 76
		LOCAL = -1
		;巨(16%)
	ELSEIF LOCAL:2 < 92
		LOCAL = 1
		;爆(4%)
	ELSEIF LOCAL:2 < 96
		LOCAL = 2
		;絶(4%)
	ELSE
		LOCAL = -2
	ENDIF
ELSE
	;並(40%)
	IF LOCAL:2 < 40
		;貧(26%)
	ELSEIF LOCAL:2 < 66
		LOCAL = -1
		;巨(26%)
	ELSEIF LOCAL:2 < 92
		LOCAL = 1
		;爆(6%)
	ELSEIF LOCAL:2 < 98
		LOCAL = 2
		;絶(2%)
	ELSE
		LOCAL = -2
	ENDIF
ENDIF
CALL SET_BUSTSIZE(TARGET, LOCAL)

;-------------------------
;ペニスサイズをランダムに設定する関数
;-------------------------
@RANDOM_CHARA_PENISSIZE
LOCAL:2 = RAND:100
LOCAL = 0
IF TALENT:体格 == 体格_子供
	;並(40%)
	IF LOCAL:2 < 40
		;貧(48%)
	ELSEIF LOCAL:2 < 88
		LOCAL = -1
		;巨(5%)
	ELSEIF LOCAL:2 < 93
		LOCAL = 1
		;絶(7%)
	ELSE
		LOCAL = -2
	ENDIF
ELSEIF TALENT:体格 == 体格_小柄
	;並(40%)
	IF LOCAL:2 < 40
		;貧(36%)
	ELSEIF LOCAL:2 < 76
		LOCAL = -1
		;巨(16%)
	ELSEIF LOCAL:2 < 92
		LOCAL = 1
		;爆(4%)
	ELSEIF LOCAL:2 < 96
		LOCAL = 2
		;絶(4%)
	ELSE
		LOCAL = -2
	ENDIF
ELSE
	;並(40%)
	IF LOCAL:2 < 40
		;貧(26%)
	ELSEIF LOCAL:2 < 66
		LOCAL = -1
		;巨(26%)
	ELSEIF LOCAL:2 < 92
		LOCAL = 1
		;爆(6%)
	ELSEIF LOCAL:2 < 98
		LOCAL = 2
		;絶(2%)
	ELSE
		LOCAL = -2
	ENDIF
ENDIF

CALL SET_PENISSIZE(TARGET, LOCAL)

;-------------------------
;バストサイズをランダムに設定する関数
;-------------------------
@RANDOM_CHARA_HIPSIZE
LOCAL:2 = RAND:100
LOCAL = 0
IF TALENT:体格 == 体格_子供
	;並(40%)
	IF LOCAL:2 < 40
		;貧(48%)
	ELSEIF LOCAL:2 < 88
		LOCAL = -1
		;巨(5%)
	ELSEIF LOCAL:2 < 93
		LOCAL = 1
		;絶(7%)
	ELSE
		LOCAL = -2
	ENDIF
ELSEIF TALENT:体格 == 体格_小柄
	;並(40%)
	IF LOCAL:2 < 40
		;貧(36%)
	ELSEIF LOCAL:2 < 76
		LOCAL = -1
		;巨(16%)
	ELSEIF LOCAL:2 < 92
		LOCAL = 1
		;爆(4%)
	ELSEIF LOCAL:2 < 96
		LOCAL = 2
		;絶(4%)
	ELSE
		LOCAL = -2
	ENDIF
ELSE
	;並(40%)
	IF LOCAL:2 < 40
		;貧(26%)
	ELSEIF LOCAL:2 < 66
		LOCAL = -1
		;巨(26%)
	ELSEIF LOCAL:2 < 92
		LOCAL = 1
		;爆(6%)
	ELSEIF LOCAL:2 < 98
		LOCAL = 2
		;絶(2%)
	ELSE
		LOCAL = -2
	ENDIF
ENDIF
CALL SET_HIPSIZE(TARGET, LOCAL)

;-------------------------
;敏鈍感素質をランダムに設定する関数
;-------------------------
@RANDOM_CHARA_SENSE
;ＭとＵは独立に決める
LOCAL:0 = RAND:100
IF LOCAL:0 < 5
	TALENT:Ｍ敏感 = 1
ELSEIF LOCAL:0 < 8
	TALENT:Ｍ鈍感 = 1
ENDIF
LOCAL:0 = RAND:100
IF LOCAL:0 < 3
	TALENT:Ｕ敏感 = 1
ELSEIF LOCAL:0 < 6
	TALENT:Ｕ鈍感 = 1
ENDIF

LOCAL:0 = RAND:1000

;一箇所敏感型(10%)
IF LOCAL:0 < 100
	CALL SET_SENSE_RANDOM(0)
	;一箇所鈍感型(5%)
ELSEIF LOCAL:0 < 150
	CALL SET_SENSE_RANDOM(1)
	;敏感＋鈍感型(3%)
ELSEIF LOCAL:0 < 180
	CALL SET_SENSE_RANDOM(0)
	CALL SET_SENSE_RANDOM(1)
	;奥手(1%)
ELSEIF LOCAL:0 < 190
	TALENT:Ｃ鈍感 = 1
	TALENT:Ｂ鈍感 = RAND:2 == 0
	TALENT:Ｖ敏感 = RAND:6 == 0
	TALENT:Ａ敏感 = RAND:6 == 0
	;表面(1%)
ELSEIF LOCAL:0 < 200
	TALENT:Ｃ敏感 = 1
	TALENT:Ｂ敏感 = RAND:2 == 0
	TALENT:Ｖ鈍感 = RAND:6 == 0
	TALENT:Ａ鈍感 = RAND:6 == 0
	;全身敏感(0.4%)
ELSEIF LOCAL:0 < 204
	TALENT:Ｃ敏感 = 1
	TALENT:Ｂ敏感 = 1
	TALENT:Ｖ敏感 = 1
	TALENT:Ａ敏感 = 1
	;全身鈍感(0.4%)
ELSEIF LOCAL:0 < 208
	TALENT:Ｃ鈍感 = 1
	TALENT:Ｂ鈍感 = 1
	TALENT:Ｖ鈍感 = 1
	TALENT:Ａ鈍感 = 1
	;Ｖ敏＋鈍感型(0.6%)
ELSEIF LOCAL:0 < 214
	TALENT:Ｖ敏感 = 1
	CALL SET_SENSE_RANDOM(1)
	CALL SET_SENSE_RANDOM(1)
	IF RAND:3 == 0
		CALL SET_SENSE_RANDOM(1)
	ENDIF
	;Ａ敏＋鈍感型(0.6%)
ELSEIF LOCAL:0 < 220
	TALENT:Ａ敏感 = 1
	CALL SET_SENSE_RANDOM(1)
	CALL SET_SENSE_RANDOM(1)
	IF RAND:3 == 0
		CALL SET_SENSE_RANDOM(1)
	ENDIF
ENDIF

;-------------------------
;同一部位に対して同時に敏感・鈍感が設定された場合に相殺する処理
;-------------------------
@KILL_INCOMPATIBLE_SENSE()
IF TALENT:Ｖ敏感 && TALENT:Ｖ鈍感
	TALENT:Ｖ敏感 = 0
	TALENT:Ｖ鈍感 = 0
ENDIF

IF TALENT:Ａ敏感 && TALENT:Ａ鈍感
	TALENT:Ａ敏感 = 0
	TALENT:Ａ鈍感 = 0
ENDIF

IF TALENT:Ｃ敏感 && TALENT:Ｃ鈍感
	TALENT:Ｃ敏感 = 0
	TALENT:Ｃ鈍感 = 0
ENDIF

IF TALENT:Ｂ敏感 && TALENT:Ｂ鈍感
	TALENT:Ｂ敏感 = 0
	TALENT:Ｂ鈍感 = 0
ENDIF

IF TALENT:Ｍ敏感 && TALENT:Ｍ鈍感
	TALENT:Ｍ敏感 = 0
	TALENT:Ｍ鈍感 = 0
ENDIF

IF TALENT:Ｕ敏感 && TALENT:Ｕ鈍感
	TALENT:Ｕ敏感 = 0
	TALENT:Ｕ鈍感 = 0
ENDIF

;-------------------------
;ＣＶＡＢで未設定のランダムな箇所を敏感(ARG:0=0)・鈍感(ARG:0=1)にする関数
;-------------------------
@SET_SENSE_RANDOM(ARG:0)
LOCAL:5 = 4
FOR LOCAL:0, 0, 4
	IF TALENT:(101 + LOCAL:0 * 2) || TALENT:(102 + LOCAL:0 * 2)
		LOCAL:5 --
	ENDIF
NEXT

IF LOCAL:5 <= 0
	RETURN
ENDIF

LOCAL:6 = RAND:(LOCAL:5)

FOR LOCAL:0, 0, 4
	IF !TALENT:(101 + LOCAL:0 * 2) && !TALENT:(102 + LOCAL:0 * 2)
		LOCAL:6 --
		IF LOCAL:6 < 0
			LOCAL:7 = LOCAL:0
			BREAK
		ENDIF
	ENDIF
NEXT

IF ARG:0 == 0
	TALENT:(102 + LOCAL:7 * 2) = 1
ELSE
	TALENT:(101 + LOCAL:7 * 2) = 1
ENDIF

;-------------------------
;ランダムキャラに特定の素質を指定の確率で持たせる関数
;ARG:0=素質の番号、ARG:1=素質の取得確率(百分率)
;-------------------------
@RCHARA_TALENT_SINGLE, ARG:0, ARG:1
LOCAL:0 = RAND:100
IF LOCAL:0 < ARG:1
	TALENT:(ARG:0) = 1
ENDIF

;-------------------------
;ランダムキャラに相反する２つの素質を指定の確率で持たせる関数
;ARG:0=素質１の番号、ARG:1=素質２の番号、ARG:2=素質１の取得確率(百分率)、ARG:3=素質２の取得確率(百分率)
;-------------------------
@RCHARA_TALENT_OPPOSE, ARG:0, ARG:1, ARG:2, ARG:3
LOCAL:0 = RAND:100
IF LOCAL:0 < ARG:2
	TALENT:(ARG:0) = 1
ELSEIF 99 - LOCAL:0 < ARG:3
	TALENT:(ARG:1) = 1
ENDIF

;-------------------------
;汎用武将の名前を決定する
;-------------------------
@RANDOM_CHARA_NAMING(ARG:0)
SELECTCASE ARG:0
	CASE 0
		;[洋名]
		;名前の順番設定
		TALENT:姓名逆転 = 1
		TALENT:ミドルネーム洋風 = 1
		;ランダム名生成
		CALL SET_RANDOM_NAME_K(TARGET)
		;名前, 呼び名の設定 (名)
		NAME = %CSTR:名%
		CALLNAME = %CSTR:名%
	CASE 1
		;[和名]
		;名前の順番設定
		TALENT:姓名逆転 = 0
		TALENT:ミドルネーム洋風 = 1
		;ランダム名生成
		CALL SET_RANDOM_NAME_J(TARGET)
		;名前, 呼び名の設定 (名)
		NAME = %CSTR:名%
		CALLNAME = %CSTR:名%
		CSTR:NAMEカナ = %CSTR:名カナ%
	CASE 2
		;[中華]
		TALENT:姓名逆転 = 0
		TALENT:ミドルネーム洋風 = 0
		;ランダム名生成
		CALL SET_RANDOM_NAME
		;名前, 呼び名の設定 (姓＋名)
		NAME = %CSTR:姓%%CSTR:名%
		CALLNAME = %CSTR:姓%%CSTR:名%
		CSTR:NAMEカナ = %CSTR:姓カナ%%CSTR:名カナ%
ENDSELECT

;-------------------------
;能力値に応じてキャラARG:0の最大精神力を設定する関数
;-------------------------
@SET_MIND_POWER(ARG:0)
LOCAL:0 = ABL:(ARG:0):身体 + ABL:(ARG:0):知識 + ABL:(ARG:0):社交 + ABL:(ARG:0):歌唱 + ABL:(ARG:0):料理
MAXBASE:(ARG:0):精神力 = 500 + LOCAL:0 * 6 * (RAND:101 + 50) / 10000 * 100
BASE:(ARG:0):精神力 = MAXBASE:(ARG:0):精神力

;-------------------------
;素質を考慮してキャラARG:0の性格タイプを設定する関数
;-------------------------
@SET_CHARACTER(ARG:0)
;■性格タイプの決定
;成長型に応じた確率の設定
SELECTCASE TALENT:(ARG:0):成長型
	CASE 1
		LOCAL:0 = 70
		LOCAL:1 = 60
	CASE 2
		LOCAL:0 = 90
		LOCAL:1 = 60
	CASE 3
		LOCAL:0 = 25
		LOCAL:1 = 70
	CASE 4
		LOCAL:0 = 10
		LOCAL:1 = 40
	CASE 5
		LOCAL:0 = 80
		LOCAL:1 = 60
	CASE 6
		LOCAL:0 = 80
		LOCAL:1 = 60
	CASE 7
		LOCAL:0 = 40
		LOCAL:1 = 40
	CASEELSE
		LOCAL:0 = 50
		LOCAL:1 = 60
ENDSELECT

;素質による補正
LOCAL:2 = 100
IF TALENT:(ARG:0):大人しい
	TIMES LOCAL:2, 4.00
ENDIF
IF TALENT:(ARG:0):感情乏しい
	TIMES LOCAL:2, 4.00
ENDIF
IF TALENT:(ARG:0):反抗的
	TIMES LOCAL:2, 0.25
ENDIF
IF LOCAL:2 > 100
	LOCAL:0 = LOCAL:0 + (100 - LOCAL:0) * (LOCAL:2 - 1) / LOCAL:2
ELSEIF LOCAL:2 < 100
	LOCAL:0 = LOCAL:0 * LOCAL:2 / (LOCAL:2 + 1)
ENDIF

TALENT:(ARG:0):性格 = 1
IF RAND:100 >= LOCAL:0
	TALENT:(ARG:0):性格 += 1
ENDIF
IF RAND:100 >= LOCAL:1
	TALENT:(ARG:0):性格 += 2
ENDIF

;-------------------------
;髪型・髪の長さをランダムに設定する関数
;-------------------------
@SET_HAIR(ARG:0)
LOCAL:5 = ID_TO_CHARA(CFLAG:(ARG:0):父親)
LOCAL:6 = ID_TO_CHARA(CFLAG:(ARG:0):母親)
LOCAL:7 = (LOCAL:5 >= 0 && TALENT:(LOCAL:5):髪色 != 0)
LOCAL:8 = (LOCAL:6 >= 0 && TALENT:(LOCAL:6):髪色 != 0)

;両親が設定されているならそれと近い色になる
IF LOCAL:7 && (!LOCAL:8 || RAND:2)
	LOCAL:10 = RGB_TO_H(TALENT:(LOCAL:5):髪色) + ((RAND:61 + RAND:61 + RAND:61) / (RAND:12 + 1)) * (RAND:2 * 2 - 1)
	LOCAL:11 = RGB_TO_S(TALENT:(LOCAL:5):髪色) + RAND:21 - RAND:21
	LOCAL:12 = RGB_TO_V(TALENT:(LOCAL:5):髪色) + RAND:51 - RAND:51
	TALENT:(ARG:0):髪色 = HSV_TO_RGB((LOCAL:10 + 720) % 360, LIMIT(LOCAL:11, 0, 92), LIMIT(LOCAL:12, 30, 97))
ELSEIF LOCAL:8
	LOCAL:10 = RGB_TO_H(TALENT:(LOCAL:6):髪色) + ((RAND:61 + RAND:61 + RAND:61) / (RAND:12 + 1)) * (RAND:2 * 2 - 1)
	LOCAL:11 = RGB_TO_S(TALENT:(LOCAL:6):髪色) + RAND:21 - RAND:21
	LOCAL:12 = RGB_TO_V(TALENT:(LOCAL:6):髪色) + RAND:51 - RAND:51
	TALENT:(ARG:0):髪色 = HSV_TO_RGB((LOCAL:10 + 720) % 360, LIMIT(LOCAL:11, 0, 92), LIMIT(LOCAL:12, 30, 97))
ELSE
	;両親不明ならHSV基準でランダム値を取る
	TALENT:(ARG:0):髪色 = HSV_TO_RGB(RAND:360, RAND:93, RAND:68 + 30)
ENDIF

;男性・男ふたなりの場合
IF GROUPMATCH(TALENT:(ARG:0):性別, 0, 3)
	;低確率で長髪・スキンヘッド
	IF RAND:20 == 0
		TALENT:(ARG:0):髪の長さ = 1
	ELSEIF RAND:12 == 0
		TALENT:(ARG:0):髪の長さ = 5 + RAND:2
	ELSE
		TALENT:(ARG:0):髪の長さ = 2 + RAND:3
	ENDIF
	;女性・女ふたなり・男の娘の場合
ELSE
	;超ショート・超ロングは確率低め
	IF RAND:30 == 0
		TALENT:(ARG:0):髪の長さ = 2 + RAND:2
	ELSEIF RAND:12 == 0
		TALENT:(ARG:0):髪の長さ = 6
	ELSE
		TALENT:(ARG:0):髪の長さ = 3 + RAND:3
	ENDIF
ENDIF

;-------------------------
;陰毛の長さをランダムに設定する関数
;-------------------------
@SET_INMOU_RANDOM(ARG:0)
LOCAL:13 = RAND:100

IF TALENT:(ARG:0):体格 == 体格_子供
	IF RAND:4 == 0
		TALENT:(ARG:0):陰毛目標値 = 陰毛_パイパン
		TALENT:(ARG:0):陰毛現在値 = 陰毛_パイパン
	ELSEIF RAND:300 == 0
		TALENT:(ARG:0):陰毛目標値 = 陰毛_ハート型
		TALENT:(ARG:0):陰毛現在値 = 陰毛_ハート型
	ELSEIF LOCAL:13 < 90
		IF TALENT:(ARG:0):動物耳
			TALENT:(ARG:0):陰毛目標値 = RAND:8
			TALENT:(ARG:0):陰毛現在値 = TALENT:(ARG:0):陰毛目標値
		ELSE
			TALENT:(ARG:0):陰毛目標値 = RAND:5
			TALENT:(ARG:0):陰毛現在値 = TALENT:(ARG:0):陰毛目標値
		ENDIF
	ELSE
		TALENT:(ARG:0):陰毛目標値 = RAND:10
		TALENT:(ARG:0):陰毛現在値 = TALENT:(ARG:0):陰毛目標値
	ENDIF
	;男性・男ふたなりの場合
ELSEIF GROUPMATCH(TALENT:(ARG:0):性別, 0, 3)
	IF RAND:30 == 0
		TALENT:(ARG:0):陰毛目標値 = 陰毛_パイパン
		TALENT:(ARG:0):陰毛現在値 = 陰毛_パイパン
	ELSEIF RAND:500 == 0
		TALENT:(ARG:0):陰毛目標値 = 陰毛_ハート型
		TALENT:(ARG:0):陰毛現在値 = 陰毛_ハート型
	ELSEIF LOCAL:13 < 80
		IF TALENT:(ARG:0):動物耳
			TALENT:(ARG:0):陰毛目標値 = RAND(2, 10)
			TALENT:(ARG:0):陰毛現在値 = TALENT:(ARG:0):陰毛目標値
		ELSE
			TALENT:(ARG:0):陰毛目標値 = RAND(2, 9)
			TALENT:(ARG:0):陰毛現在値 = TALENT:(ARG:0):陰毛目標値
		ENDIF
	ELSE
		TALENT:(ARG:0):陰毛目標値 = RAND:10
		TALENT:(ARG:0):陰毛現在値 = TALENT:(ARG:0):陰毛目標値
	ENDIF
	;女性・女ふたなり・男の娘の場合
ELSE
	IF RAND:10 == 0
		TALENT:(ARG:0):陰毛目標値 = 陰毛_パイパン
		TALENT:(ARG:0):陰毛現在値 = 陰毛_パイパン
	ELSEIF RAND:200 == 0
		TALENT:(ARG:0):陰毛目標値 = 陰毛_ハート型
		TALENT:(ARG:0):陰毛現在値 = 陰毛_ハート型
	ELSEIF LOCAL:13 < 90 && !TALENT:(ARG:0):動物耳
		TALENT:(ARG:0):陰毛目標値 = RAND:9
		TALENT:(ARG:0):陰毛現在値 = TALENT:(ARG:0):陰毛目標値
	ELSE
		TALENT:(ARG:0):陰毛目標値 = RAND:10
		TALENT:(ARG:0):陰毛現在値 = TALENT:(ARG:0):陰毛目標値
	ENDIF
ENDIF

;-------------------------
;陰毛の長さをランダムに設定する関数
;-------------------------
@SET_ARMPIT_RANDOM(ARG:0)
LOCAL:13 = RAND:100

IF TALENT:(ARG:0):体格 == 体格_子供
	IF RAND:4 == 0
		TALENT:(ARG:0):腋毛目標値 = 腋毛_つるつる
		TALENT:(ARG:0):腋毛現在値 = 腋毛_つるつる
	ELSEIF LOCAL:13 < 90
		IF TALENT:(ARG:0):動物耳
			TALENT:(ARG:0):腋毛目標値 = RAND:8
			TALENT:(ARG:0):腋毛現在値 = TALENT:(ARG:0):腋毛目標値
		ELSE
			TALENT:(ARG:0):腋毛目標値 = RAND:5
			TALENT:(ARG:0):腋毛現在値 = TALENT:(ARG:0):腋毛目標値
		ENDIF
	ELSE
		TALENT:(ARG:0):腋毛目標値 = RAND:10
		TALENT:(ARG:0):腋毛現在値 = TALENT:(ARG:0):腋毛目標値
	ENDIF
	;男性・男ふたなりの場合
ELSEIF GROUPMATCH(TALENT:(ARG:0):性別, 0, 3)
	IF RAND:30 == 0
		TALENT:(ARG:0):腋毛目標値 = 腋毛_脱毛済み
		TALENT:(ARG:0):腋毛現在値 = 腋毛_脱毛済み
	ELSEIF LOCAL:13 < 80
		IF TALENT:(ARG:0):動物耳
			TALENT:(ARG:0):腋毛目標値 = RAND(2, 10)
			TALENT:(ARG:0):腋毛現在値 = TALENT:(ARG:0):腋毛目標値
		ELSE
			TALENT:(ARG:0):腋毛目標値 = RAND(2, 9)
			TALENT:(ARG:0):腋毛現在値 = TALENT:(ARG:0):腋毛目標値
		ENDIF
	ELSE
		TALENT:(ARG:0):腋毛目標値 = RAND:10
		TALENT:(ARG:0):腋毛現在値 = TALENT:(ARG:0):腋毛目標値
	ENDIF
	;女性・女ふたなり・男の娘の場合
ELSE
	IF RAND:10 == 0
		TALENT:(ARG:0):腋毛目標値 = 腋毛_つるつる
		TALENT:(ARG:0):腋毛現在値 = 腋毛_つるつる
	ELSEIF LOCAL:13 < 90 && !TALENT:(ARG:0):動物耳
		TALENT:(ARG:0):腋毛目標値 = RAND:9
		TALENT:(ARG:0):腋毛現在値 = TALENT:(ARG:0):腋毛目標値
	ELSE
		TALENT:(ARG:0):腋毛目標値 = RAND:10
		TALENT:(ARG:0):腋毛現在値 = TALENT:(ARG:0):腋毛目標値
	ENDIF
ENDIF

;-------------------------
;ランダムフィルタにかけた値段を引っ張ってくる
;-------------------------
@GET_FILTER_COST
#FUNCTION
#DIM COST
#DIM ID

COST = 0
VARSIZE TALENT_FILTER
FOR ID, 0, RESULT:0
	SIF TALENT_FILTER:ID
		COST += 500
NEXT

RETURNF COST

;-------------------------
;TALENT_FILTERを掛ける
;-------------------------
@SET_TALENT_FILTER(ID)
#DIM ID
#DIM TALENT_ID

FOR TALENT_ID, 0, 151
	IF TALENT:ID:TALENT_ID == 0 && TALENT_FILTER:TALENT_ID
		TALENT:ID:TALENT_ID = 1
		SELECTCASE TALENT_ID
			CASE 11
				TALENT:ID:素直 = 0
			CASE 13
				TALENT:ID:反抗的 = 0
			CASE 15
				TALENT:ID:プライド低い = 0
			CASE 17
				TALENT:ID:プライド高い = 0
			CASE 22
				TALENT:ID:好奇心 = 0
			CASE 23
				TALENT:ID:感情乏しい = 0
			CASE 25
				TALENT:ID:悲観的 = 0
			CASE 26
				TALENT:ID:楽観的 = 0
			CASE 27
				TALENT:ID:目立ちたがり = 0
			CASE 28
				TALENT:ID:一線越えない = 0
			CASE 30
				TALENT:ID:貞操無頓着 = 0
			CASE 31
				TALENT:ID:貞操観念 = 0
			CASE 32
				TALENT:ID:解放 = 0
			CASE 33
				TALENT:ID:抑圧 = 0
			CASE 35
				TALENT:ID:恥薄い = 0
			CASE 36
				TALENT:ID:恥じらい = 0
			CASE 40
				TALENT:ID:痛みに強い = 0
			CASE 41
				TALENT:ID:痛みに弱い = 0
			CASE 42
				TALENT:ID:濡れにくい = 0
			CASE 43
				TALENT:ID:濡れやすい = 0
			CASE 50
				TALENT:ID:習得遅い = 0
			CASE 51
				TALENT:ID:習得早い = 0
			CASE 61
				TALENT:ID:汚臭敏感 = 0
			CASE 62
				TALENT:ID:汚臭鈍感 = 0
			CASE 70
				TALENT:ID:快感の否定 = 0
			CASE 71
				TALENT:ID:快感に素直 = 0
			CASE 81
				TALENT:ID:男嫌い = 0
				TALENT:ID:女嫌い = 0
			CASE 82, 83
				TALENT:ID:倒錯的 = 0
			CASE 101
				TALENT:ID:Ｃ敏感 = 0
			CASE 102
				TALENT:ID:Ｃ鈍感 = 0
			CASE 103
				TALENT:ID:Ｖ敏感 = 0
			CASE 104
				TALENT:ID:Ｖ鈍感 = 0
			CASE 105
				TALENT:ID:Ａ敏感 = 0
			CASE 106
				TALENT:ID:Ａ鈍感 = 0
			CASE 107
				TALENT:ID:Ｂ敏感 = 0
			CASE 108
				TALENT:ID:Ｂ鈍感 = 0
			CASE 109
				TALENT:ID:Ｍ敏感 = 0
			CASE 110
				TALENT:ID:Ｍ鈍感 = 0
			CASE 111
				TALENT:ID:回復遅い = 0
			CASE 112
				TALENT:ID:回復早い = 0
			CASE 115
				TALENT:ID:Ｕ敏感 = 0
			CASE 116
				TALENT:ID:Ｕ鈍感 = 0
		ENDSELECT
	ENDIF
NEXT

;-------------------------
;職業によるTALENTの変化などを付与
;-------------------------
@UPDATE_BY_JOB
#DIM CHARA_ID
CHARA_ID = TARGET
SELECTCASE JOB_NAME:(TALENT:職業)
	CASE "軍人"
		CALL SET_TALENT(CHARA_ID, "プライド高い", 1, 1)
		CALL SET_TALENT(CHARA_ID, "痛みに強い", 1, 1)
	CASE "娼婦"
		EXP:売春経験 += RAND:300 + 100
	CASE "聖職者"
		CALL SET_TALENT(CHARA_ID, "快感の否定", 1, 1)
		CALL SET_TALENT(CHARA_ID, "貞操観念", 1, 1)
	CASE "冒険家"
		IF RAND:100 < 10
			IF RAND:2
				EXP:輪姦経験 += RAND:10 + 10
			ELSE
				EXP:トラウマ経験 += RAND:10 + 10
			ENDIF
		ENDIF
	CASE "医者"
		SIF TALENT:幼稚
			TALENT:幼稚 = 0
	CASE "奴隷"
		CALL SET_TALENT(CHARA_ID, "献身的", 1, 1)
	CASE "労働党員"
		CALL SET_TALENT(CHARA_ID, "保守的", 1, 1)
	CASE "労働者"
		SIF !RAND:3
			CALL SET_TALENT(CHARA_ID, "サボり魔", 1, 1)
	CASE "貴族"
		CALL SET_TALENT(CHARA_ID, "プライド高い", 1, 1)
	CASE "魔術師"
		CALL SET_TALENT(CHARA_ID, "魔術師", 1, 1)
	CASE "学者"
		CALL SET_TALENT(CHARA_ID, "好奇心", 1, 1)
	CASE "芸能人"
		CALL SET_TALENT(CHARA_ID, "目立ちたがり", 1, 1)
	CASE "教師"
		SIF RAND:100 < 10
			EXP:輪姦経験 += RAND:10 + 10
	CASE "海賊"
		CALL SET_TALENT(CHARA_ID, "反抗的", 1, 1)
	CASE "アイドル"
		CALL SET_TALENT(CHARA_ID, "人気", 1, 1)
	CASE "政治犯"
		CALL SET_TALENT(CHARA_ID, "素直", 1, 1)
	CASE "メイド"
		CALL SET_TALENT(CHARA_ID, "一線越えない", 1, 1)
	CASE "巫女"
		SIF RAND:100 < 10
			ABL:魔術 = RAND:10 + 20
		SIF RAND:100 < 5
			EXP:売春経験 = RAND:10 + 20
		SIF RAND:100 < 5
			EXP:異常経験 = RAND: 10 + 1
ENDSELECT


code:
;-------------------------
;ランダムキャラに衣装を設定する
;-------------------------
@RANDOM_CHARA_CLOTH_SETTING(PRESET_NAME = "", CHARA_ID = -1)
#DIMS PRESET_NAME
#DIM CHARA_ID

SIF PRESET_NAME == ""
	PRESET_NAME = JOB_NAME:(TALENT:職業)

SIF CHARA_ID == -1
	CHARA_ID = TARGET

;動物は服を着ない
IF IS_ANIMAL(CHARA_ID)
	CALL CLOTH_RESET(CHARA_ID)
	RETURN
ENDIF

;職業で分岐
SELECTCASE PRESET_NAME
		;私服
	CASE "フリーター","無職","アスリート","配信者", "一般人", "村人"
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "帽子")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ブラウス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スカート")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
		ENDIF
		;小中
	CASE "学生"
		SIF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "帽子")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "服")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
		IF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "肩掛けカバン")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "鞄")
		ENDIF
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ショートパンツ")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			ENDIF
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "スポーツブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ショートパンツ")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スカート")
			ENDIF
		ENDIF
		;高大
	CASE "高校生","大学生"
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "帽子")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "Ｔシャツ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "学ラン")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "下駄")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "セーラー服")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "セーラースカート")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "クルーソックス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ローファー")
		ENDIF
		;一般系
	CASE "教師","記者","船員","貿易商","労働者","資本家","警官","役人","秘書","政治家","医者","探偵", "行商人"
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "スーツ")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "ネクタイ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スラックス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
		ELSE
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "ネクタイ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スラックス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ショートソックス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "タイトスカート")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ストッキング")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ハイヒール")
			ENDIF
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "眼鏡")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "肩掛けカバン")
			ENDIF
		ENDIF
		;マナー系
	CASE "騎士","貴族","王族",
		SIF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_腕, "手袋")
		IF IS_MALE(CHARA_ID)
			IF RAND:100 < 21
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "和服")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "足袋")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "草履")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下下着, "襦袢")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "ネクタイ")
				IF RAND:2
					CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "スーツ")
					CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
					CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スラックス")
				ELSE
					CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "燕尾服")
				ENDIF
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
			ENDIF
		ELSE
			IF RAND:100 < 21
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "かんざし")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "和服")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "足袋")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "草履")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下下着, "襦袢")
			ELSEIF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "ネクタイ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "スーツ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スラックス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ショートソックス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, @"%S_R("ドレス/ゴシックドレス")%")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ストッキング")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "パンプス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
			ENDIF
		ENDIF
		;労働者
	CASE "労働者"
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "作務衣")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "シューズ")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
		ENDIF
		;メカニック
	CASE "技師"
		IF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "帽子")
		ELSEIF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "ヘルメット")
		ENDIF
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "作務衣")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_腕, "グローブ")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "シューズ")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
		ENDIF
		;芸術家
	CASE "芸術家"
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "帽子")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "肩掛けカバン")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "ジャケット")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "デニム")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ショートソックス")
				IF RAND:100 < 31
					CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
				ELSE
					CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "パンプス")
				ENDIF
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スカート")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ニーハイソックス")
				IF RAND:100 < 31
					CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "パンプス")
				ELSE
					CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ブーツ")
				ENDIF
			ENDIF
		ENDIF
		;プロゲーマー
	CASE "プロゲーマー"
		SIF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "帽子")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "Ｔシャツ")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "シューズ")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ショートソックス")
		ENDIF
		;警官さん
	CASE "警官"
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "ベスト")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "ネクタイ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スラックス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
		ELSE
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "ネクタイ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スラックス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ショートソックス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "タイトスカート")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ストッキング")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ハイヒール")
			ENDIF
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "眼鏡")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "肩掛けカバン")
			ENDIF
		ENDIF
		;パイロット
	CASE "パイロット"
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "ライダースーツ")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下下着, "ボディスーツ")
		;軍人さん
	CASE "軍人"
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "帽子")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "軍服")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_腕, "手袋")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ブーツ")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "スポーツブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "ボーイレッグ")
		ENDIF
		;海賊
	CASE "海賊"
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "帽子")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "服")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "コート")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ブーツ")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スカート")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
		ENDIF
		;マフィア
	CASE "マフィア"
		SIF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "眼鏡")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "コート")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "ネクタイ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
		ELSE
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "ネクタイ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ショートソックス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "タイトスカート")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ストッキング")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ハイヒール")
			ENDIF
		ENDIF
		;巫女さん
	CASE "巫女"
		SIF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "烏帽子")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "和服")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "白衣")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下下着, "襦袢")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "足袋")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "草履")
		;メイドさん
		;男の場合は執事さん
	CASE "メイド"
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "ネクタイ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "燕尾服")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "ローライズ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_腕, "手袋")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "ホワイトブリム")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "メイド服")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ニーソックス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "パンプス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "ガーター")
		ENDIF
		;えっちなの
		;とりあえず一くくりに
	CASE "娼婦","AV女優"
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ブラウス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スカート")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "レースブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "紐パン")
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ブーツ")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ハイヒール")
			ENDIF
		ENDIF
		;コスプレイヤー
		;各自お好きなキャラや属性を追加してください
	CASE "コスプレイヤー"
		IF IS_MALE(CHARA_ID)
			IF RAND:100 < 51
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "帽子")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "ローブ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "魔導書")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "王冠")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "法衣")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "マント")
			ENDIF
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
		ELSE
			IF RAND:100 < 51
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "セーラー服")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "セーラースカート")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "クルーソックス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ローファー")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "ティアラ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "ドレス")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "ファーコート")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下下着, "レオタード")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_腕, "手袋")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "タイツ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ハイヒール")
			ENDIF
		ENDIF
		;聖職者
	CASE "聖職者"
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "ベール")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "修道服")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_腕, "手袋")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "ブリーフ")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "シースルーブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "シースルーパンティ")
		ENDIF
		;冒険家
	CASE "冒険者", "旅行者"
		SIF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "帽子")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, @"%S_R("なし/マフラー")%")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "服")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "ジャケット")
		IF RAND:100 < 51
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "肩掛けカバン")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "鞄")
		ENDIF
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_腕, "手袋")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ブーツ")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スカート")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "タイツ")
		ENDIF
		;格闘家
	CASE "格闘家"
		IF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_頭, "はちまき")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "道着")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "ふんどし")
			SIF IS_FEMALE(CHARA_ID)
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "さらし")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "タンクトップ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "コート")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ショートパンツ")
			IF IS_MALE(CHARA_ID)
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "ブリーフ")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "スポーツブラ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "ボクサー")
			ENDIF
		ENDIF
		;医者
	CASE "医者"
		SIF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "眼鏡")
		SIF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "ネクタイ")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "白衣")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_腕, "手袋")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "シューズ")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
		ELSE
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "タイトスカート")
			ENDIF
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
		ENDIF
		;看護師
	CASE "看護師"
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "シューズ")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "タイトスカート")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "シューズ")
		ENDIF
		;奴隷
	CASE "奴隷","性奴隷"
		IF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "奴隷の首輪")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "管理タグ")
		ENDIF
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上下服, "ぼろぼろの布切れ")
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_腕, "手枷")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "足枷")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "前垂れ")
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_腕, "スレイブグローブ")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "穴あきストッキング")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_腕, "手枷")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "足枷")
			ENDIF
		ENDIF
		;芸能
	CASE "芸能人","俳優","歌手","グラビアアイドル","吟遊詩人"
		CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "Ｔシャツ")
		SIF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "コート")
		IF RAND:100 < 31
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "眼鏡")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "肩掛けカバン")
		ENDIF
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ズボン")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "シューズ")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "タイトスカート")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "タイツ")
			ELSEIF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "ロングスカート")
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ショートソックス")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "デニム")
			ENDIF
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "パンプス")
			ELSEIF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "シューズ")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ブーツ")
			ENDIF
		ENDIF
	CASEELSE
		IF IS_MALE(CHARA_ID)
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ワイシャツ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上着, "ジャケット")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_首, "ネクタイ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スラックス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "トランクス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "靴下")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "靴")
		ELSE
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_上服, "ブラウス")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "スカート")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着上, "ブラ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下着下, "パンティ")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴下, "ストッキング")
			CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_靴, "ハイヒール")
			IF RAND:100 < 31
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "眼鏡")
			ELSE
				CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_アクセサリ, "肩掛けカバン")
			ENDIF
		ENDIF
ENDSELECT


code:
;-------------------------
;ランダムキャラに生殖記録や経験などを設定する
;QUANTITY1(0=RAND;-1=童貞;-2=SKIP;ELSE=種付数)
;QUANTITY2(0=RAND;-1=処女;-2=SKIP;ELSE=妊娠数)
;-------------------------
@RANDOM_CHARA_REPRODUCTION_SETTING(ARG:0, PRESET_NAME, QUANTITY1, QUANTITY2)
#DIMS PRESET_NAME
#DIM QUANTITY1
#DIM QUANTITY2
#DIM CHARA_ID
#DIM COLUMN
#DIM VIRGIN_CHECK
#DIMS DYNAMIC OVUM_PROVIDER
#DIM  DYNAMIC SEDUCTION_LV
#DIM  DYNAMIC RECORD_NUM

; ; SIF QUANTITY2 != -2
; ; 	CALL RANDOM_PREGNANT_RECORD(ARG, QUANTITY2)

; 設定的に童貞不可能キャラを優先
; SELECTCASE CALLNAME:(ARG:0)

; 	CASE "カール"
; 		カーラ?
; 	CASE "ドライアド"
; 	エリート級
; 		元男性冒険者
; 		素材探し

RECORD_NUM = 0
COLUMN = 0

SELECTCASE QUANTITY1
		; 童貞の場合では経験消す
	CASE -1
		CALL VIRGINIZE((ARG:0), 初体験_童貞)
	CASE 0
		IF RAND:5 <= 3
			SIF RAND:10 == 0
				CALL VIRGINIZE((ARG:0), 初体験_童貞)
		ELSE
			RECORD_NUM = (1+RAND:3)

			IF RAND:5 == 1
				RECORD_NUM += (3+RAND:5)
				SIF !GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_濃厚精液) && RAND:2 == 0
					SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_濃厚精液
				CALL SKILL_LEARN2((ARG:0), スキル_大分類_性技, "CUM_INFLATION", 1)

				IF RAND:8 == 1
					RECORD_NUM += (5+RAND:20)
					SEDUCTION_LV = (1+RAND:2)
					CALL SKILL_LEARN2((ARG:0), スキル_大分類_性技, "SEDUCTION", SEDUCTION_LV)
					CALL SKILL_LEARN2((ARG:0), スキル_大分類_性技, "CUM_INFLATION", 2)
					SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_濃厚精液

					IF RAND:10 == 1
						SEDUCTION_LV += 1
						CALL SKILL_LEARN2((ARG:0), スキル_大分類_性技, "SEDUCTION", SEDUCTION_LV)
						CALL SKILL_LEARN2((ARG:0), スキル_大分類_性技, "CUM_INFLATION", 3)
						RECORD_NUM += (10+RAND:50)
					ENDIF
				ENDIF
			ENDIF
		ENDIF
	CASE -2
	CASEELSE
	RECORD_NUM = QUANTITY1
		IF RECORD_NUM >= 8
			SIF !GETBIT(TALENT:(ARG:0):淫乱系, 素質_淫乱_濃厚精液) && RAND:3 == 0
				SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_濃厚精液
			CALL SKILL_LEARN2((ARG:0), スキル_大分類_性技, "CUM_INFLATION", 1)

			IF RECORD_NUM >= 15
				SEDUCTION_LV = (1+RAND:2)
				CALL SKILL_LEARN2((ARG:0), スキル_大分類_性技, "SEDUCTION", SEDUCTION_LV)
				CALL SKILL_LEARN2((ARG:0), スキル_大分類_性技, "CUM_INFLATION", 2)
				SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_濃厚精液

				IF RECORD_NUM >= 50
					SEDUCTION_LV += 1
					CALL SKILL_LEARN2((ARG:0), スキル_大分類_性技, "SEDUCTION", SEDUCTION_LV)
					CALL SKILL_LEARN2((ARG:0), スキル_大分類_性技, "CUM_INFLATION", 3)
				ENDIF
			ENDIF
		ENDIF
ENDSELECT

IF RECORD_NUM
	; 客の場合
	IF PRESET_NAME == "買物客" || PRESET_NAME == "観客_街" || PRESET_NAME == "観客_スラム"
		; || PRESET_NAME == "村の子供"
		SIF TALENT:(ARG:0):性別 == 1
			RETURN
		SIF CFLAG:(ARG:0):スケベモブ == 0
			RECORD_NUM = (RECORD_NUM)*(5+RAND:6)/(5+RAND:11)
		IF SEXUAL_EXPERIENCE:(ARG:0):初体験_童貞 == "----" || SEXUAL_EXPERIENCE:(ARG:0):初体験_童貞 == "不明"
			OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(0 ,0 ,0 ,0)%
			SEXUAL_EXPERIENCE:(ARG:0):初体験_童貞 = %OVUM_PROVIDER%
			OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(0 ,0 ,0 ,0)%
			SEXUAL_LAST_EXPERIENCE:(ARG:0):初体験_童貞 = %OVUM_PROVIDER%
		ENDIF
		FOR LOCAL, 0, RECORD_NUM
			SELECTCASE RAND:3
				CASE 0
					OVUM_PROVIDER = %SPLIT_RAND("大胆な娼婦/宿屋の踊り子")%
				CASE 1
					OVUM_PROVIDER = %SPLIT_RAND("良家の/無知な/貧困な")%%SPLIT_RAND("少女/村娘/市民")%
				CASE 2
					IF RECORD_NUM <= 5
						OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(0 ,0 ,0 ,0)%
					ELSE
						OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(0 ,1 ,0 ,0)%
					ENDIF
			ENDSELECT
			CALL ADD_IMPREGNANT_RECORD(ARG:0, OVUM_PROVIDER)
			SIF RAND:2 == 0
				SEXUAL_LAST_EXPERIENCE:(ARG:0):初体験_童貞 = %OVUM_PROVIDER%
		NEXT
	ENDIF

	SELECTCASE CSTR:(ARG:0):モブ識別子
			; 雑魚モブ
		CASE "ゴブリン"
			TIMES RECORD_NUM, 0.4
			RECORD_NUM = LIMIT(RECORD_NUM ,1 ,10)
			RECORD_NUM += RAND:6
			FOR LOCAL, 0, RECORD_NUM
				SELECTCASE RAND:5
					CASE 0
						OVUM_PROVIDER = %SPLIT_RAND("どこかの/攫われた/旅行中の")%%SPLIT_RAND("ならず者/村娘/行商人")%
					CASE 1
						OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(0 ,0 ,0 ,0)%
					CASE 2
						OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(2 ,0 ,0 ,0)%
					CASEELSE
						OVUM_PROVIDER = 孕み袋
				ENDSELECT
				CALL ADD_IMPREGNANT_RECORD(ARG:0, OVUM_PROVIDER)
			NEXT
			; 	CASE "スライム"
			; 			無名の新人冒険者
		CASE "触手"
			TIMES RECORD_NUM, 0.4
			RECORD_NUM = LIMIT(RECORD_NUM ,1 ,10)
			RECORD_NUM += RAND:6
			FOR LOCAL, 0, RECORD_NUM
				SELECTCASE RAND:5
					CASE 1
						OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(0 ,0 ,0 ,0)%
					CASE 2
						OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(2 ,0 ,0 ,0)%
					CASEELSE
						OVUM_PROVIDER = 触手愛好家
				ENDSELECT
				CALL ADD_IMPREGNANT_RECORD(ARG:0, OVUM_PROVIDER)
			NEXT
			; 	CASE "魔物"
			; 			無名の冒険者
			; 			討伐にきた冒険者
			; 	; エリート
		CASE "スキュラ"
			SELECTCASE CALLNAME:(ARG:0)
			CASE "スキュラ女王"
				TIMES RECORD_NUM, 1.6
				RECORD_NUM = LIMIT(RECORD_NUM ,5 ,80)
				RECORD_NUM += RAND:11
			CASEELSE
				TIMES RECORD_NUM, 0.8
				RECORD_NUM = LIMIT(RECORD_NUM ,1 ,15)
				RECORD_NUM += RAND:11
			ENDSELECT
			FOR LOCAL, 0, RECORD_NUM
				SELECTCASE RAND:10
					CASE IS <3
						OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(0 ,0 ,0 ,0)%
					CASE 3
						OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(2 ,0 ,0 ,1)%%SPLIT_RAND("女海賊/航海士")%
					CASE 4
						OVUM_PROVIDER = 海岸の観光客
					CASEELSE
						OVUM_PROVIDER = スキュラ
				ENDSELECT
				CALL ADD_IMPREGNANT_RECORD(ARG:0, OVUM_PROVIDER)
			NEXT

			; 	; 英雄級(骨竜や電)
	ENDSELECT

	SELECTCASE CALLNAME:(ARG:0)
		CASE "野盗","傭兵くずれ","盗賊","冒険者くずれ", "ならず者"
			SIF TALENT:(ARG:0):性別 == 1
				RETURN
			SELECTCASE RAND:5
				CASE 1
					OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(0 ,0 ,0 ,0)%
				CASE 2
					OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(2 ,0 ,0 ,0)%
				CASEELSE
					OVUM_PROVIDER = %GENERATE_RANDOM_MOB_CALLNAME(1 ,0 ,0 ,0)%
			ENDSELECT
	ENDSELECT

	CALL RANDOM_CHARA_CREAMPIE_EXP_SETTING(ARG:0, RECORD_NUM)
ENDIF

; RECORD_NUM = 0
; COLUMN = 0

; SELECTCASE QUANTITY2
; 	; 処女の場合では経験消す
; 	CASE -1
; 		CALL VIRGINIZE((ARG:0), 初体験_処女)
; 	CASE 0
; 		IF RAND:4 == 1
; 			SIF RAND:10 == 0
; 				CALL VIRGINIZE((ARG:0), 初体験_処女)
; 		ELSE
; 			RECORD_NUM = (1+RAND:3)

; 			IF RAND:5 == 1
; 				RECORD_NUM += (1+RAND:5)
; 				SIF RAND:5 == 0
; 					SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_良質母胎
; 				SIF RAND:5 == 0
; 					SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_孕みたがり

; 				IF RAND:8 == 1
; 					SIF RAND:3 == 0
; 						SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_孕みたがり
; 					SIF RAND:3 == 0
; 						SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_良質母胎
; 				ENDIF
; 			ENDIF
; 		ENDIF
; 	CASE -2
; 	CASEELSE
; 		RECORD_NUM = QUANTITY2
; 		IF RECORD_NUM >= 3
; 			SIF RAND:5 == 0
; 				SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_良質母胎
; 			SIF RAND:5 == 0
; 				SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_孕みたがり

; 			IF RECORD_NUM >= 8
; 				SIF RAND:3 == 0
; 					SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_孕みたがり
; 				SIF RAND:3 == 0
; 					SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_良質母胎

; 				IF RECORD_NUM >= 20
; 					SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_孕みたがり
; 					SETBIT TALENT:(ARG:0):淫乱系, 素質_淫乱_良質母胎
; 				ENDIF
; 			ENDIF
; 		ENDIF
; ENDSELECT

RETURN

;==============================

@RANDOM_CHARA_CREAMPIE_EXP_SETTING(ARG:0, LOCAL:1)

EXP:(ARG:0):孕ませ経験 += LOCAL:1

; 関連性強い
LOCAL:2 = (LOCAL:1)*(4+RAND:50)/(1+RAND:4)
EXP:(ARG:0):膣内射精経験 += LOCAL:2
; この辺で経験値よりablアップの方がいいと思いますが、計算方法わかりません
LOCAL:2 = (LOCAL:2)*(2+RAND:10)/(1+RAND:2)
EXP:(ARG:0):射精経験値 += LOCAL:2

LOCAL:3 = (LOCAL:2)*(3+RAND:2)/(2+RAND:2)
EXP:(ARG:0):絶頂経験 += LOCAL:2

LOCAL:3 = (LOCAL:2)*5*(3+RAND:3)/(2+RAND:2)
EXP:(ARG:0):性技経験値 += LOCAL:2
LOCAL:3 = (LOCAL:3)*(3+RAND:3)/(2+RAND:2)
EXP:(ARG:0):性交経験値 += LOCAL:2
LOCAL:3 = (LOCAL:3)*(3+RAND:3)/(2+RAND:2)
EXP:(ARG:0):Ｃ感経験値 += LOCAL:2
LOCAL:3 = (LOCAL:3)*2*(3+RAND:3)/(2+RAND:2)
EXP:(ARG:0):欲望経験値 += LOCAL:2

; なんかとても大きな数値出るので一旦やめよう

; ; 関連性弱い
; SELECTCASE CSTR:(ARG:0):モブ識別子
; 	CASE "犬", "豚", "馬", "猿", "蟲", "ワーグ"
; 		EXP:(ARG:0):輪姦経験 += (LOCAL:1)*(4+RAND:25)/(1+RAND:14)
; 	CASE "ゴブリン", "スキュラ"
; 		EXP:(ARG:0):輪姦経験 += (LOCAL:1)*(4+RAND:25)/(1+RAND:4)
; 		EXP:(ARG:0):嗜虐経験値 += (LOCAL:1)*(4+RAND:25)/(1+RAND:14)
; 	CASE ""
; 		LOCAL:4 = (LOCAL:1)*(4+RAND:20)/(4+RAND:15)
; 		EXP:(ARG:0):キス経験 += LOCAL:3
; 		LOCAL:4 = (LOCAL:4)*3*(3+RAND:3)/(2+RAND:2)
; 		EXP:(ARG:0):Ｍ感経験値 += LOCAL:3
; 	CASEELSE
; ENDSELECT

; 性癖関連wip

; UNVIRGINIZE wip

RETURN


code:
;---------------------------------------------------------
;非特定のモブキャラ呼び名生成
;Quantity(0=less,1=lot);GENDER(0=F/1=M);PART(0=both/1=upper/2=latter)
;---------------------------------------------------------
@GENERATE_RANDOM_MOB_CALLNAME(MOB_TYPE, QUANTITY, GENDER, PART, PRESET_NAME)
#FUNCTIONS
#DIM MOB_TYPE
#DIM QUANTITY
#DIM GENDER
#DIM PART
#DIMS DESCRPTION
#DIMS OCCUPATION
#DIMS PRESET_NAME

SIF PART == 0 || PART == 1
	DESCRPTION = %SPLIT_RAND("臆病な/反抗的な/気丈な/素直な/大人しい/傲慢な/生意気な/卑怯な/ツンデレ/自制的な/関心乏しい/感情乏しい/好奇心旺盛な/保守的な/楽観的な/悲観的な/慎重な/派手好な/貞淑な/貞操無頓着な/抑圧的な/解放的な/孤高の/恥じらう/恥薄い/サボり魔の/両刀の/男嫌いの/女嫌いの/Ｓ気質の/Ｍ気質の")%

SIF PART == 1
	RETURNF DESCRPTION

SELECTCASE MOB_TYPE
		; 受け系
		; ======
		; 村娘レベルの一般人
	CASE 0
		SELECTCASE QUANTITY
			CASE 0
				IF GENDER == 0
					OCCUPATION = %SPLIT_RAND("村娘/里娘/村の女/町娘/庶女/町の女/女商人/女商/商売女")%
				ELSE
					OCCUPATION = %SPLIT_RAND("ならず者/村人/商売人/市民")%
				ENDIF
				; 人数が多いの場合は略称で
			CASE 1
				IF GENDER == 0
					OCCUPATION = %SPLIT_RAND("村娘/商売女/市民")%
				ELSE
					OCCUPATION = %SPLIT_RAND("村人/商売人/市民")%
				ENDIF
		ENDSELECT
		; 特殊職業
	CASE 1
		OCCUPATION = %SPLIT_RAND("ならず者/遊び女/性奴隷/娼婦/踊り子/奴隷/浮浪者/痴女")%
		; 新米冒険者
	CASE 2
		OCCUPATION = %SPLIT_RAND("バード/魔術師/盾兵/戦士/ローグ/剣士/傭兵")%
		; ベテラン
		; CASE 3
		; 	OCCUPATION =
		; 英雄級
		; CASE 5

		; 検討中
		; ; 攻め系
		; ; ======
		; ; 動物系

		; ; 魔物系

		; ; エリート魔物

ENDSELECT

SIF PART == 2
	RETURNF OCCUPATION

LOCALS = %DESCRPTION%%OCCUPATION%

RETURNF LOCALS


code:
;-------------------------------------------------
;データのセーブ
;-------------------------------------------------
@SAVE_GAME()
#DIM FIRST_LINE
#DIM CONST 最大ページ数 = 10
#DIM CONST セーブ数 = 20
#DIM 現在ページ数
#DIM ロード可能, 200
#DIMS セーブ名, 200
#DIM ページ復元済み

IF !ページ復元済み
	現在ページ数 = SAVELOAD_LASTPAGE
	ページ復元済み = 1
ENDIF

IF 現在ページ数 <= 0
	現在ページ数 = 1
ELSEIF 現在ページ数 > 最大ページ数
	現在ページ数 = 最大ページ数
ENDIF

FOR LOCAL, 0, VARSIZE("ロード可能")
	CHKDATA LOCAL
	;CHKDATAは読めるデータのとき0を返す　どうかしてるぜ
	ロード可能:LOCAL = (RESULT == 0)
	IF RESULT != 1
		セーブ名:LOCAL = %RESULTS%
	ELSE
		セーブ名:LOCAL = ----
	ENDIF
NEXT

FIRST_LINE = LINECOUNT

$SHOW_LOOP

CALL SINGLE_DRAWLINE
FOR LOCAL, (現在ページ数 - 1) * セーブ数, 現在ページ数 * セーブ数
	IF ロード可能:LOCAL
		RESETCOLOR
	ELSE
		SETCOLOR カラー_選択不可
	ENDIF
	PRINTFORML [{LOCAL, 3, LEFT}] %セーブ名:LOCAL%
NEXT
RESETCOLOR

CALL SINGLE_DRAWLINE
PRINTBUTTON "[PREV]", 9997
PRINTFORM  Page{現在ページ数}/{最大ページ数}
PRINTBUTTON "[NEXT]", 9998
PRINTL
CALL SINGLE_DRAWLINE
PRINTBUTTON "[BACK]", 9999

INPUT

;セーブ
IF INRANGE(RESULT, 0, VARSIZE("ロード可能") - 1)
	LOCAL = RESULT
	IF ロード可能:LOCAL
		CALL COLOR_PRINTL(@"{LOCAL} already has a save file. Do you want to overwrite?", カラー_注意)
		CALL ASK_YN
		IF RESULT == 1
			CLEARLINE LINECOUNT - FIRST_LINE
			GOTO SHOW_LOOP
		ENDIF
	ENDIF
	DUMPRAND
	CALL CREATE_SAVEDATA_NAME_STR()
	SAVEDATA LOCAL, RESULTS
	PRINTFORML セーブしました
	RETURN 1
ELSEIF RESULT == 9997
	現在ページ数 = ROUND_DECREMENT(現在ページ数, 1, 最大ページ数)
	SAVELOAD_LASTPAGE = 現在ページ数
	SAVEGLOBAL
ELSEIF RESULT == 9998
	現在ページ数 = ROUND_INCREMENT(現在ページ数, 1, 最大ページ数)
	SAVELOAD_LASTPAGE = 現在ページ数
	SAVEGLOBAL
ELSEIF RESULT == 9999
	RETURN 0
ENDIF

CLEARLINE LINECOUNT - FIRST_LINE
GOTO SHOW_LOOP

;-------------------------------------------------
;データのロード
;-------------------------------------------------
@LOAD_GAME()
#DIM FIRST_LINE
#DIM CONST 最大ページ数 = 10
#DIM CONST セーブ数 = 20
#DIM 現在ページ数
#DIM ロード可能, 200
#DIMS セーブ名, 200
#DIM オートセーブロード可能, AUTOSAVE_DOMAIN_NUM
#DIMS オートセーブ名, AUTOSAVE_DOMAIN_NUM
#DIM クイックセーブロード可能
#DIMS クイックセーブ名
#DIM ページ復元済み
LOADGLOBAL

IF !ページ復元済み
	現在ページ数 = SAVELOAD_LASTPAGE
	ページ復元済み = 1
ENDIF

IF 現在ページ数 <= 0
	現在ページ数 = 1
ELSEIF 現在ページ数 > 最大ページ数
	現在ページ数 = 最大ページ数
ENDIF

FOR LOCAL, 0, VARSIZE("ロード可能")
	CHKDATA LOCAL
	;CHKDATAは読めるデータのとき0を返す　どうかしてるぜ
	ロード可能:LOCAL = (RESULT == 0)
	IF RESULT != 1
		セーブ名:LOCAL = %RESULTS%
	ELSE
		セーブ名:LOCAL = ----
	ENDIF
NEXT

FOR LOCAL, 0, AUTOSAVE_DOMAIN_NUM
	CHKDATA 1000 + LOCAL
	オートセーブロード可能:LOCAL = (RESULT == 0)
	IF RESULT != 1
		オートセーブ名:LOCAL = %RESULTS%
	ELSE
		オートセーブ名:LOCAL = ----
	ENDIF
NEXT

CHKDATA 9999
クイックセーブロード可能 = (RESULT == 0)
IF RESULT != 1
	クイックセーブ名 = %RESULTS%
ELSE
	クイックセーブ名 = ----
ENDIF

FIRST_LINE = LINECOUNT

$SHOW_LOOP

CALL SINGLE_DRAWLINE
FOR LOCAL, (現在ページ数 - 1) * セーブ数, 現在ページ数 * セーブ数
	IF ロード可能:LOCAL
		RESETCOLOR
	ELSE
		SETCOLOR カラー_選択不可
	ENDIF
	CALL PRINTBUTTON_EXL(@"[{LOCAL, 3, LEFT}] %セーブ名:LOCAL%", LOCAL, ロード可能:LOCAL)
NEXT
RESETCOLOR

CALL COLOR_LINE
LOCAL = ROUND_DECREMENT(AUTOSAVE_DOMAIN, 0, AUTOSAVE_DOMAIN_NUM - 1)
LOCAL:1 = LOCAL
DO
	IF オートセーブロード可能:LOCAL
		RESETCOLOR
	ELSE
		SETCOLOR カラー_選択不可
	ENDIF
	PRINTFORM [{1000 + LOCAL}] %オートセーブ名:LOCAL%
	IF LOCAL == ROUND_DECREMENT(AUTOSAVE_DOMAIN, 0, AUTOSAVE_DOMAIN_NUM - 1)
		CALL COLOR_PRINTL("  Latest", カラー_注意)
	ELSE
		PRINTL
	ENDIF
	RESETCOLOR
	LOCAL = ROUND_DECREMENT(LOCAL, 0, AUTOSAVE_DOMAIN_NUM - 1)
LOOP LOCAL != LOCAL:1

CALL COLOR_LINE
SIF !クイックセーブロード可能
	SETCOLOR カラー_選択不可
CALL PRINTBUTTON_EXL(@"[9999] %クイックセーブ名%", 9999, クイックセーブロード可能)
RESETCOLOR

CALL SINGLE_DRAWLINE
PRINTBUTTON "[NEXT]", 10000
PRINTFORM  Page{現在ページ数}/{最大ページ数}
PRINTBUTTON "[PREV]", 10001
PRINTL
CALL SINGLE_DRAWLINE
PRINTBUTTON "[BACK]", 10002

INPUT

;ロード
IF INRANGE(RESULT, 0, VARSIZE("ロード可能") - 1)
	LOCAL = RESULT
	IF !ロード可能:LOCAL
		CLEARLINE LINECOUNT - FIRST_LINE
		GOTO SHOW_LOOP
	ENDIF
	CALL LOAD_SAVEDATA(LOCAL)
ELSEIF INRANGE(RESULT, 1000, 1000 + AUTOSAVE_DOMAIN_NUM - 1)
	LOCAL = RESULT
	IF !オートセーブロード可能:(LOCAL - 1000)
		CLEARLINE LINECOUNT - FIRST_LINE
		GOTO SHOW_LOOP
	ENDIF
	CALL LOAD_SAVEDATA(LOCAL)
ELSEIF RESULT == 9999 && クイックセーブロード可能
	CALL LOAD_SAVEDATA(9999)
ELSEIF RESULT == 10000
	現在ページ数 = ROUND_DECREMENT(現在ページ数, 1, 最大ページ数)
	SAVELOAD_LASTPAGE = 現在ページ数
	SAVEGLOBAL
ELSEIF RESULT == 10001
	現在ページ数 = ROUND_INCREMENT(現在ページ数, 1, 最大ページ数)
	SAVELOAD_LASTPAGE = 現在ページ数
	SAVEGLOBAL
ELSEIF RESULT == 10002
	RETURN 0
ENDIF

CLEARLINE LINECOUNT - FIRST_LINE
GOTO SHOW_LOOP

;-------------------------------------------------
;セーブデータ用の文字列用意
;-------------------------------------------------
@CREATE_SAVEDATA_NAME_STR()
#DIMS データ名

データ名 = %GETTIMES()%

IF FLAG:クリア直後フラグ
	データ名 = %データ名% 引継ぎ
ENDIF
データ名 = %データ名% ???: {CALC_SHOP_TIME() - SHOP_TIME}

データ名 += @" %TAG_PRINT_SHAPE(@"Day: {DAY}", 10, 1)%"

データ名 = %データ名% %SNAME(MASTER), MAX_CHARANAME_LENGTH / 2, LEFT%

IF TIME == 0
	TRYCCALLFORM SHOP_LIFE_NAME{FLAG:最後に実行したコマンド}
		データ名 = %データ名% Last action:%RESULTS%
	CATCH
	ENDCATCH
ENDIF
RESULTS = %データ名%

;-------------------------------------------------
;オートセーブ時の処理
;-------------------------------------------------
@FL_SYSTEM_AUTOSAVE
DUMPRAND
CALL CREATE_SAVEDATA_NAME_STR()
SAVEDATA 1000 + AUTOSAVE_DOMAIN, "AUTO " + RESULTS
AUTOSAVE_DOMAIN = ROUND_INCREMENT(AUTOSAVE_DOMAIN, 0, AUTOSAVE_DOMAIN_NUM - 1)
SAVEGLOBAL

;-------------------------------------------------
;クイックセーブ時の処理
;-------------------------------------------------
@QUICK_SAVE
DUMPRAND
CALL CREATE_SAVEDATA_NAME_STR
SAVEDATA 9999, "QUICK " + RESULTS
SAVEGLOBAL

@QUICK_LOAD
CALL LOAD_SAVEDATA(9999)

;-------------------------------------------------
;ロード直前の処理
;-------------------------------------------------
@LOAD_SAVEDATA(SAVE_SLOT)
#DIM SAVE_SLOT

CALL FL_STOPBGM()
CALL DATATABLE_RELEASE()

LOADDATA SAVE_SLOT

;-------------------------------------------------
;ロード時の処理(※複数定義可能)
;-------------------------------------------------
@EVENTLOAD
CLEARLINE 99
;ロード時の初期化処理
CALL INIT_COMMON

IF FLAG:クリア直後フラグ
	FLAG:クリア直後フラグ = 0
	CALL PASS_SETTING
	CALL NEWLOOP(1)
ENDIF

;-------------------------------------------------
;クリアデータをロードしたときの引継ぎ処理
;-------------------------------------------------
@PASS_SETTING
#DIM LCOUNT, 2
#DIM FIRST_LINE
#DIM MONEY保存
#DIM ITEMSALES保存, VARSIZE("ITEMSALES")
#DIM ITEM保存, VARSIZE("ITEM")
VARSET LOCAL, 0

;出産後のキャラがいる場合、状態をリセット
FOR LOCAL:0, 0, CHARANUM
	IF CFLAG:(LOCAL:0):育児期間 >= 1
		;出産後の各種初期化処理
		CALL RESET_MOTHER_STATE(LOCAL:0, 0)
	ENDIF
NEXT

;キャラの情報を一部リセット
FOR LOCAL:0, 0, CHARANUM
	CFLAG:(LOCAL:0):所属 = 0
	CFLAG:(LOCAL:0):捕虜先 = 0
	CFLAG:(LOCAL:0):捕虜の扱い = 0
	CFLAG:(LOCAL:0):特殊状態 = 0
	CFLAG:(LOCAL:0):軟禁中 = 0
	CFLAG:(LOCAL:0):外交要求成功フラグ = 0
	CFLAG:(LOCAL:0):外交調教カウンタ = 0
	SIF !GETBIT(TALENT:(LOCAL:0):淫乱系, 素質_淫乱_薬物中毒)
		CFLAG:(LOCAL:0):薬物依存 = 0
	TALENT:(LOCAL:0):虚ろ = 0
	TALENT:(LOCAL:0):崩壊 = 0
	PALAM:(LOCAL:0):怒主 = 0
	PALAM:(LOCAL:0):怒外 = 0
	PALAM:(LOCAL:0):哀主 = 0
	PALAM:(LOCAL:0):哀外 = 0
	PALAM:(LOCAL:0):怖主 = 0
	PALAM:(LOCAL:0):怖外 = 0
	CFLAG:(LOCAL:0):崩壊 = 0
	TALENT:(LOCAL:0):デイリー系 = 0
	CFLAG:LOCAL:行動済み = 0
	COOLTIME:LOCAL:0 = 0
	BASE:(LOCAL:0):精神力 = MAXBASE:(LOCAL:0):精神力
NEXT

;キャラ間の好感度・敵対度のクリア
FOR LOCAL:0, 0, CHARANUM
	FOR LOCAL:1, 0, VARSIZE("REL_LIKE")
		REL_LIKE:(LOCAL:0):(LOCAL:1) = 0
		REL_HATE:(LOCAL:0):(LOCAL:1) = 0
	NEXT
NEXT

;特殊キャラの削除　ただし主人公だったら削除しない（引継ぎ後に問題になるので）
FOR LOCAL:0, CHARANUM - 1, -1, -1
	IF IS_SP_CHARA(LOCAL) && LOCAL != MASTER
		CALL DELETE_CHARA(LOCAL:0)
	ENDIF
NEXT

CALL SINGLE_DRAWLINE
PRINTL 引継ぎ用データをロードしました
PRINTL 新たに幻想郷に嵐を巻き起こすことができます

CALL CONFIG_SAVE_EXIST_CHARA()

CALL PASS_RANDOM_CHARA

CALL PASS_CHARA_CHARASELECT()
FOR LOCAL, 0, CHARANUM
	SIF LOCAL != NAME_TO_CHARA("あなた")
		CALL PASS_CHARA(LOCAL)
NEXT
CALL SINGLE_DRAWLINE
PRINTFORMW キャラの引き継ぎ処理が終了しました

PRINTL アイテム/資金引継ぎの設定を行います
PRINTL アイテム/資金を引き継ぎますか？
PRINTL 資金は1/10、最大でも1000000になります

;保存しておく
MONEY保存 = MONEY
ARRAYCOPY "ITEMSALES", "ITEMSALES保存"
ARRAYCOPY "ITEM", "ITEM保存"

CALL ASK_YN()

IF RESULT == 1
	;初期化
	MONEY = 0
	VARSET ITEMSALES, 1, 0, 200
	VARSET ITEMSALES, 0, 200, 300
	VARSET ITEM, 0
	REDRAW 1
ENDIF

MONEY = MIN(MONEY / 10, 1000000)

ITEMSALES:太平要術の書 = 1
ITEM:太平要術の書 = 0

IF ID_TO_CHARA(FLAG:お気に入り指定キャラ) != -1
	PRINTFORML キャラのお気に入り指定を初期化しますか？
	CALL ASK_YN
	SIF RESULT == 0
		FLAG:お気に入り指定キャラ = 0
ENDIF

CALL SINGLE_DRAWLINE

;-------------------------------------------------
;ランダム・子供キャラの引継ぎ設定
;LOCAL地獄のRetardedコードだったのでリファクタ。
;-------------------------------------------------
@PASS_RANDOM_CHARA
#DIM 頭数
#DIM 対象
#DIM 選択キャラID, 10
;ランダムキャラの人数をカウント
頭数 = 0
FOR LOCAL:0, 1, CHARANUM
	SIF (TALENT:対象:カスタムキャラ || IS_RANDOM_CHARA(LOCAL) || IS_CHILD(LOCAL)) && LOCAL:0 != MASTER
		頭数 ++
NEXT

SIF 頭数 <= 0
	RETURN

;ランダムキャラが存在する場合
CALL SINGLE_DRAWLINE
PRINTFORML ランダムキャラ、子供、およびカスタムキャラを10人まで引き継ぐことができます
PRINTFORML 引き継ぐキャラを選択して下さい
CALL SINGLE_DRAWLINE
CALL SELECT_CHARA_LIST_MULTI_ONLY_LOGIC_SLG(VARSIZE("選択キャラID"), "PASS_RANDOM_CHARA", "NONE")

VARSET 選択キャラID

;選択キャラのリストをIDに変更、選択されたキャラの数をカウント
FOR LOCAL, 0, SELECTED_CHARA_NUM
	選択キャラID:LOCAL = GET_ID(SELECTED_CHARA:LOCAL)
NEXT

;選択されていないランダムキャラの削除
頭数 = CHARANUM

FOR LOCAL:0, 0, 頭数
	対象 = 頭数 - LOCAL:0 - 1
	SIF IS_UNIQUE_CHARA(対象) || 対象 == MASTER
		CONTINUE
	IF FINDELEMENT(選択キャラID, GET_ID(対象)) >= 0
		CFLAG:対象:引き継ぎキャラ = 1
		CONTINUE
	ENDIF
	CALL DELETE_CHARA(対象)
NEXT

@SELECT_CHARA_LIST_SHOW_LOGIC_PASS_RANDOM_CHARA(対象)
#DIM 対象
RETURN 対象 != MASTER && (IS_CHILD(対象) || IS_RANDOM_CHARA(対象) || TALENT:対象:カスタムキャラ)

;-------------------------------------------------
;desc  :SLG以外のコンフィグのセーブ
;param :番号:コンフィグ配列のインデックス
;-------------------------------------------------
@CONFIG_SAVE_EXCEPT_SLG(番号)
#DIM 番号
FOR LOCAL:0, 0, 1000
	LOCAL:2 = LOCAL:0 / 50
	LOCAL:3 = LOCAL:0 % 50
	LOCAL:4 = LOCAL:0 / 5

	;ＳＬＧパートに関する設定(CONFIG:300からCONFIG:319)を除外
	SIF !(300 <= LOCAL:0 && LOCAL:0 <= 319)
		G_CONFIG:番号:(LOCAL:0) = CONFIG:(LOCAL:0)

NEXT
VARI I
FOR  I, 0, FLCONFIG_SIZE
	G_FLCONFIG:番号:I = FLCONFIG:I
NEXT

;グローバル変数を保存
SAVEGLOBAL
RETURN

;-------------------------------------------------
;desc  :SLG関連のコンフィグのセーブ
;param :番号:コンフィグ配列のインデックス
;-------------------------------------------------
@CONFIG_SAVE_SLG(番号)
#DIM 番号

FOR LOCAL:0, 300, 320
	G_CONFIG:番号:(LOCAL:0) = CONFIG:(LOCAL:0)
NEXT

;グローバル変数を保存
SAVEGLOBAL
RETURN

;-------------------------------------------------
;desc  :SLG関連以外のコンフィグのロード
;param :番号:コンフィグ配列のインデックス
;-------------------------------------------------
@CONFIG_LOAD_EXCEPT_SLG(番号)
#DIM 番号
FOR LOCAL:0, 0, 1000
	LOCAL:2 = LOCAL:0 / 50
	LOCAL:3 = LOCAL:0 % 50
	LOCAL:4 = LOCAL:0 / 5

	;ＳＬＧパートに関する設定(CONFIG:300からCONFIG:319)を除外
	SIF !(300 <= LOCAL:0 && LOCAL:0 <= 319)
		CONFIG:(LOCAL:0) = G_CONFIG:番号:(LOCAL:0)
NEXT
VARI I
FOR  I, 0, FLCONFIG_SIZE
	FLCONFIG:I = G_FLCONFIG:番号:I
NEXT

RETURN

;-------------------------------------------------
;desc  :SLG関連のコンフィグのロード
;param :番号:コンフィグ配列のインデックス
;-------------------------------------------------
@CONFIG_LOAD_SLG(番号)
#DIM 番号
FOR LOCAL, 300, 320
	CONFIG:(LOCAL:0) = G_CONFIG:番号:(LOCAL:0)

NEXT

;-------------------------------------------------
;DESC  :デイリー・口上デイリーのコンフィグのセーブ
;ARG   ::
;-------------------------------------------------
@CONFIG_SAVE_DAILY(番号)
#DIM 番号

FOR LOCAL:0, 0, VARSIZE("DAILY_DISABLE")
	G_DAILY_DISABLE:番号:(LOCAL:0) = DAILY_DISABLE:(LOCAL:0)
	G_DAILY_DISABLE_NAME:番号:(LOCAL:0) = %DAILY_DISABLE_NAME:(LOCAL:0)%
NEXT

FOR LOCAL:0, 0, VARSIZE("KOJO_DAILY_DISABLE", 0)
	FOR LOCAL:1, 0, VARSIZE("KOJO_DAILY_DISABLE", 1)
		G_KOJO_DAILY_DISABLE:番号:(LOCAL:0):(LOCAL:1)          = KOJO_DAILY_DISABLE:(LOCAL:0):(LOCAL:1)
		G_KOJO_DAILY_DISABLE_NAME:番号:(LOCAL:0):(LOCAL:1)    '= KOJO_DAILY_DISABLE_NAME:(LOCAL:0):(LOCAL:1)
	NEXT
NEXT

G_DAILY_EVENT_COUNT:番号 = DAILY_EVENT_COUNT
G_KOJO_DAILY_EVENT_ODDS:番号 = KOJO_DAILY_EVENT_ODDS
G_KOJO_DAILY_EVENT_COUNT:番号 = KOJO_DAILY_EVENT_COUNT
G_DAILY_EVENT_ODDS:番号 = DAILY_EVENT_ODDS

;グローバル変数を保存
SAVEGLOBAL
RETURN

;-------------------------------------------------
;DESC  :デイリー・口上デイリーのコンフィグのロード
;ARG   ::
;-------------------------------------------------
@CONFIG_LOAD_DAILY(番号)
#DIM 番号

FOR LOCAL:0, 0, VARSIZE("DAILY_DISABLE")
	DAILY_DISABLE:(LOCAL:0) = G_DAILY_DISABLE:番号:(LOCAL:0)
	DAILY_DISABLE_NAME:LOCAL = %G_DAILY_DISABLE_NAME:番号:(LOCAL:0)%
NEXT

FOR LOCAL:0, 0, VARSIZE("KOJO_DAILY_DISABLE", 0)
	FOR LOCAL:1, 0, VARSIZE("KOJO_DAILY_DISABLE", 1)
		KOJO_DAILY_DISABLE:(LOCAL:0):(LOCAL:1)           = G_KOJO_DAILY_DISABLE:番号:(LOCAL:0):(LOCAL:1)
		KOJO_DAILY_DISABLE_NAME:(LOCAL:0):(LOCAL:1)     '= G_KOJO_DAILY_DISABLE_NAME:番号:(LOCAL:0):(LOCAL:1)
	NEXT
NEXT

DAILY_EVENT_COUNT =      G_DAILY_EVENT_COUNT:番号
KOJO_DAILY_EVENT_ODDS =  G_KOJO_DAILY_EVENT_ODDS:番号
KOJO_DAILY_EVENT_COUNT = G_KOJO_DAILY_EVENT_COUNT:番号
DAILY_EVENT_ODDS =       G_DAILY_EVENT_ODDS:番号

;古いバージョン→新しいバージョンでコンフィグを読んだ場合、新しいバージョンでデイリーが追加されていると、DISABLE_NAMEが上書きされて該当デイリーの割り当てが吹き飛ぶため死ぬ
;なので一旦再生成してやる必要がある
VARSET DAILY_EVENT_NUM
VARSET KOJO_DAILY_EVENT_NUM
CALL CREATE_DAILY_MAP
CALL CREATE_KOJO_DAILY_MAP


code:
;-------------------------------------------------
;desc  :キャラリストを表示する関数
;param :表示関数名:キャラクタをリストに表示するかを判定する関数の名前 SELECT_CHARA_LIST_SHOW_LOGIC_●●(ARG:0)の●●の部分
;param :選択関数名:キャラクタをリストで選択できるようにするかを判定する関数の名前 SELECT_CHARA_LIST_SHOW_LOGIC_●●(ARG:0)の●●の部分
;param :色指定関数名:キャラクタが選択できる場合、リストでどんな色でできるようにするかを判定する関数の名前 SELECT_CHARA_LIST_COLOR_LOGIC_●●(ARG:0)の●●の部分
;param :表示文字:各カラムの要素 ABLの名前
;-------------------------------------------------
@SELECT_CHARA_LIST(表示関数名 = "", 選択関数名="", 色指定関数名="", 表示文字:0 = "", 表示文字:1 = "", 表示文字:2 = "", 表示文字:3 = "", 表示文字:4 = "", 表示文字:5 = "", 表示文字:6 = "", 表示文字:7 = "")
#DIMS 表示関数名
#DIMS 選択関数名
#DIMS 色指定関数名
#DIMS 表示文字, 8
#DIM 表示数値, 8
#DIM FIRST_LINE
#DIM 対象
#DIM 表示位置
#DIM 表示ページ
#DIM 総ページ数
#DIM キャラ数
#DIM キャラカウンタ
#DIM 表示開始位置
#DIM 表示終了位置
#DIM ランク種別
#DIM 直前総ページ数
#DIMS 直前表示関数名
#DIMS 直前選択関数名

VARSET キャラ数
VARSET 表示数値, -1

;ガード節
TRYCCALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(MASTER)
CATCH
	THROW 指定された関数SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%が存在しません
ENDCATCH

TRYCCALLFORM SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%(MASTER)
CATCH
	THROW 指定された関数SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%が存在しません
ENDCATCH

TRYCCALLFORM SELECT_CHARA_LIST_COLOR_LOGIC_%色指定関数名%(MASTER)
CATCH
	THROW 指定された関数SELECT_CHARA_LIST_COLOR_LOGIC_%色指定関数名%が存在しません
ENDCATCH

;一行目を用意
FOR LOCAL, 0, VARSIZE("表示文字")
	FOR LOCAL:1, 0, VARSIZE("ABL")
		SIF ABLNAME:(LOCAL:1) == ""
			CONTINUE
		IF 表示文字:LOCAL == ABLNAME:(LOCAL:1)
			表示文字:LOCAL = %TOSTR_SPACE(2)%%SUBSTRINGU(ABLNAME:(LOCAL:1), 0, 1)%\@ LOCAL == VARSIZE("表示文字") - 1 ?   # | \@
			表示数値:LOCAL = LOCAL:1
			BREAK
		ENDIF
	NEXT
	SIF LOCAL:1 == VARSIZE("ABL")
		表示文字:LOCAL = %TOSTR_SPACE(5)%
NEXT

;ページ数計算
FOR LOCAL, 0, CHARANUM
	CALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(LOCAL)
	SIF RESULT
		キャラ数 ++
NEXT

総ページ数 = (キャラ数 - 1) / 40 + 1

;直前の呼び出しとページ数、表示する関数、選択する関数名が同一であれば連続した呼び出しと判断しページを切り替えない
SIF 総ページ数 != 直前総ページ数 || 表示関数名 != 直前表示関数名 || 選択関数名 != 直前選択関数名
	表示ページ = 1

直前総ページ数  = 総ページ数
直前表示関数名 '= 表示関数名
直前選択関数名 '= 選択関数名

;ヘッダ表示
PRINTFORM %TOSTR_SPACE(MAX_CHARANAME_LENGTH / 2 + 7)%
FOR LOCAL:1, 0, VARSIZE("表示文字")
	PRINTFORM %表示文字:(LOCAL:1)%
NEXT
PRINTFORM %TOSTR_SPACE(MAX_CHARANAME_LENGTH / 2 + 12)%
FOR LOCAL:1, 0, VARSIZE("表示文字")
	PRINTFORM %表示文字:(LOCAL:1)%
NEXT

PRINTL
FIRST_LINE = LINECOUNT

CALL CREATE_SELECTOR_SORT_LIST(0)

;本体部分の表示
$SHOW_LOOP

VARSET 表示位置
VARSET キャラカウンタ

表示開始位置 = (表示ページ - 1) * 40
表示終了位置 = 表示ページ * 40

FOR LOCAL:0, 0, CHARANUM
	LOCAL:1 = SHOP_CHARA_LIST:LOCAL
	SIF LOCAL:1 == -1
		CONTINUE
	;表示ロジックにあてはまらないなら飛ばす
	CALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(LOCAL:1)
	SIF !RESULT
		CONTINUE
	IF 表示開始位置 <= キャラカウンタ && キャラカウンタ < 表示終了位置
		IF 表示位置 % 2 != 0
			PRINT
		ELSEIF 表示位置 > 0
			PRINTL
		ENDIF
		;選択ロジックに当てはまるキャラだけ通常表示
		;あてはまらなければ灰色表示
		CALLFORM SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%(LOCAL:1)
		IF RESULT
			CALLFORM SELECT_CHARA_LIST_COLOR_LOGIC_%色指定関数名%(LOCAL:1)
			CALL COLOR_PRINT(@"[{LOCAL:1 + 99, 4}]%SNAME(LOCAL:1), MAX_CHARANAME_LENGTH/2, RIGHT%", RESULT)
			PRINTFORM %TOSTR_SPACE(1)%
			FOR LOCAL:2, 0, VARSIZE("表示数値")
				IF 表示数値:(LOCAL:2) != -1
					SELECTCASE 表示数値:(LOCAL:2)
						CASE GETNUM(ABL, "戦闘"), GETNUM(ABL, "身体"), GETNUM(ABL, "器用"), GETNUM(ABL, "知識"), GETNUM(ABL, "社交"), GETNUM(ABL, "魔術"), GETNUM(ABL, "料理"), GETNUM(ABL, "歌唱")
							ランク種別 = ランク_ＳＬＧ
						CASE GETNUM(ABL, "性知識")
							ランク種別 = ランク_性知識
						CASEELSE
							ランク種別 = ランク_その他
					ENDSELECT
					CALL PRINT_ALPHABET_RANK(ランク種別, ABL:(LOCAL:1):(表示数値:(LOCAL:2)))
					PRINTFORM {ABL:(LOCAL:1):(表示数値:(LOCAL:2)), 3}
					SIF LOCAL:2 != VARSIZE("表示数値") -1
						PRINT |
				ELSE
					PRINTFORM %TOSTR_SPACE(5)%
				ENDIF
			NEXT
			PRINTBUTTON " 情", LOCAL:1 + 10099
		ELSE
			LOCALS:0 = [{NO:(LOCAL:1) + 99, 4}]%SNAME(LOCAL:1), MAX_CHARANAME_LENGTH/2, RIGHT%%TOSTR_SPACE(1)%
			FOR LOCAL:2, 0, VARSIZE("表示数値")
				IF 表示数値:(LOCAL:2) != -1
					SELECTCASE 表示数値:(LOCAL:2)
						CASE GETNUM(ABL, "戦闘"), GETNUM(ABL, "身体"), GETNUM(ABL, "器用"), GETNUM(ABL, "知識"), GETNUM(ABL, "社交"), GETNUM(ABL, "魔術"), GETNUM(ABL, "料理"), GETNUM(ABL, "歌唱")
							ランク種別 = ランク_ＳＬＧ
						CASE GETNUM(ABL, "性知識")
							ランク種別 = ランク_性知識
						CASEELSE
							ランク種別 = ランク_その他
					ENDSELECT
					LOCALS:0 = %LOCALS:0%%ALPHABET_RANK(ランク種別, ABL:(LOCAL:1):(表示数値:(LOCAL:2)))%{ABL:(LOCAL:1):(表示数値:(LOCAL:2)), 3}
					SIF LOCAL:2 != VARSIZE("表示数値") -1
						LOCALS:0 = %LOCALS:0%|
				ELSE
					LOCALS:0 = %LOCALS:0%%TOSTR_SPACE(5)%
				ENDIF
			NEXT
			SETCOLOR カラー_選択不可
			PRINTPLAINFORM %LOCALS:0%
			PRINTPLAINFORM
			RESETCOLOR
		ENDIF
		表示位置 ++
	ENDIF
	キャラカウンタ ++
NEXT

PRINTL
CALL COLOR_LINE

;フッタ部分
IF 総ページ数 >= 2
	PRINT [  1] 最初のページ
	PRINT [  2] NEXT
	PRINTPLAINFORM ページ{表示ページ}/{総ページ数}
	PRINT [  8] 後のページ
	PRINT [  9] 最後のページ
	PRINTL
	CALL COLOR_LINE
ENDIF
PRINTBUTTON "<<", 20000
PRINT
PRINTBUTTON @"[%STR_NOW_SORTKEY:ソートキー, 4, LEFT%]", 20001
PRINT
PRINTBUTTON ">>", 20002
PRINT
PRINTBUTTON @"[\@ 降順ソート ? 降順 # 昇順\@]", 20003
PRINTL
CALL SINGLE_DRAWLINE
PRINTL [  0] やっぱりやめる

REDRAW 0

$INPUT_LOOP
INPUT
IF RESULT == 1
	表示ページ = 1
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 2
	表示ページ = ROUND_DECREMENT(表示ページ, 1, 総ページ数)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 8
	表示ページ = ROUND_INCREMENT(表示ページ, 1, 総ページ数)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 9
	表示ページ = 総ページ数
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 0
	REDRAW 1
	RETURN -1
ELSEIF RESULT == 20000
	ソートキー = ROUND_DECREMENT(ソートキー, 0, NUM_SORTKEY - 1)
	CALL CREATE_SELECTOR_SORT_LIST(0)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 20001
	CALL SINGLE_DRAWLINE
	FOR LOCAL, 0, NUM_SORTKEY
		PRINTFORML [{LOCAL}] %STR_NOW_SORTKEY:LOCAL%
	NEXT
	INPUT
	SIF INRANGE(RESULT, 0, NUM_SORTKEY - 1)
		ソートキー = RESULT
	CALL CREATE_SELECTOR_SORT_LIST(0)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 20002
	ソートキー = ROUND_INCREMENT(ソートキー, 0, NUM_SORTKEY - 1)
	CALL CREATE_SELECTOR_SORT_LIST(0)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 20003
	降順ソート = !降順ソート
	CALL CREATE_SELECTOR_SORT_LIST(0)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ENDIF

;ガード節・特殊ボタン
IF RESULT >= 10099
	対象 = RESULT - 10099
	IF 対象 > CHARANUM || 対象 < 0
		CLEARLINE 1
		GOTO INPUT_LOOP
	ENDIF
	CALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(対象)
	IF !RESULT
		CLEARLINE 1
		GOTO INPUT_LOOP
	ENDIF
	CALLFORM SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%(対象)
	IF !RESULT
		CLEARLINE 1
		GOTO INPUT_LOOP
	ENDIF
	FOR LOCAL, 0, CHARANUM
		SIF SHOP_CHARA_LIST:LOCAL == -1
			CONTINUE
		CALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(SHOP_CHARA_LIST:LOCAL)
		SIF RESULT
			CALLFORM SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%(SHOP_CHARA_LIST:LOCAL)
		SIF RESULT
			CONTINUE
		SHOP_CHARA_LIST:LOCAL = -1
	NEXT
	CALL SHOW_INFO_WITH_UI(対象, 1)
	CALL CREATE_SELECTOR_SORT_LIST(0)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ENDIF

;入力本体
対象 = RESULT - 99
IF 対象 > CHARANUM || 対象 < 0
	CLEARLINE 1
	GOTO INPUT_LOOP
ENDIF
CALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(対象)
IF !RESULT
	CLEARLINE 1
	GOTO INPUT_LOOP
ENDIF
CALLFORM SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%(対象)
IF !RESULT
	CLEARLINE 1
	GOTO INPUT_LOOP
ENDIF
RETURN 対象

;-------------------------------------------------
;キャラリスト表示　大まかな使い方はSELECT_CHARA_LISTと同様
;人数に-1を指定すれば無制限になる
;選択したキャラはSELECTED_CHARAに代入
;選択した人数はSELECTED_CHARA_NUMに代入
;-------------------------------------------------
@SELECT_CHARA_LIST_MULTI(人数, 表示関数名="", 選択関数名 = "", 色指定関数名 = "", 表示文字:0 = "", 表示文字:1 = "", 表示文字:2 = "", 表示文字:3 = "", 表示文字:4 = "", 表示文字:5 = "", 表示文字:6 = "", 表示文字:7 = "")
#DIMS 表示関数名
#DIMS 選択関数名
#DIMS 色指定関数名
#DIMS 表示文字, 8
#DIM 表示数値, 8
#DIM FIRST_LINE
#DIM 対象
#DIM 表示位置
#DIM 表示ページ
#DIM 総ページ数
#DIM キャラ数
#DIM キャラカウンタ
#DIM 選択フラグ, VARSIZE("SELECTED_CHARA")
#DIM 人数
#DIM 表示開始位置
#DIM 表示終了位置
#DIM ランク種別
#DIM 直前総ページ数
#DIMS 直前選択関数名
#DIMS 直前表示関数名
VARSET 選択フラグ
VARSET キャラ数
VARSET 表示数値, -1

; VARSET SELECTED_CHARA
ARRAYCOPY "SELECTED_CHARA", "選択フラグ"
VARSET SELECTED_CHARA_NUM

;ガード節
TRYCCALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(MASTER)
CATCH
	THROW 指定された関数SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%が存在しません
ENDCATCH

TRYCCALLFORM SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%(MASTER)
CATCH
	THROW 指定された関数SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%が存在しません
ENDCATCH

;ヘッダ用意
FOR LOCAL, 0, VARSIZE("表示文字")
	FOR LOCAL:1, 0, VARSIZE("ABL")
		SIF ABLNAME:(LOCAL:1) == ""
			CONTINUE
		IF 表示文字:LOCAL == ABLNAME:(LOCAL:1)
			表示文字:LOCAL = %TOSTR_SPACE(2)%%SUBSTRINGU(ABLNAME:(LOCAL:1), 0, 1)%\@ LOCAL == VARSIZE("表示文字") - 1 ?   # | \@
			表示数値:LOCAL = LOCAL:1
			BREAK
		ENDIF
	NEXT
	SIF LOCAL:1 == VARSIZE("ABL")
		表示文字:LOCAL = %TOSTR_SPACE(5)%
NEXT

;ページ数計算
FOR LOCAL, 0, CHARANUM
	CALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(LOCAL)
	SIF RESULT
		キャラ数 ++
NEXT

総ページ数 = (キャラ数 - 1) / 40 + 1

;直前の呼び出しとページ数、表示する関数、選択する関数名が同一であれば連続した呼び出しと判断しページを切り替えない
SIF 総ページ数 != 直前総ページ数 || 表示関数名 != 直前表示関数名 || 選択関数名 != 直前選択関数名
	表示ページ = 1

直前総ページ数  = 総ページ数
直前表示関数名 '= 表示関数名
直前選択関数名 '= 選択関数名

;ヘッダ描画
PRINTFORM %TOSTR_SPACE(19)%
FOR LOCAL:1, 0, VARSIZE("表示文字")
	PRINTFORM %表示文字:(LOCAL:1)%
NEXT
PRINTFORM %TOSTR_SPACE(24)%
FOR LOCAL:1, 0, VARSIZE("表示文字")
	PRINTFORM %表示文字:(LOCAL:1)%
NEXT

;ここから本体
PRINTL
FIRST_LINE = LINECOUNT

CALL CREATE_SELECTOR_SORT_LIST(0)

$SHOW_LOOP

VARSET 表示位置
VARSET キャラカウンタ
表示開始位置 = (表示ページ - 1) * 40
表示終了位置 = 表示ページ * 40

FOR LOCAL:0, 0, CHARANUM
	LOCAL:1 = SHOP_CHARA_LIST:LOCAL
	SIF LOCAL:1 == -1
		CONTINUE
	CALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(LOCAL:1)
	SIF !RESULT
		CONTINUE
	IF 表示開始位置 <= キャラカウンタ && キャラカウンタ < 表示終了位置
		IF 表示位置 % 2 != 0
			PRINT
		ELSEIF 表示位置 > 0
			PRINTL
		ENDIF
		CALLFORM SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%(LOCAL:1)
		IF RESULT
			IF 選択フラグ:(LOCAL:1)
				SETCOLOR カラー_選択中
			ELSE
				CALLFORM SELECT_CHARA_LIST_COLOR_LOGIC_%色指定関数名%(LOCAL:1)
				SETCOLOR RESULT
			ENDIF
			PRINTFORM [{LOCAL:1 + 99, 4}]%SNAME(LOCAL:1), MAX_CHARANAME_LENGTH/2, RIGHT%
			RESETCOLOR
			PRINTFORM %TOSTR_SPACE(1)%
			FOR LOCAL:2, 0, VARSIZE("表示数値")
				IF 表示数値:(LOCAL:2) != -1
					SELECTCASE 表示数値:(LOCAL:2)
						CASE GETNUM(ABL, "戦闘"), GETNUM(ABL, "身体"), GETNUM(ABL, "器用"), GETNUM(ABL, "知識"), GETNUM(ABL, "社交"), GETNUM(ABL, "魔術"), GETNUM(ABL, "料理"), GETNUM(ABL, "歌唱")
							ランク種別 = ランク_ＳＬＧ
						CASE GETNUM(ABL, "性知識")
							ランク種別 = ランク_性知識
						CASEELSE
							ランク種別 = ランク_その他
					ENDSELECT
					CALL PRINT_ALPHABET_RANK(ランク種別, ABL:(LOCAL:1):(表示数値:(LOCAL:2)))
					PRINTFORM {ABL:(LOCAL:1):(表示数値:(LOCAL:2)), 3}
					SIF LOCAL:2 != VARSIZE("表示数値") -1
						PRINT |
				ELSE
					PRINTFORM %TOSTR_SPACE(5)%
				ENDIF
			NEXT
			PRINTBUTTON " 情", LOCAL:1 + 10099
		ELSE
			LOCALS:0 = [{NO:(LOCAL:1) + 99, 4}]%SNAME(LOCAL:1), MAX_CHARANAME_LENGTH/2, RIGHT%%TOSTR_SPACE(1)%
			FOR LOCAL:2, 0, VARSIZE("表示数値")
				IF 表示数値:(LOCAL:2) != -1
					SELECTCASE 表示数値:(LOCAL:2)
						CASE GETNUM(ABL, "戦闘"), GETNUM(ABL, "身体"), GETNUM(ABL, "器用"), GETNUM(ABL, "知識"), GETNUM(ABL, "社交"), GETNUM(ABL, "魔術"), GETNUM(ABL, "料理"), GETNUM(ABL, "歌唱")
							ランク種別 = ランク_ＳＬＧ
						CASE GETNUM(ABL, "性知識")
							ランク種別 = ランク_性知識
						CASEELSE
							ランク種別 = ランク_その他
					ENDSELECT
					LOCALS:0 = %LOCALS:0%%ALPHABET_RANK(ランク種別, ABL:(LOCAL:1):(表示数値:(LOCAL:2)))%{ABL:(LOCAL:1):(表示数値:(LOCAL:2)), 3}
					SIF LOCAL:2 != VARSIZE("表示数値") -1
						LOCALS:0 = %LOCALS:0%|
				ELSE
					LOCALS:0 = %LOCALS:0%%TOSTR_SPACE(5)%
				ENDIF
			NEXT
			SETCOLOR カラー_選択不可
			PRINTPLAINFORM %LOCALS:0%
			PRINTPLAINFORM
			RESETCOLOR
		ENDIF
		表示位置 ++
	ENDIF
	キャラカウンタ ++
NEXT

;フッタ描画
PRINTL
CALL SINGLE_DRAWLINE

IF 総ページ数 >= 2
	PRINT [  1] 最初のページ
	PRINT [  2] NEXT
	PRINTPLAINFORM ページ{表示ページ}/{総ページ数}
	PRINT [  8] 後のページ
	PRINT [  9] 最後のページ
	PRINTL
	CALL COLOR_LINE
ENDIF

IF 人数 != -1
	PRINTFORM {MATCH(選択フラグ, 1)} / {人数}
ELSE
	PRINTFORM [97] 全員設定
	PRINTPLAIN
	PRINTFORM [98] 全員解除
	PRINTL
ENDIF
CALL COLOR_LINE
PRINTBUTTON "<<", 20000
PRINT
PRINTBUTTON @"[%STR_NOW_SORTKEY:ソートキー, 4, LEFT%]", 20001
PRINT
PRINTBUTTON ">>", 20002
PRINT
PRINTBUTTON @"[\@ 降順ソート ? 降順 # 昇順\@]", 20003
PRINTL
CALL SINGLE_DRAWLINE
PRINTL [  0] 決定

REDRAW 0

;入力
$INPUT_LOOP
INPUT

;ガード節・特殊処理
IF RESULT == 1
	表示ページ = 1
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 2
	表示ページ = ROUND_DECREMENT(表示ページ, 1, 総ページ数)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 8
	表示ページ = ROUND_INCREMENT(表示ページ, 1, 総ページ数)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 9
	表示ページ = 総ページ数
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 97 && 人数 == -1
	FOR LOCAL, 0, CHARANUM
		CALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(LOCAL)
		SIF !RESULT
			CONTINUE
		CALLFORM SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%(LOCAL)
		SIF !RESULT
			CONTINUE
		選択フラグ:LOCAL = 1
	NEXT
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 98 && 人数 == -1
	VARSET 選択フラグ
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 0
	REDRAW 1
	FOR LOCAL, 0, VARSIZE("SELECTED_CHARA")
		IF 選択フラグ:LOCAL
			SELECTED_CHARA:SELECTED_CHARA_NUM = LOCAL
			SELECTED_CHARA_NUM ++
		ENDIF
	NEXT
	RETURN
ELSEIF RESULT == 20000
	ソートキー = ROUND_DECREMENT(ソートキー, 0, NUM_SORTKEY - 1)
	CALL CREATE_SELECTOR_SORT_LIST(0)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 20001
	CALL SINGLE_DRAWLINE
	FOR LOCAL, 0, NUM_SORTKEY
		PRINTFORML [{LOCAL}] %STR_NOW_SORTKEY:LOCAL, 4, LEFT%
	NEXT
	INPUT
	SIF INRANGE(RESULT, 0, NUM_SORTKEY - 1)
		ソートキー = RESULT
	CALL CREATE_SELECTOR_SORT_LIST(0)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 20002
	ソートキー = ROUND_INCREMENT(ソートキー, 0, NUM_SORTKEY - 1)
	CALL CREATE_SELECTOR_SORT_LIST(0)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ELSEIF RESULT == 20003
	降順ソート = !降順ソート
	CALL CREATE_SELECTOR_SORT_LIST(0)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ENDIF

IF RESULT >= 10099
	対象 = RESULT - 10099
	IF 対象 > CHARANUM || 対象 < 0
		CLEARLINE 1
		GOTO INPUT_LOOP
	ENDIF
	CALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(対象)
	IF !RESULT
		CLEARLINE 1
		GOTO INPUT_LOOP
	ENDIF
	CALLFORM SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%(対象)
	IF !RESULT
		CLEARLINE 1
		GOTO INPUT_LOOP
	ENDIF
	FOR LOCAL, 0, CHARANUM
		SIF SHOP_CHARA_LIST:LOCAL == -1
			CONTINUE
		CALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(SHOP_CHARA_LIST:LOCAL)
		SIF RESULT
			CALLFORM SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%(SHOP_CHARA_LIST:LOCAL)
		SIF RESULT
			CONTINUE
		SHOP_CHARA_LIST:LOCAL = -1
	NEXT
	CALL SHOW_INFO_WITH_UI(対象, 1)
	CALL CREATE_SELECTOR_SORT_LIST(0)
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ENDIF

;入力
対象 = RESULT - 99
IF 対象 > CHARANUM || 対象 < 0
	CLEARLINE 1
	GOTO INPUT_LOOP
ENDIF

IF 選択フラグ:対象
	選択フラグ:対象 = 0
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ENDIF

CALLFORM SELECT_CHARA_LIST_SHOW_LOGIC_%表示関数名%(対象)
IF !RESULT
	CLEARLINE 1
	GOTO INPUT_LOOP
ENDIF
CALLFORM SELECT_CHARA_LIST_SELECT_LOGIC_%選択関数名%(対象)
IF !RESULT
	CLEARLINE 1
	GOTO INPUT_LOOP
ENDIF
IF 選択フラグ:対象 == 0
	SIF (人数 != -1 && MATCH(選択フラグ, 1) < 人数) || 人数 == -1
		選択フラグ:対象 = 1
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ENDIF

CLEARLINE 1
GOTO INPUT_LOOP

;-------------------------------------------------
;キャラリスト表示用の汎用関数の表示ロジック
;-------------------------------------------------
@SELECT_CHARA_LIST_SHOW_LOGIC_DEFAULT(対象)
#DIM 対象
;育児対象,別勢力,放浪,脂肪,未登場,動物をはじく
SIF CFLAG:対象:行動不能状態 == 行動不能_子供
	RETURN 0
SIF CFLAG:対象:所属 != CFLAG:MASTER:所属
	RETURN 0
SIF GROUPMATCH(CFLAG:対象:特殊状態, 1, 2)
	RETURN 0
SIF CFLAG:対象:特殊状態 == 0 && !IS_COUNTRY(CFLAG:対象:所属)
	RETURN 0
SIF IS_ANIMAL(対象)
	RETURN 0
RETURN 1

@SELECT_CHARA_LIST_SHOW_LOGIC_NONE(対象)
#DIM 対象
RETURN 1

@SELECT_CHARA_LIST_SHOW_LOGIC_SAME_FACTION(対象)
#DIM 対象
SIF CFLAG:対象:所属 != CFLAG:MASTER:所属
	RETURN 0
RETURN 1

@SELECT_CHARA_LIST_SHOW_LOGIC_SAME_FACTION_HAS_PENIS(対象)
#DIM 対象
SIF !HAS_PENIS(対象)
	RETURN 0
RETURN 1

@SELECT_CHARA_LIST_SHOW_LOGIC_SAME_FACTION_HAS_VAGINA(対象)
#DIM 対象
SIF !HAS_VAGINA(対象)
	RETURN 0
RETURN 1

;-------------------------------------------------
;キャラリスト表示用の汎用関数の洗濯用ロジック
;-------------------------------------------------
@SELECT_CHARA_LIST_SELECT_LOGIC_DEFAULT(対象)
#DIM 対象
;捕虜をはじく
SIF CFLAG:対象:捕虜先
	RETURN 0
RETURN 1

@SELECT_CHARA_LIST_SELECT_LOGIC_NONE(対象)
#DIM 対象
RETURN 1

@SELECT_CHARA_LIST_COLOR_LOGIC_DEFAULT(対象)
#DIM 対象
RETURN GETDEFCOLOR()

;-------------------------------------------------
;キャラリスト表示用の汎用関数 能力表示SLG版
;-------------------------------------------------
@SELECT_CHARA_LIST_SLG()
CALL SELECT_CHARA_LIST("DEFAULT", "DEFAULT", "DEFAULT", "戦闘", "身体", "器用", "知識", "社交", "魔術", "歌唱", "料理")
RETURN RESULT

@SELECT_CHARA_LIST_ONLY_LOGIC_SLG(表示関数名, 選択関数名, 色指定関数名 = "DEFAULT")
#DIMS 表示関数名
#DIMS 選択関数名
#DIMS 色指定関数名
CALL SELECT_CHARA_LIST(表示関数名, 選択関数名, 色指定関数名, "戦闘", "身体", "器用", "知識", "社交", "魔術", "歌唱", "料理")
RETURN RESULT

;-------------------------------------------------
;キャラリスト表示用の汎用関数 能力表示すけべ版
;-------------------------------------------------
@SELECT_CHARA_LIST_SEX()
CALL SELECT_CHARA_LIST("DEFAULT", "DEFAULT", "DEFAULT", "Ｃ感", "Ｖ感", "Ｂ感", "Ａ感", "Ｍ感", "Ｕ感", "欲望")
RETURN RESULT

@SELECT_CHARA_LIST_ONLY_LOGIC_SEX(表示関数名, 選択関数名, 色指定関数名 = "DEFAULT")
#DIMS 表示関数名
#DIMS 選択関数名
#DIMS 色指定関数名
CALL SELECT_CHARA_LIST(表示関数名, 選択関数名, 色指定関数名,  "Ｃ感", "Ｖ感", "Ｂ感", "Ａ感", "Ｍ感", "Ｕ感", "欲望")
RETURN RESULT

;-------------------------------------------------
;キャラリスト表示用の汎用関数 マルチ版SLG
;-------------------------------------------------
@SELECT_CHARA_LIST_MULTI_SLG(人数)
#DIM 人数
CALL SELECT_CHARA_LIST_MULTI(人数, "DEFAULT", "DEFAULT", "DEFAULT", "戦闘", "身体", "器用", "知識", "社交", "魔術", "歌唱", "料理")

@SELECT_CHARA_LIST_MULTI_ONLY_LOGIC_SLG(人数, 表示関数名, 選択関数名, 色指定関数名 = "DEFAULT")
#DIM 人数
#DIMS 表示関数名
#DIMS 選択関数名
#DIMS 色指定関数名
CALL SELECT_CHARA_LIST_MULTI(人数, 表示関数名, 選択関数名, 色指定関数名,  "戦闘", "身体", "器用", "知識", "社交", "魔術", "歌唱", "料理")

;-------------------------------------------------
;キャラリスト表示用の汎用関数 マルチ版すけべ
;-------------------------------------------------
@SELECT_CHARA_LIST_MULTI_SEX(人数)
#DIM 人数
CALL SELECT_CHARA_LIST_MULTI(人数, "DEFAULT", "DEFAULT", "DEFAULT", "Ｃ感", "Ｖ感", "Ｂ感", "Ａ感", "Ｍ感", "Ｕ感", "欲望")

@SELECT_CHARA_LIST_MULTI_ONLY_LOGIC_SEX(人数, 表示関数名, 選択関数名, 色指定関数名 = "DEFAULT")
#DIM 人数
#DIMS 表示関数名
#DIMS 選択関数名
#DIMS 色指定関数名
CALL SELECT_CHARA_LIST_MULTI(人数, 表示関数名, 選択関数名, 色指定関数名,  "Ｃ感", "Ｖ感", "Ｂ感", "Ａ感", "Ｍ感", "Ｕ感", "欲望")

@SELECT_CHARA_LIST_INIT
VARSET SELECTED_CHARA
SELECTED_CHARA_NUM = 0