code:
@CLOTH_NAME_WEAPON_3
RESULTS = 戦鎚

;------------------------------------------
;装備種類
;------------------------------------------
@GET_WEAPON_TYPE_3
RETURN WPN_装備種類_斧

;------------------------------------------
;武器の性能
;------------------------------------------
@GET_WEAPON_STATUS_3(材質)
#DIM 材質

;基礎ステータス
WPN_STATUS:WPN_攻撃力 =  40
WPN_STATUS:WPN_防御力 =  10
WPN_STATUS:WPN_軽減値 =  100
WPN_STATUS:WPN_行動力 = 75
WPN_STATUS:WPN_敵視   =  120
WPN_STATUS:WPN_脅威選定   = WPN_脅威選定_高脅威

;材質による共通補正
CALL WEAPON_STATUS_SCALE_BY_MATERIAL(材質)

;------------------------------------------
;;;スキルスロット数
;------------------------------------------
@GET_WEAPON_SKILL_SLOT_3(材質)
#DIM 材質
#DIM DYNAMIC PASSIVE
#DIM DYNAMIC ACTIVE
SELECTCASE 材質
    CASE WPN_材質_銀, WPN_材質_ウーツ鋼
        PASSIVE = 2
        ACTIVE = 1
    CASEELSE
        PASSIVE = 1
        ACTIVE = 1
ENDSELECT
RESULT:0 = PASSIVE
RESULT:1 = ACTIVE

RETURN RESULT

;------------------------------------------
;●価格の取得
;------------------------------------------
@GET_WEAPON_PRICE_3
RETURN 1500

;-----------------------------------
;アイテムがクラフト可能なモジュールの情報
;-----------------------------------
@CHECK_WEAPON_CRAFTABLE_3(MODULE_ID)
#DIM MODULE_ID
SELECTCASE MODULE_ID
    CASE 301    ;金床
        RETURN 1
    CASEELSE
        RETURN 0
ENDSELECT

;-----------------------------------
;アイテムの素材
;-----------------------------------
@GET_WEAPON_MATERIAL_3(WPN_MATERIAL_NEEDS)
#DIM REF WPN_MATERIAL_NEEDS, 0, 0
;鉄
WPN_MATERIAL_NEEDS:WPN_材質_鉄:ITEM_鉄インゴット = 8
WPN_MATERIAL_NEEDS:WPN_材質_鉄:ITEM_木材 = 2
;鋼
WPN_MATERIAL_NEEDS:WPN_材質_鋼:ITEM_鋼インゴット = 10
;銀
WPN_MATERIAL_NEEDS:WPN_材質_銀:ITEM_銀インゴット = 10
;ウーツ鋼
WPN_MATERIAL_NEEDS:WPN_材質_ウーツ鋼:ITEM_ウーツ鋼インゴット = 10


code:
@CLOTH_NAME_WEAPON_4
RESULTS = 弓

;------------------------------------------
;装備種類
;------------------------------------------
@GET_WEAPON_TYPE_4
RETURN WPN_装備種類_弓

;------------------------------------------
;武器の性能
;------------------------------------------
@GET_WEAPON_STATUS_4(材質)
#DIM 材質

;基礎ステータス
WPN_STATUS:WPN_攻撃力 =  10
WPN_STATUS:WPN_防御力 =  15
WPN_STATUS:WPN_軽減値 =  60
WPN_STATUS:WPN_行動力 = 200
WPN_STATUS:WPN_敵視   =  40
WPN_STATUS:WPN_脅威選定   = WPN_脅威選定_低耐久

;材質による共通補正
CALL WEAPON_STATUS_SCALE_BY_MATERIAL(材質)

;------------------------------------------
;●価格の取得
;------------------------------------------
@GET_WEAPON_PRICE_4
RETURN 2000

;-----------------------------------
;アイテムがクラフト可能なモジュールの情報
;-----------------------------------
@CHECK_WEAPON_CRAFTABLE_4(MODULE_ID)
#DIM MODULE_ID
SELECTCASE MODULE_ID
    CASE 301    ;金床
        RETURN 1
    CASEELSE
        RETURN 0
ENDSELECT

;-----------------------------------
;アイテムの素材
;-----------------------------------
@GET_WEAPON_MATERIAL_4(WPN_MATERIAL_NEEDS)
#DIM REF WPN_MATERIAL_NEEDS, 0, 0
;鉄
WPN_MATERIAL_NEEDS:WPN_材質_鉄:ITEM_鉄インゴット = 6
;鋼
WPN_MATERIAL_NEEDS:WPN_材質_鋼:ITEM_鋼インゴット = 6
;銀
WPN_MATERIAL_NEEDS:WPN_材質_銀:ITEM_銀インゴット = 6
;ウーツ鋼
WPN_MATERIAL_NEEDS:WPN_材質_ウーツ鋼:ITEM_ウーツ鋼インゴット = 6

repo_name: pervysquirrelz/erafl

license: unknown


code:
@CLOTH_NAME_WEAPON_5
RESULTS = レイピア

;------------------------------------------
;装備種類
;------------------------------------------
@GET_WEAPON_TYPE_5
RETURN WPN_装備種類_短剣

;------------------------------------------
;武器の性能
;------------------------------------------
@GET_WEAPON_STATUS_5(材質)
#DIM 材質

;基礎ステータス
WPN_STATUS:WPN_攻撃力 =  20
WPN_STATUS:WPN_防御力 =  18
WPN_STATUS:WPN_軽減値 =  90
WPN_STATUS:WPN_行動力 = 120
WPN_STATUS:WPN_敵視   =  60
WPN_STATUS:WPN_脅威選定   = WPN_脅威選定_低脅威

;材質による共通補正
CALL WEAPON_STATUS_SCALE_BY_MATERIAL(材質)

;------------------------------------------
;●価格の取得
;------------------------------------------
@GET_WEAPON_PRICE_5
RETURN 1200

;-----------------------------------
;アイテムがクラフト可能なモジュールの情報
;-----------------------------------
@CHECK_WEAPON_CRAFTABLE_5(MODULE_ID)
#DIM MODULE_ID
SELECTCASE MODULE_ID
    CASE 301    ;金床
        RETURN 1
    CASEELSE
        RETURN 0
ENDSELECT

;-----------------------------------
;アイテムの素材
;-----------------------------------
@GET_WEAPON_MATERIAL_5(WPN_MATERIAL_NEEDS)
#DIM REF WPN_MATERIAL_NEEDS, 0, 0
;鉄
WPN_MATERIAL_NEEDS:WPN_材質_鉄:ITEM_鉄インゴット = 4
WPN_MATERIAL_NEEDS:WPN_材質_鉄:ITEM_木材 = 2
;鋼
WPN_MATERIAL_NEEDS:WPN_材質_鋼:ITEM_鋼インゴット = 5
;銀
WPN_MATERIAL_NEEDS:WPN_材質_銀:ITEM_銀インゴット = 5
;ウーツ鋼
WPN_MATERIAL_NEEDS:WPN_材質_ウーツ鋼:ITEM_ウーツ鋼インゴット = 5


code:
@CLOTH_NAME_WEAPON_7
RESULTS = 刀

;------------------------------------------
;装備種類
;------------------------------------------
@GET_WEAPON_TYPE_7
RETURN WPN_装備種類_剣

;------------------------------------------
;武器の性能
;------------------------------------------
@GET_WEAPON_STATUS_7(材質)
#DIM 材質

;基礎ステータス
WPN_STATUS:WPN_攻撃力 =  38
WPN_STATUS:WPN_防御力 =  15
WPN_STATUS:WPN_軽減値 =  100
WPN_STATUS:WPN_行動力 = 120
WPN_STATUS:WPN_敵視   =  80
WPN_STATUS:WPN_脅威選定   = WPN_脅威選定_無作為

;材質による共通補正
CALL WEAPON_STATUS_SCALE_BY_MATERIAL(材質)

;------------------------------------------
;;;スキルスロット数
;------------------------------------------
@GET_WEAPON_SKILL_SLOT_7(材質)
#DIM 材質
#DIM DYNAMIC PASSIVE
#DIM DYNAMIC ACTIVE
SELECTCASE 材質
    CASE WPN_材質_銀, WPN_材質_ウーツ鋼
        PASSIVE = 2
        ACTIVE = 1
    CASEELSE
        PASSIVE = 1
        ACTIVE = 1
ENDSELECT
RESULT:0 = PASSIVE
RESULT:1 = ACTIVE

RETURN RESULT

;------------------------------------------
;●価格の取得
;------------------------------------------
@GET_WEAPON_PRICE_7
RETURN 1200

;-----------------------------------
;アイテムがクラフト可能なモジュールの情報
;-----------------------------------
@CHECK_WEAPON_CRAFTABLE_7(MODULE_ID)
#DIM MODULE_ID
SELECTCASE MODULE_ID
    CASE 301    ;金床
        RETURN 1
    CASEELSE
        RETURN 0
ENDSELECT

;-----------------------------------
;アイテムの素材
;-----------------------------------
@GET_WEAPON_MATERIAL_7(WPN_MATERIAL_NEEDS)
#DIM REF WPN_MATERIAL_NEEDS, 0, 0
;鉄
WPN_MATERIAL_NEEDS:WPN_材質_鉄:ITEM_鉄インゴット = 6
WPN_MATERIAL_NEEDS:WPN_材質_鉄:ITEM_木材 = 2
;鋼
WPN_MATERIAL_NEEDS:WPN_材質_鋼:ITEM_鋼インゴット = 7
;銀
WPN_MATERIAL_NEEDS:WPN_材質_銀:ITEM_銀インゴット = 7
;ウーツ鋼
WPN_MATERIAL_NEEDS:WPN_材質_ウーツ鋼:ITEM_ウーツ鋼インゴット = 7


code:
@CLOTH_NAME_WEAPON_8
RESULTS = 槍

;------------------------------------------
;装備種類
;------------------------------------------
@GET_WEAPON_TYPE_8
RETURN WPN_装備種類_槍

;------------------------------------------
;武器の性能
;------------------------------------------
@GET_WEAPON_STATUS_8(材質)
#DIM 材質

;基礎ステータス
WPN_STATUS:WPN_攻撃力 =  35
WPN_STATUS:WPN_防御力 =  22
WPN_STATUS:WPN_軽減値 =  100
WPN_STATUS:WPN_行動力 = 100
WPN_STATUS:WPN_敵視   =  90
WPN_STATUS:WPN_脅威選定   = WPN_脅威選定_高脅威

;材質による共通補正
CALL WEAPON_STATUS_SCALE_BY_MATERIAL(材質)

;------------------------------------------
;;;スキルスロット数
;------------------------------------------
@GET_WEAPON_SKILL_SLOT_8(材質)
#DIM 材質
#DIM DYNAMIC PASSIVE
#DIM DYNAMIC ACTIVE
SELECTCASE 材質
    CASE WPN_材質_銀
        PASSIVE = 2
        ACTIVE = 1
    CASEELSE
        PASSIVE = 1
        ACTIVE = 1
ENDSELECT
RESULT:0 = PASSIVE
RESULT:1 = ACTIVE

RETURN RESULT

;------------------------------------------
;●価格の取得
;------------------------------------------
@GET_WEAPON_PRICE_8
RETURN 1500

;-----------------------------------
;アイテムがクラフト可能なモジュールの情報
;-----------------------------------
@CHECK_WEAPON_CRAFTABLE_8(MODULE_ID)
#DIM MODULE_ID
SELECTCASE MODULE_ID
    CASE 301    ;金床
        RETURN 1
    CASEELSE
        RETURN 0
ENDSELECT

;-----------------------------------
;アイテムの素材
;-----------------------------------
@GET_WEAPON_MATERIAL_8(WPN_MATERIAL_NEEDS)
#DIM REF WPN_MATERIAL_NEEDS, 0, 0
;鉄
WPN_MATERIAL_NEEDS:WPN_材質_鉄:ITEM_鉄インゴット = 7
WPN_MATERIAL_NEEDS:WPN_材質_鉄:ITEM_木材 = 2
;鋼
WPN_MATERIAL_NEEDS:WPN_材質_鋼:ITEM_鋼インゴット = 7
;銀
WPN_MATERIAL_NEEDS:WPN_材質_銀:ITEM_銀インゴット = 7


code:
;-------------------------------------------------
;衣装の初期化
;-------------------------------------------------
@CLOTH_INIT(対象)
#DIM 対象
IF CSTR:対象:100 == ""
	TRYCALLFORM CLOTH_INIT_{NO:対象}
ELSE
	FOR LOCAL, 0, CLOTH_PART_NUM - 1
		CALL SET_CLOTH_BY_NAME(対象, LOCAL, CSTR:対象:(LOCAL + 100))
	NEXT
ENDIF

;-------------------------------------------------
;衣装のリセット
;-------------------------------------------------
@CLOTH_RESET(対象)
#DIM 対象
FOR LOCAL, 0, CLOTH_PART_NUM
	CLOTH:対象:LOCAL = 0
NEXT

;-------------------------------------------------
;ARG:0番の衣装を表示
;-------------------------------------------------
@SHOW_CLOTH(ARG:0)
PRINTFORM ◆%ANAME(ARG:0)%の衣装◆
IF FLAG:クエストモード
	CALLF TAG_PRINT(@"@C:{カラー_注釈}@　　※クエスト中は武器の変更のみ可能@/C@", 0)
ENDIF
PRINTL

PRINTL
FOR LOCAL, 0, CLOTH_PART_NUM
	CALL GET_CLOTH_NAME(LOCAL, CLOTH:(ARG:0):LOCAL)
	PRINTFORML   %CLOTH_PART_NAME:LOCAL, 10, LEFT% - %RESULTS%
NEXT

;-------------------------------------------------
;指定キャラの指定部位に指定IDの衣装を装着する
;-------------------------------------------------
@SET_CLOTH(対象, 部位, ID)
#DIM 対象
#DIM 部位
#DIM ID
#DIM DYNAMIC 脱衣部位, CLOTH_PART_NUM
TRYCCALLFORM CLOTH_NAME_%CLOTH_PART_NAME_ENG:部位%_{ID}
CATCH
	ID = 0
ENDCATCH

;組み合わせにより自動で解除される部位
IF ID > 0
	SELECTCASE 部位
		CASE 衣装部位_上服, 衣装部位_下服
			脱衣部位:衣装部位_上下服 = CLOTH:対象:衣装部位_上下服
		CASE 衣装部位_上下服
			脱衣部位:衣装部位_上服 = CLOTH:対象:衣装部位_上服
			脱衣部位:衣装部位_下服 = CLOTH:対象:衣装部位_下服
		CASE 衣装部位_下着上, 衣装部位_下着下
			脱衣部位:衣装部位_上下下着 = CLOTH:対象:衣装部位_上下下着
		CASE 衣装部位_上下下着
			脱衣部位:衣装部位_下着上 = CLOTH:対象:衣装部位_下着上
			脱衣部位:衣装部位_下着下 = CLOTH:対象:衣装部位_下着下
	ENDSELECT
ENDIF

FOR LOCAL, 0, CLOTH_PART_NUM
	IF 脱衣部位:LOCAL > 0
		HAVE_CLOTH:LOCAL:(脱衣部位:LOCAL) += 1
		CLOTH:対象:LOCAL = 0
	ENDIF
NEXT

SELECTCASE 部位
	CASE 衣装部位_武器
		CALLFORM CLOTH_SET_EFFECT_%CLOTH_PART_NAME_ENG:部位%_{CLOTH:対象:部位}(対象, -1)
		CALLFORM CLOTH_SET_EFFECT_%CLOTH_PART_NAME_ENG:部位%_{ID}(対象, 1)

		IF CFLAG:(対象):所属 == CFLAG:MASTER:所属
			HAVE_CLOTH:部位:(CLOTH:対象:部位) += 1
			HAVE_CLOTH:部位:ID -= 1
			IF HAVE_CLOTH:部位:ID < 0
				HAVE_CLOTH:部位:ID = 0
			ENDIF
			HAVE_CLOTH:部位:0 = 0
			TRYCCALLFORM CLOTH_IS_SYNC_ITEM_%CLOTH_PART_NAME_ENG:部位%_{ID}()
				ITEM:RESULT = HAVE_CLOTH:部位:ID
				HAVE_CLOTH:部位:ID = ITEM:RESULT
			CATCH
			ENDCATCH
		ENDIF
	CASEELSE
		IF CFLAG:(対象):所属 == CFLAG:MASTER:所属
			HAVE_CLOTH:部位:(CLOTH:対象:部位) += 1
			HAVE_CLOTH:部位:ID -= 1
			IF HAVE_CLOTH:部位:ID < 0
				HAVE_CLOTH:部位:ID = 0
			ENDIF
		ENDIF
ENDSELECT

CLOTH:対象:部位 = ID

RETURN 1

;-------------------------------------------------
;名称から衣装を設定する 重いので多用しないこと
;-------------------------------------------------
@SET_CLOTH_BY_NAME(対象, 部位, 名称)
#DIM 対象
#DIM 部位
#DIMS 名称

CALL GET_CLOTH_ID_BY_NAME(部位, 名称)
CALL SET_CLOTH(対象, 部位, RESULT)

;-------------------------------------------------
;名称から衣装を取得する 重いので多用しないこと
;-------------------------------------------------
@GET_CLOTH_ID_BY_NAME(部位, 名称)
#DIM 部位
#DIMS 名称
FOR LOCAL, 0, MAX_CLOTH_ID
	TRYCCALLFORM CLOTH_NAME_%CLOTH_PART_NAME_ENG:部位%_{LOCAL}
		SIF RESULTS == 名称
			RETURN LOCAL
	CATCH
	ENDCATCH
NEXT

RETURN 0

;-------------------------------------------------
;衣装名を取得するラッパ関数
;-------------------------------------------------
@GET_CLOTH_NAME(部位, ID)
#DIM 部位
#DIM ID

TRYCCALLFORM CLOTH_NAME_%CLOTH_PART_NAME_ENG:部位%_{ID}()
	RETURN 1
CATCH
	RESULTS = なし
	RETURN 0
ENDCATCH

;-----------------------------------
;要求リソースを取得
;-----------------------------------
@GET_CLOTH_MATERIAL_NEEDS(部位, ITEM_ID, MATERIAL_NEEDS)
#DIM 部位
#DIM ITEM_ID
#DIM REF MATERIAL_NEEDS
VARSET MATERIAL_NEEDS, 0
TRYCCALLFORM GET_CLOTH_MATERIAL_%CLOTH_PART_NAME_ENG:部位%_{ITEM_ID}(MATERIAL_NEEDS)
	IF RESULT
		RETURN 1
	ELSE
		RETURN -1
	ENDIF
CATCH
	;定義されていなければ一律植物性繊維10個
	MATERIAL_NEEDS:ITEM_植物性繊維 = 10
ENDCATCH
RETURN -1

;-------------------------------------------------
;衣装在庫を追加
;-------------------------------------------------
@CHANGE_CLOTH_STOCK(部位, ITEM_ID, AMOUNT)
#DIM 部位
#DIM ITEM_ID
#DIM AMOUNT
HAVE_CLOTH:部位:ITEM_ID += AMOUNT
RETURN 1

;-------------------------------------------------
;衣装描写を取得するラッパ関数、設定されていない場合は衣装名を返す
;-------------------------------------------------
@GET_CLOTH_DESC(部位, ID)
#DIM 部位
#DIM ID

TRYCCALLFORM CLOTH_DESC_%CLOTH_PART_NAME_ENG:部位%_{ID}()
CATCH
	TRYCCALLFORM CLOTH_NAME_%CLOTH_PART_NAME_ENG:部位%_{ID}()
	CATCH
		RESULTS = なし
	ENDCATCH
ENDCATCH

;-------------------------------------------------
;衣服の属性を表すタグの取得とチェック
;-------------------------------------------------
@GET_CLOTH_TAG(部位, ID)
#FUNCTIONS
#DIM 部位
#DIM ID
VARSET RESULTS
TRYCALLFORMF CLOTH_TAG_%CLOTH_PART_NAME_ENG:部位%_{ID}
RETURNF RESULTS

@HAS_CLOTH_TAG(部位, ID, AND_OR = "AND", TAGS:0 = "", TAGS:1 = "", TAGS:2 = "", TAGS:3 = "", TAGS:4 = "",)
#FUNCTION
#DIMS TAGS, 5
#DIM 部位
#DIM ID
#DIMS AND_OR
#DIMS LIST_TAG

LIST_TAG = %GET_CLOTH_TAG(部位, ID)%

RETURNF LIST_GMATCH(LIST_TAG, AND_OR, TAGS:0, TAGS:1, TAGS:2, TAGS:3, TAGS:4)

;-------------------------------------------------
;着用衣装表示（ボタンつき）
;-------------------------------------------------
@SHOW_CLOTH_SETTING(対象, ボタン)
#DIM 対象
#DIM ボタン
#DIM DYNAMIC WEAPON_LIST_IDX
#DIM DYNAMIC WEAPON_ID
#DIM DYNAMIC MATERIAL
#DIM DYNAMIC STATUS_IDX

PRINTFORM ◆%ANAME(対象)%の衣装◆
PRINTL

FOR LOCAL, 0, CLOTH_PART_NUM - 1
	IF ボタン
		PRINTBUTTON @"%"[" + CLOTH_PART_NAME:LOCAL + "]", 12, LEFT%", LOCAL + 100
	ELSE
		PRINTFORM %CLOTH_PART_NAME:LOCAL, 12, LEFT%
	ENDIF
	;IF LOCAL != 衣装部位_武器
	CALL GET_CLOTH_NAME(LOCAL, CLOTH:対象:LOCAL)
	PRINTFORML %RESULTS%
NEXT
PRINTL

;-------------------------------------------------
;衣装設定メニュー
;-------------------------------------------------
@CLOTH_SETTING_MENU(対象)
#DIM 対象
#DIM FIRST_LINE
FIRST_LINE = LINECOUNT

CALL SHOW_CLOTH_SETTING(対象, 1)
PRINTBUTTON "[BACK]", 999

$INPUT_LOOP
INPUT

IF RESULT == 999
	RETURN
ELSEIF RESULT < 100 && RESULT >= CLOTH_PART_NUM + 100
	CLEARLINE 1
	GOTO INPUT_LOOP
ENDIF
CALL CLOTH_CHANGE_MENU(対象, RESULT - 100)

