code:
;-------------------------------------------------
;売春処理
;@HO_TURN_END_EVENT から呼ばれる
;-------------------------------------------------
; #region @HO_GUEST_BUY_PROSTITUTE
@HO_GUEST_BUY_PROSTITUTE(BUYER_ID, SELLER_ID = -1, FORCE_BUY = 0)
#DIM  BUYER_ID
#DIM  SELLER_ID
#DIM  FORCE_BUY
#DIMS DYNAMIC _LIST_ITEM
#DIMS DYNAMIC _LIST_PROSTITUTE_SELLERS
#DIMS DYNAMIC _LIST_PROSTITUTE_BUYERS
#DIMS DYNAMIC _LIST_SELLERS
#DIMS DYNAMIC _LIST_BUYERS

#DIM  DYNAMIC MODULE_ID
#DIMS DYNAMIC MODULE_NAME
#DIM  DYNAMIC CHARA_IDX
#DIM  DYNAMIC CAPACITY
#DIM  DYNAMIC USER_COUNT
#DIMS DYNAMIC _LIST_MODULE
#DIMS DYNAMIC _LIST_MODULE_OPTIONS
#DIMS DYNAMIC _LIST_FOLLOWERS
#DIM  DYNAMIC SERVICE_CATEGORY
#DIMS DYNAMIC SERVICE_CATEGORY_NAME
#DIMS DYNAMIC OFFERING
#DIM  DYNAMIC TARGET_ID
#DIMS DYNAMIC MODULE_INFO
#DIM  DYNAMIC MODULE_SLOT_IDX
#DIM  DYNAMIC ROOM_IDX
#DIM  DYNAMIC SELLER_NUM
#DIM  DYNAMIC PROFIT, MAX_CHARA_NUM
#DIM  DYNAMIC PROFIT_SUM
#DIM  DYNAMIC PROFIT_SUM_ADJUSTED
#DIM  DYNAMIC PROFIT_BASE
#DIM  DYNAMIC PROFIT_ROOM
#DIM  DYNAMIC PROFIT_SKILL, MAX_CHARA_NUM
#DIM  DYNAMIC PROFIT_TALENT, MAX_CHARA_NUM
#DIM DYNAMIC NEGOTIATION_POINT
#DIM DYNAMIC NEGOTIATION_RATE, MAX_CHARA_NUM

;欲情によって実施確率上昇
IF IS_ESTRUS(BUYER_ID, 3)
    SIF RAND:100 > 60
        RETURN 0
ELSE
    SIF RAND:100 > 30
        RETURN 0
ENDIF

;売春中のキャラ一覧を取得
CALL HO_FIND_CHARA("ACTION", "売春中")
_LIST_PROSTITUTE_SELLERS = %RESULTS%
;MASTERは娼館にいれば売春可能
CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "娼館")
SIF RESULT
    _LIST_PROSTITUTE_SELLERS = %LIST_ADD(_LIST_PROSTITUTE_SELLERS, TOSTR(MASTER))%

;売春中のキャラが存在しない場合
SIF !LIST_COUNT(_LIST_PROSTITUTE_SELLERS)
    RETURN 0

;売春中のキャラからランダムで対象を2人まで選出
FOR LOCAL, 0, MIN(LIST_COUNT(_LIST_PROSTITUTE_SELLERS), 2)
    SELLER_ID = TOINT(LIST_RAND(_LIST_PROSTITUTE_SELLERS))
    ; キャラが重複した場合は対象に選出しない
    SIF  LIST_INDEXOF(_LIST_SELLERS, TOSTR(SELLER_ID)) >= 0
        CONTINUE
    ;売買春キャラ同士に性的関係が成立する必要がある
    SIF !IS_SEXUAL(BUYER_ID, SELLER_ID)
        CONTINUE
    _LIST_SELLERS = %LIST_ADD(_LIST_SELLERS, TOSTR(SELLER_ID))%
NEXT

;選出キャラが存在しない場合
SIF !LIST_COUNT(_LIST_SELLERS)
    RETURN 0
;MASTERがリストの0番目に来るように並び替える
_LIST_SELLERS = %LIST_SORT(_LIST_SELLERS)%

;同行中キャラを売春対象に選出
IF LIST_GETINT(_LIST_SELLERS, 0) == MASTER && HO_同行者数 > 0
    CALL HO_GET_FOLLOWER_LIST
    _LIST_FOLLOWERS = %RESULTS%
    _LIST_SELLERS = %LIST_ADDLIST(_LIST_SELLERS, _LIST_FOLLOWERS)%
ENDIF

;買春中のキャラからランダムで対象を3人まで選出
_LIST_BUYERS= %LIST_ADD(_LIST_BUYERS, TOSTR(BUYER_ID))%
;買春中のキャラ一覧を取得
CALL HO_FIND_CHARA("ACTION", "買春中")
_LIST_PROSTITUTE_BUYERS = %RESULTS%
FOR LOCAL, 0, MIN(LIST_COUNT(_LIST_PROSTITUTE_BUYERS), 2)
    LOCALS = %LIST_RAND(_LIST_PROSTITUTE_BUYERS)%
    ;選出済のキャラと重複しなかった場合
    IF LIST_INDEXOF(_LIST_BUYERS, LOCALS) == -1
        ;売買春キャラ同士に性的関係が成立する必要がある
        FOR LOCAL:1, 0, LIST_COUNT(_LIST_SELLERS)
            TARGET_ID = TOINT(LIST_GET(_LIST_SELLERS, LOCAL))
            SIF !IS_SEXUAL(TOINT(LOCALS), TARGET_ID)
                BREAK
            ;最終ループに到達
            SIF LOCAL:1 == LIST_COUNT(_LIST_SELLERS) -1
                _LIST_BUYERS= %LIST_ADD(_LIST_BUYERS, LOCALS)%
        NEXT
    ENDIF
NEXT

;売春中のキャラの提供サービス(春をひさぐコマンドで選択)
SELECTCASE COM_OPTION:300
    CASE 0
        OFFERING '= ""
    CASE 1
        OFFERING '= "売春_自慰"
    CASE 2
        OFFERING '= "売春_愛撫"
    CASE 3
        OFFERING '= "売春_手淫"
    CASE 4
        OFFERING '= "売春_口淫"
    CASE 5
        OFFERING '= "売春_本番"
    CASE 6
        OFFERING '= "売春_ハード"
    CASE 7
        OFFERING '= "売春_乱交"
    CASEELSE
        OFFERING '= ""
ENDSELECT

; 乱交条件を満たさない場合
SIF OFFERING == "売春_乱交" && (LIST_COUNT(_LIST_SELLERS) + LIST_COUNT(_LIST_BUYERS) <= 2)
    RETURN 0

;買春で使用する設備を決定する
;-------------------------------------------------
CALL HO_GET_CHARAIDX(BUYER_ID)
CHARA_IDX = RESULT
CALL HO_GET_CHARADATA(CHARA_IDX, "ROOM_IDX")
ROOM_IDX = RESULT
CALL HO_GET_MAPDATA(HO_有効マップID, ROOM_IDX, "MODULE_SLOT")
_LIST_MODULE = %RESULTS%

