code:
;-------------------------------------------------
; 領内活動内で発生するイベントの管理
;-------------------------------------------------
;-------------------------------------------------
; 領内活動開始時イベント
; 領内活動開始時に一度だけ @SHOW_STATUS から呼ばれる
;-------------------------------------------------
@HOUSING_START_EVENT()
#DIM DYNAMIC  CHARA_ID
#DIMS DYNAMIC LIST_CHARA
;抽選用定数
#DIM CONST イベントなし = 0
#DIM CONST モーニングコール_朝フェラ = 1
#DIM CONST モーニングコール_騎乗位 = 2
#DIM CONST モーニングコール_自慰 = 3
#DIM CONST モーニングコール_愛撫 = 4
#DIM CONST モーニングコール_Ｖ性交 = 5
#DIM CONST モーニングコール_Ａ性交 = 6
#DIM CONST モーニングコール_パイズリ = 7
#DIM CONST モーニングコール_耳舐め手コキ = 8

CALL HO_FIND_CHARA()
LIST_CHARA = %RESULTS%
CALL LIST_SHUFFLE(LIST_CHARA)

;最大3人分抽選
FOR LOCAL, 0, MIN(LIST_COUNT(LIST_CHARA), 3)
    CHARA_ID = TOINT(LIST_GET(LIST_CHARA, LOCAL))
    ;イベント抽選
    CALL RAND_WT_INIT()
    ;75%はイベントなし
    SIF RAND:100 < 75
        CONTINUE
    IF IS_FALLEN(CHARA_ID)
        SIF IS_NASTY(CHARA_ID, 素質_淫乱_精飲中毒) && HAS_PENIS(MASTER)
            CALL RAND_WT_SET(モーニングコール_朝フェラ, 20)
        SIF (IS_NASTY(CHARA_ID, 素質_淫乱_生ハメ依存) || IS_NASTY(CHARA_ID, 素質_淫乱_孕みたがり)) && HAS_VAGINA(CHARA_ID, 1) && HAS_PENIS(MASTER, 1)
            CALL RAND_WT_SET(モーニングコール_騎乗位, 20)
        SIF IS_NASTY(CHARA_ID, 素質_淫乱_自慰狂い)
            CALL RAND_WT_SET(モーニングコール_自慰, 20)
        SIF IS_NASTY(CHARA_ID, 素質_淫乱_淫乳) && HAS_PENIS(MASTER)
            CALL RAND_WT_SET(モーニングコール_パイズリ, 20)
        IF IS_NASTY(CHARA_ID, 素質_淫乱_淫乱) && IS_LOVER(CHARA_ID)
            CALL RAND_WT_SET(モーニングコール_愛撫, 20)
            IF HAS_PENIS(MASTER)
                CALL RAND_WT_SET(モーニングコール_耳舐め手コキ, 20)
            ENDIF
            IF IS_NASTY(CHARA_ID, 素質_淫乱_射精狂い) && HAS_PENIS(CHARA_ID, 1)
                IF HAS_VAGINA(MASTER, 1)
                    CALL RAND_WT_SET(モーニングコール_Ｖ性交, 20)
                ELSE
                    CALL RAND_WT_SET(モーニングコール_Ａ性交, 20)
                ENDIF
            ENDIF
        ENDIF
    ENDIF
    SELECTCASE RAND_WT_RESULT()
        CASE モーニングコール_朝フェラ
            TSTR:モーニングコール種別 '= "朝フェラ"
            CALL HO_START_EVENT_モーニングコール(CHARA_ID)
            RETURN RESULT
        CASE モーニングコール_騎乗位
            TSTR:モーニングコール種別 '= "騎乗位"
            CALL HO_START_EVENT_モーニングコール(CHARA_ID)
            RETURN RESULT
        CASE モーニングコール_自慰
            TSTR:モーニングコール種別 '= "自慰"
            CALL HO_START_EVENT_モーニングコール(CHARA_ID)
            RETURN RESULT
        CASE モーニングコール_愛撫
            TSTR:モーニングコール種別 '= "愛撫"
            CALL HO_START_EVENT_モーニングコール(CHARA_ID)
            RETURN RESULT
        CASE モーニングコール_Ｖ性交
            TSTR:モーニングコール種別 '= "Ｖ性交"
            CALL HO_START_EVENT_モーニングコール(CHARA_ID)
            RETURN RESULT
        CASE モーニングコール_Ａ性交
            TSTR:モーニングコール種別 '= "Ａ性交"
            CALL HO_START_EVENT_モーニングコール(CHARA_ID)
            RETURN RESULT
        CASE モーニングコール_パイズリ
            TSTR:モーニングコール種別 '= "パイズリ"
            CALL HO_START_EVENT_モーニングコール(CHARA_ID)
            RETURN RESULT
        CASE モーニングコール_耳舐め手コキ
            TSTR:モーニングコール種別 '= "耳舐め手コキ"
            CALL HO_START_EVENT_モーニングコール(CHARA_ID)
            RETURN RESULT
    ENDSELECT
NEXT
;イベント発生なし
RETURN 0

;-------------------------------------------------
; 朝フェライベント
; 陥落済みかつ<精飲中毒>持ちの仲間がいる
;-------------------------------------------------
@HO_START_EVENT_モーニングコール(SELECTED_CHARA_ID)
#DIM DYNAMIC SELECTED_CHARA_ID
#DIM DYNAMIC CHARA_IDX
#DIMS DYNAMIC LIST_MODULE
#DIMS DYNAMIC MODULE_NUM

;シチュエーションタグの設定
CALL ADD_SITU(TSTR:モーニングコール種別)

;タイトルコールと地の文
CALL PRINT_TITLE("Morning call", "Erotic event")
PRINTL
SELECTCASE TSTR:モーニングコール種別
    CASE "朝フェラ", "騎乗位"
        IF TSTR:モーニングコール種別 == "朝フェラ"
            PRINTFORMW 朝、%ANAME(MASTER)%は下腹部から伝わる生温かい快感で思わず目を覚す
            PRINTL
            CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%ONOMATOPE_PRESET("フェラ音長", 1, 0)%@/C@", 1)
            CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%ONOMATOPE_PRESET("フェラ音長", 1, 0)%@/C@", 1)
            PRINTW
            CALLF TAG_PRINT(@"寝惚け眼に快感の元を追うと、@C:{カラー_ピンク}@%ANAME(SELECTED_CHARA_ID)%@/C@が%ANAME(MASTER)%の股間に顔を埋め、一心不乱に口淫に耽っていた……", 1)
            PRINTL
            CALL DRAW_PORTRAIT(SELECTED_CHARA_ID, @"[目:細目(発情)][眉:リラックス][口:%S_R("笑い/舌出し(唾液)")%][OVL_表情:赤面][サイズ:180px][POS_X:200]",, 1)
            PRINTW
        ELSEIF TSTR:モーニングコール種別 == "騎乗位"
            PRINTFORMW 朝、%ANAME(MASTER)%は下腹部から伝わる生温かい快感で思わず目を覚す
            PRINTL
            CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%ONOMATOPE_PRESET("くちゅ音長", 1, 0)%@/C@", 1)
            CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%ONOMATOPE_PRESET("くちゅ音長", 1, 0)%@/C@", 1)
            PRINTW
            CALLF TAG_PRINT(@"寝惚け眼に快感の元を追うと、@C:{カラー_ピンク}@%ANAME(SELECTED_CHARA_ID)%@/C@が%ANAME(MASTER)%の身体に跨り、一心不乱に腰を振っていた……", 1)
            PRINTL
            CALL DRAW_PORTRAIT(SELECTED_CHARA_ID, @"[目:細目(発情)][眉:リラックス][口:%S_R("笑い/舌出し(唾液)")%][OVL_表情:赤面][サイズ:180px][POS_X:200]",, 1)
            PRINTW
        ENDIF
        ;口上イベント呼び出し
        CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール実行前")
        ;実行判定
        CALL ASK_YN("なすがまま", "拒絶する")
        IF RESULT
            CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール拒否")
            IF RESULT < 1
                CALLF ATTITUDE(SELECTED_CHARA_ID, "性行為")
                IF RESULT:1 > 0
                    PRINTFORMW %ANAME(MASTER)%が今はそんな気分にはなれないと拒絶すると、%ANAME(SELECTED_CHARA_ID)%は渋々部屋を立ち去っていった……
                ELSE
                    PRINTFORMW %ANAME(MASTER)%がそんな気分にはなれないと拒絶すると、%ANAME(SELECTED_CHARA_ID)%は何度も謝りながら部屋を去っていった……
                ENDIF
            ENDIF
            TSTR:モーニングコール種別 '= ""
            RETURN 0
        ENDIF
        PRINTFORML %ANAME(SELECTED_CHARA_ID)%は%ANAME(MASTER)%に蠱惑的な笑みを浮かべると、%語彙_ペニス()%への奉仕を再開した

    CASE "自慰"
        PRINTFORMW 朝、%ANAME(MASTER)%は耳元に響き続ける水音に目を覚ます
        PRINTL
        CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%ONOMATOPE_PRESET("くちゅ音長", 1, 0)%@/C@", 1)
        CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%ONOMATOPE_PRESET("くちゅ音長", 1, 0)%@/C@", 1)
        PRINTW
        CALLF TAG_PRINT(@"寝惚け眼に音の出所を追うと、@C:{カラー_ピンク}@%ANAME(SELECTED_CHARA_ID)%@/C@が%ANAME(MASTER)%の真横で一心不乱に自慰に耽っていた……", 1)
        CALL DRAW_PORTRAIT(SELECTED_CHARA_ID, @"[目:閉じ(緩)][眉:リラックス][口:%S_R("笑い/舌出し(唾液)")%][OVL_表情:赤面][サイズ:180px][POS_X:200]",, 1)
        PRINTW
        ;口上イベント呼び出し
        CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール実行前")
        ;実行判定
        CALL ASK_YN("続けさせる", "咎める")
        IF RESULT
            CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール拒否")
            IF RESULT < 1
                CALLF ATTITUDE(SELECTED_CHARA_ID, "性行為")
                IF RESULT:1 > 0
                    PRINTFORMW %ANAME(MASTER)%が今はゆっくり眠らせて欲しいと頼むと、%ANAME(SELECTED_CHARA_ID)%はばつが悪そうに部屋を立ち去っていった……
                ELSE
                    PRINTFORMW %ANAME(MASTER)%が今はゆっくり眠らせて欲しいと頼むと、%ANAME(SELECTED_CHARA_ID)%は顔を真っ赤にして部屋を走り去っていった……
                ENDIF
            ENDIF
            TSTR:モーニングコール種別 '= ""
            RETURN 0
        ENDIF
        PRINTFORML %ANAME(SELECTED_CHARA_ID)%は%ANAME(MASTER)%に羞恥交じりの笑みを浮かべ、再び自ら快楽に耽り始めた……

    CASE "愛撫"
        PRINTFORMW 朝、%ANAME(MASTER)%は身体を包む甘い快感に目を覚ます
        CALLF TAG_PRINT(@"寝惚け眼に快感の元を追うと、@C:{カラー_ピンク}@%ANAME(SELECTED_CHARA_ID)%@/C@が%ANAME(MASTER)%の傍に寄り添い、肌に指を這わせたり口づけを繰り返している……", 1)
        CALL DRAW_PORTRAIT(SELECTED_CHARA_ID, @"[目:閉じ(緩)][眉:リラックス][口:%S_R("笑い")%][OVL_表情:赤面][サイズ:180px][POS_X:200]",, 1)
        PRINTW
        ;口上イベント呼び出し
        CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール実行前")
        ;実行判定
        CALL ASK_YN("続けさせる", "咎める")
        IF RESULT
            CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール拒否")
            IF RESULT < 1
                CALLF ATTITUDE(SELECTED_CHARA_ID, "性行為")
                IF RESULT:1 > 0
                    PRINTFORMW %ANAME(MASTER)%が今はゆっくり眠らせて欲しいと頼むと、%ANAME(SELECTED_CHARA_ID)%はばつが悪そうに部屋を立ち去っていった……
                ELSE
                    PRINTFORMW %ANAME(MASTER)%が今はゆっくり眠らせて欲しいと頼むと、%ANAME(SELECTED_CHARA_ID)%は顔を真っ赤にして部屋を走り去っていった……
                ENDIF
            ENDIF
            TSTR:モーニングコール種別 '= ""
            RETURN 0
        ENDIF
        PRINTFORML %ANAME(SELECTED_CHARA_ID)%は%ANAME(MASTER)%に柔らかに微笑みかけると、慈しむように身体を撫でまわし始めた

    CASE "耳舐め手コキ"
        PRINTFORMW 朝、%ANAME(MASTER)%は下腹部と耳元からこみ上げる甘い快楽に目を覚ます
        CALLF TAG_PRINT(@"寝惚け眼に快感の元を追うと、@C:{カラー_ピンク}@%ANAME(SELECTED_CHARA_ID)%@/C@が%ANAME(MASTER)%の上体にぴっとりと身を寄せ、耳に舌を這わせながら%語彙_ペニス()%をまさぐっている……", 1)
        CALL DRAW_PORTRAIT(SELECTED_CHARA_ID, @"[目:閉じ(緩)][眉:リラックス][口:%S_R("笑い")%][OVL_表情:赤面][サイズ:180px][POS_X:200]",, 1)
        PRINTW
        ;口上イベント呼び出し
        CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール実行前")
        ;実行判定
        CALL ASK_YN("続けさせる", "咎める")
        IF RESULT
            CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール拒否")
            IF RESULT < 1
                CALLF ATTITUDE(SELECTED_CHARA_ID, "性行為")
                IF RESULT:1 > 0
                    PRINTFORMW %ANAME(MASTER)%が今はゆっくり眠らせて欲しいと頼むと、%ANAME(SELECTED_CHARA_ID)%はばつが悪そうに部屋を立ち去っていった……
                ELSE
                    PRINTFORMW %ANAME(MASTER)%が今はゆっくり眠らせて欲しいと頼むと、%ANAME(SELECTED_CHARA_ID)%は顔を真っ赤にして部屋を走り去っていった……
                ENDIF
            ENDIF
            TSTR:モーニングコール種別 '= ""
            RETURN 0
        ENDIF
        PRINTFORML %ANAME(SELECTED_CHARA_ID)%は%ANAME(MASTER)%の耳元に熱い吐息を吹きかけ、いっそう激しく%語彙_ペニス()%をまさぐり始めた……

    CASE "パイズリ"
        PRINTFORMW 朝、%ANAME(MASTER)%は下半身を包む柔和な感触に目を覚ます
        CALLF TAG_PRINT(@"寝惚け眼に快感の元を追うと、@C:{カラー_ピンク}@%ANAME(SELECTED_CHARA_ID)%@/C@が%ANAME(MASTER)%の%語彙_ペニス()%にぴったりと胸元を寄せあて、その胸を使って扱き上げている……", 1)
        CALL DRAW_PORTRAIT(SELECTED_CHARA_ID, @"[目:閉じ(緩)][眉:リラックス][口:%S_R("笑い")%][OVL_表情:赤面][サイズ:180px][POS_X:200]",, 1)
        PRINTW
        ;口上イベント呼び出し
        CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール実行前")
        ;実行判定
        CALL ASK_YN("続けさせる", "咎める")
        IF RESULT
            CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール拒否")
            IF RESULT < 1
                CALLF ATTITUDE(SELECTED_CHARA_ID, "性行為")
                IF RESULT:1 > 0
                    PRINTFORMW %ANAME(MASTER)%が今はゆっくり眠らせて欲しいと頼むと、%ANAME(SELECTED_CHARA_ID)%はばつが悪そうに部屋を立ち去っていった……
                ELSE
                    PRINTFORMW %ANAME(MASTER)%が今はゆっくり眠らせて欲しいと頼むと、%ANAME(SELECTED_CHARA_ID)%は顔を真っ赤にして部屋を走り去っていった……
                ENDIF
            ENDIF
            TSTR:モーニングコール種別 '= ""
            RETURN 0
        ENDIF
        PRINTFORML %ANAME(SELECTED_CHARA_ID)%は%ANAME(MASTER)%に上目遣いで微笑みかけると、慈しむように胸を寄せて%語彙_ペニス()%を擦りはじめた……

    CASE "Ｖ性交", "Ａ性交"
        PRINTFORMW 朝、%ANAME(MASTER)%は身体にのしかかる重みに目を覚ます
        CALLF TAG_PRINT(@"寝惚け眼に正体を探ると、@C:{カラー_ピンク}@%ANAME(SELECTED_CHARA_ID)%@/C@が%ANAME(MASTER)%にのしかかり、滾らせた%語彙_ペニス()%を押し付け行為に及ぼうとしている……", 1)
        CALL DRAW_PORTRAIT(SELECTED_CHARA_ID, @"[目:閉じ(緩)][眉:リラックス][口:%S_R("笑い")%][OVL_表情:赤面][サイズ:180px][POS_X:200]",, 1)
        PRINTW
        ;口上イベント呼び出し
        CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール実行前")
        ;実行判定
        CALL ASK_YN("気が付かないふりをする", "押しのける")
        IF RESULT
            CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール拒否")
            IF RESULT < 1
                CALLF ATTITUDE(SELECTED_CHARA_ID, "性行為")
                IF RESULT:1 > 0
                    PRINTFORMW %ANAME(MASTER)%がそんな気分では無いと払い除けると、%ANAME(SELECTED_CHARA_ID)%はばつが悪そうに部屋を立ち去っていった……
                ELSE
                    PRINTFORMW %ANAME(MASTER)%がそんな気分では無いと払い除けると、%ANAME(SELECTED_CHARA_ID)%は顔を赤らめ部屋を立ち去っていった……
                ENDIF
            ENDIF
            TSTR:モーニングコール種別 '= ""
            RETURN 0
        ENDIF
        PRINTFORML %ANAME(SELECTED_CHARA_ID)%は欲望のままに%ANAME(MASTER)%の身体を貪りはじめた
ENDSELECT

CALL HO_GET_CHARAIDX(SELECTED_CHARA_ID)
CHARA_IDX = RESULT
;対象キャラをあなたと同じ部屋に移動
CALL HO_SET_CHARADATA(CHARA_IDX, "ROOM_IDX", TOSTR(HO_MASTER現在地))
;モーニングコール担当を同行者としてマスターの位置に招待
CALL HO_MASTER_TRY_INVITE(SELECTED_CHARA_ID, 1)

