code:
;-------------------------------------------------
; 調教イベントで生成される非人間系汎用モブのプリセット
;-------------------------------------------------
@QST_TRAIN_MOB_PRESET(PRESET_NAME, MOB_NAME ="", SEX= 0, 体力最大化 = 1)
#DIMS PRESET_NAME
#DIMS MOB_NAME
#DIM  DYNAMIC SEX
#DIM  DYNAMIC 体力最大化
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC 衣装設定
#DIM  CONST 衣装設定_変更しない = 0
#DIM  CONST 衣装設定_ランダム   = 1
#DIM  CONST 衣装設定_全裸       = -1

CALL CREATE_RANDOM_CHARA(0, -1, SEX)
FLAG:汎用武将カウント --
CHARA_ID = RESULT
IF LOCAL == -1
    RETURN -1
ENDIF

衣装設定 = 衣装設定_ランダム
CALL QST_TRAIN_MOB_BASE(CHARA_ID, MOB_NAME, SEX)
SELECTCASE PRESET_NAME
    CASE "ゴブリン", "ホブゴブリン"
        CALL QST_TRAIN_MOB_ゴブリン(CHARA_ID, MOB_NAME, PRESET_NAME)
        衣装設定 = 衣装設定_変更しない
    CASE "スキュラ"
        CALL QST_TRAIN_MOB_スキュラ(CHARA_ID, MOB_NAME, PRESET_NAME)
        衣装設定 = 衣装設定_全裸
    CASE "ハーピィ"
        CALL QST_TRAIN_MOB_ハーピィ(CHARA_ID, MOB_NAME, PRESET_NAME)
        衣装設定 = 衣装設定_全裸
    CASE "触手", "ブラシ触手", "触手寄生体", "フェイスハガー", "スライム", "乳首ねぶりスライム", "触手_設備"
        CSTR:CHARA_ID:キャラ顔グラ '= "DUMMY.webp"
        CFLAG:CHARA_ID:ポートレイト画像タイプ = 2
        CALL QST_TRAIN_MOB_触手(CHARA_ID, MOB_NAME, PRESET_NAME)
        衣装設定 = 衣装設定_全裸
    CASE "Ｃコイン"
        CSTR:CHARA_ID:キャラ顔グラ '= "DUMMY.webp"
        CFLAG:CHARA_ID:ポートレイト画像タイプ = 2
        CALL QST_TRAIN_MOB_Ｃコイン(CHARA_ID, MOB_NAME, PRESET_NAME)
        衣装設定 = 衣装設定_全裸
    CASE "犬", "豚", "馬", "猿", "蟲", "ワーグ"
        SELECTCASE PRESET_NAME
            CASE "ワーグ"
                CSTR:CHARA_ID:キャラ顔グラ '= "warg01.webp"
            CASE "豚"
                CSTR:CHARA_ID:キャラ顔グラ '= "pig01.webp"
            CASE "馬"
                CSTR:CHARA_ID:キャラ顔グラ '= "horse01.webp"
            CASEELSE
                CSTR:CHARA_ID:キャラ顔グラ '= "DUMMY.webp"
        ENDSELECT
        CFLAG:CHARA_ID:ポートレイト画像タイプ = 2
        CALL QST_TRAIN_MOB_動物(CHARA_ID, MOB_NAME, PRESET_NAME, SEX)
        衣装設定 = 衣装設定_全裸
    CASE "機械姦", "機械姦ＳＭ"
        CSTR:CHARA_ID:キャラ顔グラ '= "DUMMY.webp"
        CFLAG:CHARA_ID:ポートレイト画像タイプ = 2
        CALL QST_TRAIN_MOB_機械(CHARA_ID, MOB_NAME, PRESET_NAME)
        衣装設定 = 衣装設定_全裸
    CASE "メスガキアマゾネス", "アマゾネス"
        IF PRESET_NAME == "メスガキアマゾネス"
            TRYCALLFORM CREATE_MOB_メスガキ(CHARA_ID)
        ELSE
            TRYCALLFORM CREATE_MOB_冒険者(CHARA_ID)
        ENDIF
        ;褐色肌をセット
        COLOR_MATRIX_NAME:CHARA_ID:IMG_身体 '= "褐色"
        COLOR_MATRIX_NAME:CHARA_ID:IMG_顔 '= "褐色"
        衣装設定 = 衣装設定_ランダム
    CASE "淫魔"
        TRYCALLFORM CREATE_MOB_淫魔(CHARA_ID)
        衣装設定 = 衣装設定_ランダム
    CASEELSE
        TRYCALLFORM CREATE_MOB_%PRESET_NAME%(CHARA_ID)
        衣装設定 = 衣装設定_ランダム
ENDSELECT

IF MOB_NAME != ""
    NAME:CHARA_ID = %MOB_NAME%
    CALLNAME:CHARA_ID = %MOB_NAME%
ENDIF

IF 体力最大化
    MAXBASE:CHARA_ID:体力 = 9999
    MAXBASE:CHARA_ID:気力 = 9999
    BASE:CHARA_ID:体力 = MAXBASE:CHARA_ID:体力
    BASE:CHARA_ID:気力 = MAXBASE:CHARA_ID:気力
ENDIF

;素質に合わせた性経験初期設定
CALL QST_TRAIN_MOB_INIT_SEXUAL_EXPERIENCE(CHARA_ID)

;衣装データ再設定
SELECTCASE 衣装設定
    CASE 衣装設定_変更しない
        ;変更しない(個別で設定したもの等を使用)
    CASE 衣装設定_ランダム
        ;ランダムで衣装を着せる
        CALL RANDOM_CHARA_CLOTH_SETTING(, CHARA_ID)
    CASE 衣装設定_全裸
        ;脱がす
        CALL CLOTH_RESET(CHARA_ID)
ENDSELECT

;衣装データを一時領域にコピー
IF FLAG:ハウジングモード
    FOR LOCAL, 0, CLOTH_PART_NUM
        調教用衣装:CHARA_ID:LOCAL = CLOTH:CHARA_ID:LOCAL
    NEXT
ENDIF

; モブキャラに性交渉記録付き
CALL RANDOM_CHARA_REPRODUCTION_SETTING(CHARA_ID)

RETURN CHARA_ID

;汎用的に流用可能な素質で良い場合はまずこの関数で汎用素質をセットし、
;モブの種類に応じて個別の素質を設定する
@QST_TRAIN_MOB_BASE(CHARA_ID, MOB_NAME, SEX)
#DIM  CHARA_ID
#DIMS MOB_NAME
#DIM  SEX
#DIM 男女
#DIMS 名前
名前 = %MOB_NAME%

NO:CHARA_ID = GET_EMPTY_NO()
NAME:CHARA_ID = %名前%
CALLNAME:CHARA_ID = %名前%
CSTR:CHARA_ID:姓 '= ""
CSTR:CHARA_ID:名 '= ""
TALENT:CHARA_ID:性別 = SEX
MAXBASE:CHARA_ID:精神力 = 1500
BASE:CHARA_ID:精神力 = MAXBASE:CHARA_ID:精神力
ABL:CHARA_ID:性知識 = 5
ABL:CHARA_ID:Ｃ感 = RAND(0,3)
ABL:CHARA_ID:Ｖ感 = RAND(0,3)
ABL:CHARA_ID:Ａ感 = RAND(0,3)
ABL:CHARA_ID:Ｂ感 = RAND(0,3)
ABL:CHARA_ID:Ｍ感 = RAND(0,3)
ABL:CHARA_ID:欲望 = RAND(3,5)
ABL:CHARA_ID:性技 = RAND(4,7)
ABL:CHARA_ID:性知識 = 5
ABL:CHARA_ID:奉仕 = RAND(0,3)
ABL:CHARA_ID:性交 = RAND(0,3)
ABL:CHARA_ID:レズ = RAND:2
ABL:CHARA_ID:精愛 = RAND:2
ABL:CHARA_ID:露出 = RAND:2
ABL:CHARA_ID:射精 = RAND:3
ABL:CHARA_ID:排泄 = RAND:2
ABL:CHARA_ID:主導度Ｕ = RAND(0, 600)
ABL:CHARA_ID:主導度Ｎ = 999 ;MAXで様子見
ABL:CHARA_ID:倒錯度 = 999 ;MAXで様子見
EXP:CHARA_ID:絶頂経験 = 500
ABL:CHARA_ID:身体 = 30
ABL:CHARA_ID:器用 = 30
ABL:CHARA_ID:知識 = 30
ABL:CHARA_ID:社交 = 30
ABL:CHARA_ID:料理 = 10
ABL:CHARA_ID:肝臓 = 3
IF HAS_PENIS(CHARA_ID)
    FOR LOCAL, 30, 50
        SIF GROUPMATCH(LOCAL, 36, 46)
            CONTINUE
        COM_TENDENCY:CHARA_ID:LOCAL = RAND:2
    NEXT
ENDIF

IF HAS_VAGINA(CHARA_ID)
    FOR LOCAL, 30, 50
        SIF GROUPMATCH(LOCAL, 36, 46)
            CONTINUE
        COM_TENDENCY:CHARA_ID:LOCAL = RAND:2
    NEXT
ENDIF

TALENT:CHARA_ID:絶倫 = 1
TALENT:CHARA_ID:陰毛現在値 = 陰毛_標準
TALENT:CHARA_ID:陰毛目標値 = 陰毛_標準
TALENT:CHARA_ID:Ｖ締まり = GET_DEFAULT_TIGHTNESS("普通")
TALENT:CHARA_ID:Ａ締まり = GET_DEFAULT_TIGHTNESS("普通")
TALENT:CHARA_ID:処女 = 0
TALENT:CHARA_ID:キス未経験 = 0
TALENT:CHARA_ID:童貞 = 0
TALENT:CHARA_ID:アナル処女 = 1

CFLAG:CHARA_ID:慰安参加者 = 1
CFLAG:CHARA_ID:慰安モブ = 1
CFLAG:CHARA_ID:調教参加フラグ  = 1
CFLAG:CHARA_ID:強制友好化 = 1

@QST_TRAIN_MOB_ゴブリン(CHARA_ID, MOB_NAME, PRESET_NAME)
#DIM CHARA_ID
#DIMS MOB_NAME
#DIMS PRESET_NAME

IF MOB_NAME == ""
    MOB_NAME '= "ゴブリン"
ENDIF
NAME:CHARA_ID = %MOB_NAME%
CALLNAME:CHARA_ID = %MOB_NAME%
TALENT:CHARA_ID:性別 = 0
ABL:CHARA_ID:Ｃ感 = 4
ABL:CHARA_ID:欲望 = 6
ABL:CHARA_ID:性技 = 4
ABL:CHARA_ID:性知識 = 5
ABL:CHARA_ID:奉仕 = 0
ABL:CHARA_ID:性交 = 4
ABL:CHARA_ID:露出 = 1
ABL:CHARA_ID:射精 = 4
ABL:CHARA_ID:排泄 = 2
ABL:CHARA_ID:サド = 3
ABL:CHARA_ID:主導度Ｕ = 700
ABL:CHARA_ID:主導度Ｎ = 300
ABL:CHARA_ID:倒錯度 = 500
EXP:CHARA_ID:絶頂経験 = 500
TALENT:CHARA_ID:特殊勢力素質 = 特殊勢力_ゴブリン
COM_TENDENCY:CHARA_ID:36 = 1
COM_TENDENCY:CHARA_ID:46 = 1
COM_TENDENCY:CHARA_ID:55 = 1
COM_TENDENCY:CHARA_ID:56 = 1
COM_TENDENCY:CHARA_ID:57 = 1
COM_TENDENCY:CHARA_ID:58 = 1
CFLAG:CHARA_ID:慰安参加者非対象化 = 1
CSTR:CHARA_ID:モブ識別子 '= "ゴブリン"

CSTR:CHARA_ID:キャラ顔グラ '= "goblin01.webp"
CFLAG:CHARA_ID:ポートレイト画像タイプ = 2

;衣装は腰布のみ
CALL CLOTH_RESET(CHARA_ID)
CALL SET_CLOTH_BY_NAME(CHARA_ID, 衣装部位_下服, "腰布")

@QST_TRAIN_MOB_動物(CHARA_ID, MOB_NAME, PRESET_NAME, SEX)
#DIM CHARA_ID
#DIMS MOB_NAME
#DIMS PRESET_NAME
#DIM  SEX

IF MOB_NAME == ""
    MOB_NAME = %PRESET_NAME%
ENDIF
NAME:CHARA_ID = %MOB_NAME%
CALLNAME:CHARA_ID = %MOB_NAME%
TALENT:CHARA_ID:性別 = SEX
ABL:CHARA_ID:Ｃ感 = RAND(3, 6)
ABL:CHARA_ID:欲望 = RAND(3, 8)
ABL:CHARA_ID:性技 = RAND:3
ABL:CHARA_ID:奉仕 = RAND(2, 5)
ABL:CHARA_ID:性交 = RAND(5, 8)
ABL:CHARA_ID:射精 = RAND(3, 8)
ABL:CHARA_ID:主導度Ｕ = RAND(300, 600)
ABL:CHARA_ID:主導度Ｎ = RAND(300, 600)
ABL:CHARA_ID:倒錯度 = RAND(300, 600)
ABL:CHARA_ID:サド = RAND(3, 7)
IF !RAND:3
    TALENT:CHARA_ID:両刀 = 1
ENDIF
TALENT:CHARA_ID:動物耳 = 1
TALENT:CHARA_ID:しっぽ = 1
TALENT:CHARA_ID:ペニスサイズ = RAND(1, 3)

;動物は特定の挿入系コマンドしか許可しない
VARSET COM_FORBIDDEN:CHARA_ID:0, 1
COM_FORBIDDEN:CHARA_ID:T_N("正常位") = 0
COM_FORBIDDEN:CHARA_ID:T_N("後背位") = 0
COM_FORBIDDEN:CHARA_ID:T_N("二本挿入") = 0
COM_FORBIDDEN:CHARA_ID:T_N("立ちバック") = 0
COM_FORBIDDEN:CHARA_ID:T_N("順番に挿入") = 0
COM_FORBIDDEN:CHARA_ID:T_N("代わる代わる挿入") = 0
COM_FORBIDDEN:CHARA_ID:T_N("Ａ正常位") = 0
COM_FORBIDDEN:CHARA_ID:T_N("Ａ後背位") = 0
COM_FORBIDDEN:CHARA_ID:T_N("Ａ二本挿入") = 0
COM_FORBIDDEN:CHARA_ID:T_N("Ａ立ちバック") = 0
COM_FORBIDDEN:CHARA_ID:T_N("順番にＡ挿入") = 0
COM_FORBIDDEN:CHARA_ID:T_N("代わる代わるＡ挿入") = 0
COM_FORBIDDEN:CHARA_ID:T_N("尿を掛ける") = 0
COM_FORBIDDEN:CHARA_ID:T_N("口内放尿") = 0
COM_FORBIDDEN:CHARA_ID:T_N("イラマチオ") = 0

SELECTCASE PRESET_NAME
    CASE "犬", "ワーグ"
        CSTR:CHARA_ID:モブ識別子 '= "犬"
        TALENT:CHARA_ID:動物 = 動物_犬
        IF PRESET_NAME == "ワーグ"
            CSTR:CHARA_ID:モブ識別子 '= "ワーグ"
        ENDIF
    CASE "豚"
        CSTR:CHARA_ID:モブ識別子 '= "豚"
        TALENT:CHARA_ID:動物 = 動物_豚
    CASE "馬"
        CSTR:CHARA_ID:モブ識別子 '= "馬"
        TALENT:CHARA_ID:動物 = 動物_馬
    CASE "猿"
        CSTR:CHARA_ID:モブ識別子 '= "猿"
        TALENT:CHARA_ID:動物 = 動物_猿
    CASE "蟲","虫"
        TALENT:CHARA_ID:動物 = 動物_蟲
        CSTR:CHARA_ID:モブ識別子 '= "蟲"
ENDSELECT

CFLAG:CHARA_ID:慰安参加者非対象化 = 1
CFLAG:CHARA_ID:慰安参加者 = 1
CFLAG:CHARA_ID:慰安モブ = 1
CFLAG:CHARA_ID:調教参加フラグ  = 1
CALL SET_BODYSIZE(CHARA_ID)

@QST_TRAIN_MOB_触手(CHARA_ID, MOB_NAME, PRESET_NAME)
#DIMS MOB_NAME
#DIM CHARA_ID
#DIMS PRESET_NAME

IF MOB_NAME == "" && PRESET_NAME == "触手" || PRESET_NAME == "触手_設備"
    MOB_NAME '= "触手"
ELSEIF MOB_NAME == "" && PRESET_NAME == "ブラシ触手"
    MOB_NAME '= "ブラシ触手"
ELSEIF MOB_NAME == "" && PRESET_NAME == "触手寄生体"
    MOB_NAME '= "触手寄生体"
ELSEIF MOB_NAME == ""
    MOB_NAME = %PRESET_NAME%
ENDIF
CSTR:CHARA_ID:モブ識別子 '= "触手"
NO:CHARA_ID = GET_EMPTY_NO()
NAME:CHARA_ID = %MOB_NAME%
CALLNAME:CHARA_ID = %MOB_NAME%
CSTR:CHARA_ID:姓 '= ""
CSTR:CHARA_ID:名 '= ""
TALENT:CHARA_ID:性別 = 0
MAXBASE:CHARA_ID:体力 = 9999
MAXBASE:CHARA_ID:気力 = 9999
MAXBASE:CHARA_ID:精神力 = 1500
ITEM:A_媚薬 = 99
BASE:CHARA_ID:体力 = MAXBASE:CHARA_ID:体力
BASE:CHARA_ID:気力 = MAXBASE:CHARA_ID:気力
BASE:CHARA_ID:精神力 = MAXBASE:CHARA_ID:精神力
ABL:CHARA_ID:触手 = RAND(1, 5)
ABL:CHARA_ID:性知識 = 5
ABL:CHARA_ID:Ｃ感 = 5
ABL:CHARA_ID:欲望 = 15
ABL:CHARA_ID:性技 = 20
ABL:CHARA_ID:性知識 = 5
ABL:CHARA_ID:奉仕 = 1
ABL:CHARA_ID:性交 = 15
ABL:CHARA_ID:レズ = 0
ABL:CHARA_ID:精愛 = 3
ABL:CHARA_ID:露出 = 2
ABL:CHARA_ID:射精 = 20
ABL:CHARA_ID:排泄 = 3
ABL:CHARA_ID:サド = 5
ABL:CHARA_ID:主導度Ｕ = 99999999
ABL:CHARA_ID:主導度Ｎ = 999 ;MAXで様子見
ABL:CHARA_ID:倒錯度 = 999 ;MAXで様子見
EXP:CHARA_ID:絶頂経験 = 500