CLEARLINE LINECOUNT - FIRST_LINE

RESTART

;-------------------------------------------------
;衣装用メニュー その２
;-------------------------------------------------
@CLOTH_CHANGE_MENU(対象, 部位)
#DIM 対象
#DIM 部位
#DIM 利用可否, MAX_CLOTH_ID
#DIM 衣装数
#DIM FIRST_LINE
#DIM ページ数
#DIM ページ
#DIM CONST ページごと衣装数 = 15
#DIM STATUS_IDX
#DIM WEAPON_ID
#DIM EQUIP_CHARA_ID
#DIM MATERIAL
#DIM DYNAMIC IDX, WPN_MAX_WEAPON_STOCK
#DIM DYNAMIC CNT

IF FLAG:クエストモード && 部位 != 衣装部位_武器
	CALLF TAG_PRINT(@"@C:{カラー_注意}@クエスト中は武器の変更のみ可能です@/C@", 0)
	WAIT
	RETURN
ENDIF

VARSET 利用可否, 0
利用可否:0 = 1
衣装数 = 1
FOR LOCAL, 1, MAX_CLOTH_ID
	TRYCCALLFORM CLOTH_NAME_%CLOTH_PART_NAME_ENG:部位%_{LOCAL}()
		IF 部位 == 衣装部位_武器
			TRYCALLFORM GET_WEAPON_LIMITED_{LOCAL}(対象)
			IF RESULT == 1 && (HAVE_CLOTH:部位:(LOCAL) > 0 || LOCAL == 0 || LOCAL == CLOTH:対象:部位)
				利用可否:LOCAL = 1
				衣装数 ++
			ENDIF
		ELSEIF 部位 != 衣装部位_武器 && (HAVE_CLOTH:部位:(LOCAL) > 0 || LOCAL == 0)
			利用可否:LOCAL = 1
			衣装数 ++
		ENDIF
	CATCH
		利用可否:LOCAL = 0
	ENDCATCH
NEXT

ページ数 = 衣装数 / ページごと衣装数 + 1
ページ = 1

CALL SINGLE_DRAWLINE

FIRST_LINE = LINECOUNT
$SHOW_LOOP

衣装数 = 0
IF 部位 != 衣装部位_武器
	FOR LOCAL, 0, MAX_CLOTH_ID
		SIF 利用可否:LOCAL == 0
			CONTINUE
		衣装数 ++
		SIF 衣装数 < ページごと衣装数 * (ページ - 1) || 衣装数 >= ページ * ページごと衣装数
			CONTINUE
		CALL GET_CLOTH_NAME(部位, LOCAL)
		PRINTBUTTON @"[%RESULTS, 20, LEFT%]", LOCAL
		IF CLOTH:対象:部位 == LOCAL
			PRINTFORM  ●着用中
		ENDIF
		IF LOCAL != 0
			PRINTFORM 所持数：%TOSTR(HAVE_CLOTH:部位:LOCAL), 2, RIGHT%
		ENDIF
		PRINTL
	NEXT
ELSE
	PRINTBUTTON @"[%"なし", 20, LEFT%]", WPN_MAX_WEAPON_STOCK + 1
	PRINTL
	VARSET IDX
	CNT = DT_SELECT("WEAPON_STOCK", , "WEAPON_ID ASC, MATERIAL ASC", IDX)
	FOR LOCAL, 0, CNT
		衣装数 ++
		SIF 衣装数 < ページごと衣装数 * (ページ - 1) || 衣装数 >= ページ * ページごと衣装数
			CONTINUE
		CALL GET_WEAPON_STOCK_TABLE(IDX:LOCAL, "EQUIP_CHARA_ID")
		EQUIP_CHARA_ID = RESULT
		SIF EQUIP_CHARA_ID != 対象 && EQUIP_CHARA_ID >= 0
			CONTINUE
		CALL GET_WEAPON_STOCK_TABLE(IDX:LOCAL, "WEAPON_NAME")
		PRINTBUTTON @"[%RESULTS, 20, LEFT%]", IDX:LOCAL
		IF 対象 == EQUIP_CHARA_ID
			PRINTFORM  %"●着用中", 10, LEFT%
		ELSE
			PRINTFORM  %"　", 10, LEFT%
		ENDIF
		CALL GET_WEAPON_STOCK_TABLE(IDX:LOCAL, "WEAPON_ID")
		WEAPON_ID = RESULT
		CALL GET_WEAPON_STOCK_TABLE(IDX:LOCAL, "MATERIAL")
		MATERIAL = RESULT
		CALL GET_WEAPON_STATUS_FROM_STOCK_TABLE(,IDX:LOCAL)
		FOR STATUS_IDX, 0, WPN_MAX_STATUSNUM
			IF STATUS_IDX != WPN_脅威選定
				LOCALS '= TAG_PRINT_SHAPE(@"@C:{カラー_注釈}@%WPN_STATUS_NAME:STATUS_IDX%:{WPN_STATUS:STATUS_IDX}@/C@", 12, 1)
			ELSE
				LOCALS '= TAG_PRINT_SHAPE(@"@C:{カラー_注釈}@%WPN_STATUS_NAME:STATUS_IDX%:%WPN_脅威選定文字列:(WPN_STATUS:STATUS_IDX)%@/C@", 16, 1)
			ENDIF
			CALLF TAG_PRINT(@"%LOCALS%", 0)
		NEXT
		PRINTL
	NEXT
ENDIF
CALL SINGLE_DRAWLINE
IF ページ数 > 1
	PRINTBUTTON "[NEXT]", 9997
	PRINTFORM  {ページ}/{ページ数}
	PRINTBUTTON "[PREV]", 9998
	PRINTL
ENDIF
PRINTBUTTON "[BACK]", 9999

$INPUT_LOOP

INPUT

IF RESULT == 9999
	RETURN
ELSEIF RESULT == 9997 && ページ数 > 1
	ページ = ROUND_DECREMENT(ページ, 1, ページ数)
ELSEIF RESULT == 9998 && ページ数 > 1
	ページ = ROUND_INCREMENT(ページ, 1, ページ数)
ELSEIF RESULT >= 0 && RESULT < MAX_CLOTH_ID && 利用可否:RESULT && 部位 != 衣装部位_武器
	CALL SET_CLOTH(対象, 部位, RESULT)
ELSEIF 部位 == 衣装部位_武器
	;DEBUGPRINTFORML WPN:RESULT {RESULT}
	IF RESULT != WPN_MAX_WEAPON_STOCK + 1 ;"なし" 以外
		CALL EQUIP_WEAPON(対象, RESULT)
	ELSE
		CALL UNEQUIP_WEAPON(対象)
	ENDIF
ENDIF

CLEARLINE LINECOUNT - FIRST_LINE
GOTO SHOW_LOOP

;--------------------------------------------------------------------
;衣装装着後のステータス変化を描画
;対象が指定されていない場合は、素のステータス変化値を表示
;(代わりにMASTERを使っています)
;ARG:0が設定されているとステータスの頭文字を併せて表示します
;--------------------------------------------------------------------
@PRINT_STATUS_CHANGE_NEXT(部位, ID, 対象 = -1, ARG:0 = -1)
#DIM 部位
#DIM ID
#DIM 対象

IF 対象:0 < 0
	FOR LOCAL:0, 0, ステータス変化個数
		ステータス変化前値:(LOCAL:0) = ABL:MASTER:(WPN_STATUS_NAME:(LOCAL:0))
	NEXT
	CALLFORM CLOTH_SET_EFFECT_%CLOTH_PART_NAME_ENG:部位%_{ID}(MASTER, 1)
	FOR LOCAL:0, 0, ステータス変化個数
		ステータス変化後値:(LOCAL:0) = ABL:MASTER:(WPN_STATUS_NAME:(LOCAL:0))
	NEXT
	CALLFORM CLOTH_SET_EFFECT_%CLOTH_PART_NAME_ENG:部位%_{ID}(MASTER, -1)
	FOR LOCAL:0, 0, ステータス変化個数
		ステータス変化値:(LOCAL:0) = ステータス変化後値:(LOCAL:0) - ステータス変化前値:(LOCAL:0)
	NEXT

	FOR LOCAL:0, 0, ステータス変化個数
		IF ステータス変化値:(LOCAL:0) > 0
			SETCOLOR 0xE98FB0
		ELSEIF ステータス変化値:(LOCAL:0) < 0
			SETCOLOR 0x8F99E0
		ENDIF
		IF ARG:0 > 0
			PRINTFORM  %CHARATU(WPN_STATUS_NAME:(LOCAL:0),0)%:%(ステータス変化値:(LOCAL:0) > 0? "↑"# "↓")%%TOSTR(ABS(ステータス変化値:(LOCAL:0))), 3, RIGHT%
		ELSE
			PRINTFORM  %(ステータス変化値:(LOCAL:0) == 0)?"　"#(ステータス変化値:(LOCAL:0) > 0? "↑"# "↓")%%TOSTR(ABS(ステータス変化値:(LOCAL:0))), 3, RIGHT%
		ENDIF
		RESETCOLOR
	NEXT
ELSE

	;ステータス変更後表示
	FOR LOCAL:0, 0, ステータス変化個数
		ステータス変化前値:(LOCAL:0) = ABL:対象:(WPN_STATUS_NAME:(LOCAL:0))
	NEXT

	SELECTCASE 部位
		CASE 衣装部位_武器
			CALLFORM CLOTH_SET_EFFECT_%CLOTH_PART_NAME_ENG:衣装部位_武器%_{CLOTH:対象:衣装部位_武器}(対象, -1)
	ENDSELECT

	CALLFORM CLOTH_SET_EFFECT_%CLOTH_PART_NAME_ENG:部位%_{CLOTH:対象:部位}(対象, -1)
	CALLFORM CLOTH_SET_EFFECT_%CLOTH_PART_NAME_ENG:部位%_{ID}(対象, 1)
	FOR LOCAL:0, 0, ステータス変化個数
		ステータス変化後値:(LOCAL:0) = ABL:対象:(WPN_STATUS_NAME:(LOCAL:0))
	NEXT
	CALLFORM CLOTH_SET_EFFECT_%CLOTH_PART_NAME_ENG:部位%_{ID}(対象, -1)
	CALLFORM CLOTH_SET_EFFECT_%CLOTH_PART_NAME_ENG:部位%_{CLOTH:対象:部位}(対象, 1)

	SELECTCASE 部位
		CASE 衣装部位_武器
			CALLFORM CLOTH_SET_EFFECT_%CLOTH_PART_NAME_ENG:衣装部位_武器%_{CLOTH:対象:衣装部位_武器}(対象, -1)
	ENDSELECT

	FOR LOCAL:0, 0, ステータス変化個数
		ステータス変化値:(LOCAL:0) = ステータス変化後値:(LOCAL:0) - ステータス変化前値:(LOCAL:0)
	NEXT

	FOR LOCAL:0, 0, ステータス変化個数
		IF ステータス変化値:(LOCAL:0) != 0
			IF ステータス変化値:(LOCAL:0) > 0
				SETCOLOR 0xE98FB0
			ELSE
				SETCOLOR 0x8F99E0
			ENDIF
			IF ARG:0 > 0
				PRINTFORM  %CHARATU(WPN_STATUS_NAME:(LOCAL:0),0)%:%(ステータス変化値:(LOCAL:0) > 0? "↑"# "↓")%%TOSTR(ABS(ステータス変化値:(LOCAL:0))), 3, RIGHT%
			ELSE
				PRINTFORM  %(ステータス変化値:(LOCAL:0) == 0)?"　"#(ステータス変化値:(LOCAL:0) > 0? "↑"# "↓")%%TOSTR(ABS(ステータス変化値:(LOCAL:0))), 3, RIGHT%
			ENDIF
			RESETCOLOR
		ELSE
			SIF ステータス変化値:(LOCAL:0) == 0
				PRINTFORM  %CHARATU(WPN_STATUS_NAME:(LOCAL:0),0)%:　%TOSTR(ABS(ステータス変化後値:(LOCAL:0))), 3, RIGHT%
		ENDIF
	NEXT

ENDIF

;-------------------------------------------------
;@SET_CHARA_CLOTH_DATA
;衣装データを調教用領域に適用
;-------------------------------------------------
;region @SET_CHARA_CLOTH_DATA
@SET_CHARA_CLOTH_DATA(CHARA_ID)
#DIM CHARA_ID
#DIM DYNAMIC ITER_I
#DIM DYNAMIC ITER_J

DT_SELECT "CLOTH_DRAWER", @"OWNER_CHARA_UID = {CFLAG:CHARA_ID:キャラＩＤ}"
;衣装プリセットが設定されていればプリセットから反映
IF RESULT > 0
	CALL SET_CHARA_CLOTH_FROM_PRESET(CHARA_ID)
ELSE
	FOR ITER_J, 0, CLOTH_PART_NUM
		調教用衣装:CHARA_ID:ITER_J = CLOTH:CHARA_ID:ITER_J
	NEXT
ENDIF
;#endregion

;-------------------------------------------------
;@SET_CHARA_CLOTH_FROM_PRESET
;プリセットから衣装を適用する
;-------------------------------------------------
;region @SET_CHARA_CLOTH_FROM_PRESET
@SET_CHARA_CLOTH_FROM_PRESET(CHARA_ID)
#DIM  CHARA_ID
#DIMS DYNAMIC PRESET_LIST
#DIM  DYNAMIC CLOTH_DID, CLOTH_DRAWER_MAX_DRAWERNUM
#DIM  DYNAMIC CLOTH_ID
#DIM  DYNAMIC ITER_I
#DIM  DYNAMIC ITER_J

;指定されたプリセットが無効の場合、強制的に通常プリセットを適用
SIF !CLOTH_PRESET_IS_VALID:CHARA_ID:(CFLAG:CHARA_ID:衣装プリセット)
	CFLAG:CHARA_ID:衣装プリセット = 0

FOR ITER_I, 0, CLOTH_PART_NUM
	CLOTH_ID = 0
	DT_SELECT "CLOTH_DRAWER", @"OWNER_CHARA_UID = {CFLAG:CHARA_ID:キャラＩＤ} AND PARTS_IDX = {ITER_I}",,CLOTH_DID
	FOR ITER_J, 0, RESULT
		PRESET_LIST = %DT_CELL_GETS("CLOTH_DRAWER", CLOTH_DID:ITER_J, "PRESET_LIST", 1)%
		IF LIST_INDEXOF(PRESET_LIST, @"%TOSTR(CFLAG:CHARA_ID:衣装プリセット)%") != -1
			CLOTH_ID = DT_CELL_GET("CLOTH_DRAWER",CLOTH_DID:ITER_J, "CLOTH_ID", 1)
		ENDIF
	NEXT
	調教用衣装:CHARA_ID:ITER_I = CLOTH_ID
NEXT

;#endregion

;-------------------------------------------------
;;; 特定の衣装が着用されているか調べる
;;; - ARGS
;;;     - CHARA_ID {int}: キャラクターID
;;;     - 部位 {int}: 衣装部位(衣装部位_頭 など)
;;;     - CLOTH_ID {int}: 衣装ID
;;;     - 各プリセットを含む {int}: 1 = 各プリセットを含む  0 = 現在の着用衣装のみチェック
;;; - RETURN
;;;     - RESULT {int}: 0 着用されていない 1 着用されている
;-------------------------------------------------
@CLOTH_IS_EQUIP(CHARA_ID, 部位, CLOTH_ID, 各プリセットを含む = 0)
#FUNCTION
#DIM CHARA_ID
#DIM CLOTH_ID
#DIM 部位
#DIM 各プリセットを含む
#DIM  DYNAMIC ITER_I
#DIM  DYNAMIC ITER_J
#DIM  DYNAMIC CLOTH_DID
#DIMS DYNAMIC PRESET_LIST

IF !各プリセットを含む
	IF 調教用衣装:CHARA_ID:部位 == CLOTH_ID
		RETURNF 1
	ENDIF
ELSE
	DT_SELECT "CLOTH_DRAWER", @"OWNER_CHARA_UID = {CFLAG:CHARA_ID:キャラＩＤ} AND PARTS_IDX = {部位}",, CLOTH_DID
	FOR ITER_I, 0, RESULT
		IF DT_CELL_GET("CLOTH_DRAWER", CLOTH_DID:ITER_I, "CLOTH_ID", 1) == CLOTH_ID
			PRESET_LIST = %DT_CELL_GETS("CLOTH_DRAWER", CLOTH_DID:ITER_I, "PRESET_LIST", 1)%
			FOR ITER_J, 0, LIST_COUNT(PRESET_LIST)
				IF CLOTH_PRESET_IS_VALID:CHARA_ID:(LIST_GETINT(PRESET_LIST, ITER_J))
					RETURNF 1
				ENDIF
			NEXT
		ENDIF
	NEXT
ENDIF

RETURNF 0


code:
;-----------------------------------
;エンチャント、エンチャントルーンに関連する処理
;-----------------------------------
;;;ルーンの入手、消費操作を行う関数
@RUNE_STOCK_CHANGE(SKILL_DEF_NAME, SKILL_LV, AMOUNT)
#DIMS SKILL_DEF_NAME
#DIM  SKILL_LV
#DIM  AMOUNT
#DIM  DYNAMIC WPN_SKILL_GENRE

WPN_SKILL_GENRE = WPN_SKILL_GET_GENRE(SKILL_DEF_NAME)
IF WPN_SKILL_GENRE == -1
    PRINTFORML エラー @RUNE_STOCK_CHANGE:指定されたSKILL_DEF_NAME%SKILL_DEF_NAME%がXMLに定義されていません
    THROW
ENDIF
CALL RUNE_STOCK_UPDATE(SKILL_DEF_NAME, WPN_SKILL_GENRE, SKILL_LV, AMOUNT)

;-------------------------------------------------
;;; エンチャントルーンの在庫を取得する関数
;-------------------------------------------------
@RUNE_STOCK_GET_AMOUNT(SKILL_DEF_NAME, SKILL_LV)
#FUNCTION
#DIMS SKILL_DEF_NAME
#DIM  SKILL_LV
#DIM  WPN_SKILL_GENRE
#DIM  DYNAMIC DID
#DIM  DYNAMIC AMOUNT

WPN_SKILL_GENRE = WPN_SKILL_GET_GENRE(SKILL_DEF_NAME)
DT_SELECT "RUNE_STOCK", @"SKILL_DEF_NAME = '%SKILL_DEF_NAME%' AND SKILL_LV = {SKILL_LV} AND WPN_SKILL_GENRE = {WPN_SKILL_GENRE}",, DID
IF RESULT
    RETURNF DT_CELL_GET("RUNE_STOCK", DID, "AMOUNT", 1)
ELSE
    RETURNF 0
ENDIF

;-------------------------------------------------
;データテーブル操作処理
;-------------------------------------------------
;;;指定のエンチャントルーンの在庫を更新
@RUNE_STOCK_UPDATE(SKILL_DEF_NAME, WPN_SKILL_GENRE, SKILL_LV, AMOUNT)
#DIMS SKILL_DEF_NAME
#DIM  WPN_SKILL_GENRE
#DIM  SKILL_LV
#DIM  AMOUNT
#DIM  DYNAMIC CUR_AMOUNT
#DIM  DYNAMIC DID

DT_SELECT "RUNE_STOCK", @"SKILL_DEF_NAME = '%SKILL_DEF_NAME%' AND SKILL_LV = {SKILL_LV} AND WPN_SKILL_GENRE = {WPN_SKILL_GENRE}",, DID
IF RESULT
    CUR_AMOUNT = DT_CELL_GET("RUNE_STOCK", DID, "AMOUNT", 1)
    CUR_AMOUNT += AMOUNT
    CUR_AMOUNT = LIMIT(CUR_AMOUNT, 0, 999)
    IF CUR_AMOUNT > 0
        DT_CELL_SET "RUNE_STOCK", DID, "AMOUNT", CUR_AMOUNT, 1
        RETURN 1
    ELSE
        DT_ROW_REMOVE "RUNE_STOCK", DID
        RETURN 1
    ENDIF
ELSE
    CALL RUNE_STOCK_ADD_RECORD(SKILL_DEF_NAME, WPN_SKILL_GENRE, SKILL_LV, AMOUNT)
    RETURN 1
ENDIF
;;;エンチャントルーンのレコードを追加
@RUNE_STOCK_ADD_RECORD(SKILL_DEF_NAME, WPN_SKILL_GENRE, SKILL_LV, AMOUNT = 1)
#DIMS SKILL_DEF_NAME
#DIM  WPN_SKILL_GENRE
#DIM  SKILL_LV
#DIM  AMOUNT
#DIM  DYNAMIC DID
{
    DT_ROW_ADD "RUNE_STOCK"
        ,"SKILL_DEF_NAME", SKILL_DEF_NAME
        ,"WPN_SKILL_GENRE", WPN_SKILL_GENRE
        ,"SKILL_LV", SKILL_LV
        ,"AMOUNT", AMOUNT
}
RETURN RESULT

;;;テーブルデータの取得
@RUNE_STOCK_GET_TABLE_DATA(DID, DATANAME)
#DIM DID
#DIMS DATANAME
SELECTCASE DT_COLUMN_EXIST("RUNE_STOCK", DATANAME)
    CASE 1 TO 4
        IF DT_CELL_ISNULL("RUNE_STOCK", DID, DATANAME, 1) < 0
            RETURN -1
        ELSE
            RETURN DT_CELL_GET("RUNE_STOCK", DID, DATANAME, 1)
        ENDIF
    CASE 5
        IF DT_CELL_ISNULL("RUNE_STOCK", DID, DATANAME, 1) < 0
            RETURN -1
        ELSE
            RESULTS = %DT_CELL_GETS("RUNE_STOCK", DID, DATANAME, 1)%
            RETURN 1
        ENDIF
    CASEELSE
        RETURN -1
ENDSELECT
RETURN -1


code:
;-----------------------------------
;装備名を取得
;-----------------------------------
@GET_WEAPON_NAME(WEAPON_ID, EQUIP_TYPE = 0)
#DIM WEAPON_ID
#DIM EQUIP_TYPE
IF !EQUIP_TYPE
    TRYCCALLFORM CLOTH_NAME_WEAPON_{WEAPON_ID}
        RETURN 0
    CATCH
        RESULTS = ""
    ENDCATCH
ELSE
    TRYCCALLFORM CLOTH_NAME_RELIC_{WEAPON_ID}
        RETURN 0
    CATCH
        RESULTS = ""
    ENDCATCH
ENDIF
RETURN -1
;-----------------------------------
;武器のステータスを定義ファイルから取得
;キャラクターの装備ステータスを参照する場合は@GET_WEAPON_STATUS_FROM_TABLEを使用し
; DATATABLE "WEAPON_STOCK"から取得すること
;-----------------------------------
@GET_WEAPON_STATUS(WEAPON_ID, MATERIAL, EQUIP_TYPE, WEAPON_RANK = 0)
#DIM WEAPON_ID
#DIM MATERIAL
#DIM EQUIP_TYPE
#DIM WEAPON_RANK

VARSET WPN_STATUS
IF !EQUIP_TYPE
    TRYCCALLFORM GET_WEAPON_STATUS_{WEAPON_ID}(MATERIAL)
    CATCH
        RETURN -1
    ENDCATCH
ELSE
    TRYCCALLFORM GET_RELIC_STATUS_{WEAPON_ID}(MATERIAL)
    CATCH
        RETURN -1
    ENDCATCH
ENDIF
FOR LOCAL, 0, WEAPON_RANK
    CALL GET_WEAPON_MODIFIED_STATUS(WPN_STATUS, WPN_STATUS, EQUIP_TYPE)
NEXT
RETURN 1

;-------------------------------------------------
;所持している武器の数値パラメータをWEAPON_STOCKテーブルから取得
;CHARA_ID指定の場合は装備中のキャラの武器のステータスを、
;WEAPON_DID指定の場合は対応するIDの武器をステータスを返す。DIDがわかっているならこちらの方が処理速度が早い
;-------------------------------------------------
@GET_WEAPON_STATUS_FROM_STOCK_TABLE(CHARA_ID = -1, WEAPON_DID = -1)
#DIM CHARA_ID
#DIM WEAPON_DID
VARSET WPN_STATUS

IF CHARA_ID != -1 && WEAPON_DID == -1
    DT_SELECT "WEAPON_STOCK", @"EQUIP_CHARA_ID = {CHARA_ID} AND EQUIP_TYPE = 0"
    SIF RESULT
        WEAPON_DID = RESULT:1
ELSEIF WEAPON_DID != -1
    DT_SELECT "WEAPON_STOCK", @"ID = {WEAPON_DID}"
    SIF !RESULT
        RETURN 0
ELSE
    RETURN 0
ENDIF

IF WEAPON_DID
    FOR LOCAL, 0, WPN_MAX_STATUSNUM
        WPN_STATUS:LOCAL = DT_CELL_GET("WEAPON_STOCK", WEAPON_DID, WPN_STATUS_NAME_ENG:LOCAL, 1)
    NEXT
    RETURN 1
ELSE
    RETURN 0
ENDIF
RETURN 0

;-----------------------------------
;アイテムが作成可能なモジュールか確認
;-----------------------------------
@CHECK_WEAPON_CRAFTABLE(WEAPON_ID, MODULE_ID)
#DIM WEAPON_ID
#DIM MODULE_ID
TRYCCALLFORM CHECK_WEAPON_CRAFTABLE_{WEAPON_ID}(MODULE_ID)
    IF RESULT
        RETURN 1
    ELSE
        RETURN -1
    ENDIF
CATCH
ENDCATCH
RETURN -1

;-----------------------------------
;アイテムの素材を取得
;与えられた材質種類に対応する素材が1以上の数量で定義されていればその材質の武器が作成可能とみなす
;-----------------------------------
@GET_WEAPON_MATERIAL_NEEDS(WEAPON_ID, 材質種類, WPN_MATERIAL_NEEDS)
#DIM WEAPON_ID
#DIM 材質種類
#DIM REF WPN_MATERIAL_NEEDS, 0, 0
VARSET WPN_MATERIAL_NEEDS
TRYCCALLFORM GET_WEAPON_MATERIAL_{WEAPON_ID}(WPN_MATERIAL_NEEDS)
    FOR LOCAL, 0, ITEM_LENGTH
        IF WPN_MATERIAL_NEEDS:材質種類:LOCAL > 0
            RETURN 1
        ENDIF
    NEXT
    RETURN -1
CATCH
ENDCATCH
RETURN -1

;-------------------------------------------------
;武器をキャラに装備させる
;-------------------------------------------------
@EQUIP_WEAPON(CHARA_ID, EQUIP_DID, EQUIP_SLOT_ID = 0)
#DIM CHARA_ID
#DIM EQUIP_DID
#DIM EQUIP_SLOT_ID
;先に装備している武器があれば外す
CALL GET_WEAPON_LIST_IDX_BY_CHARA_ID(CHARA_ID, EQUIP_SLOT_ID)
IF RESULT > 0
    CALL UNEQUIP_WEAPON(CHARA_ID, EQUIP_SLOT_ID)
ENDIF
CALL SET_WEAPON_STOCK_TABLE(EQUIP_DID, "EQUIP_CHARA_ID", CHARA_ID)
CALL SET_WEAPON_STOCK_TABLE(EQUIP_DID, "EQUIP_SLOT_ID", EQUIP_SLOT_ID)

RETURN

@UNEQUIP_WEAPON(CHARA_ID, EQUIP_SLOT_ID = 0)
#DIM CHARA_ID
#DIM EQUIP_SLOT_ID
#DIM DYNAMIC EQUIP_DID
CALL GET_WEAPON_LIST_IDX_BY_CHARA_ID(CHARA_ID, EQUIP_SLOT_ID)
IF RESULT > 0
    EQUIP_DID = RESULT:1
    CALL SET_WEAPON_STOCK_TABLE(EQUIP_DID, "EQUIP_CHARA_ID", -2)
    CALL SET_WEAPON_STOCK_TABLE(EQUIP_DID, "EQUIP_SLOT_ID", EQUIP_SLOT_ID)
ENDIF
RETURN

@UNEQUIP_WEAPON_BY_DID(EQUIP_DID)
#DIM EQUIP_DID
CALL SET_WEAPON_STOCK_TABLE(EQUIP_DID, "EQUIP_CHARA_ID", -2)
CALL SET_WEAPON_STOCK_TABLE(EQUIP_DID, "EQUIP_SLOT_ID", 0)
RETURN

@UNEQUIP_ALL_WEAPON(CHARA_ID)
#DIM CHARA_ID
#DIM EQUIP_SLOT_ID = 0
#DIM DYNAMIC EQUIP_DID
CALL GET_ALL_WEAPON_LIST_IDX_BY_CHARA_ID(CHARA_ID)
FOR LOCAL, 0, RESULT
    EQUIP_DID = RESULT:(1 + LOCAL)
    CALL SET_WEAPON_STOCK_TABLE(EQUIP_DID, "EQUIP_CHARA_ID", -2)
    CALL SET_WEAPON_STOCK_TABLE(EQUIP_DID, "EQUIP_SLOT_ID", EQUIP_SLOT_ID)
NEXT
RETURN

@DELETE_WEAPON(EQUIP_DID)
#DIM EQUIP_DID
DT_ROW_REMOVE "WEAPON_STOCK", EQUIP_DID

;-------------------------------------------------
;WEAPON_STOCK_LISTの管理
;-------------------------------------------------
@SET_WEAPON_STOCK_TABLE(ID, DATANAME, VALUE)
#DIM  ID
#DIMS DATANAME
#DIM  VALUE
SELECTCASE DT_COLUMN_EXIST("WEAPON_STOCK", DATANAME)
    CASE 1 TO 4
        DT_CELL_SET "WEAPON_STOCK", ID, DATANAME, VALUE, 1
        RETURN RESULT
    CASE 5
        RETURN -1
    CASEELSE
        DT_COLUMN_ADD "WEAPON_STOCK", DATANAME, "int16"
        DT_CELL_SET "WEAPON_STOCK", ID, DATANAME, VALUE, 1
        RETURN RESULT
ENDSELECT
RETURN -1

@SETS_WEAPON_STOCK_TABLE(ID, DATANAME, VALUES)
#DIM ID
#DIMS DATANAME
#DIMS VALUES

SELECTCASE DT_COLUMN_EXIST("WEAPON_STOCK", DATANAME)
    CASE 1 TO 4
        RETURN -1
    CASE 5
        DT_CELL_SET "WEAPON_STOCK", ID, DATANAME, VALUES, 1
        RETURN RESULT
    CASEELSE
        DT_COLUMN_ADD "WEAPON_STOCK", DATANAME
        DT_CELL_SET "WEAPON_STOCK", ID, DATANAME, VALUES, 1
        RETURN RESULT
ENDSELECT
RETURN -1

@GET_WEAPON_STOCK_TABLE(ID, DATANAME)
#DIM ID
#DIMS DATANAME
SELECTCASE DT_COLUMN_EXIST("WEAPON_STOCK", DATANAME)
    CASE 1 TO 4
        IF DT_CELL_ISNULL("WEAPON_STOCK", ID, DATANAME, 1) < 0
            RETURN -1
        ELSE
            RETURN DT_CELL_GET("WEAPON_STOCK", ID, DATANAME, 1)
        ENDIF
    CASE 5
        IF DT_CELL_ISNULL("WEAPON_STOCK", ID, DATANAME, 1) < 0
            RETURN -1
        ELSE
            RESULTS = %DT_CELL_GETS("WEAPON_STOCK", ID, DATANAME, 1)%
            RETURN 1
        ENDIF
    CASEELSE
        RETURN -1
ENDSELECT
RETURN -1

;-------------------------------------------------
;武器の表示名を取得
;WEAPON_RANKに応じて末尾に+1とか付けて返す
;-------------------------------------------------
@GET_WEAPON_PRINT_NAME(WEAPON_DID)
#DIM WEAPON_DID
#DIMS DYNAMIC WEAPON_NAME
#DIM  DYNAMIC WEAPON_RANK

CALL GET_WEAPON_STOCK_TABLE(WEAPON_DID, "WEAPON_NAME")
WEAPON_NAME = %RESULTS%
CALL GET_WEAPON_STOCK_TABLE(WEAPON_DID, "WEAPON_RANK")
WEAPON_RANK = RESULT
IF !WEAPON_RANK
    RESULTS = %WEAPON_NAME%
ELSE
    RESULTS = %WEAPON_NAME% +%TOSTR(WEAPON_RANK)%
ENDIF

;-------------------------------------------------
;装備スキルのリストを<SKILL_NAME:SKILL_LV>の形式の文字列でリストにして返す
;-------------------------------------------------
@GET_EQUIP_SKILL_LIST_STR(EQUIP_DID, GENRE)
#DIM  EQUIP_DID
#DIM  GENRE
#DIM  DYNAMIC EQUIP_IDX, WPN_MAX_WEAPON_STOCK
#DIM  DYNAMIC WEAPON_ID
#DIMS DYNAMIC DIC_WPN_SKILL
#DIMS DYNAMIC SKILL_DEF_NAME
#DIMS DYNAMIC WPN_SKILL_DEF_LIST, VARSIZE("SKILL_DEF_LIST")
#DIMS DYNAMIC SKILL_NAME
#DIM  DYNAMIC SKILL_LV
#DIMS DYNAMIC TOOLTIP
#DIM  DYNAMIC F_COL
#DIM  DYNAMIC IDX
#DIM  DYNAMIC ITER_I

SKILL_NAME '= ""
VARS STR_GENRE
VARI SKILL_SLOT
VARI SKILL_SLOT_USED
VARS SKILL_SLOT_USED_SKILL_NAME

IF GENRE == 武器スキル_アクティブ
    STR_GENRE '= "ACTIVE"
ELSE
    STR_GENRE '= "PASSIVE"
ENDIF

DIC_WPN_SKILL = %DT_CELL_GETS("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_WEAPON_SKILL", 1)%
SKILL_SLOT = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT", 1)
SKILL_SLOT_USED = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED", 1)
SKILL_SLOT_USED_SKILL_NAME = %DT_CELL_GETS("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED_SKILL_NAME", 1)%

CALL DIC_KEYS(DIC_WPN_SKILL)
ARRAYCOPY "RESULTS", "WPN_SKILL_DEF_LIST"
FOR ITER_I, 0, RESULT
    SKILL_DEF_NAME = %WPN_SKILL_DEF_LIST:ITER_I%
    SKILL_LV = TOINT(DIC_GET(DIC_WPN_SKILL, SKILL_DEF_NAME))
    CALL GET_SKILL_DESC(SKILL_DEF_NAME, GENRE, SKILL_LV, 1)
    TOOLTIP = %RESULTS%
    ;ルーンによって付呪されたスキルである場合
    IF DIC_CONTAINSKEY(SKILL_SLOT_USED_SKILL_NAME, SKILL_DEF_NAME)
        TOOLTIP += "

※このスキルはルーンによって付呪された
"
        SKILL_NAME += @"@B:DUMMY$%TOOLTIP%@<R:%TOHALF(GET_WPN_SKILL_NAME(SKILL_DEF_NAME, GENRE))%Lv{SKILL_LV}> @/B@"
    ELSE
        SKILL_NAME += @"@B:DUMMY$%TOOLTIP%@<%TOHALF(GET_WPN_SKILL_NAME(SKILL_DEF_NAME, GENRE))%Lv{SKILL_LV}> @/B@"
    ENDIF
NEXT
IF SKILL_SLOT - SKILL_SLOT_USED > 0
    TOOLTIP '= "ルーン付呪枠"
    SKILL_NAME += @"@B:DUMMY$%TOOLTIP%@<---> @/B@" * (SKILL_SLOT - SKILL_SLOT_USED)
ENDIF
IF GENRE == 武器スキル_アクティブ
    F_COL = カラー_オレンジ
ELSE
    F_COL = カラー_黄緑
ENDIF
RESULTS '= @"@C:{F_COL}@%SKILL_NAME%@/C@"

RETURN

@GET_EQUIP_PRICE(EQUIP_DID)
#DIM  EQUIP_DID
#DIM  DYNAMIC EQUIP_TYPE
#DIM  DYNAMIC WEAPON_ID
#DIM  DYNAMIC MATERIAL
#DIM  DYNAMIC WEAPON_RANK
#DIM  DYNAMIC BASE_PRICE
#DIM  DYNAMIC PRICE
#DIM  DYNAMIC 材質別価格補正率, WPN_材質種類数

ARRAYCOPY "WPN_材質別価格補正率", "材質別価格補正率"

EQUIP_TYPE = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, "EQUIP_TYPE", 1)
WEAPON_ID  = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, "WEAPON_ID", 1)
MATERIAL   = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, "MATERIAL", 1)
WEAPON_RANK   = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, "WEAPON_RANK", 1)
IF EQUIP_TYPE == WPN_装備種別_武器
    TRYCCALLFORM GET_WEAPON_PRICE_{WEAPON_ID}
        BASE_PRICE = RESULT
    CATCH
        BASE_PRICE = 1000
    ENDCATCH