SELECTCASE TSTR:モーニングコール種別
    CASE "朝フェラ"
        TFLAG:奉仕カテゴリ = 奉仕_手コキフェラ
        TFLAG:調教継続時間 = 60
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
        TCVAR:MASTER:被奉仕者フラグ = TFLAG:奉仕カテゴリ
    CASE "騎乗位"
        TFLAG:奉仕カテゴリ = 奉仕_騎乗位のみ
        IF !IS_NASTY(SELECTED_CHARA_ID, 素質_淫乱_尻穴狂い)
            COM_FORBIDDEN:SELECTED_CHARA_ID:(T_N("Ａ騎乗位")) = 1
            COM_FORBIDDEN:SELECTED_CHARA_ID:(T_N("Ａ騎乗位") + ADD_NUM_対象が実行) = 1
            COM_FORBIDDEN:SELECTED_CHARA_ID:(T_N("Ａ背面騎乗位")) = 1
            COM_FORBIDDEN:SELECTED_CHARA_ID:(T_N("Ａ背面騎乗位") + ADD_NUM_対象が実行) = 1
        ENDIF
        TFLAG:調教継続時間 = 90
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
        TCVAR:MASTER:被奉仕者フラグ = TFLAG:奉仕カテゴリ
    CASE "自慰"
        TFLAG:奉仕カテゴリ = 奉仕_自慰
        TFLAG:調教継続時間 = 60
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
        TCVAR:MASTER:被奉仕者フラグ = TFLAG:奉仕カテゴリ
    CASE "愛撫"
        TFLAG:奉仕カテゴリ = 奉仕_愛撫
        TFLAG:調教継続時間 = 60
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
        TCVAR:MASTER:被奉仕者フラグ = TFLAG:奉仕カテゴリ
    CASE "パイズリ"
        TFLAG:奉仕カテゴリ = 奉仕_パイズリ
        TFLAG:調教継続時間 = 60
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
        TCVAR:MASTER:被奉仕者フラグ = TFLAG:奉仕カテゴリ
    CASE "Ｖ性交"
        TFLAG:奉仕カテゴリ = 奉仕_Ｖ性交
        TFLAG:調教継続時間 = 90
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
        TCVAR:MASTER:被奉仕者フラグ = TFLAG:奉仕カテゴリ
    CASE "Ａ性交"
        TFLAG:奉仕カテゴリ = 奉仕_Ａ性交
        TFLAG:調教継続時間 = 90
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
        TCVAR:MASTER:被奉仕者フラグ = TFLAG:奉仕カテゴリ
    CASE "耳舐め手コキ"
        TFLAG:奉仕カテゴリ = 奉仕_耳舐め手コキ
        TFLAG:調教継続時間 = 90
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
        TCVAR:MASTER:被奉仕者フラグ = TFLAG:奉仕カテゴリ
ENDSELECT

FLAG:ウフフフラグ = 1
TFLAG:奉仕モード = 1
FLAG:調教モード = 調教_逆調教通常
CALL HO_PRESERVE_PRETRAIN_STATUS()
TFLAG:調教開始時刻 = HO_TIME

TSTR:モーニングコール参加者 = %LIST_ADD(TSTR:モーニングコール参加者, TOSTR(SELECTED_CHARA_ID))%

CALL QST_CHANGE_ITEM("淫堕点,15,")
CALL KJ_EVENT(SELECTED_CHARA_ID, "モーニングコール実行")

RETURN 1


code:
;-------------------------------------------------
; コマンド:商談する中に呼ばれるセクハライベント
;-------------------------------------------------
@HO_TRADE_SEDUCTION_EVENT()
#DIM  DYNAMIC SHOPPER_ID
#DIM  DYNAMIC GUEST_ID
#DIMS DYNAMIC _LIST_CHARA
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC INTERRUPT_CHARA_ID = -1
#DIM  DYNAMIC SEDUCTION_LV
#DIM  DYNAMIC 仲間に奉仕

SHOPPER_ID = TOINT(MAP_GET("HOUSING_MAP", "PLAYER_CHARA_ID"))
GUEST_ID = TOINT(MAP_GET("HOUSING_MAP", "TARGET_CHARA_ID"))
MAP_REMOVE "HOUSING_MAP", "PLAYER_CHARA_ID"
MAP_REMOVE "HOUSING_MAP", "TARGET_CHARA_ID"

;暫定MASTERのみ
SIF SHOPPER_ID != MASTER
    RETURN 0
;客が既にその場にいないなら実施しない
SIF !IS_PARTICIPATE_TRAIN(GUEST_ID)
    RETURN 0
;客から見て店員が性的な対象でないなら実施しない
SIF !IS_SEXUAL(GUEST_ID, SHOPPER_ID)
    RETURN 0

;店番中のキャラがいる場合割り込み判定
CALL HO_FIND_CHARA("ACTION", "店番中")
_LIST_CHARA = %RESULTS%
IF LIST_COUNT(_LIST_CHARA)
    CALL LIST_SHUFFLE(_LIST_CHARA)
    FOR LOCAL, 0, LIST_COUNT(_LIST_CHARA)
        CHARA_ID = TOINT(LIST_GET(_LIST_CHARA, LOCAL))
        SEDUCTION_LV = HAS_SKILL(CHARA_ID, "SEDUCTION", スキル_大分類_性技)
        IF RAND:100 < 30 && IS_SEXUAL(CHARA_ID, SHOPPER_ID) && SEDUCTION_LV > 0
            INTERRUPT_CHARA_ID = CHARA_ID
            BREAK
        ENDIF
    NEXT
ENDIF

PRINTL
IF INTERRUPT_CHARA_ID == -1
    CALL COLOR_LINE
    CALLF TAG_PRINT(@"@C:{カラー_ピンク}@<< @S:1@♡ EVENT ♡@/S@ Service to customers >>@/C@", 1)
    CALL COLOR_LINE
ELSE
    CALL COLOR_LINE
    CALLF TAG_PRINT(@"@C:{カラー_ピンク}@<< @S:1@♡ EVENT ♡@/S@ customer(?) Service >>@/C@", 1)
    CALL COLOR_LINE
    PRINTFORMW %ANAME(INTERRUPT_CHARA_ID)% and %ANAME(GUEST_ID)% see %ANAME(SHOPPER_ID)% look around an %ANAME(SHOPPER_ID)% pulled my hand tightly in the shade in half.
    PRINTFORMW %ANAME(SHOPPER_ID)% tells %ANAME(INTERRUPT_CHARA_ID)% that they will buy a product if they can get a feel.
    PRINTL
    CALLF TAG_PRINT(@"@C:{カラー_ピンク}@―― However, it seems that the appropriate \"price\" is required.@/C@", 1)
    PRINTW
    GUEST_ID = INTERRUPT_CHARA_ID
    仲間に奉仕 = 1
ENDIF

{
    SELECTCASE IFRAND(
        "1",1,
        "2",1,
        "3,4,5",HAS_PENIS(GUEST_ID),
        "6",HAS_PENIS(SHOPPER_ID)
        )
}
        ;愛撫
    CASE 1
        CALLF TAG_PRINT(@"@C:{カラー_白}@%ANAME(GUEST_ID)%はもし%ANAME(SHOPPER_ID)%が身体を自由に触らせてくれるなら、何か買ってやってもよいと言っているが……@/C@", 1)
        PRINTL
        CALL ASK_YN("身体を捧げる", "断る")
        IF RESULT
            PRINTFORMW %ANAME(SHOPPER_ID)%はそんなこと出来るはずがないと断った……
            RETURN 0
        ENDIF
        CFLAG:GUEST_ID:キャラ購買意欲 += 30
        CFLAG:GUEST_ID:キャラ消費金額 += 2000
        CALL HO_GUEST_TRADE_ITEM(GUEST_ID, SHOPPER_ID, 1)
        PRINTFORML %ANAME(SHOPPER_ID)%が同意すると%ANAME(GUEST_ID)%は%ANAME(SHOPPER_ID)%を物陰に連れ込んだ
        PRINTFORMW そしていやらしい手つきで%ANAME(SHOPPER_ID)%の肢体を弄び始めた……
        TFLAG:奉仕カテゴリ = 奉仕_愛撫
        TFLAG:調教継続時間 = 60
        ;見抜き
    CASE 2
        CALLF TAG_PRINT(@"@C:{カラー_白}@%TR(ANAME(GUEST_ID),"はもし",ANAME(SHOPPER_ID),"が\"見抜き\"させてくれるなら、何か買ってやってもよいと言っているが……")%@/C@", 1)
        PRINTL
        CALL ASK_YN(TR("身体を捧げる"), TR("断る"))
        IF RESULT
            PRINTFORMW %TR(ANAME(SHOPPER_ID),"はそんなこと出来るはずがないと断った……")
            RETURN 0
        ENDIF
        CFLAG:GUEST_ID:キャラ購買意欲 += 30
        CFLAG:GUEST_ID:キャラ消費金額 += 2000
        CALL HO_GUEST_TRADE_ITEM(GUEST_ID, SHOPPER_ID, 1)
        PRINTFORML %TR(ANAME(SHOPPER_ID),"が同意すると",ANAME(GUEST_ID),"は",ANAME(SHOPPER_ID),"を物陰に連れ込んだ")%
        PRINTFORMW %TR("そして自身の性器を取り出すと、",ANAME(SHOPPER_ID),"の眼前で自身を慰め始めた……")%
        TFLAG:奉仕カテゴリ = 奉仕_見抜き
        TFLAG:調教継続時間 = 90
        ;フェラ
    CASE 3
        CALLF TAG_PRINT(@"@C:{カラー_白}@%ANAME(GUEST_ID)%はもし%ANAME(SHOPPER_ID)%が口で奉仕してくれるなら、何か買ってやってもよいと言っているが……@/C@", 1)
        PRINTL
        CALL ASK_YN("身体を捧げる", "断る")
        IF RESULT
            PRINTFORMW %ANAME(SHOPPER_ID)%はそんなこと出来るはずがないと断った……
            RETURN 0
        ENDIF
        CFLAG:GUEST_ID:キャラ購買意欲 += 30
        CFLAG:GUEST_ID:キャラ消費金額 += 6000
        CALL HO_GUEST_TRADE_ITEM(GUEST_ID, SHOPPER_ID, 1)
        PRINTFORML %ANAME(SHOPPER_ID)%が同意すると%ANAME(GUEST_ID)%は%ANAME(SHOPPER_ID)%を物陰に連れ込んだ
        PRINTFORMW そして自身の性器を取り出すと、口で舐めしゃぶるよう%ANAME(SHOPPER_ID)%に要求した……
        TFLAG:奉仕カテゴリ = 奉仕_手コキフェラ
        TFLAG:調教継続時間 = 90
    CASE 5
        CALLF TAG_PRINT(@"@C:{カラー_白}@%ANAME(GUEST_ID)%は\@ CFLAG:GUEST_ID:スケベモブ ?下卑た笑みを浮かべ、#\@銀インゴット2つと引き換えに%ANAME(SHOPPER_ID)%口で奉仕の奉仕を要求してきた……@/C@", 1)
        PRINTL
        CALL ASK_YN("身体を捧げる", "断る")
        IF RESULT
            PRINTFORMW %ANAME(SHOPPER_ID)%はそんなこと出来るはずがないと断った……
            RETURN 0
        ENDIF
        CALL QST_CHANGE_ITEM(@"{ITEM_銀インゴット},2,")
        PRINTFORML %ANAME(SHOPPER_ID)%が同意すると%ANAME(GUEST_ID)%は%ANAME(SHOPPER_ID)%を物陰に連れ込んだ
        PRINTFORMW そして自身の性器を取り出すと、口で舐めしゃぶるよう%ANAME(SHOPPER_ID)%に要求した……
        TFLAG:奉仕カテゴリ = 奉仕_手コキフェラ
        TFLAG:調教継続時間 = 90
        ;手コキする
    CASE 4
        CALLF TAG_PRINT(@"@C:{カラー_白}@%ANAME(GUEST_ID)%はもし%ANAME(SHOPPER_ID)%が手で奉仕してくれるなら、何か買ってやってもよいと言っているが……@/C@", 1)
        PRINTL
        CALL ASK_YN("身体を捧げる", "断る")
        IF RESULT
            PRINTFORMW %ANAME(SHOPPER_ID)%はそんなこと出来るはずがないと断った……
            RETURN 0
        ENDIF
        CFLAG:GUEST_ID:キャラ購買意欲 += 30
        CFLAG:GUEST_ID:キャラ消費金額 += 4000
        CALL HO_GUEST_TRADE_ITEM(GUEST_ID, SHOPPER_ID, 1)
        PRINTFORML %ANAME(SHOPPER_ID)%が同意すると%ANAME(GUEST_ID)%は%ANAME(SHOPPER_ID)%を物陰に連れ込んだ
        PRINTFORMW そして自身の性器を取り出すと、手で気持ちよくするよう%ANAME(SHOPPER_ID)%に要求した……
        TFLAG:奉仕カテゴリ = 奉仕_手コキのみ
        TFLAG:調教継続時間 = 60
        ;手コキされる
    CASE 6
        CALLF TAG_PRINT(@"@C:{カラー_白}@%ANAME(GUEST_ID)%はもし%ANAME(SHOPPER_ID)%が陰部を手で弄らせてくれるなら、何か買ってやってもよいと言っているが……@/C@", 1)
        PRINTL
        CALL ASK_YN("身体を捧げる", "断る")
        IF RESULT
            PRINTFORMW %ANAME(SHOPPER_ID)%はそんなこと出来るはずがないと断った……
            RETURN 0
        ENDIF
        CFLAG:GUEST_ID:キャラ購買意欲 += 30
        CFLAG:GUEST_ID:キャラ消費金額 += 4000
        CALL HO_GUEST_TRADE_ITEM(GUEST_ID, SHOPPER_ID, 1)
        PRINTFORML %ANAME(SHOPPER_ID)%が同意すると%ANAME(GUEST_ID)%は%ANAME(SHOPPER_ID)%を物陰に連れ込んだ
        PRINTFORMW そして%ANAME(SHOPPER_ID)%の性器を取り出すと、息を荒げて弄び始めた……
        TFLAG:奉仕カテゴリ = 奉仕_手コキのみ
        TFLAG:調教継続時間 = 60
    CASEELSE
        RETURN 0
ENDSELECT

SIF !仲間に奉仕
    TFLAG:売春フラグ = 1
TCVAR:GUEST_ID:被奉仕者フラグ = TFLAG:奉仕カテゴリ
TCVAR:SHOPPER_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
CALL HO_PRESERVE_PRETRAIN_STATUS()
TFLAG:調教開始時刻 = HO_TIME
FLAG:調教モード = 調教_逆調教通常
FLAG:ウフフフラグ = 1
TFLAG:奉仕モード = 1
CALL RESERVE_ACTOR_BEFORE_SERVICE
RETURN 1

repo_name: pervysquirrelz/erafl

license: unknown


code:
;-------------------------------------------------
; 鍵付きチェストのコモンイベント
; IMPLEMENT AFTER CALL COLOR_PRINTW("ここは鍵が掛かっているようだ", カラー_注意)in キャラ行動制御.ERB
; CALL AS @HOUSING_UNLOCK_DOOR(ROOM_IDX, MODULE_IDX, DIFFICULTY_RATE AS A NUMBER OF YOUR CHOICE)
;-------------------------------------------------
@HOUSING_UNLOCK_DOOR(ROOM_IDX, MODULE_IDX, DIFFICULTY_RATE = 500)
#DIM  REDRAW_MODE
#DIM  ROOM_IDX
#DIM  MODULE_IDX
#DIM  DYNAMIC DIFFICULTY_RATE
#DIM  DYNAMIC ADD_MEMBER_NUM
#DIM  DYNAMIC CHARA_ID
#DIMS DYNAMIC _LIST_ADD_MEMBER

$INPUT_LOOP
PRINTL
PRINTFORML 解錠を試みることもできるが……
PRINTL
REDRAW REDRAW_MODE
CLEARLINE 1
CALL QST_PARTY_ROLL("器用", DIFFICULTY_RATE, 1, RAND:5, 1, MASTER, 0)
HO_TIME += HO_単位時間
IF RESULT == 1
    PRINTFORMW %ANAME(MASTER)%は解錠に成功した！
    CALL HO_GET_CHARAACT(CHARA_ID)
    CALL HO_LOCK_ROOM_MODULE(MASTER, ROOM_IDX, MODULE_IDX, 0)
    RETURN 1
ELSEIF RESULT == 0
    PRINTFORMW %ANAME(MASTER)%は解錠に失敗した……
    DIFFICULTY_RATE -= RAND:25
    CALL HO_GET_MODULE_USE_MEMBER(ROOM_IDX, MODULE_IDX)
    _LIST_ADD_MEMBER = %RESULTS%
    ADD_MEMBER_NUM = RESULT
    FOR LOCAL, 0, ADD_MEMBER_NUM
        CHARA_ID = TOINT(LIST_GET(_LIST_ADD_MEMBER, LOCAL))
        CALL HO_GET_CHARAACT(CHARA_ID)
        SIF TCVAR:CHARA_ID:睡眠深度 > 0
            TCVAR:CHARA_ID:睡眠深度 -= (1000 + RAND:1000)
        IF TCVAR:CHARA_ID:睡眠深度 <= 0
            TCVAR:CHARA_ID:睡眠深度 = 0
            IF RESULTS == "睡眠中"
                CALL HO_GET_UP_EVENT(CHARA_ID)
                TCVAR:(CHARA_ID):離脱フラグ = 0
                ;目を覚ました時に酩酊以上の場合、ある程度酔いを覚ます
                IF IS_DRUNK(CHARA_ID) > 2
                    PALAM:CHARA_ID:酔い = 6000
                ENDIF
                BASE:(CHARA_ID):気力 = MIN(MAX(BASE:(CHARA_ID):気力, 100) + MAX(MAXBASE:(CHARA_ID):気力 * MAX(RAND:10 + 25 - TCVAR:(CHARA_ID):22 * 2, 5) / 100, 100), MAXBASE:(CHARA_ID):気力)
                CALL COLOR_PRINTL(@"%ANAME(CHARA_ID)%は目を覚ました！", カラー_注意)
                IF !IS_FALLEN(CHARA_ID)
                    PRINTFORMW %ANAME(CHARA_ID)%の好感度が150下がりました
                    CFLAG:(CHARA_ID):2 -= 150
                ENDIF
                RETURN 0
            ELSEIF RAND:3
                CALL HO_SET_CHARAACT(CHARA_ID, "待機")
                TCVAR:CHARA_ID:行動待機時間 = 0
                IF !IS_FALLEN(CHARA_ID)
                    CALL COLOR_PRINTL(@"%ANAME(CHARA_ID)%は驚き警戒している！", カラー_注意)
                    PRINTFORMW %ANAME(CHARA_ID)%の好感度が150下がりました
                    CFLAG:(CHARA_ID):好感度 -= 150
                ELSE
                    PRINTFORMW %ANAME(CHARA_ID)%は少し驚き困惑しているようだ…
                ENDIF
                RETURN 0
            ENDIF
        ENDIF
    NEXT
    GOTO INPUT_LOOP
ELSEIF RESULT == -1
    RETURN 0
ENDIF


code:
;-------------------------------------------------
; 領内活動に関するグローバル変数群
;-------------------------------------------------

; ボタンID管理
;-------------------------------------------------
#DIM CONST HO_キャラボタンID = 100000
#DIM CONST HO_キャラ情報ボタンID_行動 = 110100
#DIM CONST HO_キャラ情報ボタンID_衣装 = 110200
#DIM CONST HO_キャラ情報ボタンID_切替 = 110300
#DIM CONST HO_画像サイズ切替ボタンID = 120000
#DIM CONST HO_画像スライドボタンID = 120100
#DIM CONST HO_マップ非表示ボタンID = 121000
#DIM CONST HO_設備ウィンドウスクロールボタンID = 122000

;2000000 ～ 2999999はキャラクタの衣装ボタンに割り当てているので使用不可
;2XXXXYY XXXX = CHARA_ID, YY = 衣装部位
#DIM CONST HO_キャラボタンID_衣装 = 2000000

