code:
;-------------------------------------------------
;居住区交流開始時に一度呼び出される各種データの初期化処理
;-------------------------------------------------
@QST_INIT_QUEST_DATA(QUEST_ID, QST_QUEST_TYPE)
#DIM  QUEST_ID
#DIM DYNAMIC IDX
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC 初期位置
#DIMS DYNAMIC _LIST_MEMBER

;各種データを初期化
VARSET _DIC_HO_MASTER_DATA
VARSET _DIC_HO_MAPDATA
VARSET _DIC_HO_CHARALIST
VARSET _LIST_QST_TRAIN_EXIT_EVENT
VARSET HO_LOG_MESSAGE

VARSET _DIC_QST_EVENT_LIST
VARSET _DIC_HO_CHARALIST, "-1"
VARSET QST_FLAG

;小さいフォントが参照可能なら使用可能な状態にする
GETFONT
CHKFONT "Microsoft Himalaya"
IF RESULT
    HO_SFONT '= "Microsoft Himalaya"
ELSE
    HO_SFONT '= "ＭＳ ゴシック"
ENDIF

;TFLAG,各調教用キャラクターシステム変数を手動で初期化する
VARSET TFLAG
FOR LOCAL, 0,CHARANUM
    VARSET EX:LOCAL:0, 0
    VARSET SOURCE:LOCAL:0, 0
    VARSET TCVAR:LOCAL:0, 0
    VARSET CUP:LOCAL:0, 0
    VARSET CDOWN:LOCAL:0, 0
    VARSET DOWNBASE:LOCAL:0, 0
NEXT

;調教イベントのターン数初期化
QST_調教ターン数 = 20
;イベント選択制限の初期化
QST_イベント選択制限 = -1
;ステータス画面の描写対象をMASTERに
HO_ステータス描画対象 = MASTER

;クエスト用データの初期化
QST_応急治療点 = 3
FOR LOCAL, 0, LIST_COUNT(_LIST_QST_PARTY)
    CALL SKILL_GET_LEVEL(TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL)), スキル_大分類_冒険, "MEDIC")
    IF RESULT
        QST_応急治療点 += 1
    ENDIF
NEXT

;;マップ型クエスト
;今はマップが一つしか無いので0固定
IF QST_QUEST_TYPE == "MAP" || QST_QUEST_TYPE == "GMAP"
    HO_有効マップID = 0
    CALL QST_LOAD_MAPDATA(HO_有効マップID, QUEST_ID)
    ;交流に参加するキャラの初期ステータスを設定
    CALL HO_FIND_ROOM_BY_TAG("クエスト開始地点")
    初期位置 = RESULT

    ;キャラクターリスト生成
    ;-------------------------------------------------
    FOR LOCAL, 0, LIST_COUNT(_LIST_QST_PARTY)
        CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))
        SIF CHARA_ID == MASTER
            CONTINUE
        _DIC_HO_CHARALIST:IDX '= @"[CHARA_ID:{CHARA_ID}][ROOM_IDX:{初期位置}][ACTION:待機]"
        IDX ++
        ;クエストモードで同行するキャラは同行扱いでスタート
        CALL QST_ADD_COMPANION(CHARA_ID)
        CFLAG:CHARA_ID:交流参加 = 1
        CFLAG:CHARA_ID:調教中帰らない = 1
    NEXT
    ;キャラリスト末尾を示す"-1"をセット
    _DIC_HO_CHARALIST:IDX '= "-1"

    ;イベント生成
    ;-------------------------------------------------
    CALL QST_INIT_EVENT_LIST(QUEST_ID, HO_有効マップID)

    ;すべてのルームに戦場の霧をかける
    CALL QST_SET_FOG_OF_WAR

    ;探索済ルームの情報を開示
    CALL QST_GET_QST_SAVE_EXPLORED()
    IF QST_SAVE_EXPLORED
        CALL QST_EXPLORED_ROOMS_DISCLOSURE()
    ENDIF

    ;プレイヤーの初期位置を設定
    CALL HO_FIND_ROOM_BY_TAG("クエスト開始地点")
    初期位置 = RESULT
    HO_MASTER現在地 = 初期位置
    HO_MASTER_USE_MODULE_LIST_IDX = -1

    ;プレイヤー初期位置と隣接ルームの戦場の霧を晴らす
    CALL QST_CLEAR_FOG_OF_WAR(HO_MASTER現在地)
ENDIF

;クエストモードで調教終了時にイベントを呼ぶ際に使用する変数を初期化
QST_TRAIN_EXIT_EVENT_ID = -1

;-------------------------------------------------
;;クエスト用マップ読み込み処理
@QST_LOAD_MAPDATA(MAP_ID, QUEST_ID)
#DIM MAP_ID
#DIM QUEST_ID
#DIM DYNAMIC NODE_ID
#DIM DYNAMIC IDX, HO_MAX_ROOMNUM
TRYCCALLFORM QST_SET_MAPDATA_QUEST_{QUEST_ID}(MAP_ID)
CATCH
    THROW @HO_LOAD_MAPDATA:無効なQUEST_IDが指定されました。
ENDCATCH

IF QST_QUEST_TYPE == "GMAP"
    CALL GMAPEDIT_IMPORT_MAPDATA(QST_GMAPDATA_PATH, QST_GMAPDATA_FILENAME, 1)
    DT_SELECT "GMAPDATA",, "NODE_ID ASC", IDX
    FOR LOCAL, 0, RESULT
        NODE_ID = DT_CELL_GET("GMAPDATA", IDX:LOCAL, "NODE_ID", 1)
        _DIC_HO_MAPDATA:MAP_ID:NODE_ID = %DIC_SET(_DIC_HO_MAPDATA:MAP_ID:NODE_ID, "ROOM_NAME", DT_CELL_GETS("GMAPDATA", IDX:LOCAL, "NODE_NAME", 1))%
        _DIC_HO_MAPDATA:MAP_ID:NODE_ID = %DIC_SET(_DIC_HO_MAPDATA:MAP_ID:NODE_ID, "ROOM_PATH", DT_CELL_GETS("GMAPDATA", IDX:LOCAL, "PATH_LIST", 1))%
        ;NODE_ID 0番にクエスト開始地点をセット
        IF NODE_ID == 0
            _DIC_HO_MAPDATA:MAP_ID:NODE_ID = %DIC_SET(_DIC_HO_MAPDATA:MAP_ID:NODE_ID, "ROOM_ID", "200")%
        ELSE
            _DIC_HO_MAPDATA:MAP_ID:NODE_ID = %DIC_SET(_DIC_HO_MAPDATA:MAP_ID:NODE_ID, "ROOM_ID", "201")%
        ENDIF
    NEXT
ENDIF

FOR LOCAL, 0, HO_MAX_ROOMNUM
    _DIC_HO_MAPDATA:HO_有効マップID:LOCAL = %DIC_REMOVE(_DIC_HO_MAPDATA:HO_有効マップID:LOCAL, "EVENT_ID_LIST")%
NEXT

;定義ファイルからイベントリストを生成する
@QST_INIT_EVENT_LIST(QUEST_ID, MAP_ID = -1)
#DIM QUEST_ID
#DIM MAP_ID
#DIM EVENT_NUM

#DIMS DYNAMIC _LIST_EVENT
#DIM DYNAMIC EVENT_LIST_IDX
#DIM DYNAMIC EVENT_ID
#DIM DYNAMIC HAS_EVENT_REGISTED
#DIM DYNAMIC ROOM_IDX
#DIM DYNAMIC EVENT_SLOT_IDX
#DIMS DYNAMIC EVENT_TRIGGER
#DIMS DYNAMIC _LIST_EVENT_SLOT
#DIMS DYNAMIC EVENT_SLOT_NAME
#DIMS DYNAMIC EVENT_TYPE
#DIMS DYNAMIC DIC_EVENT_OPTION

DEBUGPRINTFORML @QST_INIT_EVENT_LIST QUEST_ID {QUEST_ID}

IF MAP_ID == -1
    MAP_ID = HO_有効マップID
ENDIF
VARSET _DIC_QST_EVENT_LIST:MAP_ID:0, "-1"
;ルームに依存するイベントをイベントリストに登録
FOR ROOM_IDX, 0, HO_MAX_ROOMNUM
    CALL HO_GET_MAPDATA(MAP_ID, ROOM_IDX, "EVENT_LIST")
    _LIST_EVENT = %RESULTS%
    EVENT_NUM = LIST_COUNT(_LIST_EVENT)
    FOR EVENT_SLOT_IDX, 0, EVENT_NUM
        FOR LOCAL, 0, QST_MAX_EVENTNUM
            IF _DIC_QST_EVENT_LIST:MAP_ID:LOCAL == "-1"
                EVENT_LIST_IDX = LOCAL
                BREAK
            ENDIF
        NEXT
        EVENT_ID = TOINT(LIST_GET(_LIST_EVENT, EVENT_SLOT_IDX))
        CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_ID", TOSTR(EVENT_ID), MAP_ID)
        CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "ROOM_IDX", TOSTR(ROOM_IDX), MAP_ID)
        VARSET RESULTS
        QST_NOWEV = EVENT_ID
        TRYCCALLFORM QST_ADD_EVENT_QUEST_{QUEST_ID}_EVENT_{EVENT_ID}
            EVENT_TRIGGER = %RESULTS:0%
            EVENT_SLOT_NAME = %RESULTS:1%
            EVENT_TYPE = %RESULTS:2%
            DIC_EVENT_OPTION = %RESULTS:3%
            ; DEBUGPRINTFORML EVENT_ID:{EVENT_ID},EVENT_SLOT_NAME%EVENT_SLOT_NAME%
            CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_TRIGGER", EVENT_TRIGGER, MAP_ID)
            CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_TYPE", EVENT_TYPE, MAP_ID)
            IF EVENT_TRIGGER == "EVENT_SLOT"
                VARSET _LIST_EVENT_SLOT
                CALL HO_GET_MAPDATA(MAP_ID, ROOM_IDX, "EVENT_SLOT")
                _LIST_EVENT_SLOT = %RESULTS%
                _LIST_EVENT_SLOT = %LIST_ADD(_LIST_EVENT_SLOT, TOSTR(EVENT_LIST_IDX))%
                CALL HO_SET_MAPDATA(ROOM_IDX, "EVENT_SLOT", _LIST_EVENT_SLOT)
                CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_SLOT_NAME", EVENT_SLOT_NAME, MAP_ID)
            ENDIF
            IF EVENT_TYPE == "PAWN"
                CALL QST_CREATE_EVENT_PAWN(ROOM_IDX, EVENT_LIST_IDX)
            ENDIF
            ;オプション値の反映
            IF DIC_CONTAINSKEY(DIC_EVENT_OPTION ,"EVENT_STATE")
                CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_STATE", DIC_GET(DIC_EVENT_OPTION, "EVENT_STATE"), MAP_ID)
            ENDIF
            IF DIC_CONTAINSKEY(DIC_EVENT_OPTION ,"EVENT_COLOR")
                CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_COLOR", DIC_GET(DIC_EVENT_OPTION, "EVENT_COLOR"), MAP_ID)
            ENDIF
            IF DIC_CONTAINSKEY(DIC_EVENT_OPTION ,"EVENT_ICON")
                CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_ICON", DIC_GET(DIC_EVENT_OPTION, "EVENT_ICON"), MAP_ID)
            ENDIF
            IF DIC_CONTAINSKEY(DIC_EVENT_OPTION ,"EVENT_COLOR")
                CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_COLOR", DIC_GET(DIC_EVENT_OPTION, "EVENT_COLOR"), MAP_ID)
            ENDIF
        CATCH
            THROW @QST_INIT_EVENT_LIST エラー:QUEST_ID{QUEST_ID} マップデータで指定されたEVENT_ID:{EVENT_ID}に対応する関数が存在しません
        ENDCATCH

    NEXT
NEXT

;ルームに依存しない未登録イベントをイベントリストに登録
FOR EVENT_ID, 0 ,QST_MAX_EVENTNUM
    HAS_EVENT_REGISTED = 0
    FOR EVENT_LIST_IDX, 0, QST_MAX_EVENTNUM
        CALL QST_GET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_ID")
        IF RESULT == EVENT_ID
            HAS_EVENT_REGISTED = 1
        ENDIF
    NEXT
    SIF HAS_EVENT_REGISTED
        CONTINUE
    FOR EVENT_LIST_IDX, 0, QST_MAX_EVENTNUM
        IF _DIC_QST_EVENT_LIST:MAP_ID:EVENT_LIST_IDX == "-1"
            VARSET RESULTS
            QST_NOWEV = EVENT_ID
            TRYCCALLFORM QST_ADD_EVENT_QUEST_{QUEST_ID}_EVENT_{EVENT_ID}
                EVENT_TRIGGER = %RESULTS:0%
                EVENT_SLOT_NAME = %RESULTS:1%
                EVENT_TYPE = %RESULTS:2%
                DIC_EVENT_OPTION = %RESULTS:3%
                CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_TRIGGER", EVENT_TRIGGER, MAP_ID)
                CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_ID", TOSTR(EVENT_ID), MAP_ID)
                CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_TYPE", EVENT_TYPE, MAP_ID)
                ;オプション値の反映
                IF DIC_CONTAINSKEY(DIC_EVENT_OPTION ,"EVENT_STATE")
                    CALL QST_SET_EVENT_LIST(EVENT_LIST_IDX, "EVENT_STATE", DIC_GET(DIC_EVENT_OPTION, "EVENT_STATE"), MAP_ID)
                ENDIF
                BREAK
            CATCH
            ENDCATCH
        ENDIF
    NEXT
NEXT

CALL QST_INIT_汎用イベント(QUEST_ID, MAP_ID)


code:
;-------------------------------------------------
;クエストの処理のコントロール
;-------------------------------------------------

;-------------------------------------------------
;SHOP画面から呼び出されるクエスト選択画面
;-------------------------------------------------
@QST_SELECT_QUEST

IF !FLTUTOR:クエストに挑む前に
    CALL TUTORIAL_クエストに挑む前に
ENDIF

CALL QST_DRAW_MENU_WINDOW

;-------------------------------------------------
;「クエストモード」
;-------------------------------------------------
@QUEST_MODE_START(QUEST_ID = 0)
#DIM CHARA_ID
#DIMS _LIST_MEMBER
#DIM QUEST_ID

;一度BGMを停止
CALL FL_STOPBGM()

DEBUGPRINTFORML QUEST_ID_{QUEST_ID}が呼び出されました

;広域変数に実行するクエストのIDをセット
QST_有効クエストID = QUEST_ID

;クエスト初期処理
FLAG:調教モード = 調教_クエスト
FLAG:ウフフフラグ = 0
FLAG:クエストモード = 1
FLAG:クエスト_中断を許可 = 0
FLAG:クエスト_交流コマンド許可 = 0
FLAG:クエスト_ウフフ許可 = 0
FLAG:移動制限フラグ = 0

;クエスト時のデータの反映とフラグ初期化
FOR LOCAL, 0, CHARANUM
    ;衣装データを反映
    CFLAG:LOCAL:衣装プリセット = 衣装プリセット_クエスト
    CALL SET_CHARA_CLOTH_DATA(LOCAL)

    ;クエストでの好感度上昇値初期化
    CFLAG:LOCAL:QST好感度ボーナス = 0
NEXT

IF LIST_INDEXOF(_LIST_QST_PARTY, TOSTR(MASTER)) == -1
    FLAG:クエスト_あなた不参加 = 1
ENDIF

;パーティ人数を広域変数にセット
QST_PARTYNUM = LIST_COUNT(_LIST_QST_PARTY)
;一度でもパーティに参加したキャラを記録するリストを初期化
_LIST_PARTY_PARTICIPANT_RECORD = %_LIST_QST_PARTY%

CALL CLEAR_MPLY()
CALL CLEAR_MTAR()

TRYCALLFORM QST_TYPE_QUEST_{QST_有効クエストID}
QST_QUEST_TYPE = %RESULTS%

;クエスト用連想配列を作成。クエストの内部フラグなどを自由に格納できる領域
;広域変数なので関数をまたいでも参照可能。クエスト終了時に解放
MAP_RELEASE @"QUEST_{QST_有効クエストID}_MAP"
MAP_CREATE @"QUEST_{QST_有効クエストID}_MAP"
;エリア効果格納用の連想配列を作成
CALL HO_ROOM_EFFECT_CREATE_MAP

FLAG:ハウジングモード = 1
;全行動回数を消費。START_TRAIN_COMMON内部でもSHOP_TIMEが+1されるため-1で相殺
SHOP_TIME += CALC_SHOP_TIME() - SHOP_TIME - 1
IF QST_QUEST_TYPE == "MAP" || QST_QUEST_TYPE == "GMAP"
    ;クエストの導入イベントを実行
    CALL QST_INIT_QUEST_DATA(QST_有効クエストID, QST_QUEST_TYPE)
    CALL QST_INIT_QUEST()
    CALL QST_INTRO_EVENT()
    CALL START_TRAIN_COMMON

ELSE ;"DIALOGUE"型クエスト(マップ探索を伴わないクエスト)の処理
    ;クエストの導入イベントを実行
    CALL QST_INIT_QUEST_DATA(QST_有効クエストID, QST_QUEST_TYPE)
    CALL QST_INIT_QUEST()
    CALL QST_INTRO_EVENT()
ENDIF

;-------------------------------------------------
;クエスト固有の初期化処理
;-------------------------------------------------
@QST_INIT_QUEST()
TRYCALLFORM QST_INIT_QUEST_{QST_有効クエストID}

;-------------------------------------------------
;導入イベント呼出
;-------------------------------------------------
@QST_INTRO_EVENT()
TRYCCALLFORM QST_INTRO_QUEST_{QST_有効クエストID}
CATCH
    DEBUGPRINTFORML @QST_INTRO_EVENT QUEST_ID:{QST_有効クエストID}IDのQST_INTRO_EVENTは未定義です
ENDCATCH

;-------------------------------------------------
;クエストモード中の各イベント実行後に呼ばれる処理
;-------------------------------------------------
@QST_EVENTEND()
#DIM DYNAMIC CHARA_ID
;衣装損壊判定
FOR LOCAL, 0, QST_PARTYNUM
    CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))
    CALL QST_CHECK_ARMOR_BREAK(CHARA_ID)
NEXT

IF FLAG:調教モード == 調教_クエスト
    ;DO_TRAINを実行した場合は全滅判定しない(DO_TRAIN処理後に全滅判定する)
    IF FLAG:DO_DUMMYCOM > 0
        ;調教の結果全員行動不能になった場合全滅フラグを立てる
        CALL QST_IS_PARTY_KNOCKED_OUT()
        IF RESULT
            FLAG:QST_全滅フラグ = 1
            RETURN 1
        ENDIF
    ELSE
        ;DUMMYCOMが立っていない場合は全滅処理を呼び出す
        ;全滅フラグはイベント側が必要に応じて立てるのでここではセットしない
        CALL QST_IS_PARTY_KNOCKED_OUT()
        IF RESULT
            CALL QST_PARTY_KNOCKED_OUT
            IF RESULT
                RETURN 1
            ENDIF
        ENDIF
    ENDIF