ELSE
    TRYCCALLFORM GET_WEAPON_RELIC_{WEAPON_ID}
        BASE_PRICE = RESULT
    CATCH
        BASE_PRICE = 1000
    ENDCATCH
ENDIF
;素材補正
PRICE = FTIMES(BASE_PRICE, MAX(100, 材質別価格補正率:MATERIAL))
;ランク補正
PRICE = FTIMES(PRICE, 100 + (15 * WEAPON_RANK))
;2桁以下切り捨て
PRICE = MAX(100, PRICE / 100 * 100)

RETURN PRICE

;-------------------------------------------------
;OBSOLETED
;@GET_WEAPON_STOCK_TABLEを使用すること
;-------------------------------------------------
@SET_WEAPON_STOCK_LIST(WEAPON_LIST_IDX, DATANAME, VALUES)
#DIM  WEAPON_LIST_IDX
#DIMS DATANAME
#DIMS VALUES

SIF _DIC_WPN_WEAPON_STOCK_LIST:WEAPON_LIST_IDX == "-1"
    _DIC_WPN_WEAPON_STOCK_LIST:WEAPON_LIST_IDX '= ""
_DIC_WPN_WEAPON_STOCK_LIST:WEAPON_LIST_IDX = %DIC_SET(_DIC_WPN_WEAPON_STOCK_LIST:WEAPON_LIST_IDX, DATANAME, VALUES)%
RETURN

;OBSOLETED
;@GET_WEAPON_STOCK_TABLEを使用すること
@GET_WEAPON_STOCK_LIST(WEAPON_LIST_IDX, DATANAME)
#DIM  WEAPON_LIST_IDX
#DIMS DATANAME

VARSET RESULTS
SIF DIC_GET(_DIC_WPN_WEAPON_STOCK_LIST:WEAPON_LIST_IDX, DATANAME) == ""
    RETURN -1

ISNUMERIC DIC_GET(_DIC_WPN_WEAPON_STOCK_LIST:WEAPON_LIST_IDX, DATANAME)
IF RESULT
    RETURN TOINT(DIC_GET(_DIC_WPN_WEAPON_STOCK_LIST:WEAPON_LIST_IDX, DATANAME))
ELSE
    RESULTS = %DIC_GET(_DIC_WPN_WEAPON_STOCK_LIST:WEAPON_LIST_IDX, DATANAME)%
    RETURN
ENDIF

@ADD_WEAPON_STOCK_LIST(WEAPON_ID, WEAPON_NAME, MATERIAL, WEAPON_RANK, PASSIVE_WEAPON_SKILL = "", ACTIVE_WEAPON_SKILL = "", EQUIP_TYPE = 0, PASSIVE_SKILL_SLOT = 0, ACTIVE_SKILL_SLOT = 0)
#DIM  WEAPON_ID
#DIMS WEAPON_NAME
#DIM  MATERIAL
#DIM  WEAPON_RANK
#DIM  EQUIP_TYPE
#DIMS PASSIVE_WEAPON_SKILL
#DIMS ACTIVE_WEAPON_SKILL
#DIM  PASSIVE_SKILL_SLOT
#DIM  ACTIVE_SKILL_SLOT
#DIM DYNAMIC WEAPON_DID
#DIM DYNAMIC WEAPON_LIST_IDX

CALL EQUIP_OWN_LIMIT_CHECK(EQUIP_TYPE)

{
    DT_ROW_ADD "WEAPON_STOCK"
        ,"WEAPON_ID", WEAPON_ID
        ,"WEAPON_NAME", WEAPON_NAME
        ,"MATERIAL", MATERIAL
        ,"WEAPON_RANK", WEAPON_RANK
        ,"EQUIP_CHARA_ID", -2
        ,"PASSIVE_WEAPON_SKILL", PASSIVE_WEAPON_SKILL
        ,"ACTIVE_WEAPON_SKILL", ACTIVE_WEAPON_SKILL
        ,"EQUIP_TYPE", EQUIP_TYPE
        ,"PASSIVE_SKILL_SLOT", PASSIVE_SKILL_SLOT
        ,"ACTIVE_SKILL_SLOT", ACTIVE_SKILL_SLOT
}
IF RESULT
    WEAPON_DID = RESULT
    CALL LOAD_WEAPON_DATA_TO_TABLE(WEAPON_DID, WEAPON_RANK, EQUIP_TYPE)
    RETURN WEAPON_DID
ELSE
    RETURN 0
ENDIF

;DT_SELECTはRESULTに値の存否を返す
;実際のDIDはRESULT:1以降に格納される点に注意
@GET_WEAPON_LIST_IDX_BY_CHARA_ID(CHARA_ID, EQUIP_SLOT_ID = 0)
#DIM CHARA_ID
#DIM EQUIP_SLOT_ID
VARSET RESULT
DT_SELECT "WEAPON_STOCK", @"EQUIP_CHARA_ID = {CHARA_ID} AND EQUIP_SLOT_ID = {EQUIP_SLOT_ID}"
RETURN RESULT

@GET_ALL_WEAPON_LIST_IDX_BY_CHARA_ID(CHARA_ID)
#DIM CHARA_ID
VARSET RESULT
DT_SELECT "WEAPON_STOCK", @"EQUIP_CHARA_ID = {CHARA_ID}", "EQUIP_SLOT_ID ASC"
RETURN RESULT

;-------------------------------------------------
;武器リストの旧DIC->DT変換
;@UPDATE時にCALL
;-------------------------------------------------
@UPDATE_CONVERT_DIC_WEAPON_STOCK_LIST_TO_DT()
#DIM DYNAMIC WEAPON_LIST_IDX
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC WEAPON_NO
#DIM DYNAMIC WEAPON_ID
#DIM DYNAMIC MATERIAL
#DIM DYNAMIC WEAPON_RANK
#DIM DYNAMIC EQUIP_CHARA_ID
#DIMS DYNAMIC WEAPON_NAME
#DIMS CONST DB_NAME = "WEAPON_STOCK"

CALL CREATE_WEAPON_STOCK_TABLE
SIF !RESULT
    RETURN 0

;変換処理
FOR WEAPON_LIST_IDX, 0, WPN_MAX_WEAPON_STOCK
    SIF _DIC_WPN_WEAPON_STOCK_LIST:WEAPON_LIST_IDX == "-1" || _DIC_WPN_WEAPON_STOCK_LIST:WEAPON_LIST_IDX == ""
        BREAK
    CALL GET_WEAPON_STOCK_LIST(WEAPON_LIST_IDX, "WEAPON_ID")
    WEAPON_ID = RESULT
    CALL GET_WEAPON_STOCK_LIST(WEAPON_LIST_IDX, "WEAPON_NAME")
    WEAPON_NAME = %RESULTS%
    CALL GET_WEAPON_STOCK_LIST(WEAPON_LIST_IDX, "MATERIAL")
    MATERIAL = RESULT
    CALL GET_WEAPON_STOCK_LIST(WEAPON_LIST_IDX, "WEAPON_RANK")
    WEAPON_RANK = RESULT
    CALL GET_WEAPON_STOCK_LIST(WEAPON_LIST_IDX, "EQUIP_CHARA_ID")
    EQUIP_CHARA_ID = RESULT
    DT_ROW_ADD DB_NAME, "WEAPON_ID", WEAPON_ID, "WEAPON_NAME", WEAPON_NAME, "MATERIAL", MATERIAL, "WEAPON_RANK", WEAPON_RANK, "EQUIP_CHARA_ID", EQUIP_CHARA_ID
NEXT