#DIM CONST HO_マップボタンID = 150000
#DIM CONST HO_モジュールボタンID = 151000
#DIM CONST HO_TOPボタンID = 160000
#DIM CONST HO_BTMボタンID = 160010
#DIM CONST HO_通路ボタンID = 161000
#DIM CONST HO_編集アイテムID = 162000
#DIM CONST HO_ステータスボタンID = 165000
#DIM CONST HO_ログボタンID = 170000
#DIM CONST HO_アイテムクラフトボタンID = 200000
#DIM CONST HO_交易ボタンID = 300000
#DIM CONST HO_スケジュールボタンID = 400000
#DIM CONST HO_BGMスイッチID = 900001
#DIM CONST HO_MAXVAL = 99999999

#DIM CONST HO_MAX_MAPNUM  = 10
#DIM CONST HO_MAX_ROOMNUM = 25
#DIM CONST HO_MAX_MODULESLOT = 24
#DIM CONST HO_MAX_MODULETYPE = 1000
#DIM CONST HO_MAX_MODULENUM = 1000
#DIM SAVEDATA HO_MODULE_UNLOCK_FLAG, HO_MAX_MODULENUM
#DIM CONST HO_MAX_ROOMTYPE = 300
; 一つのエリア・設備に適用されるエリア効果の最大数
#DIM CONST HO_MAX_EFFECTNUM = 15
; コマンド実行後に出力する効果メッセージ行数
#DIM CONST HO_MAX_EFFECT_MESSAGENUM = 20
#DIMS HO_EFFECT_MESSAGE, HO_MAX_LOGNUM
;[ACTION]タブのページ管理
#DIM SHOW_INFO_ACTION_CURRENT_PAGE
#DIM SHOW_INFO_ACTION_PAGE_NUM

#DIM CONST HO_同行者上限 = 9
#DIM CONST HO_ゲストモブ上限 = 15
; 時間、日付、暦
;-------------------------------------------------
#DIM CONST HO_単位時間 = 5
#DIM CONST HO_TIMETABLENUM = 4 ;朝、昼、夕、晩
{
    #DIMS CONST HO_TASK_NAME =
        "自由","休憩","炊事","採集","採掘","店番","売春","宿番", "芸能", "クラフト", "訓練", "搾乳"
}
#DIM HO_TIME
#DIMS _DIC_HO_MAPDATA, HO_MAX_MAPNUM, HO_MAX_ROOMNUM
#DIMS _DIC_HO_MODULE_LIST, HO_MAX_MAPNUM, HO_MAX_MODULENUM
#DIM HO_ROOM_LIST
;季節と暦
#DIM HO_MONTH
#DIMS CONST HO_SEASON_STR = "春", "夏", "秋", "冬"
#DIM  CONST HO_季節_春 = 0
#DIM  CONST HO_季節_夏 = 1
#DIM  CONST HO_季節_秋 = 2
#DIM  CONST HO_季節_冬 = 3
#DIM  HO_SEASON_COLOR = カラー_春, カラー_夏, カラー_秋, カラー_冬

; 経営要素
;-------------------------------------------------
;評判値 ターンエンド時に加算
#DIM 領地評判_商業_増減値
;ゲストの販売アイテム在庫
#DIMS CHARADATA DICS_GUEST_SHOP_STOCK, MAX_SHOP_STOCKNUM
;商店情報一時格納領域
#DIMS DICS_SHOP_STOCK_TEMP, MAX_SHOP_STOCKNUM

; システム
;-------------------------------------------------
;キャラクターの行動を管理する連想配列
#DIMS _DIC_HO_CHARALIST, MAX_CHARANUM
;プレイヤーの行動を管理する連想配列
#DIMS _DIC_HO_MASTER_DATA
;交流中に動的に生成されるグループリスト
#DIM CONST HO_MAX_GROUPNUM = 50
#DIMS _DIC_HO_CHARA_GROUP_LIST, HO_MAX_GROUPNUM

;ハウジング処理データ管理
#DIM HO_有効マップID
#DIM HO_MASTER現在地
#DIM HO_MASTER_USE_MODULE_LIST_IDX
#DIM HO_MASTERクールタイム
#DIM HO_同行者数
#DIMS _LIST_HO_行動順リスト
#DIMS HO_LIST_調理担当者
#DIM CONST HO_CREW_PRIVATE_ROOM_ID = 1000

;メッセージ関連
#DIMS CHARADATA HO_DESC_CHARAACT
#DIMS HO_おひねり通知, MAX_CHARANUM

#DIM HO_DRAW_GUI_MODE
#DIM HO_ステータス描画対象
#DIM HO_マップ非表示
#DIM SAVEDATA HO_キャラ行動表示
#DIM SAVEDATA HO_キャラ衣装表示
#DIM SAVEDATA HO_キャラ情報切替フラグ

;フォント関連
#DIM FONT_SIZE   = 14
#DIM FONT_HEIGHT = 14
#DIMS HO_SFONT

;ログ関連
#DIM HO_DRAW_ログ展開
#DIM CONST HO_MAX_LOGNUM = 15
#DIMS HO_LOG_MESSAGE, HO_MAX_LOGNUM

;サウンド関連
#DIM HO_BGM_SWITCH

;-------------------------------------------------
;調教
;-------------------------------------------------
;TCVAR:離脱フラグの追加フラグ
#DIM CONST 離脱フラグ_睡眠 = 1
#DIM CONST 離脱フラグ_悲しみ限界 = 4
#DIM CONST 離脱フラグ_怒り限界 = 5
#DIM CONST 離脱フラグ_一時離脱 = 7
#DIM CONST 離脱フラグ_観客 = 8 ;コマンドの対象にとれないがソース処理の対象になる(感応などは計算する)
;TCVAR:グループ活動の管理フラグ
#DIM CONST グループ活動_待合 = 1
#DIM CONST グループ活動_行動中 = 2
;奉仕コマンド実行前のMPLY,MTAR退避
#DIM 奉仕実行前MPLY, 100
#DIM 奉仕実行前MTAR, 100
#DIM 奉仕実行前主導権
;奉仕カテゴリ
#DIM CONST 奉仕_通常    = 1
#DIM CONST 奉仕_口淫    = 2
#DIM CONST 奉仕_手淫    = 3
#DIM CONST 奉仕_足コキ  = 4
#DIM CONST 奉仕_自慰    = 5
#DIM CONST 奉仕_ＳＭ    = 6
#DIM CONST 奉仕_Ｖ性交   = 7
#DIM CONST 奉仕_Ａ性交   = 8
#DIM CONST 奉仕_手コキフェラ = 9
#DIM CONST 奉仕_見抜き = 10
#DIM CONST 奉仕_愛撫 = 11
#DIM CONST 奉仕_手コキのみ = 12
#DIM CONST 奉仕_フェラのみ = 13
#DIM CONST 奉仕_騎乗位のみ = 14
#DIM CONST 奉仕_パイズリ = 15
#DIM CONST 奉仕_オナホ搾精 = 16
#DIM CONST 奉仕_耳舐め手コキ = 17
#DIM CONST 奉仕_触手に捧げる = 20
#DIM CONST 奉仕_触手乱交 = 21
#DIM CONST 奉仕_獣姦される = 22
#DIM CONST 奉仕_獣姦する = 23
#DIM CONST 奉仕_獣姦乱交 = 24
#DIM CONST 奉仕_押し倒された = 34
#DIM CONST 奉仕_ＳＭする = 40
#DIM CONST 奉仕_ＳＭさせる = 41
#DIM CONST 奉仕_自慰する = 50
#DIM CONST 奉仕_自慰させる = 51
#DIM CONST 奉仕_舌技する = 60
#DIM CONST 奉仕_舌技させる = 61
#DIM CONST 奉仕_オナホ搾精する = 160
#DIM CONST 奉仕_オナホ搾精させる = 160

;特殊な奉仕
#DIM CONST 奉仕_スキュラが奉仕 = 300

#DIM CONST 虜囚待遇_収監 = 1
#DIM CONST 虜囚待遇_軟禁 = 2

;マップ関連
;-------------------------------------------------
#DIM HO_DRAW_MAP_IS_ROOM_EFFECT_DRAW
#DIM HO_DRAW_MAP_MODULE_SLOT_NUM
#DIM HO_DRAW_MAP_MODULE_WINDOW_ROW_IDX

;ショップ・ショップメニュー
;-------------------------------------------------
#DIMS HO_SHOP_NAME
#DIM  HO_SHOP_MENU_SELECT_ITEM_STOCK_IDX
#DIM  HO_SHOP_MENU_PAGE_LEFT
#DIM  HO_SHOP_MENU_CATEGORY
#DIM  HO_SHOP_MENU_SUM_PRICE
#DIM  HO_SHOP_MENU_BUY_AMOUNT
#DIMS HO_SHOP_MENU_STOCK_ARRAY
#DIM  CONST MAX_SHOP_STOCKNUM = 30

;アイテムメニュー
;-------------------------------------------------
#DIM HO_ITEM_MENU_SELECT_ITEM_ID
#DIM HO_ITEM_MENU_PAGE_LEFT
#DIM HO_ITEM_MENU_CATEGORY
#DIM HO_ITEM_MENU_EQUIP_DID
#DIM HO_ITEM_MENU_SELECTED_DETAIL_DID
#DIM HO_ITEM_MENU_EDIT_CHARA_ID
#DIM HO_ITEM_MENU_EDIT_SLOT_ID
#DIM HO_ITEM_MENU_BULK_DISPOSE_MODE
#DIM CONST HO_ITEM_MENU_MAX_BULK_DISPOSE_NUM = 100
#DIM HO_ITEM_MENU_BULK_DISPOSE_TARGET_DID, HO_ITEM_MENU_MAX_BULK_DISPOSE_NUM
#DIM HO_ITEM_CRAFT_SELECT_RUNE_PAGE_LEFT

#DIM CONST HO_ITEM_MENU_CATEGORY_消費      = 0
#DIM CONST HO_ITEM_MENU_CATEGORY_調教      = 1
#DIM CONST HO_ITEM_MENU_CATEGORY_素材      = 2
#DIM CONST HO_ITEM_MENU_CATEGORY_武器      = 3
#DIM CONST HO_ITEM_MENU_CATEGORY_レリック  = 4
#DIM CONST HO_ITEM_MENU_CATEGORY_貴重      = 5
{
    #DIMS CONST HO_ITEM_MENU_CATEGORY_NAME =
        "消費", "調教", "素材", "武器", "ﾚﾘｯｸ", "貴重"
}
#DIMS HO_ITEM_MENU_CURRENT_SORT_COLUMN
#DIM HO_ITEM_MENU_CURRENT_SORT_ORDER

;アイテムクラフトメニュー
;-------------------------------------------------
#DIM  HO_ITEM_CRAFT_SELECT_ITEM_ID
#DIM  HO_ITEM_CRAFT_SELECT_RUNE_ID
#DIM  HO_ITEM_CRAFT_SELECT_RUNE_GENRE
#DIMS HO_ITEM_CRAFT_DIC_REMOVE_ENCHANT
;アイテム
#DIM HO_ITEM_CRAFT_BASE_PRODUCTION_RATE
#DIM HO_ITEM_CRAFT_NUM_PRODUCTION
#DIM HO_ITEM_CRAFT_PRODUCTION_TIME
#DIM HO_CHECK_ITEM_CRAFTABLE_AT_ROOM_IDX
;武器
#DIMS HO_ITEM_CRAFT_WEAPON_NAME
#DIM  HO_ITEM_CRAFT_WEAPON_MATERIAL
;衣装
#DIM HO_ITEM_CRAFT_SELECT_CLOTH_PARTS
;作業指示登録
#DIM  CONST MAX_CRAFT_ORDER = 15
#DIMS HO_ITEM_CRAFT_DIC_CRAFT_ORDER

;ページ管理
#DIM HO_ITEM_CRAFT_PAGE_LEFT

;クラフト
;-------------------------------------------------
#DIM HO_CRAFT_CATEGORY
#DIM CONST HO_CRAFT_CATEGORY_ITEM   = 0
#DIM CONST HO_CRAFT_CATEGORY_WEAPON = 1
#DIM CONST HO_CRAFT_CATEGORY_CLOTH  = 2
#DIM CONST HO_CRAFT_CATEGORY_WEAPON_MODIFY  = 3
#DIM HO_CRAFT_RECIPE_ID
#DIM HO_CRAFT_IS_ACTIVE_SUBWND

;交易メニュー
;-------------------------------------------------
#DIM HO_TRADE_CATEGORY
#DIM HO_TRADE_TRANSFER_SWITCH
#DIM HO_TRADE_PAGE_LEFT
#DIM HO_TRADE_PAGE_RIGHT
#DIMS HO_TRADE_CURRENT_SORT_COLUMN
#DIM HO_TRADE_CURRENT_SORT_ORDER

;スケジュール管理
;-------------------------------------------------
#DIM HO_SCH_TIMETABLE
#DIM HO_SCH_TARGET_CHARA_ID
#DIM HO_SCH_IS_DRAW_SUBWND
;ページ管理
#DIM HO_SCH_PAGE
;コピペ用
#DIM HO_SCH_COPIED_FROM
#DIMS HO_SCH_HEADER_MESSAGE
;エディットモード
;-------------------------------------------------
#DIM HO_EDIT_MODE
#DIM HO_EDIT_選択中アイテム
#DIM HO_EDIT_選択中ルームIDX

#DIM HO_ROOM_STOCK_BUFFER, HO_MAX_ROOMTYPE
#DIM HO_MODULE_STOCK_BUFFER, HO_MAX_MODULETYPE
#DIMS _DIC_HO_MAPDATA_BUFFER, HO_MAX_MAPNUM, HO_MAX_ROOMNUM
#DIMS _DIC_HO_MODULE_LIST_BUFFER,  HO_MAX_MAPNUM, HO_MAX_MODULENUM
;エディットモード用クラフトメニュー
#DIM HO_EDIT_CRAFT_PAGE_LEFT
#DIM HO_EDIT_CRAFT_SELECT_ITEM_ID
#DIM HO_EDIT_CRAFT_CATEGORY
#DIM HO_EDIT_CRAFT_FILTER
#DIM HO_EDIT_CRAFT_FILTER_BIT
#DIM CONST HO_EDIT_CRAFT_FILTER_ALL = 0
#DIM CONST HO_EDIT_CRAFT_FILTER_所持 = 1
#DIM CONST HO_EDIT_CRAFT_FILTER_未所持 = 2
#DIM CONST HO_EDIT_CRAFT_FILTER_家具 = 3
#DIM CONST HO_EDIT_CRAFT_FILTER_採集 = 4
#DIM CONST HO_EDIT_CRAFT_FILTER_採掘 = 5
#DIM CONST HO_EDIT_CRAFT_FILTER_エロ = 6
#DIM CONST HO_EDIT_CRAFT_FILTER_インテリア = 7
#DIM CONST HO_EDIT_CRAFT_FILTER_自然 = 8

;SAVEDATA管理
;-------------------------------------------------
#DIMS SAVEDATA _DIC_HO_SAVED_MAPDATA, HO_MAX_MAPNUM, HO_MAX_ROOMNUM
#DIMS SAVEDATA _DIC_HO_SAVED_MODULE_LIST,  HO_MAX_MAPNUM, HO_MAX_MODULENUM
#DIM SAVEDATA HO_ROOM_STOCK, HO_MAX_ROOMTYPE
#DIM SAVEDATA HO_MODULE_STOCK, HO_MAX_MODULETYPE
#DIM SAVEDATA CHARADATA HO_TASK_SCH, HO_TIMETABLENUM
#DIMS SAVEDATA CHARADATA _LIST_HO_WORKPLACE, HO_TIMETABLENUM
#DIMS SAVEDATA CHARADATA _LIST_HO_CRAFT_ORDER_DID, HO_TIMETABLENUM

;-------------------------------------------------
;キャッシュ
;-------------------------------------------------
;モジュールリストの末尾IDX
#DIM HO_CACHE_ENDIDXOF_MODULE_LIST


code:
;-------------------------------------------------
; ハウジング　キャラクターの行動描写
;-------------------------------------------------
@HOUSING_CHARAACT_DESC_MAIN
#DIM DYNAMIC IDX
#DIM DYNAMIC CHARA_ID
;プレイヤーと同じ部屋にいるキャラクターの行動を表示する
IF !FLAG:クエストモード
    IF HO_キャラ行動表示 && HO_キャラ情報切替フラグ == 0
        CALLF TAG_PRINT(@"@C:{カラー_注釈}@@B:{HO_キャラ情報ボタンID_行動}@[-]Character behavior@/B@@/C@", 4)
        CALLF TAG_PRINT(@"@C:{カラー_注釈}@@B:{HO_キャラ情報ボタンID_切替}@ [⇔ Appearance]@/B@@/C@", 5)
        WHILE _DIC_HO_CHARALIST:IDX != "-1"
            CALL HO_GET_CHARADATA(IDX, "CHARA_ID")
            CHARA_ID = RESULT
            CALL HO_GET_CHARADATA(IDX, "ROOM_IDX")
            IF RESULT == HO_MASTER現在地
                LOCALS '= @"%ANAME(CHARA_ID), 18, LEFT%"
                LOCALS += @"%HO_DESC_CHARAACT:CHARA_ID:0%"
                CALLF TAG_PRINT(@"%LOCALS%", 1)
            ENDIF
            IDX ++
        WEND
    ELSEIF HO_キャラ情報切替フラグ == 0
        CALLF TAG_PRINT(@"@C:{カラー_注釈}@@B:{HO_キャラ情報ボタンID_行動}@[+]Character behavior@/B@@/C@", 5)
    ENDIF
ENDIF
;プレイヤーと同じ部屋にいるキャラクターの衣装を表示する
IF (HO_キャラ衣装表示 && HO_キャラ情報切替フラグ == 1) || (FLAG:クエストモード && HO_キャラ衣装表示)
    CALLF TAG_PRINT(@"@C:{カラー_注釈}@@B:{HO_キャラ情報ボタンID_衣装}@[-]Character appearance@/B@@/C@", 4)
    CALLF TAG_PRINT(@"@C:{カラー_注釈}@@B:{HO_キャラ情報ボタンID_切替}@ [⇔ Action]@/B@@/C@", 5)
    SIF IS_PARTICIPATE_TRAIN(MASTER)
        CALL HO_PRINT_CHARA_CLOTH(MASTER)
    IDX = 0
    WHILE _DIC_HO_CHARALIST:IDX != "-1"
        CALL HO_GET_CHARADATA(IDX, "ROOM_IDX")
        IF RESULT == HO_MASTER現在地
            CALL HO_GET_CHARADATA(IDX, "CHARA_ID")
            CHARA_ID = RESULT
            CALL HO_PRINT_CHARA_CLOTH(CHARA_ID)
        ENDIF
        IDX ++
    WEND
ELSEIF HO_キャラ情報切替フラグ == 1 || FLAG:クエストモード
    CALLF TAG_PRINT(@"@C:{カラー_注釈}@@B:{HO_キャラ情報ボタンID_衣装}@[+]Character appearance@/B@@/C@", 5)
ENDIF

@HO_PRINT_CHARA_CLOTH(CHARA_ID)
#DIM CHARA_IDX
#DIM DYNAMIC BTN_ID
#DIM DYNAMIC CHARA_ID
#DIMS DYNAMIC 衣装名
#DIM DYNAMIC 部位
#DIM DYNAMIC IS_VISIBLE

PRINTFORM 　%ANAME(CHARA_ID), 15, LEFT%
SETFONT HO_SFONT