ENDIF

;-------------------------------------------------
; パーティ全滅イベントが定義されている場合実行
;-------------------------------------------------
@QST_PARTY_KNOCKED_OUT()
TRYCCALLFORM QST_QUEST_{QST_有効クエストID}_PARTY_KNOCKED_OUT
    PRINTL
    RETURN 1
CATCH
ENDCATCH

;-------------------------------------------------
;コマンド実行後処理
;クエストモードが有効な場合に @EVENTCOMEND から呼ばれる
;-------------------------------------------------
@QST_EVENTCOMEND()
#DIM DYNAMIC CHARA_ID
#DIMS FUNCTION_NAME

FOR LOCAL, 0, CHARANUM
    TCVAR:LOCAL:HO体力増減値 = 0
    TCVAR:LOCAL:HO気力増減値 = 0
NEXT

;クエスト用連想配列にEVENTCOMEND_CALLEE_ONCEがセットされている場合、対象関数を呼び出す
IF MAP_HAS(@"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE_ONCE") == 1
    FUNCTION_NAME = %MAP_GET(@"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE_ONCE")%
    MAP_REMOVE @"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE_ONCE"
    TRYCCALLFORM %FUNCTION_NAME%
        DEBUGPRINTFORML EVENTCOMEND_CALLEE_ONCE = %FUNCTION_NAME%を呼び出し
    CATCH
        DEBUGPRINTFORML QUEST_{QST_有効クエストID}_MAPのEVENTCOMEND_CALLEE_ONCEに指定された関数%FUNCTION_NAME%は存在しません
    ENDCATCH
ELSEIF MAP_HAS(@"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE") == 1
    FUNCTION_NAME = %MAP_GET(@"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE")%
    TRYCCALLFORM %FUNCTION_NAME%
        DEBUGPRINTFORML EVENTCOMEND_CALLEE = %FUNCTION_NAME%を呼び出し
    CATCH
        DEBUGPRINTFORML QUEST_{QST_有効クエストID}_MAPのEVENTCOMEND_CALLEEに指定された関数%FUNCTION_NAME%は存在しません
    ENDCATCH
ENDIF

IF FLAG:QST_全滅フラグ == 1
    CALL QST_PARTY_KNOCKED_OUT
    FLAG:QST_全滅フラグ = 0
ENDIF

;クエスト終了
IF TFLAG:クエスト_完了フラグ
    CALL TRAIN_EXIT(0)
    LINES_TRAIN = LINECOUNT
    RETURN
ENDIF

CALL QST_EVENTEND()

;-------------------------------------------------
;クエスト中の調教終了時処理
;クエストモードが有効な場合に @TRAIN_EXIT から呼ばれる
;調教モードが切り替わるタイミングでも呼ばれる点に注意
;-------------------------------------------------
@QST_TRAIN_EXIT(終了理由)
#DIM 終了理由
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC EVENT_ID

;EVENTCOMEND_CALLEEの削除
CALL QST_REMOVE_FLAGMAP("EVENTCOMEND_CALLEE")
CALL QST_REMOVE_FLAGMAP("EVENTCOMEND_CALLEE_ONCE")

;次回の調教イベントに持ち越さない調教フラグを削除
CVARSET CFLAG, GETNUM(CFLAG, "主導除外") , 0
CVARSET CFLAG, GETNUM(CFLAG, "凌辱被害者フラグ") , 0

;調教参加者をパーティメンバーのみに
CVARSET CFLAG, GETNUM(CFLAG, "調教参加フラグ") , 0
FOR LOCAL, 0, LIST_COUNT(_LIST_QST_PARTY)
    CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))
    CFLAG:CHARA_ID:調教参加フラグ = 1
    CALL HO_TRAIN_EXIT_CALC_SATISFACTION(CHARA_ID)
    FLAG:ウフフイベント獲得淫堕点 += LIMIT(RESULT, 0, 30) / 2
NEXT

TFLAG:参加者数 = QST_PARTYNUM - 1
FLAG:ウフフフラグ = 0
FLAG:調教モード = 調教_クエスト
TFLAG:奉仕モード = 0
TFLAG:売春フラグ = 0
TFLAG:交流中断不可 = 0
TFLAG:調教開始時刻 = 0
TFLAG:調教経過時間 = 0
FLAG:クエスト_刻限による終了無効 = 0

;自動調教の制御系フラグを全てクリア
CALL TRAIN_EXIT_CREAR_AUTO_TRAIN_CONTROL_FLAG()

;調教関連の変数を初期化
FLAG:主導権所有者 = 0
TFLAG:調教経過時間 = 0
CALL CLEAR_MPLY()
CALL CLEAR_MTAR()
FOR LOCAL,0 , CHARANUM
    IF IS_PARTICIPATE_TRAIN(LOCAL)
        CALL ADD_MPLY(LOCAL)
        BREAK
    ENDIF
NEXT

;調教終了後イベントを呼出
CALL QST_DEQUEUE_TRAIN_EXIT_EVENT()
IF RESULTS == ""
    EVENT_ID = RESULT
    IF EVENT_ID != -1
        TRYCCALLFORM QST_QUEST_{QST_有効クエストID}_EVENT_{EVENT_ID}
            PRINTL
        CATCH
            DEBUGPRINTFORML QUEST_{QST_有効クエストID},EVENT_ID{EVENT_ID}に対応するイベント定義関数が存在しません
        ENDCATCH
    ENDIF
ELSE
    TRYCCALLFORM %RESULTS%
        PRINTL
    CATCH
        DEBUGPRINTFORML QUEST_{QST_有効クエストID},関数名:%RESULTS%に対応する関数が定義されていません
    ENDCATCH
ENDIF
VARS FUNCTION_NAME
FUNCTION_NAME = %QST_GET_FLAGMAP("TRAIN_EXIT_CALLEE")%
IF FUNCTION_NAME != ""
    CALL QST_REMOVE_FLAGMAP("TRAIN_EXIT_CALLEE")
    TRYCCALLFORM %FUNCTION_NAME%
        PRINTL
    CATCH
        DEBUGPRINTFORML QUEST_{QST_有効クエストID},関数名:%FUNCTION_NAME%に対応する関数が定義されていません
    ENDCATCH
ENDIF

;調教の結果全員行動不能になった場合全滅イベントを呼び出す
CALL QST_IS_PARTY_KNOCKED_OUT()
IF RESULT
    CALL QST_PARTY_KNOCKED_OUT()
ENDIF

;-------------------------------------------------
;クエストモードの有効時クエストの終了時に呼ばれる処理
;AFTERTRAIN後、@EVENTEND から呼ばれる
;-------------------------------------------------
@QUEST_EVENTEND
#DIM CHARA_ID

;成長処理のため、クエスト内PT編成機能でパーティから離脱している仲間の調教参加フラグを立てる
FOR LOCAL, 0, LIST_COUNT(_LIST_PARTY_PARTICIPANT_RECORD)
    CHARA_ID = LIST_GETINT(_LIST_PARTY_PARTICIPANT_RECORD, LOCAL)
    IF !IS_SAME_FACTION(CHARA_ID)
        CFLAG:CHARA_ID:調教参加フラグ = 0
    ELSE
        CFLAG:CHARA_ID:調教参加フラグ = 1
    ENDIF
NEXT

;クエスト終了時の好感度上昇処理
CALL QST_UPDATE_RELATION()

;クエスト用一時連想配列を解放
MAP_RELEASE @"QUEST_{QST_有効クエストID}_MAP"

;各種フラグクリア
FLAG:QST_終了時刻 = 0
QST_イベント選択制限 = -1
FLAG:移動制限フラグ = 0
FLAG:クエスト_ウフフ許可 = 0
TFLAG:クエスト_ダミー設備ID = 0
QST_QUEST_TYPE '= ""

;-------------------------------------------------
;クエストモードの有効時クエストの終了時に呼ばれる処理
;AFTERTRAIN後、@EVENTEND から呼ばれる
;-------------------------------------------------
@QST_UPDATE_RELATION
#DIM CHARA_ID
#DIM PARTY_NUM
#DIMS LIST_PARTY

LIST_PARTY = %_LIST_PARTY_PARTICIPANT_RECORD%
PARTY_NUM = LIST_COUNT(LIST_PARTY)
SIF PARTY_NUM <= 1
    RETURN

PRINTL
VARI IS_LIKE_CHANGED
VARI I
VARI J
VARI 好感度上昇値
VARI TARGET_ID
FOR I, 0, PARTY_NUM
    CHARA_ID = TOINT(LIST_GET(LIST_PARTY, I))
    IF CHARA_ID == MASTER || TCVAR:CHARA_ID:行動不能フラグ == 1 || CFLAG:CHARA_ID:QST好感度ボーナス <= 0 || !IS_SAME_FACTION(CHARA_ID)
        CONTINUE
    ENDIF
    FOR J, 0, PARTY_NUM
        TARGET_ID = LIST_GETINT(LIST_PARTY, J)
        IF !IS_SAME_FACTION(TARGET_ID)
            CONTINUE
        ENDIF
        IF TARGET_ID == CHARA_ID
            CONTINUE
        ENDIF
        好感度上昇値 = MIN(QST_MAX_RELATION_UP, CFLAG:CHARA_ID:QST好感度ボーナス)
        IF TARGET_ID == MASTER
            CFLAG:CHARA_ID:好感度 += 好感度上昇値
            IS_LIKE_CHANGED = 1
        ELSE
            CALL REL_ADD(CHARA_ID, TARGET_ID, 好感度上昇値)
            IS_LIKE_CHANGED = 1
        ENDIF
    NEXT
    IF IS_LIKE_CHANGED
        PRINTFORML 冒険を経て%ANAME(CHARA_ID)%と仲間との好感度が{好感度上昇値}上昇した
    ENDIF
NEXT

repo_name: napo/erafl

license: unknown


code:
;-------------------------------------------------
; クエスト選択画面
;-------------------------------------------------
@QST_DRAW_MENU_WINDOW
#DIM LINE_NUM
#DIMS DYNAMIC _LIST_QST_PREV_PARTY
#DIM ITER_I

CALL PRINTLINE_RESERVE()

;初期処理
QST_SELECT_QUEST_ID = -1
SIF QST_DIC_QUEST_FILTER == ""
    QST_DIC_QUEST_FILTER '= "[ALL:1]"

;パーティ編成が空の場合、あなたを固定で追加
FOR ITER_I, 0, VARSIZE("_LIST_QST_PARTY_PRESET")
    IF _LIST_QST_PARTY_PRESET:ITER_I == ""
        _LIST_QST_PARTY_PRESET:ITER_I = %LIST_ADD(_LIST_QST_PARTY_PRESET:ITER_I, TOSTR(MASTER))%
        ;パーティ編成済みの場合、現在キャラクターが編成条件を満たしているか確認し、満たしていない場合パーティから除外する
    ELSE
        _LIST_QST_PREV_PARTY = %_LIST_QST_PARTY_PRESET:ITER_I%
        _LIST_QST_PARTY_PRESET:ITER_I '= ""
        FOR LOCAL, 0, LIST_COUNT(_LIST_QST_PREV_PARTY)
            CALL HOUSING_MODE_CHECK_CHARA_JOINABLE(TOINT(LIST_GET(_LIST_QST_PREV_PARTY, LOCAL)))
            IF !RESULT
                CONTINUE
            ELSE
                _LIST_QST_PARTY_PRESET:ITER_I = %LIST_ADD(_LIST_QST_PARTY_PRESET:ITER_I, LIST_GET(_LIST_QST_PREV_PARTY, LOCAL))%
            ENDIF
        NEXT
    ENDIF
NEXT

WHILE 1
    LINE_NUM = LINECOUNT
    REDRAW 0
    CALL WndMgr_DestroyWindow(-1)
    CALL QST_DRAW_MENU_WINDOW_PARENT
    CALL QST_DRAW_MENU_WINDOW_LEFT
    CALL QST_DRAW_MENU_WINDOW_RIGHT
    CALL QST_DRAW_MENU_WINDOW_BOTTOM
    CALL WndMgr_DisplayAll()
    REDRAW 1
    CALL QST_WINDOW_INPUT()
    IF RESULT == -1
        RETURN
    ELSEIF RESULT == 0
        CLEARLINE LINECOUNT - LINE_NUM
        SELECTCASE QST_GUILD_MENU_CATEGORY
            CASE 8
                CALL HO_SHOP_MENU("ギルドショップ", "得点引換", "QUEST_MENU_DIC_SHOP_STOCK_0")
            CASE 9
                CALL HO_ITEM_MENU()
        ENDSELECT
        QST_GUILD_MENU_CATEGORY = 0
    ELSEIF RESULT == 1
        BREAK
    ENDIF
    CLEARLINE LINECOUNT - LINE_NUM
WEND
CALL QUEST_MODE_START(QST_SELECT_QUEST_ID)

@QST_DRAW_MENU_WINDOW_PARENT
#DIM CONST WINDOW_ID = 0
#DIM CONST WND_WIDTH  = 170
#DIM CONST WND_HEIGHT = 45
#DIM DYNAMIC L_CNT
#DIM DYNAMIC F_COL, 11
#DIM CONST BTN_ID = 100

;CATEGORYタブの文字色
VARSET F_COL, カラー_白
F_COL:QST_GUILD_MENU_CATEGORY = カラー_選択中

CALL WndMgr_CreateWindow(WINDOW_ID, 0, 1, WND_WIDTH, WND_HEIGHT, 2)
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@S:1@@C:{カラー_注釈}@◇　ギルド　◇@/C@@/S@")
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_選択不可}@―@/C@" * ((WND_WIDTH / 2) - 2))
LOCALS '= @"@C:{F_COL:0}@@B:{BTN_ID}@[クエストボード]@/B@@/C@"
LOCALS += @"@C:{F_COL:8}@@B:{BTN_ID + 8}@　[得点の利用]@/B@@/C@"
LOCALS += @"@C:{F_COL:9}@@B:{BTN_ID + 9}@　[アイテム確認]@/B@@/C@"
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, LOCALS)
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_選択不可}@―@/C@" * ((WND_WIDTH / 2) - 2))

LOCALS '= @"@B:9999999@[キャンセル]@/B@"
CALL WndMgr_TextSet(WINDOW_ID, WND_HEIGHT - 3, @"%LOCALS%")

@QST_DRAW_MENU_WINDOW_LEFT
#DIM CONST WINDOW_ID = 1
#DIM CONST WND_WIDTH  = 64
#DIM CONST WND_HEIGHT = 38
#DIM CONST ヘッダー行数 = 4
#DIM CONST クエストリスト行数 = 28
#DIM CONST BTN_ID = 1000
#DIMS DYNAMIC DETAIL_LIST, ITEM_LENGTH
#DIM DYNAMIC ITEM_NUM
#DIM DYNAMIC L_CNT
#DIM DYNAMIC PAGE_NUM
#DIMS DYNAMIC STR_FOOTER
#DIM DYNAMIC DETAIL_LINECOUNT
#DIM DYNAMIC QUEST_ID
#DIMS DYNAMIC LIST_QUEST_TAG
#DIMS DYNAMIC TAGS
#DIM DYNAMIC TAG_UNMATCHED
#DIM DYNAMIC ITER_I
#DIM DYNAMIC ITER_J

CALL HO_TRADE_COUNT_PAGE_NUM(HO_ITEM_STOCK, クエストリスト行数)
PAGE_NUM = RESULT

;ウィンドウ作成
CALL WndMgr_CreateWindow(WINDOW_ID, 2, 6, WND_WIDTH, WND_HEIGHT, 2)
CALL WndMgr_Attribute(WINDOW_ID, "BorderColor", カラー_選択不可)

;ヘッダー
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_注釈}@◇受注可能なクエスト◇@/C@")
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_選択不可}@―@/C@" * ((WND_WIDTH / 2) - 2))
;フィルター
LOCALS '= @"@C:{DIC_GET(QST_DIC_QUEST_FILTER, "ALL") == "1" ? カラー_選択中 # カラー_選択不可}@@B:[FILTER:ALL]@[ALL]@/B@@/C@"
LOCALS += " /"
LOCALS += @"@C:{DIC_GET(QST_DIC_QUEST_FILTER, "周期") == "1" ? カラー_選択中 # カラー_選択不可}@@B:[FILTER:周期]@ [周期・恒常]@/B@@/C@"
LOCALS += @"@C:{DIC_GET(QST_DIC_QUEST_FILTER, "単発") == "1" ? カラー_選択中 # カラー_選択不可}@@B:[FILTER:単発]@ [単発]@/B@@/C@"
LOCALS += " /"
LOCALS += @"@C:{DIC_GET(QST_DIC_QUEST_FILTER, "探索") == "1" ? カラー_選択中 # カラー_選択不可}@@B:[FILTER:探索]@ [探索]@/B@@/C@"
LOCALS += @"@C:{DIC_GET(QST_DIC_QUEST_FILTER, "街") == "1" ? カラー_選択中 # カラー_選択不可}@@B:[FILTER:街]@ [街]@/B@@/C@"
LOCALS += @"@C:{DIC_GET(QST_DIC_QUEST_FILTER, "連戦") == "1" ? カラー_選択中 # カラー_選択不可}@@B:[FILTER:連戦]@ [連戦]@/B@@/C@"
LOCALS += @"@C:{DIC_GET(QST_DIC_QUEST_FILTER, "イベント") == "1" ? カラー_選択中 # カラー_選択不可}@@B:[FILTER:イベント]@ [イベント]@/B@@/C@"
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, LOCALS)
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_選択不可}@―@/C@" * ((WND_WIDTH / 2) - 2))

;明細リスト作成
DETAIL_LINECOUNT = 0
L_CNT = 0
FOR QUEST_ID, 0, QST_MAX_QUESTNUM
    TRYCALLFORM QST_AVAILABLE_QUEST_{QUEST_ID}(QUEST_ID)
    SIF !RESULT
        CONTINUE
    ;フィルターの反映
    ;フィルタ[ALL]がOFF
    IF DIC_GET(QST_DIC_QUEST_FILTER, "ALL") != "1"
        VARSET RESULTS
        TAG_UNMATCHED = 1
        ;クエストのタグを取得
        TRYCALLFORM QST_QUEST_TAG_{QUEST_ID}
        LIST_QUEST_TAG = %RESULTS%
        ;フィルタと一致するタグがあるかチェック
        FOR ITER_I, 0, LIST_COUNT(LIST_QUEST_TAG)
            TAG_UNMATCHED = 0
            TAGS = %LIST_GET(LIST_QUEST_TAG, ITER_I)%
            IF DIC_GET(QST_DIC_QUEST_FILTER, TAGS) != "1"
                TAG_UNMATCHED = 1
                BREAK
            ENDIF
        NEXT
        SIF TAG_UNMATCHED
            CONTINUE
    ENDIF
    TRYCCALLFORM QST_TITLE_QUEST_{QUEST_ID}
        IF QUEST_ID == QST_SELECT_QUEST_ID
            LOCALS '= @"@C:{カラー_選択中}@%RESULTS%@/C@"
        ELSE
            LOCALS '= @"@C:{カラー_白}@%RESULTS%@/C@"
        ENDIF
        DETAIL_LIST:DETAIL_LINECOUNT '= @"@B:{BTN_ID + QUEST_ID}@%LOCALS%@/B@"
        DETAIL_LINECOUNT ++
    CATCH
    ENDCATCH