; FOR LOCAL, 0, DT_ROW_LENGTH(DB_NAME)
;     DEBUGPRINTFORML 武器ID:{DT_CELL_GET(DB_NAME, LOCAL, "WEAPON_ID")}
;     DEBUGPRINTFORML 武器名:%DT_CELL_GETS(DB_NAME, LOCAL, "WEAPON_NAME")%
;     DEBUGPRINTFORML 材質:{DT_CELL_GET(DB_NAME, LOCAL, "MATERIAL")}
;     DEBUGPRINTFORML ランク:{DT_CELL_GET(DB_NAME, LOCAL, "WEAPON_RANK")}
;     DEBUGPRINTFORML 所持キャラID:{DT_CELL_GET(DB_NAME, LOCAL, "EQUIP_CHARA_ID")}
;     DEBUGPRINTFORML ;-------------------------------------------------
; NEXT

RETURN 1

;-------------------------------------------------
; 武器ステータス定義ERBからステータス情報をテーブルへロード
; DIDが指定されている場合は該当レコードのみ更新
;-------------------------------------------------
@LOAD_WEAPON_DATA_TO_TABLE(WEAPON_DID = -1, WEAPON_RANK, EQUIP_TYPE = 0)
#DIM WEAPON_DID
#DIM WEAPON_RANK
#DIM DYNAMIC IDX, WPN_MAX_WEAPON_STOCK
#DIM DYNAMIC STATUS_IDX
#DIM DYNAMIC WEAPON_ID
#DIM DYNAMIC EQUIP_TYPE
#DIM DYNAMIC MATERIAL
#DIM DYNAMIC ITEM_NUM
#DIMS DYNAMIC SCHEMA
#DIMS DYNAMIC DT_DATA
#DIM DYNAMIC ITER_J

FOR LOCAL, 0, WPN_MAX_STATUSNUM
    IF !DT_COLUMN_EXIST("WEAPON_STOCK", WPN_STATUS_NAME_ENG:LOCAL)
        DT_COLUMN_ADD "WEAPON_STOCK", WPN_STATUS_NAME_ENG:LOCAL, "int16"
    ENDIF
NEXT

IF WEAPON_DID == -1
    ITEM_NUM = DT_SELECT("WEAPON_STOCK", , , IDX)
ELSE
    ITEM_NUM = 1
    IDX:0 = WEAPON_DID
ENDIF
FOR LOCAL, 0, ITEM_NUM
    WEAPON_ID = DT_CELL_GET("WEAPON_STOCK", IDX:LOCAL, "WEAPON_ID", 1)
    MATERIAL = DT_CELL_GET("WEAPON_STOCK", IDX:LOCAL, "MATERIAL", 1)
    EQUIP_TYPE = DT_CELL_GET("WEAPON_STOCK", IDX:LOCAL, "EQUIP_TYPE", 1)
    CALL GET_WEAPON_STATUS(WEAPON_ID, MATERIAL, EQUIP_TYPE)
    FOR ITER_J, 0, WEAPON_RANK
        CALL GET_WEAPON_MODIFIED_STATUS(WPN_STATUS, WPN_STATUS, EQUIP_TYPE)
    NEXT
    FOR STATUS_IDX, 0, WPN_MAX_STATUSNUM
        DT_CELL_SET "WEAPON_STOCK", IDX:LOCAL, WPN_STATUS_NAME_ENG:STATUS_IDX, WPN_STATUS:STATUS_IDX, 1
    NEXT
NEXT

;-------------------------------------------------
; @ITEM_MENUから呼ばれる装備選択メニュー
;-------------------------------------------------
@CHANGE_EQUIPMENT_MENU_WEAPON(WEAPON_DID)
#DIM WEAPON_DID
#DIMS DYNAMIC WEAPON_NAME
#DIMS DYNAMIC MATERIAL
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC EQUIP_TYPE
#DIM  DYNAMIC EQUIP_SLOT_ID
#DIM  DYNAMIC CURRENT_EQUIP_CHARA_ID = -1
#DIM  DYNAMIC COLUMN_LENGTH = 16, 18, 12, 12, 12, 12, 12, 12
#DIM  DYNAMIC WEAPON_STATUS, WPN_MAX_STATUSNUM
#DIM  DYNAMIC STATUS_IDX
#DIMS DYNAMIC ARRAYS_STR_CHARA_INFO, 3
#DIM  DYNAMIC FIRST_LINE
#DIMS DYNAMIC INPUT_VALUES

$INPUT_LOOP
FIRST_LINE = LINECOUNT
REDRAW 0
CALL GET_WEAPON_PRINT_NAME(WEAPON_DID)
WEAPON_NAME = %RESULTS%
CALLF TAG_PRINT(@"◆%WEAPON_NAME, 24, LEFT%", 0)

FOR STATUS_IDX, 0, VARSIZE("WPN_STATUS_NAME_ENG")
    DT_CELL_GET "WEAPON_STOCK", WEAPON_DID, WPN_STATUS_NAME_ENG:STATUS_IDX, 1
    WEAPON_STATUS:STATUS_IDX = RESULT
    IF STATUS_IDX != WPN_脅威選定
        LOCALS '= TAG_PRINT_SHAPE(@"@C:{カラー_注釈}@%WPN_STATUS_NAME:STATUS_IDX%:{WEAPON_STATUS:STATUS_IDX}@/C@", 12, 1)
    ELSE
        LOCALS '= TAG_PRINT_SHAPE(@"@C:{カラー_注釈}@%WPN_STATUS_NAME:STATUS_IDX%:%WPN_脅威選定文字列:(WEAPON_STATUS:STATUS_IDX)%@/C@", 16, 1)
    ENDIF
    CALLF TAG_PRINT(@"%LOCALS%", 0)
NEXT
PRINTL

DT_CELL_GET "WEAPON_STOCK", WEAPON_DID, "EQUIP_CHARA_ID", 1
IF RESULT >= 0
    CURRENT_EQUIP_CHARA_ID = RESULT
    PRINTFORM 現在%ANAME(CURRENT_EQUIP_CHARA_ID)%が装備しています。
ELSE
    CURRENT_EQUIP_CHARA_ID = -1
ENDIF
PRINTFORM 誰に装備させますか？
PRINTL
PRINTL
FOR CHARA_ID, 0, CHARANUM
    VARSET ARRAYS_STR_CHARA_INFO
    IF CFLAG:CHARA_ID:所属 == 所属_プレイヤー
        CALL CHANGE_WEAPON_MENU_SET_CHARA_INFO(ARRAYS_STR_CHARA_INFO, CHARA_ID, WEAPON_STATUS)
        CALL DRAW_LINE("―", カラー_選択不可)
        IF HO_ITEM_MENU_CATEGORY != 4
            CALLF TAG_PRINT(ARRAYS_STR_CHARA_INFO:0, 1)
            CALLF TAG_PRINT(ARRAYS_STR_CHARA_INFO:1, 1)
        ELSE
            CALLF TAG_PRINT(ARRAYS_STR_CHARA_INFO:0, 1)
            CALLF TAG_PRINT(ARRAYS_STR_CHARA_INFO:1, 1)
            CALLF TAG_PRINT(ARRAYS_STR_CHARA_INFO:2, 1)
        ENDIF
    ENDIF
NEXT
CALL DRAW_LINE("―", カラー_選択不可)
;スロット
EQUIP_SLOT_ID = DT_CELL_GET("WEAPON_STOCK", WEAPON_DID, "EQUIP_SLOT_ID", 1)
IF CURRENT_EQUIP_CHARA_ID >= 0
    CALLF TAG_PRINT(@"@B:[UNEQUIP_CID:{CURRENT_EQUIP_CHARA_ID}][EQUIP_SLOT_ID:{EQUIP_SLOT_ID}]@[%ANAME(CURRENT_EQUIP_CHARA_ID)%から%WEAPON_NAME%を外す]@/B@", 1)
    PRINTL
ELSE
    IF DT_CELL_GET("WEAPON_STOCK", WEAPON_DID, "FAVORITE_FLAG", 1) == 1
        CALLF TAG_PRINT(@"@C:{カラー_選択不可}@[%WEAPON_NAME%はお気に入り指定されているため破棄できません]@/C@", 1)
    ELSE
        CALLF TAG_PRINT(@"@B:DISPOSE@[%WEAPON_NAME%を廃棄する]@/B@", 1)
    ENDIF
    PRINTL
ENDIF
CALLF TAG_PRINT(@"@B:CANCEL@[BACK]@/C@", 1)

;入力処理
REDRAW 1
ONEINPUTS
REDRAW 0
CLEARLINE 1
INPUT_VALUES = %RESULTS%
IF DIC_CONTAINSKEY(INPUT_VALUES, "EQUIP_CID")
    CHARA_ID = TOINT(DIC_GET(INPUT_VALUES, "EQUIP_CID"))
    SIF DIC_CONTAINSKEY(INPUT_VALUES, "EQUIP_SLOT_ID")
        EQUIP_SLOT_ID = TOINT(DIC_GET(INPUT_VALUES, "EQUIP_SLOT_ID"))
    CALL EQUIP_WEAPON(CHARA_ID, WEAPON_DID, EQUIP_SLOT_ID)
ELSEIF DIC_CONTAINSKEY(INPUT_VALUES, "UNEQUIP_CID")
    CURRENT_EQUIP_CHARA_ID = TOINT(DIC_GET(INPUT_VALUES, "UNEQUIP_CID"))
    SIF DIC_CONTAINSKEY(INPUT_VALUES, "EQUIP_SLOT_ID")
        EQUIP_SLOT_ID = TOINT(DIC_GET(INPUT_VALUES, "EQUIP_SLOT_ID"))
    CALL UNEQUIP_WEAPON(CURRENT_EQUIP_CHARA_ID, EQUIP_SLOT_ID)
ELSEIF INPUT_VALUES == "DISPOSE"
    CALLF TAG_PRINT(@"@C:{カラー_注意}@%WEAPON_NAME%を廃棄します。廃棄した装備は完全に失われます。よろしいですか？@/C@", 1)
    PRINTL
    CALL ASK_YN("廃棄する","やめる")
    PRINTL
    IF !RESULT
        CALL DELETE_WEAPON(WEAPON_DID)
        PRINTFORMW %WEAPON_NAME%を廃棄しました
        RETURN
    ENDIF
ELSEIF RESULTS == "CANCEL"
    RETURN
ENDIF
CLEARLINE LINECOUNT - FIRST_LINE
GOTO INPUT_LOOP

@CHANGE_WEAPON_MENU_SET_CHARA_INFO(ARRAYS_STR_CHARA_INFO, CHARA_ID, WEAPON_STATUS)
#DIMS REF ARRAYS_STR_CHARA_INFO
#DIM  CHARA_ID
#DIM  REF WEAPON_STATUS
#DIM  HEAD_PARAM = GETNUM(ABL, "戦闘"), GETNUM(ABL, "魔術")
#DIMS DYNAMIC STR_RANK
#DIM  DYNAMIC STATUS_IDX
#DIM  DYNAMIC CURRENT_WEAPON_STATUS, WPN_MAX_STATUSNUM
#DIM  DYNAMIC CURRENT_WEAPON_DID
#DIM  DYNAMIC SLOT_ID
#DIM  DYNAMIC F_COL
#DIM  DYNAMIC VARIATION

LOCALS '= @"%ANAME(CHARA_ID)%"
ARRAYS_STR_CHARA_INFO:0 += @"%LOCALS, 16, LEFT%@/B@"

FOR LOCAL, 0, VARSIZE("HEAD_PARAM")
    ARRAYS_STR_CHARA_INFO:0 += @"@C:{カラー_注釈}@%ABLNAME:(HEAD_PARAM:LOCAL)%:@/C@"
    STR_RANK = %ALPHABET_RANK(ランク_ＳＬＧ, ABL:CHARA_ID:(HEAD_PARAM:LOCAL))%
    F_COL = GET_RANK_COLOR(STR_RANK)
    ARRAYS_STR_CHARA_INFO:0 += @"@C:{F_COL}@%STR_RANK%@/C@ "
    ARRAYS_STR_CHARA_INFO:0 += @"%TOSTR_R(ABL:CHARA_ID:(HEAD_PARAM:LOCAL), 3)%  "
NEXT

IF HO_ITEM_MENU_CATEGORY != 4
    DT_SELECT "WEAPON_STOCK", @"EQUIP_CHARA_ID = {CHARA_ID} AND EQUIP_TYPE = 0"
    IF RESULT
        CURRENT_WEAPON_DID = RESULT:1
        CALL GET_WEAPON_PRINT_NAME(CURRENT_WEAPON_DID)
        ARRAYS_STR_CHARA_INFO:1 += TAG_PRINT_SHAPE(@"@B:[EQUIP_CID:{CHARA_ID}]@[装備]:%RESULTS%@/B@", 32, 1)
        FOR STATUS_IDX, 0, WPN_MAX_STATUSNUM
            CURRENT_WEAPON_STATUS:STATUS_IDX = DT_CELL_GET("WEAPON_STOCK", CURRENT_WEAPON_DID, WPN_STATUS_NAME_ENG:STATUS_IDX, 1)
            IF STATUS_IDX != WPN_脅威選定
                LOCALS '= @"@C:{カラー_注釈}@%WPN_STATUS_NAME:STATUS_IDX%:{CURRENT_WEAPON_STATUS:STATUS_IDX}@/C@"
                VARIATION = WEAPON_STATUS:STATUS_IDX - CURRENT_WEAPON_STATUS:STATUS_IDX
                SELECTCASE STATUS_IDX
                    CASE WPN_敵視 ;低いほうがメリットのあるステータス
                        IF  VARIATION < 0
                            LOCALS += TAG_PRINT_SHAPE(@"@C:{カラー_緑}@(-{ABS(VARIATION)})@/C@", 6, 2)
                        ELSEIF  VARIATION > 0
                            LOCALS += TAG_PRINT_SHAPE(@"@C:{カラー_オレンジ}@(+{ABS(VARIATION)})@/C@", 6, 2)
                        ENDIF
                    CASEELSE
                        IF VARIATION > 0
                            LOCALS += TAG_PRINT_SHAPE(@"@C:{カラー_緑}@(+{ABS(VARIATION)})@/C@", 6, 2)
                        ELSEIF VARIATION < 0
                            LOCALS += TAG_PRINT_SHAPE(@"@C:{カラー_オレンジ}@(-{ABS(VARIATION)})@/C@", 6, 2)
                        ENDIF
                ENDSELECT
                ARRAYS_STR_CHARA_INFO:1 += TAG_PRINT_SHAPE(LOCALS, 18, 1)
            ELSE
                ARRAYS_STR_CHARA_INFO:1 += TAG_PRINT_SHAPE(@"@C:{カラー_注釈}@%WPN_STATUS_NAME:STATUS_IDX%:%WPN_脅威選定文字列:(CURRENT_WEAPON_STATUS:STATUS_IDX)%@/C@", 16, 1)
            ENDIF
        NEXT
    ELSE
        ARRAYS_STR_CHARA_INFO:1 += TAG_PRINT_SHAPE(@"@B:[EQUIP_CID:{CHARA_ID}]@[装備]:@C:{カラー_選択不可}@ ----@/C@@/B@", 32, 1)
    ENDIF
ELSE
    FOR SLOT_ID, 0, 2
        DT_SELECT "WEAPON_STOCK", @"EQUIP_CHARA_ID = {CHARA_ID} AND EQUIP_TYPE = 1 AND EQUIP_SLOT_ID = {衣装部位_ﾚﾘｯｸ1 + SLOT_ID}"
        IF RESULT
            CURRENT_WEAPON_DID = RESULT:1
            CALL GET_WEAPON_PRINT_NAME(CURRENT_WEAPON_DID)
            ARRAYS_STR_CHARA_INFO:(SLOT_ID + 1) += TAG_PRINT_SHAPE(@"@B:[EQUIP_CID:{CHARA_ID}][EQUIP_SLOT_ID:{衣装部位_ﾚﾘｯｸ1 + SLOT_ID}]@[ﾚﾘｯｸ{SLOT_ID + 1}]:%RESULTS%@/B@", 32, 1)
            FOR STATUS_IDX, 0, WPN_MAX_STATUSNUM
                SIF STATUS_IDX == WPN_脅威選定
                    CONTINUE
                CURRENT_WEAPON_STATUS:STATUS_IDX = DT_CELL_GET("WEAPON_STOCK", CURRENT_WEAPON_DID, WPN_STATUS_NAME_ENG:STATUS_IDX, 1)
                LOCALS '= @"@C:{カラー_注釈}@%WPN_STATUS_NAME:STATUS_IDX%:{CURRENT_WEAPON_STATUS:STATUS_IDX}@/C@"
                VARIATION = WEAPON_STATUS:STATUS_IDX - CURRENT_WEAPON_STATUS:STATUS_IDX
                SELECTCASE STATUS_IDX
                    CASE WPN_敵視 ;低いほうがメリットのあるステータス
                        IF  VARIATION < 0
                            LOCALS += TAG_PRINT_SHAPE(@"@C:{カラー_緑}@(-{ABS(VARIATION)})@/C@", 6, 2)
                        ELSEIF  VARIATION > 0
                            LOCALS += TAG_PRINT_SHAPE(@"@C:{カラー_オレンジ}@(+{ABS(VARIATION)})@/C@", 6, 2)
                        ENDIF
                    CASEELSE
                        IF VARIATION > 0
                            LOCALS += TAG_PRINT_SHAPE(@"@C:{カラー_緑}@(+{ABS(VARIATION)})@/C@", 6, 2)
                        ELSEIF VARIATION < 0
                            LOCALS += TAG_PRINT_SHAPE(@"@C:{カラー_オレンジ}@(-{ABS(VARIATION)})@/C@", 6, 2)
                        ENDIF
                ENDSELECT
                ARRAYS_STR_CHARA_INFO:(SLOT_ID + 1) += TAG_PRINT_SHAPE(LOCALS, 18, 1)
            NEXT
        ELSE
            ARRAYS_STR_CHARA_INFO:(SLOT_ID + 1) += TAG_PRINT_SHAPE(@"@B:[EQUIP_CID:{CHARA_ID}][EQUIP_SLOT_ID:{衣装部位_ﾚﾘｯｸ1 + SLOT_ID}]@[ﾚﾘｯｸ{SLOT_ID + 1}]:@C:{カラー_選択不可}@ ----@/C@@/B@", 32, 1)
        ENDIF
    NEXT
ENDIF

;-------------------------------------------------
; 武器の改造後ステータスを取得
;-------------------------------------------------
@GET_WEAPON_MODIFIED_STATUS(WEAPON_STATUS, MODIFIED_STATUS, EQUIP_TYPE = 0)
#DIM REF WEAPON_STATUS
#DIM REF MODIFIED_STATUS
#DIM EQUIP_TYPE
#DIM 攻撃力増分
#DIM 防御力増分
#DIM 魔力増分
#DIM 軽減値増分

;武器
IF !EQUIP_TYPE
    攻撃力増分 = 15
    魔力増分   = 5
    防御力増分 = 2
    軽減値増分 = 10
    FOR LOCAL, 0, WPN_MAX_STATUSNUM
        SELECTCASE LOCAL
            CASE WPN_攻撃力
                MODIFIED_STATUS:LOCAL = WEAPON_STATUS:LOCAL + MAX(1, FTIMES(WEAPON_STATUS:LOCAL, 攻撃力増分))
            CASE WPN_防御力
                MODIFIED_STATUS:LOCAL = WEAPON_STATUS:LOCAL + 防御力増分
            CASE WPN_軽減値
                MODIFIED_STATUS:LOCAL = WEAPON_STATUS:LOCAL + MAX(1, FTIMES(WEAPON_STATUS:LOCAL, 軽減値増分))
            CASE WPN_魔力
                IF WEAPON_STATUS:LOCAL > 0
                    MODIFIED_STATUS:LOCAL = WEAPON_STATUS:LOCAL + MAX(1, FTIMES(WEAPON_STATUS:LOCAL, 魔力増分))
                ENDIF
            CASEELSE
                MODIFIED_STATUS:LOCAL = WEAPON_STATUS:LOCAL
        ENDSELECT
    NEXT
    ;レリック
ELSE
    攻撃力増分 = 15
    魔力増分   = 5
    防御力増分 = 2
    軽減値増分 = 10
    FOR LOCAL, 0, WPN_MAX_STATUSNUM
        ;レリックはステータス補正がついてるパラメータしか強化しても伸びない
        IF WEAPON_STATUS:LOCAL > 0
            SELECTCASE LOCAL
                CASE WPN_攻撃力
                    MODIFIED_STATUS:LOCAL = WEAPON_STATUS:LOCAL + MAX(1, FTIMES(WEAPON_STATUS:LOCAL, 攻撃力増分))
                CASE WPN_防御力
                    MODIFIED_STATUS:LOCAL = WEAPON_STATUS:LOCAL + MAX(1, FTIMES(WEAPON_STATUS:LOCAL, 防御力増分))
                CASE WPN_軽減値
                    MODIFIED_STATUS:LOCAL = WEAPON_STATUS:LOCAL + MAX(1, FTIMES(WEAPON_STATUS:LOCAL, 軽減値増分))
                CASE WPN_魔力
                    MODIFIED_STATUS:LOCAL = WEAPON_STATUS:LOCAL + MAX(1, FTIMES(WEAPON_STATUS:LOCAL, 魔力増分))
                CASEELSE
                    MODIFIED_STATUS:LOCAL = WEAPON_STATUS:LOCAL
            ENDSELECT
        ELSE
            MODIFIED_STATUS:LOCAL = WEAPON_STATUS:LOCAL
        ENDIF
    NEXT
ENDIF

;-------------------------------------------------
; 武器の強化に要求するコスト
;-------------------------------------------------
@GET_WEAPON_MODIFY_COST(MATERIAL_NEEDS, WEAPON_RANK)
#DIM REF MATERIAL_NEEDS
#DIM WEAPON_RANK
SELECTCASE WEAPON_RANK
    CASE 0 TO 2
        MATERIAL_NEEDS:ITEM_銀インゴット = 3
        RETURN 1
    CASE 3 TO 4
        MATERIAL_NEEDS:ITEM_銀インゴット = 6
        RETURN 1
    CASE 5 TO 7
        MATERIAL_NEEDS:ITEM_金インゴット = 4
        RETURN 1
    CASE 8
        MATERIAL_NEEDS:ITEM_金インゴット = 8
        RETURN 1
    CASEELSE
        RETURN 0
