code:
;-------------------------------------------------
;「手引させる」の名称
;-------------------------------------------------
@SHOP_LIFE_NAME22
RESULTS:0 '= "手引させる"

;-------------------------------------------------
;「手引させる」の選択可否
;-------------------------------------------------
@SHOP_LIFE_CHECK22
FOR LOCAL, 0, MAX_COUNTRY
	SIF !IS_COUNTRY(LOCAL) || LOCAL == CFLAG:MASTER:所属
		CONTINUE
	SIF !CFLAG:MASTER:所属 || TMP_COUNTRY_IS_NEIBORING:(CFLAG:MASTER:所属):LOCAL
		GOTO FOUND
NEXT

RETURN 0

$FOUND

SIF CFLAG:MASTER:捕虜先
	RETURN 0
SIF CFLAG:MASTER:行動不能状態 == 行動不能_臨月 || COOLTIME:MASTER:0 > 1
	RETURN 0

;通常はCHECK真CHECKCHARA真なら通すが
;手引きはCHECKCHARA_SUBが必須のためここでチェック
;内通者の選択可能キャラ存在チェック
LOCAL:1 = 0
FOR LOCAL:0, 1, CHARANUM
	CALL SHOP_LIFE_CHECKCHARA_SUB_NAITSUU(LOCAL:0)
	IF RESULT
		LOCAL:1 = 1
		BREAK
	ENDIF
NEXT

;内通者になれるキャラが存在しない
SIF LOCAL:1 == 0
	RETURN 0

RETURN 1

;-------------------------------------------------
;「手引させる」の選択可能キャラ存在判定
;-------------------------------------------------
@SHOP_LIFE_CHECKCHARA22(ARG:0)
;隣接している都市がない
SIF CFLAG:MASTER:所属 && !TMP_COUNTRY_IS_NEIBORING:(CFLAG:MASTER:所属):(CFLAG:(ARG:0):所属)
	RETURN 0

;非主人公、捕虜ではない、別勢力、どこかの勢力に所属している（放浪、未登場、死亡済みではない）
IF ARG:0 != MASTER && !CFLAG:(ARG:0):捕虜先 && CFLAG:MASTER:所属 != CFLAG:(ARG:0):所属 && CFLAG:(ARG:0):所属 && !IS_SP_CHARA(ARG:0) && CFLAG:(ARG:0):行動不能状態 != 行動不能_子供
	;内通者として選択したキャラ自身は不可
	SIF CFLAG:(ARG:0):夜這いの助手
		RETURN 2
	IF TEBIKI_ABLE(ARG:0)
		RETURN CHECK91(ARG:0, 2, 1)
	ENDIF
	RETURN 2
ENDIF
RETURN 0

;-------------------------------------------------
;「手引させる」の内通者の選択可能キャラ存在判定
;-------------------------------------------------
@SHOP_LIFE_CHECKCHARA_SUB22(ARG:0)
CALL SHOP_LIFE_CHECKCHARA_SUB_NAITSUU(ARG:0)
RETURN RESULT

;-------------------------------------------------
;「夜這いする」の追加チェック
;-------------------------------------------------
@SHOP_LIFE_CHECK_ADDITIONAL_CHECK22()
RETURN !FLAG:クリアフラグ

;-------------------------------------------------
;「手引させる」の陥落/能力判定
;-------------------------------------------------
@TEBIKI_ABLE(ARG:0)
#FUNCTION
LOCAL:1 = TEBIKI_ZYOSYU_CALC_POINT(MASTER)
LOCAL:2 = 0
FOR LOCAL,1, CHARANUM
	IF CFLAG:LOCAL:夜這いの助手
		LOCAL:1 += TEBIKI_ZYOSYU_CALC_POINT(LOCAL)
		LOCAL:2 = 1
		SIF CFLAG:LOCAL:所属 != CFLAG:ARG:所属
			RETURNF 0
	ENDIF
NEXT

SIF LOCAL:2 == 0
	RETURNF 0

RETURNF LOCAL:1 >= TEBIKI_TARGET_CALC_POINT(ARG)

;-------------------------------------------------
;「夜這いする」の能力判定用関数
;-------------------------------------------------
@TEBIKI_ZYOSYU_CALC_POINT(ARG)
#FUNCTION
RETURNF ABL:ARG:身体 + ABL:ARG:知識

;-------------------------------------------------
;「夜這いする」の能力判定用関数
;-------------------------------------------------
@TEBIKI_TARGET_CALC_POINT(ARG)
#FUNCTION
SIF GROUPMATCH(1, TALENT:ARG:親愛, TALENT:ARG:恋慕, TALENT:ARG:隷属, TALENT:ARG:服従, TALENT:ARG:主人, TALENT:ARG:所有者)
	RETURNF 0

LOCAL = ABL:ARG:身体 + ABL:ARG:知識

SIF TALENT:(ARG:0):烙印
	RETURNF LOCAL
SIF GET_COUNTRY_BOSS(CFLAG:(ARG:0):所属) == ARG:0
	RETURNF LOCAL * 5 / 2
RETURNF LOCAL * 2

;-------------------------------------------------
;「手引させる」の左カラムメニューの入力処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY22
FLAG:拠点フェイズページ = 1
FLAG:夜這い = 1
FOR LOCAL:0, 1, CHARANUM
	CFLAG:(LOCAL:0):夜這いの助手 = 0
NEXT
RETURN 0

;-------------------------------------------------
;「手引させる」の右カラムキャラリスト１のボタン（関数未指定なら選択中色なし表示）
;-------------------------------------------------
@SHOP_LIFE_LIST1_BUTTON22(ARG:0, ARG:1)
;内通者の存在チェック
LOCAL:1 = 0
FOR LOCAL:0, 1, CHARANUM
	IF CFLAG:(LOCAL:0):夜這いの助手
		LOCAL:1 = 1
		BREAK
	ENDIF
NEXT
;内通者が指定されていない
IF LOCAL:1 == 0
	;キャラ, 選択中カラー表示フラグなし, ボタン番号に追加する数値, 強制的に選択不可色表示
	CALL COLUMN_RIGHT_CHARALIST_BUTTON(ARG:0, 0, SHOP_LIFE_LIST1_ADD_INPUT, 2, 0, "TOP")
ELSE
	;キャラ, 選択中カラー表示フラグなし, ボタン番号に追加する数値, CHECKCHARAの戻り値
	CALL COLUMN_RIGHT_CHARALIST_BUTTON(ARG:0, 0, SHOP_LIFE_LIST1_ADD_INPUT, ARG:1, 0, "TOP")
ENDIF
RETURN

;-------------------------------------------------
;「手引させる」の右カラムキャラリスト２のボタン（関数未指定なら選択中色なし表示）
;-------------------------------------------------
@SHOP_LIFE_LIST2_BUTTON22(ARG:0, ARG:1)
;キャラ, 選択中カラー表示フラグ, ボタン番号に追加する数値, CHECKCHARAの戻り値
CALL COLUMN_RIGHT_CHARALIST_BUTTON(ARG:0, CFLAG:(ARG:0):夜這いの助手, SHOP_LIFE_LIST2_ADD_INPUT, ARG:1, 0, "BOTTOM")
RETURN 0

;-------------------------------------------------
;「夜這い」の右カラムキャラリストボタン（上）表示に追尾させる情報
;　デフォルトの情報を表示しない場合はRETURN 1
;-------------------------------------------------
@SHOP_LIFE_BUTTON_ADD_TOP22(ARG:0)
PRINTFORM P:{TEBIKI_TARGET_CALC_POINT(ARG:0), 3, RIGHT}
CALL SHOP_LIFE_BUTTON_ADD_TOP_PRISONER(ARG:0)
RETURN RESULT

;-------------------------------------------------
;「夜這い」の右カラムキャラリストボタン（上）表示に追尾させる情報
;　デフォルトの情報を表示しない場合はRETURN 1
;-------------------------------------------------
@SHOP_LIFE_BUTTON_ADD_BOTTOM22(ARG:0)
PRINTFORM P:{TEBIKI_ZYOSYU_CALC_POINT(ARG:0), 3, RIGHT}
CALL SHOP_LIFE_BUTTON_ADD_BOTTOM_PRISONER(ARG:0)
RETURN RESULT

;-------------------------------------------------
;「手引させる」の右カラム表示処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SHOW22
CALL COLUMN_RIGHT_TITLE("対象者選択", "0", "1", "1", "0", "対象の勢力に内通者が必要")
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

;２段組キャラリスト上とページ移動
CALL COLUMN_RIGHT_CHARALIST_TOP(1)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

;助手を数える
LOCAL:1 = 0
LOCAL:2 = TEBIKI_ZYOSYU_CALC_POINT(MASTER)
FOR LOCAL:0, 0, CHARANUM
	;選択可能な条件を満たしているかどうかを判定
	TRYCALLFORM SHOP_LIFE_CHECKCHARA_SUB{FLAG:拠点フェイズ選択コマンド}(LOCAL:0)
	IF RESULT == 1
		;選択中の人数を数える
		IF CFLAG:(LOCAL:0):夜這いの助手
			LOCAL:1 ++
			LOCAL:2 += TEBIKI_ZYOSYU_CALC_POINT(LOCAL:0)
		ENDIF
	ELSE
		;条件を満たしていなければ強制的にＯＦＦ
		CFLAG:(LOCAL:0):夜這いの助手 = 0
	ENDIF
NEXT

PRINT 誰に手引きさせますか？
PRINTFORM  ポイント:{LOCAL:2}
PRINTPLAIN
PRINTBUTTON @"[%ZYOSYU_MODE()%]", 1
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

;２段組キャラリスト下とページ移動
ソートキー保存 = ソートキー
ソート順保存 = 降順ソート
ソートキー = ソート_手引助手
降順ソート = 1
CALL CREATE_SELECTOR_SORT_LIST
CALL COLUMN_RIGHT_CHARALIST_BOTTOM(1)
ソートキー = ソートキー保存
降順ソート = ソート順保存
CALL CREATE_SELECTOR_SORT_LIST
RETURN 0

;-------------------------------------------------
;「夜這いする」の右カラムボタンの入力処理補佐
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SUB22(ARG:0)
SIF ARG:0 != 1
	RETURN 0

FLAG:助手フィルタ = ROUND_INCREMENT(FLAG:助手フィルタ, 0, 3)

;-------------------------------------------------
;「手引させる」のリスト１入力処理
;-------------------------------------------------
@SHOP_LIFE_USERSHOP22(ARG:0)
#DIM 好感度他減少

;SHOW_INFOの初期画面を基本情報にする
FLAG:能力表示モード = 0

$SHOW_LOOP_INFO_T

;対象キャラの情報を表示
CALL SINGLE_DRAWLINE
CALL SHOW_INFO(ARG:0)
CALL SINGLE_DRAWLINE

PRINTFORML 内通者の手引きで%ANAME(ARG:0)%を罠にかけます
PRINTFORML よろしいですか？
CALL ASK_YN
IF RESULT == 0
	CVARSET CFLAG, 6, 0
	FOR LOCAL:0, 0, CHARANUM
		IF LOCAL:0 != MASTER && CFLAG:(LOCAL:0):夜這いの助手
			CFLAG:(LOCAL:0):調教参加フラグ = 1
		ENDIF
	NEXT
	;夜這い経験
	EXP:ARG:夜這い経験 ++
	;調教初期設定
	CALL TRAIN_TARGET_SETTING(ARG:0)
	;メインターゲットを調教対象に設定
	VARSET PRISONER_TARGET, -1
	PRISONER_TARGET:0 = ARG:0
	;初期のウフフフラグをＯＮにする
	FLAG:ウフフフラグ = 1
	;捕虜調教モード
	FLAG:調教モード = 2
	;夜這いフラグ
	FLAG:夜這い = 1

	;行動開始時の共通設定
	CALL START_TRAIN_COMMON
	IF !IS_FALLEN(ARG:0)
		好感度他減少 = LIMIT(RAND(100, 200) - ABL:ARG:欲望 * 20 - ABL:ARG:奉仕 * 20 ,0, 100)
		SIF TALENT:ARG:烙印
			好感度他減少 /= 2
		SIF CFLAG:(ARG:0):好感度 > 0
			CFLAG:(ARG:0):好感度 -= 好感度他減少
		SIF CFLAG:(ARG:0):従属度 > 0
			CFLAG:(ARG:0):従属度 -= 好感度他減少
		SIF CFLAG:(ARG:0):依存度 > 0
			CFLAG:(ARG:0):依存度 -= 好感度他減少
		SIF CFLAG:(ARG:0):支配度 > 0
			CFLAG:(ARG:0):支配度 -= 好感度他減少 / 2

		;相手との関係悪化（適当）
		CALL CHANGE_RELATION_O_TO_C(CFLAG:ARG:所属, CFLAG:MASTER:所属, RAND(50, 100) * -1, RAND(50, 100))
		CALL CHANGE_RELATION_O_TO_C(GET_COUNTRY_BOSS(CFLAG:(ARG:0):所属), CFLAG:MASTER:所属, RAND(50, 100) * -1, RAND(50, 100))
			;対象が君主ならおかわり
		SIF GET_COUNTRY_BOSS(CFLAG:(ARG:0):所属) == ARG:0
			CALL CHANGE_RELATION_C_TO_C(CFLAG:ARG:所属, CFLAG:MASTER:所属, RAND(100, 150) * -1, RAND(100, 150))
	ENDIF
	REDRAW 1
	RETURN 1
ENDIF
REDRAW 1
RETURN 0

;-------------------------------------------------
;「手引させる」のリスト２入力処理
;-------------------------------------------------
@SHOP_LIFE_USERSHOP_SUB22(ARG:0)
;参加キャラの数を数える
LOCAL:5 = 0
FOR LOCAL:0, 0, CHARANUM
	IF CFLAG:(LOCAL:0):夜這いの助手
		LOCAL:5 ++
	ENDIF
NEXT
;1人まで
IF CFLAG:(ARG:0):夜這いの助手 || LOCAL:5 < 1
	;内通参加フラグを反転
	CFLAG:(ARG:0):夜這いの助手 = !CFLAG:(ARG:0):夜這いの助手
ENDIF


code:
;-------------------------------------------------
;「投獄する」の名称
;-------------------------------------------------
@SHOP_LIFE_NAME25
; RESULTS:0 '= "投獄する"

;-------------------------------------------------
;「投獄する」の選択可否
;-------------------------------------------------
@SHOP_LIFE_CHECK25
SIF CFLAG:MASTER:捕虜先
	RETURN 0
SIF !CFLAG:MASTER:所属
	RETURN 0
RETURN 1

;-------------------------------------------------
;「投獄する」の選択可能キャラ存在判定
;-------------------------------------------------
@SHOP_LIFE_CHECKCHARA25(ARG:0)
;非主人公、主人公より社交が低い、君主でない、捕虜でない、動物でない、育児されている子供でない、特殊キャラでない
{
	RETURN ARG:0 != MASTER && CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属 && CFLAG:ARG:捕虜先 == 0 && ARG:0 != GET_COUNTRY_BOSS(CFLAG:MASTER:所属) && !IS_ANIMAL(ARG:0) &&
		CFLAG:(ARG:0):行動不能状態 != 行動不能_子供 && !IS_SP_CHARA(ARG:0)
}

;-------------------------------------------------
;「投獄する」の左カラムメニューの入力処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY25
FLAG:拠点フェイズページ = 1
FLAG:夜這い = 0
RETURN 0

;-------------------------------------------------
;「投獄する」の右カラム表示処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SHOW25
CALL COLUMN_RIGHT_TITLE("対象者選択(投獄した相手には嫌われます)", "0", "1", "0", "0")
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_CHARALIST()
RETURN 1

;-------------------------------------------------
;「投獄する」のリスト１入力処理
;-------------------------------------------------
@SHOP_LIFE_USERSHOP25(ARG:0)
#DIM SAVE_LINE_SHOP_LIFE

FLAG:能力表示モード = 0
SAVE_LINE_SHOP_LIFE = LINECOUNT

CALL SINGLE_DRAWLINE
PRINTFORML %ANAME(ARG:0)%に適当な罪を被せ、投獄します
PRINTFORML 当然、本人からは嫌われます
PRINTFORML それでも実行しますか？
CALL ASK_YN
IF RESULT == 0
	SETCOLOR カラー_注意
	PRINTFORMW <%ANAME(ARG:0)%>を投獄しました
	RESETCOLOR
	CALL CAPTURE(ARG:0, CFLAG:MASTER:所属)
	CFLAG:(ARG:0):好感度 -= MAX(500, CFLAG:(ARG:0):好感度 * 3 / 10)
	CFLAG:(ARG:0):依存度 -= MAX(500, CFLAG:(ARG:0):依存度 * 3 / 10)
	CFLAG:(ARG:0):従属度 -= MAX(500, CFLAG:(ARG:0):従属度 * 3 / 10)
	RETURN 1
ELSE
	LINES_SHOP = SAVE_LINE_SHOP_LIFE
	RETURN 0
ENDIF

repo_name: napo/erafl

license: unknown


code:
;-------------------------------------------------
;「捕虜の調教」処刑
;-------------------------------------------------
@EXECUTION(ARG:0)
IF IS_MALE(ARG:0)
	SELECTCASE RAND:5
		CASE 0
			PRINTFORML 暗い部屋の中、男女の交わりの音と嬌声、うめき声が響いている……
			PRINTFORML 「処刑」された%ANAME(ARG:0)%が、性欲をもてあました女官達に「使われて」いるのだ
			PRINTFORML %ANAME(ARG:0)%は既に何十発と精を放っている。女官達が飲ませた薬が、彼に超常的な性欲を与えているのだ
			PRINTFORML 彼の上に跨がった女官がぐりぐりと腰を押しつけると、%ANAME(ARG:0)%は堪えきれずにまた射精した……
		CASE 1
			PRINTFORML 暗い部屋の中、男のうめき声、女達の笑い声が響いている……
			PRINTFORML 「処刑」された%ANAME(ARG:0)%は、女官達の鬱憤晴らしに「使われて」いるのだ
			PRINTFORML %ANAME(ARG:0)%は荒い呼吸をしながら、自らを壁に縛り付ける鎖をじゃらじゃらと鳴らしている
			PRINTFORML そのペニスはひどく勃起している。女官達が飲ませた薬が、彼の性欲を異常に高めているのだ
			PRINTFORML 女官達は射精できない絶妙なラインで彼のペニスを弄びながら、その浅ましさを嘲笑った……
		CASE 2
			PRINTFORML 暗い部屋の中、男の野太い声、女達の笑い声が響いている……
			PRINTFORML 「処刑」された%ANAME(ARG:0)%は、女官達の鬱憤晴らしに「使われて」いるのだ
			PRINTFORML 女は笑いながら、%ANAME(ARG:0)%に腰を振り立てる。彼の尻穴は、極太のペニスバンドを咥え込まされている
			PRINTFORML ぐぶぬぶと聞き苦しい音を立て、女が何度もピストンを繰り返すと、彼のペニスからとろとろと白濁が零れ落ちる
			PRINTFORML 女に尻穴を穿たれて射精する惨めな様を、女官達は嘲笑いつつ、彼を何度も陵辱した……
		CASE 3
			PRINTFORML %ANAME(ARG:0)%はさらし首にされた……
		CASE 4
			PRINTFORML %ANAME(ARG:0)%は磔刑にされた……
	ENDSELECT