NEXT
PAGE_NUM = DETAIL_LINECOUNT / クエストリスト行数

;明細リスト出力
L_CNT = 0
FOR LOCAL, クエストリスト行数 * QST_MENU_PAGE_LEFT, クエストリスト行数 * (QST_MENU_PAGE_LEFT + 1)
    IF  L_CNT / クエストリスト行数 <= 0
        CALL WndMgr_TextSet(WINDOW_ID, L_CNT + ヘッダー行数, TAG_PRINT_SHAPE(DETAIL_LIST:LOCAL, 24, 1, 0) )
        L_CNT++
    ELSE
        CALL WndMgr_TextAdd(WINDOW_ID, (L_CNT % クエストリスト行数) + ヘッダー行数, TAG_PRINT_SHAPE(DETAIL_LIST:LOCAL, 24, 1, 0))
        L_CNT ++
    ENDIF
    L_CNT ++
NEXT

;フッター
IF PAGE_NUM > 0
    STR_FOOTER += QST_MENU_PAGE_LEFT > 0 ? @"@B:{9000}@<<@/B@ " # "   "
    STR_FOOTER += @"%TOSTR(QST_MENU_PAGE_LEFT + 1, "..")% "
    STR_FOOTER += QST_MENU_PAGE_LEFT < PAGE_NUM ? @"@B:{9001}@>>@/B@" # "  "
    CALLF TAG_PRINT_SHAPE(STR_FOOTER, WND_WIDTH - 8, 1, 2)
    CALL WndMgr_TextSet(WINDOW_ID, WND_HEIGHT - 3, @"@C:{カラー_注釈}@%RESULTS%@/C@")
ENDIF

@QST_DRAW_MENU_WINDOW_RIGHT
#DIM CONST WINDOW_ID = 2
#DIM CONST WND_WIDTH  = 102
#DIM CONST WND_HEIGHT = 25
#DIM CONST ヘッダー行数 = 2
#DIM CONST BTN_ID = 2000
#DIM DYNAMIC L_CNT

;ウィンドウ作成
CALL WndMgr_CreateWindow(WINDOW_ID, 66, 6, WND_WIDTH, WND_HEIGHT, 2)
CALL WndMgr_Attribute(WINDOW_ID, "BorderColor", カラー_選択不可)
SIF QST_SELECT_QUEST_ID == -1
    RETURN
;ヘッダー
TRYCALLFORM QST_TITLE_QUEST_{QST_SELECT_QUEST_ID}
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_注釈}@◇%RESULTS%◇@/C@")
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_選択不可}@―@/C@" * ((WND_WIDTH / 2) - 2))

;クエスト概要欄
VARSET RESULTS
FOR LOCAL, 0, 10
    TRYCALLFORM QST_SUMALLY1_QUEST_{QST_SELECT_QUEST_ID}
    CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"%RESULTS:LOCAL%")
NEXT
;クエスト備考欄
L_CNT++
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_注釈}@◇備考◇@/C@")
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_選択不可}@―@/C@" * ((WND_WIDTH / 2) - 2))
VARSET RESULTS
FOR LOCAL, 0, 7
    TRYCALLFORM QST_SUMALLY2_QUEST_{QST_SELECT_QUEST_ID}
    CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"%RESULTS:LOCAL%")
NEXT

@QST_DRAW_MENU_WINDOW_BOTTOM
#DIM CONST WINDOW_ID = 3
#DIM CONST WND_WIDTH  = 102
#DIM CONST WND_HEIGHT = 13
#DIM CONST ヘッダー行数 = 2
#DIM CONST パーティリスト行数 = 7
#DIM CONST BTN_ID = 3000
#DIM DYNAMIC L_CNT
#DIM DYNAMIC CHARA_ID
#DIMS DYNAMIC P_SPRITE
#DIM DYNAMIC TOTAL_POWER
#DIM DYNAMIC AVG_POWER

CALL WndMgr_CreateWindow(WINDOW_ID, 66, 31, WND_WIDTH, WND_HEIGHT, 2)
CALL WndMgr_Attribute(WINDOW_ID, "BorderColor", カラー_選択不可)

;ヘッダー
CALL WndMgr_TextSet(WINDOW_ID, L_CNT, @"@C:{カラー_注釈}@◇パーティ編成◇@/C@")
FOR LOCAL, 0, QST_MAX_PARTY_PRESET
    CALL WndMgr_TextAdd(WINDOW_ID, L_CNT, @"@C:{QST_SELECT_PARTY_PRESET == LOCAL ? カラー_選択中 # カラー_選択不可}@　@B:{4000 + LOCAL}@[編成{LOCAL + 1}]@/B@@/C@")
NEXT
L_CNT ++
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_選択不可}@―@/C@" * ((WND_WIDTH / 2) - 2))

;ポートレイト表示部
FOR LOCAL, 0, パーティリスト行数
    CALL WndMgr_TextSet(WINDOW_ID, ヘッダー行数 + LOCAL, "")
NEXT
FOR LOCAL, 0, LIST_COUNT(_LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET)
    CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET, LOCAL))
    CALL RESET_FACE_SPRITE(CHARA_ID)
    CALL HO_SET_PORTRAIT_SPRITE(CHARA_ID, "ステータス画面")
    P_SPRITE = %CSTR:CHARA_ID:キャラ顔グラ%
    LOCALS = %TAG_PRINT_SHAPE(@"@B:{BTN_ID + CHARA_ID}@[%SNAME(CHARA_ID)%]@/B@", 13, 1, 2)%
    CALL WndMgr_TextAdd(WINDOW_ID, ヘッダー行数 + 0, @"%LOCALS%")
    CALL WndMgr_TextAdd(WINDOW_ID, ヘッダー行数 + 1, "")
    CALL WndMgr_TextAdd(WINDOW_ID, ヘッダー行数 + 2, "")
    CALL WndMgr_TextAdd(WINDOW_ID, ヘッダー行数 + 3, "")
    CALL WndMgr_TextAdd(WINDOW_ID, ヘッダー行数 + 4, "")
    CALL WndMgr_TextAdd(WINDOW_ID, ヘッダー行数 + 5, "")
    CALL WndMgr_TextAdd(WINDOW_ID, ヘッダー行数 + 6, @"@B:{BTN_ID + CHARA_ID}@@I:%P_SPRITE%,height='{GETCONFIG("フォントサイズ") * 40}',ypos='-500'@@/I@@/B@")
NEXT

;フッター
L_CNT = ヘッダー行数 + パーティリスト行数
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"@C:{カラー_選択不可}@―@/C@" * ((WND_WIDTH / 2) - 2))
VARSET LOCALS
;クエスト開始ボタン
;・「クエストが選択されている」「パーティメンバーが1人以上」で選択可能
IF QST_SELECT_QUEST_ID != -1 && LIST_COUNT(_LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET)
    LOCALS += @"@B:{BTN_ID + 900}@[クエストを開始する]@/B@　"
ELSE
    LOCALS += @"@C:{カラー_選択不可}@[クエストを開始する]@/C@　"
ENDIF
;パーティ編成ボタン
LOCALS += @"@B:{BTN_ID + 901}@[パーティ編成]@/B@　"
;平均戦闘値
TOTAL_POWER = 0
FOR LOCAL, 0, LIST_COUNT(_LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET)
    CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET, LOCAL))
    TOTAL_POWER += ABL:CHARA_ID:戦闘
NEXT
IF LOCAL
    AVG_POWER = TOTAL_POWER / LOCAL
ELSE
    ;0除算対策
    AVG_POWER = 0
ENDIF
LOCALS += @"@C:{カラー_注釈}@《平均戦闘値:{AVG_POWER}》@/C@　"
CALL WndMgr_TextSet(WINDOW_ID, L_CNT++, @"%LOCALS%")

@QST_WINDOW_INPUT()
#DIMS INPUT_VALUES
#DIM  INPUT_VALUE
#DIM DYNAMIC VALUE
#DIM DYNAMIC INPUT_WINDOW_ID
#DIM PREV_FILTER_IS_ALL
#DIMS KEYS

ONEINPUTS
CLEARLINE 1
PRINTL
INPUT_VALUES = %RESULTS%
IF ISNUMERIC(INPUT_VALUES)
    INPUT_VALUE = TOINT(INPUT_VALUES)
    ;キャンセル
    IF INPUT_VALUE == 9999999
        RETURN -1
    ELSEIF INRANGE(INPUT_VALUE, 100, 110)
        QST_GUILD_MENU_CATEGORY = INPUT_VALUE - 100
        IF INRANGE(QST_GUILD_MENU_CATEGORY, 8, 10)
            RETURN 0
        ENDIF
    ELSEIF INRANGE(INPUT_VALUE, 1000, 1000 + QST_MAX_QUESTNUM)
        IF QST_SELECT_QUEST_ID != INPUT_VALUE - 1000
            QST_SELECT_QUEST_ID = INPUT_VALUE - 1000
            CALL FL_PLAYSE("Page_0.mp3")
        ENDIF
    ELSEIF INRANGE(INPUT_VALUE, 3000, 3000 + CHARANUM)
        VARSET SHOP_CHARA_LIST, -1
        FOR LOCAL, 0, LIST_COUNT(_LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET)
            SHOP_CHARA_LIST:LOCAL = TOINT(LIST_GET(_LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET, LOCAL))
        NEXT
        CALL SHOW_INFO_WITH_UI(INPUT_VALUE - 3000, 1)
        ;パーティプリセット切り替え
    ELSEIF INRANGE(INPUT_VALUE, 4000, 4000 + QST_MAX_PARTY_PRESET - 1)
        QST_SELECT_PARTY_PRESET = INPUT_VALUE - 4000
    ELSEIF INRANGE(INPUT_VALUE, 3900, 3901)
        IF INPUT_VALUE == 3900
            _LIST_QST_PARTY = %_LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET%
            QST_PARTYNUM = LIST_COUNT(_LIST_QST_PARTY)
            CALL QST_WINDOW_ERROR_CHECK()
            IF RESULT
                ;クエスト開始
                CALL FL_PLAYSE("Step_1.mp3")
                RETURN 1
            ENDIF
        ELSE
            CALL PRINTLINE_CLEAR()
            CALL DRAW_LINE()
            PRINTL ◇ パーティ選択
            CALL DRAW_LINE()
            ;キャラ選択
            VARSET SELECTED_CHARA
            FOR LOCAL, 0, LIST_COUNT(_LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET)
                SELECTED_CHARA:(TOINT(LIST_GET(_LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET, LOCAL))) = 1
            NEXT
            CALL SELECT_CHARA_LIST_MULTI_ONLY_LOGIC_SLG(6, "QUEST", "QUEST")
            _LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET '= ""
            FOR LOCAL, 0, SELECTED_CHARA_NUM
                _LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET = %LIST_ADD(_LIST_QST_PARTY_PRESET:QST_SELECT_PARTY_PRESET, TOSTR(SELECTED_CHARA:LOCAL))%
            NEXT
        ENDIF
    ELSEIF INRANGE(INPUT_VALUE, 9000, 9001)
        IF INPUT_VALUE == 9001
            QST_MENU_PAGE_LEFT ++
        ELSE
            QST_MENU_PAGE_LEFT --
        ENDIF
    ENDIF
ELSE
    IF DIC_CONTAINSKEY(INPUT_VALUES, "FILTER")
        ;変更前のフィルタがALLだったかを記憶
        PREV_FILTER_IS_ALL = ((DIC_GET(QST_DIC_QUEST_FILTER, "ALL") == "1") ? 1 # 0)
        ;今回変更するフィルタ名を取得
        KEYS = %DIC_GET(INPUT_VALUES, "FILTER")%
        ;QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, KEYS, DIC_GET(QST_DIC_QUEST_FILTER, KEYS) == "1" ? "0" # "1")%

        SELECTCASE KEYS
                ;ALL
            CASE "ALL"
                ;フィルタ情報を「ALLのみON」に上書きする
                QST_DIC_QUEST_FILTER '= "[ALL:1]"
                ;クエスト周期フィルタ変更時
            CASE "周期", "単発"
                ;クエスト周期フィルタを一旦全部OFFにして変更対象のフィルタだけONにする
                QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "周期", "0")%
                QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "単発", "0")%

                QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, KEYS  , "1")%
                ;クエスト種類フィルタ変更時
            CASE "探索", "街", "連戦", "イベント"
                ;クエスト種類フィルタを一旦全部OFFにして変更対象のフィルタだけONにする
                QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "探索"    , "0")%
                QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "街"      , "0")%
                QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "連戦"    , "0")%
                QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "イベント", "0")%

                QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, KEYS      , "1")%
        ENDSELECT

        ;ALL以外に切り替えた場合はALLをOFFにする
        SIF KEYS != "ALL"
            QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "ALL","0")%

        ;ALLからALL以外に切り替えた場合、変更してないほうのフィルタグループをすべてONする
        IF PREV_FILTER_IS_ALL && KEYS != "ALL"
            SELECTCASE KEYS
                    ;クエスト周期フィルタ変更時
                CASE "周期", "単発"
                    ;クエスト種類フィルタをすべてON
                    QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "探索"    , "1")%
                    QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "街"      , "1")%
                    QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "連戦"    , "1")%
                    QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "イベント", "1")%
                    ;クエスト種類フィルタ変更時
                CASE "探索", "街", "連戦", "イベント"
                    ;クエスト周期フィルタをすべてON
                    QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "周期", "1")%
                    QST_DIC_QUEST_FILTER = %DIC_SET(QST_DIC_QUEST_FILTER, "単発", "1")%
            ENDSELECT
        ENDIF
        ;ページ指定をリセット
        QST_MENU_PAGE_LEFT = 0
    ENDIF
ENDIF

@QST_WINDOW_ERROR_CHECK()
IF LIST_COUNT(_LIST_QST_PARTY) == 0
    CALLF TAG_PRINT(@"@C:{カラー_注意}@パーティが編成されていません@/C@", 1)
    WAIT
    RETURN 0
ENDIF
;クエスト固有の開始条件が設定されていればそちらに従う
TRYCCALLFORM QST_CAN_START_QUEST_{QST_SELECT_QUEST_ID}(QST_SELECT_QUEST_ID)
    RETURN RESULT
CATCH
    RETURN 1
ENDCATCH

@SELECT_CHARA_LIST_SHOW_LOGIC_QUEST(CHARA_ID)
#DIM CHARA_ID
RETURN CFLAG:CHARA_ID:所属 == CFLAG:MASTER:所属

@SELECT_CHARA_LIST_SELECT_LOGIC_QUEST(CHARA_ID)
#DIM CHARA_ID
;RETURN CHARA_ID != MASTER
RETURN 1


code:
;-------------------------------------------------
;クエスト定義ファイル
;QUEST_0:サンプルクエスト
;-------------------------------------------------
;クエスト選択画面で表示されるクエスト名
@QST_TITLE_QUEST_0
RESULTS '= "ゴブリンの洞窟"

;ギルドメニューでクエストをフィルターする際のタグリスト。末尾の','を忘れないように
@QST_QUEST_TAG_0
RESULTS '= "周期,探索,"

;クエスト選択画面で呼び出される概要説明
;タグで装飾が可能(@FuncTagSetText_CreateColorBarText 参照)
;クエストメニュー右上段の概要欄。10行まで
@QST_SUMALLY1_QUEST_0
RESULTS:0 '= "ゴブリンが山間の村落や街道に下り掠奪を繰り返しているようだ"
RESULTS:1 '= "山嶺の洞窟にあるゴブリンの巣窟に赴き、連中を殲滅できればギルドから報酬が支払われる"
RESULTS:2 '= "また、彼らに攫われた村人や駆け出し冒険者たちを救出できれば追加報奨が得られる"

;クエストメニュー右下段の備考欄。難易度や条件、報酬等を記述。7行まで
@QST_SUMALLY2_QUEST_0
RESULTS:0 '= @"難易度：@C:{カラー_注意}@★@/C@"
RESULTS:1 '= "報酬：3,500ディナリ～"
RESULTS:2 '= "推奨パーティ人数:3人以上　　　推奨平均戦闘値：20以上"
RESULTS:3 '= ""
RESULTS:4 '= ""
RESULTS:5 '= @"@C:{カラー_選択不可}@「連中を侮らん方がいい。駆け出しのひよっ子が何人もぶっ壊されるのを見てきたからな」@/C@"
RESULTS:6 '= @"@C:{カラー_選択不可}@「……特に若い娘の末路は目も当てられん」@/C@"

;-------------------------------------------------
;クエストの実行可能条件を定義
;-------------------------------------------------
@QST_AVAILABLE_QUEST_0(QUEST_ID)
#DIM QUEST_ID
RETURN 1

;-------------------------------------------------
;マップデータ定義
;[ROOM_ID:]　…　配置するエリアの種類
;[ROOM_PATH:]　…　エリア間の接続情報(※)
;[EVENT_LIST:]　…　エリアに配置するイベントのID(※)
;(※)要素の末尾の','を忘れないように注意
;<マップを編集するには>
;EmueraをDEBUGMODEで起動した場合、[領地の手入れ]画面から編集したエリア情報をテキストファイルにエクスポートできます
;sav/txt00.txtに出力されたマップ情報をコピペして編集すると少し楽になります
;<DEBUG MODE起動方法>
;https://ja.osdn.net/projects/emuera/wiki/debug
;-------------------------------------------------
@QST_SET_MAPDATA_QUEST_0(MAP_ID)
#DIM MAP_ID
QST_MAPNAME '= "ゴブリンの洞窟"
_DIC_HO_MAPDATA:MAP_ID:0  '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:1  '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:2  '= "[ROOM_ID:201][ROOM_PATH:7,][EVENT_LIST:0,]"
_DIC_HO_MAPDATA:MAP_ID:3  '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:4  '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:5  '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:6  '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:7  '= "[ROOM_ID:201][ROOM_PATH:2,8,12,][EVENT_LIST:6,]"
_DIC_HO_MAPDATA:MAP_ID:8  '= "[ROOM_ID:201][ROOM_PATH:7,][EVENT_LIST:1,8,]"
_DIC_HO_MAPDATA:MAP_ID:9  '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:10 '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:11 '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:12 '= "[ROOM_ID:201][ROOM_PATH:7,17,][EVENT_LIST:4,]"
_DIC_HO_MAPDATA:MAP_ID:13 '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:14 '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:15 '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:16 '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:17 '= "[ROOM_ID:201][ROOM_PATH:12,22,][EVENT_LIST:3,7,]"
_DIC_HO_MAPDATA:MAP_ID:18 '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:19 '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:20 '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:21 '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:22 '= "[ROOM_ID:200][ROOM_PATH:17,]"
_DIC_HO_MAPDATA:MAP_ID:23 '= "[ROOM_ID:0]"
_DIC_HO_MAPDATA:MAP_ID:24 '= "[ROOM_ID:0]"