ENDSELECT

;-------------------------------------------------
; 武器の材質による共通補正
;-------------------------------------------------
@WEAPON_STATUS_SCALE_BY_MATERIAL(MATERIAL, WEAPON_ID = 0)
#DIM MATERIAL
#DIM WEAPON_ID

SELECTCASE MATERIAL
    CASE WPN_材質_鋼
        WPN_STATUS:WPN_攻撃力 += 10
        WPN_STATUS:WPN_防御力 += 5
    CASE WPN_材質_銀
        WPN_STATUS:WPN_攻撃力 += 15
        WPN_STATUS:WPN_防御力 += 5
    CASE WPN_材質_ウーツ鋼
        WPN_STATUS:WPN_攻撃力 += 25
        WPN_STATUS:WPN_防御力 += 10
        WPN_STATUS:WPN_軽減値 += 50
        WPN_STATUS:WPN_敵視 += 10
    CASEELSE
ENDSELECT

;-------------------------------------------------
;;; スロットを消費して装備にスキルを追加する
;-------------------------------------------------
@EQUIP_ADD_SKILL(EQUIP_DID, SKILL_DEF_NAME, WPN_SKILL_GENRE, SKILL_LV)
; #region
#DIM  EQUIP_DID
#DIMS SKILL_DEF_NAME
#DIM  WPN_SKILL_GENRE
#DIM  SKILL_LV
#DIMS DYNAMIC SKILL_DIC
#DIMS DYNAMIC ENCHANT_DIC
#DIM  DYNAMIC SKILL_SLOT_NUM
#DIM  DYNAMIC SKILL_SLOT_USED
#DIMS DYNAMIC STR_GENRE

IF WPN_SKILL_GENRE == 武器スキル_アクティブ
    STR_GENRE '= "ACTIVE"
ELSE
    STR_GENRE '= "PASSIVE"
ENDIF

SKILL_SLOT_USED = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED", 1)
SKILL_SLOT_NUM = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT", 1)

CALL EQUIP_CAN_ADD_SKILL(EQUIP_DID, SKILL_DEF_NAME, WPN_SKILL_GENRE)
IF RESULT < 0
    THROW @EQUIP_ADD_SKILL:スキルの追加が不可能な状態でスキル追加が試みられました
    RETURN 0
ENDIF

SKILL_DIC = %DT_CELL_GETS("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_WEAPON_SKILL", 1)%
SKILL_DIC = %DIC_SET(SKILL_DIC, SKILL_DEF_NAME, TOSTR(SKILL_LV))%
ENCHANT_DIC = %DT_CELL_GETS("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED_SKILL_NAME", 1)%
ENCHANT_DIC = %DIC_SET(ENCHANT_DIC, SKILL_DEF_NAME, TOSTR(SKILL_LV))%
DT_CELL_SET "WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_WEAPON_SKILL", SKILL_DIC, 1
DT_CELL_SET "WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED", SKILL_SLOT_USED + 1, 1
DT_CELL_SET "WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED_SKILL_NAME", ENCHANT_DIC, 1

RETURN 1

;;;スキルの追加可否チェック
@EQUIP_CAN_ADD_SKILL(EQUIP_DID, SKILL_DEF_NAME, WPN_SKILL_GENRE)
#DIM  EQUIP_DID
#DIMS SKILL_DEF_NAME
#DIM  WPN_SKILL_GENRE
#DIMS DYNAMIC SKILL_DIC
#DIM  DYNAMIC SKILL_SLOT_NUM
#DIM  DYNAMIC SKILL_SLOT_USED
#DIMS DYNAMIC STR_GENRE

IF WPN_SKILL_GENRE == 武器スキル_アクティブ
    STR_GENRE '= "ACTIVE"
ELSE
    STR_GENRE '= "PASSIVE"
ENDIF

SKILL_SLOT_USED = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED", 1)
SKILL_SLOT_NUM = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT", 1)

;スキルスロットに空きがない
IF SKILL_SLOT_USED == SKILL_SLOT_NUM
    RETURN 0
ENDIF
; #endregion

;同種スキルが重複
SKILL_DIC = %DT_CELL_GETS("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_WEAPON_SKILL", 1)%
IF DIC_CONTAINSKEY(SKILL_DIC, SKILL_DEF_NAME)
    RETURN -1
ENDIF

RETURN 1

;;;エンチャントに必要なルーンの数を求める
@EQUIP_GET_COST_FOR_ENCHANT(EQUIP_DID, SKILL_DEF_NAME, WPN_SKILL_GENRE, SKILL_LV)
#DIM  EQUIP_DID
#DIMS SKILL_DEF_NAME
#DIM  WPN_SKILL_GENRE
#DIM  SKILL_LV
#DIMS DYNAMIC SKILL_DIC
#DIM  DYNAMIC SKILL_SLOT_NUM
#DIM  DYNAMIC SKILL_SLOT_USED
#DIMS DYNAMIC STR_GENRE
#DIM  DYNAMIC COST
#DIM  CONST   COST_PER_SLOT = 1 ;0.372にて付呪コストは一律1に変更

IF WPN_SKILL_GENRE == 武器スキル_アクティブ
    STR_GENRE '= "ACTIVE"
ELSE
    STR_GENRE '= "PASSIVE"
ENDIF

SKILL_SLOT_USED = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED", 1)
SKILL_SLOT_NUM = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT", 1)

; IF !SKILL_SLOT_USED
;     COST = 1
; ELSE
;     COST = SKILL_SLOT_USED * COST_PER_SLOT
; ENDIF
COST = COST_PER_SLOT

RETURN COST

;-------------------------------------------------
;;; 付呪されたスキルを削除する
;-------------------------------------------------
@EQUIP_REMOVE_SKILL(EQUIP_DID, SKILL_DEF_NAME, WPN_SKILL_GENRE)
; #region
#DIM  EQUIP_DID
#DIMS SKILL_DEF_NAME
#DIM  WPN_SKILL_GENRE
#DIMS DYNAMIC SKILL_DIC
#DIMS DYNAMIC ENCHANT_DIC
#DIM  DYNAMIC SKILL_SLOT_NUM
#DIM  DYNAMIC SKILL_SLOT_USED
#DIMS DYNAMIC STR_GENRE

IF WPN_SKILL_GENRE == 武器スキル_アクティブ
    STR_GENRE '= "ACTIVE"
ELSE
    STR_GENRE '= "PASSIVE"
ENDIF

SKILL_SLOT_USED = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED", 1)
SKILL_SLOT_NUM = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT", 1)
SKILL_DIC = %DT_CELL_GETS("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_WEAPON_SKILL", 1)%
ENCHANT_DIC = %DT_CELL_GETS("WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED_SKILL_NAME", 1)%
IF !DIC_CONTAINSKEY(ENCHANT_DIC, SKILL_DEF_NAME)
    RETURN 0
ENDIF

SKILL_DIC = %DIC_REMOVE(SKILL_DIC, SKILL_DEF_NAME)%
ENCHANT_DIC = %DIC_REMOVE(ENCHANT_DIC, SKILL_DEF_NAME)%
DT_CELL_SET "WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_WEAPON_SKILL", SKILL_DIC, 1
DT_CELL_SET "WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED", SKILL_SLOT_USED - 1, 1
DT_CELL_SET "WEAPON_STOCK", EQUIP_DID, @"%STR_GENRE%_SKILL_SLOT_USED_SKILL_NAME", ENCHANT_DIC, 1

RETURN 1

;-------------------------------------------------
;;; お気に入りフラグの切り替え
;-------------------------------------------------
@EQUIP_SWITCH_FAVORITE_FLAG(EQUIP_DID)
#DIM EQUIP_DID
VARI FAVORITE_FLAG

FAVORITE_FLAG = DT_CELL_GET("WEAPON_STOCK", EQUIP_DID, "FAVORITE_FLAG", 1)
INVERTBIT FAVORITE_FLAG, 0
DT_CELL_SET "WEAPON_STOCK", EQUIP_DID, "FAVORITE_FLAG", FAVORITE_FLAG, 1

RETURN 1

;-------------------------------------------------
;;; 装備の所持上限チェック
;-------------------------------------------------
@EQUIP_OWN_LIMIT_CHECK(EQUIP_TYPE)
#DIM EQUIP_TYPE
#DIM EQUIP_NUM

EQUIP_NUM = DT_SELECT("WEAPON_STOCK",@"EQUIP_TYPE = {EQUIP_TYPE}")
IF EQUIP_NUM > EQUIP_OWN_LIMIT
    CALL COLOR_PRINTW(@"%EQUIP_TYPE == 0 ? "武器" # "レリック"%が所持上限を超えています(現在{EQUIP_NUM}個(上限:{EQUIP_OWN_LIMIT}個))。不要な装備を破棄してください", カラー_注意)
    CALL HO_ITEM_MENU(, @"[BULK_DISPOSE_MODE:{EQUIP_TYPE}]")
    RESTART
ENDIF

RETURN


code:
部位,ID,名前
HEAD,0,なし
HEAD,1,おしゃぶり
HEAD,2,カチューシャ
HEAD,3,かつら
HEAD,4,かんざし
HEAD,5,コック帽
HEAD,6,シニョン
HEAD,7,シルクハット
HEAD,8,スイムキャップ
HEAD,9,つけ耳
HEAD,10,ティアラ
HEAD,11,ナイトキャップ
HEAD,12,はちまき
HEAD,13,ハンチング帽
HEAD,14,ベール
HEAD,15,ヘッドホン
HEAD,16,ヘルメット
HEAD,17,ホワイトブリム
HEAD,18,リボン
HEAD,19,烏帽子
HEAD,20,王冠
HEAD,21,花冠
HEAD,22,兜
HEAD,23,頭巾
HEAD,24,髪飾り
HEAD,25,編み笠
HEAD,26,帽子
HEAD,27,ヘッドドレス
HEAD,28,バンダナ
NECK,0,なし
NECK,1,ショール
NECK,2,チョーカー
NECK,3,ネクタイ
NECK,4,マフラー
NECK,5,よだれかけ
NECK,6,リボン
NECK,7,管理タグ
NECK,8,犬用首輪
NECK,9,首輪
NECK,10,数珠
NECK,11,奴隷の首輪
NECK,12,猫用首輪
NECK,13,スカーフ
NECK,14,ペンダント
TOP,0,なし
TOP,1,Ｔシャツ
TOP,2,アロハシャツ
TOP,3,キャミソール
TOP,4,シースルーシャツ
TOP,5,ジャージ
TOP,6,スモック
TOP,7,セーター
TOP,8,セーラー服
TOP,9,タンクトップ
TOP,10,ノースリーブ
TOP,11,パーカー
TOP,12,ブラウス
TOP,13,ワイシャツ
TOP,14,軍服
TOP,15,黒インナー
TOP,16,体操服
TOP,17,服
TOP,18,浴衣
TOP,19,巫女服
BOTTOM,0,なし
BOTTOM,1,サスペンダースカート
BOTTOM,2,ジャンパースカート
BOTTOM,3,ショートパンツ
BOTTOM,4,スカート
BOTTOM,5,ズボン
BOTTOM,6,スラックス
BOTTOM,7,セーラースカート
BOTTOM,8,タイトスカート
BOTTOM,9,タイトミニ
BOTTOM,10,デニム
BOTTOM,11,パレオ
BOTTOM,12,プリーツスカート
BOTTOM,13,ブルマ
BOTTOM,14,フレアスカート
BOTTOM,15,ホットパンツ
BOTTOM,16,マイクロミニ
BOTTOM,17,ミニスカート
BOTTOM,18,もんぺ
BOTTOM,19,ローライズパンツ
BOTTOM,20,ロングスカート
BOTTOM,21,腰布
BOTTOM,22,キュロット
BOTTOM,23,巫女袴
OUTER,0,なし
OUTER,1,インバネス
OUTER,2,エプロン
OUTER,3,カーディガン
OUTER,4,ケープ
OUTER,5,コート
OUTER,6,ジャケット
OUTER,7,スーツ
OUTER,8,スーツジャケット
OUTER,9,セーター
OUTER,10,ダウンジャケット
OUTER,11,パーカー
OUTER,12,ファーコート
OUTER,13,ブレザー
OUTER,14,ベスト
OUTER,15,マント
OUTER,16,レインコート
OUTER,17,レザージャケット
OUTER,18,鎧
OUTER,19,学ラン
OUTER,20,割烹着
OUTER,21,胸当て
OUTER,22,袈裟
OUTER,23,白衣
BODYSUIT,0,なし
BODYSUIT,1,アオザイ
BODYSUIT,2,ウェディングドレス
BODYSUIT,3,エプロンドレス
BODYSUIT,4,オーバーオール
BODYSUIT,5,きぐるみ
BODYSUIT,6,ゴシックドレス
BODYSUIT,7,サリー
BODYSUIT,8,ジャージ
BODYSUIT,9,チャイナドレス
BODYSUIT,10,ディアンドル
BODYSUIT,11,ドレス
BODYSUIT,12,ナイトドレス
BODYSUIT,13,バニースーツ
BODYSUIT,14,ビキニアーマー
BODYSUIT,15,ぼろぼろの布切れ
BODYSUIT,16,メイド服
BODYSUIT,17,ライダースーツ
BODYSUIT,18,ローブ
BODYSUIT,19,ワンピース
BODYSUIT,20,燕尾服
BODYSUIT,21,鎧
BODYSUIT,22,作務衣
BODYSUIT,23,囚人服
BODYSUIT,24,修道服
BODYSUIT,25,導師服
BODYSUIT,26,道着
BODYSUIT,27,忍装束
BODYSUIT,28,白無垢
BODYSUIT,29,法衣
BODYSUIT,30,和服
BODYSUIT,31,チュチュ
INNER_TOP,0,なし
INNER_TOP,1,オープンブラ
INNER_TOP,2,コルセット
INNER_TOP,3,さらし
INNER_TOP,4,シースルーブラ
INNER_TOP,5,スポーツブラ
INNER_TOP,6,チューブトップ
INNER_TOP,7,チューブトップ
INNER_TOP,8,トップレスブラ
INNER_TOP,9,ニプレス
INNER_TOP,10,ハーフカップブラ
INNER_TOP,11,ビキニトップ
INNER_TOP,12,ビスチェ
INNER_TOP,13,ブラ
INNER_TOP,14,ブラ黄
INNER_TOP,15,ブラ黒
INNER_TOP,16,ブラ紫
INNER_TOP,17,ブラ縞
INNER_TOP,18,ブラ水
INNER_TOP,19,ブラ青
INNER_TOP,20,ブラ赤
INNER_TOP,21,ブラ緑
INNER_TOP,22,ホルターネックブラ
INNER_TOP,23,マイクロビキニトップ
INNER_TOP,24,レースブラ
INNER_TOP,25,絆創膏
INNER_TOP,26,なし
INNER_BOTTOM,0,なし
INNER_BOTTOM,1,Ｔバック
INNER_BOTTOM,2,オープンクロッチ
INNER_BOTTOM,3,おむつ
INNER_BOTTOM,4,シースルーパンティ
INNER_BOTTOM,5,スキャンティ
INNER_BOTTOM,6,スパッツ
INNER_BOTTOM,7,タンガ
INNER_BOTTOM,8,トランクス
INNER_BOTTOM,9,ドロワーズ
INNER_BOTTOM,10,ハイレグ
INNER_BOTTOM,11,パンティ
INNER_BOTTOM,12,パンティ黄
INNER_BOTTOM,13,パンティ黒
INNER_BOTTOM,14,パンティ紫
INNER_BOTTOM,15,パンティ縞
INNER_BOTTOM,16,パンティ水
INNER_BOTTOM,17,パンティ青
INNER_BOTTOM,18,パンティ赤
INNER_BOTTOM,19,パンティ緑
INNER_BOTTOM,20,ビキニボトム
INNER_BOTTOM,21,ブリーフ
INNER_BOTTOM,22,フレアパンティ
INNER_BOTTOM,23,ふんどし
INNER_BOTTOM,24,ボーイレッグ
INNER_BOTTOM,25,ボクサー
INNER_BOTTOM,26,マイクロビキニボトム
INNER_BOTTOM,27,レースパンティ
INNER_BOTTOM,28,ローライズ
INNER_BOTTOM,29,ローレグ
INNER_BOTTOM,30,前張り
INNER_BOTTOM,31,紐パン
INNER_BOTTOM,32,絆創膏
INNER_BODYSUIT,0,なし
INNER_BODYSUIT,1,クイーンボンデージ
INNER_BODYSUIT,2,スクール水着
INNER_BODYSUIT,3,スリップ
INNER_BODYSUIT,4,スリングショット
INNER_BODYSUIT,5,スレイブボンデージ
INNER_BODYSUIT,6,タンキニ
INNER_BODYSUIT,7,ネグリジェ
INNER_BODYSUIT,8,ベビードール
INNER_BODYSUIT,9,ボディスーツ
INNER_BODYSUIT,10,ラッピングリボン
INNER_BODYSUIT,11,ラバースーツ
INNER_BODYSUIT,12,レオタード
INNER_BODYSUIT,13,旧スクール水着
INNER_BODYSUIT,14,競泳水着
INNER_BODYSUIT,15,穴あきスク水
INNER_BODYSUIT,16,穴あきラバースーツ
INNER_BODYSUIT,17,穴あき競泳水着
INNER_BODYSUIT,18,穴あき全身タイツ
INNER_BODYSUIT,19,全身タイツ
INNER_BODYSUIT,20,白スクール水着
INNER_BODYSUIT,21,襦袢
GLOVE,0,なし
GLOVE,1,カフス
GLOVE,2,ガントレット
GLOVE,3,グローブ
GLOVE,4,スレイブグローブ
GLOVE,5,ブレスレット
GLOVE,6,レザーグローブ
GLOVE,7,ロンググローブ
GLOVE,8,手甲
GLOVE,9,手錠
GLOVE,10,手袋
GLOVE,11,手枷
GLOVE,12,制御棒
GLOVE,13,袖
GLOVE,14,包帯
GLOVE,15,腕章
GLOVE,16,腕時計
SOCKS,0,なし
SOCKS,1,アンクレット
SOCKS,2,クルーソックス
SOCKS,3,サイハイソックス
SOCKS,4,ショートソックス
SOCKS,5,ストッキング
SOCKS,6,タイツ
SOCKS,7,パンスト
SOCKS,8,ブーツソックス
SOCKS,9,リボン
SOCKS,10,ルーズソックス
SOCKS,11,靴下
SOCKS,12,穴あきストッキング
SOCKS,13,足袋
SOCKS,14,足枷
SOCKS,15,ニーソックス
SOCKS,16,ニーハイソックス
SOCKS,17,網タイツ
SHOES,0,なし
SHOES,1,グリーブ
SHOES,2,サイハイブーツ
SHOES,3,サンダル
SHOES,4,シューズ
SHOES,5,スリッパ
SHOES,6,スレイブブーツ
SHOES,7,ハイヒール
SHOES,8,バレエシューズ
SHOES,9,パンプス
SHOES,10,ビーチサンダル
SHOES,11,ピンヒール
SHOES,12,ブーツ
SHOES,13,ミュール
SHOES,14,レザーブーツ
SHOES,15,ローファー
SHOES,16,ローラースケート
SHOES,17,ロングブーツ
SHOES,18,下駄
SHOES,19,靴
SHOES,20,草履
SHOES,21,地下足袋
SHOES,22,長靴
ACCESSORY,0,なし
ACCESSORY,1,お札
ACCESSORY,2,ガーター
ACCESSORY,3,ガラガラ
ACCESSORY,4,ゴーグル
ACCESSORY,5,サングラス
ACCESSORY,6,つけひげ
ACCESSORY,7,ドッグタグ
ACCESSORY,8,ナイフ
ACCESSORY,9,バタフライマスク
ACCESSORY,10,ひょっとこ面
ACCESSORY,11,マスク
ACCESSORY,12,リュックサック
ACCESSORY,13,仮面
ACCESSORY,14,懐中時計
ACCESSORY,15,鞄
ACCESSORY,16,眼鏡
ACCESSORY,17,肩掛けカバン
ACCESSORY,18,狐面
ACCESSORY,19,傘
ACCESSORY,20,人形
ACCESSORY,21,前垂れ
ACCESSORY,22,大幣
ACCESSORY,23,天狗面
ACCESSORY,24,刀
ACCESSORY,25,魔導書
ACCESSORY,26,名札
ACCESSORY,27,目隠し
ACCESSORY,28,箒
ACCESSORY,29,枕