;利用可能な設備をチェックし候補リストに登録
FOR MODULE_SLOT_IDX, 0, LIST_COUNT(_LIST_MODULE)
    CALL HO_GET_MODULE_ID2(ROOM_IDX, MODULE_SLOT_IDX)
    MODULE_ID = RESULT
    CALL HO_GET_MODULE_DATA(MODULE_ID, "用途")
    MODULE_INFO = %RESULTS%

    ;非売春用設備はスキップ
    IF LIST_INDEXOF(MODULE_INFO, "売春") < 0
        CONTINUE
    ENDIF

    CALL HO_GET_MODULE_DATA(MODULE_ID, "属性")
    MODULE_INFO = %RESULTS%
    IF LIST_INDEXOF(MODULE_INFO, "グローリーホール") >= 0
        ;買春者がペニスを持たない場合はグローリーホールを利用不可
        SIF !HAS_PENIS(BUYER_ID)
            CONTINUE
        ;手淫または口淫以外ではグローリーホールを利用不可
        SIF OFFERING == "売春_自慰" || OFFERING == "売春_愛撫" || OFFERING == "売春_本番" || OFFERING == "売春_ＳＭ" || OFFERING == "売春_自慰"
            CONTINUE
    ENDIF
    ; 設備のキャパシティと利用者数を確認
    CALL HO_CHECK_MODULE_CAPACITY(ROOM_IDX, MODULE_SLOT_IDX)
    CAPACITY = RESULT
    USER_COUNT = RESULT:1
    CALL HO_GET_MODULE_DATA(MODULE_ID, "MODULE_NAME")
    MODULE_NAME = %RESULTS%

    ;属性 個室を含み、キャラが存在する場合は利用不可
    IF LIST_INDEXOF(MODULE_INFO, "個室") >= 0 &&  USER_COUNT > 0
        CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "娼館")
        SIF RESULT
            CALLF TAG_PRINT(@"@C:{カラー_シルバー}@%MODULE_NAME%は利用中だ@/C@", 1)
        PRINTL
        CONTINUE
    ENDIF
    ;定員オーバーの場合は利用不可
    USER_COUNT = LIST_COUNT(_LIST_SELLERS) + LIST_COUNT(_LIST_BUYERS)
    IF CAPACITY < USER_COUNT
        CALL HO_CHECK_USE_MODULE_USAGE(MASTER, "娼館")
        SIF RESULT
            CALLF TAG_PRINT(@"@C:{カラー_シルバー}@%ANAME(BUYER_ID)%は{USER_COUNT}名で交わろうとしたが、%MODULE_NAME%の広さが足りない@/C@", 1)
        PRINTL
        CONTINUE
    ENDIF
    _LIST_MODULE_OPTIONS = %LIST_ADD(_LIST_MODULE_OPTIONS, TOSTR(MODULE_SLOT_IDX))%
NEXT

IF LIST_COUNT(_LIST_MODULE_OPTIONS) > 0
    CALL LIST_SHUFFLE(_LIST_MODULE_OPTIONS)
ELSE
    RETURN 0
ENDIF

;売春で使用する設備を選択
MODULE_SLOT_IDX = TOINT(LIST_GET(_LIST_MODULE_OPTIONS, 0))
CALL HO_GET_MODULE_ID2(ROOM_IDX, MODULE_SLOT_IDX)
MODULE_ID = RESULT
CALL HO_GET_MODULE_DATA(MODULE_ID, "属性")
MODULE_INFO = %RESULTS%

;奉仕カテゴリ決定
;-------------------------------------------------
IF OFFERING == "売春_自慰"
    SELECTCASE RAND(2)
        CASE 0
            SERVICE_CATEGORY = 奉仕_自慰させる
        CASEELSE
            SERVICE_CATEGORY = 奉仕_見抜き
    ENDSELECT
ELSEIF OFFERING == "売春_愛撫"
    SERVICE_CATEGORY =  奉仕_愛撫
ELSEIF OFFERING == "売春_手淫" && HAS_PENIS(BUYER_ID)
    SELECTCASE RAND(2)
        CASE 0
            SERVICE_CATEGORY =  奉仕_手淫
        CASEELSE
            SERVICE_CATEGORY =  奉仕_手コキのみ
    ENDSELECT
ELSEIF OFFERING == "売春_口淫" && HAS_PENIS(BUYER_ID)
    SELECTCASE RAND(3)
        CASE 0
            SERVICE_CATEGORY = 奉仕_口淫
        CASE 1
            SERVICE_CATEGORY = 奉仕_手コキフェラ
        CASEELSE
            SERVICE_CATEGORY =  奉仕_パイズリ
    ENDSELECT
ELSEIF OFFERING == "売春_本番" && (HAS_VAGINA(SELLER_ID) || HAS_PENIS(SELLER_ID))
    SELECTCASE RAND(6)
        CASE 0
            SERVICE_CATEGORY = 奉仕_Ｖ性交
        CASE 1
            SERVICE_CATEGORY = 奉仕_騎乗位のみ
        CASEELSE
            SERVICE_CATEGORY = 奉仕_通常
    ENDSELECT
ELSEIF OFFERING == "売春_ハード"
    SELECTCASE RAND(2)
        CASE 0
            SERVICE_CATEGORY =  奉仕_ＳＭする
        CASE 1
            SERVICE_CATEGORY =  奉仕_ハードコア
    ENDSELECT
ELSE
    SELECTCASE RAND(100)
        CASE IS <15
            SELECTCASE RAND(2)
                CASE 0
                    SERVICE_CATEGORY = 奉仕_自慰させる
                CASEELSE
                    SERVICE_CATEGORY = 奉仕_見抜き
            ENDSELECT
        CASE IS <30
            SERVICE_CATEGORY =  奉仕_愛撫
        CASE IS <45 && HAS_PENIS(BUYER_ID)
            SELECTCASE RAND(5)
                CASE 0
                    SERVICE_CATEGORY = 奉仕_口淫
                CASE 1
                    SERVICE_CATEGORY = 奉仕_手コキフェラ
                CASE 2
                    SERVICE_CATEGORY =  奉仕_手淫
                CASE 3
                    SERVICE_CATEGORY =  奉仕_手コキのみ
                CASEELSE
                    SERVICE_CATEGORY =  奉仕_パイズリ
            ENDSELECT
        CASE IS <60 && HAS_VAGINA(SELLER_ID, 1)
            SELECTCASE RAND(2)
                CASE 0
                    SERVICE_CATEGORY = 奉仕_Ｖ性交
                CASEELSE
                    SERVICE_CATEGORY = 奉仕_騎乗位のみ
            ENDSELECT
        CASE IS <75
            IF HAS_VAGINA(SELLER_ID) || HAS_PENIS(SELLER_ID)
                SERVICE_CATEGORY = 奉仕_通常
            ELSE
                SERVICE_CATEGORY = 奉仕_愛撫
            ENDIF
        CASE IS <90
            SERVICE_CATEGORY =  奉仕_ハードコア
        CASE IS <95
            SERVICE_CATEGORY =  奉仕_ＳＭする
        CASEELSE
            SERVICE_CATEGORY =  奉仕_Ａ性交
    ENDSELECT
ENDIF