;-------------------------------------------------
;クエストのタイプ
;マップ探索を伴う場合 "MAP"
;会話・文章のみで完結する場合 "DIALOGUE"
;-------------------------------------------------
@QST_TYPE_QUEST_0
RESULTS '= "MAP"

;-------------------------------------------------
;QST_INTRO_QUEST_n はQUEST開始前に呼ばれる
;クエストの導入文などを記述
;"DIALOGUE"型のクエストの場合当この関数のみを実行します
;-------------------------------------------------
@QST_INTRO_QUEST_0
PRINTFORMW %QST_LEADER_NAME()%はギルドから提供された地図が指す洞窟へ向かった
PRINTFORMW 依頼書曰く、山地の洞窟に拠点を構えたゴブリンたちが近隣の農家や行商人を略奪しているらしい
PRINTFORMW %QST_LEADER_NAME()%に課せられた任務はそのゴブリンたちの根絶である
PRINTL
PRINTFORMW また、依頼書にはもしゴブリンに攫われた生存者を発見したら可能な限り救出してほしいともある
PRINTFORMW 可能であれば生存者を陰惨な運命から解放するよう、尽力してもよい
PRINTL
PRINTFORMW ……彼らには他人種を攫っては欲望のままに犯し、喰らう醜悪な性質がある
PRINTFORMW 非力ながらも賢しいゴブリンたちを侮るべきではない
PRINTFORMW %QST_LEADER_NAME()%自身が虜囚となれば、無事では済まないだろう……
PRINTW
CALL FL_PLAYBGM("Ambient_dark_0.ogg")

;-------------------------------------------------
;イベントリストに登録するイベント情報を記述する
;<記述方法>
;EVENT_TRIGGER
; "ENTER_ROOM" イベントが配置されたルームの入室時に強制的に実行される
; "EVENT_SLOT" イベントリストのクリック時に実行される
; "TRAIN_EXIT" 調教イベント終了後 ※予め変数:QST_TRAIN_EXIT_EVENT_ID に調教終了後に実行したいイベントIDを指定する必要がある
;EVENT_SLOT_NAME
; イベントリスト上の表示名
;EVENT_TYPE
; "ONCE" クエスト中一度のみ呼出されるイベント(※トリガーが"ENTER_ROOM"のイベントのみ機能)
;           実行済みかをフラグ管理するまでもないイベント(会話など)で使用する想定
;
;戻り値
; RESULT:0 = EVENT_TRIGGER
; RESULT:1 = EVENT_SLOT_NAME
; RESULT:2 = EVENT_TYPE
;-------------------------------------------------
;-------------------------------------------------
;EV0
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_0_EVENT_0
#DIMS EVENT_TRIGGER = "ENTER_ROOM"
RESULTS = %EVENT_TRIGGER%

;-------------------------------------------------
;実行するイベントの実行内容を記述
;イベント用の関数はTRYCALLFORMで呼ばれるため
;@QST_QUEST_{QUEST_ID}_EVENT_{EVENT_ID}の書式で記述する
;-------------------------------------------------
@QST_QUEST_0_EVENT_0
#DIM CONST 関連イベントID = 2
#DIM DYNAMIC EV2救出実行済み
CALL QST_GET_EVENT_FLAG(関連イベントID)
SIF RESULT == 1
    EV2救出実行済み = 1

IF !EV2救出実行済み
    PRINTFORMW %QST_LEADER_NAME()%はゴブリンたちに奇襲を仕掛けた！
    PRINTFORMW ゴブリンたちは不意をつかれて混乱している！
ELSE
    PRINTFORMW 先程の騒ぎを聞きつけゴブリンたちは守りを固めている
    PRINTFORMW %QST_LEADER_NAME()%を迎え撃つ準備は整っているようだ！
ENDIF
;;戦闘イベント処理
;白兵戦参加メンバーの初期化
CALL CC_INIT()
;クエストのパーティメンバーを攻撃側として追加
CALL CC_ADDPARTY("ATTACKER")

;防御側キャラクターの設定(最大6名)
CALL CC_ADDMOB_FROM_TABLE("DEFENDER", "ゴブリン", "ゴブリン１")
CALL CC_ADDMOB_FROM_TABLE("DEFENDER", "ゴブリン", "ゴブリン２")
IF EV2救出実行済み
    CALL CC_ADDMOB_FROM_TABLE("DEFENDER", "ゴブリン", "ゴブリン３")
    CALL CC_ADDMOB_FROM_TABLE("DEFENDER", "ゴブリン", "ゴブリン４")
ENDIF
;戦闘処理呼出
CALL CLOSE_COMBAT()
IF RESULT == 1
    ;戦闘終了後のHPをパーティに適用
    CALL CC_APPLY_CHARA_HP()
    ;防御側エネミーから戦利品を獲得
    CALL CC_GET_LOOT_FROM("DEFENDER")
    CALL FL_PLAYSE("Fanfare_0.ogg")
    PRINTFORMW %QST_LEADER_NAME()%は洞窟に巣食うゴブリンたちの討伐に成功した！
    CALL COLOR_PRINTW("報酬として3,500ディナリを得た", カラー_注意)
    MONEY += 3500
    ;QST_SV_QUEST_FLAGはセーブされるクエストの状態を示すフラグ。QST_有効クエストIDには現在のクエストID(ゴブ洞は0)が入る
    ;クエストが攻略済みかを判定する場合に使うとよい
    QST_SV_QUEST_FLAG:QST_有効クエストID = 1
    ;クエスト終了時の決まり文句
    TFLAG:クエスト_完了フラグ = 1
    CALL TRAIN_EXIT()
ELSE
    ;敗北イベント
    PRINTFORMW ゴブリンたちは敗北した%QST_LEADER_NAME()%を拘束し、弄びはじめた……
    CALL QST_QUEST_0_DEFEAT_EVENT
ENDIF

;-------------------------------------------------
;EV1
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_0_EVENT_1
#DIMS EVENT_TRIGGER = "ENTER_ROOM"
RESULTS = %EVENT_TRIGGER%

@QST_QUEST_0_EVENT_1
#DIM CONST EVENT_ID = 1
#DIM CONST 派生イベントID = 2
#DIM EVENT_FLAG
CALL QST_GET_EVENT_FLAG(派生イベントID)
EVENT_FLAG = RESULT
;このイベントは後続の派生イベント(EV2)の選択結果で2回目以降の処理が変わるのでセットされたフラグを見て内容を分岐
DEBUGPRINTFORML {EVENT_FLAG}
SELECTCASE EVENT_FLAG
        ;初回
    CASE 0
        PRINTFORMW 袋小路の暗がりの中に無数のゴブリンがいる。
        PRINTFORMW 彼らは捕らえた女性を弄んでいるようだ……
        ;調教モードをクエスト -> 慰安に切替
        FLAG:ウフフフラグ = 1
        FLAG:調教モード = 調教_慰安
        TFLAG:調教ターン数 = 8
        FLAG:調教スキップ可 = 1

        CVARSET CFLAG, GETNUM(CFLAG, "調教参加フラグ") , 0
        ;慰安モブを追加
        CALL QST_TRAIN_MOB_PRESET("ゴブリン", @"%SPLIT_RAND("醜悪な/小太りの/痩せた/子",1)%ゴブリン")
        CALL QST_TRAIN_MOB_PRESET("ゴブリン", @"%SPLIT_RAND("醜悪な/小太りの/痩せた/子",1)%ゴブリン")
        CALL QST_TRAIN_MOB_PRESET("ゴブリン", @"%SPLIT_RAND("醜悪な/小太りの/痩せた/子",1)%ゴブリン")
        ;適当に被害者を追加
        FOR LOCAL, 0, 4
            CALL QST_QUEST_0_CREATE_TRAIN_VICTIMS
        NEXT
        ;調教後に呼び出される後続イベント
        CALL QST_ENQUEUE_TRAIN_EXIT_EVENT(派生イベントID)
        ;ゴブリンを討伐
    CASE 1
        PRINTFORMW 袋小路にはゴブリンの死骸が散乱している
        ;被害者を見捨てる
    CASE 2
        PRINTFORMW ゴブリンたちは一心不乱に陵辱を続けている……
        PRINTFORMW 潜んでいる%QST_LEADER_NAME()%に気付く様子はない
ENDSELECT

;-------------------------------------------------
;EV2
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_0_EVENT_2
#DIMS EVENT_TRIGGER = "TRAIN_EXIT"
RESULTS = %EVENT_TRIGGER%

@QST_QUEST_0_EVENT_2
#DIM CONST EVENT_ID = 2
#DIM EVENT_FLAG
PRINTFORMW ゴブリンによる陵辱はなおも続く……
PRINTFORMW 彼女らを救出すべきだろうか……？
CALL COLOR_PRINTW("ここで騒ぎを起こせば他のゴブリンたちの注意を引くことになるだろう", カラー_注意)
CALL ASK_YN("救出を試みる", "見捨てる")
IF RESULT == 0
    PRINTFORMW %QST_LEADER_NAME()%は武器を手に取りゴブリンたちに襲いかかった！
    ;戦闘イベント
    CALL CC_INIT()
    ;クエストのパーティメンバーを攻撃側として追加
    CALL CC_ADDPARTY("ATTACKER")
    ;防御側エネミー設定
    CALL CC_ADDMOB_FROM_TABLE("DEFENDER", "ゴブリン", "ゴブリン１")
    CALL CC_ADDMOB_FROM_TABLE("DEFENDER", "ゴブリン", "ゴブリン２")
    CALL CC_ADDMOB_FROM_TABLE("DEFENDER", "ゴブリン", "ゴブリン３")
    ;戦闘処理呼出
    CALL CLOSE_COMBAT()
    ;CLOSE_COMBATの戻り値は攻撃側勝利 = 1,防衛側勝利 = 2
    IF RESULT == 1
        ;戦闘終了後のHPをパーティに適用
        CALL CC_APPLY_CHARA_HP()
        ;防御側エネミーから戦利品を獲得
        CALL CC_GET_LOOT_FROM("DEFENDER")
        PRINTFORMW 戦闘に勝利した%QST_LEADER_NAME()%は女性たちの解放に成功した
        PRINTFORMW 彼女らは涙ながらに礼を告げると、覚束ない足取りで出口へと向かった
        PRINTFORMW 謝礼として幾ばくかの金品を得た
        CALL COLOR_PRINTW("2,000ディナリを得た", カラー_注意)
        MONEY += 2000
        CALL QST_SET_EVENT_FLAG(EVENT_ID, 1)
    ELSE
        CALL CC_APPLY_CHARA_HP()
        CALL COLOR_PRINTW(@"%QST_LEADER_NAME()%はゴブリンたちに打ち負かされてしまった……", カラー_注意)
        PRINTFORMW ゴブリンたちは敗北した%QST_LEADER_NAME()%を拘束すると、下卑た笑みを浮かべて弄びはじめた……
        CALL QST_QUEST_0_DEFEAT_EVENT
    ENDIF
ELSE
    PRINTFORMW 無用の刺激をするべきではないと判断した%QST_LEADER_NAME()%はそっとその場を後にした……
    CALL QST_SET_EVENT_FLAG(EVENT_ID, 2)
ENDIF

;-------------------------------------------------
;EV3
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_0_EVENT_3
#DIMS EVENT_TRIGGER = "EVENT_SLOT"
#DIMS EVENT_SLOT_NAME = "木箱"
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%

@QST_QUEST_0_EVENT_3
#DIM CONST EVENT_ID = 3
#DIM EVENT_FLAG

CALL QST_GET_EVENT_FLAG(EVENT_ID)
IF !RESULT
    PRINTFORMW %QST_LEADER_NAME()%は箱を開けた……
    CALL CHANGE_ITEM_STOCK(ITEM_薬草, 3)
    CALL GET_ITEM_NAME(ITEM_薬草)
    CALL COLOR_PRINTW(@"%RESULTS%を３つ手に入れた", カラー_注意)
    CALL QST_SET_EVENT_FLAG(EVENT_ID, 1)
    CALL QST_SET_EVENT_SLOT_NAME(EVENT_ID, "木箱(空)")
ELSE
    PRINTFORMW この木箱はからっぽだ
ENDIF

;-------------------------------------------------
;EV4
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_0_EVENT_4
#DIMS EVENT_TRIGGER = "EVENT_SLOT"
#DIMS EVENT_SLOT_NAME = "宝箱"
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%

@QST_QUEST_0_EVENT_4
#DIM CONST EVENT_ID = 4
#DIM EVENT_FLAG
#DIM TARGET_ID

CALL QST_GET_EVENT_FLAG(EVENT_ID)
IF !RESULT
    PRINTFORMW %QST_LEADER_NAME()%は宝箱を開けた……
    PRINTFORMW
    TARGET_ID = TOINT(LIST_GET(_LIST_QST_PARTY, RAND(0, QST_PARTYNUM)))
    CALL COLOR_PRINTW(@"―――― 腐食液の罠だ！　噴出した腐臭を放つ液体が%ANAME(TARGET_ID)%を襲う！", カラー_注意)
    CALL QST_ARMOR_BREAK(TARGET_ID, 被覆部位_乳首, 100)
    IF !RESULT
        PRINTFORMW %ANAME(TARGET_ID)%に液体が付着したものの幸い何も起きなかったようだ……
    ENDIF
    PRINTFORMW
    PRINTFORMW %ANAME(TARGET_ID)%は顔をしかめて液体を拭うと改めて箱の中を物色した……
    CALL CHANGE_ITEM_STOCK(ITEM_鉄インゴット, 3)
    CALL GET_ITEM_NAME(ITEM_鉄インゴット)
    CALL COLOR_PRINTW(@"箱の中から%RESULTS%を３つ手に入れた", カラー_注意)
    CALL QST_SET_EVENT_FLAG(EVENT_ID, 1)
    CALL QST_SET_EVENT_SLOT_NAME(EVENT_ID, "宝箱(空)")
ELSE
    PRINTFORMW この宝箱はからっぽだ
ENDIF

;-------------------------------------------------
;EV5
;敗北イベント後の共通エンディング（クエスト失敗）
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_0_EVENT_5
#DIMS EVENT_TRIGGER = "TRAIN_EXIT"
RESULTS = %EVENT_TRIGGER%

@QST_QUEST_0_EVENT_5
#DIM CONST EVENT_ID = 5
#DIM EVENT_FLAG
#DIM TARGET_ID

PRINTFORMW %QST_LEADER_NAME()%はゴブリンの群れに散々に辱められてしまった……
PRINTFORMW ゴブリンたちの隙を見計い、なんとか洞窟の出口を目指す……
PRINTL
PRINTFORMW 幸いゴブリンたちは新たな標的を見つけたのか、%QST_LEADER_NAME()%に気がついていないようだ
PRINTW
PRINTFORMW %QST_LEADER_NAME()%は這々の体で洞窟を脱出した……
TFLAG:クエスト_完了フラグ = 1
CALL TRAIN_EXIT()

;-------------------------------------------------
;EV6
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_0_EVENT_6
#DIMS EVENT_TRIGGER = "ENTER_ROOM"
#DIMS EVENT_TYPE = "ONCE"
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:2 = %EVENT_TYPE%

@QST_QUEST_0_EVENT_6
#DIM EVENT_ID = 6
PRINTFORMW 通路はここで二手に分かれている
PRINTFORMW 真っ直ぐ進めばこの洞窟の最深部に行き着く。恐らくゴブリンたちが潜んでいるに違いない
PRINTFORMW ……一方、右手の袋小路からもゴブリンたちの鳴き声が聞こえる
PRINTFORMW %ANAME(QST_RANDCHARA())%は引き裂かれた人間の衣服の残骸が右手の袋小路の前に散乱していることに気がついた
PRINTW
PRINTFORMW 右に進めば連れ去られた人々を見つけることができるかもしれない……

;QST_SET(GET)_SV_EVENT_FLAGは各クエストのイベント毎のフラグをセーブデータに保持するので
;複数回実行可能なタイプのクエストで、貴重品入手イベント等を１回のみ実行したい場合などは
;このフラグで制御するとよい
CALL QST_GET_SV_EVENT_FLAG(EVENT_ID)
SIF RESULT == 1
    RETURN
PRINTW
PRINTFORMW %QST_LEADER_NAME()%は散らばった衣類の中から使えそうな装備を回収した
CALL QST_GET_WEAPON(1, "冒険者の鉄の短剣", WPN_材質_鉄)
CALL COLOR_PRINTW(@"―― 武器は[ITEM] -> [武器]から変更できる", カラー_注意)
PRINTL
{
    CALL QST_GET_WEAPON(
        20
        ,"濁り剣盾の呪印"
        ,WPN_材質_その他
        ,0
        ,"[WPN_VAGINA_GUARD:1][WPN_PENIS_GUARD:1]"
        ,""
        ,WPN_装備種別_レリック
        ,1
        )
}
CALL COLOR_PRINTW(@"―― レリックは[ITEM] -> [ﾚﾘｯｸ]から変更できる", カラー_注意)
CALL QST_SET_SV_EVENT_FLAG(EVENT_ID, 1)

;-------------------------------------------------
;EV7
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_0_EVENT_7
#DIMS EVENT_TRIGGER = "ENTER_ROOM"
#DIMS EVENT_TYPE = "ONCE"
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:2 = %EVENT_TYPE%

@QST_QUEST_0_EVENT_7
#DIM EVENT_ID = 7

PRINTFORMW 通路の脇にゴブリンたちの略奪品と思われる品が積み上げられている
PRINTFORMW もしかしたら使えるものがあるかもしれない……
PRINTL
CALL COLOR_PRINTW(@"―― マップ画面右の[木箱]ボタンをクリックすることで中身を調べることができる", カラー_注意)

;-------------------------------------------------
;EV8
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_0_EVENT_8
#DIMS EVENT_TRIGGER = "EVENT_SLOT"
#DIMS EVENT_SLOT_NAME = "宝箱"
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%
; ゲーム中一度でも解決済みの場合は非アクティブに
SIF QST_GET_SV_EVENT_FLAGF(QST_NOWEV)
	RESULTS:3 '= "[EVENT_STATE:DEACTIVE]"

@QST_QUEST_0_EVENT_8
#DIM CONST EVENT_ID = 8
#DIM EVENT_FLAG

PRINTFORMW 箱の中にはガラクタが雑然と放り込まれている……
PRINTFORMW %QST_LEADER_NAME()%はその中から、古びてはいるがよく手入れされた木の小盾を見出した
PRINTFORMW 犠牲者の物だろうか？　ここは、ありがたく使わせてもらうとしよう……
CALL QST_GET_WEAPON(5, "古びた木盾", WPN_材質_木, 3, "[WPN_ROBUST_DEFENCE:1]",, 1)
PRINTW
CALL QST_SET_SV_EVENT_FLAG(EVENT_ID, 1)
CALL QST_DEACTIVATE_THIS_EVENT()