VARSET COM_FORBIDDEN:CHARA_ID:0, 1
SELECTCASE PRESET_NAME
    CASE "触手"
        SELECTCASE RAND:7
            CASE 0 TO 3
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手召喚") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "媚薬") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手緊縛") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手挿入") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手クリ責め") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手産卵") = 0

                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手召喚") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "媚薬") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手緊縛") = 1
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手挿入") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手クリ責め") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手産卵") = 3
            CASE 4 TO 5
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手召喚") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "媚薬") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手緊縛") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手挿入") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手Ａ挿入") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手Ａ産卵") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手尿道挿入") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手Ｕ産卵") = 0

                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手召喚") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "媚薬") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手緊縛") = 1
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手挿入") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手Ａ挿入") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手Ａ産卵") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手尿道挿入") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手Ｕ産卵") = 3
            CASEELSE
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手召喚") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "媚薬") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手緊縛") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手挿入") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手胸愛撫") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手搾乳") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手乳腺開発") = 0
                COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手口辱") = 0

                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手召喚") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "媚薬") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手緊縛") = 2
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手挿入") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手胸愛撫") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手搾乳") = 3
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手乳腺開発") = 2
                COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手口辱") = 2
        ENDSELECT
    CASE "触手_設備"
        ;触手系コマンド全て可
        FOR LOCAL, 200, 216 + 1
            COM_FORBIDDEN:CHARA_ID:LOCAL = 0
        NEXT
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "媚薬") = 0
    CASE "ブラシ触手"
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手召喚") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "媚薬") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手緊縛") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手クリ責め") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手胸愛撫") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手オナホ") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手コキ") = 0

        COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手召喚") = 3
        COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "媚薬") = 3
        COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手緊縛") = 2
        COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手クリ責め") = 3
        COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手胸愛撫") = 2
        COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手オナホ") = 3
        COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手コキ") = 3
    CASE  "フェイスハガー"
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手口辱") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "イラマチオ") = 0
    CASE  "触手寄生体"
        FOR LOCAL, 0, 200
            SELECTCASE LOCAL
                    ;挿入系コマンドを許可
                CASE 30 TO 49,52 TO 58, 160, 161
                    COM_FORBIDDEN:CHARA_ID:LOCAL = 0
                    ;フェラ系コマンドを許可
                CASE 11 , 16, 90, 107, 330
                    COM_FORBIDDEN:CHARA_ID:LOCAL = 0
            ENDSELECT
        NEXT
        TALENT:CHARA_ID:崩壊 = 1
    CASE "スライム", "乳首ねぶりスライム"
        CSTR:CHARA_ID:モブ識別子 '= "スライム"
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手召喚") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手胸愛撫") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手クリ責め") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手胸愛撫") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手オナホ") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手コキ") = 0

        COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手召喚") = 3
        IF PRESET_NAME == "乳首ねぶりスライム"
            COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手胸愛撫") = 0
            COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手搾乳") = 0
            COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "触手乳腺開発") = 0
            COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手胸愛撫") = 3
            COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手搾乳") = 3
            COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "触手乳腺開発") = 2
        ENDIF
ENDSELECT

TALENT:CHARA_ID:魔術師 = 1
TALENT:CHARA_ID:絶倫 = 1
TALENT:CHARA_ID:陰毛現在値 = 陰毛_標準
TALENT:CHARA_ID:陰毛目標値 = 陰毛_標準
TALENT:CHARA_ID:Ｖ締まり = GET_DEFAULT_TIGHTNESS("普通")
TALENT:CHARA_ID:Ａ締まり = GET_DEFAULT_TIGHTNESS("普通")
TALENT:(CHARA_ID):処女 = 0
TALENT:(CHARA_ID):キス未経験 = 0
TALENT:(CHARA_ID):童貞 = 0
TALENT:(CHARA_ID):アナル処女 = 1
SETBIT TALENT:CHARA_ID:淫乱系, 素質_淫乱_サド
TALENT:CHARA_ID:貞操無頓着 = 1
TALENT:CHARA_ID:貞操観念 = 0
TALENT:CHARA_ID:特殊勢力素質 = 特殊勢力_触手

CFLAG:CHARA_ID:慰安参加者 = 1
CFLAG:CHARA_ID:慰安モブ = 1
CFLAG:CHARA_ID:調教参加フラグ  = 1
CFLAG:CHARA_ID:強制友好化 = 1
CFLAG:CHARA_ID:慰安参加者非対象化 = 1
CALL SET_BODYSIZE(CHARA_ID)

@QST_TRAIN_MOB_Ｃコイン(CHARA_ID, MOB_NAME, PRESET_NAME)
#DIMS MOB_NAME
#DIM CHARA_ID
#DIMS PRESET_NAME

MOB_NAME '= "クリーピングコイン"
NO:CHARA_ID = GET_EMPTY_NO()
NAME:CHARA_ID = %MOB_NAME%
CALLNAME:CHARA_ID = %MOB_NAME%
CSTR:CHARA_ID:姓 '= ""
CSTR:CHARA_ID:名 '= ""
CSTR:CHARA_ID:モブ識別子 '= "魔物"
TALENT:CHARA_ID:性別 = 0
MAXBASE:CHARA_ID:体力 = 9999
MAXBASE:CHARA_ID:気力 = 9999
MAXBASE:CHARA_ID:精神力 = 1500
BASE:CHARA_ID:体力 = MAXBASE:CHARA_ID:体力
BASE:CHARA_ID:気力 = MAXBASE:CHARA_ID:気力
BASE:CHARA_ID:精神力 = MAXBASE:CHARA_ID:精神力
ABL:CHARA_ID:触手 = RAND(1, 5)
ABL:CHARA_ID:性知識 = 5
ABL:CHARA_ID:Ｃ感 = 5
ABL:CHARA_ID:欲望 = 15
ABL:CHARA_ID:性技 = 20
ABL:CHARA_ID:性知識 = 5
ABL:CHARA_ID:奉仕 = 1
ABL:CHARA_ID:性交 = 15
ABL:CHARA_ID:レズ = 0
ABL:CHARA_ID:精愛 = 3
ABL:CHARA_ID:露出 = 2
ABL:CHARA_ID:射精 = 20
ABL:CHARA_ID:排泄 = 3
ABL:CHARA_ID:サド = 5
ABL:CHARA_ID:主導度Ｕ = 99999999
ABL:CHARA_ID:主導度Ｎ = RAND(300, 600)
ABL:CHARA_ID:倒錯度 = RAND(300, 500)
EXP:CHARA_ID:絶頂経験 = 500

ITEM:A_ローター = 1
ITEM:A_クリキャップ = 1
ITEM:A_ニプルキャップ = 1
VARSET COM_FORBIDDEN:CHARA_ID:0, 1
COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "ローター") = 0
COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "クリキャップ") = 0
COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "ニプルキャップ") = 0

COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "ローター") = 3
COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "クリキャップ") = 3
COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "ニプルキャップ") = 3

TALENT:CHARA_ID:魔術師 = 1
TALENT:CHARA_ID:絶倫 = 1
TALENT:(CHARA_ID):処女 = 0
TALENT:(CHARA_ID):キス未経験 = 0
TALENT:(CHARA_ID):童貞 = 0
TALENT:(CHARA_ID):アナル処女 = 1
SETBIT TALENT:CHARA_ID:淫乱系, 素質_淫乱_サド
TALENT:CHARA_ID:貞操無頓着 = 1
TALENT:CHARA_ID:貞操観念 = 0
TALENT:CHARA_ID:特殊勢力素質 = 特殊勢力_触手

CFLAG:CHARA_ID:慰安参加者 = 1
CFLAG:CHARA_ID:慰安モブ = 1
CFLAG:CHARA_ID:調教参加フラグ  = 1
CFLAG:CHARA_ID:強制友好化 = 1
CFLAG:CHARA_ID:慰安参加者非対象化 = 1

CALL SET_BODYSIZE(CHARA_ID)

@QST_TRAIN_MOB_機械(CHARA_ID, MOB_NAME, PRESET_NAME)
#DIMS MOB_NAME
#DIM CHARA_ID
#DIMS PRESET_NAME
#DIMS DYNAMIC TRAIN_TYPE

MOB_NAME = %MOB_NAME%
NO:CHARA_ID = GET_EMPTY_NO()
NAME:CHARA_ID = %MOB_NAME%
CALLNAME:CHARA_ID = %MOB_NAME%
CSTR:CHARA_ID:姓 '= ""
CSTR:CHARA_ID:名 '= ""
CSTR:CHARA_ID:モブ識別子 '= "機械"
TALENT:CHARA_ID:性別 = 0
MAXBASE:CHARA_ID:体力 = 9999
MAXBASE:CHARA_ID:気力 = 9999
MAXBASE:CHARA_ID:精神力 = 1500
BASE:CHARA_ID:体力 = MAXBASE:CHARA_ID:体力
BASE:CHARA_ID:気力 = MAXBASE:CHARA_ID:気力
BASE:CHARA_ID:精神力 = MAXBASE:CHARA_ID:精神力
ABL:CHARA_ID:触手 = RAND(1, 5)
ABL:CHARA_ID:性知識 = 5
ABL:CHARA_ID:Ｃ感 = 5
ABL:CHARA_ID:欲望 = 15
ABL:CHARA_ID:性技 = 20
ABL:CHARA_ID:性知識 = 5
ABL:CHARA_ID:奉仕 = 1
ABL:CHARA_ID:性交 = 15
ABL:CHARA_ID:レズ = 0
ABL:CHARA_ID:精愛 = 3
ABL:CHARA_ID:露出 = 2
ABL:CHARA_ID:射精 = 20
ABL:CHARA_ID:排泄 = 3
ABL:CHARA_ID:サド = 10
ABL:CHARA_ID:主導度Ｕ = 99999999
ABL:CHARA_ID:主導度Ｎ = RAND(300, 600)
ABL:CHARA_ID:倒錯度 = 1000

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

;特殊設定「ＳＭを禁止する」が有効な場合はSMできないので通常の機械姦に変更
IF GETBIT(CONFIG:11, COM_AUTO_FILTER_ＳＭを禁止) && PRESET_NAME == "機械姦ＳＭ"
    TRAIN_TYPE '= "機械姦"
ELSE
    TRAIN_TYPE '= PRESET_NAME
ENDIF
VARSET COM_FORBIDDEN:CHARA_ID:0, 1
SELECTCASE TRAIN_TYPE
    CASE "機械姦"
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "服を破る") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "ローター") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "クリキャップ") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "ニプルキャップ") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "バイブ") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "アナルバイブ") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "オナホコキ") = 0
    CASE "機械姦ＳＭ"
        COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "鞭") = 3
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "スパンキング") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "鞭") = 0
        COM_FORBIDDEN:CHARA_ID:GETNUM(TRAINNAME, "平手打ち") = 0
ENDSELECT
TALENT:CHARA_ID:魔術師 = 1
TALENT:CHARA_ID:絶倫 = 1
TALENT:(CHARA_ID):処女 = 0
TALENT:(CHARA_ID):キス未経験 = 0
TALENT:(CHARA_ID):童貞 = 0
TALENT:(CHARA_ID):アナル処女 = 1
SETBIT TALENT:CHARA_ID:淫乱系, 素質_淫乱_サド
TALENT:CHARA_ID:貞操無頓着 = 1
TALENT:CHARA_ID:貞操観念 = 0

CFLAG:CHARA_ID:慰安参加者 = 1
CFLAG:CHARA_ID:慰安モブ = 1
CFLAG:CHARA_ID:調教参加フラグ  = 1
CFLAG:CHARA_ID:強制友好化 = 1
CFLAG:CHARA_ID:慰安参加者非対象化 = 1

CALL SET_BODYSIZE(CHARA_ID)

;スキュラ
;設定は夕暮港クエストからお借り
@QST_TRAIN_MOB_スキュラ(CHARA_ID, MOB_NAME, PRESET_NAME)
#DIM  CHARA_ID
#DIMS MOB_NAME
#DIMS PRESET_NAME

NO:CHARA_ID = GET_EMPTY_NO()
NAME:CHARA_ID = %MOB_NAME%
CALLNAME:CHARA_ID = %MOB_NAME%
MAXBASE:CHARA_ID:体力 = 5000
MAXBASE:CHARA_ID:気力 = 3500
MAXBASE:CHARA_ID:精神力 = 5000
BASE:CHARA_ID:体力 = MAXBASE:CHARA_ID:体力
BASE:CHARA_ID:気力 = MAXBASE:CHARA_ID:気力
BASE:CHARA_ID:精神力 = MAXBASE:CHARA_ID:精神力
TALENT:CHARA_ID:処女 = 0
TALENT:CHARA_ID:キス未経験 = 0
TALENT:CHARA_ID:童貞 = 0
TALENT:CHARA_ID:アナル処女 = 0
TALENT:CHARA_ID:魔術師 = 1
TALENT:CHARA_ID:絶倫 = 1
TALENT:CHARA_ID:両刀 = 1
CSTR:CHARA_ID:姓 '= ""
CSTR:CHARA_ID:名 '= ""
TALENT:CHARA_ID:性別 = 2
SETBIT TALENT:CHARA_ID:淫乱系, 素質_淫乱_サド
TALENT:CHARA_ID:貞操無頓着 = 1
TALENT:CHARA_ID:貞操観念 = 0
ABL:CHARA_ID:戦闘 =  70
ABL:CHARA_ID:魔術 =  50
ABL:CHARA_ID:性知識 = 5
ABL:CHARA_ID:奉仕 = 2
ABL:CHARA_ID:性技 = 10
ABL:CHARA_ID:レズ = 10
ABL:CHARA_ID:欲望 = 10
ABL:CHARA_ID:性交 = 10
ABL:CHARA_ID:射精 = 10
ABL:CHARA_ID:サド = 10
ABL:CHARA_ID:主導度Ｕ = RAND(0, 500)
ABL:CHARA_ID:倒錯度 = RAND(200, 500)
EXP:CHARA_ID:絶頂経験 = 500
CFLAG:CHARA_ID:調教参加フラグ = 1
CFLAG:CHARA_ID:慰安モブ = 1
CSTR:CHARA_ID:モブ識別子 '= "スキュラ"
CFLAG:CHARA_ID:慰安参加者 = 1
CFLAG:CHARA_ID:強制友好化 = 1
CFLAG:CHARA_ID:慰安参加者非対象化 = 1
COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "代わる代わる挿入") = 3
COM_TENDENCY:CHARA_ID:GETNUM(TRAINNAME, "代わる代わるＡ挿入") = 3

;[ポートレイト情報書き換え]
;基本は裸
FACE_PARTS:CHARA_ID:IMG_服 '= ""
;青系髪色
COLOR_MATRIX_NAME:CHARA_ID:IMG_前髪 '= "カスタム"
COLOR_MATRIX_RGB:CHARA_ID:IMG_前髪:0 = 100
COLOR_MATRIX_RGB:CHARA_ID:IMG_前髪:1 = 236
COLOR_MATRIX_RGB:CHARA_ID:IMG_前髪:2 = 500
COLOR_MATRIX_NAME:CHARA_ID:IMG_後髪 '= "カスタム"
COLOR_MATRIX_RGB:CHARA_ID:IMG_後髪:0 = 100
COLOR_MATRIX_RGB:CHARA_ID:IMG_後髪:1 = 236
COLOR_MATRIX_RGB:CHARA_ID:IMG_後髪:2 = 500

;ハーピィ
@QST_TRAIN_MOB_ハーピィ(CHARA_ID, MOB_NAME, PRESET_NAME)
; #region ハーピィ
#DIM  CHARA_ID
#DIMS MOB_NAME
#DIMS PRESET_NAME

NO:CHARA_ID = GET_EMPTY_NO()
NAME:CHARA_ID = %MOB_NAME%
CALLNAME:CHARA_ID = %MOB_NAME%
MAXBASE:CHARA_ID:体力 = 5000
MAXBASE:CHARA_ID:気力 = 3500
MAXBASE:CHARA_ID:精神力 = 5000
BASE:CHARA_ID:体力 = MAXBASE:CHARA_ID:体力
BASE:CHARA_ID:気力 = MAXBASE:CHARA_ID:気力
BASE:CHARA_ID:精神力 = MAXBASE:CHARA_ID:精神力
TALENT:CHARA_ID:処女 = 0
TALENT:CHARA_ID:キス未経験 = 0
TALENT:CHARA_ID:童貞 = 0
TALENT:CHARA_ID:アナル処女 = 0
TALENT:CHARA_ID:絶倫 = 1
TALENT:CHARA_ID:両刀 = 1
TALENT:CHARA_ID:妊娠不能 = 1,;おそらく卵生
CSTR:CHARA_ID:姓 '= ""
CSTR:CHARA_ID:名 '= ""
SETBIT TALENT:CHARA_ID:淫乱系, 素質_淫乱_サド
TALENT:CHARA_ID:貞操無頓着 = 1
TALENT:CHARA_ID:貞操観念 = 0
ABL:CHARA_ID:戦闘 =  70
ABL:CHARA_ID:魔術 =  50
ABL:CHARA_ID:性知識 = 5
ABL:CHARA_ID:奉仕 = 2
ABL:CHARA_ID:性技 = 10
ABL:CHARA_ID:レズ = 10
ABL:CHARA_ID:欲望 = 10
ABL:CHARA_ID:性交 = 10
ABL:CHARA_ID:サド = 10
ABL:CHARA_ID:主導度Ｕ = RAND(300, 600)
ABL:CHARA_ID:倒錯度 = RAND(300, 600)
EXP:CHARA_ID:絶頂経験 = 500
CFLAG:CHARA_ID:調教参加フラグ = 1
CFLAG:CHARA_ID:慰安モブ = 1
CSTR:CHARA_ID:モブ識別子 '= "ハーピィ"
CFLAG:CHARA_ID:慰安参加者 = 1
CFLAG:CHARA_ID:強制友好化 = 1
CFLAG:CHARA_ID:慰安参加者非対象化 = 1

;[ポートレイト情報書き換え]
;基本は裸
FACE_PARTS:CHARA_ID:IMG_服 '= ""
FACE_PARTS:CHARA_ID:IMG_背面 '= "CC1_背面_翼_0"
; #endregion

;素質に合わせた性経験初期設定
;・実行前に対象キャラのTALENT設定をしておくこと
@QST_TRAIN_MOB_INIT_SEXUAL_EXPERIENCE(CHARA_ID)
#DIM CHARA_ID
#DIM ARY_TALENT_NUM    , 4
#DIM ARY_SEXUAL_EXP_NUM, 4
#DIM TALENT_NUM
#DIM SEXUAL_EXP_NUM
#DIM L_CNT

;キス, 童貞, 処女, アナル処女の順でまとめて処理できるように要素番号を配列に格納
ARY_TALENT_NUM     = GETNUM(TALENT, "キス未経験"), GETNUM(TALENT, "童貞"), GETNUM(TALENT, "処女"), GETNUM(TALENT, "アナル処女"),
ARY_SEXUAL_EXP_NUM = 初体験_キス, 初体験_童貞, 初体験_処女, 初体験_アナル処女

FOR L_CNT, 0, 4
    TALENT_NUM     = ARY_TALENT_NUM:L_CNT
    SEXUAL_EXP_NUM = ARY_SEXUAL_EXP_NUM:L_CNT
    SELECTCASE TALENT:CHARA_ID:TALENT_NUM
            ;0: 経験あり
        CASE 0
            SEXUAL_EXPERIENCE:CHARA_ID:SEXUAL_EXP_NUM      '= "不明"
            SEXUAL_LAST_EXPERIENCE:CHARA_ID:SEXUAL_EXP_NUM '= "不明"
            ;1: 経験なし
        CASE 1
            SEXUAL_EXPERIENCE:CHARA_ID:SEXUAL_EXP_NUM      '= "----"
            SEXUAL_LAST_EXPERIENCE:CHARA_ID:SEXUAL_EXP_NUM '= "----"
    ENDSELECT
NEXT