ELSE
	SELECTCASE RAND:15
		CASE 0
			PRINTFORML 暗い部屋の中、男女の交わりの音と悲鳴、罵声が響いている……
			PRINTFORML 「処刑」された%ANAME(ARG:0)%が、兵士達の性欲処理に「使われて」いるのだ
			PRINTFORML %ANAME(ARG:0)%はあらゆる穴に何十発と精を放たれ、全身を真っ白に染めている
			PRINTFORML 彼女に覆い被さる兵士がうめき声を上げ、%ANAME(ARG:0)%の膣内にまた射精した……
		CASE 1
			PRINTFORML 暗い部屋の中、男女の交わりの音と悲鳴、罵声が響いている……
			PRINTFORML 「処刑」された%ANAME(ARG:0)%は、囚人達の慰安用奴隷として所有されることになった
			PRINTFORML %ANAME(ARG:0)%はあらゆる穴に何十発と精を放たれ、暴力を振るわれた身体はボロボロだ
			PRINTFORML 彼女に群がる囚人は後を絶たず、%ANAME(ARG:0)%はその肉体で、穴で延々と奉仕させられた……
		CASE 2
			PRINTFORML 街の大通りを、軍がパレードしている
			PRINTFORML その中心に、全裸に枷をつけられた%ANAME(ARG:0)%がいた
			PRINTFORML 街の住人達は、恐るべき敵将%ANAME(ARG:0)%の惨めな姿を嘲笑い、罵倒し、石を投げつける
			PRINTFORML その後%ANAME(ARG:0)%は街の住人達に「払い下げ」られ、その肉体でもって彼らに償いをした……
		CASE 3
			PRINTFORML 街の中央広場、特設の処刑台の上に、%ANAME(ARG:0)%は立たされていた
			PRINTFORML そして街の住人皆が見ている前で、兵士達に輪姦された
			PRINTFORML 街の住人達は、恐るべき敵将%ANAME(ARG:0)%の惨めな姿を嘲笑い、罵倒し、石を投げつける
			PRINTFORML その後%ANAME(ARG:0)%は街の住人達に「払い下げ」られ、その肉体でもって彼らに償いをした……
		CASE 4
			PRINTFORML 街の中央広場、特設の処刑台の上に、%ANAME(ARG:0)%は立たされていた
			PRINTFORML そして街の住人皆が見ている前で、自慰を強要された
			PRINTFORML 街の住人達は、恐るべき敵将%ANAME(ARG:0)%の惨めな姿を嘲笑い、罵倒し、石を投げつける
			PRINTFORML その後%ANAME(ARG:0)%は街の住人達に「払い下げ」られ、その肉体でもって彼らに償いをした……
		CASE 5
			PRINTFORML 街の中央広場、特設の処刑台の上に、%ANAME(ARG:0)%は立たされていた
			PRINTFORML そして街の住人皆が見ている前で、犬と性交させられた
			PRINTFORML 街の住人達は、恐るべき敵将%ANAME(ARG:0)%の惨めな姿を嘲笑い、罵倒し、石を投げつける
			PRINTFORML その後%ANAME(ARG:0)%は街の住人達に「払い下げ」られ、その肉体でもって彼らに償いをした……
		CASE 6
			PRINTFORML 暗い部屋の中、狂ったような笑い声が響いている
			PRINTFORML 「処刑」された%ANAME(ARG:0)%は、マッドサイエンティストとして有名な男に払い下げられた
			PRINTFORML 男は彼女を薬品で眠らせ、その間にその肉体と脳の「改良」手術を行っているようだ
			PRINTFORML %ANAME(ARG:0)%が目を覚ます頃には、その体つきは男に媚びを売っているようなものになりはてていた
			PRINTFORML そしてその思考は、男とみれば奉仕せずにはいられない淫乱へと造り替えられていた
			PRINTFORML 彼女は早速、目の前の男のペニスに、その穴でもってたっぷりと奉仕をした……
		CASE 7
			PRINTFORML 軍の畜舎で、豚の鳴き声、そして女の悲鳴が響いている
			PRINTFORML 「処刑」された%ANAME(ARG:0)%は、動物の世話係という役割を与えられたようだ……
			PRINTFORML 繁殖台の上に縛り付けられた彼女に、豚が覆い被さり、腰をずんずんと振りたくっている
			PRINTFORML 畜生に犯されているという事実と、堪えようもない快楽の間で、彼女は揺れ動いている
			PRINTFORML だが豚はそんなことなどお構いなしに、糊のように粘つく精液を彼女に注ぎ込んでいった……
		CASE 8
			PRINTFORML 軍の野営地で、男達の下卑た笑い声と、女の悲鳴が響いている
			PRINTFORML 「処刑」された%ANAME(ARG:0)%は、慰安係として連行されているのだ
			PRINTFORML 男達は%ANAME(ARG:0)%が陵辱される様を肴に、酒を飲んでいる
			PRINTFORML 彼女の身体は既に何十発と射精され、どろどろになっている
			PRINTFORML 結局、部隊が帰投するまで、彼女は延々と犯され続けた……
		CASE 9
			PRINTFORML 暗い部屋の中、狂ったような笑い声が響いている
			PRINTFORML 「処刑」された%ANAME(ARG:0)%は、マッドサイエンティストとして有名な男に払い下げられた
			PRINTFORML 男は彼女を、彼が創り出した触手生物の実験に使っているようだ
			PRINTFORML ゴーヤほどもあろうかという太い触手が、彼女の両穴を激しく抉る
			PRINTFORML だが、触手が分泌する液体により痛みを感じることはなく、圧倒的な快楽が%ANAME(ARG:0)%を襲う
			PRINTFORML %ANAME(ARG:0)%はそのまま、その意識が絶えるまで、触手の相手をさせられ続けた……
		CASE 10
			PRINTFORML 暗い部屋の中、狂ったような嬌声が響いている
			PRINTFORML 「処刑」により男根を生やされた%ANAME(ARG:0)%が、ひたすら自らのペニスを扱き立てているのだ
			PRINTFORML 新たに得たそれは既に何発も射精し、床に白い水たまりを作っているにもかかわらず、未だ萎える様子を見せない
			PRINTFORML 彼女が大きく背を反らすと、鈴口からねっとりとした白濁が勢い良く噴き出し、彼女の肉体を汚していった……
		CASE 11
			PRINTFORML 暗い部屋の中、女達の笑い声と嬌声が響いている
			PRINTFORML 「処刑」された%ANAME(ARG:0)%は、女官達の鬱憤晴らしに使われているのだ
			PRINTFORML 女ならではの、どこを触れば感じるかを熟知した手つきで、女官は%ANAME(ARG:0)%の性感を高めていく
			PRINTFORML だが、もっともイイところには決して触れず、かつ彼女を絶頂させてやることもなかった
			PRINTFORML %ANAME(ARG:0)%が涙ながらに懇願しようとも女官は聞き入れず、彼女をひたすら嬲り続けた……
		CASE 12
			PRINTFORML 暗い部屋の中、女の悲鳴が響いている
			PRINTFORML 「処刑」された%ANAME(ARG:0)%は、次世代の兵士を作るための苗床として使われている
			PRINTFORML つまるところは、体のいい肉便器だ……
			PRINTFORML 縛り付けられた彼女に、兵士は何事か喚きながら腰を振りたくり、射精する
			PRINTFORML 秘裂からペニスが引き抜かれると、既に何十発と射精された穴から、誰のものかも分からぬ子種がどろりと零れ落ちた……
		CASE 13
			PRINTFORML %ANAME(ARG:0)%はさらし首にされた……
		CASE 14
			PRINTFORML %ANAME(ARG:0)%は磔刑にされた……
	ENDSELECT
ENDIF


code:
;-------------------------------------------------
;捕虜の調教でターゲットが一人だけのときの処理
;-------------------------------------------------
@PRISONER_TRAIT(ARG:0)
#DIM FIRST_LINE
#DIM CONST 選択肢_調教 = 0
#DIM CONST 選択肢_許す = 1
#DIM CONST 選択肢_見せしめ = 2
#DIM CONST 選択肢_軟禁 = 3
#DIM CONST 選択肢_釈放 = 4
#DIM CONST 選択肢_解放 = 5
#DIM CONST 選択肢_追放 = 6
#DIM CONST 選択肢_処刑 = 7
#DIM CONST 選択肢_触手処刑 = 8
#DIM CONST 選択肢_キャンセル = 99

FIRST_LINE = LINECOUNT

;SHOW_INFOの初期画面を基本情報にする
FLAG:能力表示モード = 0

;対象キャラの情報を表示
CALL SINGLE_DRAWLINE
CALL SHOW_INFO(ARG:0)
CALL SINGLE_DRAWLINE

PRINTFORML %ANAME(ARG:0)%をどうしますか？
CALL SINGLE_DRAWLINE
CALL PRISONER_TRAIT_PRINTBUTTONS(ARG:0)

INPUT

SELECTCASE RESULT
	CASE 選択肢_調教
		CALL PRISONER_TRAIT_START_TRAIN(ARG:0)
	CASE 選択肢_許す
		CALL PRISONER_TRAIT_FORGIVE(ARG:0)
	CASE 選択肢_見せしめ
		CALL PRISONER_TRAIT_EXAMPLE(ARG:0)
	CASE 選択肢_軟禁
		CALL PRISONER_TRAIT_LENIENT(ARG:0)
	CASE 選択肢_釈放
		CALL PRISONER_TRAIT_RELEASE(ARG:0)
	CASE 選択肢_解放
		CALL PRISONER_TRAIT_FREE(ARG:0)
	CASE 選択肢_追放
		CALL PRISONER_TRAIT_BANISH(ARG:0)
	CASE 選択肢_処刑
		CALL PRISONER_TRAIT_EXECUTE(ARG:0)
	CASE 選択肢_触手処刑
		CALL PRISONER_TRAIT_EXECUTE_TENTACLE(ARG:0)
	CASE 選択肢_キャンセル
		RETURN 1
ENDSELECT

SIF RESULT == 1
	RETURN

CLEARLINE LINECOUNT - FIRST_LINE
RESTART

;-------------------------------------------------
;捕虜の調教でターゲットが一人だけのときの処理中のボタン描画処理
;-------------------------------------------------
@PRISONER_TRAIT_PRINTBUTTONS(ARG:0)
#DIM CONST 選択肢_調教 = 0
#DIM CONST 選択肢_許す = 1
#DIM CONST 選択肢_見せしめ = 2
#DIM CONST 選択肢_軟禁 = 3
#DIM CONST 選択肢_釈放 = 4
#DIM CONST 選択肢_解放 = 5
#DIM CONST 選択肢_追放 = 6
#DIM CONST 選択肢_処刑 = 7
#DIM CONST 選択肢_触手処刑 = 8
#DIM CONST 選択肢_キャンセル = 99

PRINTBUTTON "[調教]", 選択肢_調教
PRINTPLAIN

IF CFLAG:(ARG:0):外交調教中
	PRINTBUTTON "[許す]", 選択肢_許す
	PRINTPLAIN
	PRINTBUTTON "[見せしめ]", 選択肢_見せしめ
	PRINTPLAIN
	PRINTBUTTON "[キャンセル]", 選択肢_キャンセル
	PRINTL
	RETURN
ENDIF

IF CFLAG:(ARG:0):所属 != CFLAG:MASTER:所属
	PRINTBUTTON "[軟禁]", 選択肢_軟禁
	PRINTPLAIN
	IF !FLAG:クリアフラグ
		PRINTBUTTON "[解放]", 選択肢_解放
		PRINTPLAIN
	ENDIF
ELSE
	PRINTBUTTON "[釈放]", 選択肢_釈放
	PRINTPLAIN
	IF !FLAG:クリアフラグ
		PRINTBUTTON "[追放]", 選択肢_追放
		PRINTPLAIN
	ENDIF
ENDIF
PRINTBUTTON "[処刑]", 選択肢_処刑
PRINTPLAIN
IF ITEM:触手部屋 && ID_TO_CHARA(FLAG:触手部屋管理者) >= 0
	PRINTBUTTON "[触手処刑]", 選択肢_触手処刑
	PRINTPLAIN
ENDIF
PRINTBUTTON "[キャンセル]", 選択肢_キャンセル
PRINTL

;-------------------------------------------------
;捕虜の調教 調教開始
;-------------------------------------------------
@PRISONER_TRAIT_START_TRAIN(ARG:0)
CALL PRISONER_SCAPEGOAT(ARG:0)
CALL DECIDE_PRISONER_MEMBER()
RETURN 1

;-------------------------------------------------
;外交　許す
;-------------------------------------------------
@PRISONER_TRAIT_FORGIVE(ARG:0)

SIF !CFLAG:(ARG:0):外交調教中
	RETURN 0

PRINTFORML %ANAME(ARG:0)%の体を自由にする権利を手放します
PRINTFORML よろしいですか？
CALL ASK_YN

SIF RESULT == 1
	RETURN 0

PRINTFORMW %ANAME(ARG:0)%を許してやりました

CFLAG:(ARG:0):外交調教中 = 0
SIF FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
	PRISONER_TARGET:(FINDELEMENT(PRISONER_TARGET, ARG:0)) = -1

RETURN 1

;-------------------------------------------------
;見せしめ
;-------------------------------------------------
@PRISONER_TRAIT_EXAMPLE(ARG:0)

SIF !CFLAG:(ARG:0):外交調教中
	RETURN 0

CVARSET CFLAG, GETNUM(CFLAG, "閨に呼ぶで選択中"), 0
CFLAG:(ARG:0):閨に呼ぶで選択中 = 1
CFLAG:(ARG:0):調教参加フラグ = 1
CFLAG:(ARG:0):強制友好化 = 1

;全員の慰安参加者フラグをクリア（あてがうメニューで操作されるため）
CVARSET CFLAG, GETNUM(CFLAG, "慰安参加者") , 0

;慰安モブの生成
LOCAL:1 = RAND(3, 6) - LOCAL:2
FOR LOCAL, 0, LOCAL:1
	CALL CREATE_IAN_MOB(慰安_行き先_一般住宅街, LOCAL + 1)
	SIF RESULT == -1
		BREAK
NEXT

FLAG:慰安モード = 3
FLAG:慰安場所 = 慰安_行き先_一般住宅街
ITEM:A_ローター = 1
ITEM:A_バイブ = 1
ITEM:A_アナルバイブ = 1
ITEM:A_ペニスバンド = 1
ITEM:A_オナホール = 1
ITEM:A_クリキャップ = 1
ITEM:A_ニプルキャップ = 1
ITEM:A_麻薬 = 99
ITEM:A_縄 = 1
ITEM:A_鞭 = 1
ITEM:A_目隠し = 1
ITEM:A_口枷 = 1
ITEM:A_鼻フック = 1
ITEM:A_マジック = 1
ITEM:A_ローション = 99
ITEM:A_コンドーム = 99
ITEM:A_媚薬 = 99
ITEM:A_排卵誘発剤 = 99
ITEM:A_桃源香 = 99
FLAG:調教モード = 7
;ウフフフラグをONに
FLAG:ウフフフラグ = 1

PRINTFORMW 裸にした%ANAME(ARG:0)%を町の広場まで連れてきた
PRINTFORMW 領民を慰めるのに、せいぜい役立ってもらうとしよう……

;行動開始時の共通処理
CALL START_TRAIN_COMMON

RETURN 1

;-------------------------------------------------
;軟禁
;-------------------------------------------------
@PRISONER_TRAIT_LENIENT(ARG:0)

SIF CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属
	RETURN 0

SIF CFLAG:(ARG:0):外交調教中
	RETURN 0

PRINTFORML %ANAME(ARG:0)%を牢屋から出して、部屋を与え軟禁します
PRINTFORML よろしいですか？
CALL ASK_YN
SIF RESULT == 1
	RETURN 0

PRINTFORMW %ANAME(ARG:0)%を軟禁しました

CFLAG:(ARG:0):軟禁中 = 1
SIF FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
	PRISONER_TARGET:(FINDELEMENT(PRISONER_TARGET, ARG:0)) = -1

RETURN 1

;-------------------------------------------------
;釈放
;-------------------------------------------------
@PRISONER_TRAIT_RELEASE(ARG:0)

SIF CFLAG:(ARG:0):所属 != CFLAG:MASTER:所属
	RETURN 0

SIF CFLAG:(ARG:0):外交調教中
	RETURN 0

PRINTFORML %ANAME(ARG:0)%を牢屋から出します
PRINTFORML よろしいですか？
CALL ASK_YN

SIF RESULT == 1
	RETURN 0

PRINTFORMW %ANAME(ARG:0)%を牢屋から出しました
CALL CAPTURE(ARG:0, 0, TALENT:(ARG:0):崩壊)

SIF FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
	PRISONER_TARGET:(FINDELEMENT(PRISONER_TARGET, ARG:0)) = -1

RETURN 1

;-------------------------------------------------
;解放
;-------------------------------------------------
@PRISONER_TRAIT_FREE(ARG:0)

SIF CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属
	RETURN 0

SIF CFLAG:(ARG:0):外交調教中
	RETURN 0

SIF FLAG:クリアフラグ
	RETURN 0

PRINTFORML 本当に%ANAME(ARG:0)%を解放しますか？
CALL ASK_YN

SIF RESULT == 1
	RETURN 0

CALL KOJO_EVENT(ARG:0, 340)
PRINTFORMW %ANAME(ARG:0)%を解放しました
CALL CAPTURE(ARG:0, 0, TALENT:(ARG:0):崩壊)

SIF FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
	PRISONER_TARGET:(FINDELEMENT(PRISONER_TARGET, ARG:0)) = -1

RETURN 1

;-------------------------------------------------
;追放
;-------------------------------------------------
@PRISONER_TRAIT_BANISH(ARG:0)

SIF CFLAG:(ARG:0):所属 != CFLAG:MASTER:所属
	RETURN 0

SIF FLAG:クリアフラグ
	RETURN 0

PRINTFORML 本当に%ANAME(ARG:0)%を国から追放しますか？

SIF CALC_SHOP_TIME(!IS_ANIMAL(ARG:0)) == SHOP_TIME
	CALL COLOR_PRINTL("追放した場合、最大行動回数減少により直ちに今期の拠点フェイズが終了します！", カラー_警告)

CALL ASK_YN
SIF RESULT == 1
	RETURN 0

CALL KOJO_EVENT(ARG:0, 340)
PRINTFORMW %ANAME(ARG:0)%を追放しました

CALL CHANGE_COUNTRY(ARG:0, 0, 1)
CALL CAPTURE(ARG:0, 0, TALENT:(ARG:0):崩壊)

SIF FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
	PRISONER_TARGET:(FINDELEMENT(PRISONER_TARGET, ARG:0)) = -1

IF CALC_SHOP_TIME() == SHOP_TIME
	PRINTFORMW 人数不足による仕事のしわ寄せにより自由時間がなくなったので拠点フェイズを終了します
	LINES_SHOP = LINECOUNT
	BEGIN TURNEND
ENDIF

RETURN 1

;-------------------------------------------------
;処刑
;-------------------------------------------------
@PRISONER_TRAIT_EXECUTE(ARG:0)

SIF CFLAG:(ARG:0):外交調教中
	RETURN 0

IF TALENT:(ARG:0):妊娠 && !TALENT:(ARG:0):子供人質
	CALL PRISONER_TRAIT_EXECUTE_PREGNANT(ARG:0)
	RETURN RESULT
ENDIF

PRINTFORML 本当に%ANAME(ARG:0)%を処刑しますか？
SIF CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属 && CALC_SHOP_TIME(!IS_ANIMAL(ARG:0)) == SHOP_TIME
	CALL COLOR_PRINTL("追放した場合、最大行動回数減少により直ちに今期の拠点フェイズが終了します！", カラー_警告)

CALL ASK_YN

SIF RESULT == 1
	RETURN 0

CALL KOJO_EVENT(ARG:0, 341)
PRINTFORMW ……………………
PRINTFORMW ……
PRINTFORMW %ANAME(ARG:0)%を処刑しました
PRINTL
CALL EXECUTION(ARG:0)
WAIT

CALL CHANGE_COUNTRY(ARG:0, 0, 1, 1)

SIF FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
	PRISONER_TARGET:(FINDELEMENT(PRISONER_TARGET, ARG:0)) = -1

IF CALC_SHOP_TIME() == SHOP_TIME
	PRINTL
	PRINTFORMW 人数不足による仕事のしわ寄せにより自由時間がなくなったので拠点フェイズを終了します
	LINES_SHOP = LINECOUNT
	BEGIN TURNEND
ENDIF

RETURN 1

;-------------------------------------------------
;触手処刑
;-------------------------------------------------
@PRISONER_TRAIT_EXECUTE_TENTACLE(ARG:0)
#DIM 管理人
#DIM 効果量

管理人 = ID_TO_CHARA(FLAG:触手部屋管理者)

SIF CFLAG:(ARG:0):外交調教中
	RETURN 0

SIF !ITEM:触手部屋 || 管理人 < 0
	RETURN 0

IF !IS_SYOKUSYU_MANAGE(ID_TO_CHARA(FLAG:触手部屋管理者))
	PRINTFORML 設定された触手部屋の管理者（%ANAME(管理人)%）が、現在管理可能な状況にありません
	PRINTW 触手部屋の管理者を設定し直して下さい
	RETURN 0
ENDIF

IF TALENT:(ARG:0):妊娠 && !TALENT:(ARG:0):子供人質
	CALL PRISONER_TRAIT_EXECUTE_PREGNANT_TENTACLE(ARG:0)
	RETURN RESULT
ENDIF

PRINTFORMW 触手部屋の管理者である%ANAME(管理人)%が処刑を実行します
PRINTFORML 本当に%ANAME(ARG:0)%を処刑しますか？

SIF CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属 && CALC_SHOP_TIME(!IS_ANIMAL(ARG:0)) == SHOP_TIME
	CALL COLOR_PRINTL("追放した場合、最大行動回数減少により直ちに今期の拠点フェイズが終了します！", カラー_警告)

CALL ASK_YN

SIF RESULT == 1
	RETURN 0

CALL KOJO_EVENT(ARG:0, 343)
PRINTFORMW ……………………
PRINTFORMW ……
PRINTFORMW %ANAME(ARG:0)%を処刑しました
PRINTL

CALL CHANGE_COUNTRY(ARG:0, 0, 1, 1)
SIF FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
	PRISONER_TARGET:(FINDELEMENT(PRISONER_TARGET, ARG:0)) = -1

;手に入る魔術経験値を計算して取得＆表示
PRINTFORML <%ANAME(管理人)%>

効果量= 30 + BASE:(ARG:0):精神力 / 20 + ABL:(ARG:0):触手 * 10

CALL PRINT_ADD_EXP(管理人, "魔術経験値", 効果量)
CALL TRAIN_AUTO_ABLUP(管理人)
WAIT

IF CALC_SHOP_TIME() == SHOP_TIME
	PRINTFORMW 人数不足による仕事のしわ寄せにより自由時間がなくなったので拠点フェイズを終了します
	LINES_SHOP = LINECOUNT
	BEGIN TURNEND
ENDIF
RETURN 1

;-------------------------------------------------
;妊婦処刑
;-------------------------------------------------
@PRISONER_TRAIT_EXECUTE_PREGNANT(ARG:0)

PRINTFORML 処刑場につれて来られた%ANAME(ARG:0)%は、泣きながら命乞いを始めた
PRINTFORML 『二度と逆らわない、どんな事でもするから、お腹の子だけは助けて』と、必死の形相で懇願している
PRINTL
PRINTFORML 本当に%ANAME(ARG:0)%を処刑しますか？

SIF CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属 && CALC_SHOP_TIME(!IS_ANIMAL(ARG:0)) == SHOP_TIME
	CALL COLOR_PRINTL("追放した場合、最大行動回数減少により直ちに今期の拠点フェイズが終了します！", カラー_警告)

CALL ASK_YN("処刑する", "慈悲をかける")

IF RESULT == 0
	CALL KOJO_EVENT(ARG:0, 341)
	PRINTFORMW ……………………
	PRINTFORMW ……
	PRINTFORMW %ANAME(ARG:0)%をお腹の子共々処刑しました
	PRINTL
	CALL EXECUTION(ARG:0)
	WAIT
	;他国からの評価を下げる
	PRINTL
	PRINTFORMW この所業に各勢力から非難の声が殺到しています

	FOR LOCAL, 1, MAX_COUNTRY
		SIF !IS_COUNTRY(LOCAL) || LOCAL == CFLAG:MASTER:所属
			CONTINUE

		IF LOCAL == CFLAG:(ARG:0):所属
			CALL CHANGE_RELATION_C_TO_C(LOCAL, CFLAG:MASTER:所属, -200, 300)
		ELSE
			CALL CHANGE_RELATION_C_TO_C(LOCAL, CFLAG:MASTER:所属, -100, 150)
		ENDIF
	NEXT

	CALL CHANGE_COUNTRY(ARG:0, 0, 1, 1)
	SIF FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
		PRISONER_TARGET:(FINDELEMENT(PRISONER_TARGET, ARG:0)) = -1

	IF CALC_SHOP_TIME() == SHOP_TIME
		PRINTFORMW 人数不足による仕事のしわ寄せにより自由時間がなくなったので拠点フェイズを終了します
		LINES_SHOP = LINECOUNT
		BEGIN TURNEND
	ENDIF
ELSE
	CALL KOJO_EVENT(ARG:0, 344)
	PRINTFORMW ……………………
	PRINTFORMW ……
	PRINTFORMW 執行人に処刑の中止を命じました
	PRINTFORMW %ANAME(ARG:0)%はその場に蹲り、尊い命の宿ったお腹を両腕で守るように抱え、震える声ですすり泣いた
	PRINTFORMW %ANAME(ARG:0)%は【子供を人質】にとられた…
	CFLAG:(ARG:0):従属度 += 500
	CFLAG:(ARG:0):好感度 -= 1000
	EXP:(ARG:0):トラウマ経験 += 16
	TALENT:(ARG:0):子供人質 = 1