;-------------------------------------------------
;以下イベントリストで管理する必要のない処理,イベント固有の関数など
;-------------------------------------------------
@QST_QUEST_0_DEFEAT_EVENT
#DIM CONST 派生イベントID = 5
FLAG:ウフフフラグ = 1
FLAG:調教モード = 調教_慰安
TFLAG:調教ターン数 = 20

;主導除外フラグが立ったキャラクターは慰安調教で常にターゲットに回る。
;拘束中など自主的に行動させたくないシチュエーションでこのフラグを立てる。
CVARSET CFLAG, GETNUM(CFLAG, "調教参加フラグ") , 0
FOR LOCAL, 0, QST_PARTYNUM
    ;調教コマンドのプレイヤーにならなくなる。一方的に嬲られるシチュ用
    CFLAG:(TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))):主導除外 = 1
    ;良感情を極めて得にくくなるフラグ
    CFLAG:(TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))):凌辱被害者フラグ = 1
    CFLAG:(TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))):調教参加フラグ = 1
NEXT
;慰安モブを追加
CALL QST_TRAIN_MOB_PRESET("ゴブリン", @"%SPLIT_RAND("醜悪な/小太りの/痩せた/子",1)%ゴブリン")
CALL QST_TRAIN_MOB_PRESET("ゴブリン", @"%SPLIT_RAND("醜悪な/小太りの/痩せた/子",1)%ゴブリン")
CALL QST_TRAIN_MOB_PRESET("ゴブリン", @"%SPLIT_RAND("醜悪な/小太りの/痩せた/子",1)%ゴブリン")

CALL QST_ENQUEUE_TRAIN_EXIT_EVENT(派生イベントID)
RETURN

;-------------------------------------------------
;慰安モブの定義
;-------------------------------------------------
@QST_QUEST_0_CREATE_TRAIN_VICTIMS(主導除外フラグ = 1)
#DIM 対象
#DIMS 名前
#DIM 主導除外フラグ

名前 = %SPLIT_RAND("冒険者/村娘/魔術師/行商人/孕み袋",1)%

CALL CREATE_RANDOM_CHARA(0, -1, 1)
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:対象:性別 = 1
ABL:対象:性知識 =  3
ABL:対象:Ｃ感 = 28
ABL:対象:奉仕 = 1
ABL:対象:性技 = RAND(10, 14)
ABL:対象:欲望 = RAND(3, 7)
ABL:対象:性交 = RAND(13, 15)
ABL:対象:サド = RAND(0, 3)
ABL:対象:主導度Ｕ = RAND(0, 500)
ABL:対象:倒錯度 = RAND(0, 300)
TALENT:対象:貞操無頓着 = 1
TALENT:対象:貞操観念 = 0
TALENT:対象:崩壊 = RAND(0, 1)
TALENT:対象:母乳体質 = 1
SEXUAL_EXPERIENCE:(対象):初体験_処女 = ゴブリン
SEXUAL_LAST_EXPERIENCE:(対象):初体験_処女 = ゴブリン
SEXUAL_EXPERIENCE:(対象):初体験_キス = ゴブリン
SEXUAL_LAST_EXPERIENCE:(対象):初体験_キス = ゴブリン
SEXUAL_EXPERIENCE:(対象):初体験_童貞 = ゴブリン
SEXUAL_LAST_EXPERIENCE:(対象):初体験_童貞 = ゴブリン
SEXUAL_EXPERIENCE:(対象):初体験_アナル処女 = ゴブリン
SEXUAL_LAST_EXPERIENCE:(対象):初体験_アナル処女 = ゴブリン
;CFLAG:対象:慰安モブ = 1
CFLAG:対象:調教参加フラグ  = 主導除外フラグ
CFLAG:対象:主導除外  = 1
CFLAG:対象:慰安モブ = 1


code:
;-------------------------------------------------
;クエスト定義ファイル
;QUEST_10
;-------------------------------------------------
@QST_TITLE_QUEST_10
RESULTS '= "魔導工学者エル"

;ギルドメニューでクエストをフィルターする際のタグリスト。末尾の','を忘れないように
@QST_QUEST_TAG_10
RESULTS '= "単発,イベント,"

;-------------------------------------------------
;クエストの実行可能条件を定義
;-------------------------------------------------
@QST_AVAILABLE_QUEST_10(QUEST_ID)
#DIM QUEST_ID
SIF CFLAG:NAME_TO_CHARA("エル"):所属 == 所属_プレイヤー
    RETURN 0

RETURN 1

;-------------------------------------------------
;クエストのタイプ
;マップ探索を伴う場合 "MAP"
;文章のみで完結する場合 "DIALOGUE"
;-------------------------------------------------
@QST_TYPE_QUEST_10
RESULTS '= "DIALOGUE"

;クエストメニュー右上段の概要欄。10行まで
@QST_SUMALLY1_QUEST_10
RESULTS:0 '= "エルと名乗る少女があなたを訪ねてくる"
RESULTS:1 '= "曰く、あなたの領地は非常に珍しい特質を帯びており、彼女の研究にはうってつけらしい"
RESULTS:2 '= "彼女は錬金術や素材加工について専門的な知識を提供できると言っているが……"

;クエストメニュー右下段の備考欄。難易度や条件、報酬等を記述。7行まで
@QST_SUMALLY2_QUEST_10
RESULTS:0 '= @"難易度：-"
RESULTS:1 '= "支度金：7,000ディナリ(工房を仕立てるのに使わせてもらうよ)"
RESULTS:4 '= @"@C:{カラー_選択不可}@「この嬢ちゃんはコモンウェルスの都ノルディアのアカデミーの出だそうだ」@/C@"
RESULTS:5 '= @"@C:{カラー_選択不可}@「あそこは控えめに言っても奇人・変人の巣窟だが、頭がキレるのは間違いないだろう」@/C@"

;-------------------------------------------------
;QST_INTRO_QUEST_n はQUEST開始前に呼ばれる
;クエストの導入文などを記述
;"DIALOGUE"型のクエストは当該関数のCALLのみ行う
;-------------------------------------------------
@QST_INTRO_QUEST_10
#DIM WEAPON_LIST_IDX

SETCOLOR エル_口上カラー
PRINTFORMDW %ANAME(MASTER)%はテーブルを挟んでエルと名乗る少女と対峙している
PRINTFORMDW 彼女は魔導工学者という肩書を名乗っており、研究のために%ANAME(MASTER)%を間借りしたいとのことだ
PRINTFORMDW 対価として彼女の知識や精製物を提供できると言っている
PRINTL
PRINTFORMW 「普通、マナが極度に集中した土地はとても厳しい環境になるんだ。樹海であったり火山であったりね」
PRINTFORML 「ところがキミの土地はギュッとマナが詰まっているのにとても安定している」
PRINTFORMW 「……少なくとも私はこれまでそんな場所を見たことがないし、聞いたこともない」
PRINTL
PRINTFORMDW 彼女は大きなマリンブルーの瞳をキラキラさせ、好奇心を抑えきれぬ様子で熱弁する
PRINTFORMW 「私達魔導工学者は動力機関を動かすにせよ、明かりを灯すにせよ、安定的なエネルギーをどこから引っ張ってくるのか常々頭を悩ませていてね」
PRINTFORMW 「その点キミの土地は落ち着いてエネルギーを調達できる、研究にはうってつけの場所に見える」
PRINTL
PRINTFORMW 「どうだろう、私を雇ってみる気はないかな？少し時間を貰えれば成果をキミに対価として提供できるはずだ」
PRINTL
PRINTFORMDW あの広く、ひなびた土地に彼女が言うほどの価値があるのか%ANAME(MASTER)%は疑問を拭えなかった
PRINTFORMDW 彼女を言を信じるならば、あるいは人手が欲しいのなら彼女の言葉にのってもよいが……
CALL ASK_YN("雇う","やめておく")
IF !RESULT
    IF MONEY < 7000
        PRINTFORMDW お金が足りないようだ……
        RETURN
    ENDIF
    PRINTFORMDW ………………
    PRINTFORMDW …………
    PRINTFORMDW ……
    PRINTL
    PRINTFORMW 「ありがとう！それじゃあこのお金は研究資材その他諸々を揃えるのに使わせてもうらうよ！」
    PRINTFORMDW そう言い残すと彼女は矢のように飛び出していってしまった
    PRINTFORMDW あとに残された%ANAME(MASTER)%はひとまずテーブルの上の飲み物を飲み干す
    PRINTL
    PRINTFORMDW 何はともあれ少し賑やかになりそうだ……
    CALL COLOR_PRINTW("―― 魔導工学者のエルが仲間になった！", カラー_注意)
    CFLAG:NAME_TO_CHARA("エル"):所属 = 所属_プレイヤー
    MONEY -= 7000
    QST_SV_QUEST_FLAG:QST_有効クエストID = 1
ELSE
    PRINTFORMW 「そう……、それは残念。まぁもう少しこの辺りに居るつもりだから気が変わったら声をかけてよ」
ENDIF

CFLAG:NAME_TO_CHARA("エル"):面識 = 1
TFLAG:クエスト_完了フラグ = 1
CALL TRAIN_EXIT()


code:
;-------------------------------------------------
;クエスト定義ファイル
;QUEST_11:墳墓の小迷宮
;-------------------------------------------------
@QST_TITLE_QUEST_11
RESULTS '= "淫魔の小迷宮"

;ギルドメニューでクエストをフィルターする際のタグリスト。末尾の','を忘れないように
@QST_QUEST_TAG_11
RESULTS '= "周期,探索,"

;クエスト選択画面で呼び出される概要説明
;クエストメニュー右上段の概要欄。10行まで
@QST_SUMALLY1_QUEST_11
RESULTS:0 '= "魔物・魔獣の中にはごく僅かだが人間と交流を持つ種が存在する"
RESULTS:1 '= "淫魔はその中でも代表的な種であり、辺境の一部地域には淫魔を子孫繁栄をもたらす存在として"
RESULTS:2 '= "信仰する地域さえあったという"
RESULTS:4 '= "淫魔は人間の精気を好んで喰らうことで知られているが、人間の性行動を娯楽的に消費することもあった"
RESULTS:5 '= "そこで一部の地域には淫魔に人間の性的痴態を娯楽として供し、その引き換えに"
RESULTS:6 '= "淫魔から様々な便宜を受け取る風習が存在したとされる"
RESULTS:8 '= "この奇妙な迷宮がその名残なのか、今となっては何もわからない"
RESULTS:9 '= "ただ一つ言えることは、身の清らかさを尊ぶならば、この迷宮に近寄るべきではないだろう"

;クエストメニュー右下段の備考欄。難易度や条件、報酬等を記述。7行まで
@QST_SUMALLY2_QUEST_11
RESULTS:0 '= @"難易度：@C:{カラー_ピンク}@❤❤❤@/C@"
RESULTS:1 '= "報酬：-"
RESULTS:2 '= "パーティ人数:1人(女性のみ)　　　必要性技スキル：誘蛾の色香LV2以上"
RESULTS:3 '= "備考:定期性クエスト(4期毎)、退却可能　　　推奨平均戦闘値：45以上"
RESULTS:4 '= ""
RESULTS:5 '= @"@C:{カラー_選択不可}@「最近見つかった迷宮だ。俺も大したことは知らんよ」@/C@"
RESULTS:6 '= @"@C:{カラー_選択不可}@「ただ確か……双子の淫魔を見かけたら力の限り逃げろとか、そんな話は耳にしたな」@/C@"

;-------------------------------------------------
;クエストの実行可能条件を定義
;-------------------------------------------------
@QST_AVAILABLE_QUEST_11(QUEST_ID)
#DIM QUEST_ID
;野盗討伐の攻略が必要
SIF QST_SV_QUEST_FLAG:12 != 1
    RETURN 0
;クエストのクールタイム。完了時に加算され、期終了時に減算される
SIF QST_COOLTIME:QUEST_ID
    RETURN 0
RETURN 1

;-------------------------------------------------
;クエスト固有の開始条件
;[このクエストを開始する]押下時に呼ばれる
;女性のみ・誘蛾の芳香LV2以上が必要
;-------------------------------------------------
@QST_CAN_START_QUEST_11(QUEST_ID)
#DIM QUEST_ID
#DIM DYNAMIC ERR_CNT
#DIM DYNAMIC CHARA_ID
LOCALS '= ""
;一人だけ
IF LIST_COUNT(_LIST_QST_PARTY) >= 2
    CALLF TAG_PRINT(@"@C:{カラー_注意}@一人のみ参加可能です@/C@", 1)
    WAIT
    RETURN 0
ENDIF
FOR LOCAL, 0, LIST_COUNT(_LIST_QST_PARTY)
    CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))
    IF !IS_FEMALE(CHARA_ID)
        ERR_CNT ++
        LOCALS += @"<%ANAME(CHARA_ID)%>"
    ENDIF
    CALL SKILL_GET_LEVEL(CHARA_ID, スキル_大分類_性技, "SEDUCTION")
    IF RESULT < 2
        ERR_CNT ++
        LOCALS += @"<%ANAME(CHARA_ID)%>"
    ENDIF
NEXT
IF ERR_CNT
    CALLF TAG_PRINT(@"@C:{カラー_注意}@参加条件を満たしてないキャラが編成されています(女性かつ性技スキル:誘蛾の色香LV2以上が必要)@/C@", 1)
    CALLF TAG_PRINT(@"@C:{カラー_注意}@条件を満たしていないキャラ：%LOCALS%@/C@", 1)
    WAIT
    RETURN 0
ELSE
    RETURN 1
ENDIF

;-------------------------------------------------
;マップデータ定義
;-------------------------------------------------
@QST_SET_MAPDATA_QUEST_11(MAP_ID)
#DIM MAP_ID
QST_MAPNAME '= "淫魔の小迷宮"
;mapdata定義ファイルの格納先フォルダを指定
QST_GMAPDATA_PATH '= "ERB/QUEST/クエストデータ/QUEST_11_淫魔の小迷宮"
;マップデータ定義XMLとTXTのファイル名を指定。
;2ファイルの名称は拡張子を除いて一致している必要がある
QST_GMAPDATA_FILENAME '= "淫魔の小迷宮"
;このフラグを1にすると経路描画が行われなくなる。屋内マップなどあえて経路を図示する必要がない場合に立てるとよい
QST_HIDE_PATH = 1

;各エリア（ノード）に配置するイベントIDを記入。0-24はノード番号に対応
;EVENT_LIST末尾の’,’を忘れないように
_DIC_HO_MAPDATA:MAP_ID:0   '= "[EVENT_LIST:0,]"
_DIC_HO_MAPDATA:MAP_ID:1   '= "[EVENT_LIST:0,1,100,]"
_DIC_HO_MAPDATA:MAP_ID:2   '= "[EVENT_LIST:0,100,]"
_DIC_HO_MAPDATA:MAP_ID:3   '= "[EVENT_LIST:0,8,]"
_DIC_HO_MAPDATA:MAP_ID:4   '= "[EVENT_LIST:0,9,100,100,100,]"
_DIC_HO_MAPDATA:MAP_ID:5   '= "[EVENT_LIST:0,100,]"
_DIC_HO_MAPDATA:MAP_ID:6   '= "[EVENT_LIST:0,7,6,4,]"
_DIC_HO_MAPDATA:MAP_ID:7   '= "[EVENT_LIST:0,5,100,100,]"
_DIC_HO_MAPDATA:MAP_ID:8   '= "[EVENT_LIST:0,2,3,]"
_DIC_HO_MAPDATA:MAP_ID:9   '= "[EVENT_LIST:0,20,]"

;-------------------------------------------------
;クエストのタイプ
;-------------------------------------------------
@QST_TYPE_QUEST_11
RESULTS '= "GMAP"

;-------------------------------------------------
;クエスト固有の初期化処理
;-------------------------------------------------
@QST_INIT_QUEST_11
#DIMS _LIST_COMMON_EVENT
#DIMS MAP_NAME

;コモンイベントをランダムに配置する
;宝箱
CALL QST_SET_RANDOM_EVENT(100, RAND(6, 9))
;戦闘
;CALL QST_SET_RANDOM_EVENT(105, RAND(5, 7))

FLAG:クエスト_中断を許可 = 1
FLAG:クエスト_刻限による終了無効 = 1

;-------------------------------------------------
; クエスト中止時の処理
; QST_QUEST_{QUEST_ID}_ABORT は撤退コマンド実行時に呼ばれる
;-------------------------------------------------
@QST_QUEST_11_ABORT
QST_COOLTIME:QST_有効クエストID += 3

;-------------------------------------------------
; クエスト中全パーティメンバーが行動不能になった場合 @QST_TRAIN_EXIT より呼ばれる
;-------------------------------------------------
@QST_QUEST_11_PARTY_KNOCKED_OUT()
CALL QST_QUEST_11_DEFEAT_EVENT_2

;-------------------------------------------------
;クエストの導入文
;-------------------------------------------------
@QST_INTRO_QUEST_11
PRINTFORML %QST_LEADER_NAME()%は依頼に従い、東方の辺境地で発見された古の遺跡を訪れた
PRINTFORML 山脈の麓に築かれたこの遺跡は、かつてはある部族の祭祀場だったという
PRINTFORMW その部族が滅び、幾ばくかの世紀が過ぎて人々の記憶からは忘れさられてしまったようだ
PRINTL
PRINTFORML 幾人かの冒険者が調査のために派遣されたが、帰ってきたものは皆虚ろな目をして何があったのか語ろうとしない
PRINTFORMW ……探索に臨むにあたり、十分に警戒すべきだろう
CALL FL_PLAYBGM("Ambient_dark_0.ogg")

;-------------------------------------------------
;イベントリストに登録するイベント情報
;-------------------------------------------------
;-------------------------------------------------
;EV0
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_0
#DIMS EVENT_TRIGGER = "ENTER_ROOM"
#DIMS EVENT_TYPE = ""
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:2 = %EVENT_TYPE%

@QST_QUEST_11_EVENT_0
#DIMS ROOM_NAME

CALL HO_CREAR_LOG()
SELECTCASE HO_MASTER現在地
    CASE 1
        CALL HO_PRINT_LOG("まぐわう男女の彫像が無造作に並べられている", 1)
    CASE 2
        CALL HO_PRINT_LOG("小箱や調度品、催事用の器具が並べられてる", 1)
    CASE 3
        CALL HO_PRINT_LOG("殺風景な、開けた空間がある。四隅には観覧席のようなものが設けられている", 1)
    CASE 4
        CALL HO_PRINT_LOG("宝飾品や磁器が積み上げられている", 1)
    CASE 6
        CALL HO_PRINT_LOG("書斎のようだ", 1)
        CALL HO_PRINT_LOG("部屋の中央に置かれた場違いなティーテーブルが異質な存在感を放っている", 1)
    CASE 8
        CALL HO_PRINT_LOG("細く長い回廊が奥まで続いている", 1)
    CASEELSE