;モブの捕獲処理
;・モブを捕虜にする汎用処理
;・捕獲選択～キャラ設定変更～名前変更までまとめて実施する
;・捕獲コスト、捕獲時の選択肢、名前変更の有無を引数で設定可能
;実行結果(RESULT) 0:キャンセル 1:捕獲
@QST_TRAIN_MOB_CAPTURE(CHARA_ID, CAPTURE_COST = "名誉点,-250,", CAPTURE_TEXT = "捕らえる", CANCEL_TEXT = "やめておく", NAME_FIXED = 0)
#DIM  CHARA_ID
#DIMS CAPTURE_COST
#DIMS CAPTURE_TEXT
#DIMS CANCEL_TEXT
#DIM  NAME_FIXED
#DIMS DYNAMIC COST_TEXT
#DIMS DYNAMIC COST_TEXT_LEFT
#DIMS DYNAMIC ARY_SPLIT_COST, 10
#DIM  DYNAMIC L_CNT
#DIM  DYNAMIC ASK_RESULT

;------------
; 実行準備
;------------
;捕獲コストを表示用に加工
SPLIT CAPTURE_COST, ",", ARY_SPLIT_COST
COST_TEXT '= ""
FOR L_CNT, 0, 10
    SIF ARY_SPLIT_COST:L_CNT == ""
        BREAK
    SELECTCASE L_CNT % 2
        CASE 0
            COST_TEXT_LEFT '= ARY_SPLIT_COST:L_CNT
        CASE 1
            SIF COST_TEXT != ""
                COST_TEXT += ", "
            COST_TEXT += @"%COST_TEXT_LEFT% %ARY_SPLIT_COST:L_CNT%"
    ENDSELECT
NEXT

;------------
; 捕獲選択
;------------
;捕獲対象の能力表示
;SHOW_INFOの初期画面を基本情報にする
FLAG:能力表示モード = 0
CALL SHOW_INFO(CHARA_ID)

;選択肢の表示
PRINTL
PRINTL
CALL ASK_MULTI_ANNOTATION(CAPTURE_TEXT, COST_TEXT, CANCEL_TEXT, "")
ASK_RESULT = RESULT

;キャンセルした場合は終了(0:キャンセル)
SIF ASK_RESULT == 1
    RETURN 0

;------------
; 捕獲処理
;------------
;捕獲コストの支払い
IF CAPTURE_COST != ""
    CALL QST_CHANGE_ITEM(CAPTURE_COST)
ENDIF

;捕虜用にキャラ設定を変更
CALL CHANGE_COUNTRY(CHARA_ID, CFLAG:MASTER:所属)
CFLAG:CHARA_ID:捕虜先 = CFLAG:MASTER:所属
CFLAG:CHARA_ID:慰安モブ = 0

;--------------
; 名前の変更
;--------------
;名前固定の場合は変更せずに終了(RETURN 1:捕獲)
SIF NAME_FIXED
    RETURN 1

;名前の変更
PRINTL
PRINTFORML %ANAME(CHARA_ID)%の名前を……
PRINTL
CALL ASK_MULTI("変更する", "変更する (ランダム)", @"「%ANAME(CHARA_ID)%」のままでいい")
SELECTCASE RESULT
    CASE 0
        ;変更
        CALL CHANGE_NAME(CHARA_ID)
    CASE 1
        ;変更 (ランダム)
        CALL CHANGE_NAME_RANDOM(CHARA_ID)
    CASE 2
        ;変更しない
ENDSELECT

;捕獲処理終了(RETURN 1:捕獲)
RETURN 1

;-------------------------------------------------
;;; 引数で渡されたキャラをモブとして複製する
;;; 慰安モブ扱いで生成されるため、EVENTEND(交流、クエストの終了時に自動削除される)
;;; ※スキルや装備などの情報は複製されない
;;; - RETURN
;;; RESULT:0 複製されたキャラのCHARA_ID
;-------------------------------------------------
@CREATE_CLONE(ORIGINAL_CHARA_ID)
#DIM ORIGINAL_CHARA_ID

VARI CHARA_ID
VARI ORIGINAL_ID
CALL SAVE_CUSTOM_DATA(-1, ORIGINAL_CHARA_ID)
CALL LOAD_CUSTOM_DATA(-1)
CHARA_ID = RESULT
ORIGINAL_ID = GET_ID(ORIGINAL_CHARA_ID)

VARI CLONE_COUNT
VARI I
FOR I, 0, CHARANUM
    IF CFLAG:I:クローン元キャラＩＤ == ORIGINAL_ID
        CLONE_COUNT++
    ENDIF
NEXT
CSTR:CHARA_ID:識別名 '= @"%CSTR:ORIGINAL_CHARA_ID:識別名%_CLONE_{CLONE_COUNT}"

;クローンは慰安モブ扱いで生成し、自動削除されるようにする
CFLAG:CHARA_ID:慰安モブ = 1

RETURN CHARA_ID


code:
;-------------------------------------------------
; クエストで汎用可能なコモンイベント集
; ルームに依存しない、をイベントリストに初期化登録
; クエストのタグは探索のみ
; TRIGGERED BY @QST_INIT_EVENT_LIST
;-------------------------------------------------
;定義ファイルからイベントリストを生成する
@QST_INIT_汎用イベント(QUEST_ID, MAP_ID = -1)
#DIM QUEST_ID
#DIM MAP_ID
#DIM EVENT_NUM

#DIM DYNAMIC EVENT_LIST_IDX
#DIM DYNAMIC EVENT_ID
#DIM DYNAMIC HAS_EVENT_REGISTED
#DIM DYNAMIC ROOM_IDX
#DIMS DYNAMIC LIST_QUEST_TAG
#DIMS DYNAMIC EVENT_TRIGGER
#DIMS DYNAMIC EVENT_SLOT_NAME
#DIMS DYNAMIC EVENT_TYPE
#DIMS DYNAMIC DIC_EVENT_OPTION

;クエストのタグを取得
TRYCALLFORM QST_QUEST_TAG_{QUEST_ID}
LIST_QUEST_TAG = %RESULTS%

;イベントスロット用未登録汎用イベントをイベントリストに登録
FOR EVENT_ID, 0 ,汎用イベント_COUNT
    HAS_EVENT_REGISTED = 0
    FOR EVENT_LIST_IDX, 0, QST_MAX_EVENTNUM
        CALL QST_GET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_TRIGGER")
        EVENT_TRIGGER = %RESULTS%
        CALL QST_GET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_ID")
        IF RESULT == EVENT_ID && EVENT_TRIGGER == "EVENT_SLOT_COMMON"
            HAS_EVENT_REGISTED = 1
        ENDIF
    NEXT
    SIF HAS_EVENT_REGISTED
        CONTINUE
    FOR EVENT_LIST_IDX, 0, QST_MAX_EVENTNUM
        IF _DIC_QST_EVENT_LIST:MAP_ID:EVENT_LIST_IDX == "-1"
            VARSET RESULTS
            QST_NOWEV = EVENT_ID
            TRYCCALLFORM QST_ADD_EVENT_汎用イベント_{EVENT_ID}
                EVENT_TRIGGER = %RESULTS:0%
                EVENT_SLOT_NAME = %RESULTS:1%
                EVENT_TYPE = %RESULTS:2%
                DIC_EVENT_OPTION = %RESULTS:3%
                CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_TRIGGER", EVENT_TRIGGER, MAP_ID)
                CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_ID", TOSTR(QST_NOWEV), MAP_ID)
                CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_TYPE", EVENT_TYPE, MAP_ID)
                ;DEBUGPRINTFORML EVENT_LIST_IDX = {EVENT_LIST_IDX},EVENT_ID = {EVENT_ID}
                ;オプション値の反映
                IF DIC_CONTAINSKEY(DIC_EVENT_OPTION ,"EVENT_STATE")
                    CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_STATE", DIC_GET(DIC_EVENT_OPTION, "EVENT_STATE"), MAP_ID)
                ENDIF
                BREAK
            CATCH
            ENDCATCH
        ENDIF
    NEXT
NEXT

@QST_EVENT_汎用イベント
FOR LOCAL, 0, QST_MAX_EVENTNUM
    TRYCCALLFORM QST_EVENT_汎用イベント_{LOCAL}
        CALL QST_SET_EVENT_LIST(QST_NOWEV_LIST_IDX, "IS_EVENT_EXECUTED", "1")
    CATCH
    ENDCATCH
NEXT

repo_name: napo/erafl

path: ERB/QUEST/クエストデータ/汎用イベント/QUEST_汎用イベント.ERB

license: unknown


code:
;-------------------------------------------------
;イベント処理から呼び出して使用する、使いまわせるイベント集
;エロイベントとかトラップとか
;-------------------------------------------------
;-------------------------------------------------
; ブラシ触手
; 挿入はしない。ブラッシングだけ
; TARGET_LIST   _LIST.ERBのLIST型で指定。対象のキャラクタID。未指定の場合全パーティメンバ
; MOB_NAME      イベントモブの名称
; モブ生成数:    生成するモブの数
; 継続ターン数:  イベント継続ターン数
;-------------------------------------------------
@QST_汎用イベント調教_ブラシ触手(継続ターン数  = 6, TARGET_LIST = "", MOB_NAME = "ブラシ触手", モブ生成数 = 4)
#DIM  EVENT_FLAG
#DIMS MOB_NAME
#DIMS TARGET_LIST
#DIM  モブ生成数
#DIM  継続ターン数
#DIM  DYNAMIC CHARA_ID

;竿役生成
FOR LOCAL, 0, モブ生成数
    CALL QST_TRAIN_MOB_PRESET("ブラシ触手", MOB_NAME)
    CHARA_ID = RESULT
    CALL CLEAR_MPLY()
    CALL CLEAR_MTAR()
    CALL ADD_MPLY(CHARA_ID)
    CALL SET_EQUIP(GETNUM(TRAINNAME, "触手召喚"), 1)
    CALL DEL_MPLY(CHARA_ID)
    CFLAG:CHARA_ID:調教参加フラグ = 1
    CFLAG:CHARA_ID:慰安参加者 = 1
    CFLAG:CHARA_ID:強制友好化 = 1
    CFLAG:CHARA_ID:慰安参加者非対象化 = 1
NEXT
;ターゲット設定
SIF TARGET_LIST == ""
    TARGET_LIST = %_LIST_QST_PARTY%
FOR LOCAL, 0, LIST_COUNT(TARGET_LIST)
    CHARA_ID = TOINT(LIST_GET(TARGET_LIST, LOCAL))
    CFLAG:LOCAL:凌辱被害者フラグ = 1
    CFLAG:CHARA_ID:主導除外 = 1
    CFLAG:CHARA_ID:調教参加フラグ = 1
NEXT

FLAG:ウフフフラグ = 1
QST_調教ターン数 = 継続ターン数
TFLAG:調教ターン数 = QST_調教ターン数
FLAG:調教モード = 調教_慰安

RETURN
;-------------------------------------------------
; 乳首ねぶりスライム
; 正気度下がりそう
; TARGET_LIST   _LIST.ERBのLIST型で指定。対象のキャラクタID。未指定の場合全パーティメンバ
; MOB_NAME      イベントモブの名称
; モブ生成数:    生成するモブの数
; 継続ターン数:  イベント継続ターン数
;-------------------------------------------------
@QST_汎用イベント調教_乳首ねぶりスライム(継続ターン数  = 12, TARGET_LIST = "", MOB_NAME = "スクィーズスライム", モブ生成数 = 1)
#DIMS MOB_NAME
#DIMS TARGET_LIST
#DIM  モブ生成数
#DIM  継続ターン数
#DIM  DYNAMIC CHARA_ID

;竿役生成
FOR LOCAL, 0, モブ生成数
    CALL QST_TRAIN_MOB_PRESET("乳首ねぶりスライム", MOB_NAME)
    CHARA_ID = RESULT
    CALL CLEAR_MPLY()
    CALL CLEAR_MTAR()
    CALL ADD_MPLY(CHARA_ID)
    CALL SET_EQUIP(GETNUM(TRAINNAME, "触手召喚"), 1)
    CALL DEL_MPLY(CHARA_ID)
    CFLAG:CHARA_ID:調教参加フラグ = 1
    CFLAG:CHARA_ID:慰安参加者 = 1
    CFLAG:CHARA_ID:強制友好化 = 1
    CFLAG:CHARA_ID:慰安参加者非対象化 = 1
NEXT
;ターゲット設定
SIF TARGET_LIST == ""
    TARGET_LIST = %_LIST_QST_PARTY%
FOR LOCAL, 0, LIST_COUNT(TARGET_LIST)
    CHARA_ID = TOINT(LIST_GET(TARGET_LIST, LOCAL))
    CFLAG:LOCAL:凌辱被害者フラグ = 1
    CFLAG:CHARA_ID:主導除外 = 1
    CFLAG:CHARA_ID:調教参加フラグ = 1
NEXT

FLAG:ウフフフラグ = 1
QST_調教ターン数 = 継続ターン数
TFLAG:調教ターン数 = QST_調教ターン数
FLAG:調教モード = 調教_慰安

RETURN

;-------------------------------------------------
; 機械姦
; ローターとかバイブとか道具オンリー
; TARGET_LIST   _LIST.ERBのLIST型で指定。対象のキャラクタID。未指定の場合全パーティメンバ
; MOB_NAME      イベントモブの名称
; モブ生成数:    生成するモブの数
; 継続ターン数:  イベント継続ターン数
;-------------------------------------------------
@QST_汎用イベント調教_機械姦(継続ターン数  = 16, TARGET_LIST = "", MOB_NAME = "トーメンタ", モブ生成数 = 1)
#DIMS MOB_NAME
#DIMS TARGET_LIST
#DIM  モブ生成数
#DIM  継続ターン数
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC MOB_ID

;竿役生成
FOR LOCAL, 0, モブ生成数
    CALL QST_TRAIN_MOB_PRESET("機械姦", MOB_NAME)
    CHARA_ID = RESULT
    CFLAG:CHARA_ID:調教参加フラグ = 1
    CFLAG:CHARA_ID:慰安参加者 = 1
    CFLAG:CHARA_ID:強制友好化 = 1
    CFLAG:CHARA_ID:慰安参加者非対象化 = 1
NEXT

;緊縛セット用にMOB_IDを控えておく
MOB_ID = CHARA_ID
;ウフフフラグのセットと調教モードの変更はCOMABLEを通過するためにSET_EQUIPより先にする必要がある
FLAG:ウフフフラグ = 1
FLAG:調教モード = 調教_慰安

;ターゲット設定
SIF TARGET_LIST == ""
    TARGET_LIST = %_LIST_QST_PARTY%
FOR LOCAL, 0, LIST_COUNT(TARGET_LIST)
    CHARA_ID = TOINT(LIST_GET(TARGET_LIST, LOCAL))
    CFLAG:LOCAL:凌辱被害者フラグ = 1
    CFLAG:CHARA_ID:主導除外 = 1
    CFLAG:CHARA_ID:調教参加フラグ = 1
    ;拘束具セット
    CALL CLEAR_MPLY
    CALL CLEAR_MTAR
    CALL ADD_MPLY(MOB_ID)
    CALL ADD_MTAR(CHARA_ID)
    FLAG:COM_FORBIDDEN無視 = 1 ;一時的にMOBのコマンド実行制限を無視させる
    CALL SET_EQUIP(85, 1) ;縄
    SIF !RAND:2
        CALL SET_EQUIP(84, 1) ;目隠し
    SIF !RAND:2
        CALL SET_EQUIP(86, 1) ;口枷
    FLAG:COM_FORBIDDEN無視 = 0
    CALL CLEAR_MPLY
    CALL CLEAR_MTAR
NEXT

QST_調教ターン数 = 継続ターン数
TFLAG:調教ターン数 = QST_調教ターン数

RETURN
;-------------------------------------------------
; 機械姦ＳＭ
; 鞭とかでビシバシしばく
; TARGET_LIST   _LIST.ERBのLIST型で指定。対象のキャラクタID。未指定の場合全パーティメンバ
; MOB_NAME      イベントモブの名称
; モブ生成数:    生成するモブの数
; 継続ターン数:  イベント継続ターン数
;-------------------------------------------------
@QST_汎用イベント調教_機械姦ＳＭ(継続ターン数  = 12, TARGET_LIST = "", MOB_NAME = "トーメンタ", モブ生成数 = 1)
#DIMS MOB_NAME
#DIMS TARGET_LIST
#DIM  モブ生成数
#DIM  継続ターン数
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC MOB_ID

;竿役生成
FOR LOCAL, 0, モブ生成数
    CALL QST_TRAIN_MOB_PRESET("機械姦ＳＭ", MOB_NAME)
    CHARA_ID = RESULT
    CFLAG:CHARA_ID:調教参加フラグ = 1
    CFLAG:CHARA_ID:慰安参加者 = 1
    CFLAG:CHARA_ID:強制友好化 = 1
    CFLAG:CHARA_ID:慰安参加者非対象化 = 1
NEXT

;緊縛セット用にMOB_IDを控えておく
MOB_ID = CHARA_ID
;ウフフフラグのセットと調教モードの変更はCOMABLEを通過するためにSET_EQUIPより先にする必要がある
FLAG:ウフフフラグ = 1
FLAG:調教モード = 調教_慰安

;ターゲット設定
SIF TARGET_LIST == ""
    TARGET_LIST = %_LIST_QST_PARTY%
FOR LOCAL, 0, LIST_COUNT(TARGET_LIST)
    CHARA_ID = TOINT(LIST_GET(TARGET_LIST, LOCAL))
    CFLAG:LOCAL:凌辱被害者フラグ = 1
    CFLAG:CHARA_ID:主導除外 = 1
    CFLAG:CHARA_ID:調教参加フラグ = 1
    ;拘束具セット
    CALL CLEAR_MPLY
    CALL CLEAR_MTAR
    CALL ADD_MPLY(MOB_ID)
    CALL ADD_MTAR(CHARA_ID)
    FLAG:COM_FORBIDDEN無視 = 1 ;一時的にMOBのコマンド実行制限を無視させる
    CALL SET_EQUIP(85, 1) ;縄
    SIF !RAND:2
        CALL SET_EQUIP(84, 1) ;目隠し
    SIF !RAND:2
        CALL SET_EQUIP(86, 1) ;口枷
    FLAG:COM_FORBIDDEN無視 = 0
    CALL CLEAR_MPLY
    CALL CLEAR_MTAR
NEXT

QST_調教ターン数 = 継続ターン数
TFLAG:調教ターン数 = QST_調教ターン数

RETURN

path: ERB/QUEST/クエストデータ/汎用イベント/QUEST_汎用イベント_エロ.ERB


code:
;-------------------------------------------------
; クエストで汎用可能なコモンイベント集
; オナニー系汎用イベント、MASTERを移動さ判定せる
;-------------------------------------------------
@QST_ADD_EVENT_汎用イベント_0
;入室時に自動実行されるタイプのイベントを呼び出す、けどルームに依存しない
#DIMS EVENT_TRIGGER = "EVENT_SLOT_COMMON"
#DIMS EVENT_TYPE = ""
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:2 = %EVENT_TYPE%

@QST_EVENT_汎用イベント_0
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC OTHER_ID
SIF !FLAG:クエスト_ウフフ許可
    RETURN 0

