装備品改造カスタム



KGCソフトウェアのダメージ吸収を以下のように改変。
・装備品破棄時オリジナルの装備品が帰ってくるかどうかを設定可能に
・無改造の場合末尾の"+0"がつかないように変更
・データベースで設定する際、"[", "]"を好きな"カッコ"に設定できるように変更
・属性付加で逆値を相殺する機能を追加(現状防具のみ)
・システム変数で最大改造数値を変更可能に
・能力値増加細分化
 ※使用する場合は必ず説明文に[#{AEQ_○○}をnPt]あるいは[#{AEQ_○○}をn%]を入れてください
・消費アイテムは3つが限度だったのを5個まで表示可能に

※このスクリプトの原作者はTOMY様です。

※以下のモジュールが別途導入必要です。
 貪藻矢射妥←ダイヤモンドベースモジュール
 縁取り文字
 ボトムキーヘルプ
 draw_text拡張 カスタム
 variable draw item
 VXA風SE
 Window VXA

変更点

2011:12:08
・VX風Vocab対応

2012:03:03
・一部の共通モジュールのクラス化

2015:10:01
・VXA風Sound対応

2020:10:01
・Window VXA対応

2024:03:01
・エラー落ちするバグの修正
・武器に特殊属性を付与しても正常に表示されないバグを修正

#----------------------------------------------------------------------------
# 装備品改造 - KGC_AlterEquipment 貪藻矢射妥←カスタム by 貪藻矢射妥←
#----------------------------------------------------------------------------
# 原作:     ◆ 装備品改造 - KGC_AlterEquipment ◆
#           ◇ Last update : 2008/01/12 ◇
# 原作者:   TOMY様
# HP:       Kamesoft
# アドレス: http://ytomy.sakura.ne.jp/
#
# 改造内容:
# ・装備品破棄時オリジナルの装備品が帰ってくるかどうかを設定可能に
# ・無改造の場合末尾の"+0"がつかないように変更
# ・データベースで設定する際、"[", "]"を好きな"カッコ"に設定できるように変更
# ・属性付加で逆値を相殺する機能を追加(現状防具のみ)
# ・システム変数で最大改造数値を変更可能に
# ・能力値増加細分化
#  ※使用する場合は必ず説明文に[#{AEQ_○○}をnPt]あるいは[#{AEQ_○○}をn%]を
#   入れてください
# ・消費アイテムは3つが限度だったのを5個まで表示可能に
# 
#============================================================================
# 変更点
# 
# 2011:12:08
# ・VX風Vocab対応
# 
# 2012:03:03
# ・一部の共通モジュールのクラス化
# 
# 2015:10:01
# ・VXA風Sound対応
# 
# 2020:10:01
# ・Window VXA対応
# 
# 2024:03:01
# ・エラー落ちするバグの修正
# ・武器に特殊属性を付与しても正常に表示されないバグを修正

$data_states = load_data("Data/States.rxdata") if $data_states == nil

#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================

module KGC
  # ◆改造武器最大数
  #  多すぎると動作やセーブファイルが重くなります。(300 以下を推奨)
  AEQ_WEAPON_MAX = 80
  # ◆改造防具最大数
  AEQ_ARMOR_MAX =  80
  # ◆改造回数を付加
  #  true を指定すると、名称の末尾に +1 等が付く。
  AEQ_SHOW_ALTER_COUNT = true
  # ◆改造回数の書式
  #  【{n}…改造回数】
  AEQ_ALTER_COUNT_FORMAT = " R{n}"
  # ◆破棄した時、オリジナルの装備が戻ってくるか
  AEQ_REGAIN_FLG = true

  # ◆装備名変更に使用するアクターのID(名前入力バッファ)
  AEQ_RENAME_ACTOR_ID = 13
  # ◆装備名の最大文字数(MAX:16)
  AEQ_RENAME_MAX_LENGTH = 16
  # ◆装備名変更画面に移行するボタン
  #  (A,X,Y,Z を推奨。nil にすると装備名変更機能無し)
  AEQ_RENAME_BUTTON = nil
  # ◆武器の解除ステートは不要か?
  AEQ_REMOVE_STATE_FLG = false

  # ◆改造可能回数
  #  武器名の [ALT{n}] を省略した場合に使用。
  #  負数を指定すると何度でも改造可能。
  AEQ_ALTERABLE_COUNT = [8, 16, 32, 48, -1]
  # ◆除外装備タイプ
  #  改造不可能にする装備タイプ配列(≪装備拡張≫に対応)
  AEQ_EXCLUDE_EQUIP_TYPE = [4]
  # ◆除外武器
  #  改造不可能にする武器ID配列
  AEQ_EXCLUDE_WEAPONS = [187, 193, 615, 616, 617, 618, 619, 620, 621]
  # ◆除外防具
  #  改造不可能にする防具ID配列
  AEQ_EXCLUDE_ARMORS = [332]
  # ◆属性付加で、逆値と相殺の場合のID配列
  # 例えばID:27(SP消費軽減)を付加したいけど、ID:29(SP消費増加)がセットされて
  # いる場合、まず、ID:29(SP消費増加)を削除したい・・・など。
  AEQ_INVERCE_ADD = [[27, 29]]
  # ◆能力値上昇(n%)でもともとの設定値が0の場合の上昇値
  AEQ_ROOT_PLUS_VALUE = 10
  
  # ◆能力値増分用用語
  AEQ_ATK  = Vocab::atk  #"攻撃力"
  AEQ_PDEF = Vocab::pdef #"防御"
  AEQ_MDEF = Vocab::mdef #"魔防"
  AEQ_STR  = Vocab::str  #"腕力"
  AEQ_DEX  = Vocab::dex  #"技術力"
  AEQ_AGI  = Vocab::agi  #"敏捷性"
  AEQ_INT  = Vocab::int  #"魔導力"
  AEQ_EVA  = Vocab::EVA_NAME
  
  # ◆付加追加可否判定用定数
  AEQ_FALSE   = 0
  AEQ_TRUE    = 1
  AEQ_ALREADY = 2

  # ◆武器ファクター一覧
  #  ≪"名称", "ヘルプ", 
  #    [[タイプ, ID], ...], 費用, [使用アイテムID, 個数], ...≫
  #  【タイプ】0..攻撃属性  1..ステート[+]  2..ステート[-]  3..能力値強化
  #  【  ID  】改造時に使用する属性/ステートのID(タイプが3:能力値強化の場合不要)
  #  【 費用 】改造費用。武器の価格に対する割合(%)
  #  配列なので、忘れずに末尾に , を付けてください。
  #  (最後の項目だけは付けても付けなくても良い)
  AEQ_WEAPON_FACTORS = [
    # 能力値強化
    ["[#{AEQ_ATK}]上昇", "武器の[#{AEQ_ATK}を10Pt]上げます。", 
     [[3]], 10, [112, 3]],
    ["[#{AEQ_PDEF}]上昇", "武器の[#{AEQ_PDEF}を10Pt]上げます。", 
     [[3]], 10, [112, 3]],
    ["[#{AEQ_MDEF}]上昇", "武器の[#{AEQ_MDEF}を10Pt]上げます。", 
     [[3]], 10, [112, 3]],
    ["[#{AEQ_STR}]上昇", "武器の[#{AEQ_STR}を10Pt]上げます。", 
     [[3]], 10, [112, 3]],
    ["[#{AEQ_DEX}]上昇", "武器の[#{AEQ_DEX}を10Pt]上げます。", 
     [[3]], 10, [112, 3]],
    ["[#{AEQ_AGI}]上昇", "武器の[#{AEQ_AGI}を10Pt]上げます。", 
     [[3]], 10, [112, 3]],
    ["[#{AEQ_INT}]上昇", "武器の[#{AEQ_INT}を10Pt]上げます。", 
     [[3]], 10, [112, 3]],
    #["[#{AEQ_EVA}]上昇", "武器の[#{AEQ_EVA}を10Pt]上げます。", 
    # [[3]], 10, [112, 3]],
    #["[#{AEQ_LUK}]上昇", "武器の[#{AEQ_LUK}を10Pt]上げます。", 
    # [[3]], 10, [112, 3]],
    # 属性
    ["[炎]攻撃", "武器に炎属性を付加します。", 
     [[0,  1]], 10, [ 113, 3], [156, 2]],
    ["[氷]攻撃", "武器に氷属性を付加します。", 
     [[0,  2]], 10, [ 113, 3], [148, 2]],
    ["[雷]攻撃", "武器に雷属性を付加します。", 
     [[0,  3]], 10, [ 113, 3], [150, 2]],
    ["[水]攻撃", "武器に水属性を付加します。", 
     [[0,  4]], 10, [ 113, 3], [147, 2]],
    ["[土]攻撃", "武器に土属性を付加します。", 
     [[0,  5]], 10, [ 113, 3], [153, 2]],
    ["[風]攻撃", "武器に風属性を付加します。", 
     [[0,  6]], 10, [ 113, 3], [152, 2]],
    ["[光]攻撃", "武器に光属性を付加します。", 
     [[0,  7]], 10, [ 113, 3], [161, 2]],
    ["[闇]攻撃", "武器に闇属性を付加します。", 
     [[0,  8]], 10, [ 113, 3], [158, 2]],
    ["[無]攻撃", "武器に無属性を付加します。", 
     [[0,  9]], 10, [ 113, 3], [155, 2]],
    # ステート A
    ["[転倒]攻撃", "武器に転倒効果を付加します。", 
     [[1,  2]], 20, [115, 4], [160, 3], [165, 2], [162, 2]],
    ["[猛毒]攻撃", "武器に猛毒効果を付加します。", 
     [[1,  3]], 20, [115, 4], [159, 3], [176, 2], [162, 2]],
    ["[混乱]攻撃", "武器に混乱効果を付加します。", 
     [[1,  6]], 20, [115, 4], [157, 3], [175, 2], [164, 2]],
    ["[睡眠]攻撃", "武器に睡眠効果を付加します。", 
     [[1,  7]], 20, [115, 4], [149, 3], [163, 2], [164, 2]],
    ["[麻痺]攻撃", "武器に麻痺効果を付加します。", 
     [[1,  8]], 20, [115, 4], [151, 3], [171, 2], [168, 2]],
    ["[流血]攻撃", "武器に流血効果を付加します。", 
     [[1, 18]], 20, [115, 4], [154, 3], [166, 2], [168, 2]],
    # ステート B
    ["[幻惑]攻撃", "武器に幻惑効果を付加します。", 
     [[1,  4]], 20, [117, 4], [173, 3], [177, 2], [190, 2]],
    ["[呪詛]攻撃", "武器に呪詛効果を付加します。", 
     [[1,  9]], 20, [117, 4], [174, 3], [188, 2], [190, 2]],
    ["[凍傷]攻撃", "武器に凍傷効果を付加します。", 
     [[1, 11]], 20, [117, 4], [169, 3], [189, 2], [179, 2]],
    ["[火傷]攻撃", "武器に火傷効果を付加します。", 
     [[1, 12]], 20, [117, 4], [170, 3], [182, 2], [179, 2]],
    ["[沈黙]攻撃", "武器に沈黙効果を付加します。", 
     [[1, 15]], 20, [117, 4], [172, 3], [181, 2], [178, 2]],
    ["[束縛]攻撃", "武器に束縛効果を付加します。", 
     [[1, 16]], 20, [117, 4], [167, 3], [185, 2], [178, 2]],
    # ステート C
    ["[即死]攻撃", "武器に即死効果を付加します。", 
     [[1,  1]], 20, [119, 4], [186, 3], [197, 2], [192, 2]],
    ["[封印]攻撃", "武器に封印効果を付加します。", 
     [[1,  5]], 20, [119, 4], [187, 3], [195, 2], [192, 2]],
    ["[停滞]攻撃", "武器に停滞効果を付加します。", 
     [[1, 10]], 20, [119, 4], [183, 3], [193, 2], [201, 2]],
    ["[咒怨]攻撃", "武器に咒怨効果を付加します。", 
     [[1, 13]], 20, [119, 4], [184, 3], [194, 2], [201, 2]],
    ["[誘惑]攻撃", "武器に誘惑効果を付加します。", 
     [[1, 14]], 20, [119, 4], [191, 3], [196, 2], [202, 2]],
    ["[石化]攻撃", "武器に石化効果を付加します。", 
     [[1, 17]], 20, [119, 4], [180, 3], [198, 2], [202, 2]],
    # 特殊
    ["[先制]攻撃", "武器に先制攻撃を付加します。", 
     [[0, 21]], 50, [121, 2], [123, 2], [203, 3], [206, 3]],
    #["[二回]攻撃", "武器に二回攻撃を付加します。", 
    # [[0, 107]], 50, [121, 2], [123, 2], [204, 3], [206, 3]],
    ["[全体]攻撃", "武器に全体攻撃を付加します。", 
     [[0, 23]], 50, [121, 2], [123, 2], [199, 3], [206, 3]],
    ["[直撃]攻撃", "武器に回避無視を付加します。", 
     [[0, 24]], 50, [121, 2], [123, 2], [200, 3], [206, 3]],
    #["[吸収]攻撃", "武器に吸収攻撃を付加します。", 
    # [[0, 28]], 50, [121, 2], [123, 2], [205, 3], [206, 3]],
    # 命中精度
    ["命中精度[S]", "武器の命中精度を[S]にします。", 
     [[0, 55]], 50, [125, 3], [217, 2], [216, 1]],
    ["命中精度[A]", "武器の命中精度を[A]にします。", 
     [[0, 56]], 50, [125, 3], [214, 2], [216, 1]],
    ["命中精度[B]", "武器の命中精度を[B]にします。", 
     [[0, 57]], 50, [125, 3], [218, 2], [216, 1]],
    ["命中精度[C]", "武器の命中精度を[C]にします。", 
     [[0, 58]], 50, [125, 3], [219, 2], [216, 1]],
    ["命中精度[D]", "武器の命中精度を[D]にします。", 
     [[0, 59]], 50, [125, 3], [213, 2], [216, 1]],
  ]  # ←この ] は消さないこと

  # ◆防具ファクター一覧
  #  ≪"名称", "ヘルプ", 
  #    [[タイプ, ID], ...], 費用, [使用アイテムID, 個数], ...≫
  #  【タイプ】0..防御属性  1..防御ステート  2..能力値強化
  #  【  ID  】改造時に使用する属性/ステートのID(タイプが2:能力値強化の場合不要)
  #  【 費用 】改造費用。防具の価格に対する割合(%)
  AEQ_ARMOR_FACTORS = [
    # 能力値強化
    ["[#{AEQ_PDEF}]上昇", "防具の[#{AEQ_PDEF}を10Pt]上げます。", 
     [[2]], 10, [112, 3]],
    ["[#{AEQ_MDEF}]上昇", "防具の[#{AEQ_MDEF}を10Pt]上げます。", 
     [[2]], 10, [112, 3]],
    ["[#{AEQ_STR}]上昇", "防具の[#{AEQ_STR}を10Pt]上げます。", 
     [[2]], 10, [112, 3]],
    ["[#{AEQ_DEX}]上昇", "防具の[#{AEQ_DEX}を10Pt]上げます。", 
     [[2]], 10, [112, 3]],
    ["[#{AEQ_AGI}]上昇", "防具の[#{AEQ_AGI}を10Pt]上げます。", 
     [[2]], 10, [112, 3]],
    ["[#{AEQ_INT}]上昇", "防具の[#{AEQ_INT}を10Pt]上げます。", 
     [[2]], 10, [112, 3]],
    ["[#{AEQ_EVA}]上昇", "防具の[#{AEQ_EVA}を10Pt]上げます。", 
     [[2]], 10, [112, 3]],
    # 属性
    ["[炎]防御", "防具に炎耐性を付加します。", 
     [[0,  1]], 10, [ 114, 3], [156, 2]],
    ["[氷]防御", "防具に氷耐性を付加します。", 
     [[0,  2]], 10, [ 114, 3], [148, 2]],
    ["[雷]防御", "防具に雷耐性を付加します。", 
     [[0,  3]], 10, [ 114, 3], [150, 2]],
    ["[水]防御", "防具に水耐性を付加します。", 
     [[0,  4]], 10, [ 114, 3], [147, 2]],
    ["[土]防御", "防具に土耐性を付加します。", 
     [[0,  5]], 10, [ 114, 3], [153, 2]],
    ["[風]防御", "防具に風耐性を付加します。", 
     [[0,  6]], 10, [ 114, 3], [152, 2]],
    ["[光]防御", "防具に光耐性を付加します。", 
     [[0,  7]], 10, [ 114, 3], [161, 2]],
    ["[闇]防御", "防具に闇耐性を付加します。", 
     [[0,  8]], 10, [ 114, 3], [158, 2]],
    ["[無]防御", "防具に無耐性を付加します。", 
     [[0,  9]], 10, [ 114, 3], [155, 2]],
    # ステート A
    ["[転倒]防御", "防具に転倒耐性を付加します。", 
     [[1,  2]], 20, [116, 4], [160, 3], [165, 2], [162, 2]],
    ["[猛毒]防御", "防具に猛毒耐性を付加します。", 
     [[1,  3]], 20, [116, 4], [159, 3], [176, 2], [162, 2]],
    ["[混乱]防御", "防具に混乱耐性を付加します。", 
     [[1,  6]], 20, [116, 4], [157, 3], [175, 2], [164, 2]],
    ["[睡眠]防御", "防具に睡眠耐性を付加します。", 
     [[1,  7]], 20, [116, 4], [149, 3], [163, 2], [164, 2]],
    ["[麻痺]防御", "防具に麻痺耐性を付加します。", 
     [[1,  8]], 20, [116, 4], [151, 3], [171, 2], [168, 2]],
    ["[流血]防御", "防具に流血耐性を付加します。", 
     [[1, 18]], 20, [116, 4], [154, 3], [166, 2], [168, 2]],
    # ステート B
    ["[幻惑]防御", "防具に幻惑耐性を付加します。", 
     [[1,  4]], 20, [118, 4], [173, 3], [177, 2], [190, 2]],
    ["[呪詛]防御", "防具に呪詛耐性を付加します。", 
     [[1,  9]], 20, [118, 4], [174, 3], [188, 2], [190, 2]],
    ["[凍傷]防御", "防具に凍傷耐性を付加します。", 
     [[1, 11]], 20, [118, 4], [169, 3], [189, 2], [179, 2]],
    ["[火傷]防御", "防具に火傷耐性を付加します。", 
     [[1, 12]], 20, [118, 4], [170, 3], [182, 2], [179, 2]],
    ["[沈黙]防御", "防具に沈黙耐性を付加します。", 
     [[1, 15]], 20, [118, 4], [172, 3], [181, 2], [178, 2]],
    ["[束縛]防御", "防具に束縛耐性を付加します。", 
     [[1, 16]], 20, [118, 4], [167, 3], [185, 2], [178, 2]],
    # ステート C
    ["[即死]防御", "防具に即死耐性を付加します。", 
     [[1,  1]], 20, [120, 4], [186, 3], [197, 2], [192, 2]],
    ["[封印]防御", "防具に封印耐性を付加します。", 
     [[1,  5]], 20, [120, 4], [187, 3], [195, 2], [192, 2]],
    ["[停滞]防御", "防具に停滞耐性を付加します。", 
     [[1, 10]], 20, [120, 4], [183, 3], [193, 2], [201, 2]],
    ["[咒怨]防御", "防具に咒怨耐性を付加します。", 
     [[1, 13]], 20, [120, 4], [184, 3], [194, 2], [201, 2]],
    ["[誘惑]防御", "防具に誘惑耐性を付加します。", 
     [[1, 14]], 20, [120, 4], [191, 3], [196, 2], [202, 2]],
    ["[石化]防御", "防具に石化耐性を付加します。", 
     [[1, 17]], 20, [120, 4], [180, 3], [198, 2], [202, 2]],
    # 特殊
    ["[必殺]防御", "防具に必殺防御を付加します。", 
     [[0, 26]], 10, [122, 2], [124, 2], [215, 3], [216, 1]],
    ["[SP操作]防御", "SP消費率を軽減します。", 
     [[0, 27]], 10, [122, 2], [124, 2], [210, 3], [216, 1]],
  ]  # ←この ] は消さないこと

  # ◆価格 0 の武器価格計算式
  #  【 atk…攻撃力  pdef…物理防御  mdef…魔法防御  str_p…腕力+
  #     dex_p…器用さ+  agi_p…素早さ+  int_p…魔力+ 】
  #  改造費用算出に使用。(売却することはできない)
  AEQ_WEAPON_PRICE_FORMULA =
    "(atk + pdef + mdef + (str_p + dex_p + agi_p + int_p).abs) * 30"
  # ◆価格 0 の防具価格計算式
  #  【 pdef…物理防御  mdef…魔法防御  eva…回避修正  str_p…腕力+
  #     dex_p…器用さ+  agi_p…素早さ+  int_p…魔力+ 】
  AEQ_ARMOR_PRICE_FORMULA =
    "(pdef + mdef + (eva + str_p + dex_p + agi_p + int_p).abs) * 30"

  # ◆改造画面背景透過
  AEQ_BACK_TRANSPARENT = true

  # ◆「武器改造」名称
  AEQ_COMMAND_WEAPON_ALTER   = "武器改造"
  # ◆「改造装備破棄」名称
  AEQ_COMMAND_WEAPON_DISPOSE = "武器還元"
  # ◆「防具改造」名称
  AEQ_COMMAND_ARMOR_ALTER    = "防具改造"
  # ◆「改造防具破棄」名称
  AEQ_COMMAND_ARMOR_DISPOSE  = "防具還元"

  # ◆「武器改造」ヘルプ
  AEQ_HELP_WEAPON_ALTER   = "所持している武器を改造します。"
  # ◆「改造装備破棄」ヘルプ
  AEQ_HELP_WEAPON_DISPOSE = "改造した武器を破棄します。"
  # ◆「防具改造」ヘルプ
  AEQ_HELP_ARMOR_ALTER    = "所持している防具を改造します。"
  # ◆「改造防具破棄」ヘルプ
  AEQ_HELP_ARMOR_DISPOSE  = "改造した防具を破棄します。"

  # ◆改造武器リスト空欄の表示文字列
  AEQ_TEXT_NO_WEAPON = "- No weapon -"
  # ◆改造防具リスト空欄の表示文字列
  AEQ_TEXT_NO_ARMOR  = "- No armor -"

  # ◆付加属性を表示する範囲
  #  ([Integer][Range]クラスの配列)
  AEQ_ELEMENT_RANGE = [1..9]
  # ◆付加属性(特殊)を表示する範囲
  #  ([Integer][Range]クラスの配列)
  AEQ_ELEMENT_RANGE2 = [21..29, 55..59]
  # ◆付加/解除ステートを表示する範囲
  #  (指定方法は AEQ_ELEMENT_RANGE と同様)
  AEQ_STATE_RANGE = [1..18]

  # ◆武器改造確認コマンド
  AEQ_ALTER_COMMAND   = ["改造する", "やめる"]
  # ◆武器破棄確認コマンド
  AEQ_DISPOSE_COMMAND = ["還元する", "やめる"]
  # ◆ファクター付加確認コマンド
  AEQ_FACTOR_COMMAND  = ["付加する", "やめる"]
  #  ※↑3項目は、コマンド数を変更するとバグります。
  
  # ◆ カスタマイズ用"カッコ"
  # ※別のスクリプトとかを使用しており、"[", "]"が使用不能なのはイタイという
  #  場合に。
  STT = "《"
  FIN = "》"
  
  #------------------------------------------------------------------------
  # ○ リストの中に値が含まれているのかどうかを判定
  #------------------------------------------------------------------------
  def into_list(list_range, root)
    skip = true
    list_range.each { |rng|
      case rng
      when Integer
        skip = element != rng
      when Range
        skip = !rng.member?(root)
      end
    }
    return skip
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported = {} if $imported == nil
$imported["AlterEquipment"] = true

#--------------------------------------------------------------------------
# ○ 装備品改造画面呼び出し
#--------------------------------------------------------------------------
def call_equip_alter
  if $game_system.max_alter == nil
    $game_system.max_alter = 0
  end
  # プレイヤーの姿勢を矯正
  $game_player.straighten
  # 装備品改造画面に切り替え
  $scene = Scene_AlterEquipment.new
end

module AlteredEquipment
  #--------------------------------------------------------------------------
  # ○ 改造武器破棄
  #     index : 改造武器番号 (1〜AEQ_WEAPON_MAX)
  #--------------------------------------------------------------------------
  def self.dispose_weapon(index)
    # 破棄できない場合は戻る
    if index < 1 || index > KGC::AEQ_WEAPON_MAX ||
        $game_party.alter_weapons[index - 1] == nil
      return
    end
    # 指定武器を破棄
    id = $game_party.alter_weapons[index - 1].id
    $game_party.alter_weapons[index - 1] = nil
    $data_weapons[id] = RPG::Weapon2.new
    $game_party.lose_weapon(id, 99)
  end
  #--------------------------------------------------------------------------
  # ○ 改造防具破棄
  #     index : 改造防具番号 (1〜AEQ_ARMOR_MAX)
  #--------------------------------------------------------------------------
  def self.dispose_armor(index)
    # 破棄できない場合は戻る
    if index < 1 || index > KGC::AEQ_ARMOR_MAX ||
        $game_party.alter_armors[index - 1] == nil
      return
    end
    # 指定防具を破棄
    id = $game_party.alter_armors[index - 1].id
    $game_party.alter_armors[index - 1] = nil
    $data_armors[id] = RPG::Armor2.new
    $game_party.lose_armor(id, 99)
  end
  #--------------------------------------------------------------------------
  # ○ 指定IDの武器と、それを改造した武器をすべて破棄
  #     id : 武器ID
  #--------------------------------------------------------------------------
  def self.dispose_all_weapon(id)
    weapons = $game_party.alter_weapons.find_all { |w|
      w != nil && w.original_id == id
    }
    weapons.each { |w|
      index = $game_party.alter_weapons.index(w) + 1
      dispose_weapon(index)
    }
    $game_party.lose_weapon(id, 99)
  end
  #--------------------------------------------------------------------------
  # ○ 指定IDの防具と、それを改造した防具をすべて破棄
  #     id : 防具ID
  #--------------------------------------------------------------------------
  def self.dispose_all_armor(id)
    armors = $game_party.alter_armors.find_all { |a|
      a != nil && a.original_id == id
    }
    armors.each { |a|
      index = $game_party.alter_armors.index(a) + 1
      dispose_armor(index)
    }
    $game_party.lose_armor(id, 99)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ 武器・防具 共用モジュール
#==============================================================================

module KGC_AlterEquipment_WA
  #--------------------------------------------------------------------------
  # ○ オリジナル名取得
  #--------------------------------------------------------------------------
  def original_name
    return @name
  end
  #--------------------------------------------------------------------------
  # ○ 改造可能回数取得
  #--------------------------------------------------------------------------
  def alterable_count
    return original_name =~ /#{KGC::STT}ALT[ ]*(\d+)#{KGC::FIN}/i ? $1.to_i : 
               KGC::AEQ_ALTERABLE_COUNT[$game_system.max_alter]
  end
end

module KGC_AlterEquipment_WA2
  attr_writer :change_name
  #--------------------------------------------------------------------------
  # ○ 改造回数を除去した名称取得
  #--------------------------------------------------------------------------
  def plain_name
    if KGC::AEQ_SHOW_ALTER_COUNT
      rg = (KGC::AEQ_ALTER_COUNT_FORMAT.gsub(/(.*){n}/i) {
        "[#{$1}]{#{$1.scan(/./).size}}\\d+"
      }).gsub(/\-/) {"\-"}
      return name.gsub(%r(#{rg}$)i) {""}
    else
      return name
    end
  end
  #--------------------------------------------------------------------------
  # ○ 残り改造可能回数取得
  #--------------------------------------------------------------------------
  def alterable_count
    return (@name =~ /#{KGC::STT}ALT[ ]*(\d+)#{KGC::FIN}/i ? $1.to_i : 
               KGC::AEQ_ALTERABLE_COUNT[$game_system.max_alter]) - @alter_count
  end
  #--------------------------------------------------------------------------
  # ○ オリジナルID取得
  #--------------------------------------------------------------------------
  def original_id
    return @original_id
  end
  #--------------------------------------------------------------------------
  # ○ 改造回数取得
  #--------------------------------------------------------------------------
  def alter_count
    @alter_count = 0 if @alter_count == nil
    return @alter_count
  end
  #--------------------------------------------------------------------------
  # ○ 改造回数加算
  #--------------------------------------------------------------------------
  def add_alter_count
    @alter_count = 0 if @alter_count == nil
    @alter_count += 1
    self.show_alter_count
  end
end

# Silfeed Arks様のスクリプトと併用?
class Game_System
  attr_accessor :weapon_data              # 武器のカスタムデータ群
  attr_accessor :armor_data               # 防具のカスタムデータ群
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::Weapon
#==============================================================================

class RPG::Weapon
  include KGC_AlterEquipment_WA
  #--------------------------------------------------------------------------
  # ● 名称取得
  #--------------------------------------------------------------------------
  def name
    return @name.gsub(/#{KGC::STT}.*#{KGC::FIN}/) {""}
  end
  #--------------------------------------------------------------------------
  # ○ 回避修正
  #--------------------------------------------------------------------------
  def eva
    return 0
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::Armor
#==============================================================================

class RPG::Armor
  include KGC_AlterEquipment_WA
  #--------------------------------------------------------------------------
  # ● 名称取得
  #--------------------------------------------------------------------------
  def name
    return @name.gsub(/#{KGC::STT}.*#{KGC::FIN}/) {""}
  end
  #--------------------------------------------------------------------------
  # ○ 攻撃力
  #--------------------------------------------------------------------------
  def atk
    return 0
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ RPG::Weapon2
#==============================================================================

class RPG::Weapon2 < RPG::Weapon
  include KGC_AlterEquipment_WA2
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super
    @eva = 0

    @original_id = 0
    @original_price = 0
    @alter_count = 0
  end
  #--------------------------------------------------------------------------
  # ● 名称取得
  #--------------------------------------------------------------------------
  def name
    return @name.gsub(/#{KGC::STT}.*#{KGC::FIN}/) {""}
  end
  #--------------------------------------------------------------------------
  # ○ 回避修正
  #--------------------------------------------------------------------------
  def eva
    @eva = 0 if @eva == nil
    return @eva
  end
  #--------------------------------------------------------------------------
  # ○ 改造費用算出
  #--------------------------------------------------------------------------
  def alter_cost(factor)
    if @original_price == 0
      formula = KGC::AEQ_WEAPON_PRICE_FORMULA.dup
      formula.gsub!(/atk/i)   {"@atk"}
      formula.gsub!(/pdef/i)  {"@pdef"}
      formula.gsub!(/mdef/i)  {"@mdef"}
      formula.gsub!(/eva/i)   {""}
      formula.gsub!(/str_p/i) {"@str_plus"}
      formula.gsub!(/dex_p/i) {"@dex_plus"}
      formula.gsub!(/agi_p/i) {"@agi_plus"}
      formula.gsub!(/int_p/i) {"@int_plus"}
      cost = eval(formula)
    else
      cost = @original_price
    end
    cost = cost * factor[3] / 100
    return Integer(cost)
  end
  #--------------------------------------------------------------------------
  # ○ ファクター付加可否
  #--------------------------------------------------------------------------
  def can_add_factor?(factor)
    # 付加済み判定
    (0...factor[2].size).each { |i|
      case factor[2][i][0]
      when 0  # 属性
        if @element_set.include?(factor[2][i][1])
          #return false
          return AEQ_ALREADY
        end
      when 1  # ステート付加
        if @plus_state_set.include?(factor[2][i][1])
          #return false
          return AEQ_ALREADY
        end
      when 2  # ステート解除
        if @minus_state_set.include?(factor[2][i][1])
          #return false
          return AEQ_ALREADY
        end
      end
    }
    # 価格判定
    if $game_party.gold < self.alter_cost(factor)
      #return false
      return AEQ_FALSE
    end
    # アイテム所持判定
    (4...factor.size).each { |i|
      if $game_party.item_number(factor[i][0]) < factor[i][1]
        #return false
        return AEQ_FALSE
      end
    }
    #return true
    return AEQ_TRUE
  end
  #--------------------------------------------------------------------------
  # ○ ファクター付加
  #--------------------------------------------------------------------------
  def add_factor(factor)
    (0...factor[2].size).each { |i|
      # ファクターを付加
      case factor[2][i][0]
      when 0  # 属性
        @element_set.push(factor[2][i][1])
        # 命中精度の場合、排他的に付加する
        if factor[2][i][1] >= 55 && factor[2][i][1] <= 59
          for j in 55..59
            if factor[2][i][1] != j
              @element_set.delete(j)
            end
          end
        end
        @element_set.sort!
      when 1  # ステート付加
        @plus_state_set.push(factor[2][i][1])
        @plus_state_set.sort!
      when 2  # ステート解除
        @minus_state_set.push(factor[2][i][1])
        @minus_state_set.sort!
      when 3  # 能力値
        if factor[2][i].size == 1
          get_root = factor[1]
          #           atk   , pdef  , mdef  , str   , dex   , agi   , int   , 
          #           eva
          add_list = [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], 
                      [0, 0]]
          words = [KGC::AEQ_ATK, KGC::AEQ_PDEF, KGC::AEQ_MDEF, KGC::AEQ_STR, 
                   KGC::AEQ_DEX, KGC::AEQ_AGI, KGC::AEQ_INT, KGC::AEQ_EVA]
          
          for i in 0...add_list.size
            add_list[i][0] = get_root =~ 
                /\[#{words[i]}を[ ]*([0-9]+)(%|%)\]/i ? $1.to_i : 0
            add_list[i][1] = get_root =~ 
                /\[#{words[i]}を[ ]*([0-9]+)(Pt|Pt)\]/i ? $1.to_i : 0
          end

          root_list = [@atk, @pdef, @mdef, @str_plus, @dex_plus, @agi_plus, 
                       @int_plus, @eva]
          
          for i in 0...add_list.size
            if(add_list[i][0] != 0 && root_list[i] == 0)
              add_list[i][0] = KGC::AEQ_ROOT_PLUS_VALUE
            else
              add_list[i][0] = root_list[i] * add_list[i][0] / 100
            end
          end
          
          @atk      += add_list[0][0] + add_list[0][1]
          @pdef     += add_list[1][0] + add_list[1][1]
          @mdef     += add_list[2][0] + add_list[2][1]
          @str_plus += add_list[3][0] + add_list[3][1]
          @dex_plus += add_list[4][0] + add_list[4][1]
          @agi_plus += add_list[5][0] + add_list[5][1]
          @int_plus += add_list[6][0] + add_list[6][1]
          @eva      += add_list[7][0] + add_list[7][1]
        else
          return if (state = $data_states[factor[2][i][1]]) == nil
          if state.original_name =~ /#{KGC::STT}EQAL[ ]*(?:%|%)#{KGC::FIN}/i
            @atk += @atk * state.atk_rate / 100
            @pdef += @pdef * state.pdef_rate / 100
            @mdef += @mdef * state.mdef_rate / 100
            @eva += @eva * state.eva / 100
            @str_plus += @str_plus * state.str_rate / 100
            @dex_plus += @dex_plus * state.dex_rate / 100
            @agi_plus += @agi_plus * state.agi_rate / 100
            @int_plus += @int_plus * state.int_rate / 100
          else
            @atk += state.atk_rate
            @pdef += state.pdef_rate
            @mdef += state.mdef_rate
            @eva += state.eva
            @str_plus += state.str_rate
            @dex_plus += state.dex_rate
            @agi_plus += state.agi_rate
            @int_plus += state.int_rate
          end
        end
      end
    }
    # 金消費
    $game_party.lose_gold(self.alter_cost(factor))
    # アイテム消費
    (4...factor.size).each { |i|
      $game_party.lose_item(factor[i][0], factor[i][1])
    }
    # 改造回数加算
    self.add_alter_count
  end
  #--------------------------------------------------------------------------
  # ○ 武器情報をコピー
  #--------------------------------------------------------------------------
  def copy_weapon(id)
    weapon = $data_weapons[id]
    # Silfeed Arks様のスクリプトと併用?
    $game_system.weapon_data[id] = $data_weapons[id]
    @original_id = id
    @change_name = nil
    self.show_alter_count
    @icon_name = weapon.icon_name.dup
    @description = weapon.description.dup
    @animation1_id = weapon.animation1_id
    @animation2_id = weapon.animation2_id
    @price = 0
    @original_price = weapon.price
    @atk = weapon.atk
    @pdef = weapon.pdef
    @mdef = weapon.mdef
    @eva = 0
    @str_plus = weapon.str_plus
    @dex_plus = weapon.dex_plus
    @agi_plus = weapon.agi_plus
    @int_plus = weapon.int_plus
    @element_set = weapon.element_set.dup
    @plus_state_set = weapon.plus_state_set.dup
    @minus_state_set = weapon.minus_state_set.dup
    # 装備可能者を設定
    (1...$data_classes.size).each { |i|
      actor_class = $data_classes[i]
      # 改造対象の武器を装備できるクラスの場合
      if actor_class.weapon_set.include?(id)
        # 装備可能武器に追加
        actor_class.weapon_set.push(@id)
      else
        # 装備できない場合は装備可能武器から削除
        actor_class.weapon_set.delete(@id)
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 改造回数表示
  #--------------------------------------------------------------------------
  def show_alter_count
    @name = (@change_name != nil ? @change_name :
      $data_weapons[@original_id].original_name).dup
    if KGC::AEQ_SHOW_ALTER_COUNT
      if @alter_count > 0
        @name += KGC::AEQ_ALTER_COUNT_FORMAT.gsub(/{n}/i) {"#{@alter_count}"}
      end
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ RPG::Armor2
#==============================================================================

class RPG::Armor2 < RPG::Armor
  include KGC_AlterEquipment_WA2
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super
    @atk = 0

    @original_id = 0
    @original_price = 0
    @alter_count = 0
  end
  #--------------------------------------------------------------------------
  # ● 名称取得
  #--------------------------------------------------------------------------
  def name
    return @name.gsub(/#{KGC::STT}.*#{KGC::FIN}/) {""}
  end
  #--------------------------------------------------------------------------
  # ○ 攻撃力
  #--------------------------------------------------------------------------
  def atk
    @atk = 0 if @atk == nil
    return @atk
  end
  #--------------------------------------------------------------------------
  # ○ 改造費用算出
  #--------------------------------------------------------------------------
  def alter_cost(factor)
    if @original_price == 0
      formula = KGC::AEQ_ARMOR_PRICE_FORMULA.dup
      formula.gsub!(/atk/i)   {""}
      formula.gsub!(/pdef/i)  {"@pdef"}
      formula.gsub!(/mdef/i)  {"@mdef"}
      formula.gsub!(/eva/i)   {"@eva"}
      formula.gsub!(/str_p/i) {"@str_plus"}
      formula.gsub!(/dex_p/i) {"@dex_plus"}
      formula.gsub!(/agi_p/i) {"@agi_plus"}
      formula.gsub!(/int_p/i) {"@int_plus"}
      cost = eval(formula)
    else
      cost = @original_price
    end
    cost = cost * factor[3] / 100
    return Integer(cost)
  end
  include KGC
  #--------------------------------------------------------------------------
  # ○ ファクター付加可否
  #--------------------------------------------------------------------------
  def can_add_factor?(factor)
    # 付加済み判定
    (0...factor[2].size).each { |i|
      case factor[2][i][0]
      when 0  # 防御属性
        if @guard_element_set.include?(factor[2][i][1])
          #return false
          return AEQ_ALREADY
        end
      when 1  # 防御ステート
        if @guard_state_set.include?(factor[2][i][1])
          #return false
          return AEQ_ALREADY
        end
      end
    }
    # 価格判定
    if $game_party.gold < self.alter_cost(factor)
      #return false
      return AEQ_FALSE
    end
    # アイテム所持判定
    (4...factor.size).each { |i|
      if $game_party.item_number(factor[i][0]) < factor[i][1]
        #return false
        return AEQ_FALSE
      end
    }
    #return true
    return AEQ_TRUE 
  end
  #--------------------------------------------------------------------------
  # ○ ファクター付加
  #--------------------------------------------------------------------------
  def add_factor(factor)
    # 金消費
    $game_party.lose_gold(self.alter_cost(factor))
    # アイテム消費
    (4...factor.size).each { |i|
      $game_party.lose_item(factor[i][0], factor[i][1])
    }
    (0...factor[2].size).each { |i|
      # ファクターを付加
      case factor[2][i][0]
      when 0  # 防御属性
        for i in 0...KGC::AEQ_INVERCE_ADD.size
          if @guard_element_set.include?(KGC::AEQ_INVERCE_ADD[i][1])
            if factor[2][i][1] == KGC::AEQ_INVERCE_ADD[i][0]
              @guard_element_set.delete(KGC::AEQ_INVERCE_ADD[i][1])
              break
            end
          else
            @guard_element_set.push(factor[2][i][1])
            break
          end
        end
        @guard_element_set.sort!
      when 1  # 防御ステート
        @guard_state_set.push(factor[2][i][1])
        @guard_state_set.sort!
      when 2  # 能力値
        if factor[2][i].size == 1
          get_root = factor[1]
          #           pdef  , mdef  , eva   , str   , dex   , agi   , int
          add_list = [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
          words = [KGC::AEQ_PDEF, KGC::AEQ_MDEF, KGC::AEQ_EVA, KGC::AEQ_STR, 
                   KGC::AEQ_DEX, KGC::AEQ_AGI, KGC::AEQ_INT]
                   
          
          for i in 0...add_list.size
            add_list[i][0] = get_root =~ 
                /\[#{words[i]}を[ ]*([0-9]+)(%|%)\]/i ? $1.to_i : 0
            add_list[i][1] = get_root =~ 
                /\[#{words[i]}を[ ]*([0-9]+)(Pt|Pt)\]/i ? $1.to_i : 0
          end

          root_list = [@pdef, @mdef, @eva, @str_plus, @dex_plus, @agi_plus, 
                       @int_plus]
          
          for i in 0...add_list.size
            if(add_list[i][0] != 0 && root_list[i] == 0)
              add_list[i][0] = KGC::AEQ_ROOT_PLUS_VALUE
            else
              add_list[i][0] = root_list[i] * add_list[i][0] / 100
            end
          end
          
          @pdef     += add_list[0][0] + add_list[0][1]
          @mdef     += add_list[1][0] + add_list[1][1]
          @eva      += add_list[2][0] + add_list[2][1]
          @str_plus += add_list[3][0] + add_list[3][1]
          @dex_plus += add_list[4][0] + add_list[4][1]
          @agi_plus += add_list[5][0] + add_list[5][1]
          @int_plus += add_list[6][0] + add_list[6][1]
        else
          return if (state = $data_states[factor[2][i][1]]) == nil
          if state.original_name =~ /#{KGC::STT}EQAL[ ]*(?:%|%)#{KGC::FIN}/i
            @atk      += @atk * state.atk_rate / 100
            @pdef     += @pdef * state.pdef_rate / 100
            @mdef     += @mdef * state.mdef_rate / 100
            @eva      += @eva * state.eva / 100
            @str_plus += @str_plus * state.str_rate / 100
            @dex_plus += @dex_plus * state.dex_rate / 100
            @agi_plus += @agi_plus * state.agi_rate / 100
            @int_plus += @int_plus * state.int_rate / 100
          else
            @atk      += state.atk_rate
            @pdef     += state.pdef_rate
            @mdef     += state.mdef_rate
            @eva      += state.eva
            @str_plus += state.str_rate
            @dex_plus += state.dex_rate
            @agi_plus += state.agi_rate
            @int_plus += state.int_rate
          end
        end
      end
    }
    # 改造回数加算
    self.add_alter_count
  end
  include MINTO
  #--------------------------------------------------------------------------
  # ○ 防具情報をコピー
  #--------------------------------------------------------------------------
  def copy_armor(id)
    armor = $data_armors[id]
    # Silfeed Arks様のスクリプトと併用?
    $game_system.armor_data[id] = $data_armors[id]
    @original_id = id
    @change_name = nil
    self.show_alter_count
    @icon_name = armor.icon_name.dup
    @description = armor.description.dup
    @kind = armor.kind
    @auto_state_id = armor.auto_state_id
    @price = 0
    @original_price = armor.price
    @atk = 0
    @pdef = armor.pdef
    @mdef = armor.mdef
    @eva = armor.eva
    @str_plus = armor.str_plus
    @dex_plus = armor.dex_plus
    @agi_plus = armor.agi_plus
    @int_plus = armor.int_plus
    @guard_element_set = armor.guard_element_set.dup
    @guard_state_set = armor.guard_state_set.dup
    # 装備可能者を設定
    (1...$data_classes.size).each { |i|
      actor_class = $data_classes[i]
      # 改造対象の武器を装備できるクラスの場合
      if actor_class.armor_set.include?(id)
        # 装備可能武器に追加
        actor_class.armor_set.push(@id)
      else
        # 装備できない場合は装備可能武器から削除
        actor_class.armor_set.delete(@id)
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 改造回数表示
  #--------------------------------------------------------------------------
  def show_alter_count
    @name = (@change_name != nil ? @change_name :
      $data_armors[@original_id].original_name).dup
    if KGC::AEQ_SHOW_ALTER_COUNT
      if @alter_count > 0
        @name += KGC::AEQ_ALTER_COUNT_FORMAT.gsub(/{n}/i) {"#{@alter_count}"}
      end
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::State
#==============================================================================

class RPG::State
  #--------------------------------------------------------------------------
  # ● 名前の取得
  #--------------------------------------------------------------------------
  def name
    return @name.gsub(/#{KGC::STT}.*#{KGC::FIN}/) {""}
  end
  #--------------------------------------------------------------------------
  # ○ オリジナル名取得
  #--------------------------------------------------------------------------
  def original_name
    return @name
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

class Game_System
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :max_alter
end

#==============================================================================
# ■ Game_Temp
#==============================================================================

class Game_Temp
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :equipment_alter_rename
  attr_accessor :equipment_alter_rename_type
  attr_accessor :equipment_alter_rename_id
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_AlterEquipment initialize
  def initialize
    initialize_KGC_AlterEquipment

    @equipment_alter_rename = false
    @equipment_alter_rename_type = 0
    @equipment_alter_rename_id = 0
    $game_system.max_alter = 0
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 回避修正の取得
  #--------------------------------------------------------------------------
  alias eva_KGC_AlterEquipment eva
  def eva
    n = eva_KGC_AlterEquipment
    if self.is_a?(Game_Actor)
      # 改造した武器の回避修正を加算
      equip_weapon_list.each { |weapon| n += weapon.eva }
    end
    return n
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 基本攻撃力の取得
  #--------------------------------------------------------------------------
  alias base_atk_KGC_AlterEquipment base_atk
  def base_atk
    n = base_atk_KGC_AlterEquipment

    # 改造した防具の攻撃力を加算
    equip_armor_list.each { |armor| n += armor.atk }
    return n
  end

  unless $imported["EquipExtension"]
  #--------------------------------------------------------------------------
  # ○ 装備武器リストの取得
  #--------------------------------------------------------------------------
  def equip_weapon_list
    result = [$data_weapons[@weapon_id]]
    return result.compact
  end
  #--------------------------------------------------------------------------
  # ○ 装備防具リストの取得
  #--------------------------------------------------------------------------
  def equip_armor_list
    result = []
    (1..4).each { |i| result << $data_armors[eval("@armor#{i}_id")] }
    return result.compact
  end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Party
#==============================================================================

class Game_Party
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_AlterEquipment initialize
  def initialize
    initialize_KGC_AlterEquipment

    @alter_weapons = []
    @alter_armors = []
  end
  #--------------------------------------------------------------------------
  # ○ 改造装備取得
  #--------------------------------------------------------------------------
  def alter_weapons
    @alter_weapons = [] if @alter_weapons == nil
    return @alter_weapons
  end
  #--------------------------------------------------------------------------
  # ○ 改造装備設定
  #--------------------------------------------------------------------------
  def alter_weapons=(ary)
    @alter_weapons = [] if @alter_weapons == nil
    @alter_weapons = ary
  end
  #--------------------------------------------------------------------------
  # ○ 改造防具取得
  #--------------------------------------------------------------------------
  def alter_armors
    @alter_armors = [] if @alter_armors == nil
    return @alter_armors
  end
  #--------------------------------------------------------------------------
  # ○ 改造防具設定
  #--------------------------------------------------------------------------
  def alter_armors=(ary)
    @alter_armors = [] if @alter_armors == nil
    @alter_armors = ary
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Window_AlterEquipmentCommand
#------------------------------------------------------------------------------
#  装備改造画面で、操作を選択するウィンドウです。
#==============================================================================

class Window_AlterEquipmentCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 64 + 32, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @commands = [KGC::AEQ_COMMAND_WEAPON_ALTER, KGC::AEQ_COMMAND_WEAPON_DISPOSE,
                 KGC::AEQ_COMMAND_ARMOR_ALTER,  KGC::AEQ_COMMAND_ARMOR_DISPOSE]
    @item_max = @commands.size
    @column_max = @commands.size
    @item_width = (width - 32) / @commands.size
    self.z = 1000
    self.index = 0
    refresh
  end
  include RUBY_SYS
  include DIAMOND
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    for i in 0...@commands.size
      rect = Rect.new(@item_width * i, 0, @item_width, 32)
      self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
      draw_shadow_text([@item_width * i, 0, @item_width, 32], @commands[i], 
                       system_color, 1)
    end
  end
  #--------------------------------------------------------------------------
  # ● カーソルの矩形更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if index != -1
      self.cursor_rect.set(@item_width * index, 0, @item_width, 32)
    end
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    case self.index
    when 0
      @help_window.set_text(KGC::AEQ_HELP_WEAPON_ALTER)
    when 1
      @help_window.set_text(KGC::AEQ_HELP_WEAPON_DISPOSE)
    when 2
      @help_window.set_text(KGC::AEQ_HELP_ARMOR_ALTER)
    when 3
      @help_window.set_text(KGC::AEQ_HELP_ARMOR_DISPOSE)
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Window_AlterEquipmentLeft
#------------------------------------------------------------------------------
#  装備改造画面で、改造する装備スロットの一覧を表示するウィンドウです。
#==============================================================================

class Window_AlterEquipmentLeft < Window_Selectable
  include VDI
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 128 - 32, 320, 352)
    self.active = false
    self.index = -1
    self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
    @column_max = 1
    
    @draw_item_num = 2     # 一度に描画する数(必ずしも2である必要はない)
    @draw_ok = Array.new() # 描画完了フラグ配列
    @draw_type = 0
    
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ 装備の取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(type = 0)
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    
    @draw_counter = 0
    reset_array
    
    @data = []
    # スロット一覧を作成
    case type
    when 0
      for i in 0...KGC::AEQ_WEAPON_MAX
        weapon = $game_party.alter_weapons[i]
        @data.push(weapon)
      end
    when 1
      for i in 0...KGC::AEQ_ARMOR_MAX
        armor = $game_party.alter_armors[i]
        @data.push(armor)
      end
    end
    @draw_type = type
    # ビットマップを作成し、全項目を描画
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)

    draw_item_v
  end
  include RUBY_SYS
  include DIAMOND
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  #def draw_item(index, type)
  def draw_item(index)
    return if @data == nil
    item = @data[index]
    x = 36
    y = index * 32
    draw_shadow_text([x - 32, y, 32, 32], (index + 1).to_s, text_color(6), 1)
    if item != nil
      case item
      when RPG::Weapon
        number = $game_party.weapon_number(item.id)
      when RPG::Armor
        number = $game_party.armor_number(item.id)
      end
      ac = item.alterable_count
      if number > 0 && ac != 0
        dflg = true
      else
        dflg = ac != 0 ? true : false
      end
      icon = RPG::Cache.icon(item.icon_name)
      self.contents.blt(x, y + 4, icon, icon.rect, opacity)
      text = transfer(item.name)
      draw_shadow_text([x + 28, y], text, normal_color, 0, dflg)
    else

      case @draw_type
      when 0
        text = KGC::AEQ_TEXT_NO_WEAPON
      when 1
        text = KGC::AEQ_TEXT_NO_ARMOR
      end
      draw_shadow_text([x, y, 256, 32], text, normal_color, 1, dflg)
    end
  end
  include BM
  #--------------------------------------------------------------------------
  # ○ 項目の再描画
  #--------------------------------------------------------------------------
  def redraw_item(index, type)
    case type
    when 0
      @data[index] = $game_party.alter_weapons[index]
    when 1
      @data[index] = $game_party.alter_armors[index]
    end
    self.contents.fill_rect(0, index * 32, 288, 32, BM::NILCOLOR)
    self.draw_item(index)
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Window_AlterEquipmentRight
#------------------------------------------------------------------------------
#  装備改造画面で、所持している装備一覧を表示するウィンドウです。
#==============================================================================

class Window_AlterEquipmentRight < Window_Selectable
  include VDI
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(320, 128 - 32, 320, 352)
    self.active = false
    self.visible = false
    self.index = 0
    self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
    @column_max = 1
    
    @draw_item_num = 2     # 一度に描画する数(必ずしも2である必要はない)
    @draw_ok = Array.new() # 描画完了フラグ配列
    
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ 装備の取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(type = 0)
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    
    @draw_counter = 0
    reset_array
    
    @data = []
    case type
    when 0
      unless KGC::AEQ_EXCLUDE_EQUIP_TYPE.include?(0)
        # 所持している武器を追加
        (1...$alter_weapon_start).each { |i|
          if $game_party.weapon_number(i) > 0 &&
              $data_weapons[i].alterable_count != 0 &&
              !KGC::AEQ_EXCLUDE_WEAPONS.include?(i)
            @data << $data_weapons[i]
          end
        }
      end
    when 1
      # 所持している防具を追加
      (1...$alter_armor_start).each { |i|
        if $game_party.armor_number(i) > 0 &&
            $data_armors[i].alterable_count != 0 &&
            !KGC::AEQ_EXCLUDE_ARMORS.include?(i) &&
            !KGC::AEQ_EXCLUDE_EQUIP_TYPE.include?($data_armors[i].kind + 1)
          @data << $data_armors[i]
        end
      }
    end
    # 個数が 0 の場合は nil を追加
    @data.push(nil) if @data.size == 0
    # ビットマップを作成し、全項目を描画
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)

    draw_item_v
  end
  include RUBY_SYS
  include DIAMOND
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  #def draw_item(index, type)
  def draw_item(index)
    return if @data == nil
    item = @data[index]
    return if item == nil
    x = 4
    y = index * 32
    icon = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, icon, icon.rect)
    text = transfer(item.name)
    draw_shadow_text([x + 28, y], text)
    case item
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    draw_shadow_text([x + 244, y, 16, 32], ":", normal_color, 1)
    draw_shadow_text([x + 260, y, 24, 32], number.to_s, normal_color, 2)
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Window_AlterEquipmentStatus
#------------------------------------------------------------------------------
#  装備改造画面で、選択した装備の能力を表示するウィンドウです。
#==============================================================================

class Window_AlterEquipmentStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(320, 128 - 32, 320, 352)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
    self.z = 500
    refresh(nil)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(item, factor = nil)
    self.contents.clear
    if factor == nil  # アイテムステータス
      return if item == nil || item.name == ""
      draw_parameter(item, factor)
      draw_element(item, factor)
      draw_state(item, factor)
    else  # 素材アイテム数
      return if factor == nil
      draw_material(item, factor)
    end
  end
  include RUBY_SYS
  include DIAMOND
  include BM
  include MINTO
  #--------------------------------------------------------------------------
  # ○ パラメータ描画
  #--------------------------------------------------------------------------
  def draw_parameter(item, factor)
    self.contents.font.size = 20
    if item.is_a?(RPG::Weapon)
      draw_shadow_text([  4,  0, 80, 32], Vocab::atk,  system_color)
      draw_shadow_text([148,  0, 80, 32], Vocab::pdef, system_color)
      draw_shadow_text([  4, 24, 80, 32], Vocab::mdef, system_color)
    else
      draw_shadow_text([  4,  0, 80, 32], Vocab::pdef, system_color)
      draw_shadow_text([148,  0, 80, 32], Vocab::mdef, system_color)
      draw_shadow_text([  4, 24, 80, 32], Vocab::EVA_NAME, system_color)
    end
    draw_shadow_text([148, 24, 80, 32], Vocab::str,  system_color)
    draw_shadow_text([  4, 48, 80, 32], Vocab::dex,  system_color)
    draw_shadow_text([148, 48, 80, 32], Vocab::agi,  system_color)
    draw_shadow_text([  4, 72, 80, 32], Vocab::int,  system_color)
    
    change_eva = item.eva
    if item.is_a?(RPG::Weapon)
      draw_shadow_text([ 84,  0, 80, 32], item.atk.to_s)
      draw_shadow_text([228,  0, 80, 32], item.pdef.to_s)
      draw_shadow_text([ 84, 24, 80, 32], item.mdef.to_s)
    else
      draw_shadow_text([ 84,  0, 80, 32], item.pdef.to_s)
      draw_shadow_text([228,  0, 80, 32], item.mdef.to_s)
      draw_shadow_text([ 84, 24, 80, 32], change_eva.to_s)
    end
    draw_shadow_text([228, 24, 80, 32], item.str_plus.to_s)
    draw_shadow_text([ 84, 48, 80, 32], item.dex_plus.to_s)
    draw_shadow_text([228, 48, 80, 32], item.agi_plus.to_s)
    draw_shadow_text([ 84, 72, 80, 32], item.int_plus.to_s)
  end
  #--------------------------------------------------------------------------
  # ○ 属性描画
  #--------------------------------------------------------------------------
  def draw_element(item, factor)
    ix = 4
    iy = 96 + 18
    self.contents.font.size = 16
    rectr = [32, 96, 160, 20]
    case item
    when RPG::Weapon
      draw_shadow_text(rectr, "攻撃属性", system_color)
      elements = item.element_set.dup
    when RPG::Armor
      draw_shadow_text(rectr, "防御属性", system_color)
      elements = item.guard_element_set.dup
    end
    skip = true
    elements.each { |element|
      
    skip = into_list(KGC::AEQ_ELEMENT_RANGE, element)
    
      next if skip
      text = "[#{$data_system.elements[element]}]"
      cx = self.contents.text_size(text).width
      draw_shadow_text([ix, iy, cx + 8, 20], text)
      ix += cx
      if ix >= 264
        ix = 4
        iy += 18
        if iy >= 114 + 36
          break
        end
      end
    }
if $OuterFlgs["Equip_Extend"]
    ix = 4
    iy = 150 + 18
    draw_shadow_text([32, 150, 160, 20], "特殊", system_color)
    case item
    when RPG::Weapon
      elements = item.element_set.dup
    when RPG::Armor
      elements = item.guard_element_set.dup
    end
    skip = true
    elements.each { |element|
      
    skip = into_list(KGC::AEQ_ELEMENT_RANGE2, element)
    
      next if skip
      text = "[#{$data_system.elements[element]}]"
      text.gsub!(/無:ターンの最初に先制攻撃/i) { "先制" }
      text.gsub!(/無:一度に2回攻撃/i)      { "連撃" }
      text.gsub!(/無:一度に敵全体を攻撃/i)  { "全体" }
      text.gsub!(/無:敵の回避率を無視/i)    { "直撃" }
      text.gsub!(/無:必殺防止/i)            { "必殺防止" }
      text.gsub!(/無:SP消費半分/i)        { "SP消費軽減" }
      text.gsub!(/無:SP消費増加/i)        { "SP消費増加" }
      text.gsub!(/無:吸収/i)                { "吸収" }
    
      cx = self.contents.text_size(text).width
      draw_shadow_text([ix, iy, cx + 8, 20], text)
      ix += cx
      if ix >= 264
        ix = 4
        iy += 18
        if iy >= 168 + 18
          break
        end
      end
    }
end
  end
  include DRAW_MSG
  #--------------------------------------------------------------------------
  # ○ ステート性描画
  #--------------------------------------------------------------------------
  def draw_state(item, factor)
    # 付加/防御ステート描画
    ix = 4
    iy = 210 + 18
    self.contents.font.size = 16
    rectr = [32, 210, 160, 20]
    case item
    when RPG::Weapon
      draw_shadow_text(rectr, "付加ステート", system_color)
      states = item.plus_state_set.dup
    when RPG::Armor
      draw_shadow_text(rectr, "防御ステート", system_color)
      states = item.guard_state_set.dup
    end
    skip = true
    states.each { |state|
      
    skip = into_list(KGC::AEQ_STATE_RANGE, state)
    
      next if skip
      text = "[#{$data_states[state].name}]"
      text = del_change_color(transfer(text))
      cx = self.contents.text_size(text).width
      draw_shadow_text([ix, iy], text)
      ix += cx
      if ix >= 264
        ix = 4
        iy += 18
        if iy >= 228 + 36
          break
        end
      end
    }
    return if (item.is_a?(RPG::Armor) || !KGC::AEQ_REMOVE_STATE_FLG)
    # 解除ステート描画
    ix = 4
    iy = 264 + 18
    draw_shadow_text([32, 264, 160, 20], "解除ステート", system_color)
    skip = true
    item.minus_state_set.each { |state|
      
    skip = into_list(KGC::AEQ_STATE_RANGE, state)
    
      next if skip
      text = "[#{$data_states[state].name}]"
      text = del_change_color(transfer(text))
      cx = self.contents.text_size(text).width
      draw_shadow_text([ix, iy], text)
      ix += cx
      if ix >= 264
        ix = 4
        iy += 18
        if iy >= 282 + 36
          break
        end
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 素材描画
  #--------------------------------------------------------------------------
  def draw_material(item, factor)
    self.contents.font.size = 14
    draw_shadow_text([232,   4,  48,  32], Vocab::gold, system_color)
    draw_shadow_text([232,  28,  48,  32], Vocab::gold, system_color)
    
    self.contents.font.size = 20
    draw_shadow_text([  4,   0, 128,  32], "所持金", system_color)
    draw_shadow_text([104,   0, 128,  32], $game_party.gold.to_s, normal_color, 
                     2)
    
    draw_shadow_text([  4,  24, 128,  32], "改造費用", system_color)
    draw_shadow_text([104,  24, 128,  32], item.alter_cost(factor).to_s, 
                     normal_color, 2)
    
    draw_shadow_text([  4,  48, 128,  32], "消費アイテム", system_color)
    
    for i in 4...factor.size
      self.contents.font.size = 20
      text = $data_items[factor[i][0]].name
      text = transfer(text)
      icon = RPG::Cache.icon($data_items[factor[i][0]].icon_name)
      self.contents.blt(4, 72 + 4 + 2 + (i - 4) * 48, icon, icon.rect)
      draw_shadow_text([ 32,  72 + 2 + (i - 4) * 48], text)
      
      self.contents.font.size = 14
      draw_shadow_text([ 96, 96 + (i - 4) * 48,  80,  32], "必要数", 
                       system_color)
      draw_shadow_text([196, 96 + (i - 4) * 48,  80,  32], Vocab::STAND_WORD, 
                       system_color)
      
      draw_shadow_text([124, 96 + (i - 4) * 48,  48,  32], factor[i][1].to_s, 
                       normal_color, 2)
      draw_shadow_text([224, 96 + (i - 4) * 48,  48,  32], 
                       $game_party.item_number(factor[i][0]).to_s, 
                       normal_color, 2)
    end
    
    self.contents.font.size = 22
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Window_AlterEquipmentFactor
#------------------------------------------------------------------------------
#  装備改造画面で、付加要素一覧を表示するウィンドウです。
#==============================================================================

class Window_AlterEquipmentFactor < Window_Selectable
  include VDI
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(320, 128 - 32, 320, 352)
    @column_max = 1
    self.active = false
    self.visible = false
    self.index = 0
    self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
    
    @draw_item_num = 2     # 一度に描画する数(必ずしも2である必要はない)
    @draw_ok = Array.new() # 描画完了フラグ配列
  end
  #--------------------------------------------------------------------------
  # ○ ファクターの取得
  #--------------------------------------------------------------------------
  def factor
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(item)
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    
    @draw_counter = 0
    reset_array
    # 一番最初、0番目の項目が描画できないので苦肉の策
    if @draw_ok[0]
      @draw_ok[0] = false
    end
    
    @item = item
    @data = []
    # 付加できるファクターを追加
    case item
    when RPG::Weapon
      factors = KGC::AEQ_WEAPON_FACTORS
    when RPG::Armor
      factors = KGC::AEQ_ARMOR_FACTORS
    end
    for i in 0...factors.size
      factor = factors[i]
      next if factor == nil
      @data.push(factor)
    end
    
    # 個数が 0 の場合は nil を追加
    @data.push(nil) if @data.size == 0
    # ビットマップを作成し、全項目を描画
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)
    
    draw_item_v
  end
  include RUBY_SYS
  include DIAMOND
  include KGC
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    return if @data == nil
    factor = @data[index]
    #return if factor == nil
    x = 4
    y = index * 32
    case @item.can_add_factor?(factor)
    when AEQ_FALSE
      dflg = false
      dcolor = normal_color
    when AEQ_TRUE
      dflg = true
      dcolor = normal_color
    when AEQ_ALREADY
      dflg = false
      dcolor = Color.new(196, 255, 196, 255)
    else
      p Err, @item.can_add_factor?(factor)
    end
    
    draw_shadow_text([x, y, 280, 32], factor[0], dcolor, 0, dflg)
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.factor == nil ? "" : self.factor[1])
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Title
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # ● コマンド : ニューゲーム
  #--------------------------------------------------------------------------
  alias command_new_game_KGC_AlterEquipment command_new_game
  def command_new_game
    # 元の処理を実行
    command_new_game_KGC_AlterEquipment

    # 改造装備を初期化
    $alter_weapon_start = $data_weapons.size
    for i in 0...KGC::AEQ_WEAPON_MAX
      $data_weapons[$alter_weapon_start + i] = RPG::Weapon2.new
    end
    $alter_armor_start = $data_armors.size
    for i in 0...KGC::AEQ_ARMOR_MAX
      $data_armors[$alter_armor_start + i] = RPG::Armor2.new
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Load
#==============================================================================

class Scene_Load < Scene_File
  #--------------------------------------------------------------------------
  # ● 決定時の処理
  #--------------------------------------------------------------------------
  alias on_decision_KGC_AlterEquipment on_decision
  def on_decision(filename)
    on_decision_KGC_AlterEquipment(filename)

    return unless FileTest.exist?(filename)  # ファイルが存在しない場合は戻る
    restore_altered_equipment
  end
  #--------------------------------------------------------------------------
  # ○ 改造装備を復元
  #--------------------------------------------------------------------------
  def restore_altered_equipment
    # 改造装備を取得
    $alter_weapon_start = $data_weapons.size
    for i in 0...KGC::AEQ_WEAPON_MAX
      if $game_party.alter_weapons[i] == nil
        $data_weapons[$alter_weapon_start + i] = RPG::Weapon2.new
      else
        $data_weapons[$alter_weapon_start + i] = $game_party.alter_weapons[i]
        weapon = $game_party.alter_weapons[i]
        weapon.show_alter_count
        # 装備可能者を設定
        for i in 1...$data_classes.size
          actor_class = $data_classes[i]
          # 改造対象の武器を装備できるクラスの場合
          if actor_class.weapon_set.include?(weapon.original_id)
            # 装備可能武器に追加
            actor_class.weapon_set.push(weapon.id)
          else
            # 装備できない場合は装備可能武器から削除
            actor_class.weapon_set.delete(weapon.id)
          end
        end
      end
    end
    $alter_armor_start = $data_armors.size
    for i in 0...KGC::AEQ_ARMOR_MAX
      if $game_party.alter_armors[i] == nil
        $data_armors[$alter_armor_start + i] = RPG::Armor2.new
      else
        $data_armors[$alter_armor_start + i] = $game_party.alter_armors[i]
        armor = $game_party.alter_armors[i]
        armor.show_alter_count
        # 装備可能者を設定
        for i in 1...$data_classes.size
          actor_class = $data_classes[i]
          # 改造対象の武器を装備できるクラスの場合
          if actor_class.armor_set.include?(armor.original_id)
            # 装備可能武器に追加
            actor_class.armor_set.push(armor.id)
          else
            # 装備できない場合は装備可能武器から削除
            actor_class.armor_set.delete(armor.id)
          end
        end
      end
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Name
#==============================================================================

class Scene_Name
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  alias main_KGC_AlterEquipment main
  def main
    # 元の処理を実行
    main_KGC_AlterEquipment

    # 装備名変更の場合
    if $game_temp.equipment_alter_rename
      case $game_temp.equipment_alter_rename_type
      when 0
        type = "weapon"
      when 1
        type = "armor"
      end
      equip = eval("$data_#{type}s[$game_temp.equipment_alter_rename_id]")
      equip.change_name = @actor.name.dup
      equip.show_alter_count
      $game_temp.equipment_alter_rename_type = 0
      $game_temp.equipment_alter_rename_id = 0
      $game_temp.equipment_alter_rename = false
      # 装備品改造画面に切り替え
      $scene = Scene_AlterEquipment.new
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Scene_AlterEquipment
#------------------------------------------------------------------------------
#  装備改造画面の処理を行うクラスです。
#==============================================================================

class Scene_AlterEquipment
  
  #--------------------------------------------------------------------------
  # ○ キーヘルプを設定
  #--------------------------------------------------------------------------
  def set_keyhelp1
    @bottomkeyhelp_window.clear
    @bottomkeyhelp_window.add("←→","カテゴリ操作")
    @bottomkeyhelp_window.add("C","決定")
    @bottomkeyhelp_window.add("B","キャンセル")
  end
  #--------------------------------------------------------------------------
  # ○ キーヘルプを設定 2
  #--------------------------------------------------------------------------
  def set_keyhelp2
    @bottomkeyhelp_window.clear
    @bottomkeyhelp_window.add("↑↓","装備品選択")
    @bottomkeyhelp_window.add("C","決定")
    @bottomkeyhelp_window.add("B","キャンセル")
  end
  #--------------------------------------------------------------------------
  # ○ キーヘルプを設定 3
  #--------------------------------------------------------------------------
  def set_keyhelp3
    @bottomkeyhelp_window.clear
    @bottomkeyhelp_window.add("↑↓","付加分選択")
    @bottomkeyhelp_window.add("C","セット")
    @bottomkeyhelp_window.add("B","キャンセル")
  end
  
  
  include BM
  
  def initialize
    @bottomkeyhelp_window = Window_BottomKeyHelp.new
    set_keyhelp1
    $game_system.windowskin_name = "MGS ウィンドウスキン4"
  end
  
  #--------------------------------------------------------------------------
  # ○ メイン処理
  #--------------------------------------------------------------------------
  def main
    @spriteset = Spriteset_Map.new if KGC::AEQ_BACK_TRANSPARENT
    # ウィンドウを作成
    if $imported["HelpExtension"]
      @help_window = Window_HelpExtension.new
    else
      @help_window = Window_Help.new
    end
    @help_window.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
    @command_window = Window_AlterEquipmentCommand.new
    @left_window = Window_AlterEquipmentLeft.new
    @right_window = Window_AlterEquipmentRight.new
    @factor_window = Window_AlterEquipmentFactor.new
    @status_window = Window_AlterEquipmentStatus.new
    # ヘルプウィンドウを関連付け
    @command_window.help_window = @help_window
    @left_window.help_window = @help_window
    @right_window.help_window = @help_window
    @factor_window.help_window = @help_window
    # カーソル位置を設定
    @left_window.index = 0
    @status_window.refresh(@left_window.item)
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @help_window.dispose
    @command_window.dispose
    @left_window.dispose
    @right_window.dispose
    @factor_window.dispose
    @status_window.dispose
    @bottomkeyhelp_window.dispose
    @left_command_window.dispose if @left_command_window != nil
    @right_command_window.dispose if @right_command_window != nil
    @factor_command_window.dispose if @factor_command_window != nil
    @spriteset.dispose if KGC::AEQ_BACK_TRANSPARENT
  end
  #--------------------------------------------------------------------------
  # ○ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    @command_window.refresh
    @left_window.refresh
    @right_window.refresh
    @factor_window.refresh(nil)
    @status_window.refresh(nil)
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  def update
    # ウィンドウを更新
    @command_window.update
    @left_window.update
    @right_window.update
    @factor_window.update
    # コマンドウィンドウがアクティブの場合: update_command を呼ぶ
    if @command_window.active
      set_keyhelp1
      update_command
      return
    end
    # レフトウィンドウがアクティブの場合: update_left を呼ぶ
    if @left_window.active
      @status_window.x = 320
      set_keyhelp2
      update_left
      return
    end
    # ライトウィンドウがアクティブの場合: update_right を呼ぶ
    if @right_window.active
      @status_window.x = 0
      update_right
      return
    end
    # ファクター追加ウィンドウがアクティブの場合: update_factor を呼ぶ
    if @factor_window.active
      @status_window.x = 0
      set_keyhelp3
      update_factor
      return
    end
    # レフトコマンドウィンドウがアクティブの場合: update_left_command を呼ぶ
    if @left_command_window != nil && @left_command_window.active
      update_left_command
      return
    end
    # ライトコマンドウィンドウがアクティブの場合: update_right_command を呼ぶ
    if @right_command_window != nil && @right_command_window.active
      update_right_command
      return
    end
    # ファクターコマンドウィンドウがアクティブの場合: update_factor_command を呼ぶ
    if @factor_command_window != nil && @factor_command_window.active
      update_factor_command
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (コマンドウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_command
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      #@left_window.reset_array
      #@right_window.reset_array
      #@factor_window.reset_array
      # キャンセル SE を演奏
      Sound.play_cancel
      # マップ画面に切り替え
      $game_system.windowskin_name = BM::WINDOW_SKIN_ROOT
      $scene = Scene_Map.new
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # 決定 SE を演奏
      Sound.play_ok
      # レフトウィンドウに切り替え
      case @command_window.index
      when 0..1
        @type = 0
      when 2..3
        @type = 1
      end
      @command_window.deactivate
      @command_window.hide
      @left_window.refresh(@type)
      @left_window.activate
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (レフトウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_left
    # 選択項目が変更された場合
    if @now_sel_left != @left_window.index
      # ステータスウィンドウをリフレッシュ
      @status_window.refresh(@left_window.item)
      @now_sel_left = @left_window.index
    end
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      # コマンドウィンドウに切り替え
      @command_window.activate
      @command_window.show
      @left_window.deactivate
      @now_sel_left = nil
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # コマンドウィンドウの選択肢で分岐
      case @command_window.index
      when 0, 2  # 装備改造の場合
        # 既に改造装備がある場合
        if @left_window.item != nil
          # これ以上改造できない場合
          if @left_window.item.alterable_count == 0
            # ブザー SE を演奏
            Sound.play_buzzer
            return
          end
          # 決定 SE を演奏
          Sound.play_ok
          # ファクター追加ウィンドウをリフレッシュ
          @factor_window.refresh(@left_window.item)
          # ファクター追加ウィンドウに切り替え
          @left_window.deactivate
          @factor_window.activate
          @factor_window.show
        else
          # 決定 SE を演奏
          Sound.play_ok
          # ステータスウィンドウをリフレッシュ
          @status_window.refresh(@right_window.item)
          # ライトウィンドウに切り替え
          @left_window.deactivate
          @right_window.refresh(@type)
          @right_window.activate
          @right_window.show
        end
        @now_sel_left = nil
      when 1, 3  # 改造装備破棄の場合
        # 既に改造装備がある場合
        if @left_window.item != nil &&
            ((@type == 0 && $game_party.weapon_number(@left_window.item.id) >= 1) ||
            (@type == 1 && $game_party.armor_number(@left_window.item.id) >= 1))
          # 決定 SE を演奏
          Sound.play_ok
          # レフトコマンドウィンドウ作成
          @left_command_window = Window_Command.new(256, KGC::AEQ_DISPOSE_COMMAND)
          @left_command_window.back_opacity = 160
          @left_command_window.x = 320 - @left_command_window.width / 2
          @left_command_window.y = 240 - @left_command_window.height / 2
          @left_command_window.z = 1000
          @left_command_window.index = 1
          # レフトコマンドウィンドウに切り替え
          @left_command_window.activate
          @left_window.deactivate
          @now_sel_left = nil
        else
          # ブザー SE を演奏
          Sound.play_buzzer
        end
      end
      return
    end
    # 装備名変更ボタンが押された場合
    if KGC::AEQ_RENAME_BUTTON != nil && Input.trigger?(KGC::AEQ_RENAME_BUTTON)
      item = @left_window.item
      # 既に改造装備がある場合
      if item != nil &&
          ((@type == 0 && $game_party.weapon_number(item.id) >= 1) ||
          (@type == 1 && $game_party.armor_number(item.id) >= 1))
        # 決定 SE を演奏
        Sound.play_ok
        # 名前変更画面に切り替え
        $game_actors[KGC::AEQ_RENAME_ACTOR_ID].name = item.plain_name
        $game_temp.name_actor_id = KGC::AEQ_RENAME_ACTOR_ID
        $game_temp.name_max_char = KGC::AEQ_RENAME_MAX_LENGTH
        $game_temp.equipment_alter_rename_type = @type
        $game_temp.equipment_alter_rename_id = item.id
        $game_temp.equipment_alter_rename = true
        $scene = Scene_Name.new
      else
        # ブザー SE を演奏
        Sound.play_buzzer
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (ライトウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_right
    # 選択項目が変更された場合
    if @now_sel_right != @right_window.index
      # ステータスウィンドウをリフレッシュ
      @status_window.refresh(@right_window.item)
      @now_sel_right = @right_window.index
    end
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      # ステータスウィンドウをリフレッシュ
      @status_window.refresh(@left_window.item)
      # レフトウィンドウに切り替え
      @left_window.activate
      @right_window.deactivate
      @right_window.hide
      @right_window.index = 0
      @now_sel_right = nil
      # ヘルプウィンドウ文字列を消去
      @help_window.set_text("")
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # 空欄を選択した場合
      if @right_window.item == nil
        # ブザー SE を演奏
        Sound.play_buzzer
        return
      end
      # 決定 SE を演奏
      Sound.play_ok
      # ライトコマンドウィンドウ作成
      @right_command_window = Window_Command.new(256, KGC::AEQ_ALTER_COMMAND)
      @right_command_window.back_opacity = 160
      @right_command_window.x = 320 - @right_command_window.width / 2
      @right_command_window.y = 240 - @right_command_window.height / 2
      @right_command_window.z = 1000
      # ライトコマンドウィンドウに切り替え
      @right_command_window.activate
      @right_window.deactivate
      @now_sel_right = nil
      return
    end
  end
  include KGC
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (ファクター追加ウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_factor
    # 選択項目が変更された場合
    if @now_sel_factor != @factor_window.index
      # ステータスウィンドウをリフレッシュ
      @status_window.refresh(@left_window.item, @factor_window.factor)
      @now_sel_factor = @factor_window.index
    end
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      # ステータスウィンドウをリフレッシュ
      @status_window.refresh(@left_window.item)
      # レフトウィンドウに切り替え
      @left_window.activate
      @factor_window.deactivate
      @factor_window.hide
      @factor_window.index = 0
      @now_sel_factor = nil
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      factor = @factor_window.factor
      # nil チェック
      impossible = factor == nil
      # ファクター付加判定
      #impossible |= !@left_window.item.can_add_factor?(factor)
      impossible |= @left_window.item.can_add_factor?(factor) != AEQ_TRUE
      # 付加できない場合
      if impossible
        # ブザー SE を演奏
        Sound.play_buzzer
        return
      end
      # 決定 SE を演奏
      Sound.play_ok
      # ファクターコマンドウィンドウ作成
      @factor_command_window = Window_Command.new(256, KGC::AEQ_FACTOR_COMMAND)
      @factor_command_window.back_opacity = 160
      @factor_command_window.x = 320 - @factor_command_window.width / 2
      @factor_command_window.y = 240 - @factor_command_window.height / 2
      @factor_command_window.z = 1000
      @factor_command_window.index = 1
      # ファクターコマンドウィンドウに切り替え
      @factor_command_window.activate
      @factor_window.deactivate
      @now_sel_factor = nil
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (レフトコマンドウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_left_command
    @left_command_window.update
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      # レフトウィンドウに切り替え
      @left_command_window.dispose
      @left_command_window = nil
      @left_window.activate
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      case @left_command_window.index
      when 0
        # 装備 SE を演奏
        Sound.play_equip
        # 選択した改造装備を削除
        id = @left_window.item.id
        case @type
        when 0
          if KGC::AEQ_REGAIN_FLG
            $game_party.gain_weapon($data_weapons[id].original_id, 1)
          end
          $game_party.alter_weapons[@left_window.index] = nil
          $data_weapons[id] = RPG::Weapon2.new
          $game_party.lose_weapon(id, 99)
        when 1
          if KGC::AEQ_REGAIN_FLG
            $game_party.gain_armor($data_armors[id].original_id, 1)
          end
          $game_party.alter_armors[@left_window.index] = nil
          $data_armors[id] = RPG::Armor2.new
          $game_party.lose_armor(id, 99)
        end
        # 再描画
        @left_window.redraw_item(@left_window.index, @type)
        # レフトウィンドウに切り替え
        @left_command_window.dispose
        @left_command_window = nil
        @left_window.activate
      when 1
        # 決定 SE を演奏
        Sound.play_ok
        # レフトウィンドウに切り替え
        @left_command_window.dispose
        @left_command_window = nil
        @left_window.activate
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (ライトコマンドウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_right_command
    @right_command_window.update
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      # ライトウィンドウに切り替え
      @right_command_window.dispose
      @right_command_window = nil
      @right_window.activate
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      case @right_command_window.index
      when 0
        # 装備 SE を演奏
        Sound.play_equip
        case @type
        when 0
          # 改造する武器を設定
          id = @left_window.index + $alter_weapon_start
          # 武器の内容を設定
          $game_party.alter_weapons[@left_window.index] = RPG::Weapon2.new
          weapon = $game_party.alter_weapons[@left_window.index]
          weapon.id = id
          weapon.copy_weapon(@right_window.item.id)
          $data_weapons[id] = $game_party.alter_weapons[@left_window.index]
          # 改造装備を 1 個取得
          $game_party.gain_weapon(id, 1)
          # 改造対象の武器を削除
          $game_party.lose_weapon(@right_window.item.id, 1)
        when 1
          # 改造する防具を設定
          id = @left_window.index + $alter_armor_start
          # 防具の内容を設定
          $game_party.alter_armors[@left_window.index] = RPG::Armor2.new
          armor = $game_party.alter_armors[@left_window.index]
          armor.id = id
          armor.copy_armor(@right_window.item.id)
          $data_armors[id] = $game_party.alter_armors[@left_window.index]
          # 改造装備を 1 個取得
          $game_party.gain_armor(id, 1)
          # 改造対象の防具を削除
          $game_party.lose_armor(@right_window.item.id, 1)
        end
        # ウィンドウをリフレッシュ
        @left_window.redraw_item(@left_window.index, @type)
        @right_window.refresh(@type)
        @status_window.refresh(@left_window.item)
        # レフトウィンドウに切り替え
        @right_command_window.dispose
        @right_command_window = nil
        @left_window.activate
        @right_window.deactivate
        @right_window.hide
        @right_window.index = 0
        # ヘルプウィンドウ文字列を消去
        @help_window.set_text("")
      when 1
        # 決定 SE を演奏
        Sound.play_ok
        # ライトウィンドウに切り替え
        @right_command_window.dispose
        @right_command_window = nil
        @right_window.activate
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (ファクターコマンドウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_factor_command
    @factor_command_window.update
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      # ファクターウィンドウに切り替え
      @factor_command_window.dispose
      @factor_command_window = nil
      @factor_window.activate
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      case @factor_command_window.index
      when 0
        # 装備 SE を演奏
        Sound.play_equip
        # 装備を改造
        case @type
        when 0
          $game_party.alter_weapons[@left_window.index].add_factor(@factor_window.factor)
        when 1
          $game_party.alter_armors[@left_window.index].add_factor(@factor_window.factor)
        end
        # ウィンドウをリフレッシュ
        @left_window.redraw_item(@left_window.index, @type)
        @status_window.refresh(@left_window.item)
        # レフトウィンドウに切り替え
        @factor_command_window.dispose
        @factor_command_window = nil
        @left_window.activate
        @factor_window.deactivate
        @factor_window.hide
        @factor_window.index = 0
        # ヘルプウィンドウ文字列を消去
        @help_window.set_text("")
      when 1
        # 決定 SE を演奏
        Sound.play_ok
        # ファクターウィンドウに切り替え
        @factor_command_window.dispose
        @factor_command_window = nil
        @factor_window.activate
      end
      return
    end
  end
end
カスタマイズポイント
AEQ_ALTERABLE_COUNT 改造可能回数配列 $game_system.max_alter で指定した部分を最大改造可能数として利用します。 (武器名の [ALT{n}] を省略した場合に使用。また、負数を指定すると何度でも改造可能。)
AEQ_INVERCE_ADD 属性付加で、逆値と相殺の場合のID配列 例えばID:27(SP消費軽減)を付加したいけど、ID:29(SP消費増加)がセットされている場合、 まず、ID:29(SP消費増加)を削除したい・・・など。
STT / FIN カスタマイズ用"カッコ" 別のスクリプトとかを使用しており、"[", "]"が使用不能なのはイタイという場合に。
$game_system.max_alter 最大改造可能数用変数 ゲーム中、この値を変えることで最大改造可能数を変更することが可能です。 AEQ_ALTERABLE_COUNT の個数を超えないでください。

戻る