;MASTERから見えないキャラの場合は表示を隠す
CALL HO_IS_TARGET_VISIBLE(MASTER, CHARA_ID)
IS_VISIBLE = RESULT
IF !IS_VISIBLE
    CALLF TAG_PRINT(@"@C:{カラー_選択不可}@[ここからではわからない]@/C@", 4)
    SETFONT
    PRINTL
    RETURN
ENDIF

;容姿の描写
CALLF TAG_PRINT(@"[体:%TOSTR_BODYSIZE(TALENT:(CHARA_ID):体格)%][胸:%TOSTR_BUSTSIZE(GET_BUSTSIZE(CHARA_ID))%]　　", 0)

;衣装の描写 頭から上着
IF 調教用衣装:CHARA_ID:衣装部位_頭 != 0
    部位 = 衣装部位_頭
    CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
ENDIF
IF 調教用衣装:CHARA_ID:衣装部位_首 != 0
    部位 = 衣装部位_首
    CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
ENDIF
IF 調教用衣装:CHARA_ID:衣装部位_上着 != 0
    部位 = 衣装部位_上着
    CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
ENDIF

;衣装の描写 上下服以外
IF 調教用衣装:CHARA_ID:衣装部位_上下服 == 0
    ;衣装の描写 上服(下着上)
    IF 調教用衣装:CHARA_ID:衣装部位_上服 != 0
        部位 = 衣装部位_上服
        CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
        ;ex.ブラがあり、シャツが脱げてる
        IF 調教用衣装:CHARA_ID:衣装部位_下着上 != 0 && 衣装状態:CHARA_ID:衣装部位_上服 != 0
            部位 = 衣装部位_下着上
            CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
        ENDIF
    ENDIF
    ;衣装の描写 下服(下着下)
    IF 調教用衣装:CHARA_ID:衣装部位_下服 != 0
        部位 = 衣装部位_下服
        CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
        ;ex.パンツがあり、スカートが脱げてる
        IF 調教用衣装:CHARA_ID:衣装部位_下着下 != 0 && 衣装状態:CHARA_ID:衣装部位_下服 != 0
            部位 = 衣装部位_下着下
            CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
        ENDIF
    ENDIF
    ;ex.服がないが下着がある
    IF 調教用衣装:CHARA_ID:衣装部位_上服 == 0
        IF 調教用衣装:CHARA_ID:衣装部位_下着上 != 0
            部位 = 衣装部位_下着上
            CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
        ENDIF
    ENDIF
    IF 調教用衣装:CHARA_ID:衣装部位_下服 == 0
        IF 調教用衣装:CHARA_ID:衣装部位_下着下 != 0
            部位 = 衣装部位_下着下
            CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
        ENDIF
    ENDIF
ELSE
    ;衣装の描写 上下服(下着上下)
    部位 = 衣装部位_上下服
    CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
    IF 調教用衣装:CHARA_ID:衣装部位_下着上 != 0 && 衣装状態:CHARA_ID:衣装部位_上下服 != 0
        部位 = 衣装部位_下着上
        CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
    ENDIF
    IF 調教用衣装:CHARA_ID:衣装部位_下着下 != 0 && 衣装状態:CHARA_ID:衣装部位_上下服 != 0
        部位 = 衣装部位_下着下
        CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
    ENDIF
ENDIF

;衣装の描写 上下下着
IF 調教用衣装:CHARA_ID:衣装部位_上下下着 != 0
    部位 = 衣装部位_上下下着
    CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
ENDIF

;衣装の描写 腕、靴下からアクセサリ
IF 調教用衣装:CHARA_ID:衣装部位_腕 != 0
    部位 = 衣装部位_腕
    CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
ENDIF
IF 調教用衣装:CHARA_ID:衣装部位_靴下 != 0
    部位 = 衣装部位_靴下
    CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
ENDIF
IF 調教用衣装:CHARA_ID:衣装部位_靴 != 0
    部位 = 衣装部位_靴
    CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
ENDIF
IF 調教用衣装:CHARA_ID:衣装部位_アクセサリ != 0
    部位 = 衣装部位_アクセサリ
    CALL HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
ENDIF

;全脱衣
LOCALS:0 '= TOSTR(CHARA_ID, "0000")
LOCALS:1 '= "98"
LOCALS:0 '= LOCALS:0 + LOCALS:1
BTN_ID = HO_キャラボタンID_衣装 + TOINT(LOCALS:0)
CALLF TAG_PRINT(@"@B:{BTN_ID}@  [全脱]@/B@", 4)
;全着衣
LOCALS:0 '= TOSTR(CHARA_ID, "0000")
LOCALS:1 '= "99"
LOCALS:0 '= LOCALS:0 + LOCALS:1
BTN_ID = HO_キャラボタンID_衣装 + TOINT(LOCALS:0)
CALLF TAG_PRINT(@"@B:{BTN_ID}@[全着]  @/B@", 4)

;露出判定(乳)
CALL IS_COVERED(CHARA_ID, 被覆部位_乳首)
IF RESULT:1 == 0
    CALLF TAG_PRINT(@"@C:{カラー_ピンク}@[❤乳露出]@/C@", 0)
ENDIF
;露出判定(秘部)
CALL IS_COVERED(CHARA_ID, 被覆部位_秘部)
IF RESULT:1 == 0
    CALLF TAG_PRINT(@"@C:{カラー_ピンク}@[❤秘部露出]@/C@", 0)
ENDIF
SETFONT
PRINTL

;キャラ衣装ボタンを印字する
@HO_PRINT_CHARA_CLOTH_BTN(CHARA_ID, 部位)
#DIM CHARA_ID
#DIM 部位
#DIM DYNAMIC BTN_ID
#DIM DYNAMIC F_COL
#DIMS DYNAMIC 衣装名

F_COL = カラー_白
CALL GET_CLOTH_NAME(部位, (調教用衣装:CHARA_ID:部位))
衣装名 '= RESULTS
CALL HO_GET_CLOTH_BTN_ID(CHARA_ID, 部位)
BTN_ID = RESULT
IF 衣装状態:CHARA_ID:部位 == 衣装状態_脱 || 衣装状態:CHARA_ID:部位 == 衣装状態_破
    F_COL = カラー_選択不可
ENDIF
CALLF TAG_PRINT(@"@C:{F_COL}@@B:{BTN_ID}@[%衣装名%%衣装状態描写:(衣装状態:CHARA_ID:部位)%]@/B@@/C@", 4)
RETURN


code:
;-------------------------------------------------
; FLAG:調教モード =8 居住区関連処理
;-------------------------------------------------
@HOUSING_DRAW_GUI
#DIM  DYNAMIC BTN_ID
#DIMS DYNAMIC ROOM_NAME
#DIM  DYNAMIC F_COL, 5

CALL DRAW_LINE("＿", カラー_白)
CALL DRAW_LINE("─", カラー_白)
BTN_ID = HO_TOPボタンID

VARSET F_COL, カラー_白
F_COL:HO_DRAW_GUI_MODE = カラー_選択中

IF !HO_マップ非表示
    SELECTCASE HO_DRAW_GUI_MODE
        CASE 0
            SIF QST_QUEST_TYPE == "DIALOGUE"
                RETURN
            IF QST_QUEST_TYPE != "GMAP" || !FLAG:クエストモード
                CALL HO_DRAW_MAP_WINDOW
            ELSEIF QST_QUEST_TYPE == "GMAP"
                CALL QST_DRAW_GMAP_WINDOW
            ENDIF
        CASE 1
            CALL HO_DRAW_STATUS_WINDOW
        CASE 2
            CALL HO_DRAW_STOCK_WINDOW
        CASE 3
            CALL HO_DRAW_TRADE_WINDOW
    ENDSELECT
ENDIF

;メニューバー
;-------------------------------------------------
;CALL DRAW_LINE("―", カラー_選択不可)
CALL DRAW_LINE("―", カラー_注釈)
IF HO_マップ非表示
    CALLF TAG_PRINT(@"@C:{カラー_注釈}@@B:{HO_マップ非表示ボタンID}@[+]  @/B@", 4)
ELSE
    CALLF TAG_PRINT(@"@C:{カラー_注釈}@@B:{HO_マップ非表示ボタンID}@[-]  @/B@", 4)
ENDIF
CALLF TAG_PRINT(@"@C:{F_COL:0}@@B:{BTN_ID}@[MAP]@/B@@/C@  @C:{F_COL:1}@@B:{BTN_ID + 1}@[STATUS]@/B@@/C@  @C:{F_COL:2}@@B:{BTN_ID + 2}@[ITEM]@/B@@/C@  ", 4)
IF !FLAG:クエストモード
    CALLF TAG_PRINT(@"@C:{F_COL:3}@@B:{BTN_ID + 3}@[TRADE]  @/B@@B:{BTN_ID + 7}@[ACTION]  @/B@@/C@  @C:{F_COL:4}@@B:{BTN_ID + 4}@[SCHEDULE]  @/B@@B:{BTN_ID + 5}@[CRAFT]  @/B@@B:{BTN_ID + 6}@[EDIT]  @/B@@/C@", 4)
ENDIF
LOCALS '= @"@B:5997@[HELP]  @/B@"
[IF_DEBUG]
LOCALS += @"@B:999999999@[DEBUG]  @/B@"
[ENDIF]
CALLF TAG_PRINT(LOCALS, 4)
PRINTL

@HO_DRAW_MAP_WINDOW
#DIM DYNAMIC WINDOW_ID
#DIM DYNAMIC FOG_OF_WAR
#DIM DYNAMIC NOT_DRAW
#DIM DYNAMIC IS_LOCKED
#DIM CONST WND_WIDTH  = 780
#DIM CONST WND_HEIGHT = 480
#DIM CONST MARGIN_X = 50
#DIM CONST MARGIN_Y = 50
#DIMS DYNAMIC ROOM_DIV, HO_MAX_ROOMNUM
#DIM CONST ROOM_NUM_X = 5
#DIM CONST ROOM_NUM_Y = 5
CALL WndMgr_DestroyWindow(-1)
VARI POS_X
VARI POS_Y
VARI IS_DISABLED
VARI BCOLOR
VARS LABELS, 4
FOR LOCAL, 0, HO_MAX_ROOMNUM
    IS_DISABLED = 0
    ; CALL WndMgr_CreateWindow(WINDOW_ID, (LOCAL % 5 * WND_WIDTH), (LOCAL / 5 * WND_HEIGHT), WND_WIDTH, WND_HEIGHT, 2)
    CALL HO_GET_ROOM_ID(LOCAL)
    IF RESULT == 0
        IS_DISABLED = 1
    ENDIF
    IF FLAG:クエストモード
        CALL HO_GET_MAPDATA(HO_有効マップID, LOCAL, "FOG_OF_WAR")
        FOG_OF_WAR  = RESULT
        IF FOG_OF_WAR
            IS_DISABLED = 1
        ENDIF
    ENDIF
    CALL HO_SET_MAP_WINDOW_TEXT(LOCAL, IS_DISABLED)
    LABELS:0 = %RESULTS:0%
    LABELS:1 = %RESULTS:1%
    LABELS:0 = %CONV_TAG2H(LABELS:0)%
    LABELS:1 = %CONV_TAG2H(LABELS:1)%
    BCOLOR = IS_DISABLED ? カラー_灰色 # カラー_白
    POS_X = LOCAL % ROOM_NUM_X * (WND_WIDTH + MARGIN_X)
    POS_Y = LOCAL / ROOM_NUM_Y * (WND_HEIGHT + MARGIN_Y)
    {
        ROOM_DIV:LOCAL '=
            @"

%LABELS:0%
%LABELS:1%
"
    }
    ;クエストモードの場合、未認識のROOMの通路を描写しない
    IF FLAG:クエストモード
        CALL HO_GET_MAPDATA(HO_有効マップID, LOCAL, "FOG_OF_WAR")
        FOG_OF_WAR  = RESULT
    ENDIF
    CALL HO_GET_PATH(LOCAL)
    ;横列の通路、右方に接続が存在する場合描写
    IF LIST_INDEXOF(RESULTS, TOSTR(LOCAL + 1)) != -1 && LOCAL % ROOM_NUM_X != ROOM_NUM_X - 1
        ;クエストモードの場合FROM,TOともに未探索なら経路も描写しない
        NOT_DRAW = 0
        IF FLAG:クエストモード
            CALL HO_GET_MAPDATA(HO_有効マップID, LOCAL + 1, "FOG_OF_WAR")
            IF RESULT == 1 && FOG_OF_WAR == 1
                NOT_DRAW = 1
            ENDIF
        ENDIF
        ;施錠判定
        IS_LOCKED = 0
        CALL HO_GET_MAPDATA(HO_有効マップID, LOCAL, "IS_LOCKED")
        IF RESULT == 1
            IS_LOCKED = 1
        ENDIF
        CALL HO_GET_MAPDATA(HO_有効マップID, LOCAL + 1, "IS_LOCKED")
        IF RESULT == 1
            IS_LOCKED = 1
        ENDIF
        IF !NOT_DRAW
            ;WINDOW_ID ++
            ; CALL WndMgr_CreateWindow(WINDOW_ID,(WND_WIDTH - 1) + (WND_WIDTH * (LOCAL % 5)), 1 + (LOCAL / 5 * WND_HEIGHT), 3, 3, 0)
            ; CALL WndMgr_TextSet(WINDOW_ID, 0, "￣")
            ; CALL WndMgr_TextSet(WINDOW_ID, 2, "＿")
            POS_X = LOCAL % ROOM_NUM_X * (WND_WIDTH + MARGIN_X) + WND_WIDTH
            POS_Y = LOCAL / ROOM_NUM_Y * (WND_HEIGHT + MARGIN_Y) + 90
            IF !IS_LOCKED
                {
                    ROOM_DIV:LOCAL +=
                        @"

"
                        + @"

"
                }
            ELSE
                {
                    ROOM_DIV:LOCAL +=
                        @"

"
                }
            ENDIF
        ENDIF
    ENDIF
    ;縦列の通路、下方に接続が存在する場合描写
    CALL HO_GET_PATH(LOCAL)
    IF LIST_INDEXOF(RESULTS, TOSTR(LOCAL + ROOM_NUM_Y)) != -1 && LOCAL / ROOM_NUM_Y != ROOM_NUM_Y - 1
        ;クエストモードの場合FROM,TOともに未探索なら経路も描写しない
        NOT_DRAW = 0
        IF FLAG:クエストモード
            CALL HO_GET_MAPDATA(HO_有効マップID, LOCAL + 5, "FOG_OF_WAR")
            IF RESULT == 1 && FOG_OF_WAR == 1
                NOT_DRAW = 1
            ENDIF
        ENDIF
        ;施錠判定
        IS_LOCKED = 0
        CALL HO_GET_MAPDATA(HO_有効マップID, LOCAL, "IS_LOCKED")
        IF RESULT == 1
            IS_LOCKED = 1
        ENDIF
        CALL HO_GET_MAPDATA(HO_有効マップID, LOCAL + 5, "IS_LOCKED")
        IF RESULT == 1
            IS_LOCKED = 1
        ENDIF
        IF !NOT_DRAW
            WINDOW_ID ++
            ; CALL WndMgr_CreateWindow(WINDOW_ID,(WND_WIDTH / 2 - 2) + (WND_WIDTH * (LOCAL % 5)), WND_HEIGHT - 1 + (LOCAL / 5 * WND_HEIGHT), 3, 2, 0)
            ; CALL WndMgr_TextSet(WINDOW_ID, 0, "┐┌")
            ; CALL WndMgr_TextSet(WINDOW_ID, 1, "┘└")
            POS_X = LOCAL % ROOM_NUM_X * (WND_WIDTH + MARGIN_X) + 190
            POS_Y = LOCAL / ROOM_NUM_Y * (WND_HEIGHT + MARGIN_Y) + WND_HEIGHT
            IF !IS_LOCKED
                {
                    ROOM_DIV:LOCAL +=
                        @"

"
                        + @"

"
                }
            ELSE
                {
                    ROOM_DIV:LOCAL +=
                        @"

"
                }
            ENDIF
        ENDIF
    ENDIF
NEXT
VARS HTML
FOR LOCAL, 0, HO_MAX_ROOMNUM
    HTML += ROOM_DIV:LOCAL
NEXT
HTML_PRINT HTML, 1
CALL HO_DRAW_MODULE_WINDOW
SIF HO_DRAW_MAP_MODULE_SLOT_NUM > 8
    CALL HO_DRAW_SCROLL_WINDOW
CALL HO_DRAW_ROOM_EFFECT_WINDOW
CALL HO_DRAW_MODULE_EFFECT_WINDOW
CALL HO_DRAW_LOG_WINDOW
CALL NEWLINE(26)
; CALL WndMgr_DisplayAll()

@HO_DRAW_MODULE_WINDOW
;region 設備ウィンドウ
; #DIM CONST WND_WIDTH  = 88
; #DIM CONST WND_HEIGHT = 18
#DIM CONST W_WIDTH  = 4500
#DIM CONST W_HEIGHT = 2600
#DIM CONST POS_X = 4150
#DIM CONST POS_Y = 10
#DIM CONST MAX_ROW = 8 ;実行数ではなく表示可能な設備の数
#DIM DYNAMIC WINDOW_ID
#DIM DYNAMIC L_CNT

#DIMS DYNAMIC ROOM_NAME
#DIMS DYNAMIC _LIST_MODULE_LIST
#DIM DYNAMIC MODULE_SLOT_IDX
#DIM DYNAMIC MODULE_LIST_IDX
#DIM DYNAMIC MODULE_ID
#DIM DYNAMIC MODULE_NUM
#DIM DYNAMIC CAPACITY
#DIM DYNAMIC USER_COUNT
#DIM DYNAMIC BTN_ID

#DIMS DYNAMIC _LIST_EVENT_SLOT
#DIM  DYNAMIC EVENT_SLOT_IDX
#DIM  DYNAMIC EVENT_LIST_IDX
#DIM  DYNAMIC EVENT_ID
#DIMS DYNAMIC EVENT_ICON
#DIM  DYNAMIC EVENT_COLOR

#DIMS LIST_VISITOR_ID

CALL WndMgr_VacantId()
WINDOW_ID = RESULT

CALL HO_GET_ROOM_NAME(HO_MASTER現在地)
ROOM_NAME = %RESULTS%
; CALL WndMgr_CreateWindow(WINDOW_ID, 82, 0, WND_WIDTH, WND_HEIGHT, 2)

VARS TEXT
[IF_DEBUG]
; CALL WndMgr_WindowTitle( WINDOW_ID, @"%ROOM_NAME% (ROOM_IDX:{HO_MASTER現在地})")
TEXT += CONV_TAG2H(@"@S:1@%ROOM_NAME%@/S@ (ROOM_IDX:{HO_MASTER現在地})")
[ELSE]
; CALL WndMgr_WindowTitle( WINDOW_ID, ROOM_NAME)
TEXT += CONV_TAG2H(@"@S:1@%ROOM_NAME%@/S@")
[ENDIF]
TEXT += @"
"