ENDIF

RETURN 1

;-------------------------------------------------
;妊婦触手処刑
;-------------------------------------------------
@PRISONER_TRAIT_EXECUTE_PREGNANT_TENTACLE(ARG:0)
#DIM 管理人
#DIM 効果量

PRINTL
PRINTFORML 触手に形作られた処刑部屋につれて来られた%ANAME(ARG:0)%は、泣きながら命乞いを始めた
PRINTFORMW 『二度と逆らわない、どんな事でもするから、お腹の子だけは助けて』と、必死の形相で懇願している
PRINTL
PRINTFORML 本当に%ANAME(ARG:0)%を処刑しますか？

SIF CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属 && CALC_SHOP_TIME(!IS_ANIMAL(ARG:0)) == SHOP_TIME
	CALL COLOR_PRINTL("追放した場合、最大行動回数減少により直ちに今期の拠点フェイズが終了します！", カラー_警告)

CALL ASK_YN("処刑する", "慈悲をかける")

IF RESULT == 0
	CALL KOJO_EVENT(ARG:0, 343)
	PRINTFORMW ……………………
	PRINTFORMW ……
	PRINTFORMW %ANAME(ARG:0)%をお腹の子共々処刑しました
	PRINTL
	WAIT
	;他国からの評価を下げる
	PRINTL
	PRINTFORMW この所業に各勢力から非難の声が殺到しています

	FOR LOCAL, 1, MAX_COUNTRY
		SIF !IS_COUNTRY(LOCAL) || LOCAL == CFLAG:MASTER:所属
			CONTINUE

		IF LOCAL == CFLAG:(ARG:0):所属
			CALL CHANGE_RELATION_C_TO_C(LOCAL, CFLAG:MASTER:所属, -200, 300)
		ELSE
			CALL CHANGE_RELATION_C_TO_C(LOCAL, CFLAG:MASTER:所属, -100, 150)
		ENDIF
	NEXT

	CALL CHANGE_COUNTRY(ARG:0, 0, 1, 1)
	SIF FINDELEMENT(PRISONER_TARGET, ARG:0) != -1
		PRISONER_TARGET:(FINDELEMENT(PRISONER_TARGET, ARG:0)) = -1

	;手に入る魔術経験値を計算して取得＆表示
	PRINTFORML <%ANAME(管理人)%>

	効果量= 30 + BASE:(ARG:0):精神力 / 20 + ABL:(ARG:0):触手 * 10

	CALL PRINT_ADD_EXP(管理人, "魔術経験値", 効果量)
	CALL TRAIN_AUTO_ABLUP(管理人)
	WAIT
	IF CALC_SHOP_TIME() == SHOP_TIME
		PRINTFORMW 人数不足による仕事のしわ寄せにより自由時間がなくなったので拠点フェイズを終了します
		LINES_SHOP = LINECOUNT
		BEGIN TURNEND
	ENDIF
ELSE
	CALL KOJO_EVENT(ARG:0, 345)
	PRINTFORMW ……………………
	PRINTFORMW ……
	PRINTFORMW 飢えた触手達に処刑の中止を命じました
	PRINTFORMW %ANAME(ARG:0)%はその場に蹲り、尊い命の宿ったお腹を両腕で守るように抱え、震える声ですすり泣いた
	PRINTFORMW %ANAME(ARG:0)%は【子供を人質】にとられた…
	CFLAG:(ARG:0):従属度 += 500
	CFLAG:(ARG:0):好感度 -= 1000
	EXP:(ARG:0):トラウマ経験 += 16
	TALENT:(ARG:0):子供人質 = 1
ENDIF

RETURN 1


code:
;-------------------------------------------------
;「スキル習得」の名称
;-------------------------------------------------
@SHOP_LIFE_NAME41
RESULTS:0 '= "スキル習得"

;-------------------------------------------------
;「スキル習得」の選択可否
;-------------------------------------------------
@SHOP_LIFE_CHECK41
SIF FLAG:クリアフラグ
	RETURN 0
SIF CFLAG:MASTER:捕虜先
	RETURN 0
RETURN 1

;-------------------------------------------------
;「スキル習得」の選択可能キャラ存在判定
;-------------------------------------------------
@SHOP_LIFE_CHECKCHARA41(ARG:0)
;捕虜でない、同一勢力、通常状態または育児中
RETURN CFLAG:MASTER:所属 && CFLAG:MASTER:所属 == CFLAG:(ARG:0):所属

;-------------------------------------------------
;「スキル習得」の左カラムメニューの入力処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY41
FLAG:拠点フェイズページ = 1
FLAG:夜這い = 0
RETURN 0

;-------------------------------------------------
;「スキル習得」の右カラム表示処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SHOW41
CALL COLUMN_RIGHT_TITLE("習得者選択", "0", "1", "", "")
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL
;標準的なキャラリストとページ移動
CALL COLUMN_RIGHT_CHARALIST
RETURN 0

;-------------------------------------------------
;「スキル習得」のリスト１入力処理
;-------------------------------------------------
@SHOP_LIFE_USERSHOP41(対象, 編集モード= 0)
#DIM 対象
#DIM 編集モード
; #DIM FIRST_LINE
; #DIM ジャンル
; #DIM ソート順
; #DIMS ソート順文字列 = "NO", "NO降順", "レベル", "レベル降順"

FLAG:能力表示モード = 能力表示モード_スキル
SHOP_SKILL_MODE '= "LEARN_SKILL"
SHOP_SKILL_LEARN_MODE '= "LEARN_SKILL"

CALL SHOW_INFO_WITH_UI(対象)

; ;あなたを選択するとここで弾かれる？
; IF !編集モード
; 	TRYCALLFORM SHOP_LIFE_CHECKCHARA{FLAG:拠点フェイズ選択コマンド}(対象)
; 	SIF !RESULT
; 		RETURN 0
; ENDIF

; REDRAW 0
; FIRST_LINE = LINECOUNT

; CALL SHOP_LIFE_SKILL_CREATE_LIST(対象, 編集モード, ソート順)

; FOR LOCAL, 0, VARSIZE("SHOP_SKILL_PAGE")
; 	SHOP_SKILL_PAGE:LOCAL = 1
; NEXT

; $SHOW_LOOP

; CALL SINGLE_DRAWLINE

; IF !編集モード
; 	CALL ICPRINT(@"SPを消費し、<%ANAME(対象)%>のスキルを習得・強化します", "", カラー_注意)
; ELSE
; 	CALL ICPRINT(@"<%ANAME(対象)%>のスキルを習得・強化します", "", カラー_注意)
; ENDIF

; PRINTL
; CALL SINGLE_DRAWLINE
; SIF SKILL_SELECT_TAB == ""
; 	SKILL_SELECT_TAB '= "SKILL_LEARN"
; CALL SHOP_LIFE_SKILL_PRINT_TABS(ジャンル)

; IF ジャンル == SKILL_GENRE_NUM
; 	CALL SHOP_LIFE_SKILL_PRINT_FORGET_LIST(対象, 編集モード)
; ELSEIF SKILL_SELECT_TAB == "SKILL_LEARN"
; 	CALL SHOP_LIFE_SKILL_PRINT_LEARN_LIST(ジャンル, 対象, 編集モード)
; ELSEIF SKILL_SELECT_TAB == "SKILL_SLOT_EDIT"
; 	CALL SHOP_LIFE_SKILL_PRINT_SKILL_SLOT(対象, 編集モード)
; ENDIF
; CALL SINGLE_DRAWLINE
; PRINTL
; PRINTBUTTON "[戻る]", 99999

; ;region ボタン入力
; BINPUTS
; CLEARLINE 1
; PRINTL
; IF ISNUMERIC(RESULTS)
; 	RESULT = TOINT(RESULTS)
; 	SELECTCASE RESULT
; 		CASE 0 TO 3000
; 			LOCAL = RESULT
; 			CALL SHOP_LIFE_SKILL_CREATE_LIST(対象, 編集モード, ソート順)
; 			IF LOCAL == 1 && !編集モード
; 				CLEARLINE LINECOUNT - FIRST_LINE
; 				GOTO SHOW_LOOP
; 			ENDIF
; 		CASE 4000 TO (4000 + SKILL_GENRE_NUM)
; 			;タブ切り替え処理,[リセット]タブが押下された場合スキルリセット処理を呼び出し
; 			IF (RESULT - 4000) != SKILL_GENRE_NUM
; 				ジャンル = RESULT - 4000
; 				SKILL_SELECT_TAB '= "SKILL_LEARN"
; 			ELSE
; 				CALL SHOP_LIFE_SKILL_RESET(対象)
; 			ENDIF
; 		CASE 5000
; 			SHOP_SKILL_PAGE:ジャンル --
; 		CASE 5001
; 			SHOP_SKILL_PAGE:ジャンル ++
; 		CASE 5002
; 			SHOP_SKILL_PAGE:ジャンル -= 5
; 		CASE 5003
; 			SHOP_SKILL_PAGE:ジャンル += 5
; 		CASE 6000
; 			SHOP_LIFE41_OMIT_CONFIRM = SHOP_LIFE41_OMIT_CONFIRM ? 0 # 1
; 		CASE 99997
; 			ソート順 = ROUND_INCREMENT(ソート順, 0, VARSIZE("ソート順文字列") - 1)
; 			CALL SHOP_LIFE_SKILL_CREATE_LIST(対象,編集モード,ソート順)
; 			CLEARLINE LINECOUNT - FIRST_LINE
; 			GOTO SHOW_LOOP
; 		CASE 99998
; 			CALL SHOP_LIFE_SWAP_SKILL(対象)
; 			CLEARLINE LINECOUNT - FIRST_LINE
; 			GOTO SHOW_LOOP
; 			;戻る
; 		CASE 99999
; 			RETURN 0
; 	ENDSELECT
; ELSEIF RESULTS == "ITEM_MENU"
; 	CALL HO_ITEM_MENU
; ELSEIF RESULTS == "SHOW_INFO"
; 	CALL SHOW_INFO_WITH_UI(対象, 0)
; ELSEIF RESULTS == "SKILL_SLOT_EDIT"
; 	SKILL_SELECT_TAB '= "SKILL_SLOT_EDIT"
; ELSEIF SKILL_SELECT_TAB == "SKILL_SLOT_EDIT"
; 	CALL SKILL_EDIT_ACTIVE_SKILL_SLOT(対象, RESULTS)
; ELSEIF SKILL_SELECT_TAB == "SKILL_LEARN"
; 	CALL SHOP_LEARN_SKILL(対象, RESULTS, ジャンル)
; ENDIF

; CLEARLINE LINECOUNT - FIRST_LINE
; GOTO SHOW_LOOP
;endregion

;----------------------------
;スキル習得
;----------------------------
@SHOP_LEARN_SKILL(CHARA_ID, SKILL_DEF_NAME, SKILL_SUB_GENRE)
#DIM CHARA_ID
#DIMS SKILL_DEF_NAME
#DIM SKILL_SUB_GENRE
#DIMS DYNAMIC STR_GENRE
#DIMS DYNAMIC _XML_SKILL
#DIMS DYNAMIC SKILL_NAME
#DIM  DYNAMIC MAJOR_GENRE
#DIMS DYNAMIC SKILL_COOLTIME
#DIM  DYNAMIC NOW_LV
#DIM  DYNAMIC MAX_LV
#DIM  DYNAMIC IS_ACTIVE_SKILL
#DIM  LEARN_NG
#DIM  DYNAMIC LEARNABLE
#DIM  DYNAMIC HAS_EXCLUSIVE_SKILL

STR_GENRE = SKILL_GENRE_ENG:SKILL_SUB_GENRE
;スキル定義のOUTER_XML取得
XML_GET XMLID_SKILL:SKILL_SUB_GENRE, @"//defname[@parentname='%SKILL_DEF_NAME%']", _XML_SKILL, 3

;大分類の取得
XML_GET _XML_SKILL, "//majorgenre", RESULTS, 1
MAJOR_GENRE = FINDELEMENT(SKILL_MAJOR_GENRE_ENG, RESULTS)
IF MAJOR_GENRE == -1
	DEBUGPRINTFORML ERROR:%SKILL_DEF_NAME%
	THROW XML定義にMAJOR_GENREが未指定です(LIFEまたはADVが必要)
ENDIF

LEARN_NG = 0
;アクティブスキルか確認
XML_GET _XML_SKILL, "//subcategory", RESULTS, 1
IF RESULTS == "ACTIVE"
	IS_ACTIVE_SKILL = 1
ENDIF

;レベルの確認
XML_GET _XML_SKILL, "//maxlv", RESULTS, 1
MAX_LV = TOINT(RESULTS)
CALL SKILL_GET_LEVEL(CHARA_ID, MAJOR_GENRE, SKILL_DEF_NAME)
NOW_LV = RESULT
IF NOW_LV == MAX_LV
	CALLF TAG_PRINT(@"@C:{カラー_注意}@このスキルは既に最大レベルです@/C@", 1)
	LEARN_NG = 1
ENDIF

;スキルポイント残余確認
CALL SKILL_CHECK_USED_SKILL_POINT(CHARA_ID, MAJOR_GENRE)
IF RESULT >= BASE_SKILL_POINT:CHARA_ID:MAJOR_GENRE
	LEARN_NG = 1
ENDIF

;レベル0かつスキルポイント不足の場合
;レベル1以上の場合は忘却選択肢があるので最終確認まで進む
IF (LEARN_NG && NOW_LV == 0)
	CALLF TAG_PRINT(@"@C:{カラー_注意}@キャラクターのスキルポイントが足りません@/C@", 1)
ENDIF

;習得条件の確認
CALL SKILL_CHECK_CHARA_CAN_LEARN(CHARA_ID, _XML_SKILL, MAJOR_GENRE)
LEARNABLE = RESULT
CALL SKILL_CHECK_EXCLUSIVE_CONDITION(CHARA_ID, _XML_SKILL, MAJOR_GENRE)
HAS_EXCLUSIVE_SKILL = RESULT
IF !LEARNABLE || HAS_EXCLUSIVE_SKILL
	CALLF TAG_PRINT(@"@C:{カラー_注意}@キャラクターがスキルの習得条件を満たしていません@/C@", 1)
	;スキル習得条件の確認（条件表示あり）
	CALL SKILL_CHECK_CHARA_CAN_LEARN(CHARA_ID, _XML_SKILL, MAJOR_GENRE, 1)
	CALL SKILL_CHECK_EXCLUSIVE_CONDITION(CHARA_ID, _XML_SKILL, MAJOR_GENRE, 1)
	LEARN_NG = 1
ENDIF

IF (LEARN_NG && NOW_LV == 0) || (LEARN_NG && SHOP_SKILL_LEARN_OMIT_CONFIRM_FLAG)
	WAIT
	RETURN 0
ENDIF

;最終確認
XML_GET _XML_SKILL, "//skillname", RESULTS, 1
SKILL_NAME = %RESULTS%
;確認省略設定時はスキップ
IF !SHOP_SKILL_LEARN_OMIT_CONFIRM_FLAG
	CALL COLOR_LINE
	IF NOW_LV == 0
		CALLF TAG_PRINT(@"@S:1@<%SKILL_NAME%>@/S@", 1)
		PRINTFORML 以下のスキルを習得・強化します。よろしいですか？
		PRINTL
		CALL GET_SKILL_DESC(SKILL_DEF_NAME, SKILL_SUB_GENRE, NOW_LV + 1)
		HTML_PRINT @"・%RESULTS%"
		VARSET RESULTS
		XML_GET _XML_SKILL, @"//cooltime/li[{NOW_LV + 1}]", RESULTS, 1
		SKILL_COOLTIME = %RESULTS%
		SIF SKILL_COOLTIME != ""
			CALLF TAG_PRINT (@"・クールタイム:%SKILL_COOLTIME%", 1)
		PRINTL
		CALL ASK_YN
		SIF RESULT
			RETURN 0
	ELSE
		IF !LEARN_NG
			CALLF TAG_PRINT(@"@S:1@<%SKILL_NAME%>@/S@", 1)
			PRINTFORML 以下のスキルを強化または忘却できます
			PRINTFORML ※忘却した場合、スキルポイントは返却されます
			PRINTL
			CALLF TAG_PRINT (@"@C:{カラー_選択中}@【強化前】@/C@", 1)
			CALL GET_SKILL_DESC(SKILL_DEF_NAME, SKILL_SUB_GENRE, NOW_LV)
			HTML_PRINT @"・%RESULTS%"
			VARSET RESULTS
			XML_GET _XML_SKILL, @"//cooltime/li[{NOW_LV}]", RESULTS, 1
			SKILL_COOLTIME = %RESULTS%
			SIF SKILL_COOLTIME != ""
				CALLF TAG_PRINT (@"・クールタイム:%SKILL_COOLTIME%", 1)
			PRINTL
			CALLF TAG_PRINT (@"@C:{カラー_緑}@【強化後】@/C@", 1)
			CALL GET_SKILL_DESC(SKILL_DEF_NAME, SKILL_SUB_GENRE, NOW_LV + 1)
			HTML_PRINT @"・%RESULTS%"
			VARSET RESULTS
			XML_GET _XML_SKILL, @"//cooltime/li[{NOW_LV + 1}]", RESULTS, 1
			SKILL_COOLTIME = %RESULTS%
			SIF SKILL_COOLTIME != ""
				CALLF TAG_PRINT (@"・クールタイム:%SKILL_COOLTIME%", 1)
			PRINTL
			CALL ASK_MULTI("強化する", "忘却する", "キャンセル")
			IF RESULT == 1
				VARI 解除フラグ = 1
			ELSEIF RESULT == 2
				RETURN 0
			ENDIF
		ELSE
			VARI 解除フラグ = 1
		ENDIF
	ENDIF
ENDIF

;習得処理
IF !解除フラグ
	IF !NOW_LV
		CALLF TAG_PRINT(@"@C:{カラー_注意}@%ANAME(CHARA_ID)%はスキル<%SKILL_NAME%>を新たに習得した！@/C@", 1)
		CALL SKILL_LEARN2(CHARA_ID, MAJOR_GENRE, SKILL_DEF_NAME, 1)
		IF LIST_COUNT(_LIST_ACTIVE_SKILL_SLOT:CHARA_ID:0) < 3 && IS_ACTIVE_SKILL
			PRINTFORML このままスキルをスキルスロットにセットしますか？
			CALL ASK_YN()
			IF !RESULT
				CALL SKILL_EDIT_ACTIVE_SKILL_SLOT(CHARA_ID, SKILL_DEF_NAME)
			ENDIF
		ENDIF
		WAIT
	ELSE
		CALLF TAG_PRINT(@"@C:{カラー_注意}@%ANAME(CHARA_ID)%のスキル<%SKILL_NAME%>が強化された！@/C@", 1)
		CALL SKILL_LEARN2(CHARA_ID, MAJOR_GENRE, SKILL_DEF_NAME, NOW_LV + 1)
		WAIT
	ENDIF
ELSE
	VARS FORGET_SKILL_LIST
	CALL SKILL_CHECK_CHARA_FORGET_SKILL(CHARA_ID, SKILL_DEF_NAME, MAJOR_GENRE, SKILL_SUB_GENRE)
	FORGET_SKILL_LIST = %RESULTS%
	CALLF TAG_PRINT(@"スキル@C:{カラー_注意}@<%SKILL_NAME%>@/C@を忘却し、習得状況をリセットできます", 1)
	IF LIST_COUNT(FORGET_SKILL_LIST) > 1
		CALLF TAG_PRINT(@"@C:{カラー_注意}@※習得前提を満たさなくなる以下のスキルもあわせて忘却されます@/C@", 1)
		PRINTL
		FOR LOCAL, 1, LIST_COUNT(FORGET_SKILL_LIST)
			CALL SKILL_GET_NAME(SKILL_SUB_GENRE, LIST_GET(FORGET_SKILL_LIST, LOCAL))
			CALLF TAG_PRINT(@"　・<%RESULTS%>", 1)
		NEXT
	ENDIF
	PRINTL
	PRINTFORML このスキルを忘却しますか？
	PRINTL
	CALL ASK_YN
	IF RESULT
		RETURN 0
	ELSE
		;スキル忘却処理の実行
		FOR LOCAL, 0, LIST_COUNT(FORGET_SKILL_LIST)
			CALL SKILL_FORGET(CHARA_ID, MAJOR_GENRE, LIST_GET(FORGET_SKILL_LIST, LOCAL))
		NEXT
	ENDIF
ENDIF
RETURN 1

; @SHOP_LIFE_SKILL_PRINT_SKILL_SLOT(CHARA_ID, 編集モード)
; #DIM  CHARA_ID
; #DIM  編集モード
; #DIM  CONST MAJOR_GENRE = スキル_大分類_冒険
; #DIM  CONST ジャンル     = スキル_ジャンル_戦闘
; #DIM  CONST 項目数 = 16
; #DIM  DYNAMIC 最大ページ
; #DIM  DYNAMIC 開始要素
; #DIM  DYNAMIC LEARNED_SKILL_NUM
; #DIM  DYNAMIC PRINT_SKILL_NUM
; #DIMS DYNAMIC SKILL_DEF_NAME
; #DIMS DYNAMIC STR_GENRE
; #DIMS DYNAMIC _XML_SKILL
; #DIM  DYNAMIC F_COL = カラー_白
; #DIM  DYNAMIC NOW_LV
; #DIM  DYNAMIC IDX

; VARSET SKILL_DEF_LIST

; ;タブで選択されたジャンルのスキルXML定義を読み込み
; STR_GENRE = %SKILL_GENRE_ENG:ジャンル%
; XML_DOCUMENT XMLID_SKILL:ジャンル, RESULTS
; XML_GET XMLID_SKILL:ジャンル, @"//defname[.//category[(text()='%STR_GENRE%')]][.//subcategory[(text()='ACTIVE')]]/@parentname", SKILL_DEF_LIST
; SKILL_NUM = RESULT

; FOR LOCAL, 0, SKILL_NUM
; 	CALL SKILL_GET_LEVEL(CHARA_ID, MAJOR_GENRE, SKILL_DEF_LIST:LOCAL)
; 	IF RESULT < 1
; 		CONTINUE
; 	ENDIF
; 	LEARNED_SKILL_NUM ++
; NEXT

; ;ページ算出
; 最大ページ = MAX(LEARNED_SKILL_NUM - 1, 0) / 項目数 + 1
; IF SHOP_SKILL_PAGE:ジャンル <= 0
; 	SHOP_SKILL_PAGE:ジャンル = 最大ページ
; ELSEIF SHOP_SKILL_PAGE:ジャンル > 最大ページ
; 	SHOP_SKILL_PAGE:ジャンル = 1
; ENDIF