SIF LIST_INDEXOF(MODULE_INFO, "グローリーホール") >= 0
    SERVICE_CATEGORY = 奉仕_手コキフェラ

;利益算出処理
;-------------------------------------------------
FOR SELLER_NUM, 0, LIST_COUNT(_LIST_SELLERS)
    SELLER_ID = TOINT(LIST_GET(_LIST_SELLERS, SELLER_NUM))
    PROFIT_BASE = CALC_SERVICE_CATEGORY_PRICE(SERVICE_CATEGORY)

    ;性技による金額補正
    PROFIT_SKILL:SELLER_NUM = FTIMES(PROFIT_BASE, 100 + ABL:SELLER_ID:奉仕 * 5)
    IF GROUPMATCH(SERVICE_CATEGORY, 奉仕_Ｖ性交, 奉仕_騎乗位のみ, 奉仕_Ａ性交)
        PROFIT_SKILL:SELLER_NUM = FTIMES(PROFIT_SKILL:SELLER_NUM, 100 + ABL:SELLER_ID:性交 * 5)
    ELSEIF GROUPMATCH(SERVICE_CATEGORY, 奉仕_自慰させる)
        PROFIT_SKILL:SELLER_NUM = FTIMES(PROFIT_SKILL:SELLER_NUM, 100 + ABL:SELLER_ID:自慰 * 5)
    ELSEIF GROUPMATCH(SERVICE_CATEGORY, 奉仕_ＳＭする)
        PROFIT_SKILL:SELLER_NUM = FTIMES(PROFIT_SKILL:SELLER_NUM, 100 + ABL:SELLER_ID:マゾ * 5)
    ELSE
        PROFIT_SKILL:SELLER_NUM = FTIMES(PROFIT_SKILL:SELLER_NUM, 100 + ABL:SELLER_ID:性技 * 5)
    ENDIF

    ;部屋による金額
    SIF LIST_INDEXOF(MODULE_INFO, "個室") >= 0
        PROFIT_ROOM = 1000

    ;素質による金額
    SIF TALENT:SELLER_ID:処女 == 1
        PROFIT_TALENT:SELLER_NUM += 5000
    SIF TALENT:BUYER_ID:太客
        PROFIT_TALENT:SELLER_NUM += 10000

    ;社交による金額補正
    NEGOTIATION_POINT = ABL:SELLER_ID:社交 - ABL:BUYER_ID:社交
    NEGOTIATION_RATE:SELLER_NUM = 100+(NEGOTIATION_POINT/2)

    ;総額の計算
    PROFIT:SELLER_NUM = FTIMES((PROFIT_SKILL:SELLER_NUM * LIST_COUNT(_LIST_BUYERS)) + PROFIT_ROOM + PROFIT_TALENT:SELLER_NUM, NEGOTIATION_RATE:SELLER_NUM)
    PROFIT_SUM += PROFIT:SELLER_NUM
NEXT

; PROFIT_NEGOTIATION =  FTIMES(PROFIT, NEGOTIATION_RATE)
IF PROFIT_SUM <= 5000
    ; 500単位で切り捨て
    PROFIT_SUM_ADJUSTED = PROFIT_SUM / 500 * 500
ELSE
    ; 1000単位で切り捨て
    PROFIT_SUM_ADJUSTED = PROFIT_SUM / 1000 * 1000
ENDIF

;MASTERなら意思確認
;-------------------------------------------------
$INPUT_LOOP
IF TOINT(LIST_GET(_LIST_SELLERS, 0)) == MASTER
    PRINTFORM %ANAME(BUYER_ID)%は
    SIF LIST_COUNT(_LIST_BUYERS) == 2
        PRINTFORM 傍にいる%ANAME(TOINT(LIST_GET(_LIST_BUYERS, 1)))%と一緒に、
    PRINTFORM %ANAME(MASTER)%
    SIF LIST_COUNT(_LIST_SELLERS) == 2
        PRINTFORM と%ANAME(TOINT(LIST_GET(_LIST_SELLERS, 1)))%
    PRINTL の身体を買いたいと持ちかけてきた
    PRINTL 条件はこうだ
    PRINTFORM 　内容:
    FOR LOCAL, 0, LIST_COUNT(_LIST_SELLERS)
        LOCALS = %LIST_GET(_LIST_SELLERS, LOCAL)%
        SIF LOCAL >0
            PRINT と
        PRINTFORM %ANAME(TOINT(LOCALS))%
    NEXT
    PRINT が
    FOR LOCAL, 0, LIST_COUNT(_LIST_BUYERS)
        LOCALS = %LIST_GET(_LIST_BUYERS, LOCAL)%
        SIF LOCAL >0
            PRINT と
        PRINTFORM %ANAME(TOINT(LOCALS))%
    NEXT
    PRINTFORML に%GET_SERVICE_TYPE_TEXT(SERVICE_CATEGORY)% (売{LIST_COUNT(_LIST_SELLERS)}人:買{LIST_COUNT(_LIST_BUYERS)}人)

    CALL HO_GET_MODULE_DATA(MODULE_ID, "MODULE_NAME")
    PRINTFORM 　場所: %RESULTS%
    SIF LIST_INDEXOF(MODULE_INFO, "個室") >= 0
        PRINT  (個室)
    PRINTL
    PRINTFORML 　提示: %TOSTR(PROFIT_SUM_ADJUSTED, "#,##0")%ディナリ
    SETCOLOR カラー_シルバー
    FOR SELLER_NUM, 0, LIST_COUNT(_LIST_SELLERS)
        SELLER_ID = TOINT(LIST_GET(_LIST_SELLERS, SELLER_NUM))
        IF SELLER_NUM == 0
            PRINT 　内訳:
        ELSE
            PRINT
        ENDIF
        SERVICE_CATEGORY_NAME = %GET_SERVICE_TYPE_NAME(SERVICE_CATEGORY)%
        IF SERVICE_CATEGORY_NAME == ""
            SERVICE_CATEGORY_NAME '= "自由"
        ENDIF
        PRINTFORM  売春_%SERVICE_CATEGORY_NAME%({CALC_SERVICE_CATEGORY_PRICE(SERVICE_CATEGORY)})
        PRINTFORM  * 奉仕Lv{ABL:SELLER_ID:奉仕}(1.%TOSTR(ABL:SELLER_ID:奉仕*5,"00")%)

        IF GROUPMATCH(SERVICE_CATEGORY, 奉仕_Ｖ性交, 奉仕_騎乗位のみ, 奉仕_Ａ性交)
            PRINTFORM  * 性交Lv{ABL:SELLER_ID:性交}(1.%TOSTR(ABL:SELLER_ID:性交*5,"00")%)
        ELSEIF GROUPMATCH(SERVICE_CATEGORY, 奉仕_自慰させる)
            PRINTFORM  * 自慰Lv{ABL:SELLER_ID:自慰}(1.%TOSTR(ABL:SELLER_ID:自慰*5,"00")%)
        ELSEIF GROUPMATCH(SERVICE_CATEGORY, 奉仕_ＳＭする)
            PRINTFORM  * マゾLv{ABL:SELLER_ID:マゾ}(1.%TOSTR(ABL:SELLER_ID:マゾ*5,"00")%)
        ELSE
            PRINTFORM  * 性技Lv{ABL:SELLER_ID:性技}(1.%TOSTR(ABL:SELLER_ID:性技*5,"00")%)
        ENDIF

        SIF LIST_COUNT(_LIST_BUYERS) >= 2
            PRINTFORM  * 買春者{LIST_COUNT(_LIST_BUYERS)}名({LIST_COUNT(_LIST_BUYERS)})
        SIF LIST_INDEXOF(MODULE_INFO, "個室") >= 0
            PRINT  + 個室(1000)
        SIF TALENT:SELLER_ID:処女 == 1
            PRINT  + 処女(5000)
        SIF TALENT:BUYER_ID:太客
            PRINT  + 買春者が金持ち(10000)
        PRINTFORM  * 交渉_社交Lv{ABL:SELLER_ID:社交}({NEGOTIATION_RATE:SELLER_NUM/100}.%TOSTR(NEGOTIATION_RATE:SELLER_NUM%100,"00")%)
        PRINTFORML  = %TOSTR(PROFIT:SELLER_NUM, "#,##0")% (%ANAME(SELLER_ID)%)
    NEXT
    RESETCOLOR
    PRINTFORML さて、どうしたものだろうか……
    PRINTL

    CALL ASK_MULTI("身体を売る","価格交渉","断る")
    IF RESULT == 2
        RETURN 0
        PRINTL
    ELSEIF RESULT == 1
        IF RAND(2) == 0
            IF PROFIT_SUM_ADJUSTED < 5000
                PROFIT_SUM_ADJUSTED += 500
            ELSEIF PROFIT_SUM_ADJUSTED < 10000
                PROFIT_SUM_ADJUSTED += 1000
            ELSE
                PROFIT_SUM_ADJUSTED += 2000
            ENDIF
            GOTO INPUT_LOOP
        ELSE
            PRINTFORMW %ANAME(BUYER_ID,LIST_COUNT(_LIST_BUYERS))%は%ANAME(MASTER,LIST_COUNT(_LIST_SELLERS))%の身体を諦めた
            PRINTL
            RETURN 0
        ENDIF
    ELSE
        ;同行者がいる場合、同行者も合意ありかつ娼婦の条件を満たしている必要がある
        IF HO_同行者数 > 0
            FOR LOCAL, 0, HO_同行者数
                TARGET_ID = LIST_GETINT(_LIST_FOLLOWERS, LOCAL)
                IF !TALENT:TARGET_ID:合意 || !CAN_PROSTITUTE(TARGET_ID)
                    PRINTFORMW %ANAME(MASTER)%は同意したもの、同行している%ANAME(TARGET_ID)%に激しく拒絶されてしまった……
                    RETURN 0
                ENDIF
            NEXT
        ENDIF
    ENDIF