code:
番号,名前,HEAD,頭,NECK,首,TOP,上服,BOTTOM,下服,BODYSUIT,上下服,OUTER,上着,INNER_TOP,下着上,INNER_BOTTOM,下着下,INNER_BODYSUIT,上下下着,GLOVE,腕,SOCKS,靴下,SHOES,靴,ACCESSORY,アクセサリ
1,霊夢,18,リボン,0,なし,19,巫女服,4,スカート,0,なし,0,なし,3,さらし,9,ドロワーズ,0,なし,13,袖,4,ショートソックス,9,パンプス,22,大幣
2,魔理沙,26,帽子,0,なし,0,なし,0,なし,3,エプロンドレス,0,なし,5,スポーツブラ,9,ドロワーズ,0,なし,0,なし,4,ショートソックス,9,パンプス,28,箒
3,ルーミア,18,リボン,0,なし,0,なし,0,なし,19,ワンピース,0,なし,0,なし,9,ドロワーズ,0,なし,0,なし,11,靴下,9,パンプス,0,なし
4,大妖精,18,リボン,0,なし,0,なし,0,なし,19,ワンピース,0,なし,18,ブラ水,15,パンティ縞,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
5,チルノ,18,リボン,0,なし,0,なし,0,なし,19,ワンピース,0,なし,0,なし,9,ドロワーズ,0,なし,0,なし,11,靴下,9,パンプス,0,なし
6,美鈴,26,帽子,0,なし,0,なし,0,なし,9,チャイナドレス,0,なし,20,ブラ赤,28,ローライズ,0,なし,0,なし,0,なし,9,パンプス,0,なし
7,小悪魔,0,なし,0,なし,12,ブラウス,20,ロングスカート,0,なし,14,ベスト,1,オープンブラ,2,オープンクロッチ,0,なし,0,なし,15,二―ソックス,12,ブーツ,0,なし
8,パチュリー,26,帽子,0,なし,0,なし,0,なし,18,ローブ,0,なし,16,ブラ紫,14,パンティ紫,0,なし,0,なし,11,靴下,5,スリッパ,25,魔導書
9,咲夜,17,ホワイトブリム,0,なし,0,なし,0,なし,16,メイド服,0,なし,15,ブラ黒,13,パンティ黒,0,なし,10,手袋,11,靴下,7,ハイヒール,0,なし
10,レミリア,26,帽子,0,なし,0,なし,0,なし,11,ドレス,0,なし,0,なし,0,なし,8,ベビードール,0,なし,11,靴下,7,ハイヒール,0,なし
11,フランドール,26,帽子,0,なし,12,ブラウス,20,ロングスカート,0,なし,14,ベスト,0,なし,0,なし,8,ベビードール,0,なし,11,靴下,9,パンプス,0,なし
12,レティ,26,帽子,0,なし,12,ブラウス,20,ロングスカート,0,なし,14,ベスト,24,レースブラ,27,レースパンティ,0,なし,0,なし,11,靴下,9,パンプス,0,なし
13,橙,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,0,なし,5,スポーツブラ,15,パンティ縞,0,なし,0,なし,11,靴下,15,ローファー,0,なし
14,アリス,2,カチューシャ,0,なし,0,なし,0,なし,19,ワンピース,0,なし,15,ブラ黒,13,パンティ黒,0,なし,0,なし,7,パンスト,17,ロングブーツ,20,人形
15,リリーホワイト,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,0,なし,18,ブラ水,15,パンティ縞,0,なし,0,なし,16,二―ハイソックス,12,ブーツ,0,なし
16,リリカ,26,帽子,0,なし,12,ブラウス,17,ミニスカート,0,なし,14,ベスト,5,スポーツブラ,9,ドロワーズ,0,なし,0,なし,11,靴下,15,ローファー,0,なし
17,メルラン,26,帽子,0,なし,12,ブラウス,4,スカート,0,なし,14,ベスト,4,シースルーブラ,4,シースルーパンティ,0,なし,0,なし,11,靴下,9,パンプス,0,なし
18,ルナサ,26,帽子,0,なし,12,ブラウス,4,スカート,0,なし,14,ベスト,15,ブラ黒,13,パンティ黒,0,なし,0,なし,11,靴下,9,パンプス,0,なし
19,妖夢,18,リボン,0,なし,12,ブラウス,4,スカート,0,なし,14,ベスト,3,さらし,15,パンティ縞,0,なし,0,なし,11,靴下,15,ローファー,24,刀
20,幽々子,26,帽子,0,なし,0,なし,0,なし,30,和服,0,なし,0,なし,0,なし,21,襦袢,0,なし,13,足袋,20,草履,0,なし
21,藍,26,帽子,0,なし,0,なし,0,なし,25,導師服,0,なし,1,オープンブラ,2,オープンクロッチ,0,なし,0,なし,11,靴下,9,パンプス,21,前垂れ
22,紫,26,帽子,0,なし,0,なし,0,なし,25,導師服,0,なし,4,シースルーブラ,4,シースルーパンティ,0,なし,0,なし,5,ストッキング,12,ブーツ,21,前垂れ
23,萃香,18,リボン,0,なし,10,ノースリーブ,20,ロングスカート,0,なし,0,なし,3,さらし,9,ドロワーズ,0,なし,11,手枷,14,足枷,9,パンプス,0,なし
24,リグル,0,なし,0,なし,12,ブラウス,22,キュロット,0,なし,0,なし,5,スポーツブラ,9,ドロワーズ,0,なし,0,なし,4,ショートソックス,15,ローファー,0,なし
25,ミスティア,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,11,靴下,9,パンプス,0,なし
26,慧音,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,0,なし,24,レースブラ,27,レースパンティ,0,なし,0,なし,7,パンスト,12,ブーツ,0,なし
27,てゐ,0,なし,0,なし,0,なし,0,なし,19,ワンピース,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし
28,鈴仙,9,つけ耳,0,なし,12,ブラウス,7,セーラースカート,0,なし,13,ブレザー,18,ブラ水,16,パンティ水,0,なし,0,なし,16,二―ハイソックス,15,ローファー,0,なし
29,永琳,26,帽子,0,なし,17,服,20,ロングスカート,0,なし,0,なし,15,ブラ黒,13,パンティ黒,0,なし,0,なし,0,なし,7,ハイヒール,0,なし
30,輝夜,0,なし,0,なし,0,なし,0,なし,30,和服,0,なし,0,なし,0,なし,21,襦袢,0,なし,13,足袋,20,草履,0,なし
31,妹紅,18,リボン,0,なし,12,ブラウス,18,もんぺ,0,なし,0,なし,3,さらし,6,スパッツ,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
32,文,19,烏帽子,0,なし,12,ブラウス,17,ミニスカート,0,なし,0,なし,24,レースブラ,31,紐パン,0,なし,15,腕章,15,二―ソックス,18,下駄,0,なし
33,メディスン,18,リボン,0,なし,0,なし,0,なし,11,ドレス,0,なし,0,なし,9,ドロワーズ,0,なし,0,なし,0,なし,9,パンプス,20,人形
34,幽香,0,なし,0,なし,13,ワイシャツ,20,ロングスカート,0,なし,14,ベスト,15,ブラ黒,13,パンティ黒,0,なし,0,なし,8,ブーツソックス,12,ブーツ,0,なし
35,小町,0,なし,0,なし,17,服,20,ロングスカート,0,なし,0,なし,3,さらし,1,Ｔバック,0,なし,0,なし,13,足袋,20,草履,0,なし
36,四季映姫,26,帽子,0,なし,12,ブラウス,17,ミニスカート,0,なし,14,ベスト,5,スポーツブラ,11,パンティ,0,なし,0,なし,15,二―ソックス,15,ローファー,0,なし
37,静葉,24,髪飾り,0,なし,17,服,20,ロングスカート,0,なし,0,なし,20,ブラ赤,18,パンティ赤,0,なし,0,なし,4,ショートソックス,9,パンプス,0,なし
38,穣子,26,帽子,0,なし,17,服,20,ロングスカート,0,なし,0,なし,20,ブラ赤,18,パンティ赤,0,なし,0,なし,4,ショートソックス,9,パンプス,0,なし
39,雛,18,リボン,0,なし,0,なし,0,なし,19,ワンピース,0,なし,24,レースブラ,27,レースパンティ,0,なし,0,なし,7,パンスト,17,ロングブーツ,0,なし
40,にとり,26,帽子,0,なし,0,なし,0,なし,0,なし,16,レインコート,0,なし,0,なし,2,スクール水着,0,なし,0,なし,17,ロングブーツ,12,リュックサック
41,椛,19,烏帽子,0,なし,10,ノースリーブ,4,スカート,0,なし,0,なし,3,さらし,6,スパッツ,0,なし,13,袖,13,足袋,18,下駄,24,刀
42,早苗,24,髪飾り,0,なし,19,巫女服,20,ロングスカート,0,なし,0,なし,18,ブラ水,15,パンティ縞,0,なし,13,袖,13,足袋,20,草履,22,大幣
43,神奈子,24,髪飾り,0,なし,17,服,20,ロングスカート,0,なし,0,なし,3,さらし,23,ふんどし,0,なし,0,なし,13,足袋,20,草履,0,なし
44,諏訪子,26,帽子,0,なし,12,ブラウス,17,ミニスカート,0,なし,14,ベスト,23,マイクロビキニトップ,26,マイクロビキニボトム,0,なし,0,なし,15,二―ソックス,15,ローファー,0,なし
45,サニーミルク,17,ホワイトブリム,0,なし,0,なし,0,なし,11,ドレス,0,なし,0,なし,9,ドロワーズ,0,なし,0,なし,15,二―ソックス,15,ローファー,0,なし
46,ルナチャイルド,26,帽子,0,なし,0,なし,0,なし,11,ドレス,0,なし,0,なし,9,ドロワーズ,0,なし,0,なし,16,二―ハイソックス,15,ローファー,0,なし
47,スターサファイア,18,リボン,0,なし,0,なし,0,なし,11,ドレス,0,なし,5,スポーツブラ,16,パンティ水,0,なし,0,なし,15,二―ソックス,12,ブーツ,0,なし
48,阿求,24,髪飾り,0,なし,0,なし,0,なし,30,和服,0,なし,3,さらし,11,パンティ,0,なし,0,なし,13,足袋,20,草履,0,なし
49,蓮子,26,帽子,0,なし,12,ブラウス,20,ロングスカート,0,なし,14,ベスト,15,ブラ黒,13,パンティ黒,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
50,マエリベリー,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,0,なし,24,レースブラ,27,レースパンティ,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
51,衣玖,26,帽子,0,なし,12,ブラウス,20,ロングスカート,0,なし,0,なし,10,ハーフカップブラ,13,パンティ黒,0,なし,0,なし,7,パンスト,7,ハイヒール,0,なし
52,天子,26,帽子,0,なし,12,ブラウス,20,ロングスカート,0,なし,0,なし,5,スポーツブラ,15,パンティ縞,0,なし,0,なし,15,二―ソックス,17,ロングブーツ,0,なし
53,豊姫,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,0,なし,4,シースルーブラ,2,オープンクロッチ,0,なし,0,なし,15,二―ソックス,17,ロングブーツ,0,なし
54,依姫,18,リボン,0,なし,0,なし,0,なし,19,ワンピース,0,なし,15,ブラ黒,13,パンティ黒,0,なし,0,なし,15,二―ソックス,17,ロングブーツ,0,なし
55,レイセン,9,つけ耳,0,なし,12,ブラウス,7,セーラースカート,0,なし,13,ブレザー,18,ブラ水,16,パンティ水,0,なし,0,なし,16,二―ハイソックス,15,ローファー,0,なし
56,リリーブラック,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,0,なし,5,スポーツブラ,15,パンティ縞,0,なし,0,なし,16,二―ハイソックス,12,ブーツ,0,なし
57,キスメ,0,なし,0,なし,0,なし,0,なし,30,和服,0,なし,0,なし,9,ドロワーズ,0,なし,0,なし,13,足袋,0,なし,0,なし
58,ヤマメ,18,リボン,0,なし,0,なし,0,なし,19,ワンピース,0,なし,0,なし,0,なし,0,なし,0,なし,11,靴下,9,パンプス,0,なし
59,パルスィ,0,なし,0,なし,15,黒インナー,4,スカート,0,なし,14,ベスト,0,なし,0,なし,7,ネグリジェ,0,なし,13,足袋,20,草履,0,なし
60,勇儀,0,なし,0,なし,16,体操服,20,ロングスカート,0,なし,0,なし,3,さらし,11,パンティ,0,なし,0,なし,0,なし,18,下駄,0,なし
61,さとり,2,カチューシャ,0,なし,6,スモック,4,スカート,0,なし,0,なし,5,スポーツブラ,11,パンティ,0,なし,0,なし,15,二―ソックス,9,パンプス,0,なし
62,燐,18,リボン,0,なし,0,なし,0,なし,11,ドレス,0,なし,15,ブラ黒,13,パンティ黒,0,なし,0,なし,18,リボン,9,パンプス,0,なし
63,空,18,リボン,0,なし,12,ブラウス,17,ミニスカート,0,なし,15,マント,0,なし,0,なし,0,なし,12,制御棒,15,二―ソックス,1,グリーブ,0,なし
64,こいし,26,帽子,0,なし,17,服,17,ミニスカート,0,なし,0,なし,5,スポーツブラ,9,ドロワーズ,0,なし,0,なし,15,二―ソックス,9,パンプス,0,なし
65,半霊,18,リボン,0,なし,12,ブラウス,4,スカート,0,なし,14,ベスト,3,さらし,15,パンティ縞,0,なし,0,なし,11,靴下,15,ローファー,24,刀
66,上海人形,0,なし,0,なし,0,なし,0,なし,11,ドレス,0,なし,0,なし,9,ドロワーズ,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
67,蓬莱人形,0,なし,0,なし,0,なし,0,なし,11,ドレス,0,なし,0,なし,9,ドロワーズ,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
68,朱鷺子,0,なし,0,なし,12,ブラウス,20,ロングスカート,0,なし,0,なし,5,スポーツブラ,9,ドロワーズ,0,なし,0,なし,11,靴下,9,パンプス,0,なし
69,霖之助,0,なし,0,なし,0,なし,0,なし,22,作務衣,0,なし,0,なし,8,トランクス,0,なし,0,なし,11,靴下,19,靴,16,眼鏡
70,妖忌,0,なし,0,なし,0,なし,0,なし,22,作務衣,0,なし,0,なし,23,ふんどし,0,なし,0,なし,13,足袋,20,草履,24,刀
71,ナズーリン,0,なし,0,なし,12,ブラウス,20,ロングスカート,0,なし,14,ベスト,3,さらし,11,パンティ,0,なし,0,なし,11,靴下,9,パンプス,0,なし
72,小傘,0,なし,0,なし,12,ブラウス,4,スカート,0,なし,14,ベスト,3,さらし,31,紐パン,0,なし,0,なし,0,なし,18,下駄,19,傘
73,一輪,23,頭巾,0,なし,0,なし,0,なし,29,法衣,0,なし,19,ブラ青,17,パンティ青,0,なし,0,なし,13,足袋,20,草履,0,なし
74,雲山,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし
75,水蜜,26,帽子,0,なし,8,セーラー服,22,キュロット,0,なし,0,なし,5,スポーツブラ,6,スパッツ,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
76,星,26,帽子,0,なし,0,なし,0,なし,29,法衣,0,なし,3,さらし,13,パンティ黒,0,なし,0,なし,11,靴下,9,パンプス,0,なし
77,白蓮,25,編み笠,10,数珠,0,なし,0,なし,29,法衣,15,マント,15,ブラ黒,13,パンティ黒,0,なし,0,なし,3,サイハイソックス,17,ロングブーツ,0,なし
78,ぬえ,0,なし,0,なし,0,なし,0,なし,19,ワンピース,0,なし,15,ブラ黒,31,紐パン,0,なし,0,なし,15,二―ソックス,15,ローファー,0,なし
79,はたて,19,烏帽子,0,なし,12,ブラウス,17,ミニスカート,0,なし,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,15,二―ソックス,18,下駄,0,なし
80,華扇,6,シニョン,0,なし,0,なし,0,なし,9,チャイナドレス,0,なし,20,ブラ赤,18,パンティ赤,0,なし,0,なし,0,なし,7,ハイヒール,0,なし
81,響子,0,なし,0,なし,0,なし,0,なし,19,ワンピース,0,なし,0,なし,9,ドロワーズ,0,なし,0,なし,11,靴下,15,ローファー,0,なし
82,芳香,26,帽子,0,なし,12,ブラウス,4,スカート,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,11,靴下,19,靴,1,お札
83,青娥,4,かんざし,0,なし,0,なし,0,なし,19,ワンピース,0,なし,19,ブラ青,17,パンティ青,0,なし,0,なし,0,なし,7,ハイヒール,0,なし
84,屠自古,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,0,なし,3,さらし,18,パンティ赤,0,なし,0,なし,0,なし,0,なし,0,なし
85,布都,19,烏帽子,0,なし,0,なし,0,なし,25,導師服,0,なし,3,さらし,11,パンティ,0,なし,0,なし,0,なし,21,地下足袋,0,なし
86,神子,15,ヘッドホン,0,なし,10,ノースリーブ,4,スカート,0,なし,0,なし,3,さらし,16,パンティ水,0,なし,5,ブレスレット,1,アンクレット,13,ミュール,0,なし
87,マミゾウ,26,帽子,0,なし,12,ブラウス,17,ミニスカート,0,なし,0,なし,3,さらし,27,レースパンティ,0,なし,0,なし,13,足袋,18,下駄,0,なし
88,大江戸人形,0,なし,0,なし,0,なし,0,なし,11,ドレス,0,なし,0,なし,9,ドロワーズ,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
89,ゴリアテ人形,0,なし,0,なし,0,なし,0,なし,11,ドレス,0,なし,0,なし,9,ドロワーズ,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
90,小鈴,24,髪飾り,0,なし,0,なし,0,なし,30,和服,2,エプロン,5,スポーツブラ,9,ドロワーズ,0,なし,0,なし,15,二―ソックス,17,ロングブーツ,0,なし
91,こころ,0,なし,0,なし,12,ブラウス,20,ロングスカート,0,なし,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,11,靴下,9,パンプス,13,仮面
92,わかさぎ姫,0,なし,0,なし,0,なし,0,なし,30,和服,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし
93,赤蛮奇,18,リボン,0,なし,12,ブラウス,17,ミニスカート,0,なし,15,マント,20,ブラ赤,18,パンティ赤,0,なし,0,なし,11,靴下,9,パンプス,0,なし
94,影狼,0,なし,0,なし,0,なし,0,なし,11,ドレス,0,なし,24,レースブラ,27,レースパンティ,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
95,弁々,24,髪飾り,0,なし,0,なし,0,なし,19,ワンピース,0,なし,24,レースブラ,27,レースパンティ,0,なし,0,なし,0,なし,0,なし,0,なし
96,八橋,2,カチューシャ,0,なし,12,ブラウス,17,ミニスカート,0,なし,0,なし,5,スポーツブラ,15,パンティ縞,0,なし,0,なし,0,なし,0,なし,0,なし
97,正邪,0,なし,0,なし,0,なし,0,なし,19,ワンピース,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,0,なし,20,草履,0,なし
98,針妙丸,26,帽子,0,なし,0,なし,0,なし,30,和服,0,なし,3,さらし,11,パンティ,0,なし,0,なし,13,足袋,18,下駄,0,なし
99,雷鼓,0,なし,3,ネクタイ,13,ワイシャツ,17,ミニスカート,0,なし,14,ベスト,15,ブラ黒,13,パンティ黒,0,なし,0,なし,5,ストッキング,12,ブーツ,0,なし
100,菫子,26,帽子,0,なし,12,ブラウス,7,セーラースカート,0,なし,14,ベスト,5,スポーツブラ,15,パンティ縞,0,なし,0,なし,15,二―ソックス,15,ローファー,0,なし
101,ちゆり,26,帽子,0,なし,8,セーラー服,22,キュロット,0,なし,0,なし,5,スポーツブラ,11,パンティ,0,なし,0,なし,11,靴下,15,ローファー,0,なし
102,夢美,0,なし,18,リボン,12,ブラウス,20,ロングスカート,0,なし,15,マント,20,ブラ赤,18,パンティ赤,0,なし,0,なし,15,二―ソックス,12,ブーツ,0,なし
103,魅魔,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,0,なし,24,レースブラ,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし
104,サラ,0,なし,0,なし,0,なし,0,なし,19,ワンピース,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
105,ルイズ,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,0,なし,20,ブラ赤,18,パンティ赤,0,なし,0,なし,11,靴下,9,パンプス,0,なし
106,ユキ,26,帽子,0,なし,0,なし,0,なし,3,エプロンドレス,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,11,靴下,9,パンプス,0,なし
107,マイ,18,リボン,0,なし,0,なし,0,なし,11,ドレス,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,11,靴下,9,パンプス,0,なし
108,夢子,17,ホワイトブリム,0,なし,0,なし,0,なし,16,メイド服,0,なし,24,レースブラ,1,Ｔバック,0,なし,0,なし,7,パンスト,17,ロングブーツ,2,ガーター
109,神綺,24,髪飾り,0,なし,0,なし,0,なし,11,ドレス,0,なし,15,ブラ黒,13,パンティ黒,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
110,夢月,17,ホワイトブリム,0,なし,0,なし,0,なし,16,メイド服,0,なし,19,ブラ青,17,パンティ青,0,なし,0,なし,11,靴下,7,ハイヒール,0,なし
111,幻月,18,リボン,0,なし,12,ブラウス,20,ロングスカート,0,なし,14,ベスト,20,ブラ赤,17,パンティ青,0,なし,0,なし,11,靴下,9,パンプス,0,なし
112,る～こと,17,ホワイトブリム,0,なし,0,なし,0,なし,16,メイド服,0,なし,21,ブラ緑,19,パンティ緑,0,なし,0,なし,15,二―ソックス,15,ローファー,0,なし
113,玄爺,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし
114,神玉,0,なし,0,なし,12,ブラウス,20,ロングスカート,0,なし,14,ベスト,19,ブラ青,17,パンティ青,0,なし,0,なし,11,靴下,17,ロングブーツ,0,なし
115,菊理,24,髪飾り,0,なし,0,なし,0,なし,11,ドレス,0,なし,21,ブラ緑,19,パンティ緑,0,なし,0,なし,11,靴下,0,なし,0,なし
116,矜羯羅,18,リボン,0,なし,0,なし,0,なし,30,和服,0,なし,3,さらし,23,ふんどし,0,なし,0,なし,13,足袋,20,草履,0,なし
117,魔眼,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし,0,なし
118,エリス,18,リボン,0,なし,12,ブラウス,20,ロングスカート,0,なし,14,ベスト,15,ブラ黒,31,紐パン,0,なし,0,なし,15,二―ソックス,12,ブーツ,0,なし
119,サリエル,0,なし,0,なし,0,なし,0,なし,11,ドレス,0,なし,19,ブラ青,17,パンティ青,0,なし,0,なし,15,二―ソックス,12,ブーツ,0,なし
120,里香,0,なし,0,なし,13,ワイシャツ,5,ズボン,0,なし,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,11,靴下,15,ローファー,0,なし
121,明羅,0,なし,0,なし,0,なし,0,なし,30,和服,0,なし,3,さらし,23,ふんどし,0,なし,0,なし,13,足袋,18,下駄,0,なし
122,エレン,0,なし,0,なし,0,なし,0,なし,3,エプロンドレス,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,11,靴下,9,パンプス,0,なし
123,小兎姫,0,なし,0,なし,0,なし,0,なし,30,和服,0,なし,0,なし,0,なし,0,なし,0,なし,11,靴下,20,草履,0,なし
124,カナ,26,帽子,0,なし,0,なし,0,なし,3,エプロンドレス,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
125,理香子,18,リボン,3,ネクタイ,13,ワイシャツ,8,タイトスカート,0,なし,23,白衣,15,ブラ黒,13,パンティ黒,0,なし,0,なし,7,パンスト,7,ハイヒール,0,なし
126,オレンジ,26,帽子,0,なし,0,なし,0,なし,9,チャイナドレス,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,0,なし,9,パンプス,0,なし
127,くるみ,18,リボン,0,なし,12,ブラウス,1,サスペンダースカート,0,なし,0,なし,5,スポーツブラ,11,パンティ,0,なし,0,なし,15,二―ソックス,12,ブーツ,0,なし
128,エリー,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,4,ケープ,15,ブラ黒,13,パンティ黒,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
129,レイラ,0,なし,0,なし,0,なし,0,なし,11,ドレス,0,なし,13,ブラ,11,パンティ,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
130,VIVIT,17,ホワイトブリム,0,なし,0,なし,0,なし,16,メイド服,0,なし,21,ブラ緑,19,パンティ緑,0,なし,0,なし,15,二―ソックス,15,ローファー,0,なし
131,麟,18,リボン,0,なし,0,なし,0,なし,30,和服,0,なし,3,さらし,11,パンティ,0,なし,0,なし,13,足袋,20,草履,0,なし
132,清蘭,0,なし,0,なし,0,なし,0,なし,19,ワンピース,0,なし,5,スポーツブラ,9,ドロワーズ,0,なし,0,なし,0,なし,0,なし,0,なし
133,鈴瑚,0,なし,0,なし,12,ブラウス,22,キュロット,0,なし,0,なし,3,さらし,9,ドロワーズ,0,なし,0,なし,0,なし,0,なし,0,なし
134,ドレミー,26,帽子,0,なし,0,なし,0,なし,18,ローブ,4,ケープ,13,ブラ,9,ドロワーズ,0,なし,0,なし,11,靴下,0,なし,0,なし
135,サグメ,0,なし,0,なし,0,なし,0,なし,19,ワンピース,0,なし,19,ブラ青,17,パンティ青,0,なし,0,なし,11,靴下,12,ブーツ,0,なし
136,クラウンピース,26,帽子,0,なし,0,なし,0,なし,19,ワンピース,0,なし,0,なし,0,なし,0,なし,0,なし,6,タイツ,0,なし,0,なし
137,純狐,26,帽子,0,なし,0,なし,0,なし,25,導師服,0,なし,4,シースルーブラ,13,パンティ黒,0,なし,0,なし,0,なし,7,ハイヒール,21,前垂れ
138,ヘカーティア,26,帽子,0,なし,1,Ｔシャツ,17,ミニスカート,0,なし,0,なし,6,チューブトップ,31,紐パン,0,なし,0,なし,0,なし,0,なし,0,なし
139,月の門番,0,なし,0,なし,17,服,5,ズボン,0,なし,18,鎧,0,なし,8,トランクス,0,なし,0,なし,11,靴下,1,グリーブ,0,なし
140,易者,26,帽子,0,なし,0,なし,0,なし,30,和服,0,なし,0,なし,23,ふんどし,0,なし,0,なし,13,足袋,20,草履,0,なし
141,命蓮,0,なし,10,数珠,0,なし,0,なし,29,法衣,22,袈裟,0,なし,23,ふんどし,0,なし,0,なし,13,足袋,20,草履,0,なし


