# VX->VXAceへの変換処理を行うか?
CONVERT_VX_TO_ACE = true
# データベースの変換を行うか?
CONVERT_DB = true
# マップの変換を行うか?
CONVERT_MAP = true
# 旧バージョンでAceへの変換が不十分だったデータを修正するか?
# trueの状態で二回以上実行すると、一部のイベントデータが狂います。
RE_ADJUST_VX_TO_ACE = false
# -*- coding: utf-8 -*-
=begin
★ks_VX→VXAceデータ移行
2011/12/18 一部のイベントデータに移植ミスがあったため、
移植済みデータの修正機能の実装とともに修正更新。
2011/12/17 自然回復しないステートの設定に不備があったので修正。
2011/12/16 細かい設定項目を追加。
2011/12/15 ブツが届いたので移行が不十分な点を修正。
マップが反映されないとか、%系の効果に無茶な値が入ってたりとか。
2011/12/10 20時 スキルや使用アイテムに属性に対応した無駄データが作られていたので削除。
スキルのIDがずらした分変更されてなかったので修正。
2011/12/10 19時 VXの時の属性を保持する際の書式を設定できるように変更。
体験版での使い方を追記。
2011/12/10 18時 アイテムのHP回復効果の変換が違ったっぽいので修正。
ステート関連で幾つか数値的な間違いがあったっぽいので修正。
□===制作・著作===□
MaidensnowOnline 暴兎
見た目にまったく判らないスクリプトなので、著作権表記は必要ありません。
というか変換するとき意外は入れておく必要がないスクリプトです。
□===配置場所===□
スクリプトの一番上にでも設置して使ってください。
□===説明・使用方法===□
1.VXAceのDataフォルダに、VXのDataフォルダの中身を丸ごと投げ込みます。
2.テストプレイを起動して、タイトル画面が出たら終了します。
グラフィックがない関係でcacheのエラーが出る場合もありますが特に問題はありません。
3.プロジェクトを保存せずにエディタを終了します。
4.起動するとデータベースとマップが変換後のものになっています。
注意・初期設定だと元々あったVXAceのデータベースは変換後データで上書きされます。
なお、変換結果が、ファイルに対応した名前でゲームフォルダに生成されます。
このファイルはUTF-8形式のテキストなので、UTF-8形式で開いて読んでください。
※体験版で試す場合は、拡張子を.rbに変更してゲームフォルダに置き、
以下のスクリプトをイベント中で実行してください。
また、2byte文字を含むプロジェクトパスの場合エラーで実行できません。
s = File.expand_path(".")
s.force_encoding('UTF-8')
ss = "/ks_VX-VXAce_converter"
ss.force_encoding('UTF-8')
p s, ss
Kernel.require s + ss
□===使用上の注意===□
・タイルセットは、VXの並びに準じたものを自分で作る必要があります。
・色調変更など、色設定がかかわるイベントコマンドはオブジェクトの都合か、正常に移植されません。
・経験値曲線には対応していません。
・用語などには対応していません。
・職業の能力値成長曲線は同じIDのアクターの能力値成長曲線を使用します。
・魔法防御には精神力と同じ値、アクター・エネミーは更に運に敏捷性と同じ値が入ります。
・スキル・使用アイテムの属性は、設定されている属性のうち一番初めの物に設定されますが、
元の属性はメモ欄に記録されます。
・エリアはリージョンに変換され、重なっている場合は両方と違うリージョン番号になります。
=end
# 設定項目(特に設定しなくても大丈夫)_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
# %sなどが含まれる文字列の変更が必要な場合は、%s以外を編集してください。
# 変換結果のテキストファイルを出力するかの設定
PUT_RESULT = false
# 変換結果のテキストファイルを出力先の相対パス
POUT_DIR = "ext_paramater_log_[%s]_.txt"
# 変換したファイルを出力先のファイル名(相対パス+ファイル名)
# 初期値ではもともとあったAceのデータベースを上書きする設定になっているので注意。
PUT_FILE_NAME = "data/%s2"
# VXのスキルや仕様アイテムの属性をメモに保持する際の書式です。
VX_ELEMENT_STR = "<VX属性 %s>"
class Object
# IDいくつからに旧スキルを入れるか(1,2が通常攻撃、防御となったことを考慮)
# また、3を逃げる、4を何もしないであると仮定して敵の行動を修正します。
# なので1~4を予約番号として、余裕を持って10を初期設定値としています。
# クラスの習得スキル番号をずらす際にも加算されます。
GETA_FOR_SKILLS = 10
# スキル・アイテムを移行する際、基本ダメージの絶対値が1の場合、加算しない
IGNORE_BASE_DAMAGE_1 = true
# ダメージ計算式における旧関係度が100の時の能力値の倍率です
ATK_RATE = 4
SPI_RATE = 2
DEF_RATE = 2
MDF_RATE = 1
# 武器の命中値の+-0と判定される値
DEFAULT_HIT = 95
# VXAceのデフォルトに近いダメージ計算式の表記になります。※trueの場合かなり再現限度が下がる
# 例)ATK_RATE = 4、DEF_RATE = 2 で スキルが打撃関係度50
# (trueの場合) atk * 2 - def * 1
# (falseの場合) atk * 200 / 100 - def * 100 / 100
# 例)SPI_RATE = 2、MDF_RATE = 1 で スキルが精神関係度25(再現度が下がるパターン)
# (trueの場合) mat * 0 - mdf * 0
# (falseの場合) mat * 50 / 100 - mdf * 25 / 100
FORMULA_TYPE_ACE = false
# 旧値を特殊効果に変換する時のコード番号の表(変更不要)
SPECIFY_CODE = Hash.new
SPECIFY_CODE[:@speed] = 33
SPECIFY_CODE[:@element_set] = 11
SPECIFY_CODE[:@element_ranks] = 11
SPECIFY_CODE[:@state_ranks] = 13
SPECIFY_CODE[:@state_set] = 13
SPECIFY_CODE[:@plus_state_set] = 21
SPECIFY_CODE[:@minus_state_set] = 22
EQUIP_ELEMENT_SET_VALUE = Hash.new(0.5)
EQUIP_STATE_SET_VALUE = Hash.new(0)
# 属性有効度のランクをAceの効果変動に変換するときの対応表
RANK_TO_VALUE_E = Hash.new(0=>200, 1=>200, 2=>150, 3=>nil, 4=>50, 5=>0, 6=>0)
# 特定の属性IDだけランクに対応する耐性値を変更したい場合に設定する
RANK_TO_VALUE_E[0] = {0=>200, 1=>200, 2=>150, 3=>nil, 4=>50, 5=>0, 6=>0}
# 状態有効度のランクをAceの効果変動に変換するときの対応表
RANK_TO_VALUE_S = Hash.new(0=>200, 1=>nil, 2=>20, 3=>40, 4=>60, 5=>80, 6=>100)
# 特定のステートIDだけランクに対応する耐性値を変更したい場合に設定する
RANK_TO_VALUE_S[0] = {0=>200, 1=>200, 2=>150, 3=>nil, 4=>50, 5=>0, 6=>0}
# 旧能力値と名前が違う変数の変換表(変更不要)
# ちなみに、ここで変換先が指定されておらず、新しいデータにない値は移植されない。
# (変換前後でキーが変わってなくても、ここで設定されていれば移植される)
CONVERT_TO_ACE_KEYS = {
:@new_data=>nil,
#:@name=>:@item_name, #新旧で変数名が違う場合の表記例
#:@jet =>:@jet, #新しいデータにない値を移植したい場合の表記例
}
# 特殊効果が挿入される配列
def sepecifi_set
#p self.class, @id, *@features
@features ||= []
return @features
end
# 特殊効果としてsepecifi_setの配列に挿入されるデータのクラス(変更不要)
SPECIFY_CLASS = RPG::BaseItem::Feature
end
class RPG::UsableItem
# 旧値を特殊効果に変換する時のコード番号の表(変更不要)
SPECIFY_CODE = Hash.new
SPECIFY_CODE[:@state_set] = 32
SPECIFY_CODE[:@element_set] = 31
SPECIFY_CODE[:@state_set] = 32
EQUIP_ELEMENT_SET_VALUE = Hash.new(0)
EQUIP_STATE_SET_VALUE = Hash.new(0.60)
# 特殊効果が挿入される配列
def sepecifi_set
#p self.class, @id, *@effects
@effects ||= []
return @effects
end
# 特殊効果としてsepecifi_setの配列に挿入されるデータのクラス(変更不要)
SPECIFY_CLASS = RPG::UsableItem::Effect
end
class RPG::Weapon
SPECIFY_CODE = RPG::UsableItem::SPECIFY_CODE.dup
SPECIFY_CODE[:@state_set] = 13
EQUIP_ELEMENT_SET_VALUE = RPG::UsableItem::EQUIP_ELEMENT_SET_VALUE
EQUIP_STATE_SET_VALUE = RPG::UsableItem::EQUIP_STATE_SET_VALUE
end
class RPG::State
SPECIFY_CODE = Hash.new
SPECIFY_CODE[:@state_set] = 14
end
class RPG::Armor
SPECIFY_CODE = RPG::State::SPECIFY_CODE
end
# 設定項目終了_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
class RPG::BaseItem::Feature
def value1=(v)
@value = v
end
def value1
return @value || 0
end
def value2
return 0
end
TO_S = "<%s code:%2s data_id:%3s value:%3d>"
def to_s
return sprintf(TO_S, self.class, @code, @data_id, @value)
end
end
class RPG::UsableItem::Effect
TO_S = "<%s code:%2s data_id:%3s value1:%3d value2:%3d>"
def to_s
return sprintf(TO_S, self.class, @code, @data_id, @value1, @value2)
end
end
class RPG::UsableItem::Damage
TO_S = "<%s type:%1s element_id:%3s variance:%3s critical:%s\n formula:%s>"
def to_s
return sprintf(TO_S, self.class, @type, @element_id, @variance, @critical, @formula)
end
end
module Kernel
@@last_pp_name = ""
COLUMN_STR = "%s %s\r"
CR_STR = "\r/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_\r"
PRINT_LINE_STR = " %s\r"
def pp(*args)
return unless PUT_RESULT
f = File.open(sprintf(POUT_DIR, $filename), "a:UTF-8")
if @@last_pp_name != args[1]
f.write(CR_STR)
f.write(sprintf(COLUMN_STR, *args[0,2]))
@@last_pp_name = args[1]
end
args.shift
args.shift
args.each{|str| f.write(sprintf(PRINT_LINE_STR, str)) }
f.close
end
end
module Kernel
def force_encoding_to_utf_8
return self
end
end
class NilClass
def convert_to_ace
return self
end
end
class String
UTF_8 = 'UTF-8'
def force_encoding_to_utf_8
self.force_encoding(UTF_8) if $VXAce && !self.frozen?
return self
end
def convert_to_ace
return self.force_encoding_to_utf_8
end
end
class TrueClass
def convert_to_ace
return self
end
end
class FalseClass
def convert_to_ace
return self
end
end
class Numeric
def convert_to_ace
return self
end
end
class Table
def convert_to_ace
return self
end
end
class Object
FEATURE_ELEMENT_RATE = 11 # 属性有効度
FEATURE_DEBUFF_RATE = 12 # 弱体有効度
FEATURE_STATE_RATE = 13 # ステート有効度
FEATURE_STATE_RESIST = 14 # ステート無効化
FEATURE_PARAM = 21 # 通常能力値
FEATURE_XPARAM = 22 # 追加能力値
FEATURE_SPARAM = 23 # 特殊能力値
FEATURE_ATK_ELEMENT = 31 # 攻撃時属性
FEATURE_ATK_STATE = 32 # 攻撃時ステート
FEATURE_ATK_SPEED = 33 # 攻撃速度補正
FEATURE_ATK_TIMES = 34 # 攻撃追加回数
FEATURE_STYPE_ADD = 41 # スキルタイプ追加
FEATURE_STYPE_SEAL = 42 # スキルタイプ封印
FEATURE_SKILL_ADD = 43 # スキル追加
FEATURE_SKILL_SEAL = 44 # スキル封印
FEATURE_EQUIP_WTYPE = 51 # 武器タイプ装備
FEATURE_EQUIP_ATYPE = 52 # 防具タイプ装備
FEATURE_EQUIP_FIX = 53 # 装備固定
FEATURE_EQUIP_SEAL = 54 # 装備封印
FEATURE_SLOT_TYPE = 55 # スロットタイプ
FEATURE_ACTION_PLUS = 61 # 行動回数追加
FEATURE_SPECIAL_FLAG = 62 # 特殊フラグ
FEATURE_COLLAPSE_TYPE = 63 # 消滅エフェクト
FEATURE_PARTY_ABILITY = 64 # パーティ能力
#--------------------------------------------------------------------------
# ● 定数(特殊フラグ)
#--------------------------------------------------------------------------
FLAG_ID_AUTO_BATTLE = 0 # 自動戦闘
FLAG_ID_GUARD = 1 # 防御
FLAG_ID_SUBSTITUTE = 2 # 身代わり
FLAG_ID_PRESERVE_TP = 3 # TP持ち越し
#--------------------------------------------------------------------------
# ● 定数(能力強化/弱体アイコンの開始番号)
#--------------------------------------------------------------------------
ICON_BUFF_START = 64 # 強化(16 個)
ICON_DEBUFF_START = 80 # 弱体(16 個)
#--------------------------------------------------------------------------
# ● 定数(使用効果)
#--------------------------------------------------------------------------
EFFECT_RECOVER_HP = 11 # HP 回復
EFFECT_RECOVER_MP = 12 # MP 回復
EFFECT_GAIN_TP = 13 # TP 増加
EFFECT_ADD_STATE = 21 # ステート付加
EFFECT_REMOVE_STATE = 22 # ステート解除
EFFECT_ADD_BUFF = 31 # 能力強化
EFFECT_ADD_DEBUFF = 32 # 能力弱体
EFFECT_REMOVE_BUFF = 33 # 能力強化の解除
EFFECT_REMOVE_DEBUFF = 34 # 能力弱体の解除
EFFECT_SPECIAL = 41 # 特殊効果
EFFECT_GROW = 42 # 成長
EFFECT_LEARN_SKILL = 43 # スキル習得
EFFECT_COMMON_EVENT = 44 # コモンイベント
#--------------------------------------------------------------------------
# ● 定数(特殊効果)
#--------------------------------------------------------------------------
SPECIAL_EFFECT_ESCAPE = 0 # 逃げる
attr_reader :new_data
def convert_to_ace
begin
@new_data = self.class.new
rescue
@new_data = self.class.new(0,0)
rescue
msgbox_p self.class
@new_data = self.class.new
end
$depth += 1
#msgbox_p @id, @name, @new_data.name, @new_data unless @name.nil? || @name.empty? || @id < 41
instance_variables.each{|key|
value = self.instance_variable_get(key)
set_converted_to_ace(@new_data, key, value)
}
unless @new_data.sepecifi_set.nil?
@new_data.sepecifi_set.sort{|a, b|
begin
b.code * 100000000 + b.data_id * 1000000 + b.value1 * 1000 + b.value2 <=>
a.code * 100000000 + a.data_id * 1000000 + a.value1 * 1000 + a.value2
rescue
msgbox_p a, b
end
}
end
#name = @new_data.instance_variable_get(:@name)
if $depth == 1
vz = @new_data.instance_variable_get(:@note)
name = @new_data.instance_variable_get(:@name) || @new_data.to_s
#msgbox_p i, type, name, @new_data, " " if vv.nil? && vx.nil?
pp @id, name, @new_data
@new_data.instance_variables.each{|key|
next if key == :@features
next if key == :@effects
next if key == :@note
pp @id, name, "#{key} : #{@new_data.instance_variable_get(key)}"
}
pp @id, name, vz.gsub("\n"){""} unless vz.nil?
end
$depth -= 1
return @new_data
end
def set_converted_to_ace(new_data, key, value)
@converted_key = false
key = convert_to_ace_key(key)
return if key.nil?
if key == :@element_set || key == :@element_ranks
return element_set_convert_to_ace(key, value)
elsif key == :@state_set || key == :@state_ranks || key == :@plus_state_set || key == :@minus_state_set
return state_set_convert_to_ace(key, value)
end
return if !@converted_key && @new_data.instance_variable_get(key).nil?
@new_data.instance_variable_set(key, value.convert_to_ace)
#msgbox_p key, value, @new_data.instance_variable_get(key)
end
def convert_to_ace_key(key)
vv = self.class::CONVERT_TO_ACE_KEYS[key]
vv = CONVERT_TO_ACE_KEYS[key] if vv.nil?
if !vv.nil?
key = vv
@converted_key = true
end
#msgbox_p key, vv
return key
end
def specifi_code(key)
result = self.class::SPECIFY_CODE[key] || SPECIFY_CODE[key]
msgbox_p self.class, @name, key, result if result.nil?
return result
end
def new_specifi(code, data_id, value, value2 = nil)
msgbox_p caller[0] if code.nil?
ndat = self.class::SPECIFY_CLASS.new
ndat.code = code
ndat.data_id = data_id
ndat.value1 = value
ndat.value2 = value2 unless value2.nil?
@new_data.sepecifi_set << ndat
return ndat
end
def element_set_convert_to_ace(key, set)
code = specifi_code(key)
if Array === set
dvalue = self.class::EQUIP_ELEMENT_SET_VALUE
set.each{|data_id|
next if data_id == 0
value = dvalue[data_id]
msgbox_p @name, key, code, data_id, value if code.nil?
new_specifi(code, data_id, value)
}
elsif Table === set
values = RANK_TO_VALUE_E
set.xsize.times{|data_id|
next if data_id == 0
value = values[data_id][set[data_id]]
next if value.nil?
new_specifi(code, data_id, value / 100.0)
}
end
end
def state_set_convert_to_ace(key, set)
code = specifi_code(key)
if Array === set
dvalue = self.class::EQUIP_STATE_SET_VALUE
set.each{|data_id|
next if data_id == 0
value = dvalue[data_id]
new_specifi(code, data_id, value)
}
elsif Table === set
values = RANK_TO_VALUE_E
set.xsize.times{|data_id|
next if data_id == 0
value = values[data_id][set[data_id]]
next if value.nil?
new_specifi(code, data_id, value / 100.0)
}
end
end
end
class RPG::Actor
def convert_to_ace
super
[@weapon_id, @armor1_id, @armor2_id, @armor3_id, @armor4_id].each_with_index{|item_id, i|
@new_data.equips[i] = item_id
}
new_specifi(FEATURE_SLOT_TYPE, 1, 1) if @two_swords_style
new_specifi(FEATURE_EQUIP_FIX, 1, 0) if @fix_equipment
new_specifi(FEATURE_SPECIAL_FLAG, 1, FLAG_ID_AUTO_BATTLE) if @auto_battle
new_specifi(FEATURE_SPARAM, 1, 0.25) if @super_guard
new_specifi(FEATURE_SPARAM, 3, 2.0) if @pharmacology
new_specifi(FEATURE_XPARAM, 2, 4) if @critical_bonus
return @new_data
end
end
class RPG::Class
def convert_to_ace
super
#new_specifi(FEATURE_SPARAM, 0, )
@new_data.sepecifi_set[0].value = (100 - @position * 25) / 100.0
actor = $now_data[@id]
now_params = actor.instance_variable_get(:@parameters)
[0, 1, 2, 3, 4, 4, 5, 5].each_with_index{|key, j|
@new_data.params.ysize.times{|k|
@new_data.params[j, k] = now_params[key, k]
}
}
return @new_data
end
end
class RPG::Class::Learning
def convert_to_ace
super
@new_data.skill_id += Object::GETA_FOR_SKILLS
return @new_data
end
end
class RPG::Enemy::Action
def convert_to_ace
super
if @kind == 0
case @basic
when 0
@new_data.skill_id = 1
when 1
@new_data.skill_id = 2
when 2
@new_data.skill_id = 3
when 3
@new_data.skill_id = 4
end
else
@new_data.skill_id += Object::GETA_FOR_SKILLS
end
return @new_data
end
end
class RPG::Enemy
def convert_to_ace
super
[@maxhp, @maxmp, @atk, @def, @spi, @spi, @agi, @agi].each_with_index{|value, i|
@new_data.params[i] = value
}
@new_data.sepecifi_set[0].value = @hit / 100.0
@new_data.sepecifi_set[1].value = [url=home.php?mod=space&uid=284635]@eva[/url] / 100.0
[@drop_item1, @drop_item2].each_with_index{|data, i|
dat = RPG::Enemy::DropItem.new
dat.kind = data.kind
case data.kind
when 1; dat.data_id = data.instance_variable_get(:@item_id)
when 2; dat.data_id = data.instance_variable_get(:@weapon_id)
when 3; dat.data_id = data.instance_variable_get(:@armor_id)
end
dat.denominator = data.denominator
@new_data.drop_items[i] = dat
}
@levitate = false
new_specifi(FEATURE_XPARAM, 2, 0.10) if @has_critical
return @new_data
end
end
class RPG::BaseItem
end
class RPG::UsableItem
def convert_to_ace
e_set = remove_instance_variable(:@element_set)
super
new_specifi(EFFECT_COMMON_EVENT, @common_event_id, 0) if @common_event_id != 0
unless e_set.empty?
txt = ""
e_set.each{|i|
txt += ", " unless txt.empty?
txt += i.to_s
}
@new_data.note += sprintf(VX_ELEMENT_STR, txt)
end
@new_data.damage.element_id = e_set[0] || 0
if @base_damage != 0
txt = ""
txt += "#{@base_damage.abs}" if !IGNORE_BASE_DAMAGE_1 || @base_damage.abs != 1
if @atk_f != 0
txt += " + " unless txt.empty?
txt += "a.atk * #{ATK_RATE * @atk_f / 100} - b.def * #{DEF_RATE * @atk_f / 100}" if FORMULA_TYPE_ACE
txt += "a.atk * #{ATK_RATE * @atk_f} / 100 - b.def * #{DEF_RATE * @atk_f} / 100" if !FORMULA_TYPE_ACE
end
if @spi_f != 0
txt += " + " unless txt.empty?
txt += "a.mat * #{SPI_RATE * @spi_f / 100} - b.mdf * #{MDF_RATE * @spi_f / 100}" if FORMULA_TYPE_ACE
txt += "a.mat * #{SPI_RATE * @spi_f} / 100 - b.mdf * #{MDF_RATE * @spi_f} / 100" if !FORMULA_TYPE_ACE
end
@new_data.damage.type = 1 unless txt.empty?
txt.gsub!("\s*(+|-)\s*b.(def|mdf)"){""} if @ignore_defense
@new_data.damage.formula = txt
@new_data.damage.type = 1
end
@new_data.damage.type = 2 if @damage_to_mp
if @base_damage < 0
@new_data.damage.type += 2
elsif @absorb_damage
@new_data.damage.type += 4
end
@new_data.damage.variance = 20
@new_data.hit_type = 1 if @physical_attack
return @new_data
end
end
class RPG::Skill
def convert_to_ace
super
@new_data.id += Object::GETA_FOR_SKILLS
@new_data.success_rate = @hit
@new_data.stype_id = 1 if @spi_f > 0
return @new_data
end
end
class RPG::Item
def convert_to_ace
super
#@consumable = true
@new_data.success_rate = 100
if @hp_recovery_rate != 0 || @hp_recovery != 0
new_specifi(EFFECT_RECOVER_HP, 0, @hp_recovery_rate / 100.0, @hp_recovery)
end
if @mp_recovery_rate != 0 || @mp_recovery != 0
new_specifi(EFFECT_RECOVER_MP, 0, @mp_recovery_rate / 100.0, @mp_recovery)
end
if @parameter_type != 0
new_specifi(EFFECT_GROW, @parameter_type, @parameter_points)
end
return @new_data
end
end
class RPG::Weapon
def convert_to_ace
super
@new_data.sepecifi_set[1].value = (@hit - DEFAULT_HIT) / 100.0
unless @element_set.include?(1)
@new_data.sepecifi_set.delete(@new_data.sepecifi_set.find{|dat|
dat.code == FEATURE_ATK_ELEMENT && dat.data_id == 1# && dat.value == 0
})
end
@two_handed = false
[@atk, @def, @spi, @spi, @agi, 0].each_with_index{|value, i|
@new_data.params[i + 2] = value
}
new_specifi(33, 0, 99999999) if @fast_attack
new_specifi(FEATURE_XPARAM, 2, 4) if @critical_bonus
new_specifi(FEATURE_ATK_TIMES , 0, 1) if @dual_attack
return @new_data
end
end
class RPG::Armor
def convert_to_ace
super
@atype_id = @kind || 0
@new_data.sepecifi_set[0].value = @eva / 100.0
[@atk, @def, @spi, @spi, @agi, 0].each_with_index{|value, i|
@new_data.params[i + 2] = value
}
new_specifi(FEATURE_XPARAM , 3, 1000) if @prevent_critical
new_specifi(FEATURE_SPARAM , 4, 0.5) if @half_mp_cost
new_specifi(FEATURE_SPARAM , 9, 2) if @double_exp_gain
new_specifi(FEATURE_XPARAM , 7, 0.10) if @auto_hp_recover
return @new_data
end
end
class RPG::State
def convert_to_ace
restriction = remove_instance_variable(:@restriction)
super
new_specifi(FEATURE_STYPE_SEAL, 1, 1) if restriction == 1
new_specifi(FEATURE_XPARAM, 1, -1000) if restriction == 5
restriction -= 1 if restriction == 2 || restriction == 5
@new_data.restriction = restriction
[:@atk_rate, :@def_rate, :@spi_rate, :@spi_rate, :@agi_rate].each_with_index{|key, i|
vv = instance_variable_get(key)
next if vv == 100
new_specifi(FEATURE_PARAM , i + 2, vv / 100.0)
}
new_specifi(FEATURE_XPARAM , 7, -0.1) if @slip_damage
@new_data.remove_at_battle_end = @battle_only
@new_data.chance_by_damage = 100 if @release_by_damage
@new_data.min_turns = @hold_turn
@new_data.max_turns = @hold_turn
@new_data.auto_removal_timing = 2
if (1..99) === @auto_release_prob
@new_data.max_turns *= 100
@new_data.max_turns, v = @new_data.max_turns.divmod(@auto_release_prob)
@new_data.max_turns += 1 if v > 0
elsif @auto_release_prob == 0
@new_data.auto_removal_timing = 0
end
return @new_data
end
end
module RPG
RESION_SIZE = Hash.new(0)
class Area
def convert_to_ace
$now_data = load_data(sprintf("Data/Map%03d.rvdata2", @map_id))
super
resion = RESION_SIZE[@map_id]
resionear = (0b1 << resion) << 8
@encounter_list.each_with_index{|data, i|
ndat = RPG::Map::Encounter.new
ndat.troop_id = data
ndat.region_set << resionear
$now_data.encounter_list << ndat
}
p "#{sprintf("Data/Map%03d.rvdata2", @map_id)} #{resion} #{resionear}"
@rect.width.times{|i|
xx = @rect.x + i
@rect.height.times{|j|
yy = @rect.y + j
#p "x:#{xx} y:#{yy}"
$now_data.data[xx, yy, 3] |= resionear
}
}
RESION_SIZE[@map_id] += 1
save_data($now_data, sprintf("Data/Map%03d.rvdata2", @map_id))
return @new_data
end
end
end
class RPG::Map
def convert_to_ace
super
list = @new_data.encounter_list
list.each_with_index{|data, i|
next if data.nil?
list[i] = RPG::Map::Encounter.new
list[i].troop_id = data
}
map = @new_data.data
map.resize(map.xsize, map.ysize, 4)
return @new_data
end
end
class NilClass
def convert_to_ace
return self
end
end
class Array
def convert_to_ace
$depth += 1
new_data = Array.new
self.each_with_index{|value, i|
type = 0
new_data[i] = value.nil? ? value : value.convert_to_ace
name = new_data[i].instance_variable_get(:@name)
if $depth == 1 && !name.nil? && !name.empty?# && i > 40
vv = new_data[i].instance_variable_get(:@features)
vx = new_data[i].instance_variable_get(:@effects)
vz = new_data[i].instance_variable_get(:@note)
#msgbox_p i, type, name, new_data[i], " " if vv.nil? && vx.nil?
pp i, name, new_data[i]
new_data[i].instance_variables.each{|key|
next if key == :@features
next if key == :@effects
next if key == :@note
pp i, name, "#{key} : #{new_data[i].instance_variable_get(key)}"
}
pp i, name, *vv unless vv.nil?
pp i, name, *vx unless vx.nil?
pp i, name, vz.gsub("\n"){""} unless vz.nil?
end
}
$depth -= 1
return new_data
end
end
class Hash
def convert_to_ace
new_data = Hash.new
new_data.default = self.default
self.each_with_index{|(key, value), i|
new_data[key] = value.convert_to_ace
}
return new_data
end
end
class Color
def convert_to_ace
return self
end
end
class RPG::EventCommand
def convert_to_ace
super
@new_data.re_convert_to_ace
return @new_data
end
def re_convert_to_ace
case @code
when 111
case @parameters[0]
when 4
@parameters[2] += 1 if @parameters[2] >= 2
@parameters[3] += Object::GETA_FOR_SKILLS if @parameters[2] == 3
#p @code, @parameters
end
when 122
case @parameters[3]
when 3..7
@parameters.insert(4, @parameters[3])
@parameters[3] = 3
#p @code, @parameters
end
when 311..318
siz = [6,5,4,2,6,6,6,4][@code - 311]
@parameters.unshift(0) if @parameters.size < siz
p @code, @parameters
@parameters[-1] += Object::GETA_FOR_SKILLS if @code == 318
end
return self
end
end
if CONVERT_VX_TO_ACE# 実行するか切り替え
database_files = [
"Areas.rvdata",
"Actors.rvdata",
"Classes.rvdata",
"Enemies.rvdata",
"Skills.rvdata",
"Items.rvdata",
"Weapons.rvdata",
"Armors.rvdata",
"States.rvdata",
"Troops.rvdata",
"Armors.rvdata",
"Animations.rvdata",
"System.rvdata",
"MapInfos.rvdata",
"CommonEvents.rvdata",
]
Dir::entries("data/").reverse!.each{|filename|
$depth = 0
$filename = filename
now_file_nem = "data/%s"
new_file_nem = PUT_FILE_NAME
#if database_files.include?(filename)
if filename == "System.rvdata"
File.open(sprintf(POUT_DIR, $filename), "w") if PUT_RESULT
p "#{filename} の変換を開始"
$now_data = load_data(sprintf(new_file_nem, filename))
$old_data = load_data("data/#{filename}")
$now_data.elements = $old_data.elements
$new_data = $now_data
else
case filename
when "Areas.rvdata"
next unless CONVERT_DB
when "Classes.rvdata"
next unless CONVERT_DB
$now_data = load_data("data/Actors.rvdata")
when /map\d{3}\.rvdata$/i
next unless CONVERT_MAP
$now_data = load_data("Data/MapInfos.rvdata")
else
next unless CONVERT_DB
next unless database_files.include?(filename)
end
File.open(sprintf(POUT_DIR, $filename), "w") if PUT_RESULT
p "#{filename} の変換を開始"
$old_data = load_data("data/#{filename}")
$new_data = $old_data.convert_to_ace
case filename
when "Areas.rvdata"
next
when "Skills.rvdata"
$now_data = load_data(sprintf(now_file_nem, filename))
size = Object::GETA_FOR_SKILLS
$new_data.shift
$new_data.unshift(*$now_data[0,size+1])
else
end
#msgbox_p "data/#{filename} の変換に成功。"
end
save_data($new_data, sprintf(new_file_nem, filename))
#end
}
RE_ADJUST_VX_TO_ACE = false
end# CONVERT_VX_TO_ACE
if RE_ADJUST_VX_TO_ACE && !$@
msgbox_p "旧バージョンで変換ミスがあったデータを再変換します", "この処置を、新バージョンで変換したデータや、修正済みのデータに対して適用すると、", "一部のイベントデータが異常な値になります。"
msgbox_p "実行を中止する場合は、F12を押しながらエンターキーを押し、", "その後テストプレイを中止終了してください。"
msgbox_p "再変換を実行します。"
module Kernel
def re_convert_to_ace
instance_variables.each{|key|
value = self.instance_variable_get(key).re_convert_to_ace
self.instance_variable_set(key, value)
}
return self
end
end
class NilClass
def re_convert_to_ace
return self
end
end
class Array
def re_convert_to_ace
$depth += 1
self.each_with_index{|value, i|
self[i] = value.re_convert_to_ace
}
$depth -= 1
return self
end
end
class Hash
def re_convert_to_ace
self.each_with_index{|(key, value), i|
self[key] = value.re_convert_to_ace
}
return self
end
end
Dir::entries("data/").reverse!.each{|filename|
$depth = 0
$filename = filename
now_file_nem = "data/%s"
new_file_nem = "data/%s"
#if database_files.include?(filename)
case filename
when /map\d{3}\.rvdata2$/i
when /CommonEvents.rvdata2$/i
else
next
end
p "#{filename} の再変換を開始"
$old_data = load_data("data/#{filename}")
$new_data = $old_data.re_convert_to_ace
save_data($new_data, sprintf(new_file_nem, filename))
}
end# if RE_ADJUST_VX_TO_ACE