HO_DRAW_MAP_MODULE_SLOT_NUM = 0
IF !FLAG:クエストモード
    CALL HO_GET_MAPDATA(HO_有効マップID, HO_MASTER現在地, "MODULE_SLOT")
    _LIST_MODULE_LIST = %RESULTS%
    HO_DRAW_MAP_MODULE_SLOT_NUM = LIST_COUNT(_LIST_MODULE_LIST)
    FOR MODULE_SLOT_IDX, HO_DRAW_MAP_MODULE_WINDOW_ROW_IDX, MIN(HO_DRAW_MAP_MODULE_SLOT_NUM, HO_DRAW_MAP_MODULE_SLOT_NUM + HO_DRAW_MAP_MODULE_WINDOW_ROW_IDX)
        IF L_CNT >= MAX_ROW
            BREAK
        ENDIF
        BTN_ID = MODULE_SLOT_IDX + HO_モジュールボタンID
        CALL HO_GET_MODULE_ID2(HO_MASTER現在地, MODULE_SLOT_IDX)
        MODULE_ID = RESULT
        MODULE_LIST_IDX = RESULT:1
        ;客室モジュール用の処理
        IF MODULE_ID == HO_CREW_PRIVATE_ROOM_ID
            CALL HO_DRAW_CREW_PRIVATE_ROOM(WINDOW_ID, HO_MASTER現在地, MODULE_SLOT_IDX)
        ELSE
            CALL HO_GET_MODULE_DATA(MODULE_ID, "MODULE_NAME")
        ENDIF
        TEXT += CONV_TAG2H(@"@B:{BTN_ID}@◇ [%RESULTS%]@/B@")
        ; CALL WndMgr_TextSet(WINDOW_ID, L_CNT, @"@B:{BTN_ID}@◇ [%RESULTS%]@/B@")
        ;施錠表示
        CALL HO_IS_MODULE_LOCKED(HO_MASTER現在地, MODULE_SLOT_IDX)
        SIF RESULT == 1
            ; CALL WndMgr_TextAdd(WINDOW_ID, L_CNT, @" @C:{カラー_選択不可}@🔒@/C@")
            TEXT += CONV_TAG2H(@" @C:{カラー_選択不可}@🔒@/C@")
        ;宿泊客表示
        CALL HO_GET_MODULE_LIST(MODULE_LIST_IDX, "VISITOR_ID")
        LIST_VISITOR_ID = %RESULTS%
        IF LIST_COUNT(LIST_VISITOR_ID) > 0
            LOCALS '= "(利用者:"
            FOR LOCAL, 0, LIST_COUNT(LIST_VISITOR_ID)
                SIF LOCAL > 0
                    LOCALS += ","
                LOCALS += @"%ANAME(LIST_GETINT(LIST_VISITOR_ID, LOCAL))%"
            NEXT
            LOCALS += ")"
            ; CALL WndMgr_TextAdd(WINDOW_ID, L_CNT, @"@C:{カラー_注釈}@%LOCALS%@/C@")
            TEXT += CONV_TAG2H(@"@C:{カラー_注釈}@%LOCALS%@/C@")
        ENDIF
        ;デバッグ情報
        [IF_DEBUG]
        ; CALL WndMgr_TextAdd(WINDOW_ID, L_CNT, @"@C:{カラー_選択不可}@(IDX:{MODULE_LIST_IDX})@/C@")
        TEXT += CONV_TAG2H(@"@C:{カラー_選択不可}@(IDX:{MODULE_LIST_IDX})@/C@")
        [ENDIF]
        ; L_CNT ++
        TEXT += @"
"
        CALL HO_STR_MODULE_CAPACITY_INDICATOR(MODULE_SLOT_IDX)
        ; CALL WndMgr_TextSet(WINDOW_ID, L_CNT, @"%RESULTS%")
        TEXT += CONV_TAG2H(RESULTS)
        TEXT += @"
"
        L_CNT ++
    NEXT
    ;クエストモード時のイベントスロット描画
ELSE
    CALL HO_GET_MAPDATA(HO_有効マップID, HO_MASTER現在地, "EVENT_SLOT")
    _LIST_EVENT_SLOT = %RESULTS%
    FOR EVENT_SLOT_IDX, 0, LIST_COUNT(_LIST_EVENT_SLOT)
        BTN_ID = EVENT_SLOT_IDX + HO_モジュールボタンID
        EVENT_LIST_IDX = TOINT(LIST_GET(_LIST_EVENT_SLOT, EVENT_SLOT_IDX))
        CALL QST_GET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_ID")
        EVENT_ID = RESULT
        CALL QST_GET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_ICON")
        IF RESULT == -1
            EVENT_ICON '= "◇"
        ELSE
            EVENT_ICON = %ICON(RESULTS)%
        ENDIF
        CALL QST_GET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_COLOR")
        EVENT_COLOR = RESULT > 0 ? RESULT # カラー_白
        CALL QST_GET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_STATE")
        IF RESULTS != "DEACTIVE"
            CALL QST_GET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_SLOT_NAME")
            IF FLAG:調教モード == 調教_クエスト && (QST_イベント選択制限 == -1 || QST_イベント選択制限 == EVENT_ID)
                ; CALL WndMgr_TextSet(WINDOW_ID, L_CNT, @"@C:{EVENT_COLOR}@@B:{BTN_ID}@%EVENT_ICON% [%RESULTS%]@/B@@/C@")
                TEXT += CONV_TAG2H(@"@C:{EVENT_COLOR}@@B:{BTN_ID}@%EVENT_ICON% [%RESULTS%]@/B@@/C@")
            ELSE
                ; CALL WndMgr_TextSet(WINDOW_ID, L_CNT, @"@C:{カラー_選択不可}@%EVENT_ICON% [%RESULTS%]@/C@")
                TEXT += CONV_TAG2H(@"@C:{カラー_選択不可}@%EVENT_ICON% [%RESULTS%]@/C@")
            ENDIF
            ; L_CNT += 2
            TEXT += @"

"
        ENDIF
    NEXT
ENDIF

VARS HTML
HTML += @"
%TEXT%
"
HTML_PRINT HTML, 1
RETURN
;endregion

;;客室の固有描画処理
;前提として客室のMODULE_IDXはCHARA_IDXと対応している必要がある
@HO_DRAW_CREW_PRIVATE_ROOM(WINDOW_ID, ROOM_IDX, MODULE_IDX)
#DIM WINDOW_ID
#DIM ROOM_IDX
#DIM MODULE_IDX
#DIM DYNAMIC CHARA_IDX

VARSET RESULTS
CALL HO_GET_CHARADATA(MODULE_IDX, "CHARA_ID")
RESULTS '= @"%SNAME(RESULT)%の部屋"
RETURN

;設備の使用状況を可視化
@HO_STR_MODULE_CAPACITY_INDICATOR(MODULE_IDX)
#DIM MODULE_IDX
#DIM DYNAMIC CHARA_IDX
#DIM DYNAMIC USER_COUNT
#DIMS DYNAMIC STR_INDICATOR

VARSET RESULTS

CALL HO_GET_MASTER_DATA("MODULE_USAGE")
IF RESULT == MODULE_IDX
    USER_COUNT ++
    STR_INDICATOR += @"@C:{カラー_黄}@%ICON("CHESS-KING")%@/C@"
ENDIF
WHILE _DIC_HO_CHARALIST:(CHARA_IDX) != "-1"
    IF _DIC_HO_CHARALIST:(CHARA_IDX) == "DELETED"
        CHARA_IDX ++
        CONTINUE
    ENDIF
    CALL HO_GET_CHARADATA(CHARA_IDX, "ROOM_IDX")
    IF RESULT != HO_MASTER現在地
        CHARA_IDX ++
        CONTINUE
    ENDIF
    CALL HO_GET_CHARADATA(CHARA_IDX, "MODULE_USAGE")
    IF MODULE_IDX == RESULT
        USER_COUNT ++
        CALL HO_GET_CHARADATA(CHARA_IDX, "CHARA_ID")
        IF CFLAG:RESULT:ゲストモブ
            STR_INDICATOR += @"@C:{カラー_緑}@%ICON("CHESS-PAWN")%@/C@"
        ELSEIF IS_FEMALE(RESULT)
            STR_INDICATOR += @"@C:{カラー_女}@%ICON("CHESS-PAWN")%@/C@"
        ELSE
            STR_INDICATOR += @"@C:{カラー_男}@%ICON("CHESS-PAWN")%@/C@"
        ENDIF
    ENDIF
    CHARA_IDX ++
WEND
CALL HO_GET_MODULE_ID2(HO_MASTER現在地, MODULE_IDX)
CALL HO_GET_MODULE_DATA(RESULT, "人数")
STR_INDICATOR += @"@C:{カラー_選択不可}@%ICON("CHESS-PAWN")%@/C@" * MAX(RESULT - USER_COUNT, 0)
RESULTS = %STR_INDICATOR%
RETURN

@HO_SET_MAP_WINDOW_TEXT(ROOM_IDX, IS_DISABLED)
#DIM ROOM_IDX
#DIM IS_DISABLED
#DIM  DYNAMIC BTN_ID
#DIMS DYNAMIC ROOM_NAME
#DIM  DYNAMIC ROOM_ID
#DIM  DYNAMIC FOG_OF_WAR
#DIM  DYNAMIC CHARA_ID
#DIMS DYNAMIC ICON
#DIM  DYNAMIC FONTCOLOR
VARS LABELS, 2

CALL HO_GET_ROOM_NAME(ROOM_IDX)
ROOM_NAME = %RESULTS%
IF ROOM_IDX == HO_MASTER現在地
    FONTCOLOR = カラー_オレンジ
ELSE
    FONTCOLOR = カラー_白
ENDIF
BTN_ID = ROOM_IDX + HO_マップボタンID
CALL HO_GET_MAPDATA(HO_有効マップID, ROOM_IDX, "FOG_OF_WAR")
FOG_OF_WAR  = RESULT
IF FOG_OF_WAR != 1 && !IS_DISABLED
    LOCALS = %TAG_PRINT_SHAPE(@"@C:{FONTCOLOR}@@B:{BTN_ID}@[%ROOM_NAME%]@/B@@/C@", 14, 1, 2)%
ELSEIF IS_DISABLED && !FLAG:クエストモード
    LOCALS = %TAG_PRINT_SHAPE(@"@C:{カラー_灰色}@[%ROOM_NAME%]@/C@", 14, 1, 2)%
ELSE
    LOCALS = %TAG_PRINT_SHAPE(@"@C:{カラー_灰色}@[---]@/C@", 14, 1, 2)%
ENDIF
;CALL WndMgr_TextSet(WINDOW_ID, 0, LOCALS)
LABELS:0 = %LOCALS%

;マップ上のアイコン表示
LOCALS '= ""
LOCAL = 0
IF !FLAG:クエストモード || (FLAG:クエストモード && !FOG_OF_WAR)
    IF ROOM_IDX == HO_MASTER現在地 && !FLAG:クエスト_あなた不参加
        LOCALS += @"@C:{カラー_黄}@İ@/C@"
    ENDIF
    WHILE _DIC_HO_CHARALIST:LOCAL != "-1"
        IF _DIC_HO_CHARALIST:(LOCAL) == "DELETED"
            LOCAL ++
            CONTINUE
        ENDIF
        CALL HO_GET_CHARADATA(LOCAL, "ROOM_IDX")
        IF ROOM_IDX == RESULT
            CALL HO_GET_CHARADATA(LOCAL, "CHARA_ID")
            CHARA_ID = RESULT
            ICON '= ""
            CALL HO_GET_CHARADATA(LOCAL, "ICON")
            IF RESULT != -1
                ICON = %RESULTS%
            ENDIF
            IF ICON == ""
                IF CFLAG:CHARA_ID:ゲストモブ
                    LOCALS += @"@C:{カラー_緑}@İ@/C@"
                ELSEIF IS_FEMALE(CHARA_ID)
                    LOCALS += @"@C:{カラー_女}@İ@/C@"
                ELSE
                    LOCALS += @"@C:{カラー_男}@İ@/C@"
                ENDIF
            ELSE
                LOCALS += @"%ICON%"
            ENDIF
        ENDIF
        LOCAL ++
    WEND
ENDIF
LOCALS = %TAG_PRINT_SHAPE(LOCALS, 14, 1, 2)%
;CALL WndMgr_TextSet(WINDOW_ID, 1, LOCALS)
LABELS:1 = %LOCALS%

RESULTS:0 = %LABELS:0%
RESULTS:1 = %LABELS:1%
RETURN

@HO_DRAW_SCROLL_WINDOW
; #DIM CONST WND_WIDTH  = 6
; #DIM CONST WND_HEIGHT = 16
; #DIM DYNAMIC WINDOW_ID
; #DIM DYNAMIC L_CNT
#DIM CONST W_WIDTH  = 200
#DIM CONST W_HEIGHT = 200
#DIM POS_X = 5600
#DIM POS_Y = 1600

; CALL WndMgr_VacantId()
; WINDOW_ID = RESULT
; CALL WndMgr_CreateWindow(WINDOW_ID, 112, 2, WND_WIDTH, WND_HEIGHT, 0)
; L_CNT = 6
; CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_注釈}@@B:{HO_設備ウィンドウスクロールボタンID}@△@/B@@/C@")
; CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_注釈}@@B:{HO_設備ウィンドウスクロールボタンID + 1}@▽@/B@@/C@")
VARS TEXT
VARS HTML
TEXT += CONV_TAG2H(@"@C:{カラー_注釈}@@B:{HO_設備ウィンドウスクロールボタンID}@△@/B@@/C@")
TEXT += @"
"
TEXT += CONV_TAG2H(@"@C:{カラー_注釈}@@B:{HO_設備ウィンドウスクロールボタンID + 1}@▽@/B@@/C@")
HTML += @"
%TEXT%
"
HTML_PRINT HTML, 1

RETURN

@HO_DRAW_ROOM_EFFECT_WINDOW
; #DIM CONST WND_WIDTH  = 26
; #DIM CONST WND_HEIGHT = 18
#DIM CONST W_WIDTH  = 1400
#DIM CONST W_HEIGHT = 1800
#DIM CONST POS_X = 7250
#DIM CONST POS_Y = 10
#DIM DYNAMIC WINDOW_ID
#DIM DYNAMIC L_CNT

#DIMS DYNAMIC MAP
#DIMS DYNAMIC ROOM_NAME
#DIM  DYNAMIC EFFECTNUM
#DIMS DYNAMIC EFFECT_NAME, HO_MAX_EFFECTNUM
#DIM  DYNAMIC BTN_ID
#DIM  F_COL

HO_DRAW_MAP_IS_ROOM_EFFECT_DRAW = 0

MAP '= @"MAP_{HO_MASTER現在地}_ROOM_EFFECT"
MAP_SIZE MAP
SIF RESULT <= 0
    RETURN
EFFECTNUM = RESULT
MAP_GETKEYS MAP, EFFECT_NAME, 1

; CALL WndMgr_VacantId()
; WINDOW_ID = RESULT
; CALL WndMgr_CreateWindow(WINDOW_ID, 144, 0, WND_WIDTH, WND_HEIGHT, 2)
; CALL WndMgr_WindowTitle( WINDOW_ID, @"エリア効果")

VARS TEXT
VARS HTML
TEXT += CONV_TAG2H(@"@S:1@エリア効果@/S@")
TEXT += @"
"
FOR LOCAL, 0, EFFECTNUM
    SIF TOINT(MAP_GET(MAP, EFFECT_NAME:LOCAL)) == -1
        CONTINUE
    IF GETVAR(@"EFFECT_COL_%EFFECT_NAME:LOCAL%") != 0
        F_COL = GETVAR(@"EFFECT_COL_%EFFECT_NAME:LOCAL%")
    ELSE
        F_COL = カラー_白
    ENDIF
    ;CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{F_COL}@@B:DUMMY$%ROOM_EFFECT_TOOLTIP(EFFECT_NAME:LOCAL)%@【%EFFECT_NAME:LOCAL%】@/B@@/C@")
    TEXT += CONV_TAG2H(@"@C:{F_COL}@@B:DUMMY$%ROOM_EFFECT_TOOLTIP(EFFECT_NAME:LOCAL)%@【%EFFECT_NAME:LOCAL%】@/B@@/C@")
    HO_DRAW_MAP_IS_ROOM_EFFECT_DRAW = 1
    TEXT += @"
"
    ; L_CNT ++
NEXT

HTML += @"
%TEXT%
"
HTML_PRINT HTML, 1
RETURN

@HO_DRAW_MODULE_EFFECT_WINDOW
; #DIM CONST WND_WIDTH  = 26
; #DIM CONST WND_HEIGHT = 18
#DIM CONST W_WIDTH  = 1400
#DIM CONST W_HEIGHT = 1800
#DIM POS_X = 7250
#DIM POS_Y = 10
#DIM DYNAMIC WINDOW_ID
#DIM DYNAMIC L_CNT

#DIMS DYNAMIC MAP
#DIM  DYNAMIC MODULE_IDX
#DIM  DYNAMIC EFFECTNUM
#DIMS DYNAMIC EFFECT_NAME, HO_MAX_EFFECTNUM
#DIM  DYNAMIC BTN_ID
#DIM  F_COL

MODULE_IDX = C_COND_MAP_GET(MASTER, "設備IDX")
MAP '= @"MAP_{MODULE_IDX}_MODULE_EFFECT"
MAP_SIZE MAP
SIF RESULT <= 0
    RETURN
EFFECTNUM = RESULT
MAP_GETKEYS MAP, EFFECT_NAME, 1
; CALL WndMgr_VacantId()
; WINDOW_ID = RESULT

VARS TEXT
VARS HTML
TEXT += CONV_TAG2H(@"@S:1@設備効果@/S@")
TEXT += @"
"

IF HO_DRAW_MAP_IS_ROOM_EFFECT_DRAW == 1
    ;エリア効果ウィンドウを表示している場合は設備効果ウィンドウをその左に表示する
    ; CALL WndMgr_CreateWindow(WINDOW_ID, 120, 0, WND_WIDTH, WND_HEIGHT, 2)
    POS_X = 7250 - W_WIDTH
ELSE
    ; CALL WndMgr_CreateWindow(WINDOW_ID, 144, 0, WND_WIDTH, WND_HEIGHT, 2)
    POS_X = 7250
ENDIF
; CALL WndMgr_WindowTitle( WINDOW_ID, @"設備効果")

FOR LOCAL, 0, EFFECTNUM
    SIF TOINT(MAP_GET(MAP, EFFECT_NAME:LOCAL)) == -1
        CONTINUE
    IF GETVAR(@"EFFECT_COL_%EFFECT_NAME:LOCAL%") != 0
        F_COL = GETVAR(@"EFFECT_COL_%EFFECT_NAME:LOCAL%")
    ELSE
        F_COL = カラー_白
    ENDIF
    ;CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{F_COL}@@B:DUMMY$%ROOM_EFFECT_TOOLTIP(EFFECT_NAME:LOCAL)%@【%EFFECT_NAME:LOCAL%】@/B@@/C@")
    TEXT += CONV_TAG2H(@"@C:{F_COL}@@B:DUMMY$%ROOM_EFFECT_TOOLTIP(EFFECT_NAME:LOCAL)%@【%EFFECT_NAME:LOCAL%】@/B@@/C@")
    TEXT += @"
"
    ; L_CNT ++
NEXT
HTML += @"
%TEXT%
"
HTML_PRINT HTML, 1
RETURN

@HO_DRAW_LOG_WINDOW
; #DIM CONST WND_WIDTH  = 88
; #DIM CONST WND_HEIGHT = 8
; #DIM DYNAMIC WINDOW_ID
#DIM CONST W_WIDTH  = 4500
#DIM W_HEIGHT = 800
#DIM CONST POS_X = 4150
#DIM POS_Y = 1810
#DIM DYNAMIC L_CNT
#DIM DYNAMIC PRINT_LOGNUM
#DIM DYNAMIC LOG_IDX