ENDIF

IF LIST_GETINT(_LIST_SELLERS, 0) == MASTER
    FLAG:ウフフフラグ = 1
    FLAG:調教モード = 調教_逆調教通常
    TFLAG:売春フラグ = 1
    TFLAG:奉仕モード = 1
    TFLAG:調教継続時間 = 120 + (60 * (LIST_COUNT(_LIST_BUYERS) - 1))
    TFLAG:調教開始時刻 = HO_TIME
    ;買う側
    FOR LOCAL, 0, LIST_COUNT(_LIST_BUYERS)
        TARGET_ID = TOINT(LIST_GET(_LIST_BUYERS, LOCAL))
        TCVAR:TARGET_ID:買春参加者 = 1
        TCVAR:TARGET_ID:買春相手ID = MASTER
        TCVAR:TARGET_ID:被奉仕者フラグ = SERVICE_CATEGORY
        CALL HO_ADD_COMPANION(TARGET_ID,,1)
    NEXT
    ;売る側
    FOR LOCAL, 0, LIST_COUNT(_LIST_SELLERS)
        TARGET_ID = TOINT(LIST_GET(_LIST_SELLERS, LOCAL))
        TCVAR:TARGET_ID:売春参加者 = 1
        TCVAR:TARGET_ID:売春相手ID = BUYER_ID
        TCVAR:TARGET_ID:奉仕者フラグ = SERVICE_CATEGORY
        SEXUAL_PREFERENCE_EXP:TARGET_ID:性的嗜好_春を売りたい += 3
        EXP:TARGET_ID:売春経験 += 3
        SIF TARGET_ID != MASTER && LIST_INDEXOF(_LIST_FOLLOWERS, TOSTR(TARGET_ID)) < 0
            CALL HO_ADD_COMPANION(TARGET_ID,,1)
    NEXT
    CALL HO_MASTER_STOP_USE_MODULE()
    CALL HO_MASTER_USE_MODULE(ROOM_IDX, MODULE_SLOT_IDX)
    CALL HO_PRESERVE_PRETRAIN_STATUS()
ELSE
    ;買う側
    FOR LOCAL, 0, LIST_COUNT(_LIST_BUYERS)
        TARGET_ID = TOINT(LIST_GET(_LIST_BUYERS, LOCAL))
        TCVAR:TARGET_ID:買春参加者 = 1
        TCVAR:TARGET_ID:買春相手ID = TOINT(LIST_GET(_LIST_SELLERS, 0))
        TCVAR:TARGET_ID:被奉仕者フラグ = SERVICE_CATEGORY
        TCVAR:TARGET_ID:HO作業進捗量 = 0
        TCVAR:TARGET_ID:行動待機時間 = 120 + (60 * (LIST_COUNT(_LIST_BUYERS) - 1))
        CALL HO_SET_CHARADATA_BY_ID(TARGET_ID, "ACTION", "逢瀬中")
        CALL HO_STOP_USE_MODULE(TARGET_ID)
        CALL HO_USE_MODULE(TARGET_ID, ROOM_IDX, MODULE_SLOT_IDX)
    NEXT
    ;売る側
    FOR LOCAL, 0, LIST_COUNT(_LIST_SELLERS)
        TARGET_ID = TOINT(LIST_GET(_LIST_SELLERS, LOCAL))
        TCVAR:TARGET_ID:売春参加者 = 1
        TCVAR:TARGET_ID:売春相手ID = BUYER_ID
        TCVAR:TARGET_ID:奉仕者フラグ = SERVICE_CATEGORY
        TCVAR:TARGET_ID:HO作業進捗量 = 0
        TCVAR:TARGET_ID:行動待機時間 = 120 + (60 * (LIST_COUNT(_LIST_BUYERS) - 1))
        EXP:TARGET_ID:売春経験 += 3
        SEXUAL_PREFERENCE_EXP:TARGET_ID:性的嗜好_春を売りたい += 3
        CALL HO_SET_CHARADATA_BY_ID(TARGET_ID, "ACTION", "逢瀬中")
        CALL HO_STOP_USE_MODULE(TARGET_ID)
        CALL HO_USE_MODULE(TARGET_ID, ROOM_IDX, MODULE_SLOT_IDX)
    NEXT
ENDIF

MONEY += PROFIT_SUM_ADJUSTED