code:
;-------------------------------------------------
; 領内活動による能力値上昇
;-------------------------------------------------
@HO_ABLUP_MAXHP(CHARA_ID, MODE)
#DIM  CHARA_ID
#DIMS MODE
#DIM  DYNAMIC 増加量

SELECTCASE MODE
        ;コマンド,スケジュールの運動による最大体力の強化
    CASE "運動"
        IF MAXBASE:CHARA_ID:体力 < 1600
            増加量 = MAXBASE:CHARA_ID:体力 * 20 / 1000
        ELSEIF MAXBASE:CHARA_ID:体力 < 2000
            増加量 = MAXBASE:CHARA_ID:体力 * 15 / 1000
        ELSEIF MAXBASE:CHARA_ID:体力 < 3000
            増加量 = MAXBASE:CHARA_ID:体力 * 10 / 1000
        ELSEIF MAXBASE:CHARA_ID:体力 < 4000 && !RAND:3
            増加量 = MAXBASE:CHARA_ID:体力 * 10 / 1000
        ELSEIF MAXBASE:CHARA_ID:体力 < 5500 && !RAND:3
            増加量 = MAXBASE:CHARA_ID:体力 * 1 / 1000
        ELSE
            RETURN 0
        ENDIF
        増加量 = MAX(1, 増加量)
        MAXBASE:CHARA_ID:体力 += 増加量
        RETURN 増加量
ENDSELECT


code:
;-------------------------------------------------
; ハウジング　キャラクターの行動制御
;-------------------------------------------------
@HO_CHARAACT_CONTROL_MAIN
#DIM DYNAMIC CHARA_IDX
#DIM DYNAMIC CHARA_ID
#DIMS DYNAMIC ACTIONTYPE
#DIMS DYNAMIC 行動パターン
#DIM  DYNAMIC ROOM_IDX
#DIMS DYNAMIC MAP
#DIM  DYNAMIC 鑑賞発生フラグ

;MASTERの処理
TCVAR:MASTER:空腹度 += 5
IF (TCVAR:MASTER:行動不能フラグ == 1 || TCVAR:MASTER:失神フラグ == 1) && FLAG:調教モード == 調教_居住区
    CALL HO_FORCE_MASTER_REST
ENDIF

;行動順リストの作成
CHARA_IDX = 0
VARSET _LIST_HO_行動順リスト
WHILE _DIC_HO_CHARALIST:CHARA_IDX != "-1"
    IF _DIC_HO_CHARALIST:CHARA_IDX == "DELETED"
        CHARA_IDX ++
        CONTINUE
    ENDIF
    CALL HO_GET_CHARADATA(CHARA_IDX, "CHARA_ID")
    CHARA_ID = RESULT
    ;滞在時間が切れたモブは行動順リストに加えず離脱させる
    {
        IF CFLAG:CHARA_ID:ゲストモブ
            && CFLAG:CHARA_ID:キャラ滞在時間 <= 0
            && (!TCVAR:CHARA_ID:奉仕者フラグ && !TCVAR:CHARA_ID:被奉仕者フラグ)
            && TCVAR:CHARA_ID:宿泊先設備IDX < 1
    }
        ;ダミーキャラは離脱しない
        CALL HO_GET_CHARADATA(CHARA_IDX, "GUEST_TYPE")
        IF RESULTS == "DUMMY"
            CHARA_IDX++
            CONTINUE
        ENDIF
        CALL HO_GET_CHARADATA(CHARA_IDX, "ACTION")
        ACTIONTYPE = %RESULTS%
        IF !GROUPMATCH(ACTIONTYPE,"同行中", "逢瀬中")
            CALL HO_LEAVE_GUEST(CHARA_IDX, CHARA_ID)
            CHARA_IDX ++
            CONTINUE
        ENDIF
    ENDIF
    _LIST_HO_行動順リスト = %LIST_ADD(_LIST_HO_行動順リスト, TOSTR(CHARA_IDX))%
    CHARA_IDX ++
WEND

CALL LIST_SHUFFLE(_LIST_HO_行動順リスト, 1)

;-------------------------------------------------
;各キャラクターの行動を処理
;-------------------------------------------------
FOR LOCAL:0, 0, LIST_COUNT(_LIST_HO_行動順リスト)
    CHARA_IDX = TOINT(LIST_GET(_LIST_HO_行動順リスト, LOCAL:0))
    CALL HO_GET_CHARADATA(CHARA_IDX, "ACTION")
    ACTIONTYPE = %RESULTS%
    CALL HO_GET_CHARADATA(CHARA_IDX, "CHARA_ID")
    CHARA_ID = RESULT
    CALL HO_GET_CHARADATA(CHARA_IDX, "ROOM_IDX")
    ROOM_IDX = RESULT

    ; DEBUGPRINTFORML %ANAME(CHARA_ID)%の処理1
    ; DEBUGPRINTFORML %ANAME(CHARA_ID)%の行動 %ACTIONTYPE%
    ; DEBUGPRINTFORML %ANAME(CHARA_ID)%の予約済行動 {TCVAR:CHARA_ID:予約済行動}

    ;;ターン経過で起きるキャラステータスの変動
    CALL HO_CALC_PALAM_BEFORE_ACT(CHARA_ID)

    ;ゲストの滞在時間を減少
    IF CFLAG:CHARA_ID:ゲストモブ
        CFLAG:CHARA_ID:キャラ滞在時間 -= HO_単位時間
        ;営業時間を過ぎたら強制帰宅
        IF HO_TIME > HO_CLOCK(1800) && GROUPMATCH(ACTIONTYPE, "買物中")
            CFLAG:CHARA_ID:キャラ滞在時間 = 0
        ENDIF
    ENDIF
    ;奉仕中は処理をスキップ
    IF TFLAG:奉仕モード && (TCVAR:CHARA_ID:奉仕者フラグ || TCVAR:CHARA_ID:被奉仕者フラグ) && CFLAG:CHARA_ID:調教参加フラグ
        CONTINUE
    ENDIF

    ;スケジュールされた行動パターンを取得
    CALL HO_GET_TASK_SCH(CHARA_ID)
    行動パターン '= RESULTS

    ;;行動待機時間に対して優先される動作
    ;ウフフ目撃判定
    CALL HO_CHECK_UFUFU(CHARA_ID)
    IF RESULT == 1
        ;予約されている行動を消去
        TCVAR:CHARA_ID:予約済行動 = 0
        ;ペア行動フラグをリセット
        CALL HO_RESET_PAIR_ACT(CHARA_ID)
        ;情事乱入判定
        CALL HO_CHECK_FORCE_JOIN_UFUFU(CHARA_ID)
        ;乱入したならウフフ目撃フラグを消し、以降の処理をスキップ
        IF RESULT
            CALL HO_FORCE_JOIN_UFUFU(CHARA_ID)
            TCVAR:CHARA_ID:ウフフ目撃フラグ = 0
            CONTINUE
        ENDIF
    ENDIF

    IF TCVAR:CHARA_ID:ウフフ目撃フラグ != 1
        ;鑑賞判定
        IF GROUPMATCH(ACTIONTYPE, "休憩中", "遊戯中") && TCVAR:CHARA_ID:鑑賞判定クールタイム <= 0
            MAP '= @"MAP_{ROOM_IDX}_ROOM_EFFECT"
            鑑賞発生フラグ = 0
            {
                IF MAP_HAS(MAP, "ピアノの音色") > 0
                    || MAP_HAS(MAP, "歌唱") > 0
                    || MAP_HAS(MAP, "演舞") > 0
            }
                鑑賞発生フラグ = 1
            ENDIF
            IF RAND:100 < 50 && 鑑賞発生フラグ
                CALL HO_GET_TASK_SCH(CHARA_ID)
                IF GROUPMATCH(RESULTS, "", "自由", "休憩")
                    TCVAR:CHARA_ID:行動待機時間 = 0
                    TCVAR:CHARA_ID:予約済行動 = ACT_鑑賞
                    TCVAR:CHARA_ID:鑑賞判定クールタイム = 60
                ENDIF
                ;既に鑑賞中で鑑賞の発生条件を満たさなくなった場合は鑑賞状態を強制解除する
            ELSEIF ACTIONTYPE == "鑑賞中" && !鑑賞発生フラグ
                TCVAR:CHARA_ID:行動待機時間 = 0
                TCVAR:CHARA_ID:鑑賞判定クールタイム = 60
            ENDIF
        ENDIF

        ;炊事判定
        IF 行動パターン== "炊事"
            ;炊事担当者は配膳のタイミングでは配膳を優先する
            IF GROUPMATCH(ACTIONTYPE, "休憩中", "遊戯中", "鑑賞中", "炊事中")
                IF INRANGE(HO_OCLOCK(), 1130, 1230) || INRANGE(HO_OCLOCK(), 1700, 1859)
                    TCVAR:CHARA_ID:予約済行動 = ACT_炊事
                    TCVAR:CHARA_ID:行動待機時間 = 0
                ENDIF
            ENDIF
        ENDIF
    ENDIF

    ;;行動待機時間が設定されている場合の処理
    ;情事を目撃した場合、行動待機時間を無視して行動させる(とりあえず逃げる)
    {
        IF TCVAR:CHARA_ID:行動待機時間 > 0 && TCVAR:CHARA_ID:ウフフ目撃フラグ != 1
    }
        TCVAR:CHARA_ID:行動待機時間 -= HO_単位時間
        ;行動待機時間中の処理
        ;素材の獲得などは行動の完遂時に処理する
        CALL HO_CHARAACT_ACTION_PROGRESS(CHARA_ID)
        CONTINUE
    ENDIF

    ;前ターンの同行解除フラグを初期化
    SIF TCVAR:CHARA_ID:同行解除フラグ == 1
        TCVAR:CHARA_ID:同行解除フラグ = 0
    IF ACTIONTYPE != "移動中" && ACTIONTYPE != "同行中"
        IF RESULT == -1 || 行動パターン== "自由"
            CALL HO_SCH_FREE(CHARA_ID)
            行動パターン '= RESULTS
        ENDIF
        ;行動決定処理
        CALL HO_CHARAACT_SET_ACT(CHARA_IDX, 行動パターン)
        CALL HO_CHARAACT_MOVE_MAIN(CHARA_IDX)
    ELSEIF ACTIONTYPE == "同行中"
        CALL HO_CHARAACT_CHECK_NPC_PUSHDOWN_MASTER(CHARA_ID)
    ELSEIF ACTIONTYPE == "移動中"
        CALL HO_CHARAACT_MOVE_MAIN(CHARA_IDX)
    ENDIF

NEXT
CALL HO_CHARAACT_SUBACTION

RETURN

@HO_CHARAACT_SET_ACT(CHARA_IDX, 行動パターン)
#DIM CHARA_IDX
#DIMS 行動パターン
#DIM 決定動作
#DIM  DYNAMIC CHARA_ID
#DIM  DYNAMIC ROOM_IDX
#DIMS DYNAMIC _LIST_移動先候補
#DIM  DYNAMIC 移動先ROOM_IDX
;IDを取得
CALL HO_GET_CHARADATA(CHARA_IDX, "CHARA_ID")
CHARA_ID = RESULT
;キャラが現在いる部屋を取得
CALL HO_GET_CHARADATA(CHARA_IDX, "ROOM_IDX")
ROOM_IDX = RESULT

IF !TCVAR:CHARA_ID:予約済行動
    CALL HO_CHARAACT_DECIDE_ACT(CHARA_ID, 行動パターン)
    決定動作 = RESULT
ELSE
    決定動作 = TCVAR:CHARA_ID:予約済行動
    TCVAR:CHARA_ID:予約済行動 = 0
ENDIF
;DEBUGPRINTFORML CHARA_ID:{CHARA_ID}(%ANAME(CHARA_ID)%)の動作{決定動作}
SELECTCASE 決定動作
    CASE ACT_食事
        CALL HO_行動定義_食事(CHARA_ID)
    CASE ACT_休憩
        CALL HO_行動定義_休憩(CHARA_ID)
    CASE ACT_水浴び ;"休憩からの派生アクション"
        CALL HO_行動定義_水浴び(CHARA_ID)
    CASE ACT_飲酒
        CALL HO_行動定義_飲酒(CHARA_ID)
    CASE ACT_入浴
        CALL HO_行動定義_入浴(CHARA_ID)
    CASE ACT_採集
        CALL HO_行動定義_採集(CHARA_ID)
    CASE ACT_採掘
        CALL HO_行動定義_採掘(CHARA_ID)
    CASE ACT_クラフト
        CALL HO_行動定義_クラフト(CHARA_ID)
    CASE ACT_訓練
        CALL HO_行動定義_訓練(CHARA_ID)
    CASE ACT_店番
        CALL HO_行動定義_店番(CHARA_ID)
    CASE ACT_宿番
        CALL HO_行動定義_宿番(CHARA_ID)
    CASE ACT_宿泊
        CALL HO_行動定義_宿泊(CHARA_ID)
    CASE ACT_芸能
        CALL HO_行動定義_芸能(CHARA_ID)
    CASE ACT_鑑賞
        CALL HO_行動定義_鑑賞(CHARA_ID)
    CASE ACT_炊事
        CALL HO_行動定義_炊事(CHARA_ID)
    CASE ACT_買物
        CALL HO_行動定義_買物(CHARA_ID)
    CASE ACT_買春
        CALL HO_行動定義_買春(CHARA_ID)
    CASE ACT_売春
        CALL HO_行動定義_売春(CHARA_ID)
    CASE ACT_搾乳
        CALL HO_行動定義_搾乳(CHARA_ID)
    CASE ACT_逢瀬
        CALL HO_行動定義_逢瀬(CHARA_ID)
    CASE ACT_逢瀬準備
        CALL HO_行動定義_逢瀬準備(CHARA_ID)
    CASE ACT_逢瀬待機
        CALL HO_行動定義_逢瀬待機(CHARA_ID)
    CASE ACT_自慰
        CALL HO_行動定義_自慰(CHARA_ID)
    CASE ACT_仮眠 ;疲労状態の動作
        CALL HO_行動定義_仮眠(CHARA_ID)
    CASE ACT_睡眠 ;泥酔などによる寝落ち動作
        CALL HO_行動定義_睡眠(CHARA_ID)
    CASE ACT_洗浄 ;"汚れ、発汗による洗浄"
        CALL HO_行動定義_洗浄(CHARA_ID)
    CASE ACT_着替 ;"衣服破損時"
        CALL HO_行動定義_着替(CHARA_ID)
    CASE ACT_追随
        CALL HO_行動定義_追随(CHARA_ID)
    CASE ACT_ウフフ目撃
        CALL HO_行動定義_ウフフ目撃(CHARA_ID)
    CASE ACT_拘束
        CALL HO_行動定義_拘束(CHARA_ID)
    CASE ACT_監禁
        CALL HO_行動定義_監禁(CHARA_ID)
    CASE ACT_療養
        CALL HO_行動定義_療養(CHARA_ID)
    CASE ACT_就寝
        CALL HO_行動定義_就寝(CHARA_ID)
    CASEELSE
        CALL HO_行動定義_自由(CHARA_ID)
ENDSELECT

;1  = 行動成功
;0  = 行動のために移動が必要
;-1 = 決定した行動が実行不可
IF RESULT == 1
    TCVAR:CHARA_ID:HO直前の行動 = 決定動作
    TCVAR:CHARA_ID:行動失敗カウンタ = 0
    ;グループ活動のフラグ制御
    IF TCVAR:CHARA_ID:勧誘したキャラID || TCVAR:CHARA_ID:勧誘されたキャラID
        TCVAR:CHARA_ID:グループ活動フラグ = グループ活動_待合
    ENDIF
    RETURN
ELSEIF RESULT== 0
    TCVAR:CHARA_ID:予約済行動 = 決定動作
    TCVAR:CHARA_ID:HO直前の行動 = 0
    RETURN
ELSEIF RESULT == -1 && TCVAR:CHARA_ID:行動失敗カウンタ < 4
    TCVAR:CHARA_ID:HO直前の行動 = 0
    TCVAR:CHARA_ID:行動失敗カウンタ ++
    CALL HO_行動定義_自由(CHARA_ID)
    RETURN
ENDIF
;4回連続で行動が成功しなかった場合処理打ち切り
TCVAR:CHARA_ID:行動失敗カウンタ = 0
TCVAR:CHARA_ID:HO直前の行動 = 0
RETURN

;;ターン経過時に処理されるパラメータ可変、判定
@HO_CALC_PALAM_BEFORE_ACT(CHARA_ID)
#DIM CHARA_ID
#DIMS DYNAMIC ACTION

#DIM DYNAMIC 衣装部位
#DIMS DYNAMIC 衣装描写

CALL HO_GET_CHARAACT(CHARA_ID)
ACTION = %RESULTS%

;空腹度上昇,通常だいたい6時間程度で空腹(300)になるように
TCVAR:CHARA_ID:空腹度 += 5
TCVAR:CHARA_ID:疲労度 += 5
;酔い追加、酔い覚め
IF ACTION == "飲酒中"
    PALAM:CHARA_ID:酔い += RAND(100, 200)
ELSEIF PALAM:CHARA_ID:酔い > 0
    PALAM:CHARA_ID:酔い = MAX(0, PALAM:CHARA_ID:酔い - 50)
ENDIF
;18:00以前なら眠りは毎ターン浅くなる、18:00以降なら眠りは毎ターン深くなる
IF HO_OCLOCK() < 1800 && IS_DRUNK(CHARA_ID) < 3
    TCVAR:CHARA_ID:睡眠深度 = MIN(10000, TCVAR:CHARA_ID:睡眠深度 - (300 + RAND:300))
ELSE
    TCVAR:CHARA_ID:睡眠深度 = MIN(10000, TCVAR:CHARA_ID:睡眠深度 + 300 + RAND:300)
ENDIF

;クールタイムの減少
TCVAR:CHARA_ID:押し倒しクールタイム = MAX(0, TCVAR:CHARA_ID:押し倒しクールタイム - HO_単位時間)
TCVAR:CHARA_ID:鑑賞判定クールタイム = MAX(0, TCVAR:CHARA_ID:鑑賞判定クールタイム - HO_単位時間)

;欲情の減衰
IF !GROUPMATCH(ACTION, "同行中") || TCVAR:CHARA_ID:相席フラグ != 1
    SELECTCASE ACTION
        CASE "自慰中"
            IF PALAM:CHARA_ID:欲情 > PALAMLV:3
                PALAM:CHARA_ID:欲情 = MAX(PALAMLV:3, PALAM:CHARA_ID:欲情 - RAND(6000, 8000))
            ENDIF
        CASEELSE
            IF PALAM:CHARA_ID:欲情 > PALAMLV:3
                PALAM:CHARA_ID:欲情 = MAX(PALAMLV:3, PALAM:CHARA_ID:欲情 - RAND(400, 600))
            ENDIF
    ENDSELECT
ENDIF

;汗量の増大
IF GROUPMATCH(ACTION, "同行中") && FLAG:ウフフフラグ == 1
    TCVAR:CHARA_ID:汗量 += RAND(500, 600)