; CALL WndMgr_VacantId()
; WINDOW_ID = RESULT

IF !HO_DRAW_ログ展開
    ; CALL WndMgr_CreateWindow(WINDOW_ID, 82, 17, WND_WIDTH, WND_HEIGHT, 2)
    W_HEIGHT = 800
    POS_Y = 1810
    PRINT_LOGNUM = 6
ELSE
    ; CALL WndMgr_CreateWindow(WINDOW_ID, 82, 7, WND_WIDTH, WND_HEIGHT + 10, 2)
    W_HEIGHT = 1800
    POS_Y = 810
    PRINT_LOGNUM = HO_MAX_LOGNUM
ENDIF
; CALL WndMgr_WindowTitle( WINDOW_ID, @"ログ")

;ログ出力領域にログ出力
VARS TEXT
VARS HTML
TEXT += CONV_TAG2H(@"@S:1@ログ@/S@")
TEXT += @"
"
IF !HO_DRAW_ログ展開
    LOG_IDX = FINDELEMENT(HO_LOG_MESSAGE, "",,,1)
    SIF LOG_IDX == -1
        LOG_IDX = HO_MAX_LOGNUM
    FOR LOCAL, MAX(0, LOG_IDX - PRINT_LOGNUM), LOG_IDX
        SIF HO_LOG_MESSAGE:LOCAL == ""
            BREAK
        ; CALL WndMgr_TextSet(WINDOW_ID, L_CNT, @"%HO_LOG_MESSAGE:LOCAL%")
        ; L_CNT++
        TEXT += CONV_TAG2H(@"%HO_LOG_MESSAGE:LOCAL%")
        TEXT += @"
"
    NEXT
ELSE
    FOR LOCAL, 0, PRINT_LOGNUM
        SIF HO_LOG_MESSAGE:LOCAL == ""
            BREAK
        ; CALL WndMgr_TextSet(WINDOW_ID, LOCAL, @"%HO_LOG_MESSAGE:LOCAL%")
        TEXT += CONV_TAG2H(@"%HO_LOG_MESSAGE:LOCAL%")
        TEXT += @"
"
    NEXT
ENDIF

HTML += @"
%TEXT%
"

;右下にログ開閉ボタンを印字
TEXT '= ""
IF !HO_DRAW_ログ展開
    ; CALL WndMgr_TextSet(WINDOW_ID, PRINT_LOGNUM, " " * (WND_WIDTH - 12) + @"@B:{HO_ログボタンID}@[展開]@/B@")
    TEXT += CONV_TAG2H(@"@B:{HO_ログボタンID}@[展開]@/B@")
ELSE
    ; CALL WndMgr_TextSet(WINDOW_ID, PRINT_LOGNUM, " " * (WND_WIDTH - 12) + @"@B:{HO_ログボタンID}@[畳む]@/B@")
    TEXT += CONV_TAG2H(@"@B:{HO_ログボタンID}@[畳む]@/B@")
ENDIF
HTML += @"
%TEXT%
"

HTML_PRINT HTML, 1
RETURN

@HO_CREAR_LOG()
VARSET HO_LOG_MESSAGE

@HO_PRINT_LOG(MESSAGE, 時刻非表示 = 0)
#DIMS MESSAGE
#DIM 時刻非表示
#DIMS DYNAMIC CLOCK
#DIM DYNAMIC IDX
IDX = FINDELEMENT(HO_LOG_MESSAGE, "",,,1)
IF IDX == -1
    ARRAYSHIFT HO_LOG_MESSAGE, -1, ""
    IDX = HO_MAX_LOGNUM - 1
ENDIF
CALL HO_GET_STR_CLOCK()
SIF !時刻非表示
    CLOCK '= @"@C:{カラー_注釈}@(%RESULTS%) @/C@"
HO_LOG_MESSAGE:IDX '= @"%CLOCK%%MESSAGE%"

@HO_DRAW_LOG_WINDOW_INPUT(INPUT_VALUE)
#DIM INPUT_VALUE
INPUT_VALUE -= HO_ログボタンID
SELECTCASE INPUT_VALUE
        ;折りたたみ開閉
    CASE 0
        INVERTBIT HO_DRAW_ログ展開, 0
    CASEELSE

ENDSELECT

@QST_DRAW_GMAP_WINDOW
#DIMS DYNAMIC mapRect
#DIM  DYNAMIC idx
#DIM  DYNAMIC node, HO_MAX_ROOMNUM
#DIM  DYNAMIC nodeDID, HO_MAX_ROOMNUM
#DIM  DYNAMIC posX
#DIM  DYNAMIC posY

#DIM  DYNAMIC nodeName
#DIM  DYNAMIC nodeId
#DIM  DYNAMIC nodeColor
#DIM  DYNAMIC btnId

#DIM  DYNAMIC firstLine
#DIM  DYNAMIC iterI
#DIM  DYNAMIC iterJ

#DIM DYNAMIC WINDOW_ID
#DIM CONST WND_WIDTH  = 16
#DIM CONST WND_HEIGHT = 5

;パス描画
CALL QST_DRAW_GMAP_PATH()
;ノード描画
DT_SELECT "GMAPDATA",,, nodeDID
FOR iterI, 0, RESULT
    nodeId = DT_CELL_GET("GMAPDATA", nodeDID:iterI, "NODE_ID", 1)
    CALL HO_GET_MAPDATA(HO_有効マップID, nodeId, "FOG_OF_WAR")
    SIF RESULT == 1
        CONTINUE
    btnId = nodeId + HO_マップボタンID
    posX = DT_CELL_GET("GMAPDATA", nodeDID:iterI, "POS_X", 1)
    posY = DT_CELL_GET("GMAPDATA", nodeDID:iterI, "POS_Y", 1)
    nodeColor = nodeId == HO_MASTER現在地 ? カラー_赤 # ME_nodeBaseColor
    HTML_PRINT @"
<button value='{btnId}'>[◆:{nodeId}]</button>
", 1
NEXT

mapRect '= @"rect='5px, 0px, {ME_gmapSize_x}px, {ME_gmapSize_y}px'"
HTML_PRINT @"

", 1
IF !QST_HIDE_PATH
    HTML_PRINT @"

", 1
ENDIF

CALL WndMgr_DestroyWindow(-1)
CALL HO_DRAW_MODULE_WINDOW
SIF HO_DRAW_MAP_MODULE_SLOT_NUM > 8
    CALL HO_DRAW_SCROLL_WINDOW
CALL HO_DRAW_ROOM_EFFECT_WINDOW
CALL HO_DRAW_MODULE_EFFECT_WINDOW
CALL HO_DRAW_LOG_WINDOW
CALL NEWLINE(26)
;CALL WndMgr_DisplayAll()

@QST_DRAW_GMAP_PATH
#DIM DYNAMIC nodeFrom
#DIM DYNAMIC nodeTo
#DIM DYNAMIC nodeToDid
#DIMS DYNAMIC listNodeFrom
#DIMS DYNAMIC listNodeTo
#DIM DYNAMIC iterI
#DIM DYNAMIC iterJ
#DIM DYNAMIC idx, HO_MAX_ROOMNUM
#DIM fromPosX
#DIM fromPosY
#DIM toPosX
#DIM toPosY

;描画用の領域を作成
GDISPOSE gmap_PathGid
GCREATE gmap_PathGid, ME_gmapSize_x, ME_gmapSize_y
GSETPEN gmap_PathGid, TOINT(@"0x%CVH(ME_pathAlpha)%000000") + ME_pathColor, 2

DT_SELECT "GMAPDATA",, "NODE_ID ASC", idx
IF RESULT
    FOR iterI, 0, RESULT
        nodeFrom = DT_CELL_GET("GMAPDATA", idx:iterI, "NODE_ID", 1)
        CALL HO_GET_MAPDATA(HO_有効マップID, nodeFrom, "FOG_OF_WAR")
        SIF RESULT == 1
            CONTINUE
        CALL HO_GET_PATH(nodeFrom)
        listNodeFrom = %RESULTS%
        fromPosX = DT_CELL_GET("GMAPDATA", idx:iterI, "POS_X", 1)
        fromPosY = DT_CELL_GET("GMAPDATA", idx:iterI, "POS_Y", 1)
        FOR iterJ, 0, LIST_COUNT(listNodeFrom)
            nodeTo = TOINT(LIST_GET(listNodeFrom, iterJ))
            CALL HO_GET_MAPDATA(HO_有効マップID, nodeTo, "FOG_OF_WAR")
            SIF RESULT == 1
                CONTINUE
            IF nodeTo > nodeFrom
                DT_SELECT "GMAPDATA",@"NODE_ID = {nodeTo}"
                IF RESULT
                    nodeToDid = RESULT:1
                    toPosX = DT_CELL_GET("GMAPDATA", nodeToDid, "POS_X", 1)
                    toPosY = DT_CELL_GET("GMAPDATA", nodeToDid, "POS_Y", 1)
                    GDRAWLINE gmap_PathGid, fromPosX + (ME_NodeSize/2) - 4, fromPosY + (ME_NodeSize/2), toPosX + (ME_NodeSize/2) - 4, toPosY + (ME_NodeSize/2)
                ENDIF
            ENDIF
        NEXT
    NEXT
ELSE
    RETURN 0
ENDIF

;スプライト更新
SIF SPRITECREATED("GMAP_PATH")
    SPRITEDISPOSE "GMAP_PATH"
SPRITECREATE "GMAP_PATH", gmap_PathGid


code:
;-------------------------------------------------
;ゲストモブ生成処理
;-------------------------------------------------
@HO_CREATE_GUEST(ROOM_IDX, GUEST_TYPE, PRESET_NAME, SEX)
#DIM ROOM_IDX
#DIMS GUEST_TYPE
#DIMS PRESET_NAME
#DIM SEX
#DIM DYNAMIC IDX
#DIM DYNAMIC CHARA_ID

;女性の場合コンフィグ値に応じてふたなり化
IF SEX == 1
    SEX = RAND:100 < FLCONFIG:女性ゲストのふたなり率 ? 2 # 1
ENDIF

;DUMMYの場合はキャラリストに登録せず、キャラを生成してキャラIDを返却するのみ
IF GUEST_TYPE == "DUMMY"
    CALL CREATE_GUEST_MOB_PRESET(PRESET_NAME, SEX)
    RETURN RESULT
ENDIF

;キャラを生成してキャラリストの空き番号に登録する
FOR IDX, 0, VARSIZE("_DIC_HO_CHARALIST")
    ;キャラリストの空き番号が存在する場合
    IF _DIC_HO_CHARALIST:IDX == "-1" || _DIC_HO_CHARALIST:IDX == "DELETED"
        CALL CREATE_GUEST_MOB_PRESET(PRESET_NAME, SEX)
        CHARA_ID = RESULT
        ;キャラリストの最後尾を更新
        IF _DIC_HO_CHARALIST:IDX == "-1" && IDX < MAX_CHARANUM - 1
            _DIC_HO_CHARALIST:(IDX + 1) '= "-1"
        ELSEIF IDX == MAX_CHARANUM - 1
            THROW ERROR:領内活動でのゲストモブ生成数がキャラ上限を超えました
        ENDIF
        ;生成したキャラをキャラリストに登録
        _DIC_HO_CHARALIST:IDX '= @"[CHARA_ID:{CHARA_ID}][ROOM_IDX:{ROOM_IDX}][ACTION:待機][GUEST_TYPE:%GUEST_TYPE%]"
        TFLAG:生成済ゲスト数 ++
        RETURN CHARA_ID
    ENDIF
NEXT

RETURN 0

;-------------------------------------------------
;ユニークキャラクターをゲストとして登場させる
;-------------------------------------------------
@HO_CREATE_UNIQUE_GUEST(CHARA_ID, ROOM_IDX, GUEST_TYPE)
#DIM CHARA_ID
#DIM ROOM_IDX
#DIMS GUEST_TYPE
#DIMS PRESET_NAME
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC IDX

FOR IDX, 0, VARSIZE("_DIC_HO_CHARALIST")
    IF _DIC_HO_CHARALIST:IDX == "-1" || _DIC_HO_CHARALIST:IDX == "DELETED"
        IF _DIC_HO_CHARALIST:IDX == "-1" && IDX < MAX_CHARANUM - 1
            _DIC_HO_CHARALIST:(IDX + 1) '= "-1"
        ELSEIF IDX == MAX_CHARANUM - 1
            THROW ERROR:領内活動でのゲストモブ生成数がキャラ上限を超えました
        ENDIF
        _DIC_HO_CHARALIST:IDX '= @"[CHARA_ID:{CHARA_ID}][ROOM_IDX:{ROOM_IDX}][ACTION:待機][GUEST_TYPE:%GUEST_TYPE%]"
        TFLAG:生成済ゲスト数 ++
        RETURN CHARA_ID
    ENDIF
NEXT

RETURN 0

;クエスト用イベントポーン生成処理
@QST_CREATE_EVENT_PAWN(ROOM_IDX, EVENT_LIST_IDX, ACTION = "待機")
#DIM ROOM_IDX
#DIM EVENT_LIST_IDX
#DIMS ACTION
#DIM DYNAMIC EVENT_ID
#DIM DYNAMIC MEMBER_NUM
#DIM DYNAMIC IDX
#DIM DYNAMIC CHARA_ID

CALL QST_GET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_ID")
EVENT_ID = RESULT

FOR IDX, 0, VARSIZE("_DIC_HO_CHARALIST")
    IF _DIC_HO_CHARALIST:IDX == "-1" || _DIC_HO_CHARALIST:IDX == "DELETED"
        CALL CREATE_GUEST_MOB_PRESET("", 0)
        CHARA_ID = RESULT
        IF _DIC_HO_CHARALIST:IDX == "-1" && IDX < MAX_CHARANUM - 1
            _DIC_HO_CHARALIST:(IDX + 1) '= "-1"
        ELSEIF IDX == MAX_CHARANUM - 1
            THROW ERROR:領内活動でのゲストモブ生成数がキャラ上限を超えました
        ENDIF
        _DIC_HO_CHARALIST:IDX '= @"[CHARA_ID:{CHARA_ID}][ROOM_IDX:{ROOM_IDX}][ACTION:待機][GUEST_TYPE:EVENT_PAWN][ICON:@C:{カラー_赤}@E@/C@][EVENT_LIST_IDX:{EVENT_LIST_IDX}][EVENT_ID:{EVENT_ID}]"
        CFLAG:CHARA_ID:イベントポーン = 1
        CFLAG:CHARA_ID:ゲストモブ = 0
        TFLAG:生成済ゲスト数 ++
        RETURN CHARA_ID
    ENDIF
NEXT

RETURN 1

;-------------------------------------------------
; ゲストモブ離脱処理
;-------------------------------------------------
@HO_LEAVE_GUEST(CHARA_IDX, CHARA_ID)
#DIM CHARA_IDX
#DIM CHARA_ID

CALL HO_STOP_USE_MODULE(CHARA_ID)
CALL HO_PRINT_LOG(@"@C:{カラー_緑}@%ANAME(CHARA_ID)%%TR("は去っていった")%@/C@")
CFLAG:CHARA_ID:調教参加フラグ = 0
CALL RELEASE_ALL_EQUIP(CHARA_ID)
IF IS_UNIQUE_CHARA(CHARA_ID)
    CFLAG:CHARA_ID:ゲストモブ = 0
ENDIF
CALL HO_DELETE_GUEST(CHARA_IDX)

;キャラリストの登録を消去
@HO_DELETE_GUEST(CHARA_IDX)
#DIM CHARA_IDX
TFLAG:生成済ゲスト数 --
_DIC_HO_CHARALIST:CHARA_IDX '= @"DELETED"

;-------------------------------------------------
;ゲスト用行動決定処理
;-------------------------------------------------
@HO_CHARAACT_DECIDE_ACT_GUEST(CHARA_ID, ROOM_IDX, 行動パターン)
#DIM CHARA_ID
#DIM ROOM_IDX
#DIMS 行動パターン
#DIM DYNAMIC CHARA_IDX
#DIMS DYNAMIC GUEST_TYPE

CALL HO_GET_CHARAIDX(CHARA_ID)
CHARA_IDX = RESULT
CALL HO_GET_CHARADATA(CHARA_IDX, "GUEST_TYPE")
GUEST_TYPE = %RESULTS%

;情事の現場を目撃
IF TCVAR:CHARA_ID:ウフフ目撃フラグ == 1
    RETURN ACT_ウフフ目撃
ENDIF

SELECTCASE GUEST_TYPE
    CASE "買物客"
        RETURN ACT_買物
    CASE "買春客"
        ;疲労からの休憩
        SIF IS_TIRED(CHARA_ID)
            RETURN ACT_休憩
        RETURN ACT_買春
    CASE "宿泊客"
        ;抽選を待たず強制的に実行される行動
        ;睡眠
        IF HO_OCLOCK() > RAND(2400, 2600) && RAND:3
            RETURN ACT_宿泊
        ELSEIF HO_OCLOCK() > 2600
            RETURN ACT_宿泊
        ENDIF
        ;食事
        SIF TCVAR:CHARA_ID:空腹度 >= 300
            RETURN ACT_食事
        ;疲労からの休憩
        SIF IS_TIRED(CHARA_ID) || TCVAR:CHARA_ID:疲労度 >= 150
            RETURN ACT_休憩
        ;行動抽選
        CALL RAND_WT_INIT()
        CALL HO_FIND_MODULE_BY_USAGE("娼館")
        IF RESULTS != "" && HO_OCLOCK() < 2200 && TCVAR:CHARA_ID:買春失敗カウンタ < 3
            IF CFLAG:CHARA_ID:カップル相手キャラID <= 0 && (CFLAG:CHARA_ID:スケベモブ || IS_ESTRUS(CHARA_ID, 4))
                CALL RAND_WT_SET(ACT_買春, 60)
            ENDIF
        ENDIF
        CALL HO_FIND_MODULE_BY_USAGE("商店")
        IF RESULTS != "" && HO_OCLOCK() < 1730
            CALL RAND_WT_SET(ACT_買物, 40)
        ENDIF
        CALL HO_FIND_MODULE_BY_USAGE("飲酒")
        IF RESULTS != ""
            IF HO_OCLOCK() < 1730
                CALL RAND_WT_SET(ACT_飲酒, 40)
            ELSEIF HO_OCLOCK() < 2500
                CALL RAND_WT_SET(ACT_飲酒, 60)
            ENDIF
        ENDIF
        IF CFLAG:CHARA_ID:カップル相手キャラID > 0
            CALL RAND_WT_SET(ACT_逢瀬準備, 60)
        ENDIF
        CALL RAND_WT_SET(ACT_休憩, 40)
        RETURN RAND_WT_RESULT()
ENDSELECT

;-------------------------------------------------
; ゲストモブのキャラクターデータプリセット
;-------------------------------------------------
@CREATE_GUEST_MOB_PRESET(PRESET_NAME = "", SEX)
#DIM SEX
#DIMS PRESET_NAME
#DIMS DYNAMIC MOB_CLASS
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC IS_MALE_VIRGIN
#DIM  DYNAMIC IS_FEMALE_VIRGIN

CALL CREATE_GUEST_MOB_BASE(SEX)
CHARA_ID = RESULT