; CALL SINGLE_DRAWLINE
; PRINTFORM -アクティブスキルスロットの編集-
; PRINTL
; PRINTFORML 習得済みのアクティブスキルの中から、戦闘時に発動可能なスキルを3つまでセットできます
; PRINTL
; CALL SINGLE_DRAWLINE

; 開始要素 = ((SHOP_SKILL_PAGE:ジャンル) - 1) * 項目数
; IDX = 開始要素
; WHILE 1
; 	SIF IDX > SKILL_NUM || PRINT_SKILL_NUM > 項目数
; 		BREAK
; 	;;スキル定義のOUTER_XML取得
; 	XML_GET XMLID_SKILL:ジャンル, @"//defname[@parentname='%SKILL_DEF_LIST:IDX%']", _XML_SKILL, 3
; 	IF RESULT
; 		;修得済みでなければ出力しない
; 		CALL SKILL_GET_LEVEL(CHARA_ID, MAJOR_GENRE, SKILL_DEF_LIST:IDX)
; 		NOW_LV = RESULT
; 		IF NOW_LV > 0
; 			CALL SKILL_PRINT_LINE(ジャンル, CHARA_ID, _XML_SKILL, "SKILL_SLOT_EDIT")
; 			IF RESULT
; 				PRINT_SKILL_NUM ++
; 				PRINTL
; 			ENDIF
; 		ENDIF
; 	ENDIF
; 	IDX ++
; WEND

; IF 項目数 - PRINT_SKILL_NUM > 0
; 	FOR LOCAL, PRINT_SKILL_NUM, 項目数
; 		PRINTL
; 		PRINTL
; 	NEXT
; ENDIF

; CALL SINGLE_DRAWLINE
; PRINTFORML {SHOP_SKILL_PAGE:ジャンル} / {最大ページ}
; CALL SINGLE_DRAWLINE
; PRINTBUTTON "[前のページ]", 5000
; PRINTFORM %TOSTR_SPACE(3)%
; PRINTBUTTON "[次のページ]", 5001
; PRINTL

@SHOP_LIFE_SKILL_RESET(CHARA_ID)
#DIM CHARA_ID
PRINTFORML
CALLF TAG_PRINT(@"@C:{カラー_注意}@%ANAME(CHARA_ID)%@/C@の生活スキルまたは冒険スキルの習得状況をリセットします", 1)
CALLF TAG_PRINT(@"使用したスキルポイントは全て返却されます", 1)
PRINTL
CALL ASK_MULTI("生活スキルをリセット", "冒険スキルをリセット", "性技スキルをリセット", "キャンセル")
SELECTCASE RESULT
	CASE 0
		CALLF TAG_PRINT(@"@C:{カラー_注意}@%ANAME(CHARA_ID)%@/C@の生活スキルの習得状況をリセットします。本当によろしいですか？", 1)
		CALL ASK_YN()
		IF RESULT == 0
			CALLF TAG_PRINT(@"@C:{カラー_注意}@%ANAME(CHARA_ID)%@/C@の生活スキルの習得状況をリセットしました", 1)
			_DIC_SKILL_LIST:CHARA_ID:0 '= ""
		ELSE
			RETURN 0
		ENDIF
	CASE 1
		CALLF TAG_PRINT(@"@C:{カラー_注意}@%ANAME(CHARA_ID)%@/C@の冒険スキルの習得状況をリセットします。本当によろしいですか？", 1)
		CALLF TAG_PRINT(@"@C:{カラー_注意}@※スキルスロットのセット状態もリセットされます", 1)
		CALL ASK_YN()
		IF RESULT == 0
			CALLF TAG_PRINT(@"@C:{カラー_注意}@%ANAME(CHARA_ID)%@/C@の冒険スキルの習得状況をリセットしました", 1)
			_DIC_SKILL_LIST:CHARA_ID:1 '= ""
			_LIST_ACTIVE_SKILL_SLOT:CHARA_ID:0 '= ""
		ELSE
			RETURN 0
		ENDIF
	CASE 2
		CALLF TAG_PRINT(@"@C:{カラー_注意}@%ANAME(CHARA_ID)%@/C@の性技スキルの習得状況をリセットします。本当によろしいですか？", 1)
		CALL ASK_YN()
		IF RESULT == 0
			CALLF TAG_PRINT(@"@C:{カラー_注意}@%ANAME(CHARA_ID)%@/C@の性技スキルの習得状況をリセットしました", 1)
			_DIC_SKILL_LIST:CHARA_ID:2 '= ""
		ELSE
			RETURN 0
		ENDIF
	CASEELSE
		RETURN 0
ENDSELECT

; ;----------------------------
; ;スキルタブ描画
; ;----------------------------
; @SHOP_LIFE_SKILL_PRINT_TABS(ジャンル)
; #DIM ジャンル
; #DIM DYNAMIC F_COL = カラー_白
; FOR LOCAL, 0, SKILL_GENRE_NUM
; 	IF ジャンル == LOCAL && SKILL_SELECT_TAB == "SKILL_LEARN"
; 		SETCOLOR カラー_選択中
; 	ENDIF
; 	PRINTBUTTON @"[%SKILL_GENRE_JP:LOCAL%]", 4000 + LOCAL
; 	PRINT
; 	RESETCOLOR
; NEXT
; SIF SKILL_SELECT_TAB == "SKILL_SLOT_EDIT"
; 	F_COL = カラー_選択中
; CALLF TAG_PRINT(@"@B:SKILL_SLOT_EDIT@@C:{F_COL}@[スキルスロット編集]  @/C@@/B@")

; PRINTBUTTON @"[スキルリセット]  ", 4000 + LOCAL
; CALLF TAG_PRINT(@"@B:ITEM_MENU@[アイテム確認]  @/B@")
; CALLF TAG_PRINT(@"@B:SHOW_INFO@[キャラ情報]  @/B@")

; IF SHOP_LIFE41_OMIT_CONFIRM
; 	SETCOLOR カラー_選択中
; 	LOCALS = ☑
; ELSE
; 	LOCALS = □
; ENDIF
; PRINTBUTTON @"%LOCALS% 習得・強化確認を省略", 6000
; PRINT

; RESETCOLOR
; PRINTL

;----------------------------
;習得可能スキル描画
;----------------------------
;@SHOP_LIFE_SKILL_PRINT_LEARN_LIST(ジャンル, 対象, 編集モード)
; #DIM 対象
; #DIM ジャンル
; #DIM スキル
; #DIM 最大ページ
; #DIM CONST 項目数 = 16
; #DIM 空きスロット
; #DIM 編集モード
; #DIM レベル
; #DIM DYNAMIC PRINT_SKILL_NUM
; #DIM DYNAMIC HIDE_SKILL_NUM
; #DIM DYNAMIC 開始要素
; #DIMS DYNAMIC STR_GENRE
; #DIMS DYNAMIC _XML_SKILL
; #DIM DYNAMIC F_COL = カラー_白

; ;タブで選択されたジャンルのスキルXML定義を読み込み
; STR_GENRE = %SKILL_GENRE_ENG:ジャンル%
; XML_DOCUMENT XMLID_SKILL:ジャンル, RESULTS
; XML_GET XMLID_SKILL:ジャンル, @"//defname[.//category[(text()='%STR_GENRE%')]][.//skillrank[(text()='UNIQUE')]][.//reqchara[@name='%CSTR:(対象):99%']]/@parentname | //defname[.//category[(text()='%STR_GENRE%')]][.//skillrank[(text()='COMMON')]]/@parentname", SKILL_DEF_LIST
; SKILL_NUM = RESULT

; 最大ページ = MAX(SKILL_NUM - 1, 0) / 項目数 + 1

; IF SHOP_SKILL_PAGE:ジャンル <= 0
; 	SHOP_SKILL_PAGE:ジャンル = 最大ページ
; ELSEIF SHOP_SKILL_PAGE:ジャンル > 最大ページ
; 	SHOP_SKILL_PAGE:ジャンル = 1
; ENDIF

; CALL SINGLE_DRAWLINE
; PRINTFORM -スキルの習得-
; SELECTCASE ジャンル
; 	CASE スキル_ジャンル_生活
; 		CALL SKILL_CHECK_USED_SKILL_POINT(対象, スキル_大分類_生活)
; 		USED_SKILL_POINT:対象:スキル_大分類_生活 = RESULT
; 		SIF USED_SKILL_POINT:対象:スキル_大分類_生活 == BASE_SKILL_POINT:対象:スキル_大分類_生活
; 			F_COL = カラー_注意
; 		CALLF TAG_PRINT(@"@C:{F_COL}@　生活SP({USED_SKILL_POINT:対象:スキル_大分類_生活}/{BASE_SKILL_POINT:対象:スキル_大分類_生活})@/C@", 1)
; 		PRINTL
; 		PRINTL
; 	CASE スキル_ジャンル_戦闘, スキル_ジャンル_クエスト
; 		CALL SKILL_CHECK_USED_SKILL_POINT(対象, スキル_大分類_冒険)
; 		USED_SKILL_POINT:対象:スキル_大分類_冒険 = RESULT
; 		SIF USED_SKILL_POINT:対象:スキル_大分類_冒険 == BASE_SKILL_POINT:対象:スキル_大分類_冒険
; 			F_COL = カラー_注意
; 		CALLF TAG_PRINT(@"@C:{F_COL}@　冒険SP({USED_SKILL_POINT:対象:スキル_大分類_冒険}/{BASE_SKILL_POINT:対象:スキル_大分類_冒険})@/C@", 1)
; 		CALLF TAG_PRINT(@"@C:{カラー_注釈}@パッシブスキル(PSV)は戦闘中常に効果を発揮します@/C@", 1)
; 		CALLF TAG_PRINT(@"@C:{カラー_注意}@アクティブスキル(ACT)は[スキルスロット編集]からスキルをセットすることで戦闘中使用可能です@/C@", 1)
; 	CASE スキル_ジャンル_性技
; 		CALL SKILL_CHECK_USED_SKILL_POINT(対象, スキル_大分類_性技)
; 		USED_SKILL_POINT:対象:スキル_大分類_性技 = RESULT
; 		SIF USED_SKILL_POINT:対象:スキル_大分類_性技 == BASE_SKILL_POINT:対象:スキル_大分類_性技
; 			F_COL = カラー_注意
; 		CALLF TAG_PRINT(@"@C:{F_COL}@　性技SP({USED_SKILL_POINT:対象:スキル_大分類_性技}/{BASE_SKILL_POINT:対象:スキル_大分類_性技})@/C@", 1)
; 		PRINTL
; 		PRINTL
; ENDSELECT
; CALL SINGLE_DRAWLINE

; 開始要素 = ((SHOP_SKILL_PAGE:ジャンル) - 1) * 項目数
; FOR LOCAL, 開始要素, 開始要素 + 項目数
; 	SIF LOCAL == SKILL_NUM
; 		BREAK
; 	;;スキル定義のOUTER_XML取得
; 	XML_GET XMLID_SKILL:ジャンル, @"//defname[@parentname='%SKILL_DEF_LIST:LOCAL%']", _XML_SKILL, 3
; 	CALL SKILL_PRINT_LINE(ジャンル, 対象, _XML_SKILL)
; 	PRINTL
; 	PRINT_SKILL_NUM ++
; NEXT

; IF 項目数 - PRINT_SKILL_NUM > 0
; 	FOR LOCAL, 0, 項目数 - PRINT_SKILL_NUM
; 		PRINTL
; 		PRINTL
; 	NEXT
; ENDIF

; CALL SINGLE_DRAWLINE
; PRINTFORML {SHOP_SKILL_PAGE:ジャンル} / {最大ページ}
; CALL SINGLE_DRAWLINE
; PRINTBUTTON "[前のページ]", 5000
; PRINTFORM %TOSTR_SPACE(3)%
; PRINTBUTTON "[次のページ]", 5001
; PRINTL

@SKILL_PRINT_LINE(SKILL_SUB_GENRE, CHARA_ID, _XML_SKILL, MODE = "SKILL_LEARN")
#DIM SKILL_SUB_GENRE
#DIM CHARA_ID
#DIMS _XML_SKILL
#DIMS MODE
#DIMS SKILL_LEARN
#DIMS DYNAMIC SKILL_DEF_NAME
#DIMS DYNAMIC SKILL_NAME
#DIMS DYNAMIC DESCRIPTION_TEXT
#DIM  DYNAMIC MAJOR_GENRE
#DIM  DYNAMIC MAX_LV
#DIM  DYNAMIC NOW_LV
#DIM  DYNAMIC RATE, 3
#DIM  DYNAMIC F_COL
#DIM  DYNAMIC PRINT_LINE
#DIM  DYNAMIC HAS_SKILL_IN_SLOT
#DIM  DYNAMIC LEARNABLE
#DIM  DYNAMIC HAS_EXCLUSIVE_SKILL
#DIMS DYNAMIC HINT_TEXT

#DIM  CONST   MAX_ROWS = 3
#DIM  CONST   MAX_COLS = 4
#DIM  CONST   COLS_LENGTH = 24, 8, 92, 42
#DIMS DYNAMIC TABLE, 3, 4
#DIMS DYNAMIC ROWS, 4
#DIMS DYNAMIC RESULTS_TEXT, 4

VARSET RESULTS

F_COL = カラー_白
;;スキル定義から出力行を生成
LOCALS '= ""

;定義名取得
XML_GET _XML_SKILL, @"//defname/@parentname", SKILL_DEF_NAME, 1
IF MODE == "EDIT_SKILL_SLOT"
	IF LIST_INDEXOF(_LIST_ACTIVE_SKILL_SLOT:CHARA_ID:0, SKILL_DEF_NAME) != -1
		HAS_SKILL_IN_SLOT = 1
		F_COL = カラー_選択中
	ENDIF
ENDIF

;大分類取得
XML_GET _XML_SKILL, "//majorgenre", RESULTS,1
MAJOR_GENRE = FINDELEMENT(SKILL_MAJOR_GENRE_ENG, RESULTS)
XML_GET _XML_SKILL, "//skillname", RESULTS,1
SKILL_NAME = %RESULTS%
IF STRLENS(SKILL_NAME) > 16
	SKILL_NAME = %TOHALF(SKILL_NAME)%
ENDIF

CALL SKILL_CHECK_CHARA_CAN_LEARN(CHARA_ID, _XML_SKILL, MAJOR_GENRE,, 1)
LEARNABLE = RESULT
IF !LEARNABLE
	;ishidden指定なら行自体を表示しない
	XML_GET _XML_SKILL, "//ishidden", RESULTS, 1
	SIF TOUPPER(RESULTS) == "TRUE"
		RETURN 0
	F_COL = カラー_選択不可
ENDIF

CALL SKILL_CHECK_EXCLUSIVE_CONDITION(CHARA_ID, _XML_SKILL, MAJOR_GENRE)
HAS_EXCLUSIVE_SKILL = RESULT
SIF HAS_EXCLUSIVE_SKILL
	F_COL = カラー_選択不可

;スキル名
IF !HAS_SKILL_IN_SLOT
	TABLE:0:0 += @"・　@B:[SKILL_DEF_NAME:%SKILL_DEF_NAME%]@%SKILL_NAME%@/B@"
ELSE
	TABLE:0:0 += @"★　@B:[SKILL_DEF_NAME:%SKILL_DEF_NAME%]@%SKILL_NAME%@/B@"
ENDIF

;スキルレベル
XML_GET _XML_SKILL, "//maxlv", RESULTS,1
MAX_LV = TOINT(RESULTS)
CALL SKILL_GET_LEVEL(CHARA_ID, MAJOR_GENRE, SKILL_DEF_NAME)
NOW_LV = RESULT
TABLE:0:1 += @"Lv:{NOW_LV}/{MAX_LV}"