FOR LOCAL, 0, QST_PARTYNUM
    CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))
    SIF CHARA_ID == MASTER || TCVAR:CHARA_ID:行動不能フラグ == 1 || TCVAR:CHARA_ID:失神フラグ == 1 || TCVAR:CHARA_ID:媚薬 <= 0
        CONTINUE
    SIF TCVAR:CHARA_ID:押し倒しクールタイム > 0
        CONTINUE
    IF RAND:10 < TCVAR:CHARA_ID:媚薬 || (IS_NASTY(CHARA_ID, 素質_淫乱_自慰狂い) && RAND:100 < 25 && IS_ESTRUS(CHARA_ID))
        CALL COLOR_PRINTL(@"発情しきった%ANAME(CHARA_ID)%は正常な判断力を失っているようだ……", カラー_ピンク )
        CALL COLOR_PRINTL(@"下腹部が焼けるように熱を帯びる……。手が自分の意志とは関係なく自身を慰めようとする……", カラー_ピンク)
        CALL COLOR_PRINTW(@"%ANAME(CHARA_ID)%は周囲の目を盗んで自らを慰めた…", カラー_ピンク)
        FOR LOCAL, 0, QST_PARTYNUM
            OTHER_ID = TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))
            SIF CHARA_ID != OTHER_ID
                CFLAG:OTHER_ID:調教参加フラグ = 0
        NEXT
        CALL CLEAR_ACTOR
        CALL ADD_MPLY(CHARA_ID)
        CALL ADD_MTAR(CHARA_ID)
        IF HAS_PENIS(CHARA_ID)
            TFLAG:非継続フラグ = 1
            CALL QST_EXEC_DUMMYCOM(T_N("Ｐ自慰"))
        ELSE
            TFLAG:非継続フラグ = 1
            CALL QST_EXEC_DUMMYCOM(T_N("Ｃ自慰"))
        ENDIF
        MAP_SET @"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE_ONCE", "QST_EVENT_汎用イベント_0_RELEASE_EVENT"
        TCVAR:CHARA_ID:押し倒しクールタイム += RAND(15,30)
        BREAK
    ENDIF
NEXT
RETURN 0

@QST_EVENT_汎用イベント_0_RELEASE_EVENT
#DIM CHARA_ID

FOR LOCAL, 0, QST_PARTYNUM
    CHARA_ID = LIST_GETINT(_LIST_QST_PARTY, LOCAL)
    CFLAG:CHARA_ID:調教参加フラグ = 1
NEXT

path: ERB/QUEST/クエストデータ/汎用イベント/QUEST_汎用イベント_オナニー.erb


code:
;-------------------------------------------------
; クエストで汎用可能なコモンイベント集
; 逆押し倒し系汎用イベント、MASTERを移動さ判定せる
;-------------------------------------------------
@QST_ADD_EVENT_汎用イベント_1
;入室時に自動実行されるタイプのイベントを呼び出す、けどルームに依存しない
#DIMS EVENT_TRIGGER = "EVENT_SLOT_COMMON"
#DIMS EVENT_TYPE = ""
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:2 = %EVENT_TYPE%

@QST_EVENT_汎用イベント_1
#DIM DYNAMIC CHARA_ID
#DIM SERVICE_TYPE

;実行判定
SIF QST_PARTYNUM < 2
    RETURN 0
SIF FLAG:クエスト_あなた不参加
    RETURN 0
SIF !FLAG:クエスト_ウフフ許可
    RETURN 0
SIF RAND:100 >= 30
    RETURN 0

FOR LOCAL, 0, QST_PARTYNUM
    CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))
    SIF CHARA_ID == MASTER
        CONTINUE
    ;ここでの人目判定がうまく機能しないので一旦コメントアウト。
    ;ウフフ許可フラグが立っている時点で、ウフフ行為は実施可とみなしても問題ないはず……
    ; SIF C_COND("人目:1",, CHARA_ID)
    ;     RETURN 0
    SIF !TALENT:CHARA_ID:合意
        RETURN 0
    SIF (TALENT:CHARA_ID:男嫌い && IS_MALE(MASTER)) || (TALENT:CHARA_ID:女嫌い && IS_FEMALE(MASTER))
        RETURN 0
    SIF TCVAR:CHARA_ID:押し倒しクールタイム > 0
        RETURN 0
    IF !(IS_ESTRUS(CHARA_ID, 10))
        RETURN 0
    ENDIF
NEXT

;奉仕内容決定
CALL RAND_WT_INIT()
CALL RAND_WT_SET(奉仕_通常, 2)
CALL RAND_WT_SET(奉仕_手コキフェラ, 6)
CALL RAND_WT_SET(奉仕_騎乗位のみ, 4)
CALL RAND_WT_SET(奉仕_見抜き, 6)
CALL RAND_WT_SET(奉仕_ＳＭする, 4)
FOR LOCAL, 0, QST_PARTYNUM
    CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, 1))
    SIF !(HAS_PENIS(MASTER, 1) && IS_NASTY(CHARA_ID, 素質_淫乱_精飲中毒))
        CALL RAND_WT_SET(奉仕_手コキフェラ, 0)
    SIF !(HAS_PENIS(MASTER, 1) && (IS_NASTY(CHARA_ID, 素質_淫乱_淫壷) || IS_NASTY(CHARA_ID, 素質_淫乱_精液便女)))
        CALL RAND_WT_SET(奉仕_騎乗位のみ, 0)
    SIF !(IS_NASTY(CHARA_ID, 素質_淫乱_露出狂) || IS_NASTY(CHARA_ID, 素質_淫乱_自慰狂い))
        CALL RAND_WT_SET(奉仕_見抜き, 0)
    SIF !(IS_NASTY(CHARA_ID, 素質_淫乱_サド) && IS_NASTY(MASTER, 素質_淫乱_マゾ))
        CALL RAND_WT_SET(奉仕_ＳＭする, 0)
NEXT

SIF RAND_WT_RESULT() < 1
    RETURN 0

CALLF TAG_PRINTH(@"@C:{カラー_パステルピンク}@%ANAME(CHARA_ID, QST_PARTYNUM - 1)%は情欲に満ちた瞳で%ANAME(MASTER)%をじっと見つめ、身体を寄せてきた…@/C@", 1)
PRINTL
CALL ASK_YN("身を任せる", "距離を取る")
PRINTL
IF RESULT
    PRINTFORMW %ANAME(MASTER)%が今はそういう気分ではないとやんわりと拒絶すると、%ANAME(CHARA_ID, QST_PARTYNUM - 1)%は少し残念そうに頷いた
    FOR LOCAL, 0, QST_PARTYNUM
        CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))
        SIF CHARA_ID == MASTER
            CONTINUE
        TCVAR:CHARA_ID:押し倒しクールタイム = RAND(210, 300)
    NEXT
    RETURN 0
ENDIF

SELECTCASE RAND_WT_RESULT()
    CASE 奉仕_通常
        SERVICE_TYPE = 奉仕_通常
        CALLF TAG_PRINTH(@"@C:{カラー_ピンク}@人目がないと見るや%ANAME(CHARA_ID, QST_PARTYNUM - 1)%に押し倒されてしまった…！@/C@", 1)
    CASE 奉仕_見抜き
        SERVICE_TYPE = 奉仕_見抜き
        CALLF TAG_PRINTH(@"@C:{カラー_ピンク}@人目がないと見るや%ANAME(CHARA_ID, QST_PARTYNUM - 1)%は%ANAME(MASTER)%を見ながら自らを慰め始めた…！@/C@", 1)
    CASE 奉仕_騎乗位のみ
        SERVICE_TYPE = 奉仕_騎乗位のみ
        CALLF TAG_PRINTH(@"@C:{カラー_ピンク}@人目がないと見るや%ANAME(CHARA_ID, QST_PARTYNUM - 1)%に押し倒されてしまった…！@/C@", 1)
    CASE 奉仕_ＳＭする
        SERVICE_TYPE = 奉仕_ＳＭする
        CALLF TAG_PRINTH(@"@C:{カラー_ピンク}@人目がないと見るや%ANAME(CHARA_ID, QST_PARTYNUM - 1)%は%ANAME(MASTER)%を押し倒し、被虐的に嬲り始めた…！@/C@", 1)
    CASE 奉仕_手コキフェラ
        SERVICE_TYPE = 奉仕_手コキフェラ
        CALLF TAG_PRINTH(@"@C:{カラー_ピンク}@人目がないと見るや%ANAME(CHARA_ID, QST_PARTYNUM - 1)%は息を荒げて%ANAME(MASTER)%のペニスにむしゃぶりついてきた…！@/C@", 1)
    CASEELSE
        RETURN 0
ENDSELECT
FLAG:ウフフフラグ = 1
TFLAG:奉仕モード = 1
FLAG:調教モード = 調教_逆調教通常
TFLAG:調教ターン数 = RAND(20, 25)
FOR LOCAL, 0, QST_PARTYNUM
    CHARA_ID = LIST_GETINT(_LIST_QST_PARTY, LOCAL)
    IF GROUPMATCH(SERVICE_TYPE, 奉仕_見抜き)
        IF CHARA_ID != MASTER
            TCVAR:CHARA_ID:被奉仕者フラグ = SERVICE_TYPE
        ELSE
            TCVAR:MASTER:奉仕者フラグ = SERVICE_TYPE
        ENDIF
    ELSE
        IF CHARA_ID != MASTER
            TCVAR:CHARA_ID:奉仕者フラグ = SERVICE_TYPE
        ELSE
            TCVAR:MASTER:被奉仕者フラグ = SERVICE_TYPE
        ENDIF
    ENDIF
NEXT
;MPLYとMTARを仮設定
CALL CLEAR_ACTOR
CALL ADD_MPLY(LIST_GETINT(_LIST_QST_PARTY, 1))
CALL ADD_MTAR(MASTER)
;絶頂情報の退避
CALL HO_PRESERVE_PRETRAIN_STATUS()
TFLAG:調教開始時刻 = HO_TIME
;イベント実行
CALL FL_PLAYSE("Cloth_undress_0.mp3")
CALL KOJO_EVENT(CHARA_ID, 321)
WAIT
CALL QST_ENQUEUE_TRAIN_EXIT_FUNC("QST_EVENT_汎用イベント_1_EXIT")
RETURN 1

@QST_EVENT_汎用イベント_1_EXIT
#DIM CHARA_ID
FOR LOCAL, 0, QST_PARTYNUM
    CHARA_ID = LIST_GETINT(_LIST_QST_PARTY, LOCAL)
    SIF CHARA_ID == MASTER
        CONTINUE
    TCVAR:CHARA_ID:押し倒しクールタイム = RAND(210, 300)
NEXT

PRINTL
PRINTFORMW %ANAME(MASTER)%とひとしきり戯れたことで%ANAME(LIST_GETINT(_LIST_QST_PARTY, 1), QST_PARTYNUM - 1)%はある程度欲求を満たしたようだ…
PRINTL

path: ERB/QUEST/クエストデータ/汎用イベント/QUEST_汎用イベント_逆押し倒し.erb


code:
;ショップ画面の処理(共通)

;-------------------------------------------------
;ショップ画面開始時の処理
;-------------------------------------------------
@EVENTSHOP
;TRAIN LOOP実行時のリロードから呼び出された場合、FL_TRAINに処理を返す
IF FLAG:TRAIN_RELOAD
	JUMP FL_TRAIN
ENDIF

;オートセーブ判定
TFLAG:オートセーブ判定 = 1
CALL FL_SYSTEM_AUTOSAVE()

;ページ番号を初期化
FLAG:拠点フェイズページ = 1
FLAG:最後に実行したコマンド = FLAG:拠点フェイズ選択コマンド
;デッドエンディングなら戻る
;IF FLAG:強制エンドフラグ == 1
;	FLAG:強制エンドフラグ = 0
;	BEGIN TITLE
;ENDIF

;-------------------------------------------------
;ショップ画面の表示処理
;-------------------------------------------------
@SHOW_SHOP
;SHOP用BGMを鳴らす
IF FL_NOWBGM == ""
	CALL FL_PLAYBGM(S_R("Nostalgic_1.ogg/Nostalgic_4.ogg/Nostalgic_5.mp3/Town_3.mp3"))
ENDIF
;オートセーブ判定を解除
TFLAG:オートセーブ判定 = 0

;コマンドの選択可否判定フラグをクリア
VARSET SHOP_AVAIL, 1

;所持金の上限設定
MONEY = LIMIT(MONEY, 0, 9999999999999)

;士官の星評価を用意
CALL TMP_PREPARE_CHARA_STARS

;CALL TMP_CREATE_COUNTRY_NEIBORING_MAP
;CALL TMP_CREATE_SUM_ECONOMY_MAP
;CALL TMP_CREATE_SUM_SOLDIER_MAP

;無効な入力時に消去する時の行数
LINES_SHOP = LINECOUNT

CALL DRAW_LINE
LOCALS '= ""
LOCALS += @"◆ ホームメニュー"
LOCALS += @"　%HO_SEASON_STR:HO_SEASON()%季"
LOCALS += @"　第%TOSTR(HO_WEEK(), "##")%期"
LOCALS += @"　　%TOSTR(DAY, "#####")%期目　"
HTML_PRINT @"%LOCALS%", 1

PRINTBUTTON "[QSAVE]", 94
PRINT
CALL PRINTBUTTON_EX("[QLOAD]", 95, CHKDATA(9999) == 0)
PRINT

IF TIME == 0
	PRINTBUTTON "<<", 87
	PRINTBUTTON @"[%STR_NOW_SORTKEY:ソートキー, 4, LEFT%]", 85
	RESETCOLOR
	PRINTBUTTON ">>", 88
	PRINT
	PRINTBUTTON @"[\@ 降順ソート ? 降順 # 昇順\@]", 86
	PRINT
	;縦に並べる行がなくそろえたほうがずれて見えるので隙間側を整えるように変更
	;最大13桁カンマ4足して17
	PRINTFORM  金:%MONEY_FORMAT(MONEY)%
	PRINTFORM 陥落:%NUM_FORMAT(FLAG:陥落人数)%
	IF COOLTIME:MASTER:0 >= 2
		CALL COLOR_PRINT(@"ｸｰﾙﾀｲﾑ{COOLTIME:MASTER:0}", カラー_赤)
	ELSEIF CFLAG:MASTER:行動不能状態 == 行動不能_臨月
		CALL COLOR_PRINT("臨月", カラー_赤)
	ENDIF
	PRINTL
ELSE
	PRINTFORM 所持金:%MONEY_FORMAT(MONEY)%
	PRINTL
ENDIF
CALL DRAW_LINE(, カラー_選択不可)

CALL SHOW_SHOP_LIFE

REDRAW 0

;-------------------------------------------------
;ショップ画面の入力処理
;-------------------------------------------------
@USERSHOP
LOCAL:0 = RESULT

CLEARLINE 1
REDRAW 1
;拠点フェイズ
IF TIME == 0
	CALL USERSHOP_LIFE(LOCAL:0)
	;戦略フェイズ
ELSE
	;CALL USERSHOP_SLG(LOCAL:0)
ENDIF

REDRAW 0
CLEARLINE LINECOUNT - LINES_SHOP

;-------------------------------------------------
;ショップ画面で0～99が入力されたときのダミー処理
;-------------------------------------------------
@EVENTBUY
ITEM:BOUGHT = 0
LOCAL:0 = BOUGHT
REDRAW 0
CLEARLINE LINECOUNT - LINES_SHOP

;拠点フェイズ
CALL EVENTBUY_LIFE(LOCAL:0)

;処理を行わなかった場合
IF !RESULT
	;コンフィグ
	IF LOCAL:0 == 91
		CALL SHOW_CONFIG
		;セーブ
	ELSEIF LOCAL:0 == 92
		CALL SAVE_GAME
		;ロード
	ELSEIF LOCAL:0 == 93
		CALL LOAD_GAME
	ELSEIF LOCAL:0 == 94
		CALL QUICK_SAVE
		PRINTFORMW セーブしました
		REDRAW 0
		CLEARLINE LINECOUNT - LINES_SHOP
	ELSEIF LOCAL:0 == 95
		CALL QUICK_LOAD
	ELSEIF TIME == 0
		IF LOCAL:0 == 85
			CALL SINGLE_DRAWLINE
			FOR LOCAL, 0, NUM_SORTKEY
				PRINTFORML [{LOCAL}] %STR_NOW_SORTKEY:LOCAL%
			NEXT
			INPUT
			SIF INRANGE(RESULT, 0, NUM_SORTKEY - 1)
				ソートキー = RESULT
		ELSEIF LOCAL:0 == 86
			降順ソート = !降順ソート
		ELSEIF LOCAL:0 == 87
			ソートキー = ROUND_DECREMENT(ソートキー, 0, NUM_SORTKEY - 1)
		ELSEIF LOCAL:0 == 88
			ソートキー = ROUND_INCREMENT(ソートキー, 0, NUM_SORTKEY - 1)
		ELSEIF LOCAL:0 == 81
		ELSE
		ENDIF
	ENDIF
ENDIF

RETURN


code:
;拠点フェイズにおけるショップ画面の処理

;-------------------------------------------------
;左右カラム表示開始
;使用）CALL START_COLUMN
;想定）コンテンツ表示時・ページ移動時
;備考）行番号リセットとCOLUMN_LEFT_MENU_SHOW(0)の互換
;-------------------------------------------------
@START_COLUMN
FIRST_COLUMN_RIGHT_LINE = LINECOUNT
CALL COLUMN_LEFT_MENU_SHOW(0)

;-------------------------------------------------
;ショップ画面の表示処理(拠点フェイズ)
;-------------------------------------------------
@SHOW_SHOP_LIFE

VARSET LOCAL, 0

;コマンドの選択可否判定
CALL CHECK_CHECKCHARA_SAVE

;キャラクタ表示順のリストを作成
CALL CREATE_SELECTOR_SORT_LIST

;全員の調教参加フラグをクリア
CVARSET CFLAG, 6, 0

TRYCCALLFORM SHOP_LIFE_EVENTBUY_COLUMN_RIGHT_OFF_CHECK{FLAG:拠点フェイズ選択コマンド}
	;右カラムオフなら最新の右カラムに表示のあるメニュー番号でFLAG:拠点フェイズ選択コマンドをリセット
	FLAG:拠点フェイズ選択コマンド = COLUMN_RIGHT_MENU_SAVE_NUM
CATCH
ENDCATCH

;メニュー番号範囲外なら、メニューの選択状態をリセット
IF FLAG:拠点フェイズ選択コマンド < 1 || FLAG:拠点フェイズ選択コマンド > 99
	FLAG:拠点フェイズ選択コマンド = DEFAULT_MENU_NUM
ENDIF

;メニュー番号範囲内だが実行不能なら、メニューの選択状態をリセット
IF FLAG:拠点フェイズ選択コマンド >= 1 || FLAG:拠点フェイズ選択コマンド <= 99 && !SHOP_AVAIL:(FLAG:拠点フェイズ選択コマンド)
	FLAG:拠点フェイズ選択コマンド = DEFAULT_MENU_NUM
ENDIF

;システム設定ならリセット
IF FLAG:拠点フェイズ選択コマンド > COLUMN_LEFT_MENU_END_VALUE
	FLAG:拠点フェイズ選択コマンド = DEFAULT_MENU_NUM
ENDIF

;デフォルトメニューにリセットしてもメニュー実行不能なら、メニューの選択状態を解除
IF FLAG:拠点フェイズ選択コマンド == DEFAULT_MENU_NUM && !SHOP_AVAIL:(FLAG:拠点フェイズ選択コマンド)
	FLAG:拠点フェイズ選択コマンド = 0
ENDIF

;それぞれの行番号に割り当てるカテゴリ番号とメニュー番号を保存する配列のリセット
CALL COLUMN_LEFT_MENULINE_SAVE

;左右カラムの行番号をリセットし、ひとつめのメニュー（残行動回数表示）を表示
CALL START_COLUMN

;右カラムの表示処理呼び出し（右カラム用改行関数に付随する左メニューの表示も行う）
TRYCCALLFORM SHOP_LIFE_EVENTBUY_SHOW{FLAG:拠点フェイズ選択コマンド}
CATCH
	;白紙のページの場合
	;今回のメニュー番号が右カラムオフかつ
	;最新の右カラムに表示のあるメニュー番号も実行不可になっていた場合
	CALL COLUMN_RIGHT_CLEAR