ENDSELECT
;-------------------------------------------------
;EV1
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_1
#DIMS EVENT_TRIGGER = "ENTER_ROOM"
#DIMS EVENT_TYPE = "ONCE"
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:2 = %EVENT_TYPE%

@QST_QUEST_11_EVENT_1
#DIM EVENT_ID = 2

PRINTFORML 遺跡の中は暗く、狭い
PRINTFORMW 携えた光源の頼りない光芒が深淵へと続く石造りの壁を照らし出す
PRINTL
PRINTFORML 壁面は悠久の年月を経て風化しところどころ掛けたり、崩れたりしているものの、
PRINTFORMW ほぼ隙間なく組まれておりこの遺跡が高度な建築技術を持って造られたことを伺わせる
PRINTL
PRINTFORMW %QST_LEADER_NAME()%はあちこちに無数の石像が据え置かれていることに気がついた
PRINTL
PRINTFORML そのいずれも性交や姦淫、乱交をモチーフにしており、%QST_LEADER_NAME()%は面を食らったが
PRINTFORMW しかし造形の精巧さに掛けては息を飲むものであり、吐息や嬌声さえ聞こえんばかりの生々しさがあった
PRINTL
PRINTFORML 今のところ生物の気配は感じられない。しかし奇妙な、誰かから見られているような落ち着かない感触があった
PRINTFORMW 周囲の彫像のせいだろうか……？　いずれにせよ注意して進んだ方がよさそうだ

;-------------------------------------------------
;EV2
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_2
#DIMS EVENT_TRIGGER = "ENTER_ROOM"
#DIMS EVENT_SLOT_NAME = "リビングロープの罠"
#DIMS EVENT_TYPE = "ONCE"

RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%
RESULTS:2 = %EVENT_TYPE%

@QST_QUEST_11_EVENT_2
#DIM CONST EVENT_ID = 2
#DIM EVENT_FLAG
#DIM CHARA_ID

CHARA_ID = QST_RANDCHARA()

CALL COLOR_PRINTW(@"―――― 部屋に入るなり、縄が意志を持ったように%ANAME(CHARA_ID)%に一斉に絡みついた！", カラー_注意)
CALL PRINT_TITLE("リビングロープの罠", "エロトラップ")
PRINTW
CALL QST_ROLL_MULTI("戦闘,身体,", "素早くナイフで断ち切る(戦闘値),全力で振りほどく(身体),","500,550,", 7, ,"なすがまま", CHARA_ID)
IF RESULT == 1
    PRINTFORMW %ANAME(CHARA_ID)%は生ける縄の襲撃を辛うじて避けることができた……
    CALL QST_DEACTIVATE_EVENT(3)
ELSE
    MAP_SET @"QUEST_{QST_有効クエストID}_MAP", "CHARA_ID", TOSTR(CHARA_ID)
    PRINTFORMW %ANAME(CHARA_ID)%は生ける縄に捉えられ天井に吊り上げられてしまった……
    PRINTL
    PRINTFORML もがき、逃れようとする%ANAME(CHARA_ID)%に部屋の奥までピンと張り詰めた縄が一本渡される
    PRINTFORMW 縄は逃れようとも逃れようとも%ANAME(CHARA_ID)%が無理やり縄に跨る格好となるよう強要してくる
    PRINTL
    PRINTFORML %ANAME(CHARA_ID)%は一本の縄の先、部屋の奥にスイッチがあるのを認めた
    PRINTFORMW 実にわざとらしいが……今はあれが解除用のスイッチと祈る他ないだろう……
    PRINTL
    PRINTFORMW 渡し縄にはねっとりとした潤滑油が塗られており、所々に結び目が設けられている
    PRINTFORMW この罠は明らかに侵入者を捕えるのではなく、捉えた者を苦悶させ痴態を晒させることを意図しているようだ……
    CALL QST_ACTIVATE_EVENT(3)
    FLAG:移動制限フラグ = 2
    QST_イベント選択制限 = 3
    CALL QST_SET_EVENT_FLAG(3, 7)
    CALL HO_PRINT_LOG(@"罠に捉えられてしまった……。今はこの股縄を進む他ない……", 1)
ENDIF

;-------------------------------------------------
;EV3 股縄渡り
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_3
#DIMS EVENT_TRIGGER = "EVENT_SLOT"
#DIMS EVENT_SLOT_NAME = "股縄を進む"

RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%

@QST_QUEST_11_EVENT_3
#DIM CONST EVENT_ID = 3
#DIM EVENT_FLAG
#DIM CHARA_ID

CALL QST_GET_EVENT_FLAG(3)
EVENT_FLAG = RESULT

CHARA_ID = TOINT(MAP_GET(@"QUEST_{QST_有効クエストID}_MAP", "CHARA_ID"))
IF EVENT_FLAG > 1
    IF EVENT_FLAG != 3
        PRINTFORML %ANAME(CHARA_ID)%は股縄の擦れる感覚に耐えながら、一歩ずつ前へ進む
        PRINTFORMW たっぷりと潤滑油が塗られた縄に設けられた結び目が陰部の敏感な箇所を刺激する……
        ;ソース処理
        SOURCE:CHARA_ID:反感 = 100
        SOURCE:CHARA_ID:不安 = 10
        SOURCE:CHARA_ID:逸脱 = 50
        SOURCE:CHARA_ID:快Ｃ += SENSE_HOUSHI(CHARA_ID, CHARA_ID, 150)
    ELSE
        CALL COLOR_PRINTW(@"ようやく中央まで進んだところで、%ANAME(CHARA_ID)%の跨る縄が激しく前後左右に振動する！", カラー_注意)
        CALL COLOR_PRINTW(@"息絶え絶えになる%ANAME(CHARA_ID)%の股間を荒縄が激しく刺激する……", カラー_ピンク)
        ;ソース処理
        SOURCE:CHARA_ID:反感 = 150
        SOURCE:CHARA_ID:不安 = 30
        SOURCE:CHARA_ID:逸脱 = 80
        SOURCE:CHARA_ID:快Ｃ += SENSE_HOUSHI(CHARA_ID, CHARA_ID, 450)
    ENDIF
    CALL QST_EXEC_DUMMYCOM()
    EVENT_FLAG --
    CALL QST_SET_EVENT_FLAG(3, EVENT_FLAG)
    CALL HO_CREAR_LOG()
    CALL HO_PRINT_LOG(@"渡り切るまであと@C:{カラー_黄}@{EVENT_FLAG}歩@/C@は必要だろう……", 1)
ELSE
    PRINTFORMW %ANAME(CHARA_ID)%は性感への執拗な刺激になんとか耐えながら足でスイッチを蹴る
    PRINTFORMW スイッチを解除すると、縄は力を失いあっけなく解けた
    PRINTL
    PRINTFORMW 全く単なる嫌がらせでしかない罠に悪態をつきつつ、%ANAME(CHARA_ID)%は先へと進む……
    CALL HO_CREAR_LOG()
    CALL QST_DEACTIVATE_EVENT(EVENT_ID)
    QST_イベント選択制限 = -1
    FLAG:移動制限フラグ = 0
ENDIF

;-------------------------------------------------
;EV4
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_4
#DIMS EVENT_TRIGGER = "EVENT_SLOT"
#DIMS EVENT_SLOT_NAME = "テーブルの上の古書物"

RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%

@QST_QUEST_11_EVENT_4
#DIM CONST EVENT_ID = 4
#DIM EVENT_FLAG
#DIM CHARA_ID

CALL QST_GET_EVENT_FLAG(EVENT_ID)
IF !RESULT
    CHARA_ID = QST_RANDCHARA()
    MAP_SET @"QUEST_{QST_有効クエストID}_MAP", "CHARA_ID", TOSTR(CHARA_ID)
    PRINTFORML %ANAME(CHARA_ID)%はティーテーブルに置かれた書籍を手に取った
    PRINTFORMW 表紙は非常に凝った意匠の装飾が施されている。どうやら魔術書の類のようだ
    PRINTFORMW ……そして、この遺跡の調度品の例に漏れず、淫らな意匠が施されている
    PRINTL
    PRINTFORMW %ANAME(CHARA_ID)%はその本を調べてみてもよいし、無視してもよい
    CALL ASK_YN("手にとって調べてみる", "無視する")
    PRINTL
    IF !RESULT
        PRINTFORMW %ANAME(CHARA_ID)%は本を手に取り、ページをめくる……
        PRINTL
        PRINTFORMW 本の中は……びっしりと性行為に耽る男女の絵図で埋め尽くされている
        PRINTFORMW 非常に緻密な、まるで空間をそのまま切り出したかのような精緻な点描で描かれており
        PRINTFORMW あまりにも生々しい描写に息を飲む他ない
        PRINTL
        PRINTFORMW %ANAME(CHARA_ID)%は吸い込まれるようにページをめくる……
        PRINTFORMW 男女のまぐわいから始まり、輪姦、乱交、獣姦……おおよそありとあらゆる性交渉の場面が描かれているように思われた
        PRINTFORMW 無心にページをめくる、めくる、めくる……
        PRINTFORMW
        PRINTFORMW めくる、めくる、めくる……
        PRINTFORML
        CALL COLOR_PRINTW(@"%ANAME(CHARA_ID)%は自分の意志と関わらず、ページをめくる手が止まらないことに気がついた……！", カラー_注意)
        CALL PRINT_TITLE("淫魔の催眠魔術書", "エロトラップ")
        CALL QST_ROLL_MULTI("魔術,", "意志の力で抵抗する(魔術),","500,", , ,"なすがまま", CHARA_ID)
        IF RESULT == 1
            PRINTFORMW %ANAME(CHARA_ID)%はなんとか書籍を握る手を払い除け、本の魔力から脱することに成功した……
        ELSE
            CALL COLOR_PRINTW(@"―――― %ANAME(CHARA_ID)%は本の魔力に捉えられてしまった……！", カラー_注意)
            CALL COLOR_PRINTW(@"下腹部が焼けるように熱を帯びる……。手が自分の意志とは関係なく自身を慰めようとする……", カラー_ピンク)
            FLAG:移動制限フラグ = 2
            QST_イベント選択制限 = EVENT_ID
            CALL QST_SET_EVENT_SLOT_NAME(, @"@C:{カラー_ピンク}@❤魔術書のページをめくる❤@/C@")
            CALL QST_SET_EVENT_FLAG(EVENT_ID, 1)
            TCVAR:CHARA_ID:催眠中 = 1
            TCVAR:CHARA_ID:催眠実行者 = -1
            CALL CLEAR_ACTOR
            CALL ADD_MPLY(CHARA_ID)
            CALL ADD_MTAR(CHARA_ID)
            IF HAS_PENIS(CHARA_ID)
                CALL QST_EXEC_DUMMYCOM(T_N("Ｐ自慰"))
            ELSE
                CALL QST_EXEC_DUMMYCOM(T_N("Ｃ自慰"))
            ENDIF
            CALL HO_PRINT_LOG(@"ページをめくる手が止まらない……。自分を慰める手が止まらない……", 1)
            MAP_SET @"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE_ONCE", "QST_QUEST_11_EVENT_4_RELEASE_EVENT"

        ENDIF
    ELSE
        PRINTFORMW %ANAME(CHARA_ID)%は本を元の場所に戻した……
    ENDIF
ELSEIF RESULT == 1
    CHARA_ID = TOINT(MAP_GET(@"QUEST_{QST_有効クエストID}_MAP", "CHARA_ID"))
    PRINTFORMW %ANAME(CHARA_ID)%は食い入るようにページを捲りながら、あられもない痴態をさらし、自身を慰めている……
    CALL CLEAR_ACTOR
    CALL ADD_MPLY(CHARA_ID)
    CALL ADD_MTAR(CHARA_ID)
    IF HAS_PENIS(CHARA_ID)
        CALL QST_EXEC_DUMMYCOM(T_N("Ｐ自慰"))
    ELSE
        CALL QST_EXEC_DUMMYCOM(T_N("Ｃ自慰"))
    ENDIF
    MAP_SET @"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE_ONCE", "QST_QUEST_11_EVENT_4_RELEASE_EVENT"
ELSEIF RESULT == 2

ENDIF

;コマンド実行後処理 @EVENTCOMEND で呼び出される。コマンド実行後に催眠が解除されたかを見る
;催眠解除でイベント終了
@QST_QUEST_11_EVENT_4_RELEASE_EVENT
#DIM CHARA_ID

CHARA_ID = TOINT(MAP_GET(@"QUEST_{QST_有効クエストID}_MAP", "CHARA_ID"))

;長すぎてもダレるので10ターンで強制解除
IF TCVAR:CHARA_ID:催眠経過ターン数 == 10 || !IS_PLAYABLE(CHARA_ID)
    CALL COLOR_PRINTL(@"%ANAME(CHARA_ID)%の催眠が解けた！", カラー_注意)
    TCVAR:CHARA_ID:催眠中 = -1
    TCVAR:CHARA_ID:催眠経過ターン数 = 0
ENDIF

IF TCVAR:CHARA_ID:催眠中 == -1
    PRINTL
    CALL COLOR_PRINTW(@"―――― %ANAME(CHARA_ID)%はハッと我に返り、握りしめていた魔術書を投げ捨てた……！", カラー_注意)
    CALL QST_CHANGE_ITEM("淫堕点,15,")
    QST_イベント選択制限 = -1
    FLAG:移動制限フラグ = 0
    CALL RELEASE_ALL_EQUIP(CHARA_ID)
    CALL QST_SET_EVENT_FLAG(4, 0)
    CALL QST_DEACTIVATE_THIS_EVENT
    CALL HO_CREAR_LOG()
ELSE
    PRINTL
    PRINTFORML %ANAME(CHARA_ID)%は本の魔力に取り憑かれてしまっている！
    PRINTFORMW 今は本を読み進めるより他はない……
ENDIF

;-------------------------------------------------
;EV5
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_5
#DIMS EVENT_TRIGGER = "EVENT_SLOT"
#DIMS EVENT_SLOT_NAME = "彫像の手に握られた古書物"

RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%

@QST_QUEST_11_EVENT_5
#DIM CONST EVENT_ID = 5
#DIM EVENT_FLAG
#DIM CHARA_ID

CALL QST_GET_EVENT_FLAG(EVENT_ID)
IF !RESULT
    CHARA_ID = QST_RANDCHARA()
    MAP_SET @"QUEST_{QST_有効クエストID}_MAP", "CHARA_ID", TOSTR(CHARA_ID)
    PRINTFORMW %ANAME(CHARA_ID)%は、一糸まとわぬ姿で右手を下腹部に這わせ、恍惚とした表情を浮かべる女の像の前に立った
    PRINTFORMW 彫像は両性具有を模して掘られている。女の右手は、不釣り合いに巨大に励起した男性器にあてがわれている……
    PRINTL
    PRINTFORMW 彫像は左手に非常に凝った意匠の書籍を握りしめている。どうやら魔術書の類のようだ
    PRINTL
    PRINTFORMW %ANAME(CHARA_ID)%はその本を調べてみてもよいし、無視してもよい
    CALL ASK_YN("手にとって調べてみる", "無視する")
    PRINTL
    IF !RESULT
        PRINTFORMW %ANAME(CHARA_ID)%は本を手に取り、ページをめくる……
        PRINTL
        PRINTFORMW 本の中は……びっしりと性行為に耽る女同士の絵図で埋め尽くされている
        PRINTFORMW 奇妙なことにどの女も両性具有として描かれている……
        PRINTFORMW 非常に緻密な、まるで空間をそのまま切り出したかのような精緻な点描で描かれており
        PRINTFORMW あまりにも生々しい描写に息を飲む他ない
        PRINTL
        PRINTFORMW %ANAME(CHARA_ID)%は吸い込まれるようにページをめくる……
        PRINTFORMW 女と女がひたすらにまぐわい、犯し、快楽に耽る様が描かれている……
        PRINTFORMW 無心にページをめくる、めくる、めくる……
        PRINTFORMW
        PRINTFORMW めくる、めくる、めくる……
        PRINTFORML
        CALL COLOR_PRINTW(@"%ANAME(CHARA_ID)%は自分の意志と関わらず、ページをめくる手が止まらないことに気がついた……！", カラー_注意)
        CALL PRINT_TITLE("淫魔のふたなり催眠魔術書", "エロトラップ")
        CALL QST_ROLL_MULTI("魔術,", "意志の力で抵抗する(魔術),","500,", , ,"なすがまま", CHARA_ID)
        IF RESULT == 1
            PRINTFORMW %ANAME(CHARA_ID)%はなんとか書籍を握る手を払い除け、本の魔力から脱することに成功した……
        ELSE
            CALL COLOR_PRINTW(@"―――― %ANAME(CHARA_ID)%は本の魔力に捉えられてしまった……！", カラー_注意)
            CALL COLOR_PRINTW(@"下腹部が焼けるように熱を帯びる……。手が自分の意志とは関係なく自身を慰めようとする……", カラー_ピンク)
            IF !HAS_PENIS(CHARA_ID)
                PRINTL
                CALL COLOR_PRINTW(@"……更に奇妙なことに、自身の股間からあり得ないモノがぶら下がっているのを目の当たりにした", カラー_白)
                CALL COLOR_PRINTW(@"固く励起した男根だ……。先端から絶え間なくカウパーを垂れ流し、焼き切れるような劣情が下腹部からせり上がってくる……", カラー_白)
                PRINTL
                CALL COLOR_PRINTW(@"―――― %ANAME(CHARA_ID)%は一時的にふたなりにされてしまった……！", カラー_ピンク)
                MAP_SET @"QUEST_{QST_有効クエストID}_MAP", "ふたなり化", TOSTR(CHARA_ID)
                CALL TO_FUTANARI(CHARA_ID)
                CALL SET_PENISSIZE(CHARA_ID, 1)
                CFLAG:CHARA_ID:一時的ふたなり = 1
            ENDIF
            FLAG:移動制限フラグ = 2
            QST_イベント選択制限 = EVENT_ID
            CALL QST_SET_EVENT_SLOT_NAME(, @"@C:{カラー_催眠}@❤魔術書のページをめくる❤@/C@")
            CALL QST_SET_EVENT_FLAG(EVENT_ID, 1)
            TCVAR:CHARA_ID:催眠中 = 1
            TCVAR:CHARA_ID:催眠実行者 = -1
            CALL CLEAR_ACTOR
            CALL ADD_MPLY(CHARA_ID)
            CALL ADD_MTAR(CHARA_ID)
            CALL QST_EXEC_DUMMYCOM(T_N("Ｐ自慰"))
            CALL HO_PRINT_LOG(@"ページをめくる手が止まらない……。自分を慰める手が止まらない……", 1)
            MAP_SET @"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE_ONCE", "QST_QUEST_11_EVENT_4_RELEASE_EVENT"

        ENDIF
    ELSE
        PRINTFORMW %ANAME(CHARA_ID)%は本をそのままにし、その場を離れた……
    ENDIF