;説明文
CALL GET_SKILL_DESC(SKILL_DEF_NAME, SKILL_SUB_GENRE, NOW_LV == 0 ? 1 # NOW_LV,,1, "\\n")
DESCRIPTION_TEXT = %RESULTS%
SPLIT DESCRIPTION_TEXT, "\\n", ROWS
FOR LOCAL, 0, MIN(RESULT, MAX_ROWS)
	TABLE:LOCAL:2 += ROWS:LOCAL
NEXT

HINT_TEXT += GENERATE_EXCLUSIVE_SKILL_HINT(CHARA_ID, _XML_SKILL)

IF !LEARNABLE
	CALL GENERATE_UNLOCK_HINT("OUTPUT")
	HINT_TEXT '= RESULTS + "\\n" + HINT_TEXT
ENDIF

SPLIT HINT_TEXT, "\\n", ROWS
FOR LOCAL, 0, MIN(RESULT, MAX_ROWS)
	TABLE:LOCAL:3 += TAG_PRINT_SHAPE(ROWS:LOCAL, COLS_LENGTH:3, 1, 0)
NEXT
;行出力
;CALLF TAG_PRINTH(@"@C:{F_COL}@%LOCALS%@/C@", 1)

VARI I
VARI J
FOR I, 0, MAX_ROWS
	LOCALS '= ""
	FOR J, 0, MAX_COLS
		LOCALS += TAG_PRINT_SHAPE(TABLE:I:J, COLS_LENGTH:J, 1)
	NEXT
	RESULTS_TEXT:I '= @"@C:{F_COL}@%LOCALS%@/C@"
NEXT

RESULTS:0 = %RESULTS_TEXT:0%
RESULTS:1 = %RESULTS_TEXT:1%
RESULTS:2 = %RESULTS_TEXT:2%
RESULTS:3 = %RESULTS_TEXT:3%

RETURN 1

[SKIPSTART]
@GENERATE_UNLOCK_HINT_FROM_REQSKILL(CHARA_ID, _XML_SKILL)
#DIM  CHARA_ID
#DIMS _XML_SKILL
#DIM  REQ_NUM
#DIMS REQUIREMENTS, 10
#DIMS SKILL_DEF_NAME
#DIM  SKILL_GENRE
#DIMS DYNAMIC TEXT

TEXT '= "要求："

REQ_NUM = XML_GET(_XML_SKILL, @"//reqCondition/@hintText", REQUIREMENTS, 1)
FOR LOCAL, 0, REQ_NUM
	CALL SKILL_TEXT_REPLACE_COMMON_TAGS(REQUIREMENTS:LOCAL, CHARA_ID)
	TEXT += @"%REQUIREMENTS:LOCAL% "
NEXT

REQ_NUM = XML_GET(_XML_SKILL, @"//reqtalent/@name", REQUIREMENTS, 1)
FOR LOCAL, 0, REQ_NUM
	SELECTCASE REQUIREMENTS:LOCAL
		CASE "FALL"
			TEXT += "<陥落>"
		CASE "LOVER"
			TEXT += "<恋慕/親愛/服従/隷属>"
		CASE "SLAVE"
			TEXT += "<服従/隷属/烙印>"
		CASE "CLOSE"
			TEXT += "<陥落>or<親友>"
		CASEELSE
			TEXT += @"<%REQUIREMENTS:LOCAL%>"
	ENDSELECT
	TEXT += " "
NEXT

REQ_NUM = XML_GET(_XML_SKILL, @"//reqNasty/@name", REQUIREMENTS, 1)
FOR LOCAL, 0, REQ_NUM
	TEXT += @"<%REQUIREMENTS:LOCAL%>"
	TEXT += " "
NEXT

REQ_NUM = XML_GET(_XML_SKILL, @"//reqskill", REQUIREMENTS, 3)
FOR LOCAL, 0, REQ_NUM
	XML_GET REQUIREMENTS:LOCAL, @"//@name", SKILL_DEF_NAME, 1
	FOR SKILL_GENRE, 0, VARSIZE("SKILL_GENRE_JP")
		RESULTS = %GET_SKILL_NAME(SKILL_DEF_NAME, SKILL_GENRE)%
		SIF RESULTS != ""
			BREAK
	NEXT
	SIF STRLENS(RESULTS) > 16
		RESULTS = %TOHALF(RESULTS)%
	TEXT += RESULTS
	XML_GET REQUIREMENTS:LOCAL, @"//@value", RESULTS, 1
	TEXT += @"(Lv%RESULTS%)"
	TEXT += " "
NEXT

REQ_NUM = XML_GET(_XML_SKILL, @"//reqparam", REQUIREMENTS, 3)
FOR LOCAL, 0, REQ_NUM
	XML_GET REQUIREMENTS:LOCAL, @"//@name", RESULTS, 1
	TEXT += RESULTS
	XML_GET REQUIREMENTS:LOCAL, @"//@value", RESULTS, 1
	TEXT += @"(%RESULTS%)"
	TEXT += " "
NEXT

RESULTS = %TEXT%
[SKIPEND]

@GENERATE_EXCLUSIVE_SKILL_HINT(CHARA_ID, _XML_SKILL)
#FUNCTIONS
#DIM  CHARA_ID
#DIMS _XML_SKILL
#DIM  REQ_NUM
#DIMS REQUIREMENTS, 10
#DIM  SKILL_GENRE
#DIMS DYNAMIC TEXT
#DIMS SKILL_NAME
#DIM  HAS_EXCLUSIVE_SKILL

REQ_NUM = XML_GET(_XML_SKILL, @"//exclusiveSkill/@name", REQUIREMENTS, 1)

SIF REQ_NUM == 0
	RETURNF ""

TEXT '= @"@C:{カラー_注釈}@排他：@/C@"
FOR LOCAL, 0, REQ_NUM
	FOR SKILL_GENRE, 0, VARSIZE("SKILL_GENRE_JP")
		RESULTS = %GET_SKILL_NAME(REQUIREMENTS:LOCAL, SKILL_GENRE)%
		IF RESULTS != ""
			SKILL_NAME = %RESULTS%
			HAS_EXCLUSIVE_SKILL = SKILL_GET_LEVELF(CHARA_ID, SKILL_GENRE, REQUIREMENTS:LOCAL) > 0 ? 1 # 0
			BREAK
		ENDIF
	NEXT
	SIF STRLENS(SKILL_NAME) > 16
		SKILL_NAME = %TOHALF(SKILL_NAME)%
	IF HAS_EXCLUSIVE_SKILL
		TEXT += @"@C:{カラー_ダークレッド}@%SKILL_NAME%@/C@"
	ELSE
		TEXT += @"@C:{カラー_注釈}@%SKILL_NAME%@/C@"
	ENDIF
	TEXT += " "
NEXT

RETURNF TEXT

;汎用タグ置換
@SKILL_TEXT_REPLACE_COMMON_TAGS(TEXT, CHARA_ID = -1)
#DIMS REF TEXT
#DIM  CHARA_ID
#DIM  TAG_COUNT
#DIM  GROUP_COUNT
#DIMS TAGS, 10
#DIMS USER_TAG
#DIMS USER_VALUE
#DIM ITER_I

TAG_COUNT = REGEXPMATCH(TEXT, "(?<=\\[\\$).*?(?=\\])", GROUP_COUNT, TAGS)
;DEBUGPRINTFORML TAG_COUNT = {TAG_COUNT}
FOR ITER_I, 0, TAG_COUNT
	;DEBUGPRINTFORML TAGS:{ITER_I} = %TAGS:ITER_I%
	SPLIT TAGS:ITER_I, ":", RESULTS
	USER_TAG = %RESULTS:0%
	USER_VALUE = %RESULTS:1%
	SELECTCASE USER_TAG
		CASE "DAILY_EVENT"
			TEXT = %REPLACE(TEXT, @"\\[\\$%USER_TAG%:%USER_VALUE%\\]", @"[%GET_KOJO_DAILY_NAME_FROM_ENG(CHARA_ID, デイリー_通常, USER_VALUE)%]")%
		CASE "QUEST_NAME"
			TRYCALLFORM QST_TITLE_QUEST_%USER_VALUE%
			TEXT = %REPLACE(TEXT, @"\\[\\$%USER_TAG%:%USER_VALUE%\\]", @"[%RESULTS%]")%
	ENDSELECT
NEXT

@SKILL_CHECK_CHARA_CAN_LEARN(CHARA_ID, _XML_SKILL, MAJOR_GENRE, 表示モード = 0, GENERATE_HINT = 0)
#DIM CHARA_ID
#DIMS _XML_SKILL
#DIM MAJOR_GENRE
#DIM 表示モード
#DIM GENERATE_HINT

#DIMS DYNAMIC REQ_PARAM_NAME, 10
#DIMS DYNAMIC REQ_PARAM_VALUE, 10
#DIMS DYNAMIC REQ_SKILL_NAME, 10
#DIMS DYNAMIC REQ_SKILL_LV, 10
#DIMS DYNAMIC XOR_SKILL_NAME, 10
#DIM  DYNAMIC XOR_NUM
#DIMS DYNAMIC SKILL_RANK
#DIMS DYNAMIC REQ_CHARA_NAME
#DIMS DYNAMIC REQ_FLAG
#DIM 能力不足表示
#DIM スキル不足
#DIM 排他スキル習得中
#DIM 素質不足
#DIM LEARN_NG

#DIM CANT_LEARN

;習得可否判定結果初期化
LEARN_NG = 0

;ユニークスキルの場合キャラクター判定
XML_GET _XML_SKILL, "//skillrank", SKILL_RANK, 1
IF SKILL_RANK == "UNIQUE"
	XML_GET _XML_SKILL, "//reqchara/@name", REQ_CHARA_NAME, 1
	IF REQ_CHARA_NAME == "MASTER" && CHARA_ID != MASTER
		RETURN 0
	ELSEIF CHARA_ID != NAME_TO_CHARA(REQ_CHARA_NAME)
		RETURN 0
	ENDIF
ENDIF

SIF GENERATE_HINT
	CALL GENERATE_UNLOCK_HINT("INIT")

;要求前提スキル
スキル不足 = 0
XML_GET _XML_SKILL, "//reqskill/@name", REQ_SKILL_NAME, 1
XML_GET _XML_SKILL, "//reqskill/@value", REQ_SKILL_LV, 1
FOR LOCAL, 0, RESULT
	IF SKILL_GET_LEVELF(CHARA_ID, MAJOR_GENRE, REQ_SKILL_NAME:LOCAL) < TOINT(REQ_SKILL_LV:LOCAL)
		SIF !表示モード && !GENERATE_HINT
			RETURN 0
		スキル不足 = 1
		CANT_LEARN = 1
		;PRINTFORML 　%REQ_SKILL_NAME:LOCAL%: {RESULT}/%REQ_SKILL_LV:LOCAL%
	ELSE
		CANT_LEARN = 0
	ENDIF
	SIF GENERATE_HINT
		CALL GENERATE_UNLOCK_HINT("SKILL", CHARA_ID, CANT_LEARN, REQ_SKILL_NAME:LOCAL, REQ_SKILL_LV:LOCAL)
NEXT

IF スキル不足
	LEARN_NG = 1
	SIF 表示モード
		PRINTFORML × 前提スキル未習得
ENDIF

;要求ステータス
能力不足表示 = 0
XML_GET _XML_SKILL, "//reqparam/@name", REQ_PARAM_NAME, 1
XML_GET _XML_SKILL, "//reqparam/@value", REQ_PARAM_VALUE, 1
FOR LOCAL, 0, RESULT
	IF ABL:CHARA_ID:(REQ_PARAM_NAME:LOCAL) < TOINT(REQ_PARAM_VALUE:LOCAL)
		SIF !表示モード && !GENERATE_HINT
			RETURN 0
		LEARN_NG = 1
		CANT_LEARN = 1
		IF 表示モード
			IF !能力不足表示
				能力不足表示 = 1
				PRINTFORM × ステータス不足
				PRINTFORM （%REQ_PARAM_NAME:LOCAL%: {ABL:CHARA_ID:(REQ_PARAM_NAME:LOCAL)}/%REQ_PARAM_VALUE:LOCAL%

			ELSE
				PRINTFORM , %REQ_PARAM_NAME:LOCAL%: {ABL:CHARA_ID:(REQ_PARAM_NAME:LOCAL)}/%REQ_PARAM_VALUE:LOCAL%
			ENDIF
		ENDIF
	ELSE
		CANT_LEARN = 0
	ENDIF
	SIF GENERATE_HINT
		CALL GENERATE_UNLOCK_HINT("PARAM_SHORT", CHARA_ID, CANT_LEARN, REQ_PARAM_NAME:LOCAL, REQ_PARAM_VALUE:LOCAL)
NEXT
SIF 能力不足表示 && 表示モード
	PRINTL ）

;要求素質
素質不足 = 0
XML_GET _XML_SKILL, "//reqtalent/@name", REQ_PARAM_NAME, 1
FOR LOCAL, 0, RESULT
	CANT_LEARN = 0
	SELECTCASE REQ_PARAM_NAME:LOCAL
		CASE "FALL"
			SIF !IS_FALLEN(CHARA_ID) && CHARA_ID != MASTER
				CANT_LEARN = 1
		CASE "LOVER"
			SIF !IS_FALL(CHARA_ID) && CHARA_ID != MASTER
				CANT_LEARN = 1
		CASE "SLAVE"
			SIF !IS_SLAVE(CHARA_ID) && CHARA_ID != MASTER
				CANT_LEARN = 1
		CASE "CLOSE"
			SIF !IS_FALLEN(CHARA_ID) && !TALENT:CHARA_ID:親友 && CHARA_ID != MASTER
				CANT_LEARN = 1
		CASEELSE
			SIF GETVAR(@"TALENT:{CHARA_ID}:%REQ_PARAM_NAME:LOCAL%") != 1
				CANT_LEARN = 1
	ENDSELECT

	IF CANT_LEARN
		SIF !表示モード && !GENERATE_HINT
			RETURN 0
		素質不足 = 1
	ENDIF

	SIF GENERATE_HINT
		CALL GENERATE_UNLOCK_HINT("TALENT", CHARA_ID, CANT_LEARN, REQ_PARAM_NAME:LOCAL)
NEXT
;要求素質(淫乱系)
;要求素質
XML_GET _XML_SKILL, "//reqNasty/@name", REQ_PARAM_NAME, 1
FOR LOCAL, 0, RESULT
	IF !IS_NASTY(CHARA_ID, GETVAR(@"素質_淫乱_%REQ_PARAM_NAME:LOCAL%"))
		SIF !表示モード && !GENERATE_HINT
			RETURN 0
		素質不足 = 1
		CANT_LEARN = 1
	ELSE
		CANT_LEARN = 0
	ENDIF
	SIF GENERATE_HINT
		CALL GENERATE_UNLOCK_HINT("NASTY", CHARA_ID, CANT_LEARN, REQ_PARAM_NAME:LOCAL)
NEXT

IF 素質不足
	LEARN_NG = 1
	SIF  表示モード
		PRINTFORML × 要求素質未所持
ENDIF

;要求フラグ
XML_GET _XML_SKILL, "//reqflag", REQ_FLAG, 1
IF REQ_FLAG == "ON"
	CALL SKILL_CHECK_FLAG(_XML_SKILL, CHARA_ID, GENERATE_HINT)
	SIF RESULT == 0
		RETURN 0
ENDIF

SIF LEARN_NG
	RETURN 0
RETURN 1

@GENERATE_UNLOCK_HINT(METHOD, CHARA_ID = 0, UNLEARNABLE = 0, REQ_NAME = "", REQ_VALUE = "")
#DIMS METHOD
#DIM  CHARA_ID
#DIM  UNLEARNABLE
#DIM  REQ_NUM
#DIMS CONDITIONS, 10
#DIMS REQUIREMENTS, 10
#DIMS REQ_NAME
#DIMS REQ_VALUE
#DIMS REQ_TEXT
#DIM CONST MAX_STR_LENGTH = 42

#DIM  SKILL_GENRE
#DIMS TEXT
#DIMS TEMP_TEXT

SELECTCASE METHOD
	CASE "INIT"
		TEXT '= @"@C:{カラー_注釈}@要求：@/C@"
		RETURN 1
	CASE "OUTPUT"
		TEMP_TEXT = %FuncTagSetText_GetPlainText(TEXT)%
		IF STRLENS(TEMP_TEXT) > MAX_STR_LENGTH
			RESULTS '= @"@T:%TEMP_TEXT%@%TEXT%@/T@"
		ELSE
			RESULTS = %TEXT%
		ENDIF

		RETURN 1
	CASE "FLAG"
		CALL SKILL_TEXT_REPLACE_COMMON_TAGS(REQ_NAME, CHARA_ID)
		TEMP_TEXT = %REQ_NAME%
	CASE "TALENT"
		SELECTCASE REQ_NAME
			CASE "FALL"
				TEMP_TEXT = "<陥落>"
			CASE "LOVER"
				TEMP_TEXT = "<恋慕or親愛or服従or隷属>"
			CASE "SLAVE"
				TEMP_TEXT = "<服従or隷属or烙印>"
			CASE "CLOSE"
				TEMP_TEXT = "<陥落or親友>"
			CASEELSE
				TEMP_TEXT '= @"<%REQ_NAME%>"
		ENDSELECT
	CASE "NASTY"
		TEMP_TEXT '= @"<%REQ_NAME%>"
	CASE "SKILL"
		FOR SKILL_GENRE, 0, VARSIZE("SKILL_GENRE_JP")
			RESULTS = %GET_SKILL_NAME(REQ_NAME, SKILL_GENRE)%
			SIF RESULTS != ""
				BREAK
		NEXT
		SIF STRLENS(RESULTS) > 16
			RESULTS = %TOHALF(RESULTS)%
		TEMP_TEXT '= @"%RESULTS%(Lv%REQ_VALUE%)"
	CASE "PARAM"
		TEMP_TEXT '= @"%REQ_NAME%(%REQ_VALUE%)"
	CASE "PARAM_SHORT"
		TEMP_TEXT '= @"%CHARATU(REQ_NAME, 0)%(%REQ_VALUE%)"
	CASEELSE
		THROW 未定義のメソッド(%METHOD%)が呼ばれました

ENDSELECT

TEMP_TEXT += " "
IF UNLEARNABLE
	TEXT += @"@C:{カラー_注釈}@%TEMP_TEXT%@/C@"
ELSE
	TEXT += @"@C:{カラー_白}@%TEMP_TEXT%@/C@"
ENDIF

@SKILL_CHECK_EXCLUSIVE_CONDITION(CHARA_ID, _XML_SKILL, MAJOR_GENRE, 表示モード = 0)
#DIM CHARA_ID
#DIMS _XML_SKILL
#DIM MAJOR_GENRE
#DIM 表示モード
#DIMS DYNAMIC XOR_SKILL_NAME, 10
#DIM  DYNAMIC XOR_NUM
#DIMS DYNAMIC REQ_FLAG
#DIM 排他スキル習得中
#DIM LEARN_NG

;排他スキル
XOR_NUM = XML_GET(_XML_SKILL, "//exclusiveSkill/@name", XOR_SKILL_NAME, 1)
FOR LOCAL, 0, XOR_NUM
	IF SKILL_GET_LEVELF(CHARA_ID, MAJOR_GENRE, XOR_SKILL_NAME:LOCAL) > 0
		IF !表示モード
			RETURN 1
		ELSE
			PRINTFORML × 排他スキル習得中
			RETURN 1
		ENDIF
	ENDIF
NEXT

RETURN 0
;-------------------------------------------------
;;; 指定した定義名のスキルを忘却させる際、同時に忘却させる必要があるスキルを取得する
;;; そのスキルの忘却によって前提を満たさなくなるスキルを含めてリスト化しそのリストを返す
;;; 前提スキルの条件のみチェックする(パラメータの変動などは考慮しない)
;-------------------------------------------------
@SKILL_CHECK_CHARA_FORGET_SKILL(CHARA_ID, SKILL_DEF_NAME, MAJOR_GENRE, SUB_GENRE)
#DIM  CHARA_ID
#DIMS SKILL_DEF_NAME
#DIM  MAJOR_GENRE
#DIM  SUB_GENRE

VARS FORGET_SKILL_LIST

;指定されたスキルをそもそもキャラが保持していない
CALL SKILL_GET_LEVEL(CHARA_ID, MAJOR_GENRE, SKILL_DEF_NAME)
IF !RESULT
	RETURN 0
ENDIF

;忘却スキルリストに指定されたスキルを追加
FORGET_SKILL_LIST = %LIST_ADD(FORGET_SKILL_LIST, SKILL_DEF_NAME)%
CALL SKILL_UPDATE_FORGET_SKILL_LIST(CHARA_ID, FORGET_SKILL_LIST, MAJOR_GENRE, SUB_GENRE)

RESULTS = %FORGET_SKILL_LIST%
RETURN 1

;;; @SKILL_CHECK_CHARA_FORGET_SKILL の内部関数
;;; 忘却対象スキルは連鎖的に忘却される可能性があるため、この関数はFORGET_SKILL_LISTを更新する度に再帰的に呼び出される
@SKILL_UPDATE_FORGET_SKILL_LIST(CHARA_ID, FORGET_SKILL_LIST, MAJOR_GENRE, SUB_GENRE)
#DIM CHARA_ID
#DIMS SKILL_DEF_NAME
#DIMS REF FORGET_SKILL_LIST
#DIM  MAJOR_GENRE
#DIM  SUB_GENRE
#DIMS DYNAMIC LEARNED_SKILL, MAX_SKILLS

VARI SKILL_COUNT
VARS CHECK_SKILL_NAME
VARS REQ_SKILL_NAME, 10
VARS XML_SKILL
VARI ITER_I
VARI ITER_J

CALL DIC_KEYS(_DIC_SKILL_LIST:CHARA_ID:MAJOR_GENRE)
SKILL_COUNT = RESULT
ARRAYCOPY "RESULTS", "LEARNED_SKILL"

FOR ITER_I, 0, SKILL_COUNT
	CHECK_SKILL_NAME = %LEARNED_SKILL:ITER_I%
	SIF LIST_INDEXOF(FORGET_SKILL_LIST, CHECK_SKILL_NAME) != -1
		CONTINUE
	;チェック対象スキル定義XML取得
	XML_GET XMLID_SKILL:SUB_GENRE, @"//defname[@parentname='%CHECK_SKILL_NAME%']", XML_SKILL, 3
	IF RESULT
		;要求前提スキルの取得
		XML_GET XML_SKILL, "//reqskill/@name", REQ_SKILL_NAME, 1
		FOR ITER_J, 0, RESULT
			IF LIST_INDEXOF(FORGET_SKILL_LIST, REQ_SKILL_NAME:ITER_J) != -1
				FORGET_SKILL_LIST = %LIST_ADD(FORGET_SKILL_LIST, CHECK_SKILL_NAME)%
				CALL SKILL_UPDATE_FORGET_SKILL_LIST(CHARA_ID, FORGET_SKILL_LIST, MAJOR_GENRE, SUB_GENRE)
			ENDIF
		NEXT
	ENDIF
NEXT

RETURN 1

; ;----------------------------
; ;忘却スキル描画
; ;----------------------------
; @SHOP_LIFE_SKILL_PRINT_FORGET_LIST(対象, 編集モード)
; #DIM 対象
; #DIM ジャンル
; #DIM ジャンル数
; #DIM スキル数
; #DIM スキル
; #DIM 最大ページ
; #DIM CONST 項目数 = 10
; #DIMS アクセサ
; #DIMS キャラ名
; #DIMS スキル名
; #DIM レベル
; #DIM 編集モード
; #DIMS 説明
; #DIM 描画行
; #DIM オフセット

; ジャンル数 = SKILL_GENRE_NUM

; ;ページ数出す用
; スキル数 = 0
; FOR ジャンル, 0, ジャンル数
; 	FOR スキル, 0, MAX_SKILL_SLOT
; 		SIF SKILL_NO_SLOT:対象:ジャンル:スキル >= 0 && SKILL_ID_SLOT:対象:ジャンル:スキル >= 0
; 			スキル数 ++
; 	NEXT
; NEXT

; 最大ページ = MAX(スキル数 - 1, 0) / 項目数 + 1

; IF SHOP_SKILL_PAGE:ジャンル数 <= 0
; 	SHOP_SKILL_PAGE:ジャンル数 = 最大ページ
; ELSEIF SHOP_SKILL_PAGE:ジャンル数 > 最大ページ
; 	SHOP_SKILL_PAGE:ジャンル数 = 1
; ENDIF

; CALL SINGLE_DRAWLINE
; PRINTFORML -スキルの忘却-
; CALL SINGLE_DRAWLINE

; オフセット = 0
; 描画行 = 0
; FOR ジャンル, 0, SKILL_GENRE_NUM
; 	FOR スキル, 0, MAX_SKILL_SLOT
; 		IF オフセット < (SHOP_SKILL_PAGE:ジャンル数 - 1) * 項目数
; 			オフセット ++
; 			CONTINUE
; 		ELSEIF オフセット >= MIN(SHOP_SKILL_PAGE:ジャンル数 * 項目数, スキル数)
; 			BREAK
; 		ENDIF
; 		;存在判定
; 		TRYCCALLFORM SKILL_{SKILL_NO_SLOT:対象:ジャンル:スキル}_%SKILL_GENRE_ENG:ジャンル%_{SKILL_ID_SLOT:対象:ジャンル:スキル}_EXIST
; 		CATCH
; 			CONTINUE
; 		ENDCATCH

; 		CALL COLOR_LINE

; 		;習得ボタンは一番左
; 		IF SKILL_FORGET_PRICE > MONEY && !編集モード
; 			SETCOLOR カラー_選択不可
; 			PRINTPLAIN [忘却]
; 			RESETCOLOR
; 		ELSE
; 			PRINTBUTTON "[忘却]", ジャンル * MAX_SKILL_SLOT + スキル
; 		ENDIF
; 		;項目描画
; 		SIF !編集モード
; 			PRINTFORM  価格:%MONEY_FORMAT(SKILL_FORGET_PRICE), 7, RIGHT%
; 		CALL SKILL_EXPLANATION(ジャンル, SKILL_NO_SLOT:対象:ジャンル:スキル, SKILL_ID_SLOT:対象:ジャンル:スキル, 19)
; 		描画行 ++
; 		オフセット ++
; 	NEXT
; NEXT

; IF 項目数 - 描画行 > 0
; 	FOR LOCAL, 描画行, 項目数
; 		PRINTL
; 		PRINTL
; 		SIF LOCAL != 項目数 - 1
; 			PRINTL
; 	NEXT
; ENDIF

; CALL SINGLE_DRAWLINE
; PRINTFORML {SHOP_SKILL_PAGE:ジャンル数} / {最大ページ}
; CALL SINGLE_DRAWLINE
; PRINTBUTTON "[前のページ]", 5000
; PRINTBUTTON "[次のページ]", 5001
; PRINTL

; ;----------------------------
; ;あるキャラが習得できるスキルリスト生成
; ;----------------------------
; @SHOP_LIFE_SKILL_CREATE_LIST(対象, 編集モード, ソート順)
; #DIM キャラ
; #DIM ジャンル
; #DIM スキルID
; #DIM 対象
; #DIM 対象スキル
; #DIM 編集モード
; #DIM ソート順

; VARSET SHOP_SKILL_NO_LIST
; VARSET SHOP_SKILL_ID_LIST
; VARSET SHOP_SKILL_LEVEL_LIST
; VARSET SHOP_SKILL_NUM

; FOR キャラ, 0, CHARANUM
; 	;0番は汎用なのでスキップ　本人もスキップ
; 	IF !(NO:キャラ == 0 || キャラ == 対象)
; 		SIF (CFLAG:キャラ:所属 != CFLAG:MASTER:所属 || CFLAG:キャラ:特殊状態 == 特殊状態_放浪) && !編集モード
; 			CONTINUE
; 		SIF CFLAG:キャラ:捕虜先 && !編集モード
; 			CONTINUE
; 		SIF !IS_UNIQUE_CHARA(キャラ)
; 			CONTINUE
; 	ENDIF
; 	FOR ジャンル, 0, SKILL_GENRE_NUM
; 		FOR スキルID, 0, MAX_SKILLS
; 			TRYCCALLFORM SKILL_{NO:キャラ}_%SKILL_GENRE_ENG:ジャンル%_{スキルID}_EXIST
; 				;教えられない
; 				TRYCCALLFORM SKILL_{NO:キャラ}_%SKILL_GENRE_ENG:ジャンル%_{スキルID}_CANT_TELL
; 					SIF (NO:キャラ != NO:対象 && !編集モード) || NO:キャラ == 0
; 						GOTO CANCEL
; 				CATCH
; 				ENDCATCH
; 				;所持してたらダメ
; 				SIF CHECK_SKILL_DUPLICATE(対象, ジャンル, NO:キャラ, スキルID)
; 					GOTO CANCEL
; 				;ショップ経由でダメなスキルを弾く
; 				TRYCCALLFORM SKILL_{NO:キャラ}_%SKILL_GENRE_ENG:ジャンル%_{スキルID}_CANT_LEARN_FROM_SHOP
; 					SIF !編集モード
; 						GOTO CANCEL
; 				CATCH
; 					SHOP_SKILL_NO_LIST:ジャンル:(SHOP_SKILL_NUM:ジャンル) = NO:キャラ
; 					SHOP_SKILL_ID_LIST:ジャンル:(SHOP_SKILL_NUM:ジャンル) = スキルID
; 					CALLFORM SKILL_{NO:キャラ}_%SKILL_GENRE_ENG:ジャンル%_{スキルID}_LEVEL
; 					SHOP_SKILL_LEVEL_LIST:ジャンル:(SHOP_SKILL_NUM:ジャンル) = RESULT
; 					SHOP_SKILL_NUM:ジャンル ++
; 				ENDCATCH
; 			CATCH
; 				$CANCEL
; 			ENDCATCH
; 		NEXT
; 	NEXT
; NEXT

; CALL SHOP_LIFE_SKILL_SORT(ソート順)

; ;----------------------------
; ;スキルリストのソート
; ;----------------------------
; @SHOP_LIFE_SKILL_SORT(ソート順)
; #DIM ソート順
; #DIM 降順
; #DIM CONST ソート順_NO = 0
; #DIM CONST ソート順_NO降順 = 1
; #DIM CONST ソート順_レベル = 2
; #DIM CONST ソート順_レベル降順 = 3
; #DIM SORT_VALUES, VARSIZE("SHOP_SKILL_NO_LIST", 0), VARSIZE("SHOP_SKILL_NO_LIST", 1)
; #DIM ジャンル
; #DIM スキルID
; #DIM 走査

; VARSET SORT_VALUES

; IF GROUPMATCH(ソート順, ソート順_NO降順, ソート順_レベル降順)
; 	降順 = 1
; ELSE
; 	降順 = 0
; ENDIF

; FOR ジャンル, 0, SKILL_GENRE_NUM
; 	FOR スキルID, 0, SHOP_SKILL_NUM:ジャンル
; 		IF GROUPMATCH(ソート順, ソート順_NO, ソート順_NO降順)
; 			SORT_VALUES:ジャンル:スキルID = SHOP_SKILL_NO_LIST:ジャンル:スキルID
; 		ELSE
; 			SORT_VALUES:ジャンル:スキルID = SHOP_SKILL_LEVEL_LIST:ジャンル:スキルID
; 		ENDIF
; 	NEXT
; NEXT

; FOR ジャンル, 0, SKILL_GENRE_NUM
; 	FOR スキルID, 1, SHOP_SKILL_NUM:ジャンル
; 		IF (!降順 && SORT_VALUES:ジャンル:スキルID < SORT_VALUES:ジャンル:(スキルID - 1)) || (降順 && SORT_VALUES:ジャンル:スキルID > SORT_VALUES:ジャンル:(スキルID - 1))
; 			SWAP SORT_VALUES:ジャンル:スキルID, SORT_VALUES:ジャンル:(スキルID - 1)
; 			SWAP SHOP_SKILL_NO_LIST:ジャンル:スキルID, SHOP_SKILL_NO_LIST:ジャンル:(スキルID - 1)
; 			SWAP SHOP_SKILL_ID_LIST:ジャンル:スキルID, SHOP_SKILL_ID_LIST:ジャンル:(スキルID - 1)
; 			SWAP SHOP_SKILL_LEVEL_LIST:ジャンル:スキルID, SHOP_SKILL_LEVEL_LIST:ジャンル:(スキルID - 1)
; 			スキルID = MAX(スキルID - 2, 0)
; 		ENDIF
; 	NEXT
; NEXT

;----------------------------
;スキル習得フラグの判定
;条件を満たしている場合は1を返す
;----------------------------
@SKILL_CHECK_FLAG(_XML_SKILL, CHARA_ID, GENERATE_HINT)
#DIMS _XML_SKILL
#DIM  CHARA_ID
#DIM  GENERATE_HINT
#DIMS DYNAMIC SKILL_NAME
#DIM DYNAMIC CONDITION_NUM
#DIMS DYNAMIC CONDITIONS, 10
#DIMS DYNAMIC HINT_TEXTS, 10
#DIM DYNAMIC LEARN_NG
#DIM DYNAMIC CANT_LEARN

CONDITION_NUM = XML_GET(_XML_SKILL, "//reqCondition/@condition", CONDITIONS, 1)
SIF CONDITION_NUM == 0
	RETURN 0
XML_GET _XML_SKILL, "//reqCondition/@hintText", HINT_TEXTS, 1
;reqConditionが複数ある場合はAND条件で判定
FOR LOCAL, 0, CONDITION_NUM
	CANT_LEARN = 0
	IF TOINT(STRFORM(CONDITIONS:LOCAL)) != 1
		SIF !GENERATE_HINT
			RETURN 0
		LEARN_NG = 1
		CANT_LEARN = 1
	ENDIF
	SIF GENERATE_HINT
		CALL GENERATE_UNLOCK_HINT("FLAG", CHARA_ID, CANT_LEARN, HINT_TEXTS:LOCAL)
NEXT
SIF LEARN_NG
	RETURN 0
RETURN 1


code: #DIM CONST MAX_WORKER_NUM = 10


code:
;-------------------------------------------------
;「触手部屋」の名称
;娯楽担当のページと表示を合わせるため右カラムキャラリストでの表示に改変しました
;メニュー表示も合わせましたが戻した方が良いことがある場合はお知らせください
;-------------------------------------------------
@SHOP_LIFE_NAME44
RESULTS:0 '= "触手部屋"

;-------------------------------------------------
;「触手部屋」の選択可否
;-------------------------------------------------
@SHOP_LIFE_CHECK44
SIF !ITEM:触手部屋
	RETURN 0
SIF CFLAG:MASTER:捕虜先
	RETURN 0
SIF !CFLAG:MASTER:所属
	RETURN 0
RETURN 1

;-------------------------------------------------
;「触手部屋」の選択可能キャラ存在判定
;-------------------------------------------------
@SHOP_LIFE_CHECKCHARA44(ARG:0)
SIF !IS_SYOKUSYU_MANAGE(ARG:0)
	RETURN 0
RETURN 1

;-------------------------------------------------
;「触手部屋」の左カラムメニューの入力処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY44
FLAG:拠点フェイズページ = 1
FLAG:夜這い = 0
RETURN 0

;-------------------------------------------------
;「触手部屋」の右カラムキャラリストボタン表示に追尾させる情報
;　この追記後デフォルトの情報を表示しない場合はRETURN 1
;-------------------------------------------------
@SHOP_LIFE_BUTTON_ADD44(ARG:0)
PRINTPLAIN
PRINTFORM 妖:
CALL PRINT_ALPHABET_RANK(ランク_ＳＬＧ, ABL:(ARG:0):魔術)
PRINTFORM  {ABL:(ARG:0):魔術, 2, RIGHT}
RETURN 1

;-------------------------------------------------
;「触手部屋」の右カラムキャラリスト１のボタン（関数未指定なら選択中色なし表示）
;-------------------------------------------------
@SHOP_LIFE_LIST1_BUTTON44(ARG:0, ARG:1)
;キャラ, 選択中カラー表示フラグ, ボタン番号に追加する数値, CHECKCHARAの戻り値, 行動済みマークをオフにするフラグ
CALL COLUMN_RIGHT_CHARALIST_BUTTON(ARG:0, ARG:0 == ID_TO_CHARA(FLAG:触手部屋管理者), SHOP_LIFE_LIST1_ADD_INPUT, ARG:1, 1)
RETURN 0

;-------------------------------------------------
;「触手部屋」の右カラム表示処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SHOW44
;触手部屋の管理が可能なキャラの数を数える
LOCAL:9 = 0
FOR LOCAL:0, 0, CHARANUM
	IF IS_SYOKUSYU_MANAGE(LOCAL:0)
		LOCAL:9 ++
	ENDIF
NEXT

;タイトル
CALL COLUMN_RIGHT_TITLE("管理者選択", "0", "1", "0", "0")
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

CALL COLOR_PRINT(" 触手部屋の管理を行うには <魔術知識>・性知識Lv4以上・主人公以外なら触手Lv3以上 が必要です", カラー_注釈)
CALL COLUMN_RIGHT_PRINTL
CALL COLOR_PRINT(" 触手部屋の管理を行うと、毎ターン若干の魔術経験値と触手経験値を得られます", カラー_注釈)
CALL COLUMN_RIGHT_PRINTL
CALL COLOR_PRINT(" 現在の管理者は", カラー_注釈)
IF ID_TO_CHARA(FLAG:触手部屋管理者) == -1
	FONTSTYLE 1
	CALL COLOR_PRINT(" いません ", カラー_注釈)
	FONTSTYLE 0
ELSEIF IS_SYOKUSYU_MANAGE(ID_TO_CHARA(FLAG:触手部屋管理者))
	CALL COLOR_PRINT(@"%ANAME(ID_TO_CHARA(FLAG:触手部屋管理者))% ", カラー_オレンジ, "です", カラー_注釈)

ELSE
	CALL COLOR_PRINT(@"%ANAME(ID_TO_CHARA(FLAG:触手部屋管理者))% ", カラー_オレンジ, "ですが、現在は", カラー_注釈, "管理不能", カラー_選択中, "です", カラー_注釈)
ENDIF
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

;標準的なキャラリストとページ移動
;ARG:0=3 リスト１行に並べるボタン数を3に変える
CALL COLUMN_RIGHT_CHARALIST(3)

RETURN 0

;-------------------------------------------------
;「触手部屋」のリスト１入力処理
;-------------------------------------------------
@SHOP_LIFE_USERSHOP44(ARG:0)
CALL SINGLE_DRAWLINE
IF ARG:0 >= 0 && IS_SYOKUSYU_MANAGE(ARG:0)
	IF ARG:0 == ID_TO_CHARA(FLAG:触手部屋管理者)
		PRINTFORMW %ANAME(ARG:0)%を触手部屋の管理者から外しました
		FLAG:触手部屋管理者 = 0
	ELSE
		PRINTFORMW %ANAME(ARG:0)%を触手部屋の管理者に設定しました
		FLAG:触手部屋管理者 = GET_ID(ARG:0)
	ENDIF
ENDIF
RETURN 1

;-------------------------------------------------
;キャラARG:0が触手部屋を管理可能であるかどうかを判定する関数
;-------------------------------------------------
@IS_SYOKUSYU_MANAGE(ARG:0)
#FUNCTION
IF CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属 && CFLAG:(ARG:0):捕虜先 == 0
	IF TALENT:(ARG:0):魔術師 && ABL:(ARG:0):性知識 >= 4 && (ARG:0 == MASTER || ABL:(ARG:0):触手 >= 3)
		RETURNF 1
	ENDIF
ENDIF
RETURNF 0


code:
;-------------------------------------------------
;「出稼に送る」の名称
;-------------------------------------------------
@SHOP_LIFE_NAME45
RESULTS:0 '= "出稼に送る"

;-------------------------------------------------
;「出稼に送る」の選択可否
;-------------------------------------------------
@SHOP_LIFE_CHECK45
SIF CFLAG:MASTER:捕虜先
	RETURN 0
SIF !CFLAG:MASTER:所属
	RETURN 0
RETURN 1

;-------------------------------------------------
;「出稼に送る」の選択可能キャラ存在判定
;-------------------------------------------------
@SHOP_LIFE_CHECKCHARA45(ARG:0)
;非主人公、同一勢力、汎用キャラ、好感度600必要、幼児でない
{
	RETURN ARG:0 != MASTER && CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属 && (IS_CHILD(ARG:0) || IS_RANDOM_CHARA(ARG:0)) && CFLAG:(ARG:0):好感度 >= 600 && !IS_ANIMAL(ARG:0) && !TALENT:(ARG:0):幼児
}

;-------------------------------------------------
;「出稼に送る」の左カラムメニューの入力処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY45
FLAG:拠点フェイズページ = 1
FLAG:夜這い = 0
RETURN 0

;-------------------------------------------------
;「出稼に送る」の右カラム表示処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SHOW45
CALL COLUMN_RIGHT_TITLE("対象者選択", "0", "1", "0", "0")
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

CALL COLOR_PRINT(" 好感を得た汎用キャラを都市に出稼ぎとして派遣し、能力に応じて金銭を得ます", カラー_注釈)
CALL COLUMN_RIGHT_PRINTL
CALL COLOR_PRINT(" 派遣したキャラは削除され二度と戻って来ません", カラー_選択中)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL
;標準的なキャラリストとページ移動
CALL COLUMN_RIGHT_CHARALIST
RETURN 0

;-------------------------------------------------
;「出稼に送る」のリスト１入力処理
;-------------------------------------------------
@SHOP_LIFE_USERSHOP45(ARG:0)
#DIM PROFIT
;対象キャラの情報を表示
CALL SINGLE_DRAWLINE
CALL SHOW_INFO(ARG:0)
CALL SINGLE_DRAWLINE

;LOCAL:10に自勢力の士官数を格納、行動回数の監視が目的
LOCAL:10 = GET_COMMANDER_NUM(CFLAG:MASTER:所属)
PRINTFORML 本当に%ANAME(ARG:0)%を派遣しますか？　!!!「はい」を押すと対象キャラは失われます!!!
CALL ASK_YN
IF RESULT == 0
	;兵数の増加量(身体・知識・歌唱)
	LOCAL:6 = (ABL:(ARG:0):身体 + ABL:(ARG:0):器用 + ABL:(ARG:0):社交 + ABL:(ARG:0):知識 + ABL:(ARG:0):歌唱 + ABL:(ARG:0):料理) * 30 + 3000
	PROFIT = (LOCAL:6) * 3
	MONEY += PROFIT
	HO_ITEM_STOCK:ITEM_求人書類 += 1

	PRINTFORML %ANAME(ARG:0)%を出稼ぎに送りました
	CALL COLOR_PRINTW(@"手当として%TOSTR(PROFIT, "###,###")%ディナリを受領した", カラー_注意)
	CALL COLOR_PRINTW(@"求人書類を１つ入手した", カラー_注意)

	;キャラを削除し番号を詰める
	CALL DELETE_CHARA(ARG:0)

ENDIF
RETURN 1


code:
;-------------------------------------------------
;「リクルータ」の名称
;-------------------------------------------------
@SHOP_LIFE_NAME46
RESULTS:0 '= "人材を探す"
;'
;-------------------------------------------------
;「リクルータ」の選択可否
;-------------------------------------------------
@SHOP_LIFE_CHECK46
RETURN 1

;-------------------------------------------------
;「リクルータ」の左カラムメニューの入力処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY46
FLAG:拠点フェイズページ = 1
FLAG:夜這い = 0
MENUVAR:1 = 0
MENUVAR:2 = 0
MENUVAR:3 = 0
職業候補 = -1
VARSET TALENT_FILTER
VARSET TAG_FILTER

RETURN 0

;-------------------------------------------------
;「リクルータ」の右カラムボタン入力値をキャラ番号に変換する処理のオフ判定
;-------------------------------------------------
@SHOP_LIFE_USERSHOP_COLUMN_RIGHT_CONVERT_CHARANUM_OFF_CHECK46

;-------------------------------------------------
;「リクルータ」の右カラム表示処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SHOW46
#DIM ID
#DIM DYNAMIC 雇用費用 = 15000
#DIM DYNAMIC 雇用NG_書類不足
#DIM DYNAMIC 雇用NG_費用不足

;タイトル
PRINTPLAIN ★人材を探す
CALLF TAG_PRINT(@"@C:{カラー_注釈}@必要求人書類:@/C@@C:{カラー_選択中}@1@/C@@C:{カラー_注釈}@(所持数:{HO_ITEM_STOCK:ITEM_求人書類})　雇用金額は指定能力に応じて上昇(%TOSTR(雇用費用, "#,##0")%ディナリ～)@/C@")
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

;書類不足判定
雇用NG_書類不足 = ((HO_ITEM_STOCK:ITEM_求人書類 < 1) ? 1 # 0)

;費用不足判定
;素質の指定1個につき追加料金500
FOR LOCAL, 0, VARSIZE("TALENT_FILTER")
	SIF TALENT_FILTER:LOCAL
		雇用費用 += 500
NEXT
;素質:魔術師がある場合は追加料金250,000
;※ この段階では素質で判断できないため、職業名で判断
SIF 職業候補 > 0 && JOB_NAME:職業候補 == "魔術師"
	雇用費用 += 250000

;素質:神聖術師がある場合は追加料金250,000
;※ この段階では素質で判断できないため、職業名で判断
SIF 職業候補 > 0 && JOB_NAME:職業候補 == "神聖術師"
	雇用費用 += 250000

雇用NG_費用不足 = ((MONEY < 雇用費用) ? 1 # 0)

;雇用条件を満たしている場合のみボタンが押せる
IF !雇用NG_書類不足 && !雇用NG_費用不足
	PRINTBUTTON "[この条件で探す]", 0
ELSE
	SETCOLOR カラー_選択不可
	PRINTPLAIN [この条件で探す]
	;NG理由を追記
	IF 雇用NG_書類不足 && 雇用NG_費用不足
		PRINTFORM 　※ 雇用には求人書類と%TOSTR(雇用費用, "#,##0")%ディナリ以上の資金が必要です
	ELSEIF 雇用NG_書類不足
		PRINTFORM 　※ 雇用には求人書類が必要です
	ELSEIF 雇用NG_費用不足
		PRINTFORM 　※ 雇用には%TOSTR(雇用費用, "#,##0")%ディナリ以上の資金が必要です
	ENDIF
	RESETCOLOR
ENDIF
PRINTPLAIN
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

CALL COLOR_PRINT(" 才能:", カラー_注釈)
CALL PRINT_SELECT_BUTTON(" [多能]", 110, MENUVAR:1 == 0)
CALL PRINT_SELECT_BUTTON(" [武官]", 111, MENUVAR:1 == 1)
CALL PRINT_SELECT_BUTTON(" [軍師]", 112, MENUVAR:1 == 2)
CALL PRINT_SELECT_BUTTON(" [政務]", 113, MENUVAR:1 == 3)
CALL PRINT_SELECT_BUTTON(" [芸能]", 114, MENUVAR:1 == 4)
CALL PRINT_SELECT_BUTTON(" [料理]", 115, MENUVAR:1 == 5)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_PRINTL

CALL COLOR_PRINT(" 性別:", カラー_注釈)
CALL PRINT_SELECT_BUTTON(" [不問]", 120, MENUVAR:2 == 0)
CALL PRINT_SELECT_BUTTON(" [男性]", 121, MENUVAR:2 == 1)
CALL PRINT_SELECT_BUTTON(" [女性]", 122, MENUVAR:2 == 2)
CALL PRINT_SELECT_BUTTON(" [女双]", 123, MENUVAR:2 == 3)
CALL PRINT_SELECT_BUTTON(" [男双]", 124, MENUVAR:2 == 4)
CALL PRINT_SELECT_BUTTON(" [男娘]", 125, MENUVAR:2 == 5)
CALL PRINT_SELECT_BUTTON(" [男娘双]", 126, MENUVAR:2 == 6)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_PRINTL

CALL COLOR_PRINT(" 名前:", カラー_注釈)
CALL PRINT_SELECT_BUTTON(" [洋名]", 130, MENUVAR:3 == 0)
CALL PRINT_SELECT_BUTTON(" [和名]", 131, MENUVAR:3 == 1)
CALL PRINT_SELECT_BUTTON(" [中華]", 132, MENUVAR:3 == 2)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_PRINTL

CALL COLOR_PRINT(" 種族:", カラー_注釈)
CALL SELECTABLE_RACE_LIST()
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_PRINTL

CALL COLOR_PRINT(" 能力:", カラー_注釈)
CALL SELECTABLE_TALAENT_LIST
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_PRINTL
CALL COLOR_PRINT(" 職業:", カラー_注釈)
CALL JOB_LIST

;残りは空行
CALL COLUMN_RIGHT_CLEAR

;-------------------------------------------------
;「リクルータ」の右カラムボタンの入力処理補佐
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SUB46(ARG:0)
#DIM DYNAMIC INPUT_RESULT
#DIM DYNAMIC 雇用費用 = 15000
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC TALENT_COUNT
#DIMS DYNAMIC TALENT_ID, VARSIZE("TALENT")
#DIMS DYNAMIC ADDITIONAL_COST
#DIM DYNAMIC ITER_I
;この条件で募集以外の数字なら戻る
SIF ARG:0 != 0
	RETURN 0

MENUVAR:11 = -1
MENUVAR:12 = 0

LOCAL:0 = GET_COMMANDER_NUM(CFLAG:MASTER:所属)

;君主が[動物耳]or[尻尾]を持つならケモ率高め
LOCAL:4 = GET_COUNTRY_BOSS(CFLAG:MASTER:所属)
IF LOCAL:4 >= 0 && (TALENT:(LOCAL:4):動物耳 || TALENT:(LOCAL:4):しっぽ)
	LOCAL:5 = 75
ELSE
	LOCAL:5 = 1
ENDIF

$INPUT_LOOP_NEWCHARA

;指定の条件でランダムキャラを作成
CALL CREATE_RANDOM_CHARA(LOCAL:5, MENUVAR:1, MENUVAR:2 - 1, MENUVAR:3,, "RECRUIT_RANDOM_CHARA")
CHARA_ID = RESULT

;士官の作成に失敗した場合
IF CHARA_ID < 0
	PRINTW 残念ながら目ぼしい人物は見つかりませんでした…

	;成功
ELSE
	CALL SINGLE_DRAWLINE
	PRINTFORML 「こちらの方などいかがでしょう？」

	$INPUT_LOOP_SELECT
	雇用費用 = 15000

	;SHOW_INFOの初期画面を基本情報にする
	FLAG:能力表示モード = 0

	;雇用金額算出
	雇用費用 += GET_FILTER_COST()
	;追加コストをxmlから取得
	TALENT_COUNT = XML_GET(XMLID_TALENT, @"//defname[randomCharaTalent/appearance/@additionalCost!='']/@id", TALENT_ID, 1)
	FOR ITER_I, 0, TALENT_COUNT
		IF TALENT:CHARA_ID:TOINT(TALENT_ID:ITER_I)
			XML_GET XMLID_TALENT, @"//defname[@id='%TALENT_ID:ITER_I%']/randomCharaTalent/appearance/@additionalCost", ADDITIONAL_COST, 1
			IF ISNUMERIC(ADDITIONAL_COST)
				雇用費用 += TOINT(ADDITIONAL_COST)
			ELSE
				THROW TALENT_ID %TALENT_ID:ITER_I%: @additionalCostを整数に変換できません
			ENDIF
		ENDIF
	NEXT

	;キャラの情報を表示
	CALL SINGLE_DRAWLINE
	CALL SHOW_INFO(CHARA_ID)
	CALL SINGLE_DRAWLINE

	PRINTBUTTON "[この仲間を雇う]", 0
	PRINT
	CALL HO_FIND_ROOM_BY_TAG("牢獄",,,1)
	IF RESULT != -1
		IF CHECK_JOB(CHARA_ID, "奴隷") || CHECK_JOB(CHARA_ID, "性奴隷")
			PRINTBUTTON "[奴隷として買う]", 4
			PRINT
		ENDIF
	ENDIF
	PRINTBUTTON "[外見を変更する]", 3
	PRINT
	PRINTBUTTON "[別の人を探す]", 1
	PRINT
	IF MENUVAR:11 == -1
	ELSEIF MENUVAR:12
		PRINTBUTTON "[進む]", 2
	ELSE
		PRINTBUTTON "[戻る]", 2
	ENDIF

	PRINT
	PRINTBUTTON "[中止]", 9
	PRINTL
	PRINTFORML 雇用費用: %NUM_FORMAT(雇用費用)%
	CALLF TAG_PRINT(@"求人書類 × 1@C:{カラー_選択不可}@({HO_ITEM_STOCK:ITEM_求人書類})@/C@", 1)

	$INPUT_LOOP_TREAT
	INPUT
	INPUT_RESULT = RESULT

	IF (GROUPMATCH(INPUT_RESULT, 0, 4)) && (雇用費用) < MONEY && HO_ITEM_STOCK:ITEM_求人書類 > 0
		PRINTFORML %INPUT_RESULT == 0 ? "仲間" # "奴隷"%の名前を変更しますか？
		PRINTL
		CALL ASK_MULTI("変更する", "変更する (ランダム)", "変更しない")
		SELECTCASE RESULT
			CASE 0
				CALL CHANGE_NAME(CHARA_ID)
			CASE 1
				CALL CHANGE_NAME_RANDOM(CHARA_ID, MENUVAR:3)
			CASEELSE
				;処理なし
		ENDSELECT

		CALL CHANGE_COUNTRY(CHARA_ID, CFLAG:MASTER:所属)
		IF INPUT_RESULT == 4
			CFLAG:CHARA_ID:捕虜先 = 所属_プレイヤー
			PRINTFORMW %ANAME(CHARA_ID)%を買いました
		ELSE
			PRINTFORMW %ANAME(CHARA_ID)%を雇いました
		ENDIF
		IF MENUVAR:11 != -1
			CALL DELETE_CHARA(MENUVAR:11)
		ENDIF
		;このターンにおける登用済みフラグをON
		APPOINT_DONE = 1
		MONEY -= (雇用費用)
		HO_ITEM_STOCK:ITEM_求人書類 --
		SHOP_TIME ++
		;CALL FL_TURNEND
		RETURN 1
	ELSEIF INPUT_RESULT == 0
		PRINTW 所持金または求人書類が足りません
		;作成したキャラを削除
		CALL DELETE_CHARA(CHARANUM - 1)
		IF MENUVAR:11 != -1
			CALL DELETE_CHARA(CHARANUM - 1)
		ENDIF
	ELSEIF INPUT_RESULT == 1
		IF MENUVAR:11 != -1
			;いらないキャラを削除
			CALL DELETE_CHARA(MENUVAR:11)
		ENDIF
		MENUVAR:11 = CHARANUM - 1
		MENUVAR:12 = 0
		GOTO INPUT_LOOP_NEWCHARA
	ELSEIF INPUT_RESULT == 2
		IF MENUVAR:12
			MENUVAR:12 = 0
		ELSE
			MENUVAR:12 = 1
		ENDIF
		;スワップ
		LOCAL:21 = MENUVAR:11
		MENUVAR:11    = CHARA_ID
		CHARA_ID = LOCAL:21
		GOTO INPUT_LOOP_SELECT
	ELSEIF INPUT_RESULT == 3
		CALL BEAUTIFY(CHARA_ID)
		GOTO INPUT_LOOP_SELECT
	ELSEIF INPUT_RESULT == 9
		;PRINTW 今回は購入を見送ることにしました
		;作成したキャラを削除
		CALL DELETE_CHARA(CHARANUM - 1)
		IF MENUVAR:11 != -1
			CALL DELETE_CHARA(CHARANUM - 1)
		ENDIF
	ELSE
		GOTO INPUT_LOOP_TREAT
	ENDIF
ENDIF

RETURN 1

;-------------------------------------------------
;「リクルータ」のリスト１入力処理
;　キャラ番号への変換オフのためARG:0=入力値
;-------------------------------------------------
@SHOP_LIFE_USERSHOP46(ARG:0)
IF ARG:0 >= 110 && ARG:0 <= 116
	MENUVAR:1 = ARG:0 - 110
ELSEIF ARG:0 >= 120 && ARG:0 <= 126
	MENUVAR:2 = ARG:0 - 120
ELSEIF ARG:0 >= 130 && ARG:0 <= 132
	MENUVAR:3 = ARG:0 - 130
ELSEIF ARG:0 >= 1000 && ARG:0 <= 1300
	;新たに素質を追加する場合、相反する素質は打ち消す
	IF TALENT_FILTER:(ARG:0 - 1000) == 0
		SELECTCASE ARG:0 - 1000
			CASE 11
				TALENT_FILTER:13 = 0
			CASE 13
				TALENT_FILTER:11 = 0
			CASE 15
				TALENT_FILTER:17 = 0
			CASE 17
				TALENT_FILTER:15 = 0
			CASE 22
				TALENT_FILTER:23 = 0
			CASE 23
				TALENT_FILTER:22 = 0
			CASE 25
				TALENT_FILTER:26 = 0
			CASE 26
				TALENT_FILTER:25 = 0
			CASE 27
				TALENT_FILTER:28 = 0
			CASE 28
				TALENT_FILTER:27 = 0
			CASE 30
				TALENT_FILTER:31 = 0
			CASE 31
				TALENT_FILTER:30 = 0
			CASE 32
				TALENT_FILTER:33 = 0
			CASE 33
				TALENT_FILTER:32 = 0
			CASE 35
				TALENT_FILTER:36 = 0
			CASE 36
				TALENT_FILTER:35 = 0
			CASE 40
				TALENT_FILTER:41 = 0
			CASE 41
				TALENT_FILTER:40 = 0
			CASE 42
				TALENT_FILTER:43 = 0
			CASE 43
				TALENT_FILTER:42 = 0
			CASE 50
				TALENT_FILTER:51 = 0
			CASE 51
				TALENT_FILTER:50 = 0
			CASE 61
				TALENT_FILTER:62 = 0
			CASE 62
				TALENT_FILTER:61 = 0
			CASE 70
				TALENT_FILTER:71 = 0
			CASE 71
				TALENT_FILTER:70 = 0
			CASE 81
				TALENT_FILTER:82 = 0
				TALENT_FILTER:83 = 0
			CASE 82, 83
				TALENT_FILTER:80 = 0
			CASE 101
				TALENT_FILTER:102 = 0
			CASE 102
				TALENT_FILTER:101 = 0
			CASE 103
				TALENT_FILTER:104 = 0
			CASE 104
				TALENT_FILTER:103 = 0
			CASE 105
				TALENT_FILTER:106 = 0
			CASE 106
				TALENT_FILTER:105 = 0
			CASE 107
				TALENT_FILTER:108 = 0
			CASE 108
				TALENT_FILTER:107 = 0
			CASE 109
				TALENT_FILTER:110 = 0
			CASE 110
				TALENT_FILTER:109 = 0
			CASE 111
				TALENT_FILTER:112 = 0
			CASE 112
				TALENT_FILTER:111 = 0
			CASE 115
				TALENT_FILTER:116 = 0
			CASE 116
				TALENT_FILTER:115 = 0
				;酒豪
			CASE 134
				;下戸を消去
				TALENT_FILTER:136 = 0
				;下戸
			CASE 136
				;酒豪を消去
				TALENT_FILTER:134 = 0
		ENDSELECT
	ENDIF
	TALENT_FILTER:(ARG:0 - 1000) = TALENT_FILTER:(ARG:0 - 1000) ? 0 # 1
ELSEIF ARG:0 >= 1999 && ARG:0 < 2000 + VARSIZE("JOB_NAME")
	職業候補 = ARG:0 - 2000
ELSEIF ARG:0 >= 3000 && ARG:0 < 3000 + MAX_TAGNUM
	INVERTBIT TAG_FILTER:(ARG:0 - 3000), 0
ENDIF

RETURN 0

;-------------------------------------------------
;つけ外し可能なTALENTリスト
;-------------------------------------------------
@SELECTABLE_TALAENT_LIST
#DIM ID
#DIM COUNTER

COUNTER = 0

VARSIZE TALENT_FILTER
FOR ID, 0, RESULT:0
	SIF TALENTNAME:ID == ""
		CONTINUE
	SIF ID == 0
		CONTINUE
	SIF ID >= 150
		CONTINUE
	COUNTER ++
	LOCALS = [%TALENTNAME:ID%]
	LOCALS = %LOCALS, 16, LEFT%
	CALL PRINT_SELECT_BUTTON(LOCALS, 1000 + ID, TALENT_FILTER:ID, 1)
	IF COUNTER % 7 == 0
		CALL COLUMN_RIGHT_PRINTL
		CALL COLOR_PRINT(" 　　 ", カラー_注釈)
	ENDIF
NEXT

@SELECTABLE_RACE_LIST
FOR LOCAL, 0, MAX_TAGNUM
	CALL PRINT_SELECT_BUTTON(@" [%TAG_NAME:LOCAL%]", 3000 + LOCAL, TAG_FILTER:LOCAL, 1)

NEXT

;-------------------------------------------------
;ラジオ式職業一覧
;-------------------------------------------------
@JOB_LIST
#DIM ID
#DIM COUNTER

FOR ID, -1, VARSIZE("JOB_NAME")
	IF ID == -1
		LOCALS = [指定なし]
	ELSE
		LOCALS = [%JOB_NAME:ID%]
	ENDIF
	LOCALS = %LOCALS, 16, LEFT%
	CALL PRINT_SELECT_BUTTON(LOCALS, 2000 + ID, 職業候補 == ID, 1)
	IF ID % 7 == 3
		CALL COLUMN_RIGHT_PRINTL
		CALL COLOR_PRINT(" 　　 ", カラー_注釈)
	ENDIF
NEXT


code:
;
; Emueraをデバッグモードで起動させた場合に限り、カスタムキャラを後から仲間として追加できるようにする
;
;-------------------------------------------------
;「カスタムキャラ雇用」の名称
;-------------------------------------------------
@SHOP_LIFE_NAME48
RESULTS:0 '= "ｶｽﾀﾑC雇用"
;'
;-------------------------------------------------
;「カスタムキャラ雇用」の選択可否
;-------------------------------------------------
@SHOP_LIFE_CHECK48
[IF_DEBUG]
RETURN 1
[ENDIF]

;-------------------------------------------------
;「カスタムキャラ雇用」の左カラムメニューの入力処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY48
PRINTL （開発者向け）カスタムキャラ雇用
PRINTL 同一キャラを何人追加しますか？ 手動入力も可能ですが大きすぎるとエラーの原因になります
FOR LOCAL, 0, 11
PRINTFORM [ {LOCAL}]
NEXT
PRINTL
INPUT
SIF RESULT > 0
	CALL SELECT_CUSTOM_CHARAS_DUP(, RESULT)
RETURN 1

;-------------------------------------------------
;「カスタムキャラ雇用」の右カラムオフ判定
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_COLUMN_RIGHT_OFF_CHECK48

@SELECT_CUSTOM_CHARAS_DUP(選択人数 = -1, 複製人数 = 1)
#DIM DYNAMIC 選択人数
#DIM DYNAMIC 複製人数
#DIM DYNAMIC 入力値
#DIM DYNAMIC ページ
#DIM DYNAMIC CHARA_BUFFER
#DIM DYNAMIC SELECTED_LIST, MAX_CUSTOM_CHARA
#DIM DYNAMIC FIRST_LINE
#DIM DYNAMIC 連番フラグ
VARSET LOCAL

連番フラグ = 0
IF 複製人数 > 1
	PRINTL 名前の後ろに1から始まる連番を付け加えますか？
	CALL ASK_YN()
	SIF RESULT == 0
		連番フラグ = 1
ENDIF

CALL SINGLE_DRAWLINE
PRINTFORML 対象キャラクターを\@選択人数 > 0 ?{選択人数}人#任意の人数\@選択してください
PRINTL

FIRST_LINE = LINECOUNT
$INPUT_LOOP
REDRAW 0
CLEARLINE LINECOUNT - FIRST_LINE
CALL LISTUP_SELECTED_CUSTOM_CHARACTER(0, ページ, 20, SELECTED_LIST, 1)

DRAWLINE
PRINTBUTTON "[完了]", 9999
PRINTL
PRINTL
PRINTBUTTON "[戻る]", 10000

;入力受付
REDRAW 1
INPUT
CLEARLINE 1
入力値 = RESULT
IF 入力値 == 9999
	LOCAL:1 = 0
	FOR LOCAL, 0, MAX_CUSTOM_CHARA
		SIF SELECTED_LIST:LOCAL
			LOCAL:1 ++
	NEXT
	IF LOCAL:1 != 選択人数 && 選択人数 > 0
		DRAWLINE
		SETCOLOR カラー_注意
		PRINTFORMW {選択人数}人選択してください
		RESETCOLOR
		DRAWLINE
		GOTO INPUT_LOOP
	ENDIF
ELSEIF 入力値 == 10000
	RETURN 0
ELSEIF RESULT == 1000 && ページ > 1
	ページ --
	GOTO INPUT_LOOP
ELSEIF RESULT == 1001 && ページ < 50
	ページ ++
	GOTO INPUT_LOOP
ELSEIF !FIND_CHARADATA(TOSTR(入力値)) && 入力値 < 100000
	LOCAL = RESULT
	IF INRANGE(RESULT, 0, MAX_CUSTOM_CHARA - 1)
		CALL INIT_CUSTOM_DATA
		CHARA_BUFFER = RESULT
		;編集できるよう一時的にプレイヤー所属にする
		CFLAG:CHARA_BUFFER:所属 = 所属_プレイヤー
		CALL EDIT_CUSTOM_DATA(LOCAL, CHARA_BUFFER)
		;編集後所属を無所属に
		IF RESULT
			CFLAG:CHARA_BUFFER:所属 = 0
		ENDIF
		SIF CHARA_BUFFER < CHARANUM
			CALL DELETE_CHARA(CHARA_BUFFER)
	ENDIF
	GOTO INPUT_LOOP
ELSEIF 入力値 >= 0 && 入力値 < MAX_CUSTOM_CHARA
	INVERTBIT SELECTED_LIST:入力値, 0
	GOTO INPUT_LOOP
ELSEIF 入力値 >= 100000
	LOCAL = 入力値 - 100000
	IF FIND_CHARADATA(TOSTR(LOCAL))
		CALL LOAD_CUSTOM_DATA(LOCAL)
		CHARA_BUFFER = RESULT
		;編集できるよう一時的にプレイヤー所属にする
		CFLAG:CHARA_BUFFER:所属 = 所属_プレイヤー
		CALL EDIT_CUSTOM_DATA(LOCAL, CHARA_BUFFER)
		;編集後所属を無所属に
		IF RESULT
			CFLAG:CHARA_BUFFER:所属 = 0
		ENDIF
	ENDIF
	GOTO INPUT_LOOP
ELSE
	GOTO INPUT_LOOP
ENDIF

FOR LOCAL:1, 0, 複製人数
	FOR LOCAL, 0, MAX_CUSTOM_CHARA
		SIF !SELECTED_LIST:LOCAL
			CONTINUE
		CALL LOAD_CUSTOM_DATA(LOCAL)
		IF 連番フラグ
			NAME:RESULT += TOSTR(1 + LOCAL:1)
			CALLNAME:RESULT += TOSTR(1 + LOCAL:1)
			CSTR:RESULT:名 += TOSTR(1 + LOCAL:1)
		ENDIF
		TALENT:RESULT:カスタムキャラ = 2
;		CFLAG:RESULT:初期キャラ = 1
		CFLAG:RESULT:所属 = 所属_プレイヤー
	NEXT
NEXT

RETURN 1


code:
;-------------------------------------------------
;能力の一覧表示
;LOCAL:1=表示ページ 2=ページ最大 3=表示チャンネル 4=表示行数 0,10,11=カウンタ
;-------------------------------------------------
@SHOP_LIFE_CHARA_TABLE
#DIM CHARA_TABLE,MAX_CHARA_NUM
#DIM SORT_VALUE,MAX_CHARA_NUM
#DIM DYNAMIC CHARA_LIST_ARRAY, MAX_CHARA_NUM
{
	#DIM HEAD_SLG =
		GETNUM(ABL, "身体"), GETNUM(ABL, "器用"), GETNUM(ABL, "知識"), GETNUM(ABL, "社交"),
		GETNUM(ABL, "魔術"), GETNUM(ABL, "観察"), GETNUM(ABL, "歌唱"),　GETNUM(ABL, "料理"),
		GETNUM(ABL, "話術"), GETNUM(ABL, "戦闘")
}

{
	#DIM HEAD_ABL =
		GETNUM(ABL, "Ｃ感"), GETNUM(ABL, "Ｖ感"), GETNUM(ABL, "Ａ感"), GETNUM(ABL, "Ｂ感"), GETNUM(ABL, "Ｍ感"),
		GETNUM(ABL, "Ｕ感"), GETNUM(ABL, "欲望"), GETNUM(ABL, "性技"), GETNUM(ABL, "性知識")
}

#DIM HEAD_BASE = GETNUM(BASE, "体力"), GETNUM(BASE, "気力"), GETNUM(BASE, "精神力")

{
	#DIM HEAD_ABL_2 =
		GETNUM(ABL, "奉仕"), GETNUM(ABL, "性交"), GETNUM(ABL, "レズ"), GETNUM(ABL, "ＢＬ"), GETNUM(ABL, "露出"),
		GETNUM(ABL, "自慰"), GETNUM(ABL, "精愛"), GETNUM(ABL, "射精"), GETNUM(ABL, "噴乳"), GETNUM(ABL, "排泄"),
		GETNUM(ABL, "触手"), GETNUM(ABL, "出産")
}

{
	#DIM HEAD_CQC =
		GETNUM(BASE, "体力"), GETNUM(ABL, "身体"), GETNUM(ABL, "魔術"), GETNUM(ABL, "攻撃力"), GETNUM(ABL, "防御力"),
		GETNUM(ABL, "軽減値"), GETNUM(ABL, "行動力"),GETNUM(ABL, "敵視")
}

{
	#DIM HEAD_CFLAG =
		GETNUM(CFLAG, "好感度"), GETNUM(CFLAG, "依存度"), GETNUM(CFLAG, "従属度"), GETNUM(CFLAG, "支配度")
}

#DIM FIRST_LINE
#DIM DESC
#DIM NOW_SORT
#DIM PREV_SORT
#DIM ページ
#DIM 最大ページ
#DIM 項目
#DIM キャラ数
#DIM 表示行数
#DIM CONST 最大キャラ数 = 23

VARSET CHARA_TABLE, -1
ページ = 1
項目 = 1
キャラ数 = 0
FOR LOCAL, 0, CHARANUM
	SIF SHOP_CHARA_LIST:LOCAL == -1
		CONTINUE
	CHARA_TABLE:LOCAL = SHOP_CHARA_LIST:LOCAL
NEXT
FOR LOCAL:0, 0, CHARANUM
	SIF CHARA_TABLE:(LOCAL:0) == -1
		BREAK
	TRYCALLFORM SHOP_LIFE_CHECKCHARA_NOURYOKU(CHARA_TABLE:(LOCAL:0))
	SIF RESULT
		キャラ数 ++
NEXT

最大ページ = キャラ数 / 最大キャラ数 + 1
FIRST_LINE = LINECOUNT
$INPUT_LOOP

;ヘッダ
CALL SINGLE_DRAWLINE
PRINTFORM ★能力を表示するキャラを選択して下さい★項目名クリックでソートできます★
PRINTBUTTON @"[%CHARALIST_MODE(), 14, LEFT%]", 95
PRINTL
PRINTBUTTON "|  NO", 50
PRINTFORM |
PRINTFORM %TOSTR_REPEAT("-",MAX_CHARANAME_LENGTH/2)%
SELECTCASE 項目
	CASE 1
		PRINTFORM |
		PRINTBUTTON "  ★", 30
		PRINTFORM |
		PRINTBUTTON "4合計", 31
		PRINTFORM |
		PRINTBUTTON "7合計", 32
		FOR LOCAL, 0, VARSIZE("HEAD_SLG")
			PRINTFORM |
			PRINTBUTTON " " +  SUBSTRING(ABLNAME:(HEAD_SLG:LOCAL),0,4), LOCAL
		NEXT
	CASE 2
		FOR LOCAL, 0, VARSIZE("HEAD_ABL")
			PRINTFORM |
			PRINTBUTTON " " + SUBSTRING(ABLNAME:(HEAD_ABL:LOCAL),0,4), LOCAL
		NEXT
		FOR LOCAL, 0, VARSIZE("HEAD_BASE")
			PRINTFORM |
			PRINTBUTTON " " + SUBSTRING(BASENAME:(HEAD_BASE:LOCAL), 0, 4), LOCAL + 70
		NEXT
	CASE 3
		FOR LOCAL, 0, VARSIZE("HEAD_ABL_2")
			PRINTFORM |
			PRINTBUTTON " " + SUBSTRING(ABLNAME:(HEAD_ABL_2:LOCAL),0,4), LOCAL
		NEXT
	CASE 4
		FOR LOCAL, 0, VARSIZE("HEAD_CFLAG")
			PRINTFORM |
			PRINTBUTTON "  " + CFLAGNAME:(HEAD_CFLAG:LOCAL), LOCAL
		NEXT
	CASE 5
		FOR LOCAL, 0, VARSIZE("HEAD_CQC")
			PRINTFORM |
			IF LOCAL == 0
				PRINTBUTTON " " + SUBSTRING(BASENAME:(HEAD_CQC:LOCAL), 0, 4), LOCAL + 70
			ELSE
				PRINTBUTTON " " + SUBSTRING(ABLNAME:(HEAD_CQC:LOCAL),0,4), LOCAL
			ENDIF
		NEXT
	CASEELSE
		PRINTFORML %TOSTR_REPEAT("-",76)%
ENDSELECT
PRINTFORML |

;メイン
キャラ数 = 0
表示行数 = 0
VARSET CHARA_LIST_ARRAY, -1
FOR LOCAL:0, 0, CHARANUM
	LOCAL:5 = CHARA_TABLE:(LOCAL:0)
	SIF LOCAL:5 == -1
		BREAK
	TRYCALLFORM SHOP_LIFE_CHECKCHARA_NOURYOKU(LOCAL:5)
	IF RESULT
		CHARA_LIST_ARRAY:キャラ数 = LOCAL:5
		キャラ数 ++
		IF (ページ-1)*最大キャラ数 <= キャラ数 -1 && ページ*最大キャラ数 > キャラ数 -1
			CALL PRINT_PARTNER_DATA_TABLE(LOCAL:5,項目)
			PRINTL
			表示行数 ++
		ENDIF
	ENDIF
NEXT

FOR LOCAL, 0, 最大キャラ数 - 表示行数
	PRINTL
NEXT

;フッタ
CALL SINGLE_DRAWLINE
PRINTFORM %TOSTR_SPACE(4)%
PRINTBUTTON "[表示切替  "+TOSTR(項目)+"/ 5]", 94
PRINTFORM %TOSTR_SPACE(4)%
IF 最大ページ >= 2
	PRINTBUTTON "[前のページ    ]", SHOP_LIFE_LIST1_PAGE_BACK
	PRINTFORM %TOSTR_SPACE(3)%page{ページ,2}/{最大ページ,2}%TOSTR_SPACE(3)%
	PRINTBUTTON "[次のページ    ]", SHOP_LIFE_LIST1_PAGE_NEXT
	PRINTFORM %TOSTR_SPACE(4)%
ELSE
	PRINTFORM %TOSTR_SPACE(51)%
ENDIF
PRINTBUTTON "[戻る          ]", 93
PRINTL

INPUT 0
CLEARLINE 1

SELECTCASE RESULT
	CASE 1
		FOR LOCAL, 0, CHARANUM
			SORT_VALUE:LOCAL = NO:LOCAL
		NEXT
	CASE 95
		;キャラ数の再計算が必要になるのでリスタート
		FLAG:能力表示フィルタ = ROUND_INCREMENT(FLAG:能力表示フィルタ, 0, 3)
		CLEARLINE LINECOUNT - FIRST_LINE
		RESTART
	CASE 93
		RETURN
	CASE SHOP_LIFE_LIST1_PAGE_BACK
		ページ --
		SIF ページ < 1
			ページ = 最大ページ
		CLEARLINE LINECOUNT - FIRST_LINE
		GOTO INPUT_LOOP
	CASE SHOP_LIFE_LIST1_PAGE_NEXT
		ページ ++
		SIF ページ > 最大ページ
			ページ = 1
		CLEARLINE LINECOUNT - FIRST_LINE
		GOTO INPUT_LOOP

	CASE 94
		項目 ++
		SIF 項目 > 5
			項目 = 1
		CLEARLINE LINECOUNT - FIRST_LINE
		GOTO INPUT_LOOP
	CASE IS >= 100
		IF NO_TO_CHARA(RESULT - 100) != -1
			ARRAYCOPY "CHARA_LIST_ARRAY", "SHOP_CHARA_LIST"
			CALL SHOW_INFO_WITH_UI(NO_TO_CHARA(RESULT - 100), 1)
		ENDIF
		CLEARLINE LINECOUNT - FIRST_LINE
		GOTO INPUT_LOOP
ENDSELECT

NOW_SORT = RESULT

IF NOW_SORT == PREV_SORT
	DESC = !DESC
ELSE
	DESC = 0
ENDIF

PREV_SORT = RESULT

;配列渡しがもうちょっとマトモな代物ならこんなゴミみたいな実装しなくていいのにね
SELECTCASE 項目
	CASE 1
		SELECTCASE NOW_SORT
			CASE 0 TO VARSIZE("HEAD_SLG")
				FOR LOCAL, 0, CHARANUM
					SORT_VALUE:LOCAL = ABL:LOCAL:(HEAD_SLG:NOW_SORT)
				NEXT
			CASE 30
				FOR LOCAL, 0, CHARANUM
					SORT_VALUE:LOCAL = TMP_CHARA_STARS:LOCAL
				NEXT
			CASE 31
				FOR LOCAL, 0, CHARANUM
					SORT_VALUE:(LOCAL:0) = ABL:(LOCAL:0):身体 + ABL:(LOCAL:0):器用 + ABL:(LOCAL:0):社交 + ABL:(LOCAL:0):知識
				NEXT
			CASE 32
				FOR LOCAL, 0, CHARANUM
					SORT_VALUE:(LOCAL:0) = ABL:(LOCAL:0):身体 + ABL:(LOCAL:0):器用 + ABL:(LOCAL:0):社交 + ABL:(LOCAL:0):知識 + ABL:(LOCAL):魔術 + ABL:LOCAL:歌唱 + ABL:LOCAL:料理
				NEXT
			CASE 50
				FOR LOCAL, 0, CHARANUM
					SORT_VALUE:LOCAL = NO:LOCAL
				NEXT
		ENDSELECT
	CASE 2
		SELECTCASE NOW_SORT
			CASE 0 TO VARSIZE("HEAD_ABL")
				FOR LOCAL, 0, CHARANUM
					SORT_VALUE:LOCAL = ABL:LOCAL:(HEAD_ABL:NOW_SORT)
				NEXT
			CASE 70 TO 70 + VARSIZE("HEAD_BASE")
				NOW_SORT -= 70
				FOR LOCAL, 0, CHARANUM
					SORT_VALUE:LOCAL = BASE:LOCAL:(HEAD_BASE:NOW_SORT)
				NEXT
		ENDSELECT
	CASE 3
		SELECTCASE NOW_SORT
			CASE 0 TO VARSIZE("HEAD_ABL_2")
				FOR LOCAL, 0, CHARANUM
					SORT_VALUE:LOCAL = ABL:LOCAL:(HEAD_ABL_2:NOW_SORT)
				NEXT
		ENDSELECT
	CASE 4
		SELECTCASE NOW_SORT
			CASE 0 TO VARSIZE("HEAD_CFLAG")
				FOR LOCAL, 0, CHARANUM
					SORT_VALUE:LOCAL = CFLAG:LOCAL:(HEAD_CFLAG:NOW_SORT)
				NEXT
		ENDSELECT
	CASE 5
		SELECTCASE NOW_SORT
			CASE 0 TO VARSIZE("HEAD_CQC")
				FOR LOCAL, 0, CHARANUM
					SORT_VALUE:LOCAL = CFLAG:LOCAL:(HEAD_CQC:NOW_SORT)
				NEXT
		ENDSELECT
ENDSELECT

FOR LOCAL,1,CHARANUM
	SIF CHARA_TABLE:LOCAL == -1
		BREAK
	FOR LOCAL:11,LOCAL,0,-1
		LOCAL:12 = CHARA_TABLE:(LOCAL:11-1)
		LOCAL:13 = CHARA_TABLE:(LOCAL:11)
		IF (DESC && SORT_VALUE:(LOCAL:12) < SORT_VALUE:(LOCAL:13)) || (!DESC && SORT_VALUE:(LOCAL:12) > SORT_VALUE:(LOCAL:13))
			SWAP CHARA_TABLE:(LOCAL:11),CHARA_TABLE:(LOCAL:11 -1)
		ELSE
			BREAK
		ENDIF
	NEXT
NEXT

;ソート順に従ってSHOP_CHARA_LISTを更新
VARSET SHOP_CHARA_LIST, -1
FOR LOCAL, 0, VARSIZE("SHOP_CHARA_LIST")
	SHOP_CHARA_LIST:LOCAL = CHARA_TABLE:LOCAL
NEXT

CLEARLINE LINECOUNT - FIRST_LINE
GOTO INPUT_LOOP

;-------------------------------------------------
;ARG:0番のキャラの情報を表示する関数
;ARG:1は表示チャンネル
;ボタンの選択番号は NO + ARG:2 になる
;-------------------------------------------------
@PRINT_PARTNER_DATA_TABLE(ARG:0, ARG:1 = 0, ARG:2 = 100)
{
	#DIM HEAD_SLG =
		GETNUM(ABL, "身体"), GETNUM(ABL, "器用"), GETNUM(ABL, "知識"), GETNUM(ABL, "社交"),
		GETNUM(ABL, "魔術"), GETNUM(ABL, "観察"),GETNUM(ABL, "歌唱"), GETNUM(ABL, "料理"),
		GETNUM(ABL, "話術"), GETNUM(ABL, "戦闘")
}

{
	#DIM HEAD_ABL =
		GETNUM(ABL, "Ｃ感"), GETNUM(ABL, "Ｖ感"), GETNUM(ABL, "Ａ感"), GETNUM(ABL, "Ｂ感"), GETNUM(ABL, "Ｍ感"),
		GETNUM(ABL, "Ｕ感"), GETNUM(ABL, "欲望"), GETNUM(ABL, "性技"), GETNUM(ABL, "性知識")
}

#DIM HEAD_BASE = GETNUM(BASE, "体力"), GETNUM(BASE, "気力"), GETNUM(BASE, "精神力")

{
	#DIM HEAD_ABL_2 =
		GETNUM(ABL, "奉仕"), GETNUM(ABL, "性交"), GETNUM(ABL, "レズ"), GETNUM(ABL, "ＢＬ"), GETNUM(ABL, "露出"),
		GETNUM(ABL, "自慰"), GETNUM(ABL, "精愛"), GETNUM(ABL, "射精"), GETNUM(ABL, "噴乳"), GETNUM(ABL, "排泄"),
		GETNUM(ABL, "触手"), GETNUM(ABL, "出産")
}

{
	#DIM HEAD_CQC =
		GETNUM(BASE, "体力"), GETNUM(ABL, "身体"), GETNUM(ABL, "魔術"), GETNUM(ABL, "攻撃力"), GETNUM(ABL, "防御力"),
		GETNUM(ABL, "軽減値"), GETNUM(ABL, "行動力"),GETNUM(ABL, "敵視")
}

{
	#DIM HEAD_CFLAG =
		GETNUM(CFLAG, "好感度"), GETNUM(CFLAG, "依存度"), GETNUM(CFLAG, "従属度"), GETNUM(CFLAG, "支配度")
}

PRINTFORM [{NO:(ARG:0) + ARG:2, 4}] %SNAME(ARG:0), MAX_CHARANAME_LENGTH/2, LEFT%
SELECTCASE ARG:1
	CASE 1
		CALL TMP_PRINT_CHARA_STARS_NUM(ARG:0)
		PRINT |
		PRINTFORM {ABL:(ARG:0):身体 + ABL:(ARG:0):器用 + ABL:(ARG:0):知識 + ABL:(ARG:0):社交,5}|
		PRINTFORM {ABL:(ARG:0):身体 + ABL:(ARG:0):器用 + ABL:(ARG:0):知識 + ABL:(ARG:0):社交 + ABL:(ARG:0):魔術 + ABL:(ARG:0):歌唱+ABL:(ARG:0):料理,5}
		FOR LOCAL, 0, VARSIZE("HEAD_SLG")
			PRINT |
			CALL PRINT_ALPHABET_RANK(ランク_ＳＬＧ, ABL:(ARG:0):(HEAD_SLG:LOCAL))
			PRINTFORM {ABL:(ARG:0):(HEAD_SLG:LOCAL), 4}
		NEXT
		PRINT |
	CASE 2
		FOR LOCAL, 0, VARSIZE("HEAD_ABL")
			IF HEAD_ABL:LOCAL == GETNUM(ABL, "性知識")
				CALL PRINT_ALPHABET_RANK(ランク_性知識, ABL:(ARG:0):(HEAD_ABL:LOCAL))
			ELSE
				CALL PRINT_ALPHABET_RANK(ランク_その他, ABL:(ARG:0):(HEAD_ABL:LOCAL))
			ENDIF
			PRINTFORM %TOSTR_R(ABL:(ARG:0):(HEAD_ABL:LOCAL), 4)%|
		NEXT
		FOR LOCAL, 0, VARSIZE("HEAD_BASE")
			PRINTFORM %TOSTR_R(BASE:(ARG:0):(HEAD_BASE:LOCAL), 5)%|
		NEXT
	CASE 3
		FOR LOCAL, 0, VARSIZE("HEAD_ABL_2")
			CALL PRINT_ALPHABET_RANK(ランク_その他, ABL:(ARG:0):(HEAD_ABL_2:LOCAL))
			PRINTFORM %TOSTR_R(ABL:(ARG:0):(HEAD_ABL_2:LOCAL), 4)%|
		NEXT
	CASE 4
		FOR LOCAL, 0, VARSIZE("HEAD_CFLAG")
			PRINTFORM {CFLAG:(ARG:0):(HEAD_CFLAG:LOCAL), 8}|
		NEXT
	CASE 5
		FOR LOCAL, 0, VARSIZE("HEAD_CQC")
			IF LOCAL == 0
				PRINTFORM %TOSTR_R(BASE:(ARG:0):(HEAD_CQC:LOCAL), 5)%|
			ELSE
				IF HEAD_CQC:LOCAL == GETNUM(ABL, "身体")
					CALL PRINT_ALPHABET_RANK(ランク_ＳＬＧ, ABL:(ARG:0):(HEAD_CQC:LOCAL))
				ELSEIF HEAD_CQC:LOCAL == GETNUM(ABL, "魔術")
					CALL PRINT_ALPHABET_RANK(ランク_ＳＬＧ, ABL:(ARG:0):(HEAD_CQC:LOCAL))
				ELSEIF HEAD_CQC:LOCAL == GETNUM(ABL, "防御力")
					CALL PRINT_ALPHABET_RANK(ランク_防御力, ABL:(ARG:0):(HEAD_CQC:LOCAL))
				ELSE
					CALL PRINT_ALPHABET_RANK(ランク_戦闘力, ABL:(ARG:0):(HEAD_CQC:LOCAL))
				ENDIF
				PRINTFORM %TOSTR_R(ABL:(ARG:0):(HEAD_CQC:LOCAL), 4)%|
			ENDIF
		NEXT
ENDSELECT
RETURN
;-------------------------------------------------
; ARG:0を文字列に変換 ARG:1の幅で右寄せ
;-------------------------------------------------
@TOSTR_R(ARG:0,ARG:1)
#FUNCTIONS
VARSET LOCALS
LOCALS '= TOSTR(ARG:0)
LOCAL = STRLENS(LOCALS)
IF LOCAL < ARG:1
	FOR LOCAL:1,0,ARG:1-LOCAL
		LOCALS:1 += " "
	NEXT
ENDIF
LOCALS:1 += LOCALS
RETURNF LOCALS:1


code:
;-------------------------------------------------
;「関係一覧」の名称
;-------------------------------------------------
@SHOP_LIFE_NAME52
RESULTS:0 '= ""

;-------------------------------------------------
;「関係一覧」の選択可否
;-------------------------------------------------
@SHOP_LIFE_CHECK52
SIF CFLAG:MASTER:捕虜先
	RETURN 0
RETURN 1

;-------------------------------------------------
;「関係一覧」の選択可能キャラ存在判定
;-------------------------------------------------
@SHOP_LIFE_CHECKCHARA52(ARG:0)
;能力表示
CALL SHOP_LIFE_CHECKCHARA_NOURYOKU(ARG:0)
RETURN RESULT

;-------------------------------------------------
;「関係一覧」の左カラムメニューの入力処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY52
FLAG:拠点フェイズページ = 1
FLAG:関係一覧表示対象 = 0
FLAG:関係一覧表示モード = 0
FLAG:夜這い = 0
RETURN 0

;-------------------------------------------------
;「関係一覧」の右カラムキャラリストボタン表示に追尾させる情報
;　この追記後デフォルトの情報を表示しない場合はRETURN 1
;-------------------------------------------------
@SHOP_LIFE_BUTTON_ADD52(ARG:0)
PRINTPLAIN
IF FLAG:関係一覧表示対象 >= 0
	IF FLAG:関係一覧表示モード == 0
		SETCOLOR 0xE98FB0
		PRINTFORM 好
		SETCOLOR カラー_注釈
		PRINTFORM :
		RESETCOLOR
		PRINTFORM  %NUM_FORMAT(REL_LIKE:(FLAG:関係一覧表示対象):(ARG:0)), 5%
		PRINTFORM
		SETCOLOR 0x8F99E0
		PRINTFORM 嫌
		SETCOLOR カラー_注釈
		PRINTFORM :
		RESETCOLOR
		PRINTFORM  %NUM_FORMAT(REL_HATE:(FLAG:関係一覧表示対象):(ARG:0)), 5%
	ELSE
		SETCOLOR 0xE98FB0
		PRINTFORM 好
		SETCOLOR カラー_注釈
		PRINTFORM :
		RESETCOLOR
		PRINTFORM  %NUM_FORMAT(REL_LIKE:(ARG:0):(FLAG:関係一覧表示対象)), 5%
		PRINTFORM
		SETCOLOR 0x8F99E0
		PRINTFORM 嫌
		SETCOLOR カラー_注釈
		PRINTFORM :
		RESETCOLOR
		PRINTFORM  %NUM_FORMAT(REL_HATE:(ARG:0):(FLAG:関係一覧表示対象)), 5%
	ENDIF
ENDIF
RETURN 1

;-------------------------------------------------
;「関係一覧」の右カラムキャラリスト１のボタン（関数未指定なら選択中色なし表示）
;-------------------------------------------------
@SHOP_LIFE_LIST1_BUTTON52(ARG:0, ARG:1)
;キャラ, 選択中カラー表示フラグ, ボタン番号に追加する数値, CHECKCHARAの戻り値, 行動済みマークをオフにするフラグ
CALL COLUMN_RIGHT_CHARALIST_BUTTON(ARG:0, ARG:0 == FLAG:関係一覧表示対象, SHOP_LIFE_LIST1_ADD_INPUT, ARG:1, 1)
RETURN 0

;-------------------------------------------------
;「関係一覧」の右カラム表示処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SHOW52
#DIM 選択人数
#DIM PRINTOPTION

IF FLAG:関係一覧表示対象 >= 0
	選択人数 = 1
ELSE
	選択人数 = 0
ENDIF

;タイトル
CALL COLUMN_RIGHT_TITLE("対象者選択", TOSTR(選択人数), "1", "0", "0")
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

PRINTBUTTON @"[%CHARALIST_MODE(), MAX_CHARANAME_LENGTH, LEFT%]", 2
PRINTPLAIN
IF FLAG:関係一覧表示モード == 0
	IF FLAG:関係一覧表示対象 >= 0
		LOCALS:0 '= ANAME(FLAG:関係一覧表示対象) + "➡他"
	ELSE
		LOCALS:0 '= "選択対象からの感情"
	ENDIF
ELSE
	IF FLAG:関係一覧表示対象 >= 0
		LOCALS:0 '= "他➡" + ANAME(FLAG:関係一覧表示対象)
	ELSE
		LOCALS:0 '= "選択対象への感情"
	ENDIF
ENDIF
PRINTBUTTON @"[%LOCALS:0, MAX_CHARANAME_LENGTH + 4, LEFT%]", 1
PRINTPLAIN

;表示対象がMASTERでなく、所属があり、主人公と同一所属で、君主でない場合
IF FLAG:関係一覧表示対象 != MASTER && IS_COUNTRY(CFLAG:(FLAG:関係一覧表示対象):所属) && CFLAG:(FLAG:関係一覧表示対象):所属 == CFLAG:MASTER:所属 && GET_COUNTRY_BOSS(CFLAG:(FLAG:関係一覧表示対象):所属) != FLAG:関係一覧表示対象
	PRINTBUTTON "[報償]", 3
ELSE
	SETCOLOR カラー_選択不可
	PRINTPLAIN [報償]
	RESETCOLOR
ENDIF

CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

;標準的なキャラリストとページ移動
CALL COLUMN_RIGHT_CHARALIST

RETURN 0

;-------------------------------------------------
;「関係一覧」の右カラムボタンの入力処理補佐
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SUB52(ARG:0)
;「への」「からの」切り替え
IF ARG:0 == 1
	FLAG:関係一覧表示モード = !FLAG:関係一覧表示モード
	RETURN 0
	;能力表示フィルタ
ELSEIF ARG:0 == 2
	FLAG:能力表示フィルタ = ROUND_INCREMENT(FLAG:能力表示フィルタ, 0, 3)
	RETURN 0
ELSEIF ARG:0 == 3
	CALL SHOP_LIFE_PAYMENT(FLAG:関係一覧表示対象)
ENDIF
RETURN 0

;-------------------------------------------------
;「関係一覧」のリスト１入力処理
;-------------------------------------------------
@SHOP_LIFE_USERSHOP52(ARG:0)
FLAG:関係一覧表示対象 = ARG:0
RETURN 0

@SHOP_LIFE_PAYMENT(対象)
#DIM 対象
#DIM 君主
#DIM 効果量
#DIM 社交比
#DIM FIRST_LINE
#DIM CONST リスト = 1000, 3000, 5000, 10000, 15000, 30000, 50000, 75000

FIRST_LINE = LINECOUNT

CALL SINGLE_DRAWLINE

君主 = GET_COUNTRY_BOSS(CFLAG:MASTER:所属)
PRINTFORML 個人の財布から金を出して、労をねぎらい勢力への忠誠を高めます
PRINTFORML 効果は支払った額、%ANAME(MASTER)%と%ANAME(対象)%の社交により決まります
PRINTFORML いくら支払いますか？(リストから選択、または手入力)
CALL SINGLE_DRAWLINE
PRINTFORML %ANAME(対象)%の%ANAME(君主)%への友好度:{REL_LIKE:対象:君主} 嫌悪度:{REL_HATE:対象:君主}
PRINTFORML %ANAME(MASTER)%の社交:{ABL:MASTER:社交} %ANAME(対象)%の社交:{ABL:対象:社交}
PRINTFORML 所持金:{MONEY}
CALL SINGLE_DRAWLINE

FOR LOCAL, 0, VARSIZE("リスト")
	SIF リスト:LOCAL > MONEY
		BREAK
	PRINTFORML [{リスト:LOCAL}] 金{リスト:LOCAL}
NEXT

PRINTBUTTON "[戻る]", 0

INPUT

IF RESULT == 0
	RETURN 0
ELSEIF INRANGE(RESULT, 0, MONEY)
	PRINTFORMW %ANAME(対象)%に{RESULT}支払いました
	効果量 = RESULT / 50
	社交比 = MIN(ABL:MASTER:社交 * 100 / ABL:対象:社交, 300)
	効果量 = 効果量 * 社交比 / 100
	CALL CHANGE_RELATION_O_TO_C(対象, CFLAG:対象:所属, 効果量, 効果量 * -1)
	RETURN 0
ENDIF

CLEARLINE LINECOUNT - FIRST_LINE
RESTART