ELSEIF GROUPMATCH(ACTION, "運動中","採石中","伐採中")
    TCVAR:CHARA_ID:汗量 += RAND(500, 600)
ENDIF

;精飲
IF GROUPMATCH(ACTION, "食事中", "お茶会中")
    IF TCVAR:CHARA_ID:食ザーフラグ == 1
        CALL HO_IS_TARGET_VISIBLE(MASTER, CHARA_ID)
        IF RESULT
            SELECTCASE RAND:3
                CASE 0
                    CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%ANAME(CHARA_ID)%は食事にべっとりとこびりついた精液を指ですくい取ると、%ANAME(MASTER)%に見せつけるように口に運んだ…@/C@", 1)
                CASE 1
                    CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%ANAME(CHARA_ID)%は蠱惑的な笑みを浮かべ、%ANAME(MASTER)%に見せつけるように食器についたザーメンに舌を這わせている…@/C@", 1)
                CASE 2
                    CALLF TAG_PRINT(@"@C:{カラー_ピンク}@%ANAME(CHARA_ID)%は恍惚とした表情で食器についた精液を舐め取っている……@/C@", 1)
            ENDSELECT
            WAIT
            TCVAR:CHARA_ID:食ザーフラグ = 0
        ENDIF
    ENDIF
ENDIF

;適用衣装プリセットの変更
IF HO_OCLOCK() >= 1800 && !FLAG:クエストモード
    CFLAG:CHARA_ID:衣装プリセット = 衣装プリセット_夜着
ENDIF
;衣装損壊判定
FOR 衣装部位, 0 ,CLOTH_PART_NUM
    IF 衣装損壊率:CHARA_ID:衣装部位 >= 100 && 衣装状態:CHARA_ID:衣装部位 == 0
        衣装状態:CHARA_ID:衣装部位 = 衣装状態_破
        CALL GET_CLOTH_DESC(衣装部位, (調教用衣装:CHARA_ID:衣装部位))
        衣装描写 '= RESULTS
        CALL FL_PLAYSE("Tear_0.mp3")
        CALLF TAG_PRINT(@"@C:{カラー_注意}@%ANAME(CHARA_ID)%の%衣装描写%が破れてしまった……@/C@", 1)
        WAIT
    ENDIF
NEXT

;キャラクターの行動パターン決定ルーチン
@HO_CHARAACT_DECIDE_ACT(CHARA_ID, 行動パターン)
#DIM CHARA_ID
#DIMS 行動パターン
#DIM DYNAMIC CHARA_IDX
#DIM DYNAMIC ROOM_IDX
#DIM DYNAMIC ACT_ABLE, ACT_NUM
#DIM DYNAMIC SELECTED_ACT

;キャラが現在いる部屋を取得
CALL HO_GET_CHARAPLACE(CHARA_ID)
ROOM_IDX = RESULT

;-------------------------------------------------
;ゲストの行動定義は別関数で処理
;-------------------------------------------------
IF CFLAG:CHARA_ID:ゲストモブ
    CALL HO_CHARAACT_DECIDE_ACT_GUEST(CHARA_ID, ROOM_IDX, 行動パターン)
    RETURN RESULT
ENDIF

;-------------------------------------------------
;囚人用行動定義
;-------------------------------------------------
IF CFLAG:CHARA_ID:捕虜先 == 所属_プレイヤー
    CALL HO_CHARAACT_DECIDE_ACT_PRISONER(CHARA_ID, ROOM_IDX, 行動パターン)
    ; DEBUGPRINTFORML %ANAME(CHARA_ID)%の行動:{RESULT}
    RETURN RESULT
ENDIF

;-------------------------------------------------
;クエスト用イベントポーンの行動定義
;-------------------------------------------------
IF CFLAG:CHARA_ID:イベントポーン
    ;CALL HO_CHARAACT_DECIDE_ACT_EVENT_PAWAN(CHARA_ID, ROOM_IDX, 行動パターン)
    ;DEBUGPRINTFORML %ANAME(CHARA_ID)%の行動:{RESULT}
    RETURN ACT_徘徊
ENDIF

;-------------------------------------------------
;通常キャラの行動定義
;-------------------------------------------------
; 緊急動作
; 通常の動作に優先して実行される生理的な動作など
;-------------------------------------------------
;行動不能
IF TCVAR:CHARA_ID:51 == 1 || TCVAR:CHARA_ID:52 == 1
    RETURN ACT_仮眠
ENDIF

;安静が必要な場合
IF CFLAG:CHARA_ID:行動不能状態 == 行動不能_臨月 || GROUPMATCH(TCVAR:CHARA_ID:離脱フラグ, 離脱フラグ_悲しみ限界, 離脱フラグ_怒り限界)
    RETURN ACT_療養
ENDIF

;身動きできない
IF IS_EQUIP_TARGET(CHARA_ID, T_N("縄"), T_N("目隠し"))
    RETURN ACT_拘束
ENDIF

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

;寝落ち
IF TCVAR:CHARA_ID:53 == 1
    RETURN ACT_睡眠
ENDIF

;就寝時間到来
IF 行動パターン == "就寝"
    RETURN ACT_就寝
ENDIF

;着替えが必要
FOR LOCAL:0, 0, CLOTH_PART_NUM
    IF 衣装状態:CHARA_ID:(LOCAL:0) == 衣装状態_破
        RETURN ACT_着替
    ENDIF
NEXT

;汚れが許容を超過
IF HO_CHECK_CUM_AMOUNT(CHARA_ID, "体外のみ") >= 30 && !TFLAG:経路_浴室なし
    RETURN ACT_洗浄
ENDIF

;-------------------------------------------------
;お仕事に優越する生存欲求
;-------------------------------------------------
IF TCVAR:CHARA_ID:空腹度 >= 300
    RETURN ACT_食事
ENDIF

;-------------------------------------------------
;;休憩およびその派生アクション
;実際にとる行動を重み付け抽選する。抽選されたアクションが実行不可の場合は-1を立てて抽選対象から除外した上で再抽選する
;3回繰り返しても実行可能アクションが抽選されない場合は通常の休憩を実行する
;-------------------------------------------------
IF 行動パターン == "休憩" || TCVAR:CHARA_ID:疲労度 >= 150
    IF PALAM:(CHARA_ID):欲情 > PALAMLV:6
        CALL HO_SELF_CHECK(CHARA_ID)
        SIF RESULT
            TCVAR:CHARA_ID:自慰フラグ += 1
    ENDIF
    FOR LOCAL, 0, 3
        ;条件に応じて行動パターンを重み付けする
        CALL RAND_WT_INIT
        CALL RAND_WT_SET(ACT_休憩, 200)
        IF ACT_ABLE:ACT_水浴び != -1
            IF HO_TIME < HO_CLOCK(1700) && HO_SEASON() != HO_季節_冬
                CALL RAND_WT_SET(ACT_水浴び, TCVAR:CHARA_ID:汗量 / 30)
            ENDIF
        ENDIF
        IF ACT_ABLE:ACT_自慰 != -1
            CALL RAND_WT_SET(ACT_自慰, TCVAR:CHARA_ID:自慰フラグ * 10)
        ENDIF
        ;抽選結果の実行可能判定
        SELECTED_ACT = RAND_WT_RESULT()
        SELECTCASE SELECTED_ACT
            CASE ACT_水浴び
                CALL HO_FIND_NEAREST_ROOM_BY_MODULE_ELEMENT("水場", ROOM_IDX)
                IF RESULT
                    RETURN SELECTED_ACT
                ELSEIF RESULT == -1
                    ACT_ABLE:ACT_水浴び = -1
                ENDIF
            CASE ACT_自慰
                CALL HO_FIND_NEAREST_ROOM_BY_MODULE_ELEMENT("遮蔽", ROOM_IDX)
                IF RESULT
                    RETURN SELECTED_ACT
                ELSEIF RESULT == -1
                    ACT_ABLE:ACT_自慰 = -1
                ENDIF
            CASEELSE
                RETURN ACT_休憩
        ENDSELECT
    NEXT
ENDIF

;8時以降にその日お風呂に入っていない場合は入浴を選択
IF (行動パターン == "入浴" || HO_TIME > 1200) && TCVAR:CHARA_ID:HO入浴済フラグ == 0
    RETURN ACT_入浴
ENDIF

;-------------------------------------------------
;お仕事
;-------------------------------------------------
CALL HO_CHARAACT_DECIDE_ACT_WORKS(CHARA_ID, ROOM_IDX, 行動パターン)
IF RESULT != -1
    RETURN RESULT
ENDIF

;-------------------------------------------------
;手が空いている
;-------------------------------------------------
;追随フラグが立っている
IF TCVAR:CHARA_ID:追随相手ID != -1
    RETURN ACT_追随
ENDIF

;-------------------------------------------------
;その他
;-------------------------------------------------
IF 行動パターン == "飲酒"
    RETURN ACT_飲酒
ENDIF

;どれにも該当しない
RETURN ACT_自由

;-------------------------------------------------
;;作業進捗量に応じた処理
;特定の行動中に定期的に実行される処理(買物など)もここで扱う
;-------------------------------------------------
@HO_CHARAACT_ACTION_PROGRESS(CHARA_ID)
#DIM CHARA_ID
#DIM  DYNAMIC ROOM_IDX
#DIMS DYNAMIC ACTION
#DIMS DYNAMIC MAP
#DIM  DYNAMIC EXP_GAIN
#DIM  DYNAMIC L_CNT

ROOM_IDX = C_COND_MAP_GET(CHARA_ID, "エリアIDX")
MAP '= @"MAP_{ROOM_IDX}_ROOM_EFFECT"

CALL HO_GET_CHARAACT(CHARA_ID)
ACTION '= RESULTS
SELECTCASE ACTION
    CASE "採集中"
        CALL HO_行動定義_採集_生産物(CHARA_ID)
    CASE "採掘中"
        CALL HO_行動定義_採掘_生産物(CHARA_ID)
    CASE "クラフト中"
        CALL HO_行動定義_クラフト_生産物(CHARA_ID)
    CASE "搾乳中"
        CALL HO_行動定義_搾乳_生産物(CHARA_ID)
    CASE "訓練中"
        CALL HO_行動定義_訓練_生産物(CHARA_ID)
    CASE "炊事中"
        CALL HO_行動定義_炊事_生産物(CHARA_ID)
    CASE "買物中"
        ;露店での商品販売は9～18時まで
        SIF !INRANGE(HO_TIME, HO_CLOCK(900), HO_CLOCK(1800))
            RETURN 0
        ;15分に一度処理
        SIF HO_TIME % 15 != 0
            RETURN 0
        CALL HO_GUEST_TRADE_ITEM(CHARA_ID)
    CASE "買春中"
        ;15分に一度処理
        SIF HO_TIME % 15 != 0
            RETURN 0
        CALL HO_GUEST_BUY_PROSTITUTE(CHARA_ID)
    CASE "逢瀬中"
        CALL HO_SEXUALACT_EXP(CHARA_ID)
    CASE "逢瀬待機中"
        ;何もしない
    CASE "演奏中"
        IF TCVAR:CHARA_ID:HO作業進捗量 > 100
            EXP_GAIN = 4
            IF MAP_HAS(MAP, "煽欲の小夜曲")
                EXP_GAIN += 2
            ENDIF
            CALL HO_CHARAACT_ABLUP(CHARA_ID, "歌唱", EXP_GAIN)
            TCVAR:CHARA_ID:HO作業進捗量 = 0
        ENDIF
        TCVAR:CHARA_ID:HO作業進捗量 += 10
    CASE "鑑賞中"
        CALL HO_行動定義_鑑賞_生産物(CHARA_ID)
ENDSELECT

RETURN

;-------------------------------------------------
;メインの行動処理以降に行われるアクション
;キャラ間の協調動作（一緒に話してるとか議論しているとか）などを想定
;-------------------------------------------------
@HO_CHARAACT_SUBACTION()
#DIM DYNAMIC CHARA_IDX
#DIM DYNAMIC CHARA_ID
#DIM DYNAMIC MODULE_LIST_IDX
#DIMS DYNAMIC ACTIONTYPE
#DIMS DYNAMIC _LIST_MEMBER
#DIMS DYNAMIC 行動パターン
#DIMS _LIST_GROUP

FOR LOCAL:0, 0, LIST_COUNT(_LIST_HO_行動順リスト)
    CHARA_IDX = TOINT(LIST_GET(_LIST_HO_行動順リスト, LOCAL:0))
    CALL HO_GET_CHARADATA(CHARA_IDX, "CHARA_ID")
    CHARA_ID = RESULT
    CALL HO_GET_CHARADATA(CHARA_IDX, "ACTION")
    ACTIONTYPE = %RESULTS%
    CALL HO_GET_CHARADATA(CHARA_IDX, "USE_MODULE_IDX")
    MODULE_LIST_IDX = RESULT
    ;モジュールを使用していない場合は処理しない
    SIF MODULE_LIST_IDX == -1
        CONTINUE
    ;逢瀬解除判定
    SIF ACTIONTYPE == "逢瀬中"
        CALL HO_SEXUALACT_RELEASE_ACTOR(CHARA_ID)
    ;既にグループ加入済みの場合は処理しない
    CALL HO_CHECK_CHARA_JOINED_GROUP(CHARA_ID)
    SIF RESULT != -1
        CONTINUE
    ;グルーピングの対象とするアクション
    IF GROUPMATCH(ACTIONTYPE, "食事中","休憩中","読書中","遊戯中","炊事中","店番中")
        ;既にグループが形成されている場合、加入を試みる
        CALL HO_CHECK_GROUP_FORMED(MODULE_LIST_IDX)
        IF RESULT != -1
            _LIST_GROUP = %RESULTS%
            ;同一モジュールに複数のグループが存在する場合、どのグループに加わるかは
            ;グループ内のキャラとの関係性や素質を見てあれこれ判定したいところだがひとまずはランダムに決める
            IF RAND:100 <= 60
                CALL HO_JOIN_CHARA_GROUP(TOINT(LIST_GET(_LIST_GROUP, RAND(0, LIST_COUNT(_LIST_GROUP)))), CHARA_ID)
                ;DEBUGPRINTFORML {HO_OCLOCK()}:%ANAME(CHARA_ID)%(ID:{CHARA_ID})が%_LIST_GROUP%に加入(ACTION%ACTIONTYPE%,MODULE_LIST_IDX{MODULE_LIST_IDX})
                CONTINUE
            ELSE
                CALL HO_FORM_CHARA_GROUP(ACTIONTYPE, MODULE_LIST_IDX, CHARA_ID)
                CONTINUE
            ENDIF
        ELSE
            ;グループが形成されてない場合は新規にグループを作成
            CALL HO_FORM_CHARA_GROUP(ACTIONTYPE, MODULE_LIST_IDX, CHARA_ID)
        ENDIF
    ENDIF
NEXT

;-------------------------------------------------
;行動決定処理　作業
;-------------------------------------------------
@HO_CHARAACT_DECIDE_ACT_WORKS(CHARA_ID, ROOM_IDX, 行動パターン)
#DIM  CHARA_ID
#DIM  ROOM_IDX
#DIMS 行動パターン

;DEBUGPRINTFORML %ANAME(CHARA_ID)%の行動パターン:%行動パターン%
SELECTCASE 行動パターン
    CASE "採集"
        RETURN ACT_採集
    CASE "採掘"
        RETURN ACT_採掘
    CASE "炊事"
        RETURN ACT_炊事
    CASE "店番"
        RETURN ACT_店番
    CASE "クラフト"
        RETURN ACT_クラフト
    CASE "訓練"
        RETURN ACT_訓練
    CASE "売春"
        RETURN ACT_売春
    CASE "搾乳"
        RETURN ACT_搾乳
    CASE "宿番"
        RETURN ACT_宿番
    CASE "芸能"
        RETURN ACT_芸能
ENDSELECT
RETURN -1

;-------------------------------------------------
;行動決定処理　囚人
;-------------------------------------------------
; #region @HO_CHARAACT_DECIDE_ACT_PRISONER
@HO_CHARAACT_DECIDE_ACT_PRISONER(CHARA_ID, ROOM_IDX, 行動パターン)
#DIM CHARA_ID
#DIM ROOM_IDX
#DIMS 行動パターン
#DIM DYNAMIC CHARA_IDX
#DIMS DYNAMIC GUEST_TYPE

;休憩は許容
IF TCVAR:CHARA_ID:疲労度 >= 150
    RETURN ACT_休憩
ENDIF

CALL HO_CHARAACT_DECIDE_ACT_WORKS(CHARA_ID, ROOM_IDX, 行動パターン)
IF RESULT != -1
    RETURN RESULT
ENDIF

RETURN -1
; #endregion

;-------------------------------------------------
;NPCのあなた押し倒し判定
;-------------------------------------------------
; #region @HO_CHARAACT_CHECK_NPC_PUSHDOWN_MASTER
@HO_CHARAACT_CHECK_NPC_PUSHDOWN_MASTER(CHARA_ID)
#DIM CHARA_ID
SIF FLAG:調教モード != 調教_居住区
    RETURN 0

;自分自身は不可
SIF CHARA_ID == MASTER
    RETURN 0
;既にウフフ中なら実行しない
SIF FLAG:ウフフフラグ
    RETURN 0
;疲れていたらダメ
SIF IS_TIRED(CHARA_ID)
    RETURN 0
;要合意
SIF !TALENT:CHARA_ID:合意
    RETURN 0

IF !TCVAR:CHARA_ID:押し倒しフラグ
    {
        IF IS_ESTRUS(CHARA_ID, 10)
            && (IS_LOVER(CHARA_ID) || IS_SLAVED_BY(CHARA_ID))
            && HO_同行者数 == 1
            && TCVAR:CHARA_ID:当日ウフフ継続時間 <= 150
    }
        TCVAR:CHARA_ID:押し倒しフラグ = 1
        IF C_COND("人目:1",, CHARA_ID)
            CALLF TAG_PRINTH(@"@C:{カラー_パステルピンク}@%ANAME(CHARA_ID)%は%ANAME(MASTER)%と人気のない場所で二人きりになりたいようだ…@/C@", 1)
        ELSE
            CALLF TAG_PRINTH(@"@C:{カラー_パステルピンク}@%ANAME(CHARA_ID)%は%ANAME(MASTER)%のことを情欲に満ちた瞳で見つめている…@/C@", 1)
        ENDIF
        CALL KOJO_EVENT(CHARA_ID, 320)
        WAIT
        RETURN 0
    ENDIF
    ;とりあえず20%くらいで
ELSEIF TCVAR:CHARA_ID:押し倒しフラグ == 1 && RAND:100 < 20
    SIF C_COND_MAP_GET(CHARA_ID, "設備") == -1
        RETURN 0
    SIF TCVAR:CHARA_ID:押し倒しクールタイム > 0
        RETURN 0
    {
        IF IS_ESTRUS(CHARA_ID, 10)
            && (IS_LOVER(CHARA_ID) || IS_SLAVED_BY(CHARA_ID))
            && TCVAR:CHARA_ID:当日ウフフ継続時間 <= 150
            && TALENT:CHARA_ID:合意
    }
        SIF C_COND("人目:1",, CHARA_ID)
            RETURN 0
        CALL RAND_WT_INIT()
        IF C_COND("設備属性:ベッド,設備属性:遮蔽","OR", CHARA_ID)
            CALL RAND_WT_SET(奉仕_通常, 2)
        ENDIF
        IF C_COND("設備用途:排泄,設備属性:遮蔽","AND", CHARA_ID) && HAS_PENIS(MASTER)
            CALL RAND_WT_SET(奉仕_通常, 2)
            SIF IS_NASTY(CHARA_ID, 素質_淫乱_精飲中毒)
                CALL RAND_WT_SET(奉仕_手コキフェラ, 8)
        ENDIF
        IF C_COND("設備属性:グローリーホール,設備属性:机","OR", CHARA_ID) && HAS_PENIS(MASTER)
            SIF IS_NASTY(CHARA_ID, 素質_淫乱_精飲中毒)
                CALL RAND_WT_SET(奉仕_手コキフェラ, 2)
        ENDIF
    ENDIF
    SIF RAND_WT_RESULT() < 1
        RETURN 0
    CALLF TAG_PRINTH(@"@C:{カラー_パステルピンク}@%ANAME(CHARA_ID)%は情欲に満ちた瞳で%ANAME(MASTER)%をじっと見つめ、身体を寄せてきた…@/C@", 1)
    PRINTL
    CALL ASK_YN("身を任せる", "距離を取る")
    PRINTL
    IF RESULT
        PRINTFORMW %ANAME(MASTER)%が今はそういう気分ではないとやんわりと拒絶すると、%ANAME(CHARA_ID)%は少し残念そうに頷いた
        TCVAR:CHARA_ID:押し倒しクールタイム = RAND(210, 300)
        RETURN 0
    ENDIF
    SELECTCASE RAND_WT_RESULT()
        CASE 奉仕_通常
            TFLAG:奉仕カテゴリ = 奉仕_通常
            CALLF TAG_PRINTH(@"@C:{カラー_ピンク}@人目がないと見るや%ANAME(CHARA_ID)%に押し倒されてしまった…！@/C@", 1)
        CASE 奉仕_手コキフェラ
            TFLAG:奉仕カテゴリ = 奉仕_手コキフェラ
            CALLF TAG_PRINTH(@"@C:{カラー_ピンク}@人目がないと見るや%ANAME(CHARA_ID)%は息を荒げて%ANAME(MASTER)%のペニスにむしゃぶりついてきた…！@/C@", 1)
        CASEELSE
            RETURN 0
    ENDSELECT
    TCVAR:CHARA_ID:押し倒しフラグ = 2
    FLAG:調教モード = 調教_逆調教通常
    FLAG:ウフフフラグ = 1
    TFLAG:奉仕モード = 1
    TCVAR:CHARA_ID:奉仕者フラグ = TFLAG:奉仕カテゴリ
    TCVAR:MASTER:被奉仕者フラグ = 奉仕_押し倒された
    CALL HO_PRESERVE_PRETRAIN_STATUS()
    TFLAG:調教開始時刻 = HO_TIME
    CALL FL_PLAYSE("Cloth_undress_0.mp3")
    CALL KOJO_EVENT(CHARA_ID, 321)
    WAIT
    RETURN 1
ENDIF

RETURN 0
; #endregion