ELSEIF RESULT == 1
    CHARA_ID = TOINT(MAP_GET(@"QUEST_{QST_有効クエストID}_MAP", "CHARA_ID"))
    PRINTFORMW %ANAME(CHARA_ID)%は食い入るようにページを捲りながら、あられもない痴態をさらし、自身を慰めている……
    CALL CLEAR_ACTOR
    CALL ADD_MPLY(CHARA_ID)
    CALL ADD_MTAR(CHARA_ID)
    IF HAS_PENIS(CHARA_ID)
        CALL QST_EXEC_DUMMYCOM(T_N("Ｐ自慰"))
    ELSE
        CALL QST_EXEC_DUMMYCOM(T_N("Ｃ自慰"))
    ENDIF
    MAP_SET @"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE_ONCE", "QST_QUEST_11_EVENT_5_RELEASE_EVENT"
ELSEIF RESULT == 2

ENDIF

;コマンド実行後処理 @EVENTCOMEND で呼び出される。コマンド実行後に催眠が解除されたかを見る
;催眠解除でイベント終了
@QST_QUEST_11_EVENT_5_RELEASE_EVENT
#DIM CHARA_ID

CHARA_ID = TOINT(MAP_GET(@"QUEST_{QST_有効クエストID}_MAP", "CHARA_ID"))
;長すぎてもダレるので10ターンで強制解除
IF TCVAR:CHARA_ID:催眠経過ターン数 == 10 || !IS_PLAYABLE(CHARA_ID)
    CALL COLOR_PRINTL(@"%ANAME(CHARA_ID)%の催眠が解けた！", カラー_注意)
    TCVAR:CHARA_ID:催眠中 = -1
    TCVAR:CHARA_ID:催眠経過ターン数 = 0
ENDIF

IF TCVAR:CHARA_ID:催眠中 == -1
    PRINTL
    CALL COLOR_PRINTW(@"―――― %ANAME(CHARA_ID)%はハッと我に返り、握りしめていた魔術書を投げ捨てた……！", カラー_注意)
    FLAG:移動制限フラグ = 0
    QST_イベント選択制限 = -1
    CALL RELEASE_ALL_EQUIP(CHARA_ID)
    ;ふたなり化されている場合解除
    IF MAP_HAS(@"QUEST_{QST_有効クエストID}_MAP", "ふたなり化")
        CALL TO_FUTANARI(CHARA_ID)
        MAP_REMOVE @"QUEST_{QST_有効クエストID}_MAP", "ふたなり化"
        CFLAG:CHARA_ID:一時的ふたなり = 0
        CALL COLOR_PRINTW(@"%ANAME(CHARA_ID)%の股間に生えていたモノはいつの間にか消えていた……", カラー_注意)
        CALL QST_CHANGE_ITEM("淫堕点,20,")
    ENDIF
    CALL QST_SET_EVENT_FLAG(5, 0)
    CALL QST_DEACTIVATE_THIS_EVENT
    CALL HO_CREAR_LOG()
ELSE
    PRINTL
    PRINTFORML %ANAME(CHARA_ID)%は本の魔力に取り憑かれてしまっている！
    PRINTFORMW 今は本を読み進めるより他はない……
ENDIF

;-------------------------------------------------
;EV6
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_6
#DIMS EVENT_TRIGGER = "EVENT_SLOT"
#DIMS EVENT_SLOT_NAME = "卓上の水差し"
#DIMS EVENT_TYPE = "ONCE"

RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%
RESULTS:2 = %EVENT_TYPE%

@QST_QUEST_11_EVENT_6
#DIM EVENT_FLAG
#DIM TARGET_ID

PRINTFORMW %ANAME(QST_RANDCHARA())%はティーテーブル上の水差しを覗き込んだ
PRINTFORMW 中には並々と水が注がれている
PRINTL
PRINTFORML なんとも怪しい……しかし、もしも手ひどく消耗しているなら背に腹は変えられない
PRINTFORML 機会は一度きりだが、喉を潤し身体を休めることができる……かもしれない
PRINTL
CALL ASK_YN("喉を潤す", "やめておく")
IF !RESULT
    PRINTFORMW %QST_LEADER_NAME()%は喉の乾きを癒やし、小休憩を取った
    ;パーティ全員の体力を回復
    FOR LOCAL, 0, QST_PARTYNUM
        TARGET_ID = TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))
        CALL QST_CHANGE_HP(TARGET_ID, 1500)
        TCVAR:TARGET_ID:媚薬 += 1
    NEXT
    PRINTL
    PRINTFORMW ……
    PRINTFORMW ……%QST_LEADER_NAME()%は身体に奇妙な火照りを覚えた
    PRINTFORMW 鼓動が早くなる……。息が荒くなる……
    PRINTL
    PRINTFORMW 下腹部が火照り、情欲が頭を満たしていく……
    PRINTL
    CALL COLOR_PRINTW(@"―――― %QST_LEADER_NAME()%は媚薬により発情してしまった……！", カラー_ピンク)
    CALL QST_DEACTIVATE_THIS_EVENT()
ELSE
ENDIF

;-------------------------------------------------
;EV7
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_7
#DIMS EVENT_TRIGGER = "ENTER_ROOM"
#DIMS EVENT_SLOT_NAME = ""

RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%

@QST_QUEST_11_EVENT_7
#DIM EVENT_FLAG
#DIM TARGET_ID
#DIM  DYNAMIC CHARA_ID

PRINTFORML %QST_LEADER_NAME()%が足を踏み入れた部屋は、どうやら書斎のようだ
PRINTFORMW 四方の壁は朽ちた本がぎっしりと詰まった書棚で囲まれている
PRINTL
PRINTFORML 部屋の中心には奇妙なティーテーブルが置かれていた
PRINTFORMW 今日のノルディアで好んで使われる、流線型の装飾が施されたティーテーブルで、異質で場違いな存在感を放っている
PRINTL
PRINTFORML テーブルの上には二組のティーセットと水差しが置かれている
PRINTFORMW あたかもつい今しがたまで誰かがここで茶会を催していたかのようだ……

;-------------------------------------------------
;EV8 オートマタ
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_8
#DIMS EVENT_TRIGGER = "ENTER_ROOM"
#DIMS EVENT_SLOT_NAME = ""
#DIMS EVENT_TYPE = "ONCE"

RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%
RESULTS:2 = %EVENT_TYPE%

@QST_QUEST_11_EVENT_8
#DIM EVENT_FLAG
#DIM TARGET_ID
#DIM  DYNAMIC CHARA_ID

PRINTFORML %QST_LEADER_NAME()%が足を踏み入れた部屋はこれまでとうって変わって、殺風景で広々としている
PRINTFORMW 部屋の四隅には観覧用と思しき席が設けられており、中央には大人の背丈ほどの鉄の人形が鎮座しているが……
PRINTL
PRINTFORMW ――――！　%QST_LEADER_NAME()%は人形の正体を認めるや即座に武器を握りしめた。これは冒険者の脅威として名高い自動人形の類だ
PRINTFORML 魔術で動作する人形で、単純な動作を繰り返す原始的なものからヒトを模した複雑なものまで多種多様だが、
PRINTFORMW 一度敵対したならば、この命も感情も持たない存在は壊れるまで戦うことを止めないだろう
PRINTL
PRINTFORML 案の定自動人形はギシギシと軋む音を立てて動作を始める
PRINTFORMW 禍々しい仮面に覆われた顔が%QST_LEADER_NAME()%に向けられる。脚として備えられた鋼の車輪が回転を始める……
PRINTFORMW 戦闘用か、あるいは拷問用か。老朽化しているものの、深刻な脅威であることは間違いない
PRINTL
PRINTFORML 眼前の驚異を排除しなければならない
PRINTFORMW 真正面から戦うことも出来るが、仲間のいないこの状況では困難な戦いとなるだろう
PRINTFORMW あるいは……何か別の策を講じることもできるかもしれないが……
PRINTL
CALL PRINT_TITLE("古代のオートマタ","トラップ")
PRINTFORML なにか打開策はないだろうか……？　腕に覚えがあるならば実力で脅威を排してもよい
PRINTL
CALL QST_ROLL_MULTI("観察,器用","部屋を観察してみる(観察),露出した機構部めがけて投石する(器用),", "80,100,", 7, 1, "戦闘を挑む")
IF RESULT == 1
    SELECTCASE RESULT:2
        CASE 0
            PRINTFORMW %ANAME(RESULT:1)%は部屋の隅、観覧席にレバーがあることを見出した！
            PRINTL
            PRINTFORML 恐らく人形の主が高みから動作を制御するために設けたものだろう
            PRINTFORMW 幸いにして今は人形と自分の他は誰もいない。%ANAME(RESULT:1)%は脱兎の如くレバーに飛び寄り、体重を乗せて引き倒す
            PRINTW
            PRINTFORMW 動力を断たれた自動人形のアームがだらりと下がり、動作を止める。どうやら停止させることに成功したようだ！
            CALL QST_CHANGE_ITEM("名誉点,20,")
            RETURN
        CASE 1
            PRINTFORMW %ANAME(RESULT:1)%は落ちていた小石を拾うと、自動人形の欠けた装甲板から露出する機構めがけて投げつけた！
            PRINTFORML 複雑怪奇な歯車部品の間に石が挟まり込み、メキメキと嫌な音を立てる
            PRINTFORMW 程なくして歯車の回転が止まり、自動人形は糸が切れた操り人形のようにうなだれた
            PRINTW
            PRINTFORMW ……幸運にも自動人形を停止させることに成功したようだ！
            CALL QST_CHANGE_ITEM("名誉点,20,")
            RETURN
    ENDSELECT
ELSEIF !RESULT
    SELECTCASE RESULT:2
        CASE 0
            PRINTFORMW ……%ANAME(RESULT:1)%は有効な手口を何も見出すことができなかった……
        CASE 1
            PRINTFORMW ……%ANAME(RESULT:1)%はやけくそ気味に石を投げつけてみたものの、石は装甲板に阻まれ、むなしく音を立てて落ちた……
    ENDSELECT
    PRINTFORMW もはや小細工を弄す余裕はない……！
    PRINTL
    PRINTFORML %QST_LEADER_NAME()%は武器を固く握りしめ、襲い来る鋼の敵に対峙した
    PRINTFORMW 侵入者の存在を認めた自動人形はアームを自在に振るい、%QST_LEADER_NAME()%めがけて鞭を振り下ろさんとしている……！
ELSEIF RESULT == -1
    PRINTFORML %QST_LEADER_NAME()%は武器を固く握りしめ、意思を持たぬ鋼の人形に襲いかかった
    PRINTFORMW 侵入者の存在を認めた自動人形はアームを自在に振るい、%QST_LEADER_NAME()%めがけて鞭を振り下ろさんとしている……！
ENDIF

;戦闘イベント
CALL CC_INIT()
CALL CC_ADDMOB("DEFENDER", "オートマタ・トーメンタ", 3000, 3000, 55, 0, 1)
FOR LOCAL, 0, LIST_COUNT(_LIST_QST_PARTY)
    CALL CC_ADDCHARA("ATTACKER", TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL)))
NEXT
CALL CLOSE_COMBAT()
IF RESULT == 1
    CALL CC_ADD_COMBAT_EXP(7)
    CALL CC_APPLY_CHARA_HP()
    CALL COLOR_PRINTW(@"%QST_LEADER_NAME()%は実力を以て立ちはだかる脅威を粉砕した！", カラー_注意)
    CALL QST_CHANGE_ITEM("名誉点,15,")
ELSE
    CALL CC_APPLY_CHARA_HP()
    CALL COLOR_PRINTW(@"%QST_LEADER_NAME()%の武器を自動人形のアームが弾き飛ばした！", カラー_注意)
    PRINTFORML ……万策尽きてたじろぐ%QST_LEADER_NAME()%に向けて自動人形が縄を放つ
    PRINTFORMW %QST_LEADER_NAME()%は瞬く間に捕縛され、自由を失ってしまった……
    PRINTL
    PRINTFORMW 床に伏せる%QST_LEADER_NAME()%めがけ、続けて鞭が振り下ろされる
    PRINTFORMW どうやらこの魂なき拷問官に慈悲は期待できそうになさそうだ……
    PRINTL
    CALL PRINT_TITLE("自動人形の仕置き","エロイベント")
    WAIT
    CALL QST_汎用イベント調教_機械姦ＳＭ(12)
    CALL QST_ENQUEUE_TRAIN_EXIT_EVENT(14)
ENDIF

;-------------------------------------------------
;EV9 インキュバスの扉
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_9
#DIMS EVENT_TRIGGER = "ENTER_ROOM"
#DIMS EVENT_SLOT_NAME = "インキュバスの扉"
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%

@QST_QUEST_11_EVENT_9
#DIM EVENT_FLAG
#DIM TARGET_ID
#DIM  DYNAMIC CHARA_ID
#DIM 射精回数
CALL QST_GET_EVENT_FLAG(9)
射精回数 = RESULT

CALL PRINT_TITLE("雄々しく勃ける彫像の扉", "エロイベント")
CALL QST_GET_EVENT_FLAG(10)
IF !RESULT
    PRINTFORML %QST_LEADER_NAME()%の前に分厚い石造りの扉が立ちはだかる
    PRINTFORML 扉にはインキュバスを模したと思われる、精巧な彫像が穿たれている
    PRINTFORMW 今にも動き出さんばかりの精巧さだ
    PRINTL
    PRINTFORMW ……そしてとりわけ目を引くのが、像の股間からいきり立った巨大な雄棒だ…
    PRINTFORMW 眼前にそそり立つそれは、血管に至るまで緻密なディテールで彫り込まれている
    PRINTL
    PRINTFORML %QST_LEADER_NAME()%はこの扉にノブや錠の類が一切ないことに気がついた
    PRINTFORMW よく扉を見回してみると、像の頭上に文字が彫り込まれていることを認めた
    PRINTL
ELSE
    PRINTFORML %QST_LEADER_NAME()%は再び淫魔の像の前に立った
ENDIF
PRINTFORMW 扉には『汝の舌技を示せ』とある……
PRINTL
CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, 0))
CALL CHECK_COM_KNOWLEDGE(CHARA_ID, T_N("フェラチオ"))
IF !RESULT
    PRINTFORMW しかし性知識に疎い%ANAME(CHARA_ID)%には何のことか理解できなかった……
    CALL HO_MOVE_MASTER(3)
    RETURN
ENDIF

CALL ASK_YN("像の淫棒に唇をつけてみる", "放っておく")
IF RESULT
    PRINTFORMW 馬鹿げている……。放っておこう……
    CALL HO_MOVE_MASTER(3)
    RETURN
ENDIF

PRINTFORMW %ANAME(CHARA_ID)%が恐る恐る彫像の陰部に唇を当てると、像のペニスが仄かに明滅した……
PRINTL
PRINTFORMW この仕掛の主が何を欲しているのか理解した%ANAME(CHARA_ID)%は呆れつつも、所詮は作り物だと言い聞かせ"奉仕"を始めた……
CALL COLOR_PRINTL("TIPS:もしかしたらキャラクターは奉仕を拒むかもしれない", カラー_黄)
CALL COLOR_PRINTW("その場合は{特殊}→コマンド:なにもしない　でやり過ごさせよう", カラー_黄)

VARSET COM_FORBIDDEN:CHARA_ID:0, 1
;竿役生成
FOR LOCAL, 0, 1
    CALL QST_QUEST11_CREATE_MOB(0, "インキュバスの像")
    VARSET COM_FORBIDDEN:CHARA_ID:0, 1
    CHARA_ID = RESULT
    CFLAG:CHARA_ID:調教参加フラグ = 1
    CFLAG:CHARA_ID:強制友好化 = 1
    MAP_SET @"QUEST_{QST_有効クエストID}_MAP", "MOB_ID", @"{CHARA_ID}"
NEXT

FOR LOCAL, 0, QST_PARTYNUM
    CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))
    VARSET COM_FORBIDDEN:CHARA_ID:0, 1
    COM_FORBIDDEN:CHARA_ID:T_N("フェラチオ") = 0
    COM_FORBIDDEN:CHARA_ID:T_N("亀頭責めフェラ") = 0
    COM_FORBIDDEN:CHARA_ID:T_N("なにもしない") = 0
    CFLAG:CHARA_ID:調教参加フラグ = 1
NEXT
CALL RESET_ACTOR()
FLAG:ウフフフラグ = 1
QST_調教ターン数 = 8
TFLAG:調教ターン数 = QST_調教ターン数
FLAG:調教モード = 調教_閨
TFLAG:交流中断不可 = 1
MAP_SET @"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE", "QST_QUEST_11_EVENT_9_COMENDEVENT"
CALL QST_ENQUEUE_TRAIN_EXIT_EVENT(10)

;像の射精回数をカウント
@QST_QUEST_11_EVENT_9_COMENDEVENT
#DIM MOB_ID
#DIM 射精回数
MOB_ID = TOINT(MAP_GET(@"QUEST_{QST_有効クエストID}_MAP", "MOB_ID"))
IF NOWEX:MOB_ID:射精 > 0
    CALL QST_GET_EVENT_FLAG(9)
    射精回数 = RESULT + 1
    CALL QST_SET_EVENT_FLAG(9, 射精回数)
ENDIF
CALL HO_CREAR_LOG()
CALL HO_PRINT_LOG(@"インキュバスの像を射精させた回数：@C:{カラー_ピンク}@{射精回数}回@/C@", 1)

;-------------------------------------------------
;EV10 インキュバスの扉-調教後
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_10
#DIMS EVENT_TRIGGER = "TRAIN_EXIT"
#DIMS EVENT_TYPE = ""
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:2 = %EVENT_TYPE%

@QST_QUEST_11_EVENT_10
#DIM 射精回数
#DIM CHARA_ID

MAP_REMOVE @"QUEST_{QST_有効クエストID}_MAP", "EVENTCOMEND_CALLEE"
CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, 0))
CALL QST_GET_EVENT_FLAG(9)
射精回数 = RESULT
IF 射精回数 < 1
    PRINTFORMW …………
    PRINTFORMW 像は微動だにしない……
ELSEIF 射精回数  < 3
    PRINTFORMW 像のペニスから白く粘性のある液体が程走り%ANAME(CHARA_ID)%を汚していく……
    PRINTL
    PRINTFORMW その青臭さ、生温かくねっとりとした感触は本物の精液そのものであった
    PRINTL
    PRINTFORMW 像の陰茎は怪しくピンク色に明滅している。だが、まだ不十分なようだ……
ELSE
    PRINTFORMW 像のペニスから白く粘性のある液体が程走り、%ANAME(CHARA_ID)%を汚していく……
    PRINTL
    PRINTFORMW その青臭さ、生温かくねっとりとした感触は精液そのものであった
    PRINTL
    PRINTFORML %ANAME(CHARA_ID)%の舌技で像のペニスがびくりと跳ね、絞り出すように白くベタつく液を吐き出した
    PRINTFORMW そして満足したかのように鎌首を下げると、同時に振動が起こる……
    PRINTL
    PRINTFORMW 扉がゆっくりと開く。道は開かれたようだ
    PRINTL
    PRINTFORMW はたしてこの先にあるものが%ANAME(CHARA_ID)%を汚辱しただけの価値があるものなのかは、今はわからない……
    CALL QST_CHANGE_ITEM("淫堕点,20,")
    CALL QST_DEACTIVATE_EVENT(9)
    CALL HO_CREAR_LOG()
    RETURN