ENDCATCH

;-------------------------------------------------
;ショップ画面の入力処理(拠点フェイズ 0～99)
;ARG:0に入力した値が入る
;処理を行った場合は1を、行わなかった場合は0を返す
;SHOP.ERBでまとめてREDRAW 0 CLEARLINEしたい場合は0
;-------------------------------------------------
@EVENTBUY_LIFE(ARG:0)
;左カラムの入力処理
IF SHOP_AVAIL:(ARG:0) && ARG:0 >= COLUMN_LEFT_MENU_START_VALUE && ARG:0 <= COLUMN_LEFT_MENU_END_VALUE
	;メニュー移動したのでメニュー用の汎用変数をリセット
	VARSET MENUVAR, 0
	;人材を探す用オプションの初期化
	VARSET TALENT_FILTER
	VARSET TAG_FILTER
	職業候補 = -1
	;入力値をメニュー番号に受け取る
	FLAG:拠点フェイズ選択コマンド = ARG:0
	TRYCCALLFORM SHOP_LIFE_EVENTBUY_COLUMN_RIGHT_OFF_CHECK{FLAG:拠点フェイズ選択コマンド}
	CATCH
		;右カラムオンなら、最新の右カラムとしてメニュー番号を保存する
		COLUMN_RIGHT_MENU_SAVE_NUM = FLAG:拠点フェイズ選択コマンド
	ENDCATCH
	;入力処理呼び出し
	TRYCALLFORM SHOP_LIFE_EVENTBUY{ARG:0}
	RETURN RESULT

	;右カラムの入力処理補助
ELSEIF ARG:0 < COLUMN_LEFT_MENU_START_VALUE
	TRYCALLFORM SHOP_LIFE_EVENTBUY_SUB{FLAG:拠点フェイズ選択コマンド}(ARG:0)
	RETURN RESULT

	;共通処理
ELSE
	;前のページ
	IF ARG:0 == SHOP_LIFE_LIST1_PAGE_BACK
		FLAG:拠点フェイズページ --
		RETURN 0
		;次のページ
	ELSEIF ARG:0 == SHOP_LIFE_LIST1_PAGE_NEXT
		FLAG:拠点フェイズページ ++
		RETURN 0
		;前のページ
	ELSEIF ARG:0 == SHOP_LIFE_LIST2_PAGE_BACK
		FLAG:拠点フェイズページ2 --
		RETURN 0
		;次のページ
	ELSEIF ARG:0 == SHOP_LIFE_LIST2_PAGE_NEXT
		FLAG:拠点フェイズページ2 ++
		RETURN 0
	ELSE
		RETURN 0
	ENDIF
	RETURN 1
ENDIF

;-------------------------------------------------
;ショップ画面の入力処理(拠点フェイズ 100～9999)
;ARG:0に入力した値が入る
;-------------------------------------------------
@USERSHOP_LIFE(ARG:0)
LOCAL:0 = 0
;右カラムボタン入力値をキャラ番号に変換する処理のオフ判定があれば
TRYCCALLFORM SHOP_LIFE_USERSHOP_COLUMN_RIGHT_CONVERT_CHARANUM_OFF_CHECK{FLAG:拠点フェイズ選択コマンド}
	;入力値をそのまま受け取って直接呼ぶ
	TRYCALLFORM SHOP_LIFE_USERSHOP{FLAG:拠点フェイズ選択コマンド}(ARG:0)
	LOCAL:0 |= RESULT
	;なければ
CATCH
	;通常のキャラリストをキャラ関係の入力処理を通して呼ぶ
	CALL USERSHOP_LIFE_CHARA1(NO_TO_CHARA(ARG:0 - SHOP_LIFE_LIST1_ADD_INPUT))
	LOCAL:0 |= RESULT
	CALL USERSHOP_LIFE_CHARA2(NO_TO_CHARA(ARG:0 - SHOP_LIFE_LIST2_ADD_INPUT))
	LOCAL:0 |= RESULT
ENDCATCH
RETURN LOCAL:0

;-------------------------------------------------
;ショップ画面におけるキャラ関係の入力処理(その１)
;ARG:0はキャラ番号、再描画が必要な場合は1を返す
;-------------------------------------------------
@USERSHOP_LIFE_CHARA1(ARG:0)
#DIM FIRST_LINE

;キャラが存在しなければ戻る
IF ARG:0 < 0 || ARG:0 >= CHARANUM
	RETURN 0
ENDIF

;選択可能な条件を満たしていないキャラなら戻る
RESULT = 0
TRYCALLFORM SHOP_LIFE_CHECKCHARA{FLAG:拠点フェイズ選択コマンド}(ARG:0)
IF RESULT != 1
	RETURN 0
ENDIF

FIRST_LINE = LINECOUNT

;リスト１入力処理呼び出し
TRYCCALLFORM SHOP_LIFE_USERSHOP{FLAG:拠点フェイズ選択コマンド}(ARG:0)
	RETURN RESULT
CATCH
	RETURN 0
ENDCATCH

;-------------------------------------------------
;ショップ画面におけるキャラ関係の入力処理(その２)
;ARG:0はキャラ番号、再描画が必要な場合は1を返す
;-------------------------------------------------
@USERSHOP_LIFE_CHARA2(ARG:0)

;キャラが存在しなければ戻る
IF ARG:0 < 0 || ARG:0 >= CHARANUM
	RETURN 0
ENDIF

;選択可能な条件を満たしていないキャラなら戻る
RESULT = 0
TRYCALLFORM SHOP_LIFE_CHECKCHARA_SUB{FLAG:拠点フェイズ選択コマンド}(ARG:0)
IF RESULT != 1
	RETURN 0
ENDIF

;リスト２入力処理呼び出し
TRYCCALLFORM SHOP_LIFE_USERSHOP_SUB{FLAG:拠点フェイズ選択コマンド}(ARG:0)
	RETURN RESULT
CATCH
	RETURN 0
ENDCATCH

;-------------------------------------------------
;行動開始時の共通処理
;-------------------------------------------------
@START_TRAIN_COMMON
;全ての参加キャラについて処理
FOR LOCAL:0, 0, CHARANUM
	IF CFLAG:(LOCAL:0):調教参加フラグ || (FLAG:ハウジングモード && CFLAG:LOCAL:交流参加 == 1)
		;現在の機嫌を保存
		FOR LOCAL:1, 0, 10
			CFLAG:(LOCAL:0):(LOCAL:1 + 190) = PALAM:(LOCAL:0):(LOCAL:1 + 10)
		NEXT
		;チョロインもちなら強制友好化を立てる
		SIF TALENT:(LOCAL:0):チョロイン
			CFLAG:(LOCAL:0):強制友好化 = 1
		;参加済みに
		CFLAG:(LOCAL:0):行動済み = 1
		IF GROUPMATCH(FLAG:調教モード, 調教_逆調教通常, 調教_逆調教特殊) && LOCAL:0 != MASTER
			CFLAG:(LOCAL:0):調教中BASE減らない = 1
		ELSEIF FLAG:調教モード == 調教_慰安 && CFLAG:(LOCAL:0):慰安参加者
			CFLAG:(LOCAL:0):調教中BASE減らない = 1
		ENDIF
		SIF (CFLAG:LOCAL:捕虜調教の助手 || CFLAG:LOCAL:夜這いの助手) && TALENT:LOCAL:親友
			CFLAG:(LOCAL:0):調教中帰らない = 1
	ENDIF
NEXT

;MASTERの機嫌初期化
FOR LOCAL:1, 0, 10
	CFLAG:MASTER:(LOCAL:1 + 190) = 0
	PALAM:MASTER:(LOCAL:1 + 10) = 0
NEXT

SIF GROUPMATCH(FLAG:調教モード, 調教_閨, 調教_捕虜調教) && IS_SP_COUNTRY(CFLAG:MASTER:所属)
	TRYCALLFORM START_TRAIN_COMMON_%SP_COUNTRY_NAME_ENG:SP_COUNTRY_TO_CONST(CFLAG:MASTER:所属)%

SHOP_TIME += 1
;BEGIN TRAIN
JUMP FL_TRAIN

;-------------------------------------------------
;ARG:0番のキャラを調教対象としてセットする(対象が一人の場合のみ)
;-------------------------------------------------
@TRAIN_TARGET_SETTING(ARG:0)
;ターゲットを設定
CALL ADD_MTAR(ARG:0)

;ターゲットの調教参加フラグをＯＮ
CFLAG:(ARG:0):調教参加フラグ = 1

RETURN 1

;-------------------------------------------------
;活動可能回数の計算
;ARG:0 = 一人追放しての計算
;-------------------------------------------------
@CALC_SHOP_TIME(ARG:0 = 0)
#FUNCTION
#DIM 行動回数
#DIM 士官数
#DIM NOW
#DIM PREV

SIF !CFLAG:MASTER:所属
	RETURNF 3

;GET_COMMANDER_NUMは主人公も引っかけてくるので、1引いて除外
;思考戦車を引くようにした
士官数 = GET_COMMANDER_NUM(CFLAG:MASTER:所属) - GET_ANIMAL_NUM(CFLAG:MASTER:所属) - 1

SIF ARG:0
	士官数 --
行動回数 = 0
PREV = 2
NOW = 3
DO
	NOW += PREV
	PREV = NOW - PREV
	行動回数 ++
LOOP 士官数 >= NOW

RETURNF MAX(行動回数, 2)


code: ;使用中のボタン番号を忘れないようにするためのダミーファイル


code:
;「会いに行く」はFLAG:拠点フェイズ選択コマンドが選択不可のとき
;　指定されるデフォルトのメニュー番号（DEFAULT_MENU_NUM）になっている
;「会いに行く」のみ使用しない関数もコメントアウトで配置した
;　どんな関数が既に存在しているかわからなくなった時の確認用やテンプレート代わりに
;-------------------------------------------------
;「会いに行く」の名称
;　名称の有無はメニューの存在判定にも使用される
;-------------------------------------------------
@SHOP_LIFE_NAME11
[SKIPSTART]
IF CFLAG:MASTER:行動不能状態 == 行動不能_育児
	RESULTS:0 '= "子育てする"
ELSE
	RESULTS:0 '= "会いに行く"
ENDIF
[SKIPEND]
;-------------------------------------------------
;「会いに行く」の選択可否
;　メニューの選択可否判定は@CHECK_CHECKCHARA_SAVEで行われ
;　SHOP_AVAIL:(メニュー番号)に 0:選択不可 1:選択可 で保存される
;　選択可能キャラ存在判定で 1:選択可 のキャラが存在し
;　この判定でも 1:選択可 なら SHOP_AVAIL:(メニュー番号)=1:選択可
;
;　RETURN 0:選択不可（キャラ存在判定に上書きして表示を阻止する）
;　RETURN 1:選択可
;-------------------------------------------------
@SHOP_LIFE_CHECK11
SIF CFLAG:MASTER:捕虜先
	RETURN 0
SIF CFLAG:MASTER:行動不能状態 == 行動不能_臨月 || COOLTIME:MASTER:0 > 1
	RETURN 0
RETURN 1

;-------------------------------------------------
;「会いに行く」の選択可能キャラ存在判定リスト１（上）
;　RETURN 0:このキャラは選択不可でリストに載らない
;　RETURN 1:このキャラは選択可
;　RETURN 2:このキャラは灰色でリストに載るが選択不可
;-------------------------------------------------
@SHOP_LIFE_CHECKCHARA11(ARG:0)
;※使用前に TMP_CREATE_RELATION_MAP 関数を呼び出す必要あり
;捕虜として捕まえている場合
IF CFLAG:(ARG:0):捕虜先
	;非主人公、主人公勢力の捕虜かつ軟禁中
	RETURN CHECK91(ARG:0, 2, ARG:0 != MASTER && CFLAG:(ARG:0):捕虜先 == CFLAG:MASTER:所属 && CFLAG:(ARG:0):軟禁中 == 1 && !IS_ANIMAL(ARG:0) && SHOP_LIFE_11_GET_FILTER(ARG:0))
ENDIF

;放浪時
IF !CFLAG:MASTER:所属
	;捕虜でない、非主人公、放浪中
	RETURN CHECK91(ARG:0, 2, ARG:0 != MASTER && CFLAG:(ARG:0):特殊状態 == 特殊状態_放浪 && !IS_ANIMAL(ARG:0) && SHOP_LIFE_11_GET_FILTER(ARG:0))
ELSE
	;捕虜でない、非主人公、同一勢力or共闘勢力or放浪中で候補リストにいる
	RETURN CHECK91(ARG:0, 2, ARG:0 != MASTER && CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属 && !IS_ANIMAL(ARG:0) && SHOP_LIFE_11_GET_FILTER(ARG:0))
ENDIF
;-------------------------------------------------
;「会いに行く」の選択可能キャラ存在判定リスト２（下・補佐）
;　リスト２（下）が存在する場合、こちらで判定を行う
;　ただし下段は助手の指定などに使われることが多く
;　助手はいなくても行動できることが多いため
;　この判定で選択不可が返ってもメニュー表示をオフにしない
;-------------------------------------------------
;@SHOP_LIFE_CHECKCHARA_SUB11(ARG:0)

;-------------------------------------------------
;「会いに行く」の左カラムメニューの入力処理
;　RETURN 0:CLEARLINE LINECOUNT - LINES_SHOPする
;　RETURN 1:CLEARLINE LINECOUNT - LINES_SHOPしない
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY11
FLAG:拠点フェイズページ = 1
FLAG:夜這い = 0
RETURN 0

;-------------------------------------------------
;「会いに行く」の右カラムオフ判定
;　通常は右カラムに何らかの表示があるが
;　右カラムに何も表示しないメニューならこの関数をセットしておく
;　するとメイン画面に戻ったとき最新の右カラム（ひとつ前に選択したメニュー等）を表示する
;-------------------------------------------------
;@SHOP_LIFE_EVENTBUY_COLUMN_RIGHT_OFF_CHECK11

;-------------------------------------------------
;「会いに行く」の右カラムボタン入力値をキャラ番号に変換する処理のオフ判定
;　入力値をそのまま指定したいときに使用
;　これを使用すると入力値がキャラ番号の範囲外でも退避処理を通らない
;　そのため入力値からキャラ番号をとる場合は退避処理を自作することになる
;-------------------------------------------------
;@SHOP_LIFE_USERSHOP_COLUMN_RIGHT_CONVERT_CHARANUM_OFF_CHECK11

;-------------------------------------------------
;「会いに行く」の右カラムキャラリスト１（上）のボタン
;　キャラリストのデフォルトのボタンは選択中色がない（トグル式でない）
;　トグル式のボタンを使いたいときや、ボタンをいくつも羅列したいとき等
;　キャラリストにデフォルトのボタン以外を使用したいメニューならこれを用意する
;
;　ボタン番号に追加する数値はSHOP_LIFE_LIST1_ADD_INPUT=100
;　ARG:1はリスト関数からCHECKCHARAの判定結果が渡されているのでそのまま返せばＯＫ
;-------------------------------------------------
;@SHOP_LIFE_LIST1_BUTTON11(ARG:0, ARG:1)
;CALL COLUMN_RIGHT_CHARALIST_BUTTON(キャラ（ARG:0）, 選択中カラー表示フラグ, ボタン番号に追加する数値（SHOP_LIFE_LIST1_ADD_INPUT）, CHECKCHARAの戻り値（ARG:1）, 行動済みマークをオフにするフラグ)
;RETURN 0

;-------------------------------------------------
;「会いに行く」の右カラムキャラリスト２（下）のボタン
;　上に同じ。下段のリストに使用される
;　ボタン番号に追加する数値はSHOP_LIFE_LIST2_ADD_INPUT=1100
;-------------------------------------------------
;@SHOP_LIFE_LIST2_BUTTON11(ARG:0, ARG:1)
;CALL COLUMN_RIGHT_CHARALIST_BUTTON(キャラ（ARG:0）, 選択中カラー表示フラグ, ボタン番号に追加する数値（SHOP_LIFE_LIST2_ADD_INPUT）, CHECKCHARAの戻り値（ARG:1）, 行動済みマークをオフにするフラグ)
;RETURN 0

;-------------------------------------------------
;「会いに行く」の右カラムキャラリスト１（上）のボタンに追尾させる情報
;　「投獄する」や「娯楽担当」等のように
;　デフォルトのボタンでは表示されない能力値を添えたい場合や
;　自動的に表示される情報が不要なときこれを用意する
;
;　RETURN 0　ボタンにデフォルトの情報を付与する
;　RETURN 1　ボタンにデフォルトの情報を付与しない
;-------------------------------------------------
;@SHOP_LIFE_BUTTON_ADD_TOP11(ARG:0)
;ここにボタンの後ろに表示したい情報
;RETURN 1

;-------------------------------------------------
;「会いに行く」の右カラムキャラリスト２（下）ボタンに追尾させる情報
;-------------------------------------------------
;@SHOP_LIFE_BUTTON_ADD_BOTTOM11(ARG:0)
;ここにボタンの後ろに表示したい情報
;RETURN 1

;-------------------------------------------------
;「会いに行く」の右カラム表示処理
;　ここは右カラムに表示する情報のメイン部分
;　左カラムのボタン表示と右カラムのリスト表示を交互に指定する必要があったが
;　指定が大変なので、改行や区切り線の指定に以下の関数を使用する
;
;　CALL COLUMN_RIGHT_PRINTL　改行と行番号の指定と左カラムボタン表示
;　CALL COLUMN_RIGHT_LINE　　右カラム用の幅に設定されたラインを表示
;
;　ループ処理では改行されないほうが処理しやすいので線は改行していない
;　線を表示したら改行（CALL COLUMN_RIGHT_PRINTL）する必要あり
;
;　リスト呼び出し関数は以下
;　１．CALL COLUMN_RIGHT_CHARALIST 　　　　基本のキャラリスト（リスト１）
;　２．CALL COLUMN_RIGHT_CHARALIST_TOP 　　２段組キャラリスト上（リスト１）
;　　　CALL COLUMN_RIGHT_CHARALIST_BOTTOM　２段組キャラリスト下（リスト２）
;　２はセットで使う
;
;　それぞれARG:0（１行に並べるボタン数）と
;　ARG:1（１ボタン指定で何行とるか）を指定できる
;　ボタンの情報量や行数によっては表示が崩れるので確認は必要
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SHOW11
;タイトル表示
CALL COLUMN_RIGHT_TITLE("対象者選択", "0", "1", "1", "0")
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL
PRINTBUTTON @"[%SHOP_LIFE_11_GET_FILTER_MODE(), MAX_CHARANAME_LENGTH, LEFT%]", 1
PRINTPLAIN
PRINTBUTTON @"[%"フィルタ設定", MAX_CHARANAME_LENGTH, LEFT%]", 2
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL
;標準的なキャラリストとページ移動
CALL COLUMN_RIGHT_CHARALIST
RETURN 0

;-------------------------------------------------
;「会いに行く」の右カラムボタンの入力処理補佐
;　入力値0～9を想定している
;　RETURN 0:CLEARLINE LINECOUNT - LINES_SHOPする
;　RETURN 1:CLEARLINE LINECOUNT - LINES_SHOPしない
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SUB11(ARG:0)
;表示フィルタ切り替え
IF ARG:0 == 1
	SHOP_LIFE_11_FILTER_MODE = ROUND_INCREMENT(SHOP_LIFE_11_FILTER_MODE, 0, VARSIZE("SHOP_LIFE_11_FILTER", 0) - 1)
	RETURN 0
	;表示フィルタ設定