SELECTCASE PRESET_NAME
    CASE "買物客"
        MOB_CLASS = %S_R("冒険者/商人/村人/旅行者")%
    CASE "冒険者"
        MOB_CLASS = "冒険者"
    CASE "旅行者"
        MOB_CLASS = "旅行者"
    CASE "旅行者"
        MOB_CLASS = "村人"
    CASE "村の子供"
        MOB_CLASS = %S_R("牧童/小姓/徒弟")%
    CASE "観客_街"
        MOB_CLASS = %S_R("冒険者/商人/市民/旅行者")%
    CASE "観客_スラム"
        MOB_CLASS = %S_R("冒険者/ならず者/娼婦/浮浪者/奴隷")%
    CASEELSE
ENDSELECT

TRYCCALLFORM CREATE_MOB_%MOB_CLASS%(CHARA_ID)
CATCH
    NAME:CHARA_ID = %MOB_CLASS%
    CALLNAME:CHARA_ID = %MOB_CLASS%
ENDCATCH

;所持金とキャラ購買意欲の設定
SELECTCASE JOB_NAME:(TALENT:CHARA_ID:職業)
    CASE "資本家", "貴族"
        CFLAG:CHARA_ID:キャラ消費金額 = RAND(24, 48) * 1000
        CFLAG:CHARA_ID:キャラ購買意欲 = RAND(20, 40)
    CASE "商人", "貿易商", "魔術師"
        CFLAG:CHARA_ID:キャラ消費金額 = RAND(12, 24) * 1000
        CFLAG:CHARA_ID:キャラ購買意欲 = RAND(20, 40)
    CASE "冒険者", "騎士", "傭兵"
        CFLAG:CHARA_ID:キャラ消費金額 = RAND(6, 10) * 1000
        CFLAG:CHARA_ID:キャラ購買意欲 = RAND(12, 18)
    CASEELSE
        CFLAG:CHARA_ID:キャラ消費金額 = RAND(2, 5) * 1000
        CFLAG:CHARA_ID:キャラ購買意欲 = RAND(12, 18)
ENDSELECT

;商店在庫の設定
IF PRESET_NAME == "買物客"
    CALL CREATE_GUEST_SET_SHOP_STOCK(CHARA_ID)
ENDIF

IS_MALE_VIRGIN = 0
IS_FEMALE_VIRGIN = 0
SIF SEX == 1
    IS_MALE_VIRGIN = -2
SIF SEX == 0 || SEX == 4
    IS_FEMALE_VIRGIN = -2

CALL RANDOM_CHARA_REPRODUCTION_SETTING(CHARA_ID, PRESET_NAME, IS_MALE_VIRGIN, IS_FEMALE_VIRGIN)

; Translate generic mob, if applicable
NAME:CHARA_ID = %TR(NAME:CHARA_ID)%
CALLNAME:CHARA_ID = %TR(CALLNAME:CHARA_ID)%

RETURN CHARA_ID

; #region @CREATE_GUEST_MOB_BASE
@CREATE_GUEST_MOB_BASE(SEX)
#DIM SEX
#DIMS PRESET_NAME
#DIM 対象
#DIMS 名前
#DIM SKILL_LV

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

NO:対象 = GET_EMPTY_NO()
NAME:対象 '= "ゲスト"
CALLNAME:対象 '= "ゲスト"
TALENT:対象:処女 = 0
TALENT:対象:キス未経験 = 0
TALENT:対象:童貞 = 0
TALENT:対象:アナル処女 = 0
CSTR:対象:0 =
CSTR:対象:1 =
TALENT:対象:性別 = SEX
ABL:対象:戦闘 =  RAND(35, 50)
ABL:対象:性知識 = 3
ABL:対象:奉仕 = 1
ABL:対象:性技 = RAND(0, 4)
ABL:対象:欲望 = RAND(3, 7)
ABL:対象:性交 = RAND(3, 5)
IF HAS_PENIS(対象)
    ABL:対象:射精 = RAND(3, 5)
ENDIF
ABL:対象:サド = RAND(0, 3)
ABL:対象:主導度Ｕ = RAND(-500, 500)
ABL:対象:倒錯度 = RAND(-300, 300)
CFLAG:対象:慰安モブ = 1
CFLAG:対象:ゲストモブ = 1
IF RAND:100 < FLCONFIG:ゲストの好色率
    CALL SKILL_GET_LEVEL(MASTER, スキル_大分類_性技, "SEDUCTION")
    SIF RESULT >= 1
        SKILL_LV = RESULT
    MAXBASE:対象:体力 = MAXBASE:対象:体力 * LIMIT(SKILL_LV ,1 , 3)
    BASE:対象:体力 = MAXBASE:対象:体力
    MAXBASE:対象:気力 = MAXBASE:対象:気力 * LIMIT(SKILL_LV ,1 , 3)
    BASE:対象:気力 = MAXBASE:対象:気力
    ABL:対象:倒錯度 =  ABL:対象:倒錯度 * LIMIT(SKILL_LV ,1 , 3)
    ABL:対象:欲望 = ABL:対象:欲望 * LIMIT(SKILL_LV ,1 , 3)
    ABL:対象:性交 = ABL:対象:性交 * LIMIT(SKILL_LV ,1 , 3)
    PALAM:対象:欲情 += RAND(3000)
    CFLAG:対象:スケベモブ = 1
    CFLAG:対象:強制友好化 = 1
    ABL:対象:性知識 = 5
    IF HAS_PENIS(対象)
        ABL:対象:Ｃ感 = RAND(5,30)
        COM_TENDENCY:対象:GETNUM(TRAINNAME, "順番に挿入") = 2
        COM_TENDENCY:対象:GETNUM(TRAINNAME, "代わる代わる挿入") = 3
        ABL:対象:射精 = ABL:対象:射精 * LIMIT(SKILL_LV ,1 , 3)
    ENDIF
ENDIF
IF GROUPMATCH(TALENT:対象:性別, 2, 3)
    IF RAND:100 < 50
        TALENT:対象:両刀 = 1
    ENDIF
ENDIF

IF IS_MALE(対象, 0)
    LOCALS '= S_R("male01.webp/male02.webp/male03.webp/male04.webp")
    CSTR:対象:顔グラファイル名 = %LOCALS%
    CSTR:対象:キャラ顔グラ = %LOCALS%
    CFLAG:対象:ポートレイト画像タイプ = 2
ENDIF

;衣装の設定
CALL RANDOM_CHARA_CLOTH_SETTING(名前, 対象)
FOR LOCAL, 0, CLOTH_PART_NUM
    調教用衣装:対象:(LOCAL) = CLOTH:対象:(LOCAL)
NEXT

RETURN 対象
; #endregion

@CREATE_MOB_冒険者(対象)
#DIM 対象
NAME:対象 '= "Adventurer"
CALLNAME:対象 '= "Adventurer"
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "冒険者")
;固有の素質をここに記述

@CREATE_MOB_商人(対象)
#DIM 対象
NAME:対象 '= "Merchant"
CALLNAME:対象 '= "Merchant"
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "商人")
;固有の素質をここに記述

@CREATE_MOB_村人(対象)
#DIM 対象
NAME:対象 '= "Villager"
CALLNAME:対象 '= "Villager"
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "村人")
;固有の素質をここに記述
FACE_PARTS:対象:IMG_服 '= S_R("CC1_服_平服_0/CC1_服_平服_1/CC1_服_ドレス_0/CC1_服_ドレス_1")
IF !RAND:3
    {
        FACE_PARTS:対象:IMG_アクセサリ1 = %TEXT_RANDC(
            "CC1_アクセサリ1_リボン_2", 1
            ,"CC1_アクセサリ1_リボン_3", 1
            ,"CC1_アクセサリ1_リボン_4", 1
            )%
    }
    COLOR_MATRIX_NAME:対象:IMG_アクセサリ1 = %S_R("白/赤/桃/青/黄/緑")%
ENDIF
@CREATE_MOB_市民(対象)
#DIM 対象
NAME:対象 '= "Citizen"
CALLNAME:対象 '= "Citizen"
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "市民")
;固有の素質をここに記述

@CREATE_MOB_魔術師(対象)
#DIM 対象
NAME:対象 '= "Magician"
CALLNAME:対象 '= "Magician"
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "魔術師")
;固有の素質をここに記述

@CREATE_MOB_貴族(対象)
#DIM 対象
NAME:対象 '= "Noble"
CALLNAME:対象 '= "Noble"
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "貴族")
;固有の素質をここに記述

@CREATE_MOB_資本家(対象)
#DIM 対象
NAME:対象 '= "Capitalist"
CALLNAME:対象 '= "Capitalist"
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "資本家")
;固有の素質をここに記述

@CREATE_MOB_娼婦(対象)
#DIM 対象
#DIMS 名前
IF IS_MALE(対象)
    名前 '= @"%SPLIT_RAND("男娼",1)%"
ELSE
    名前 '= @"%SPLIT_RAND("娼婦",1)%"
ENDIF
NAME:対象 = %名前% (Prositute)
CALLNAME:対象 = %名前% (Prositute)
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "娼婦")
;固有の素質をここに記述
SETBIT TALENT:対象:淫乱系, 素質_淫乱_娼婦

;-------------------------------------------------
;@CREATE_MOB_ならず者
;
;-------------------------------------------------
;region @CREATE_MOB_ならず者
@CREATE_MOB_ならず者(対象)
#DIM 対象
#DIMS 名前
名前 = %S_R("ごろつき/ならず者")%
NAME:対象 = %名前%
CALLNAME:対象 = %名前%
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "無職")
;固有の素質をここに記述
ABL:対象:欲望 = RAND(3, 7)
ABL:対象:性交 = RAND(3, 5)
ABL:対象:サド = RAND(4, 8)
ABL:対象:主導度Ｕ = RAND(300, 600)
ABL:対象:倒錯度 = RAND(300, 600)
SETBIT SEXUAL_PREFERENCE:対象:0, 性的嗜好_虐げたい
COM_TENDENCY:対象:GETNUM(TRAINNAME, "服を破る") = 3
IF HAS_PENIS(対象)
    ABL:対象:射精 = RAND(3, 5)
    COM_TENDENCY:対象:GETNUM(TRAINNAME, "代わる代わる挿入") = 3
    COM_TENDENCY:対象:GETNUM(TRAINNAME, "代わる代わるＡ挿入") = 3
    COM_TENDENCY:対象:GETNUM(TRAINNAME, "順番に挿入") = 3
    COM_TENDENCY:対象:GETNUM(TRAINNAME, "順番にＡ挿入") = 3
ENDIF
IF IS_MALE(対象)
    LOCALS = %S_R("male01/male02/male03/shota01/shota02")%
    CSTR:対象:顔グラファイル名 '= @"%LOCALS%.webp"
    CSTR:対象:キャラ顔グラ '= @"%LOCALS%.webp"
    CFLAG:対象:ポートレイト画像タイプ = 2
ENDIF
;#endregion

@CREATE_MOB_浮浪者(対象)
#DIM 対象
#DIMS 名前
名前 = %S_R("浮浪者/乞食")%
NAME:対象 = %名前%
CALLNAME:対象 = %名前%
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "無職")
;固有の素質をここに記述

@CREATE_MOB_奴隷(対象)
#DIM 対象
#DIMS 名前
名前 = %S_R("奴隷")%
NAME:対象 = %名前%
CALLNAME:対象 = %名前%
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "無職")
;固有の素質をここに記述

@CREATE_MOB_旅行者(対象)
#DIM 対象
NAME:対象 '= "Traveler"
CALLNAME:対象 '= "Traveler"
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "市民")
;固有の素質をここに記述

@CREATE_MOB_吟遊詩人(対象)
#DIM 対象
NAME:対象 '= "Bard"
CALLNAME:対象 '= "Bard"
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "吟遊詩人")
;固有の素質をここに記述
TALENT:対象:目立ちたがり = RAND:2 ? 1 # 0
TALENT:対象:舌使い = RAND:3 ? 1 # 0

@CREATE_MOB_踊り子(対象)
#DIM 対象
NAME:対象 '= "Dancer"
CALLNAME:対象 '= "Dancer"
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "踊り子")
;固有の素質をここに記述
TALENT:対象:目立ちたがり = RAND:2 ? 1 # 0
TALENT:対象:美脚 = RAND:3 ? 1 # 0
TALENT:対象:美尻 = RAND:3 ? 1 # 0

;-------------------------------------------------
;@CREATE_MOB_村の子供
;
;-------------------------------------------------
;region @CREATE_MOB_村の子供
@CREATE_MOB_村の子供(対象)
#DIM 対象
#DIMS 名前
名前 = %SPLIT_RAND("牧童の/小姓の/徒弟の/奴隷の",1)%
IF IS_MALE(対象)
    名前 += @"%SPLIT_RAND("少年",1)%"
ELSE
    名前 += @"%SPLIT_RAND("少女/娘",1)%"
ENDIF

NAME:対象 = %名前%
CALLNAME:対象 = %名前%
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "村人")
;固有の素質をここに記述
TALENT:対象:キス未経験 = 1
IF IS_MALE(対象)
    TALENT:対象:童貞 = 1
ELSE
    TALENT:対象:処女 = 1
ENDIF
TALENT:対象:幼稚 = 1
TALENT:対象:アナル処女 = 1
TALENT:対象:体格 = 体格_小柄
;体格値再設定
CALL SET_BODYSIZE(対象)

IF IS_MALE(対象, 0)
    LOCALS = %S_R("male01/shota01/shota02/shota03/shota04")%
    CSTR:対象:顔グラファイル名 '= @"%LOCALS%.webp"
    CSTR:対象:キャラ顔グラ '= @"%LOCALS%.webp"
    CFLAG:対象:ポートレイト画像タイプ = 2
ENDIF
;#endregion

;-------------------------------------------------
;@CREATE_MOB_メスガキ
;-------------------------------------------------
;region @CREATE_MOB_メスガキ
@CREATE_MOB_メスガキ(対象)
#DIM  対象
#DIMS 名前
名前 = %S_R("Brat")%
NAME:対象 = %名前%
CALLNAME:対象 = %名前%
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "無職")

;固有の素質をここに記述
ABL:対象:サド = RAND(4, 8)
ABL:対象:マゾ = RAND(1, 4)
ABL:対象:主導度Ｕ = RAND(300, 600)
ABL:対象:倒錯度 = RAND(0, 300)
ABL:対象:性知識 = RAND(1, 4)
SETBIT SEXUAL_PREFERENCE:対象:0, 性的嗜好_虐げたい
TALENT:対象:プライド高い = 1
TALENT:対象:生意気 = 1
TALENT:対象:小悪魔 = 1
TALENT:対象:幼稚 = 1
TALENT:対象:体格 = 体格_小柄
TALENT:対象:アナル処女 = 1

;体格値再設定
CALL SET_BODYSIZE(対象)

;ポートレイト
FACE_PARTS:対象:IMG_服 '= "CC1_服_ロリータドレス_1"
FACE_PARTS:対象:IMG_アクセサリ1 = %S_R("/CC1_アクセサリ1_リボン_0/CC1_アクセサリ1_リボン_1/CC1_アクセサリ1_リボン_2/CC1_アクセサリ1_リボン_3/CC1_アクセサリ1_コサージュ_2")%
COLOR_MATRIX_NAME:対象:IMG_服 = %S_R("白/赤/桃")%
COLOR_MATRIX_NAME:対象:IMG_アクセサリ1 = %S_R("白/赤/桃")%

;#endregion

;-------------------------------------------------
;@CREATE_MOB_淫魔
;-------------------------------------------------
;region @CREATE_MOB_淫魔
@CREATE_MOB_淫魔(対象)
#DIM  対象
#DIMS 名前
名前 = %S_R("淫魔")%
NAME:対象 = %名前%
CALLNAME:対象 = %名前%
TALENT:対象:職業 = FINDELEMENT(JOB_NAME, "無職")

;固有の素質をここに記述
ABL:対象:サド = RAND(4, 8)
ABL:対象:マゾ = RAND(1, 4)
ABL:対象:主導度Ｕ = RAND(300, 600)
ABL:対象:倒錯度 = RAND(300, 600)
ABL:対象:性知識 = RAND(3, 4)
SETBIT SEXUAL_PREFERENCE:対象:0, 性的嗜好_虐げたい
SETBIT SEXUAL_PREFERENCE:対象:0, 性的嗜好_性交したい
SETBIT SEXUAL_PREFERENCE:対象:0, 性的嗜好_性交されたい
TALENT:対象:プライド高い = 1
TALENT:対象:生意気 = 1
TALENT:対象:小悪魔 = 1
TALENT:対象:謎の魅力 = 1
TALENT:対象:絶倫 = 1
TALENT:対象:両刀 = 1

;体格値再設定
CALL SET_BODYSIZE(対象)

;ポートレイト
IF !RAND:3
    COLOR_MATRIX_NAME:対象:IMG_身体 '= "褐色"
    COLOR_MATRIX_NAME:対象:IMG_顔 '= "褐色"
ENDIF

IF IS_FEMALE(対象)
    ;顔
    VARS パターン
    ;目
    パターン = %S_R("1/2/5/6/7")%
    FACE_PARTS:対象:IMG_瞳 '= @"CC1_瞳_%パターン%"
    FACE_PARTS:対象:IMG_目 '= @"CC1_目_%パターン%"
    ;口
    パターン = %S_R("0/0/0/1/2/3/4")%
    FACE_PARTS:対象:IMG_口 '= @"CC1_口_%パターン%"
    ;眉
    パターン = %S_R("0/0/0/3/4/5")%
    FACE_PARTS:対象:IMG_眉 '= @"CC1_眉_%パターン%"
    ;外装
    FACE_PARTS:対象:IMG_服 '= @"%S_R("CC1_服_ロリータドレス_1/CC1_服_下着_3/CC1_服_下着_4")%"
    FACE_PARTS:対象:IMG_アクセサリ1 = %S_R("/CC1_アクセサリ1_リボン_0/CC1_アクセサリ1_リボン_1/CC1_アクセサリ1_リボン_2/CC1_アクセサリ1_リボン_3/CC1_アクセサリ1_コサージュ_2")%
    FACE_PARTS:対象:IMG_頭部位 = %S_R("CC1_頭部位_ケモミミ_4/CC1_頭部位_ケモミミ_6")%
    FACE_PARTS:対象:IMG_背面 = %S_R("CC1_背面_翼_2/CC1_背面_尻尾_0")%
    COLOR_MATRIX_NAME:対象:IMG_服 = %S_R("赤/桃/黒")%
    COLOR_MATRIX_NAME:対象:IMG_アクセサリ1 = %S_R("白/赤/桃")%
ELSE
    ;男性はデフォルトでポートレイトなしのため再生成
    CALL RANDOM_CHARA_CREATE_PORTRAIT(対象)
    ;前髪
    パターン = %S_R("0/1/2/3/4/7/10/11/12/13/14/15/16/17/18/21/22")%
    FACE_PARTS:対象:IMG_前髪 = %@"CC1_前髪_%パターン%"%
    ;後髪
    パターン = %S_R("0/6/8/10")%
    FACE_PARTS:対象:IMG_後髪 = %@"CC1_後髪_%パターン%"%
    ;目
    パターン = %S_R("1/2/5/6")%
    FACE_PARTS:対象:IMG_瞳 '= @"CC1_瞳_%パターン%"
    FACE_PARTS:対象:IMG_目 '= @"CC1_目_%パターン%"
    ;口
    パターン = %S_R("0/0/0/1/2/3/4")%
    FACE_PARTS:対象:IMG_口 '= @"CC1_口_%パターン%"
    ;眉
    パターン = %S_R("0/0/0/1")%
    FACE_PARTS:対象:IMG_眉 '= @"CC1_眉_%パターン%"
    IF パターン == "1"
        COLOR_MATRIX_NAME:対象:IMG_眉 = %COLOR_MATRIX_NAME:対象:IMG_前髪%
    ENDIF
    FACE_PARTS:対象:IMG_服 '= @""
    FACE_PARTS:対象:IMG_頭部位 = %S_R("CC1_頭部位_ケモミミ_4/CC1_頭部位_ケモミミ_6")%
    FACE_PARTS:対象:IMG_背面 = %S_R("CC1_背面_翼_2/CC1_背面_尻尾_0")%