ENDIF
CALL QST_SET_EVENT_FLAG(10, 1)
CALL HO_CREAR_LOG()
CALL HO_MOVE_MASTER(3)

;-------------------------------------------------
;EV14 トーメンタ-調教後
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_14
#DIMS EVENT_TRIGGER = "TRAIN_EXIT"
#DIMS EVENT_TYPE = ""
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:2 = %EVENT_TYPE%

@QST_QUEST_11_EVENT_14
#DIM CHARA_ID

CHARA_ID = TOINT(LIST_GET(_LIST_QST_PARTY, 0))
PRINTFORML %QST_LEADER_NAME()%に激しい責め苦を加え続ける自動人形のアームが不意に止まる
PRINTFORMW すっかり打ちへしがれた%QST_LEADER_NAME()%が恐る恐る見上げると、可動部から煙を上げて自動人形が停止していた
PRINTFORMW どうやら老朽化した部品が自身の激しい稼働に耐えられなかったらしい
PRINTL
PRINTFORML なんとか拘束を解き、%QST_LEADER_NAME()%は痛む身体を持ち上げる
PRINTFORMW 手ひどく消耗してしまったが命はまだある……このまま探索を続けるなら一度身体を癒す必要がありそうだ……
CALL QST_CHANGE_ITEM("淫堕点,10,")

;-------------------------------------------------
;EV105
;モブエンカウント
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_105
#DIMS EVENT_TRIGGER = "ENTER_ROOM"
#DIMS EVENT_TYPE = "ONCE"
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:2 = %EVENT_TYPE%

@QST_QUEST_11_EVENT_105

CALL HO_GET_ROOM_NAME(HO_MASTER現在地)
LOCALS = %RESULTS%
SELECTCASE RAND:3
    CASE 0
        CALL PRINT_NOTICE(@"敵襲だ！",,1)
        PRINTFORMW %QST_LEADER_NAME()%は武器を握りしめ、敵に対峙した
    CASE 1
        CALL PRINT_NOTICE(@"%LOCALS%では魔物が待ち構えていた！",,1)
        PRINTFORMW 突破するには眼前の驚異を打ち払わねばならない
    CASEELSE
        CALL PRINT_NOTICE(@"%QST_LEADER_NAME()%が%LOCALS%に足を踏み入れるなり魔物が襲いかかってきた！")
ENDSELECT

CALL QST_CEV_COMBAT("墳墓")
IF !RESULT
    CALL QST_QUEST_11_DEFEAT_EVENT()
ENDIF
CALL QST_DEACTIVATE_THIS_EVENT()

;-------------------------------------------------
;EV100 施錠された宝箱
;EV101 宝箱
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_100
#DIMS EVENT_TRIGGER = "EVENT_SLOT"
#DIMS EVENT_SLOT_NAME
#DIM  CHEST_TYPE
EVENT_SLOT_NAME '= @"%S_R("淫らな意匠の小箱/施錠された宝箱/裸像の抱える宝飾箱")%"
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:1 = %EVENT_SLOT_NAME%

@QST_QUEST_11_EVENT_100
#DIMS DYNAMIC _ITEM_LIST
#DIM  DYNAMIC CHEST_TYPE

CALL QST_CEV_CREATE_RANDOM_CHEST(85, 10, 5)
SELECTCASE RESULT
    CASE 0
        SELECTCASE RAND:4
            CASE 0
                _ITEM_LIST '= @"MONEY,2000,"
            CASE 1
                _ITEM_LIST '= @"{ITEM_ポーション},1,"
            CASE 2
                _ITEM_LIST '= @"{ITEM_鋼インゴット},2,"
            CASE 3
                _ITEM_LIST '= @"{ITEM_魔獣の肉片},3,"
        ENDSELECT
        CALL QST_CEV_LOCKED_CHEST(_ITEM_LIST, 100, 100, "LEWD_LV2")
    CASE 1
        _ITEM_LIST '= @"{ITEM_銀インゴット},2,"
        CALL QST_CEV_LOCKED_CHEST(_ITEM_LIST, 100, 130, "LEWD_LV2")
    CASE 2
        _ITEM_LIST '= @"{ITEM_金インゴット},1,"
        CALL QST_CEV_LOCKED_CHEST(_ITEM_LIST, 100, 130, "LEWD_LV2")
ENDSELECT

;-------------------------------------------------
;以下イベントリストで管理する必要のない処理,イベント固有の関数など
;-------------------------------------------------
@QST_QUEST_11_DEFEAT_EVENT_2
#DIM CHARA_ID
#DIM 口上カラー_カール
#DIM 口上カラー_カーラ

CHARA_ID = NAME_TO_CHARA("インキュバス・カール")
IF CHARA_ID == -1
    CALL QST_QUEST11_CREATE_UNIQUE_MOB1
    CHARA_ID = RESULT
ENDIF
口上カラー_カール = CFLAG:CHARA_ID:口上カラーコード
CFLAG:CHARA_ID:面識 = 1

CHARA_ID = NAME_TO_CHARA("サキュバス・カーラ")
IF CHARA_ID == -1
    CALL QST_QUEST11_CREATE_UNIQUE_MOB2
    CHARA_ID = RESULT
ENDIF
口上カラー_カーラ = CFLAG:CHARA_ID:口上カラーコード
CFLAG:CHARA_ID:面識 = 1

PRINTL
PRINTFORMW ……………………
PRINTFORMW ………………
PRINTFORMW …………
PRINTL
PRINTFORMW 気を失ってしまった%QST_LEADER_NAME()%が意識を取り戻すと、二人の少年、少女が顔を覗き込んでるのを認めた
PRINTFORMW 一見は人間の子どものようだが、背中から生えた翼は彼らが人ならざる者であることを物語っている
PRINTL
CALLF TAG_PRINT(@"@C:{口上カラー_カーラ}@「あちゃー、今回もやりすぎちゃったね。カール」@/C@", 1)
PRINTW
CALLF TAG_PRINT(@"@C:{口上カラー_カール}@「うーん……今の人間は昔より随分脆いなぁ……。もう少し難易度を下げた方がいいのかなぁ……」@/C@", 1)
PRINTW
PRINTL
CALLF TAG_PRINT(@"@C:{口上カラー_カール}@「おっと、ごめんごめん、目が覚めたみたいだね。ニンゲン」@/C@", 1)
PRINTW
CALLF TAG_PRINT(@"@C:{口上カラー_カール}@「詳しいことは省くけど、僕らは淫魔、この迷宮の主だ」@/C@", 1)
WAIT
CALLF TAG_PRINT(@"@C:{口上カラー_カール}@「君は無様にも迷宮の途中で落伍した。本来ならここで死んでも文句は言えない」@/C@", 1)
PRINTW
CALLF TAG_PRINT(@"@C:{口上カラー_カーラ}@「でもね、慈悲深ーい私たちは、アナタにチャンスをあげようと思うの！ちょっとばかりお礼はいただくけどね！」@/C@", 1)
PRINTL
PRINTFORMW %QST_LEADER_NAME()%は一体何なにをさせるつもりだと淫魔に問う
PRINTL
CALLF TAG_PRINT(@"@C:{口上カラー_カール}@「どうしたの？ただでさえ鈍い頭を打っていよいよ駄目になったの？淫魔の要求なんて一つしかないだろうに」@/C@", 1)
PRINTW
CALLF TAG_PRINT(@"@C:{口上カラー_カーラ}@「これから、あなたのこと散々犯して！辱めて！玩具にするの！たったそれだけ！」@/C@", 1)
PRINTW
PRINTL
PRINTFORMW %QST_LEADER_NAME()%は傲慢で一方的な二人の言に言葉を絞り出して抗議する
PRINTL
CALLF TAG_PRINT(@"@C:{口上カラー_カール}@「あー、ごめん、なにか言った？豚の言葉ってどうにも聞き取りにくくてね。まぁ多分死なないから、ちょっと我慢してよ」@/C@", 1)
PRINTW
CALL QST_QUEST_11_DEFEAT_EVENT_3

@QST_QUEST_11_DEFEAT_EVENT_3
#DIM CHARA_ID

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

;主導除外フラグが立ったキャラクターは慰安調教で常にターゲットに回る。
;拘束中など自主的に行動させたくないシチュエーションでこのフラグを立てる。
CVARSET CFLAG, GETNUM(CFLAG, "調教参加フラグ") , 0
FOR LOCAL, 0, QST_PARTYNUM
    ;調教コマンドのプレイヤーにならなくなる。一方的に嬲られるシチュ用
    CFLAG:(TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))):主導除外 = 1
    ;良感情を極めて得にくくなるフラグ
    CFLAG:(TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))):凌辱被害者フラグ = 1
    CFLAG:(TOINT(LIST_GET(_LIST_QST_PARTY, LOCAL))):調教参加フラグ = 1
NEXT

CHARA_ID = NAME_TO_CHARA("インキュバス・カール")
IF CHARA_ID != -1
    CFLAG:CHARA_ID:慰安参加者 = 1
    CFLAG:CHARA_ID:調教参加フラグ  = 1
    CFLAG:CHARA_ID:強制友好化 = 1
    CFLAG:CHARA_ID:慰安参加者非対象化 = 1
ELSE
    CALL QST_QUEST11_CREATE_UNIQUE_MOB1
    CFLAG:RESULT:調教参加フラグ  = 1
    CFLAG:RESULT:強制友好化 = 1
    CFLAG:RESULT:慰安参加者 = 1
    CFLAG:RESULT:慰安参加者非対象化 = 1
ENDIF
CHARA_ID = NAME_TO_CHARA("サキュバス・カーラ")
IF CHARA_ID != -1
    CFLAG:CHARA_ID:慰安参加者非対象化 = 1
    CFLAG:CHARA_ID:慰安参加者 = 1
    CFLAG:CHARA_ID:調教参加フラグ  = 1
    CFLAG:CHARA_ID:強制友好化 = 1
ELSE
    CALL QST_QUEST11_CREATE_UNIQUE_MOB2
    CFLAG:RESULT:調教参加フラグ  = 1
    CFLAG:RESULT:強制友好化 = 1
    CFLAG:RESULT:慰安参加者 = 1
    CFLAG:RESULT:慰安参加者非対象化 = 1
ENDIF
CALL QST_ENQUEUE_TRAIN_EXIT_EVENT(21)

PRINTL
CALL PRINT_TITLE("双子淫魔の搾精凌辱", "エロイベント")
WAIT
RETURN

;-------------------------------------------------
;EV15 カール&カーラ -調教後
;-------------------------------------------------
@QST_ADD_EVENT_QUEST_11_EVENT_21
#DIMS EVENT_TRIGGER = "TRAIN_EXIT"
#DIMS EVENT_TYPE = ""
RESULTS:0 = %EVENT_TRIGGER%
RESULTS:2 = %EVENT_TYPE%

@QST_QUEST_11_EVENT_21
#DIM CHARA_ID
#DIM 口上カラー_カール
#DIM 口上カラー_カーラ

CHARA_ID = NAME_TO_CHARA("インキュバス・カール")
口上カラー_カール = CFLAG:CHARA_ID:口上カラーコード
CHARA_ID = NAME_TO_CHARA("サキュバス・カーラ")
口上カラー_カーラ = CFLAG:CHARA_ID:口上カラーコード

PRINTFORMW 二人の淫魔のあまりにも嗜虐的な責めに%QST_LEADER_NAME()%はもはや微かなうめき声をあげることしか出来ないでいる……
PRINTL
CALLF TAG_PRINT(@"@C:{口上カラー_カール}@「ちょっと……だめだよ、カーラ。それ以上やったら。それ、多分もう死んじゃうから」@/C@", 1)
PRINTW
CALLF TAG_PRINT(@"@C:{口上カラー_カーラ}@「危ない危ない、食べ尽くしちゃうところだったよ……！」@/C@", 1)
PRINTW
CALLF TAG_PRINT(@"@C:{口上カラー_カール}@「今日のところはこれくらいにしておいてあげるね。次はもう少し分別を持って遊びに来てね！」@/C@", 1)
PRINTW
CALLF TAG_PRINT(@"@C:{口上カラー_カール}@「……でないと、次は本当に喰い殺すよ？」@/C@", 1)
WAIT
CALL QST_QUEST_11_DEFEAT_EVENT

;-------------------------------------------------
;以下イベントリストで管理する必要のない処理,イベント固有の関数など
;-------------------------------------------------
@QST_QUEST_11_DEFEAT_EVENT
PRINTL
PRINTFORMW ……………………
PRINTFORMW ………………
PRINTFORMW …………
PRINTL

PRINTFORMW あれからどうやって%QST_LEADER_NAME()%が最寄りの街まで帰還したのか、記憶が酷く混濁しており定かではない
PRINTFORMW 気がつけば宿のベッドに身を横たえており、強烈な痛みと重苦しい倦怠感に苛まれ、数日は動くことも叶わなかった
PRINTFORML
PRINTFORMW ……なぜあの迷宮を探索した冒険者たちが多くを語ろうとしないのか、身を持って理解することができた
PRINTL
PRINTFORMW ……もし次があるならば、あのインキュバスの言の通り、より一層の注意を払うべきだろう……
PRINTL

CALL QST_CHANGE_ITEM("淫堕点,10,")
CALL PRINT_NOTICE("治療費や宿泊費として10,000ディナリを失った……")
MONEY -= 10000
TFLAG:クエスト_完了フラグ = 1
QST_COOLTIME:QST_有効クエストID += 4
CALL TRAIN_EXIT()

;-------------------------------------------------
;慰安モブの定義
;-------------------------------------------------
@QST_QUEST11_CREATE_MOB(SEX, MOB_NAME)
#DIM SEX
#DIMS MOB_NAME
#DIM 対象
#DIMS 名前
#DIM 主導除外フラグ

名前 = %MOB_NAME%

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
TALENT:対象:Ｃ鈍感 = 1
ABL:対象:戦闘 =  RAND(35, 50)
ABL:対象:性知識 = 3
ABL:対象:奉仕 = 1
ABL:対象:性技 = RAND(0, 4)
ABL:対象:欲望 = RAND(3, 7)
ABL:対象:性交 = RAND(3, 5)
ABL:対象:射精 = 0
ABL:対象:サド = RAND(0, 1)
ABL:対象:主導度Ｕ = RAND(0, 500)
ABL:対象:倒錯度 = RAND(0, 300)
CFLAG:対象:調教参加フラグ = 1
CFLAG:対象:慰安モブ = 1

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

RETURN 対象

;-------------------------------------------------
;クエスト用ユニークキャラクタ
;-------------------------------------------------
@QST_QUEST11_CREATE_UNIQUE_MOB1()
#DIM SEX = 0
#DIMS MOB_NAME = "カール"
#DIM 対象
#DIMS 名前
#DIM 主導除外フラグ

名前 = %MOB_NAME%

CALL CREATE_RANDOM_CHARA(0, -1, SEX)

FLAG:汎用武将カウント --
対象 = RESULT
IF LOCAL == -1
    RETURN -1
ENDIF

NO:対象 = GET_EMPTY_NO()
NAME:対象 = %名前%
;ユニークキャラとして一度だけ生成するのでCSTR:99を登録
CSTR:対象:99 '= "インキュバス・カール"
CALLNAME:対象 = %名前%
BASE:対象:体力 = 7500
BASE:対象:気力 = 5500
MAXBASE:対象:体力 = 7500
MAXBASE:対象:気力 = 5500
TALENT:対象:処女 = 0
TALENT:対象:キス未経験 = 0
TALENT:対象:童貞 = 0
TALENT:対象:アナル処女 = 0
TALENT:対象:絶倫 = 1
CSTR:対象:0 =
CSTR:対象:1 =
TALENT:対象:性別 = SEX
TALENT:対象:成長型 = 成長型_戦士
ABL:対象:戦闘 =  120
ABL:対象:魔術 =  150
ABL:対象:性知識 = 5
ABL:対象:奉仕 = 4
ABL:対象:性技 = 6
ABL:対象:欲望 = 10
ABL:対象:性交 = 15
ABL:対象:射精 = 15
ABL:対象:サド = 10
ABL:対象:主導度Ｕ = RAND(0, 500)
ABL:対象:倒錯度 = 500
CFLAG:対象:調教参加フラグ = 1

LOCALS '= "incubus01"
CSTR:対象:顔グラファイル名 '= @"%LOCALS%.webp"
CSTR:対象:キャラ顔グラ '= @"%LOCALS%.webp"
CFLAG:対象:ポートレイト画像タイプ = 2
CFLAG:対象:汎用口上パターン = 2000
CFLAG:対象:口上カラーコード = 0xff6666
CFLAG:対象:所属 = 所属_ゲストNPC

RETURN 対象

@QST_QUEST11_CREATE_UNIQUE_MOB2()
#DIM SEX = 1
#DIMS MOB_NAME = "カーラ"
#DIM 対象
#DIMS 名前
#DIM 主導除外フラグ

名前 = %MOB_NAME%

CALL CREATE_RANDOM_CHARA(0, -1, SEX)

FLAG:汎用武将カウント --
対象 = RESULT
IF LOCAL == -1
    RETURN -1
ENDIF

NO:対象 = GET_EMPTY_NO()
NAME:対象 = %名前%
;ユニークキャラとして一度だけ生成するのでCSTR:99を登録
CSTR:対象:99 '= "サキュバス・カーラ"
CALLNAME:対象 = %名前%
BASE:対象:体力 = 7500
BASE:対象:気力 = 5500
MAXBASE:対象:体力 = 7500
MAXBASE:対象:気力 = 5500
TALENT:対象:処女 = 0
TALENT:対象:キス未経験 = 0
TALENT:対象:童貞 = 0
TALENT:対象:アナル処女 = 0
TALENT:対象:絶倫 = 1
CSTR:対象:0 =
CSTR:対象:1 =
TALENT:対象:性別 = SEX
TALENT:対象:成長型 = 成長型_詩人
ABL:対象:戦闘 =  120
ABL:対象:魔術 =  150
ABL:対象:性知識 = 5
ABL:対象:奉仕 = 4
ABL:対象:性技 = 6
ABL:対象:欲望 = 10
ABL:対象:性交 = 15
ABL:対象:射精 = 15
ABL:対象:サド = 10
ABL:対象:主導度Ｕ = RAND(0, 500)
ABL:対象:倒錯度 = 500
CFLAG:対象:調教参加フラグ = 1

LOCALS '= "succubus01"
CSTR:対象:顔グラファイル名 '= @"%LOCALS%.webp"
CSTR:対象:キャラ顔グラ '= @"%LOCALS%.webp"
CFLAG:対象:ポートレイト画像タイプ = 2
CFLAG:対象:汎用口上パターン = 2001
CFLAG:対象:口上カラーコード = 0x40C0FF
CFLAG:対象:所属 = 所属_ゲストNPC

RETURN 対象