ELSEIF ARG:0 == 2
	CALL SHOP_LIFE_11_SET_FILTER
ENDIF

;-------------------------------------------------
;「会いに行く」のリスト１（上）入力処理
;　ARG:0=NO_TO_CHARA(入力値-SHOP_LIFE_LIST1_ADD_INPUT)されている
;-------------------------------------------------
@SHOP_LIFE_USERSHOP11(ARG:0)

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

$SHOW_LOOP_INFO_A

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

;捕虜の場合
IF CFLAG:(ARG:0):捕虜先
	PRINTFORML %ANAME(ARG:0)%をどうしますか？
	PRINTPLAIN
	PRINTBUTTON " 0[会いに行く]", 0
	PRINTPLAIN
	PRINTBUTTON " 1[投獄する]", 1
	PRINTPLAIN
	;クリア後ではない
	IF !FLAG:クリアフラグ
		PRINTBUTTON " 2[解放する]", 2
	ELSE
		SETCOLOR カラー_選択不可
		PRINTPLAIN  2[解放する]
		RESETCOLOR
	ENDIF
	PRINTL
	PRINTPLAIN
	PRINTBUTTON " 9[キャンセル]", 9
	PRINTL

	REDRAW 0

	$INPUT_LOOP_PRISONER
	INPUT

	IF RESULT == 0
		;調教初期設定
		CALL TRAIN_TARGET_SETTING(ARG:0)
		;初期のウフフフラグはＯＦＦにする
		FLAG:ウフフフラグ = 0
		;会いに行くモード
		FLAG:調教モード = 0
		;行動開始時の共通処理
		CALL START_TRAIN_COMMON
		REDRAW 1
		RETURN 1
	ELSEIF RESULT == 1
		PRINTFORMW %ANAME(ARG:0)%を投獄しました
		CFLAG:(ARG:0):軟禁中 = 0
		REDRAW 1
		RETURN 1
	ELSEIF RESULT == 2 && !FLAG:クリアフラグ
		PRINTFORML 本当に%ANAME(ARG:0)%を解放しますか？
		CALL ASK_YN
		IF RESULT == 0
			CALL KOJO_EVENT(ARG:0, 340)
			PRINTFORMW %ANAME(ARG:0)%を解放しました
			CALL CAPTURE(ARG:0, 0, TALENT:(ARG:0):崩壊)
			REDRAW 1
			RETURN 1
		ENDIF
		REDRAW 1
		GOTO SHOW_LOOP_INFO_A
	ELSEIF RESULT != 9
		CLEARLINE 1
		GOTO INPUT_LOOP_PRISONER
	ENDIF
	REDRAW 1
ELSE
	IF CFLAG:(ARG:0):行動不能状態 == 行動不能_臨月
		PRINTFORML %ANAME(ARG:0)%は出産を控え行動が制限されています
		PRINTFORML %ANAME(ARG:0)%に会いに行きますか？
	ELSEIF CFLAG:(ARG:0):行動不能状態 == 行動不能_育児
		PRINTFORML %ANAME(ARG:0)%は育児中につき行動が制限されています
		PRINTFORML %ANAME(ARG:0)%に会いに行きますか？
	ELSEIF CFLAG:(ARG:0):行動不能状態 == 3
		PRINTFORML %ANAME(ARG:0)%は重症につき行動が制限されています
		PRINTFORML %ANAME(ARG:0)%のお見舞いに行きますか？
	ELSEIF CFLAG:(ARG:0):行動不能状態 == 行動不能_子供
		PRINTFORML %ANAME(ARG:0)%はまだ幼いため育児モードで開始します
		PRINTFORML %ANAME(ARG:0)%に会いに行きますか？
	ELSE
		PRINTFORML %ANAME(ARG:0)%に会いに行きますか？
	ENDIF
	IF CFLAG:(ARG:0):行動不能状態 == 行動不能_子供
		LOCALS = %EDUCATION(CFLAG:ARG:教育方針)%
		PRINTL [0] 普通に会う [1] 集中教育を実行 [2] やっぱりやめる
		PRINTFORM 　現在の教育方針 -
		PRINTBUTTON "["+LOCALS+"]",10
		INPUT
		IF RESULT == 1 && CFLAG:ARG:教育方針 >= 10 && CFLAG:ARG:教育方針 <= 15
			CFLAG:ARG:行動済み = 1
			SHOP_TIME ++
			CALL 教育(ARG, MASTER, CFLAG:ARG:教育方針)
			LINES_SHOP = LINECOUNT
			BEGIN TURNEND
		ELSEIF  RESULT == 2
			;処理なしで戻れる？
		ELSEIF RESULT == 10
			IF CFLAG:ARG:教育方針 < 10 || CFLAG:ARG:教育方針 >= 15
				CFLAG:ARG:教育方針 = 10
			ELSE
				CFLAG:ARG:教育方針 ++
			ENDIF
			GOTO SHOW_LOOP_INFO_A
		ELSE
			GOTO NORMAL_MEET
		ENDIF
	ELSE
		CALL ASK_YN
		IF RESULT == 0
			$NORMAL_MEET
			;調教初期設定
			CALL TRAIN_TARGET_SETTING(ARG:0)
			;初期のウフフフラグはＯＦＦにする
			FLAG:ウフフフラグ = 0
			;相手が子供なら子育てモード
			IF CFLAG:(ARG:0):行動不能状態 == 行動不能_子供
				FLAG:調教モード = 3
				;それ以外は通常の会いに行くモード
			ELSE
				FLAG:調教モード = 0
			ENDIF
			;行動開始時の共通処理
			CALL START_TRAIN_COMMON
		ENDIF
	ENDIF
ENDIF
RETURN 1

;-------------------------------------------------
;「会いに行く」のリスト２（下）入力処理
;　ARG:0=NO_TO_CHARA(入力値-SHOP_LIFE_LIST2_ADD_INPUT)されている
;-------------------------------------------------
;@SHOP_LIFE_USERSHOP_SUB11(ARG:0)


code:
;-------------------------------------------------
;「会いに行く」の追加チェック
;-------------------------------------------------
@SHOP_LIFE_CHECK_ADDITIONAL_CHECK11()
#DIM フラグ
#DIM BACKUP_FILTER_MODE

; 「フィルタの条件に一致するキャラクターがいない場合にメニューが表示されなくなる」を防ぐ。
; いつでもメニューを表示するのであれば、RETURN 1 でいいんだけど。

BACKUP_FILTER_MODE = SHOP_LIFE_11_FILTER_MODE
SHOP_LIFE_11_FILTER_MODE = 0

フラグ = 0
FOR LOCAL, 0, CHARANUM
	RESULT = 0
	CALL SHOP_LIFE_CHECKCHARA11(LOCAL)
	;このキャラは0:選択不可で非表示 1:選択可 2:選択不可色で表示のどれかが戻る
	IF RESULT == 1
		フラグ = 1
		BREAK
	ENDIF
NEXT

SHOP_LIFE_11_FILTER_MODE = BACKUP_FILTER_MODE

RETURN フラグ

@SHOP_LIFE_11_GET_FILTER_MODE
#FUNCTIONS

SIF SHOP_LIFE_11_FILTER_MODE
	RETURNF "フィルタ" + TOSTR(SHOP_LIFE_11_FILTER_MODE)

RETURNF "フィルタOFF"

@SHOP_LIFE_11_SET_FILTER
#DIMS NAM
#DIM DMY
#DIM VAL_NOW
#DIM FIRST_LINE
#DIM ITM
#DIM VAL
#DIM I1
#DIM I2

SIF !SHOP_LIFE_11_FILTER_MODE
	SHOP_LIFE_11_FILTER_MODE = 1

REDRAW 0

CALL SINGLE_DRAWLINE
PRINTFORML フィルタ{SHOP_LIFE_11_FILTER_MODE}設定
CALL SINGLE_DRAWLINE
FIRST_LINE = LINECOUNT
$SHOW_LOOP

FOR LOCAL, 0, VARSIZE("SHOP_LIFE_11_FILTER", 1) + 1
	IF LOCAL == VARSIZE("SHOP_LIFE_11_FILTER", 1)
		PRINTL
		NAM = 一括設定
		VAL_NOW = -1
	ELSE
		DMY = SHOP_LIFE_11_GET_FILTER_ITEM(0, LOCAL, NAM)
		VAL_NOW = SHOP_LIFE_11_FILTER:(SHOP_LIFE_11_FILTER_MODE):LOCAL
	ENDIF
	SIF NAM == ""
		CONTINUE
	CALL PRINT_SELECT_BUTTON("  { 両方 }", LOCAL * 10 + 0, VAL_NOW == 0)
	CALL PRINT_SELECT_BUTTON("  {○のみ}", LOCAL * 10 + 1, VAL_NOW == 1)
	CALL PRINT_SELECT_BUTTON("  {×のみ}", LOCAL * 10 + 2, VAL_NOW == 2)
	PRINTFORML     %NAM%
NEXT
PRINTL
PRINTL [9] OK

$INPUT_LOOP
INPUT

ITM = RESULT / 10
VAL = RESULT % 10

IF RESULT == 9
	REDRAW 1
	RETURN
ELSEIF VAL >= 0 && VAL <= 2
	IF ITM >= 0 && ITM < VARSIZE("SHOP_LIFE_11_FILTER", 1)
		I1 = ITM
		I2 = ITM + 1
	ELSE
		I1 = 0
		I2 = VARSIZE("SHOP_LIFE_11_FILTER", 1)
	ENDIF
	FOR LOCAL, I1, I2
		SHOP_LIFE_11_FILTER:(SHOP_LIFE_11_FILTER_MODE):LOCAL = VAL
	NEXT
	CLEARLINE LINECOUNT - FIRST_LINE
	GOTO SHOW_LOOP
ENDIF

CLEARLINE 1
GOTO INPUT_LOOP

@SHOP_LIFE_11_GET_FILTER(CHARA)
#FUNCTION
#DIM CHARA
#DIMS NAM

SIF !SHOP_LIFE_11_FILTER_MODE
	RETURNF 1

FOR LOCAL, 0, VARSIZE("SHOP_LIFE_11_FILTER", 1)
	SELECTCASE SHOP_LIFE_11_FILTER:(SHOP_LIFE_11_FILTER_MODE):LOCAL
		CASE 1
			SIF !SHOP_LIFE_11_GET_FILTER_ITEM(CHARA, LOCAL, NAM) && NAM != ""
				RETURNF 0
		CASE 2
			SIF SHOP_LIFE_11_GET_FILTER_ITEM(CHARA, LOCAL, NAM) && NAM != ""
				RETURNF 0
	ENDSELECT
NEXT

RETURNF 1

@SHOP_LIFE_11_GET_FILTER_ITEM(CHARA, IDX, NAM)
#FUNCTION
#DIM CHARA
#DIM IDX
#DIMS REF NAM
#DIM FILT

; 呼び出し側の都合によっては、項目名だけしか使わないこともあるし、フィルタ結果だけしか使わないこともある。
; しかし、項目名とフィルタ結果はセットで記述したほうがわかりやすいと思う。

SELECTCASE IDX
	CASE 0
		NAM = 東方キャラ
		FILT = IS_UNIQUE_CHARA(CHARA)
	CASE 1
		NAM = ランダム(汎用)キャラ
		FILT = IS_RANDOM_CHARA(CHARA)
	CASE 2
		NAM = 子供キャラ
		FILT = IS_CHILD(CHARA)
	CASE 3
		NAM = 特殊キャラ
		FILT = IS_SP_CHARA(CHARA)
	CASE 4
		; 恋慕も服従も無しで恋人や烙印が付く可能性もあるので、@IS_LOVERや@IS_SLAVEは使わないことにする
		NAM = 恋慕または服従または主人
		FILT = TALENT:CHARA:恋慕 || TALENT:CHARA:服従 || TALENT:CHARA:主人
	CASE 5
		; OR検索ができれば、CASE 5 は不要のはずなんだけどね。CASE 6 と CASE 7 のORで実現できるから。
		NAM = 特殊勢力への陥落
		FILT = TALENT:CHARA:特殊勢力陥落系
	CASE 6
		NAM = 特殊勢力（主人公所属勢力）への陥落
		FILT = IS_SP_COUNTRY(CFLAG:MASTER:所属) && GETBIT(TALENT:CHARA:特殊勢力陥落系, SP_COUNTRY_TO_CONST(CFLAG:MASTER:所属))
	CASE 7
		NAM = 特殊勢力（主人公所属勢力以外）への陥落
		FILT = 0
		FOR LOCAL, 0, MAX_SP_COUNTRY
			IF LOCAL != SP_COUNTRY_TO_CONST(CFLAG:MASTER:所属) && GETBIT(TALENT:CHARA:特殊勢力陥落系, LOCAL)
				FILT = 1
				BREAK
			ENDIF
		NEXT
	CASE 8
		NAM = 捕虜
		FILT = CFLAG:CHARA:捕虜先
	CASEELSE
		NAM =
		FILT = 0
ENDSELECT

RETURNF FILT


code:
#DIM SAVEDATA SHOP_LIFE_11_FILTER_MODE
#DIM SAVEDATA SHOP_LIFE_11_FILTER, 3, 10