ENDIF

;#endregion


code:
;-------------------------------------------------
; ゲストの商店在庫
;-------------------------------------------------
@CREATE_GUEST_SET_SHOP_STOCK(CHARA_ID)
#DIM CHARA_ID
#DIM DYNAMIC ITEM_ID
#DIM DYNAMIC SHOP_STOCK
#DIM DYNAMIC PRICE
#DIM DYNAMIC IDX

;初期化
VARSET DICS_GUEST_SHOP_STOCK:CHARA_ID:0

SELECTCASE JOB_NAME:(TALENT:CHARA_ID:職業)
    CASE "村人", "農民"
        ; #region
        ITEM_ID = ITEM_小麦
        SHOP_STOCK = RAND(3, 9)
        CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
        PRICE = FTIMES(RESULT, 200)
        DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        SELECTCASE RAND:3
            CASE 0
                ITEM_ID = ITEM_動物の卵
                SHOP_STOCK = RAND(3, 9)
                CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
                PRICE = FTIMES(RESULT, 200)
                DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
            CASE 1
                ITEM_ID = ITEM_肥料
                SHOP_STOCK = RAND(2, 4)
                CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
                PRICE = FTIMES(RESULT, 200)
                DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
            CASE 2
                ITEM_ID = ITEM_動物の革
                SHOP_STOCK = RAND(3, 9)
                CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
                PRICE = FTIMES(RESULT, 200)
                DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDSELECT
        IF RAND:100 < 25
            ITEM_ID = ITEM_サンドウィッチ
            SHOP_STOCK = RAND(1, 3)
            CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
            PRICE = FTIMES(RESULT, 200)
            DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDIF
        IF RAND:100 < 15
            ITEM_ID = ITEM_ディナリア銀貨
            SHOP_STOCK = RAND(1, 3)
            CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
            PRICE = FTIMES(RESULT, 250)
            DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDIF
        IF RAND:100 < 45
            ITEM_ID = ITEM_チーズ
            SHOP_STOCK = RAND(1, 3)
            CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
            PRICE = FTIMES(RESULT, 250)
            DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDIF
		SELECTCASE HO_SEASON()
			CASE 0
				IF RAND:100 < 50
					ITEM_ID = ITEM_キャベツ
				ELSE
					ITEM_ID = ITEM_ニンニク
				ENDIF
			CASE 1
				IF RAND:100 < 50
					ITEM_ID = ITEM_トマト
				ELSE
					ITEM_ID = ITEM_カボチャ
				ENDIF
			CASE 2
				IF RAND:100 < 50
					ITEM_ID = ITEM_ニンジン
				ELSE
					ITEM_ID = ITEM_タマネギ
				ENDIF
			CASE 3
				IF RAND:100 < 50
					ITEM_ID = ITEM_カブ
				ELSE
					ITEM_ID = ITEM_ネギ
				ENDIF
		ENDSELECT
		SHOP_STOCK = RAND(3, 9)
		CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
		PRICE = FTIMES(RESULT, 200)
		DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
		;村人限定の品物
		IF JOB_NAME:(TALENT:CHARA_ID:職業) == "村人"
			IF RAND:100 < 25 && FLAG:領地評判_商業 >= 150
				ITEM_ID = ITEM_鮮肉の大塊
				SHOP_STOCK = RAND(1, 2)
				CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
				PRICE = FTIMES(RESULT, 200)
				DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
			ENDIF
		ENDIF
        ; #endregion
    CASE "商人", "冒険者"
        ; #region
        ;確定枠
        SELECTCASE RAND:4
            CASE 0
                ITEM_ID = ITEM_鉄鉱石
                SHOP_STOCK = RAND(3, 9)
                CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
                PRICE = FTIMES(RESULT, 200)
                DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
            CASE 1
                ITEM_ID = ITEM_銀鉱石
                SHOP_STOCK = RAND(3, 6)
                CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
                PRICE = FTIMES(RESULT, 300)
                DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
            CASE 2
                ITEM_ID = ITEM_鋼インゴット
                SHOP_STOCK = RAND(3, 9)
                CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
                PRICE = FTIMES(RESULT, 300)
                DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
            CASE 3
                ITEM_ID = ITEM_建築資材
                SHOP_STOCK = RAND(3, 9)
                CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
                PRICE = FTIMES(RESULT, 300)
                DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDSELECT
        ;ランダム枠
        IF RAND:100 < 50
            ITEM_ID = ITEM_金属細工
            SHOP_STOCK = RAND(6, 9)
            CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
            PRICE = FTIMES(RESULT, 300)
            DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDIF
        IF RAND:100 < 50
            ITEM_ID = ITEM_蒸留酒
            SHOP_STOCK = RAND(3, 6)
            CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
            PRICE = FTIMES(RESULT, 300)
            DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDIF
        IF RAND:100 < 50
            ITEM_ID = ITEM_岩塩
            SHOP_STOCK = RAND(3, 6)
            CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
            PRICE = FTIMES(RESULT, 300)
            DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDIF
        IF RAND:100 < 20
            ITEM_ID = ITEM_金鉱石
            SHOP_STOCK = RAND(3, 6)
            CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
            PRICE = FTIMES(RESULT, 300)
            DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDIF
        IF RAND:100 < 25
            ITEM_ID = ITEM_石炭
            SHOP_STOCK = RAND(3, 6)
            CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
            PRICE = FTIMES(RESULT, 300)
            DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDIF
        IF RAND:100 < 25
            ITEM_ID = ITEM_火薬
            SHOP_STOCK = RAND(3, 6)
            CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
            PRICE = FTIMES(RESULT, 300)
            DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDIF
        IF RAND:100 < 35
            ITEM_ID = ITEM_バター
            SHOP_STOCK = RAND(3, 6)
            CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
            PRICE = FTIMES(RESULT, 300)
            DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
        ENDIF
		;商人限定の品物
		IF JOB_NAME:(TALENT:CHARA_ID:職業) == "商人"
			IF RAND:100 < 75 && FLAG:領地評判_商業 >= 150
				ITEM_ID = ITEM_レッドペッパー
				SHOP_STOCK = RAND(3, 6)
				CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
				PRICE = FTIMES(RESULT, 300)
				DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
			ENDIF
			IF RAND:100 < 45 && FLAG:領地評判_商業 >= 250
				ITEM_ID = ITEM_東方スパイス
				SHOP_STOCK = RAND(2, 4)
				CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
				PRICE = FTIMES(RESULT, 150)
				DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
			ENDIF
		ENDIF
		;冒険者限定の品物
		IF JOB_NAME:(TALENT:CHARA_ID:職業) == "冒険者"
			IF RAND:100 < 25 && FLAG:領地評判_商業 >= 250
				ITEM_ID = ITEM_竜の肉
				SHOP_STOCK = RAND(1, 3)
				CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
				PRICE = FTIMES(RESULT, 200)
				DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
			ENDIF
		ENDIF
        IF CFLAG:CHARA_ID:スケベモブ
            IF RAND:100 < 75
                ITEM_ID = TOINT(S_R(@"{ITEM_ローション}/{ITEM_コンドーム}"))
                SHOP_STOCK = RAND(6, 9)
                CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
                PRICE = FTIMES(RESULT, 300)
                DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
            ENDIF
            IF RAND:100 < 40
                ITEM_ID = TOINT(S_R(@"{ITEM_オナホール}/{ITEM_ローター}/{ITEM_バイブ}/{ITEM_アナルバイブ}"))
                SHOP_STOCK = 1
                CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
                PRICE = FTIMES(RESULT, 300)
                DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
            ENDIF
            IF RAND:100 < 25
                ITEM_ID = TOINT(S_R(@"{ITEM_ニプルキャップ}/{ITEM_クリキャップ}"))
                SHOP_STOCK = 1
                CALL GET_ITEM_INFO(ITEM_ID, ITEM_PRICE)
                PRICE = FTIMES(RESULT, 300)
                DICS_GUEST_SHOP_STOCK:CHARA_ID:(IDX++) '= @"[ITEM_ID:{ITEM_ID}][ITEM_PRICE:{PRICE}][SHOP_STOCK:{SHOP_STOCK}]"
            ENDIF
        ENDIF
        ; #endregion
ENDSELECT


code:
;-------------------------------------------------
; 宿場関連のNPC処理
;-------------------------------------------------
; #region
;-------------------------------------------------
; ゲスト生成処理
;店番中のキャラが居るなら宿場のあるエリアにゲストの生成を試みる
;-------------------------------------------------
; #region
@HO_CREATE_GUEST_INN
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC CHARA_ID_COUPLE
#DIMS DYNAMIC LIST_CHARA
#DIMS DYNAMIC PRESET_NAME
#DIM  DYNAMIC VISITOR_NUM
#DIM  DYNAMIC ROOM_IDX
#DIM  DYNAMIC SHOPPER_ID
#DIM  DYNAMIC PROFIT
#DIM  DYNAMIC LIKE
#DIM  DYNAMIC DEPENDENCE
#DIM  DYNAMIC SUBORDINATE
#DIM  DYNAMIC DOMINANCE

;買物目的のモブ生成は8:30～21:00時まで
SIF !INRANGE(HO_TIME, HO_CLOCK(830), HO_CLOCK(2100))
    RETURN 0

CALL HO_FIND_CHARA("ACTION", "宿番中")
IF !RESULT
    CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "宿番")
    IF RESULT
        LIST_CHARA = %LIST_ADD(LIST_CHARA, TOSTR(MASTER))%
    ELSE
        RETURN 0
    ENDIF
ELSE
    LIST_CHARA = %RESULTS%
ENDIF
SHOPPER_ID = TOINT(LIST_GET(LIST_CHARA, 0))
IF SHOPPER_ID != MASTER
    CALL HO_GET_CHARAPLACE(SHOPPER_ID)
    ROOM_IDX = RESULT
ELSE
    ROOM_IDX = HO_MASTER現在地
ENDIF

;モブ生成判定
LIST_CHARA '= ""
;通常の宿泊客
IF !(RAND:100 < FLCONFIG:カップル客の生成率)
    FOR LOCAL, 0, RAND(1, 3)
        CALL HO_CREATE_GUEST(ROOM_IDX, "宿泊客", "買物客", RAND:100 < FLCONFIG:宿泊ゲストの男性率 ? 0 # 1)
        IF RESULT
            CHARA_ID = RESULT
            SIF IS_FEMALE(CHARA_ID)
                CFLAG:CHARA_ID:汎用口上パターン = 1000
            LIST_CHARA = %LIST_ADD(LIST_CHARA, TOSTR(CHARA_ID))%
        ENDIF
    NEXT
    ;カップル
ELSE
    PRESET_NAME = %S_R("冒険者/旅行者/村人")%
    ;カップルの性別決定
    VARI SEX_MAIN_CHARA = 0
    VARI SEX_COUPLE_CHARA = 1
    IF RAND:100 < FLCONFIG:同性カップル客の生成率
        ;同性カップル
        SEX_MAIN_CHARA = FLCONFIG:宿泊ゲストの男性率 ? 0 # 1
        IF (SEX_MAIN_CHARA == 0 && FLCONFIG:男性同性カップルの許可) || (SEX_MAIN_CHARA == 1 && FLCONFIG:女性同性カップルの許可)
            SEX_COUPLE_CHARA = SEX_MAIN_CHARA
        ELSE
            ;いずれの同性カップルも生成出来ないなら異性カップルとして生成
            SEX_MAIN_CHARA = 0
            SEX_COUPLE_CHARA = 1
        ENDIF
    ENDIF
    ;男性を生成
    CALL HO_CREATE_GUEST(ROOM_IDX, "宿泊客", PRESET_NAME, SEX_MAIN_CHARA)
    IF RESULT
        CHARA_ID = RESULT
        CHARA_ID_COUPLE = RESULT
        IF IS_FEMALE(CHARA_ID)
            CFLAG:CHARA_ID:汎用口上パターン = 1000
        ENDIF
        LIST_CHARA = %LIST_ADD(LIST_CHARA, TOSTR(CHARA_ID))%
        NAME:CHARA_ID '= @"%PRESET_NAME%(彼氏)"
        CALLNAME:CHARA_ID '= "%PRESET_NAME%(彼氏)"
    ENDIF
    ;女性を生成
    CALL HO_CREATE_GUEST(ROOM_IDX, "宿泊客", PRESET_NAME, SEX_COUPLE_CHARA)
    IF RESULT
        CHARA_ID = RESULT
        IF IS_FEMALE(CHARA_ID)
            CFLAG:CHARA_ID:汎用口上パターン = 1000
        ENDIF
        LIST_CHARA = %LIST_ADD(LIST_CHARA, TOSTR(CHARA_ID))%
        NAME:CHARA_ID '= @"%PRESET_NAME%(彼女)"
        CALLNAME:CHARA_ID '= @"%PRESET_NAME%(彼女)"
    ENDIF

    ;カップル関係を設定
    CFLAG:CHARA_ID:カップル相手キャラID = CHARA_ID_COUPLE
    CFLAG:CHARA_ID_COUPLE:カップル相手キャラID = CHARA_ID

    ;同性用補正
    IF IS_SAMESEX(CHARA_ID, CHARA_ID_COUPLE)
        IF IS_FEMALE(CHARA_ID)
            ABL:CHARA_ID:レズ = 6
            ABL:CHARA_ID_COUPLE:レズ = 6
        ELSE
            ABL:CHARA_ID:ＢＬ = 6
            ABL:CHARA_ID_COUPLE:ＢＬ = 6
        ENDIF
    ENDIF

    ;欲情を追加
    PALAM:(CHARA_ID):欲情 += RAND(3000)
    PALAM:(CHARA_ID_COUPLE):欲情 += RAND(3000)

    ;;kom1 memo:V0.372時点ではモブ同士は関係性を持たないが、セット処理は残しておく
    ;好感度
    LIKE = RAND(1500, 10000)
    ;依存度
    DEPENDENCE = RAND(300, 3000)
    ;従属度
    SUBORDINATE = RAND(1500, 10000)
    ;支配度
    DOMINANCE = RAND(1500, 10000)

    CALL CHARA_RELATION_CHANGE(CHARA_ID, CHARA_ID_COUPLE, LIKE, DEPENDENCE, SUBORDINATE, DOMINANCE * -1)
    CALL CHARA_RELATION_CHANGE(CHARA_ID_COUPLE, CHARA_ID, LIKE, DEPENDENCE, SUBORDINATE * -1, DOMINANCE)

ENDIF

VISITOR_NUM = LIST_COUNT(LIST_CHARA)
IF VISITOR_NUM
    ;カップルの場合
    IF CFLAG:CHARA_ID:カップル相手キャラID > 0
        CALL HO_PRINT_LOG(@"@C:{カラー_緑}@%PRESET_NAME%%TR("のカップルが宿泊しにやって来た")%@/C@")
    ELSE
        CALL HO_PRINT_LOG(@"@C:{カラー_緑}@%ANAME(LIST_GETINT(LIST_CHARA, 0), VISITOR_NUM)%%TR("が宿泊しにやって来た")%@/C@")
    ENDIF

    CALL HO_GUEST_REGIST_TO_ROOM_AS_VISITOR(LIST_CHARA)
    ;宿泊に失敗
    IF !RESULT
        FOR LOCAL, 0,VISITOR_NUM
            CHARA_ID = LIST_GETINT(LIST_CHARA, LOCAL)
            CFLAG:CHARA_ID:キャラ滞在時間 = RAND(8, 12) * HO_単位時間
        NEXT
        RETURN 0
    ENDIF
    ;宿泊に成功
    ;宿泊目的のゲストは宿泊先が確保できているなら時間が許す限り滞在する
    FOR LOCAL, 0,VISITOR_NUM
        CFLAG:CHARA_ID:キャラ滞在時間 = 9999
        PROFIT += 4000
    NEXT
    CALL HO_PRINT_LOG(@"%ANAME(CHARA_ID, VISITOR_NUM)%から宿代として@C:{カラー_緑}@%TOSTR(PROFIT, "#,##0")%@/C@ディナリを得た")
    MONEY += PROFIT
    RETURN 1
ELSE
    RETURN 0
ENDIF
; #endregion

;-------------------------------------------------
@HO_GUEST_REGIST_TO_ROOM_AS_VISITOR(LIST_CHARA)
#DIMS LIST_CHARA
#DIM  DYNAMIC MODULE_IDX
#DIM  DYNAMIC MODULE_ID
#DIM  DYNAMIC MODULE_SLOT_IDX
#DIM  DYNAMIC ROOM_IDX
#DIM  DYNAMIC MODULE_NUM
#DIM  DYNAMIC VISITOR_NUM
#DIMS DYNAMIC LIST_MODULE_IDX
#DIMS DYNAMIC LIST_VISITOR
#DIM  DYNAMIC ITER_I
#DIM  DYNAMIC ITER_J

VISITOR_NUM = LIST_COUNT(LIST_CHARA)
;宿泊する部屋の決定
CALL HO_FIND_MODULE_BY_USAGE("宿泊")
LIST_MODULE_IDX = %RESULTS%
MODULE_NUM = LIST_COUNT(LIST_MODULE_IDX)

;宿泊できる設備がもうない場合
; SIF MODULE_NUM == TFLAG:宿泊客数
;     RETURN 0
FOR ITER_I, 0, MODULE_NUM
    MODULE_IDX = LIST_GETINT(LIST_MODULE_IDX, ITER_I)
    CALL HO_GET_MODULE_LIST(MODULE_IDX, "VISITOR_ID")
    LIST_VISITOR = %RESULTS%
    ;VISITOR登録がない場合は宿泊客としての登録を試みる
    IF !LIST_COUNT(LIST_VISITOR)
        ;キャパシティは足りているか
        CALL HO_GET_MODULE_LIST(MODULE_IDX, "MODULE_ID")
        MODULE_ID = RESULT
        CALL HO_GET_MODULE_LIST(MODULE_IDX, "ROOM_IDX")
        ROOM_IDX = RESULT
        CALL HO_GET_MODULE_LIST(MODULE_IDX, "MODULE_SLOT_IDX")
        MODULE_SLOT_IDX = RESULT
        CALL HO_CHECK_MODULE_CAPACITY(ROOM_IDX, MODULE_SLOT_IDX)
        ;キャパが足りない場合はスキップ
        SIF RESULT < VISITOR_NUM
            CONTINUE
        ;宿泊が可能
        CALL HO_SET_MODULE_LIST(MODULE_IDX, "VISITOR_ID", LIST_CHARA)
        FOR ITER_J, 0, VISITOR_NUM
            TCVAR:(LIST_GETINT(LIST_CHARA, ITER_J)):宿泊先設備IDX = MODULE_IDX
        NEXT
        TFLAG:宿泊客数 ++
        RETURN 1
    ENDIF
NEXT
RETURN 0