;ログ出力
IF TOINT(LIST_GET(_LIST_SELLERS, 0)) == MASTER
    CALL FL_PLAYSE("Bell_0.mp3")
    CALLF TAG_PRINT(@"@C:{カラー_ピンク}@♡%ANAME(MASTER,LIST_COUNT(_LIST_SELLERS))%は%ANAME(BUYER_ID,LIST_COUNT(_LIST_BUYERS))%に%TOSTR(PROFIT_SUM_ADJUSTED, "###,##0")%ディナリで買われた@/C@", 1)
    WAIT
ENDIF
CALL HO_PRINT_LOG(@"@C:{カラー_ピンク}@♡%ANAME(LIST_GETINT(_LIST_SELLERS, 0),LIST_COUNT(_LIST_SELLERS))%は%ANAME(BUYER_ID,LIST_COUNT(_LIST_BUYERS))%に%TOSTR(PROFIT_SUM_ADJUSTED, "###,##0")%ディナリで買われた@/C@")

RETURN 1
; #endregion

;-------------------------------------------------
;奉仕カテゴリから奉仕カテゴリ名を取得
;-------------------------------------------------
@GET_SERVICE_TYPE_TEXT(CATEGORY_NUM)
#FUNCTIONS
#DIM CATEGORY_NUM
;#DIM SHOW_SHOW_DETAIL

SELECTCASE CATEGORY_NUM
    CASE 奉仕_通常
        RESULTS '= "なすがままにされます"
    CASE 奉仕_口淫
        RESULTS '= "口で奉仕させられます"
    CASE 奉仕_手淫
        RESULTS '= "手で奉仕させられます"
    CASE 奉仕_足コキ
        RESULTS '= "足で奉仕させられます"
    CASE 奉仕_自慰させる
        RESULTS '= "自慰させられます"
    CASE 奉仕_ＳＭする
        RESULTS '= "ＳＭプレイで責められます"
    CASE 奉仕_ハードコア
        RESULTS '= "ハードに責められます"
    CASE 奉仕_Ｖ性交
        RESULTS '= "膣穴を責められます"
    CASE 奉仕_Ａ性交
        RESULTS '= "菊穴を責められます"
    CASE 奉仕_手コキフェラ
        RESULTS '= "口と手で奉仕させられます"
    CASE 奉仕_見抜き
        RESULTS '= "見抜かれます"
    CASE 奉仕_愛撫
        RESULTS '= "身体を撫で回されます"
    CASE 奉仕_手コキのみ
        RESULTS '= "手で奉仕させられます"
    CASE 奉仕_フェラのみ
        RESULTS = "口で奉仕させられます"
    CASE 奉仕_騎乗位のみ
        RESULTS = "膣穴で奉仕させられます"
    CASE 奉仕_パイズリ
        RESULTS = "乳房で奉仕させられます"
    CASEELSE
        RESULTS = 奉仕します
ENDSELECT

RETURNF RESULTS

;-------------------------------------------------
;奉仕カテゴリから奉仕カテゴリ別の金額を取得
;-------------------------------------------------
@CALC_SERVICE_CATEGORY_PRICE(CATEGORY_NUM)
#FUNCTION
#DIM CATEGORY_NUM

SELECTCASE CATEGORY_NUM
    CASE 奉仕_通常
        RESULT = 1000
    CASE 奉仕_口淫
        RESULT = 500
    CASE 奉仕_手淫
        RESULT = 300
    CASE 奉仕_足コキ
        RESULT = 300
    CASE 奉仕_自慰させる
        RESULT = 200
    CASE 奉仕_ＳＭする
        RESULT = 1000
    CASE 奉仕_ハードコア
        RESULT = 1000
    CASE 奉仕_Ｖ性交
        RESULT = 1000
    CASE 奉仕_Ａ性交
        RESULT = 1000
    CASE 奉仕_手コキフェラ
        RESULT = 500
    CASE 奉仕_見抜き
        RESULT = 100
    CASE 奉仕_愛撫
        RESULT = 300
    CASE 奉仕_手コキのみ
        RESULT = 200
    CASE 奉仕_フェラのみ
        RESULT = 500
    CASE 奉仕_騎乗位のみ
        RESULT = 1000
    CASE 奉仕_パイズリ
        RESULT = 500
    CASEELSE
        RESULT = 100
ENDSELECT

RETURNF RESULT

;-------------------------------------------------
;覗き見処理
;-------------------------------------------------
@HO_CHECK_PEEPING(ROOM_IDX, MODULE_IDX)
#DIM  ROOM_IDX
#DIM  MODULE_IDX
#DIM  MODULE_LIST_IDX
#DIMS DYNAMIC _LIST_CHARA
#DIM  DYNAMIC CHARA_ID

CALL HO_GET_MODULE_USE_MEMBER(ROOM_IDX, MODULE_IDX)
_LIST_CHARA = %RESULTS%

IF !LIST_COUNT(_LIST_CHARA)
    RETURN 0
ENDIF

FOR LOCAL, 0, LIST_COUNT(_LIST_CHARA)
    CHARA_ID = TOINT(LIST_GET(_LIST_CHARA, LOCAL))
    CALL HO_GET_CHARAACT(CHARA_ID)
    IF RESULTS == "逢瀬中"
        CONTINUE
    ELSE
        RETURN 0
    ENDIF
NEXT

CALL PRINT_TITLE("覗き見", "エロイベント")
PRINTFORML 奥から微かな喘ぎ声と水音が聞こえてくる。どうやら秘事の最中のようだ……
PRINTFORML 覗いてみることも出来そうだが……？
PRINTL
CALL ASK_YN("こっそり覗く", "立ち去る")
PRINTL
IF RESULT
    PRINTL
    PRINTFORMW ……邪魔をするのは止めておこう
    PRINTL
    RETURN 2
ENDIF

IF HO_同行者数 > 0
    PRINTL
    PRINTFORMW ……同行者の目もある。止めておこう
    PRINTL
    RETURN 2
ENDIF

FOR LOCAL, 0, LIST_COUNT(_LIST_CHARA)
    CHARA_ID = TOINT(LIST_GET(_LIST_CHARA, LOCAL))
    TFLAG:参加者数 ++
    CFLAG:CHARA_ID:調教参加フラグ  = 1
    TCVAR:CHARA_ID:覗き見対象 = 1
    ;売春/買春の場合
    IF TCVAR:CHARA_ID:売春参加者
        TCVAR:CHARA_ID:奉仕者フラグ = 1
    ELSEIF TCVAR:CHARA_ID:買春参加者
        TCVAR:CHARA_ID:被奉仕者フラグ = 1
        ;カップルの場合
    ELSEIF TCVAR:CHARA_ID:奉仕者フラグ == 0 && TCVAR:CHARA_ID:被奉仕者フラグ == 0
        TCVAR:CHARA_ID:奉仕者フラグ = 1
        TCVAR:(CFLAG:CHARA_ID:カップル相手キャラID):被奉仕者フラグ = 1
    ENDIF
NEXT
CALL HO_MASTER_STOP_USE_MODULE()
CALL HO_GET_MODULE_LIST_IDX(ROOM_IDX, MODULE_IDX)
MODULE_LIST_IDX = RESULT

FLAG:調教モード = 調教_逆調教通常
FLAG:ウフフフラグ = 1
TFLAG:覗き見モード = 1
TFLAG:覗き見対象設備IDX = MODULE_LIST_IDX
TFLAG:奉仕モード = 1
TFLAG:調教継続時間 = 90
CALL HO_PRESERVE_PRETRAIN_STATUS()
TFLAG:調教開始時刻 = HO_TIME
TCVAR:MASTER:離脱フラグ = 離脱フラグ_一時離脱

PRINTL
PRINTFORMW %ANAME(MASTER)%は情事の場をこっそり覗き見た……
PRINTL

RETURN 1

;-------------------------------------------------
;買春客生成処理
;-------------------------------------------------
@HO_CREATE_GUEST_BUY_PROSTITUTE
#DIMS DYNAMIC _LIST_CHARA
#DIM  DYNAMIC ROOM_IDX
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC SELLER_ID

; ;買物目的のモブ生成は8:30～17:30時まで
; SIF !INRANGE(HO_TIME, HO_CLOCK(830), HO_CLOCK(1730))
;     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
;売春中キャラの部屋番号を確認
SELLER_ID = TOINT(LIST_GET(_LIST_CHARA, 0))
IF SELLER_ID != MASTER
    CALL HO_GET_CHARAPLACE(SELLER_ID)
    ROOM_IDX = RESULT
ELSE
    ROOM_IDX = HO_MASTER現在地
ENDIF
;モブ生成、女性多め
CALL HO_CREATE_GUEST(ROOM_IDX, "買春客", "買物客", RAND:100 < FLCONFIG:売春ゲストの男性率 ? 0 # 1)
IF RESULT
    CHARA_ID = RESULT
    CALL HO_PRINT_LOG(@"@C:{カラー_春}@%ANAME(CHARA_ID)%が春を買いにやって来た@/C@")
    ;売春客は必ずスケベモブ
    CFLAG:CHARA_ID:スケベモブ = 1
    ;ゲストは3-4時間滞在する
    CFLAG:CHARA_ID:キャラ滞在時間 = RAND(36, 42) * HO_単位時間
    IF IS_FEMALE(CHARA_ID)
        CFLAG:CHARA_ID:汎用口上パターン = 1000
    ENDIF
    RETURN 1
ENDIF

RETURN 0

;-------------------------------------------------
; 情事乱入
;-------------------------------------------------
@HO_CHECK_FORCE_JOIN_UFUFU(CHARA_ID, BYPASS_CHECK = 0)
#DIM  CHARA_ID
#DIM  BYPASS_CHECK
#DIM  DYNAMIC CAN_FORCE_JOIN

;親愛による判定
{
    IF (ABL:CHARA_ID:欲望 >= 8 && GMATCH_FALLEN(CHARA_ID, "親愛"))
        || TCVAR:(CHARA_ID):媚薬 && IS_ESTRUS(CHARA_ID)
}
    IF !BYPASS_CHECK
        CALL HO_CAN_FORCE_JOIN_UFUFU(CHARA_ID)
        CAN_FORCE_JOIN = RESULT
    ELSE
        CAN_FORCE_JOIN = 1
    ENDIF
    IF !C_COND("素質:大人しい,素質:臆病,素質:プライド低い", "OR", CHARA_ID)
        IF CAN_FORCE_JOIN
            CALL COLOR_PRINTW(@"情事の場を目撃した%ANAME(CHARA_ID)%は息を荒げて乱入してきた！", カラー_ピンク)
            RETURN 1
        ELSE
            CALL COLOR_PRINTL(@"情事の現場を目撃した%ANAME(CHARA_ID)%は情事の場に押し入ろうとした……！", カラー_ピンク)
            CALL COLOR_PRINTW(@"しかし付け入る隙が無いのを見ると、%ANAME(MASTER)%を一瞥して立ち去っていった……", カラー_ピンク)
            RETURN 0
        ENDIF
    ELSE
        IF CAN_FORCE_JOIN
            CALL COLOR_PRINTL(@"物陰から%ANAME(CHARA_ID)%が様子を伺っている……。情事に耽る%ANAME(MASTER)%から目が離せないようだ……", カラー_ピンク)
            PRINTL
            PRINTFORML どうしたものだろう……
            CALL ASK_YN("呼びつける", "追い払う")
            IF !RESULT
                CALL COLOR_PRINTW(@"様子を伺う%ANAME(CHARA_ID)%を呼びつけると、申し訳無さそうにしながらも情事に加わってきた……！", カラー_ピンク)
                RETURN 1
            ELSE
                CALL COLOR_PRINTW(@"様子を覗き見ている%ANAME(CHARA_ID)%を追い払うと、逃げるように姿を消した……", カラー_ピンク)
                RETURN 0
            ENDIF
        ELSE
            CALL COLOR_PRINTW(@"情事の現場を目撃した%ANAME(CHARA_ID)%は気まずそうな顔をしている……", カラー_ピンク)
            RETURN 0
        ENDIF
    ENDIF
ENDIF
;隷属による判定
IF GMATCH_FALLEN(CHARA_ID, "SLAVE")
    CALL HO_CAN_FORCE_JOIN_UFUFU(CHARA_ID)
    CAN_FORCE_JOIN = RESULT
    IF CAN_FORCE_JOIN
        CALL COLOR_PRINTL(@"情事の現場を目撃した%ANAME(CHARA_ID)%は気まずそうな顔をしている……", カラー_ピンク)
        PRINTL
        PRINTFORML どうしたものだろう……
        CALL ASK_YN("呼びつける", "追い払う")
        IF !RESULT
            CALL COLOR_PRINTW(@"様子を伺う%ANAME(CHARA_ID)%にも身体を捧げるよう無理やり命じた……", カラー_ピンク)
            RETURN 1
        ELSE
            CALL COLOR_PRINTW(@"%ANAME(CHARA_ID)%を追い払うと、ホッとした様子で姿を消した……", カラー_ピンク)
            RETURN 0
        ENDIF
    ELSE
        CALL COLOR_PRINTW(@"情事の現場を目撃した%ANAME(CHARA_ID)%は気まずそうな顔をしている……", カラー_ピンク)
        RETURN 0
    ENDIF
ENDIF

CALL COLOR_PRINTW(@"情事の現場を目撃した%ANAME(CHARA_ID)%は気まずそうな顔をしている……", カラー_ピンク)
RETURN 0

;-------------------------------------------------
;乱入可能可否の判定
;-------------------------------------------------
@HO_CAN_FORCE_JOIN_UFUFU(CHARA_ID)
#DIM  CHARA_ID
#DIM  DYNAMIC ROOM_IDX
#DIM  DYNAMIC MODULE_ID
#DIM  DYNAMIC MODULE_SLOT_IDX

ROOM_IDX = HO_MASTER現在地
CALL HO_GET_MAPDATA(HO_有効マップID, ROOM_IDX, "MODULE_SLOT")
MODULE_ID = C_COND_MAP_GET(MASTER, "設備")

;設備を使用しているならキャパをチェックする
IF MODULE_ID != -1
    CALL HO_GET_MASTER_DATA("MODULE_USAGE")
    MODULE_SLOT_IDX = RESULT
    CALL HO_CHECK_MODULE_CAPACITY(ROOM_IDX, MODULE_SLOT_IDX)
    SIF RESULT < 1
        RETURN 0
ENDIF
;同行者数が上限に到達
IF HO_同行者数 == HO_同行者上限
    RETURN 0
ENDIF
RETURN 1

;-------------------------------------------------
;加入処理(@HO_CAN_FORCE_JOIN_UFUFU)で加入可能であることを判定済である前提
;-------------------------------------------------
@HO_FORCE_JOIN_UFUFU(CHARA_ID, RELOAD_USE_MODULE = 1)
#DIM CHARA_ID
#DIM RELOAD_USE_MODULE
#DIM  DYNAMIC ROOM_IDX
#DIM  DYNAMIC MODULE_ID
#DIM  DYNAMIC MODULE_SLOT_IDX

ROOM_IDX = HO_MASTER現在地
CALL HO_GET_MAPDATA(HO_有効マップID, ROOM_IDX, "MODULE_SLOT")
MODULE_ID = C_COND_MAP_GET(MASTER, "設備")

IF MODULE_ID != -1
    CALL HO_GET_MASTER_DATA("MODULE_USAGE")
    MODULE_SLOT_IDX = RESULT
ENDIF

;設備を使用しているなら同じ設備を使わせる
CALL HO_ADD_COMPANION(CHARA_ID,,1)
IF RELOAD_USE_MODULE
    CALL HO_STOP_USE_MODULE(CHARA_ID)
    CALL HO_USE_MODULE(CHARA_ID, ROOM_IDX, MODULE_SLOT_IDX)
ENDIF

IF TFLAG:奉仕モード
    ;MASTERが奉仕者の場合、乱入者は被奉仕者
    IF TCVAR:MASTER:奉仕者フラグ
        TCVAR:CHARA_ID:被奉仕者フラグ = TCVAR:MASTER:奉仕者フラグ
    ;MASTERが被奉仕者の場合、乱入者は奉仕者
    ELSEIF TCVAR:MASTER:被奉仕者フラグ
        TCVAR:CHARA_ID:奉仕者フラグ = TCVAR:MASTER:被奉仕者フラグ
    ELSE
        RETURN 0
    ENDIF
ENDIF


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("モーニングコール", "エロイベント")
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:調教継続時間 = 60
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = 奉仕_手コキフェラ
        TCVAR:MASTER:被奉仕者フラグ = 奉仕_手コキフェラ
    CASE "騎乗位"
        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:奉仕者フラグ = 奉仕_騎乗位のみ
        TCVAR:MASTER:被奉仕者フラグ = 奉仕_騎乗位のみ
    CASE "自慰"
        TFLAG:調教継続時間 = 60
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = 奉仕_自慰
        TCVAR:MASTER:被奉仕者フラグ = 奉仕_自慰
    CASE "愛撫"
        TFLAG:調教継続時間 = 60
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = 奉仕_愛撫
        TCVAR:MASTER:被奉仕者フラグ = 奉仕_愛撫
    CASE "パイズリ"
        TFLAG:調教継続時間 = 60
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = 奉仕_パイズリ
        TCVAR:MASTER:被奉仕者フラグ = 奉仕_パイズリ
    CASE "Ｖ性交"
        TFLAG:調教継続時間 = 90
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = 奉仕_Ｖ性交
        TCVAR:MASTER:被奉仕者フラグ = 奉仕_Ｖ性交
    CASE "Ａ性交"
        TFLAG:調教継続時間 = 90
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = 奉仕_Ａ性交
        TCVAR:MASTER:被奉仕者フラグ = 奉仕_Ａ性交
    CASE "耳舐め手コキ"
        TFLAG:調教継続時間 = 90
        TCVAR:SELECTED_CHARA_ID:奉仕者フラグ = 奉仕_耳舐め手コキ
        TCVAR:MASTER:被奉仕者フラグ = 奉仕_耳舐め手コキ
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

repo_name: napo/erafl

license: unknown


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

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@ お客様にご奉仕 >>@/C@", 1)
    CALL COLOR_LINE
ELSE
    CALL COLOR_LINE
    CALLF TAG_PRINT(@"@C:{カラー_ピンク}@<< @S:1@♡ EVENT ♡@/S@ お客様？　にご奉仕 >>@/C@", 1)
    CALL COLOR_LINE
    PRINTFORMW %ANAME(INTERRUPT_CHARA_ID)%は%ANAME(GUEST_ID)%が%ANAME(SHOPPER_ID)%に向ける好色な目線を見咎めると、%ANAME(SHOPPER_ID)%の手をぎゅっと引き半ば強引に物陰に連れ込んだ！
    PRINTFORMW %ANAME(INTERRUPT_CHARA_ID)%は%ANAME(SHOPPER_ID)%が他人に誘惑されるくらいなら自分が商品を買い取ると言っている
    PRINTL
    CALLF TAG_PRINT(@"@C:{カラー_ピンク}@――ただし相応の\"対価\"は要求するつもりのようだ@/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
        LOCALS:0 '= "身体を自由に触らせて"
        LOCALS:1 '= "何か買ってやってもよい"
        MOTIVATION += 30
        CONSUMPTION += 2000
        LOCALS:2 '= @"そしていやらしい手つきで%ANAME(SHOPPER_ID)%の肢体を弄び始めた……"
        SERVICE_TYPE = 奉仕_愛撫
        TRAIN_TIME = 60
        ;見抜き
    CASE 2
        LOCALS:0 '= "\"見抜き\"させて"
        LOCALS:1 '= "何か買ってやってもよい"
        MOTIVATION += 30
        CONSUMPTION += 2000
        LOCALS:2 '= @"そして自身の性器を取り出すと、%ANAME(SHOPPER_ID)%の眼前で自身を慰め始めた……"
        SERVICE_TYPE = 奉仕_見抜き
        TRAIN_TIME = 90
        ;フェラ
    CASE 3
        LOCALS:0 '= "口で奉仕して"
        LOCALS:1 '= "何か買ってやってもよい"
        MOTIVATION += 30
        CONSUMPTION += 6000
        LOCALS:2 '= @"そして自身の性器を取り出すと、口で舐めしゃぶるよう%ANAME(SHOPPER_ID)%に要求した……"
        SERVICE_TYPE = 奉仕_手コキフェラ
        TRAIN_TIME = 90
    CASE 5
        LOCALS:0 '= "口で奉仕して"
        LOCALS:1 '= "銀インゴットを2つ渡してもよい"
        REWARD_ITEM '= "銀インゴット"
        LOCALS:2 '= @"そして自身の性器を取り出すと、口で舐めしゃぶるよう%ANAME(SHOPPER_ID)%に要求した……"
        SERVICE_TYPE = 奉仕_手コキフェラ
        TRAIN_TIME = 90
        ;手コキする
    CASE 4
        LOCALS:0 '= "手で奉仕して"
        LOCALS:1 '= "何か買ってやってもよい"
        MOTIVATION += 30
        CONSUMPTION += 4000
        LOCALS:2 '= @"そして自身の性器を取り出すと、手で気持ちよくするよう%ANAME(SHOPPER_ID)%に要求した……"
        SERVICE_TYPE = 奉仕_手コキのみ
        TRAIN_TIME = 60
        ;手コキされる
    CASE 6
        LOCALS:0 '= "陰部を手で弄らせて"
        LOCALS:1 '= "何か買ってやってもよい"
        MOTIVATION += 30
        CONSUMPTION += 4000
        LOCALS:2 '= @"そして%ANAME(SHOPPER_ID)%の性器を取り出すと、息を荒げて弄び始めた……"
        SERVICE_TYPE = 奉仕_手コキのみ
        TRAIN_TIME = 60
    CASEELSE
        RETURN 0
ENDSELECT

CALLF TAG_PRINT(@"@C:{カラー_白}@%ANAME(GUEST_ID)%はもし%ANAME(SHOPPER_ID)%が%LOCALS:0%くれるなら、%LOCALS:1%と言っているが……@/C@", 1)
PRINTL
CALL ASK_YN("身体を捧げる", "断る")
IF RESULT
    PRINTFORMW %ANAME(SHOPPER_ID)%はそんなこと出来るはずがないと断った……
    RETURN 0
ENDIF

;同行者がいる場合は失敗
IF HO_同行者数 > 0
    CALL HO_GET_FOLLOWER_LIST
    PRINTFORMW %ANAME(MASTER)%は同意したもの、同行している%ANAME(LIST_GETINT(RESULTS, 0))%に止めるように窘められてしまった……
    RETURN 0
ENDIF

;現在の部屋の設備番号のリストを取得
CALL HO_GET_MAPDATA(HO_有効マップID, HO_MASTER現在地, "MODULE_SLOT")
_LIST_MODULE_IDX = %RESULTS%

;条件を満たさない設備を除外
FOR MODULE_SLOT_IDX, 0, LIST_COUNT(_LIST_MODULE_IDX)
    ;遮蔽属性を持たない設備は除外
    CALL HO_GET_MODULE_DATA_BY_IDX(HO_MASTER現在地, MODULE_SLOT_IDX, "属性")
    MODULE_ELEMENTS = %RESULTS%
    IF LIST_INDEXOF(MODULE_ELEMENTS, "遮蔽") == -1
        CONTINUE
    ENDIF
    ;空き人員が2未満の設備は除外
    CALL HO_CHECK_MODULE_CAPACITY(HO_MASTER現在地, MODULE_SLOT_IDX)
    IF RESULT < 2
        CONTINUE
    ENDIF
    ;施錠中の設備は除外
    CALL HO_IS_MODULE_LOCKED(HO_MASTER現在地, MODULE_SLOT_IDX)
    IF RESULT > 0
        CONTINUE
    ENDIF
    ;奉仕先候補に設備のスロット番号を登録
    _LIST_MODULE = %LIST_ADD(_LIST_MODULE, TOSTR(MODULE_SLOT_IDX))%
NEXT

IF LIST_COUNT(_LIST_MODULE) == 0
    PRINTFORMW しかし、近くに適当な物陰が見つからなかった
    RETURN 0
ENDIF

;設備スロット番号リストの順番をシャッフル
CALL LIST_SHUFFLE(_LIST_MODULE)
;奉仕先の設備スロット番号
MODULE_SLOT_IDX = LIST_GETINT(_LIST_MODULE,0)

;店番が主人公
IF SHOPPER_ID == MASTER
    ;同行者に追加
    CALL HO_ADD_COMPANION(GUEST_ID,,1)
    ;対象設備を利用
    CALL HO_MASTER_STOP_USE_MODULE(,,-1)
    CALL HO_MASTER_USE_MODULE(HO_MASTER現在地, MODULE_SLOT_IDX)
;店番が主人公以外の場合は想定しない
ELSE
    RETURN -1
ENDIF

CFLAG:GUEST_ID:キャラ購買意欲 += MOTIVATION
CFLAG:GUEST_ID:キャラ消費金額 += CONSUMPTION
PRINTFORML %ANAME(SHOPPER_ID)%が同意すると%ANAME(GUEST_ID)%は%ANAME(SHOPPER_ID)%を物陰に連れ込んだ
PRINTFORMW %LOCALS:2%
CALL HO_GUEST_TRADE_ITEM(GUEST_ID, SHOPPER_ID, 1)
TFLAG:調教継続時間 = TRAIN_TIME

IF REWARD_ITEM == "銀インゴット"
    CALL QST_CHANGE_ITEM(@"{ITEM_銀インゴット},2,")
ENDIF

IF !仲間に奉仕
    TFLAG:売春フラグ = 1
ENDIF
TCVAR:GUEST_ID:HO直前の行動 = ACT_逢瀬
TCVAR:GUEST_ID:行動待機時間 = 0
TCVAR:GUEST_ID:被奉仕者フラグ = SERVICE_TYPE
TCVAR:SHOPPER_ID:奉仕者フラグ = SERVICE_TYPE
CFLAG:SHOPPER_ID:主導除外 = 1
CALL HO_PRESERVE_PRETRAIN_STATUS()
TFLAG:調教開始時刻 = HO_TIME
FLAG:調教モード = 調教_逆調教通常
FLAG:ウフフフラグ = 1
TFLAG:奉仕モード = 1
CALL RESERVE_ACTOR_BEFORE_SERVICE
RETURN 1


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
;[STATUS]タブ関連
#DIMS HO_STATUS_WINDOW_TARGET_TOP
#DIMS HO_STATUS_WINDOW_TARGET_BOTTOM

#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 奉仕_ハードコア = 18
#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_行動}@[-]キャラの行動@/B@@/C@", 4)
        CALLF TAG_PRINT(@"@C:{カラー_注釈}@@B:{HO_キャラ情報ボタンID_切替}@ [⇔ 容姿]@/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_行動}@[+]キャラの行動@/B@@/C@", 5)
    ENDIF
ENDIF
;プレイヤーと同じ部屋にいるキャラクターの衣装を表示する
IF (HO_キャラ衣装表示 && HO_キャラ情報切替フラグ == 1) || (FLAG:クエストモード && HO_キャラ衣装表示)
    CALLF TAG_PRINT(@"@C:{カラー_注釈}@@B:{HO_キャラ情報ボタンID_衣装}@[-]キャラの容姿@/B@@/C@", 4)
    CALLF TAG_PRINT(@"@C:{カラー_注釈}@@B:{HO_キャラ情報ボタンID_切替}@ [⇔ 行動]@/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_衣装}@[+]キャラの容姿@/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
#DIMS DYNAMIC TEXT

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
{
    TEXT '= ""
        + @"<button value = '{BTN_ID}' title = '非ボタン箇所を右クリック(ﾃﾞﾌｫﾙﾄ)することでも[STATUS]タブと切替できます'>[MAP]</button>  "
        + @"<button value = '{BTN_ID + 1}' title = '非ボタン箇所を右クリック(ﾃﾞﾌｫﾙﾄ)することでも[MAP]タブと切替できます'>[STATUS]</button>  "
        + @"<button value = '{BTN_ID + 2}' >[ITEM]</button>  "
}
HTML_PRINT TEXT, 1
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_INFO_WINDOW
CALL NEWLINE(26)

@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 HO_DRAW_INFO_WINDOW()
CALL NEWLINE(26)
;CALL WndMgr_DisplayAll()

@HO_DRAW_INFO_WINDOW
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

@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