code:
;-------------------------------------------------
;育児用(ARG=子供 ARG:1=教育者
;-------------------------------------------------
;CFLAG:(ARG:1):教育方針 = 10
@教育(ARG,ARG:1,ARG:2)
VARSET LOCALS
;SIF !ARG:2
;	ARG:2 = CFLAG:(ARG:1):教育方針
SELECTCASE ARG:2
	CASE 10
		LOCAL = GETNUM(ABL, "身体")
		LOCALS = 武術
	CASE 11
		LOCAL = GETNUM(ABL, "器用")
		LOCALS = 護身
	CASE 12
		LOCALS = 兵法
		LOCAL = GETNUM(ABL, "知識")
	CASE 13
		LOCALS = 学問
		LOCAL = GETNUM(ABL, "社交")
	CASE 14
		LOCALS = 歌舞
		LOCAL = GETNUM(ABL, "歌唱")
	CASE 15
		LOCALS = 料理
		LOCAL = GETNUM(ABL, "料理")
ENDSELECT
MPLY:0 = ARG:1
MTAR:0 = ARG

FOR LOCAL:1, 0, 5
	CALL COM_SLG_TRAIN_MAIN_PROCESS(LOCAL, 1)
NEXT

PRINTFORMW %ANAME(ARG:1)%は%ANAME(ARG)%に%LOCALS%を教えている…
CALL TRAIN_AUTO_ABLUP(ARG)

@EDUCATION(ARG)
#FUNCTIONS
SELECTCASE ARG
	CASE 10
		LOCALS = 武術
	CASE 11
		LOCALS = 護身
	CASE 12
		LOCALS = 兵法
	CASE 13
		LOCALS = 学問
	CASE 14
		LOCALS = 歌舞
	CASE 15
		LOCALS = 料理
	CASEELSE
		LOCALS = なし
ENDSELECT
RETURNF LOCALS


code:
;-------------------------------------------------
;「閨に呼ぶ」の名称
;-------------------------------------------------
@SHOP_LIFE_NAME12
; RESULTS:0 '= "閨に呼ぶ"

;-------------------------------------------------
;「閨に呼ぶ」の選択可否
;-------------------------------------------------
@SHOP_LIFE_CHECK12
SIF CFLAG:MASTER:行動不能状態 == 行動不能_臨月 || COOLTIME:MASTER:0 > 1
	RETURN 0
SIF CFLAG:MASTER:捕虜先
	RETURN 0
RETURN 1

;-------------------------------------------------
;「閨に呼ぶ」の選択可能キャラ存在判定
;-------------------------------------------------
@SHOP_LIFE_CHECKCHARA12(ARG:0)
CALL SHOP_LIFE_CHECKCHARA_NEYA(ARG:0)
RETURN RESULT

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

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

;-------------------------------------------------
;「閨に呼ぶ」の右カラム表示処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SHOW12
#DIM 選択人数

選択人数 = 0

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

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

IF 選択人数 >= 1
	PRINTBUTTON "[このメンバーで決定]", 1
	PRINTPLAIN
	PRINTBUTTON "[このメンバーに逆調教]", 2
	PRINTPLAIN
	PRINTBUTTON "[リセット]", 3
ELSE
	SETCOLOR カラー_選択不可
	PRINTPLAINFORM [このメンバーで決定]
	PRINTPLAIN
	PRINTPLAINFORM [このメンバーに逆調教]
	PRINTPLAIN
	PRINTPLAINFORM [リセット]
	RESETCOLOR
ENDIF
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

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

RETURN 0

;-------------------------------------------------
;「閨に呼ぶ」の右カラムボタンの入力処理補佐
;　RETURN 0:CLEARLINE LINECOUNT - LINES_SHOPする
;　RETURN 1:CLEARLINE LINECOUNT - LINES_SHOPしない
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SUB12(ARG:0)
;このメンバーで決定
IF ARG:0 == 1
	CALL DECIDE_YOTOGI_MEMBER(0)
	IF !RESULT
		RETURN 0
	ENDIF
;このメンバーに逆調教
ELSEIF ARG:0 == 2
	CALL DECIDE_YOTOGI_MEMBER(1)
	IF !RESULT
		RETURN 2
	ENDIF
;メンバーをリセット
ELSEIF ARG:0 == 3
	CALL RESET_YOTOGI_MEMBER
ENDIF
RETURN 0

;-------------------------------------------------
;「閨に呼ぶ」のリスト１入力処理
;-------------------------------------------------
@SHOP_LIFE_USERSHOP12(ARG:0)
;参加キャラの数を数える
LOCAL:5 = 0
FOR LOCAL:0, 0, CHARANUM
	IF CFLAG:(LOCAL:0):閨に呼ぶで選択中
		LOCAL:5 ++
	ENDIF
NEXT
IF CFLAG:(ARG:0):閨に呼ぶで選択中 || LOCAL:5 < 8
	;調教参加フラグを反転
	CFLAG:(ARG:0):閨に呼ぶで選択中 = !CFLAG:(ARG:0):閨に呼ぶで選択中
ENDIF
RETURN 0

;-------------------------------------------------
;「閨に呼ぶ」の処理(ARG:0 = 1なら逆調教）
;-------------------------------------------------
@DECIDE_YOTOGI_MEMBER(ARG:0)
LOCAL:1 = 1
FOR LOCAL:0, 0, CHARANUM
	IF LOCAL:0 != MASTER && CFLAG:(LOCAL:0):閨に呼ぶで選択中
		CFLAG:(LOCAL:0):調教参加フラグ  = 1
		LOCAL:1 = 0
		CFLAG:(LOCAL:0):閨に呼ぶで選択中 = 0
	ENDIF
NEXT
IF LOCAL:1
	;参加キャラがいないなら処理せず0を返す
	RETURN 0
ENDIF

IF ARG:0
	FLAG:調教モード = 5
	FLAG:閨逆調教 = 1
ELSE
	FLAG:調教モード = 1
ENDIF

;ウフフフラグをONに
FLAG:ウフフフラグ = 1

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

;-------------------------------------------------
;「閨に呼ぶ」の選択メンバーのリセット
;-------------------------------------------------
@RESET_YOTOGI_MEMBER
FOR LOCAL:0, 0, CHARANUM
	IF LOCAL:0 != MASTER && CFLAG:(LOCAL:0):閨に呼ぶで選択中
		CFLAG:(LOCAL:0):閨に呼ぶで選択中 = 0
	ENDIF
NEXT
RETURN 0


code:
;-------------------------------------------------
;「居住区」の名称
;-------------------------------------------------
@SHOP_LIFE_NAME14
RESULTS:0 '= "領内活動"

;-------------------------------------------------
;「居住区」の選択可否
;-------------------------------------------------
@SHOP_LIFE_CHECK14
SIF CFLAG:MASTER:捕虜先
    RETURN 0
RETURN 1
;-------------------------------------------------
;「居住区」の左カラムメニューの入力処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY14
FLAG:拠点フェイズページ = 1
FLAG:夜這い = 0
RETURN 0

;-------------------------------------------------
;「居住区」の右カラム表示処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SHOW14
#DIMS DYNAMIC _LIST_MEMBER
#DIM DYNAMIC CHARA_ID

SIF FLAG:居住区初回呼出フラグ == 0
    CALL HOUSING_MODE_INIT_STOCK

CALL COLOR_PRINT(@"%"★活動開始", 20, LEFT%", カラー_白)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL
;標準的なキャラリストとページ移動
PRINTBUTTON @"%"[一日を始める]", 20, LEFT%", 0
CALL COLOR_PRINT("領地内で活動したり同居人と交流します", カラー_注釈)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_PRINTL
PRINTBUTTON @"%"[クエスト]", 20, LEFT%", 3
CALL COLOR_PRINT("探索や依頼の受注など、様々な冒険を行います", カラー_注釈)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_PRINTL
CALL COLOR_PRINT(@"◇ 参加可能なキャラ ◇", カラー_注釈)
CALL COLUMN_RIGHT_PRINTL

;キャラクターの一覧を取得
CALL GET_MEMBER_LIST
_LIST_MEMBER = %RESULTS%
FOR LOCAL, 0, LIST_COUNT(_LIST_MEMBER)
    CHARA_ID = TOINT(LIST_GET(_LIST_MEMBER, LOCAL))
    ;交流に参加可能か詳細チェック
    CALL HOUSING_MODE_CHECK_CHARA_JOINABLE(CHARA_ID)
    SIF RESULT == 0
        CONTINUE
    CALL COLOR_PRINT(@"[%SNAME(CHARA_ID)%]  ", CFLAG:CHARA_ID:交流除外 ? カラー_選択不可 # カラー_白)
    SIF (LOCAL + 1) % 8 == 0
        CALL COLUMN_RIGHT_PRINTL
NEXT

CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_PRINTL
CALLF TAG_PRINT("@B:4@[活動から除外するキャラ]@/B@", 4)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_PRINTL
PRINTBUTTON @"%"[領地の手入れ]", 20, LEFT%", 1
CALL COLOR_PRINT("土地の開拓や建物の建造、家具の配置を行います", カラー_注釈)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_PRINTL
PRINTBUTTON @"%"[クラフト]", 20, LEFT%", 2
CALL COLOR_PRINT("素材から新たな道具や建物を生み出します", カラー_注釈)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_CLEAR
RETURN

;-------------------------------------------------
;「あてがう」の右カラムボタン入力処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SUB14(ARG:0)
;このメンバーで決定
SELECTCASE ARG:0
    CASE 0
        CALL FL_PLAYSE("Step_1.mp3")
        CALL HOUSING_MODE_START
    CASE 1
        CALL HOUSING_EDIT_MODE_MAIN
    CASE 2
        CALL HO_EDIT_CRAFT_MENU
    CASE 3
        CALL QST_SELECT_QUEST
    CASE 4
        PRINTL
        CALL SINGLE_DRAWLINE
        CALLF TAG_PRINT(@"領内活動に@C:{カラー_黄}@参加させない@/C@キャラを選択できます", 1)
        CALL SINGLE_DRAWLINE
        VARSET SELECTED_CHARA
        FOR LOCAL, 0, CHARANUM
            IF CFLAG:LOCAL:交流除外
                SELECTED_CHARA:LOCAL = 1
            ENDIF
        NEXT
        CALL SELECT_CHARA_LIST_MULTI_ONLY_LOGIC_SLG(99, "領内活動", "領内活動")
        CVARSET CFLAG, GETNUM(CFLAG, "交流除外") , 0
        SIF !SELECTED_CHARA_NUM
            RETURN 0
        FOR LOCAL, 0, SELECTED_CHARA_NUM
            CFLAG:(SELECTED_CHARA:LOCAL):交流除外 = 1
        NEXT
    CASEELSE
        RETURN 0
ENDSELECT

@SELECT_CHARA_LIST_SHOW_LOGIC_領内活動(CHARA_ID)
#DIM CHARA_ID
SIF CHARA_ID == MASTER
    RETURN 0
RETURN CFLAG:(CHARA_ID):所属 == 所属_プレイヤー || (CFLAG:(CHARA_ID):所属 == 所属_プレイヤー)

@SELECT_CHARA_LIST_SELECT_LOGIC_領内活動(CHARA_ID)
#DIM CHARA_ID
CALL SELECT_CHARA_LIST_SHOW_LOGIC_領内活動(CHARA_ID)
RETURN RESULT

;-------------------------------------------------
;「ハウジングモード」
;-------------------------------------------------
@HOUSING_MODE_START
#DIM CHARA_ID
#DIMS _LIST_MEMBER

;交流に参加可能なキャラが一人もいない場合はハウジングモードを開始しない
LOCAL:1 = 0
;交流に参加するキャラクターの一覧を取得
CALL GET_MEMBER_LIST
_LIST_MEMBER = %RESULTS%
FOR LOCAL, 0, LIST_COUNT(RESULTS)
    CHARA_ID = TOINT(LIST_GET(_LIST_MEMBER, LOCAL))
    ;交流除外フラグが立っているなら処理しない
    SIF CFLAG:CHARA_ID:交流除外
        CONTINUE
    ;交流に参加可能か詳細チェック
    CALL HOUSING_MODE_CHECK_CHARA_JOINABLE(CHARA_ID)
    SIF RESULT == 0
        CONTINUE
    LOCAL:1 ++
NEXT
IF LOCAL:1 > 99
    CALL COLOR_PRINTL("交流に参加可能させるキャラクターが多すぎます", カラー_注意)
    CALL COLOR_PRINTW("[活動から除外するキャラ]から参加メンバーを99人以下にしてください", カラー_注意)
    RETURN
ENDIF

FLAG:調教モード = 調教_居住区
FLAG:ウフフフラグ = 0
FLAG:ハウジングモード = 1
CALL CLEAR_MPLY()
CALL CLEAR_MTAR()

;マップに登場するキャラを初期化
CALL HO_INIT_DATA
;内部的には分で扱う。７時開始。
HO_TIME = 420

;全行動回数を消費。START_TRAIN_COMMON内部でもSHOP_TIMEが+1されるため-1で相殺
SHOP_TIME += CALC_SHOP_TIME() - SHOP_TIME - 1
CALL START_TRAIN_COMMON

;-------------------------------------------------
;キャラクターが参加可能か確認
;-------------------------------------------------
@HOUSING_MODE_CHECK_CHARA_JOINABLE(CHARA_ID)
#DIM CHARA_ID
IF CFLAG:(CHARA_ID):所属 != CFLAG:MASTER:所属 && CHARA_ID != MASTER
    IF CFLAG:(CHARA_ID):捕虜先 != CFLAG:MASTER:所属
        RETURN 0
    ENDIF
ENDIF
RETURN 1

;-------------------------------------------------
;居住区の初回呼出処理
;-------------------------------------------------
@HOUSING_MODE_INIT_STOCK
;居住区モード初回呼出時に、ルームとモジュールの初期在庫を追加する
;;初期で追加配置可能なルーム
;廊下
HO_ROOM_STOCK:7 = 1
;貨物室
HO_ROOM_STOCK:8 = 1
;医務室
HO_ROOM_STOCK:9 = 1
;;初期で追加配置可能なモジュール
;ソファ
HO_MODULE_STOCK:2 = 2
;トイレ
HO_MODULE_STOCK:9 = 1
;カーテン付きベッド
HO_MODULE_STOCK:10 = 1
;ちゃぶ台
HO_MODULE_STOCK:11 = 1
;貨物コンテナ
HO_MODULE_STOCK:12 = 1
FLAG:居住区初回呼出フラグ = 1


code:
;-------------------------------------------------
;「クラフト」の処理
;-------------------------------------------------
@HOUSING_CRAFT_MODE_MAIN
#DIM FIRST_LINE_ITEM_MAIN
#DIM INPUT_RESULT
REDRAW 0
FIRST_LINE_ITEM_MAIN = LINECOUNT

WHILE 1
	CALL HOUSING_CRAFT_PRINT_HEADER
	CALL HOUSING_CRAFT_PRINT_STOCK
	CALL HOUSING_CRAFT_PRINT_ROOM_OPTION
	CALL HOUSING_CRAFT_PRINT_MODULE_OPTION
	IF INPUT_RESULT >= 100000 && INPUT_RESULT < 200000
		CALL HOUSING_CRAFT_PRINT_ROOM_CRAFTING_MESSAGE(INPUT_RESULT)
	ELSEIF INPUT_RESULT >= 200000 && INPUT_RESULT < 300000
		CALL HOUSING_CRAFT_PRINT_MODULE_CRAFTING_MESSAGE(INPUT_RESULT)
	ENDIF
	CALL HOUSING_CRAFT_PRINT_FOOTER
	CALL HOUSING_CRAFT_INPUT
	INPUT_RESULT = RESULT
	SIF INPUT_RESULT == -1
		BREAK
	CLEARLINE LINECOUNT - FIRST_LINE_ITEM_MAIN
WEND

;-------------------------------------------------
;ヘッダー
;-------------------------------------------------
@HOUSING_CRAFT_PRINT_HEADER
CALL SINGLE_DRAWLINE
PRINTPLAIN
CALLF TAG_PRINT(@"@C:{カラー_白}@クラフトする部屋・設備を選択　@/C@", 0)
IF FLAG:ハウジングモード
	CALLF TAG_PRINT(@"@C:{カラー_注釈}@※エリア・設備の編集は[EDIT]、または領内活動終了後に[領地の手入れ]より行えます@/C@", 0)
ENDIF
PRINTL
CALL SINGLE_DRAWLINE
;-------------------------------------------------
;フッター
;-------------------------------------------------
@HOUSING_CRAFT_PRINT_FOOTER
CALL SINGLE_DRAWLINE("-",カラー_灰色)
CALLF TAG_PRINT(@"@B:999999@[戻る]@/B@", 4)

;-------------------------------------------------
;入力受付
;-------------------------------------------------
@HOUSING_CRAFT_INPUT
ONEINPUT
;アイテム選択ボタン押下
IF RESULT >= 100000 && RESULT < 300000
	RETURN RESULT
ELSEIF RESULT >= 300000 && RESULT < 400000
	CALL HOUSING_CRAFT_EXEC_ROOM_CRAFT(RESULT)
ELSEIF RESULT >= 400000 && RESULT < 500000
	CALL HOUSING_CRAFT_EXEC_MODULE_CRAFT(RESULT)
	;戻るボタン押下
ELSEIF RESULT == 999999
	RETURN -1
ENDIF

;-------------------------------------------------
;所持アイテム表示
;-------------------------------------------------
@HOUSING_CRAFT_PRINT_STOCK
CALL COLOR_PRINTL(" 所持 ", カラー_注釈, "金:", カラー_選択不可, @"%NUM_FORMAT(MONEY)%", カラー_選択中)
LOCAL:1 = 999
CALL COLOR_PRINT(" エリア", カラー_注釈)
FOR LOCAL:0, 0, HO_MAX_ROOMTYPE
	IF HO_ROOM_STOCK:(LOCAL:0) > 0
		IF LOCAL:1 > 70
			LOCAL:1 = 0
			PRINTL
			PRINTFORM %TOSTR_SPACE(8)%
		ENDIF
		CALL HO_GET_ROOM_DATA(LOCAL:0, "ROOM_NAME")
		LOCALS:0 = %RESULTS%
		LOCALS:0 = %LOCALS:0% ×{HO_ROOM_STOCK:(LOCAL:0)}
		LOCAL:1 += STRLENS(LOCALS:0) + 2
		PRINTFORM %LOCALS:0%
	ENDIF
NEXT
PRINTL
LOCAL:1 = 999
CALL COLOR_PRINT(@"%" 設備", 8, LEFT%", カラー_注釈)
FOR LOCAL:0, 0, HO_MAX_MODULETYPE
	IF HO_MODULE_STOCK:(LOCAL:0) > 0
		IF LOCAL:1 > 80
			LOCAL:1 = 0
			PRINTL
			PRINTFORM %TOSTR_SPACE(8)%
		ENDIF
		CALL HO_GET_MODULE_DATA(LOCAL:0, "MODULE_NAME")
		LOCALS:0 = %RESULTS%
		LOCALS:0 = %LOCALS:0% ×{HO_MODULE_STOCK:(LOCAL:0)}
		LOCAL:1 += STRLENS(LOCALS:0) + 2
		PRINTFORM %LOCALS:0%
	ENDIF
NEXT
PRINTL
CALL SINGLE_DRAWLINE("-",カラー_灰色)

;-------------------------------------------------
;ルームの作成候補
;-------------------------------------------------
@HOUSING_CRAFT_PRINT_ROOM_OPTION
#DIM DYNAMIC FCOL
#DIM CONST BTN_ID = 100000
VARSET LOCAL

CALL COLOR_PRINT(" エリアの作成　　 ", カラー_注釈, "選択後に説明表示", カラー_選択不可)
PRINTL
PRINTFORM %TOSTR_SPACE(8)%
FOR LOCAL:0, 0, HO_MAX_ROOMTYPE
	IF LOCAL:1 > 0 && LOCAL:1 % 4 == 0 && LOCAL:1 != LOCAL:2
		PRINTL
		PRINTFORM %TOSTR_SPACE(8)%
		LOCAL:2 = LOCAL:1
	ENDIF
	TRYCCALLFORM HO_ROOM_IS_CRAFTABLE_{LOCAL:0}
		IF RESULT
			LOCAL:1 ++
			CALL HO_GET_ROOM_DATA(LOCAL:0, "ROOM_NAME")
			LOCALS:0 '= @"[%RESULTS, MAX_CHARANAME_LENGTH, LEFT%]"
			CALLF TAG_PRINT(@"@B:{(LOCAL:0) + BTN_ID}@%LOCALS:0%  @/B@", 4)
		ENDIF
	CATCH
		CONTINUE
	ENDCATCH
NEXT
PRINTL
PRINTL
RETURN

;-------------------------------------------------
;モジュールの作成候補
;-------------------------------------------------
@HOUSING_CRAFT_PRINT_MODULE_OPTION
#DIM DYNAMIC FCOL
#DIM CONST BTN_ID = 200000
VARSET LOCAL

CALL COLOR_PRINT(" 設備の作成 ", カラー_注釈)
PRINTL
PRINTFORM %TOSTR_SPACE(8)%
FOR LOCAL:0, 0, HO_MAX_MODULETYPE
	IF LOCAL:1 > 0 && LOCAL:1 % 4 == 0 && LOCAL:1 != LOCAL:2
		PRINTL
		PRINTFORM %TOSTR_SPACE(8)%
		LOCAL:2 = LOCAL:1
	ENDIF
	TRYCCALLFORM HO_MODULE_IS_CRAFTABLE_{LOCAL:0}
		IF RESULT
			LOCAL:1 ++
			CALL HO_GET_MODULE_DATA(LOCAL:0, "MODULE_NAME")
			LOCALS:0 '= @"[%TAG_PRINT_SHAPE(TOHALF(RESULTS), MAX_CHARANAME_LENGTH, 1, 0)%]"
			CALLF TAG_PRINT(@"@B:{(LOCAL:0) + BTN_ID}@%LOCALS:0%  @/B@", 4)
		ENDIF
	CATCH
		CONTINUE
	ENDCATCH
NEXT
PRINTL
PRINTL
RETURN
CALL SINGLE_DRAWLINE("-",カラー_灰色)

;-------------------------------------------------
;作成対象ルームの詳細説明
;-------------------------------------------------
@HOUSING_CRAFT_PRINT_ROOM_CRAFTING_MESSAGE(INPUT_RESULT)
#DIM INPUT_RESULT
#DIM  DYNAMIC ROOM_ID
#DIM  DYNAMIC MATERIAL_NEEDS, ITEM_LENGTH
#DIM  DYNAMIC HO_PRICE
#DIMS DYNAMIC ROOM_NAME
#DIMS DYNAMIC RESOURCE_NAME
#DIMS DYNAMIC _LIST_ROOM_TAG

ROOM_ID = INPUT_RESULT - 100000
CALL HO_GET_ROOM_DATA(ROOM_ID, "ROOM_NAME")
ROOM_NAME = %RESULTS%
CALL HO_GET_ROOM_DATA(ROOM_ID, "ROOM_TAG")
_LIST_ROOM_TAG = %RESULTS%

CALL SINGLE_DRAWLINE("-",カラー_灰色)
PRINTFORM  ★ %ROOM_NAME, MAX_CHARANAME_LENGTH, LEFT%
SETCOLOR カラー_注釈
PRINTFORM ルームタグ:
FOR LOCAL, 0, LIST_COUNT(_LIST_ROOM_TAG)
	LOCALS = %LIST_GET(_LIST_ROOM_TAG, LOCAL)%
	PRINTFORM <%LOCALS%>
NEXT
PRINTL
CALL SINGLE_DRAWLINE("-",カラー_灰色)
RESETCOLOR
PRINTFORM %TOSTR_SPACE(4)%
PRINTFORM 作成に必要なリソース
PRINTL

TRYCCALLFORM HO_ROOM_CRAFT_RESOURCE_{ROOM_ID}(MATERIAL_NEEDS)
	HO_PRICE = RESULT
	PRINTFORM %TOSTR_SPACE(8)%
	CALL COLOR_PRINT(@"%"資金",MAX_CHARANAME_LENGTH, LEFT%", カラー_注釈)
	CALL COLOR_PRINT(@"%NUM_FORMAT(HO_PRICE)%", カラー_選択中)
	PRINTL
	FOR LOCAL, 0, VARSIZE("MATERIAL_NEEDS")
		IF MATERIAL_NEEDS:LOCAL > 0
			CALL GET_ITEM_NAME(LOCAL)
			RESOURCE_NAME = %RESULTS%
			PRINTFORM %TOSTR_SPACE(8)%
			CALL COLOR_PRINT(@"%RESOURCE_NAME, MAX_CHARANAME_LENGTH, LEFT%", カラー_注釈)
			CALL COLOR_PRINT(@"%NUM_FORMAT(MATERIAL_NEEDS:LOCAL), 8, LEFT%", カラー_選択中)
			RESULT = GET_ITEM_STOCK(LOCAL)
			CALL COLOR_PRINT(@"(所持数:{RESULT})", カラー_選択不可)
			PRINTL
		ENDIF
	NEXT
	CALL SINGLE_DRAWLINE("-",カラー_灰色)
	VARSET RESULTS
	VARSET LOCALS
	;とりあえず10行まで
	TRYCALLFORM HO_ROOM_DESC_{ROOM_ID}
	FOR LOCAL, 0 , 10
		LOCALS:LOCAL = %RESULTS:LOCAL%
	NEXT
	FOR LOCAL, 0 , 10
		SIF LOCALS:LOCAL == ""
			BREAK
		PRINTFORM %TOSTR_SPACE(8)%
		CALL COLOR_PRINT(LOCALS:LOCAL, カラー_注釈)
		PRINTL
	NEXT
	PRINTL
	PRINTFORM %TOSTR_SPACE(4)%
	CALLF TAG_PRINT(@"@B:{ROOM_ID + 300000}@[これを作成する]@/B@", 5)
CATCH
	RETURN
ENDCATCH
RETURN

;-------------------------------------------------
;作成対象モジュールの詳細説明
;-------------------------------------------------
@HOUSING_CRAFT_PRINT_MODULE_CRAFTING_MESSAGE(INPUT_RESULT)
#DIM INPUT_RESULT
#DIM  DYNAMIC MODULE_ID
#DIM  DYNAMIC MATERIAL_NEEDS, ITEM_LENGTH
#DIM  DYNAMIC HO_PRICE
#DIMS DYNAMIC MODULE_NAME
#DIMS DYNAMIC RESOURCE_NAME
#DIMS DYNAMIC _LIST_制限リスト

MODULE_ID = INPUT_RESULT - 200000
CALL HO_GET_MODULE_DATA(MODULE_ID, "MODULE_NAME")
MODULE_NAME = %RESULTS%
CALL HO_GET_MODULE_DATA(MODULE_ID, "制限")
_LIST_制限リスト = %RESULTS%

CALL SINGLE_DRAWLINE("-",カラー_灰色)
PRINTFORM  ★ %MODULE_NAME, MAX_CHARANAME_LENGTH, LEFT%
SETCOLOR カラー_注釈
PRINTFORM 設置可能なルームタグ:
FOR LOCAL, 0, LIST_COUNT(_LIST_制限リスト)
	LOCALS = %LIST_GET(_LIST_制限リスト, LOCAL)%
	PRINTFORM <%LOCALS%>
NEXT
PRINTL
CALL SINGLE_DRAWLINE("-",カラー_灰色)
RESETCOLOR
PRINTFORM %TOSTR_SPACE(4)%
PRINTFORM 作成に必要なリソース
PRINTL

TRYCCALLFORM HO_MODULE_CRAFT_RESOURCE_{MODULE_ID}(MATERIAL_NEEDS)
	HO_PRICE = RESULT
	PRINTFORM %TOSTR_SPACE(8)%
	CALL COLOR_PRINT(@"%"資金",MAX_CHARANAME_LENGTH, LEFT%", カラー_注釈)
	CALL COLOR_PRINT(@"%NUM_FORMAT(HO_PRICE)%", カラー_選択中)
	PRINTL
	FOR LOCAL, 0, VARSIZE("MATERIAL_NEEDS")
		IF MATERIAL_NEEDS:LOCAL > 0
			CALL GET_ITEM_NAME(LOCAL)
			RESOURCE_NAME = %RESULTS%
			PRINTFORM %TOSTR_SPACE(8)%
			CALL COLOR_PRINT(@"%RESOURCE_NAME, MAX_CHARANAME_LENGTH, LEFT%", カラー_注釈)
			CALL COLOR_PRINT(@"%NUM_FORMAT(MATERIAL_NEEDS:LOCAL), 8, LEFT%", カラー_選択中)
			RESULT = GET_ITEM_STOCK(LOCAL)
			CALL COLOR_PRINT(@"(所持数:{RESULT})", カラー_選択不可)
			PRINTL
		ENDIF
	NEXT
	CALL SINGLE_DRAWLINE("-",カラー_灰色)
	VARSET RESULTS
	VARSET LOCALS
	;とりあえず10行まで
	TRYCALLFORM HO_MODULE_DESC_{MODULE_ID}
	FOR LOCAL, 0 , 10
		LOCALS:LOCAL = %RESULTS:LOCAL%
	NEXT
	FOR LOCAL, 0 , 10
		SIF LOCALS:LOCAL == ""
			BREAK
		PRINTFORM %TOSTR_SPACE(8)%
		CALL COLOR_PRINT(LOCALS:LOCAL, カラー_注釈)
		PRINTL
	NEXT
	PRINTL
	PRINTFORM %TOSTR_SPACE(4)%
	CALLF TAG_PRINT(@"@B:{MODULE_ID + 400000}@[これを作成する]@/B@", 5)
CATCH
	RETURN
ENDCATCH
RETURN

;-------------------------------------------------
;ルーム作成処理実行
;-------------------------------------------------
@HOUSING_CRAFT_EXEC_ROOM_CRAFT(INPUT_RESULT)
#DIM INPUT_RESULT
#DIM  DYNAMIC ROOM_ID
#DIM  DYNAMIC MATERIAL_NEEDS, ITEM_LENGTH
#DIM  DYNAMIC HO_PRICE
#DIM  DYNAMIC ERR_FLG
#DIMS DYNAMIC ROOM_NAME
#DIMS DYNAMIC RESOURCE_NAME
#DIMS DYNAMIC _LIST_ROOM_TAG

ROOM_ID = INPUT_RESULT - 300000
CALL HO_GET_ROOM_DATA(ROOM_ID, "ROOM_NAME")
ROOM_NAME = %RESULTS%
CALL HO_GET_ROOM_DATA(ROOM_ID, "ROOM_TAG")
_LIST_ROOM_TAG = %RESULTS%

[IF_DEBUG]
CALL COLOR_PRINTL(@"デバッグ専用:無条件で追加しますか？", カラー_注意)
CALL ASK_YN()
IF !RESULT
	HO_ROOM_STOCK:ROOM_ID ++
	RETURN
ENDIF
[ENDIF]

;リソース量をチェックし問題なければ作成処理
TRYCCALLFORM HO_ROOM_CRAFT_RESOURCE_{ROOM_ID}(MATERIAL_NEEDS)
	HO_PRICE = RESULT
	IF MONEY < HO_PRICE
		CALL COLOR_PRINTL(@"所持金が不足しています", カラー_注意)
		ERR_FLG ++
	ENDIF
	FOR LOCAL, 0, VARSIZE("MATERIAL_NEEDS")
		IF MATERIAL_NEEDS:LOCAL > 0
			CALL GET_ITEM_NAME(LOCAL)
			RESOURCE_NAME = %RESULTS%
			RESULT = GET_ITEM_STOCK(LOCAL)
			IF RESULT < MATERIAL_NEEDS:LOCAL
				CALL COLOR_PRINTL(@"%RESOURCE_NAME%が不足しています", カラー_注意)
				ERR_FLG ++
			ENDIF
		ENDIF
	NEXT
	IF ERR_FLG == 0
		MONEY -= HO_PRICE
		FOR LOCAL, 0, VARSIZE("MATERIAL_NEEDS")
			IF MATERIAL_NEEDS:LOCAL > 0
				CALL CHANGE_ITEM_STOCK(LOCAL, (MATERIAL_NEEDS:LOCAL) * -1)
			ENDIF
		NEXT
		HO_ROOM_STOCK:ROOM_ID ++
		CALL COLOR_PRINTW(@"%ROOM_NAME%を作成しました", カラー_注意)
		RETURN
	ELSE
		WAIT
		RETURN
	ENDIF
CATCH
	RETURN
ENDCATCH

RETURN

;-------------------------------------------------
;モジュール作成処理実行
;-------------------------------------------------
@HOUSING_CRAFT_EXEC_MODULE_CRAFT(INPUT_RESULT)
#DIM INPUT_RESULT
#DIM  DYNAMIC MODULE_ID
#DIM  DYNAMIC MATERIAL_NEEDS, ITEM_LENGTH
#DIM  DYNAMIC HO_PRICE
#DIM  DYNAMIC ERR_FLG
#DIMS DYNAMIC MODULE_NAME
#DIMS DYNAMIC RESOURCE_NAME
#DIMS DYNAMIC _LIST_MODULE_TAG

MODULE_ID = INPUT_RESULT - 400000
CALL HO_GET_MODULE_DATA(MODULE_ID, "MODULE_NAME")
MODULE_NAME = %RESULTS%
CALL HO_GET_MODULE_DATA(MODULE_ID, "MODULE_TAG")
_LIST_MODULE_TAG = %RESULTS%

[IF_DEBUG]
CALL COLOR_PRINTL(@"デバッグ専用:無条件で追加しますか？", カラー_注意)
CALL ASK_YN()
IF !RESULT
	HO_MODULE_STOCK:MODULE_ID ++
	RETURN
ENDIF
[ENDIF]

;リソース量をチェックし問題なければ作成処理
TRYCCALLFORM HO_MODULE_CRAFT_RESOURCE_{MODULE_ID}(MATERIAL_NEEDS)
	HO_PRICE = RESULT
	IF MONEY < HO_PRICE
		CALL COLOR_PRINTL(@"所持金が不足しています", カラー_注意)
		ERR_FLG ++
	ENDIF
	FOR LOCAL, 0, VARSIZE("MATERIAL_NEEDS")
		IF MATERIAL_NEEDS:LOCAL > 0
			CALL GET_ITEM_NAME(LOCAL)
			RESOURCE_NAME = %RESULTS%
			RESULT = GET_ITEM_STOCK(LOCAL)
			IF RESULT < MATERIAL_NEEDS:LOCAL
				CALL COLOR_PRINTL(@"%RESOURCE_NAME%が不足しています", カラー_注意)
				ERR_FLG ++
			ENDIF
		ENDIF
	NEXT
	IF ERR_FLG == 0
		MONEY -= HO_PRICE
		FOR LOCAL, 0, VARSIZE("MATERIAL_NEEDS")
			IF MATERIAL_NEEDS:LOCAL > 0
				CALL CHANGE_ITEM_STOCK(LOCAL, (MATERIAL_NEEDS:LOCAL) * -1)
			ENDIF
		NEXT
		HO_MODULE_STOCK:MODULE_ID ++
		CALL COLOR_PRINTW(@"%MODULE_NAME%を作成しました", カラー_注意)
		RETURN
	ELSE
		WAIT
		RETURN
	ENDIF
CATCH
	RETURN
ENDCATCH
RETURN


code:
;-------------------------------------------------
;「夜這いする」の名称
;-------------------------------------------------
@SHOP_LIFE_NAME21
RESULTS:0 '= "夜這いする"

;-------------------------------------------------
;「夜這いする」の選択可否
;-------------------------------------------------
@SHOP_LIFE_CHECK21
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
RETURN 1

;-------------------------------------------------
;「夜這いする」の選択可能キャラ存在判定
;-------------------------------------------------
@SHOP_LIFE_CHECKCHARA21(ARG:0)
;隣接している都市がある
IF !CFLAG:MASTER:所属 || TMP_COUNTRY_IS_NEIBORING:(CFLAG:MASTER:所属):(CFLAG:(ARG:0):所属) || CFLAG:(ARG:0):特殊状態 == 特殊状態_放浪
	;非主人公、捕虜ではない、別勢力、どこかの勢力に所属している（放浪、未登場、死亡済みではない）
	{
		IF ARG:0 != MASTER &&
			!CFLAG:(ARG:0):捕虜先 &&
			CFLAG:MASTER:所属 != CFLAG:(ARG:0):所属 &&
			(CFLAG:(ARG:0):所属 || CFLAG:(ARG:0):特殊状態 == 特殊状態_放浪) &&
			!IS_SP_CHARA(ARG:0) &&
			CFLAG:(ARG:0):行動不能状態 != 行動不能_子供
	}
		SIF YOBAI_ABLE(ARG:0)
			RETURN CHECK91(ARG:0, 2, 1)
		RETURN 2
	ENDIF
	RETURN 0
ENDIF
RETURN 0

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

;-------------------------------------------------
;「夜這いする」の助手の選択可能キャラ存在判定
;-------------------------------------------------
@SHOP_LIFE_CHECKCHARA_SUB21(ARG:0)
;捕虜として捕まっている場合
IF CFLAG:(ARG:0):捕虜先
	;非主人公、通常状態または育児中、合意、主人公勢力の捕虜かつ軟禁中
	RETURN CHECK91(ARG:0, 2, ARG:0 != MASTER && GROUPMATCH(CFLAG:(ARG:0):行動不能状態, 0, 2) && (TALENT:(ARG:0):合意 || TALENT:(ARG:0):親友) && CFLAG:(ARG:0):捕虜先 == CFLAG:MASTER:所属 && CFLAG:(ARG:0):軟禁中 == 1 && SHOP_LIFE_CHECKCHARA_ZYOSYU(ARG:0) && CFLAG:(ARG:0):行動不能状態 != 行動不能_子供)
ELSE
	;捕虜でない、非主人公、通常状態または育児中、合意か親友ないし所属が特殊勢力なら対応する特殊勢力陥落素質持ち、同一勢力
	RETURN CHECK91(ARG:0, 2, ARG:0 != MASTER && GROUPMATCH(CFLAG:(ARG:0):行動不能状態, 0, 2) && (TALENT:(ARG:0):合意 || TALENT:(ARG:0):親友 || (IS_SP_COUNTRY(CFLAG:(ARG:0):所属) && GETBIT(TALENT:(ARG:0):特殊勢力陥落系, SP_COUNTRY_TO_CONST(CFLAG:(ARG:0):所属)))) && CFLAG:(ARG:0):所属 == CFLAG:MASTER:所属 && CFLAG:(ARG:0):所属 && SHOP_LIFE_CHECKCHARA_ZYOSYU(ARG:0) && CFLAG:(ARG:0):行動不能状態 != 行動不能_子供)
ENDIF

;-------------------------------------------------
;「夜這いする」の陥落/能力判定
;-------------------------------------------------
@YOBAI_ABLE(ARG)
#FUNCTION
LOCAL:1 = YOBAI_ZYOSYU_CALC_POINT(MASTER)
FOR LOCAL,1, CHARANUM
	SIF CFLAG:LOCAL:夜這いの助手
		LOCAL:1 += YOBAI_ZYOSYU_CALC_POINT(LOCAL)
NEXT
RETURNF LOCAL:1 >= YOBAI_TARGET_CALC_POINT(ARG)

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

;-------------------------------------------------
;「夜這いする」の能力判定用関数
;-------------------------------------------------
@YOBAI_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 * 2
SIF GET_COUNTRY_BOSS(CFLAG:(ARG:0):所属) == ARG:0
	RETURNF LOCAL * 7 / 2
RETURNF LOCAL * 3

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

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

;-------------------------------------------------
;「夜這いする」の右カラムキャラリスト２のボタン（関数未指定なら選択中色なし表示）
;-------------------------------------------------
@SHOP_LIFE_LIST2_BUTTON21(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_TOP21(ARG:0)
PRINTFORM P:{YOBAI_TARGET_CALC_POINT(ARG:0), 3, RIGHT}
CALL SHOP_LIFE_BUTTON_ADD_TOP_PRISONER(ARG:0)
RETURN RESULT

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

;-------------------------------------------------
;「夜這いする」の右カラム表示処理
;-------------------------------------------------
@SHOP_LIFE_EVENTBUY_SHOW21
CALL COLUMN_RIGHT_TITLE("対象者選択", "0", "1", "1+助手数", "0", "=身体+知識")
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

;２段組キャラリスト上とページ移動
;ここで判定前に追加条件として指定されていたTMP_COUNTRY_IS_NEIBORINGは
;SHOP_LIFE_CHECKCHARA内へ移動
CALL COLUMN_RIGHT_CHARALIST_TOP(1)
CALL COLUMN_RIGHT_PRINTL
CALL COLUMN_RIGHT_LINE
CALL COLUMN_RIGHT_PRINTL

;助手を数える
LOCAL:1 = 0
LOCAL:2 = YOBAI_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 += YOBAI_ZYOSYU_CALC_POINT(LOCAL)
		ENDIF
	ELSE
		;条件を満たしていなければ強制的にＯＦＦ
		CFLAG:(LOCAL:0):夜這いの助手 = 0
	ENDIF
NEXT

PRINTFORM 助手を最大{MIN(2, CALC_SHOP_TIME() - SHOP_TIME)}人まで連れて行く事が可能です
SIF LOCAL:1 >= MIN(2, CALC_SHOP_TIME() - SHOP_TIME)
	SETCOLOR カラー_オレンジ
PRINTFORM (現在{LOCAL:1}/{MIN(2, CALC_SHOP_TIME() - SHOP_TIME)}人)
RESETCOLOR

PRINTFORM  ポイント:{LOCAL:2}
PRINTFORM
PRINTBUTTON "[助手自動選択]", 1
PRINTFORM
PRINTBUTTON @"[%ZYOSYU_MODE()%]", 2
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_SUB21(ARG:0)
#DIM 候補値, MAX_CHARA_NUM
#DIM 候補, MAX_CHARA_NUM
#DIM 候補数
#DIM 助手数
VARSET 候補値, __INT_MIN__
VARSET 候補, -1
VARSET 候補数
VARSET 助手数
CVARSET CFLAG, GETNUM(CFLAG, "夜這いの助手"), 0

;最適メンバーの決定
IF ARG:0 == 1
	CVARSET CFLAG, GETNUM(CFLAG, "夜這いの助手"), 0
	FOR LOCAL:0, 1, CHARANUM
		;選択可能な条件を満たしているかどうかを判定
		TRYCALLFORM SHOP_LIFE_CHECKCHARA_SUB{FLAG:拠点フェイズ選択コマンド}(LOCAL:0)
		IF RESULT == 1
			候補:候補数 = LOCAL
			候補値:候補数 = YOBAI_ZYOSYU_CALC_POINT(LOCAL)
			候補数 ++
		ENDIF
	NEXT

	SIF 候補数 == 0
		RETURN 0

	WHILE 1
		LOCAL = FINDELEMENT(候補値, MAXARRAY(候補値), 0, 候補数)
		SIF 候補値:LOCAL == __INT_MIN__ || 候補:LOCAL == -1
			BREAK
		CFLAG:(候補:LOCAL):夜這いの助手 = 1

		候補値:LOCAL = __INT_MIN__
		候補:LOCAL = -1
		助手数 ++
		SIF 助手数 >= MIN(2, CALC_SHOP_TIME() - SHOP_TIME)
			BREAK
	WEND
ELSEIF ARG:0 == 2
	FLAG:助手フィルタ = ROUND_INCREMENT(FLAG:助手フィルタ, 0, 3)
ENDIF
RETURN 0

;-------------------------------------------------
;「夜這いする」のリスト１入力処理
;-------------------------------------------------
@SHOP_LIFE_USERSHOP21(ARG:0)
#DIM 好感度他減少

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

$SHOW_LOOP_INFO_Y

;対象キャラの情報を表示
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))

		;所属があれば君主からも嫌われる
		IF CFLAG:(ARG:0):所属
			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))

		;所属がない（放浪中）の場合は全勢力から嫌われる
		ELSE
			FOR LOCAL, 0, MAX_COUNTRY
				SIF !IS_COUNTRY(LOCAL)
					CONTINUE
				SIF CFLAG:MASTER:所属 == LOCAL
					CONTINUE
				CALL CHANGE_RELATION_C_TO_C(LOCAL, CFLAG:MASTER:所属, -50, 50)
			NEXT
		ENDIF
	ENDIF
	REDRAW 1
	RETURN 1
ENDIF
REDRAW 1

;-------------------------------------------------
;「夜這いする」のリスト２入力処理
;-------------------------------------------------
@SHOP_LIFE_USERSHOP_SUB21(ARG:0)
;参加キャラの数を数える
LOCAL:5 = 0
FOR LOCAL:0, 0, CHARANUM
	IF CFLAG:(LOCAL:0):夜這いの助手
		LOCAL:5 ++
	ENDIF
NEXT
IF CFLAG:(ARG:0):夜這いの助手 || LOCAL:5 < MIN(2, CALC_SHOP_TIME() - SHOP_TIME)
	;夜這い参加フラグを反転
	CFLAG:(ARG:0):夜這いの助手 = !CFLAG:(ARG:0):夜這いの助手
ENDIF
RETURN 0