feat: Pack fixed rvdata2json script by DICE2000

This commit is contained in:
Dazed 2023-04-20 11:40:04 -05:00
parent e07e03f563
commit 9db261d6de
9 changed files with 2889 additions and 0 deletions

View file

@ -0,0 +1,17 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain

43
scripts/rvdata2json-fixed/.gitignore vendored Normal file
View file

@ -0,0 +1,43 @@
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
# =========================
# Operating System Files
# =========================
# OSX
# =========================
.DS_Store
.AppleDouble
.LSOverride
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

View file

@ -0,0 +1,29 @@
** PLEASE TRY AT YOUR OWN RISK! **
These scripts require Jsonable:https://github.com/treeder/jsonable
for RPG Maker VX
----------------
put rgss2/to_json/to_rvdata.rb into your project folder.
### convert rvdata to json ###
ruby to_json.rb
### convert json to rvdata ###
ruby to_rvdata.rb
for RPG Maker VX Ace
--------------------
put rgss3/to_json2/to_rvdata2.rb into your project folder.
### convert rvdata2 to json ###
ruby to_json2.rb
### convert json to rvdata2 ###
ruby to_rvdata2.rb

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,53 @@
# encoding: utf-8
# to_json.rb
# author: dice2000
# original author: aoitaku
# https://gist.github.com/aoitaku/7822424
#
# to_yaml.rbをjsonに対応させたもの
# デバッグ途中
#
# Area.rvdata, Scripts.rvdata未対応
require 'jsonable'
require 'zlib'
require_relative 'rgss2'
[
'Data/Actors.rvdata',
'Data/Animations.rvdata',
# 'Data/Areas.rvdata',
'Data/Armors.rvdata',
'Data/Classes.rvdata',
'Data/CommonEvents.rvdata',
'Data/Enemies.rvdata',
'Data/Items.rvdata',
*Dir.glob('Data/Map[0-9][0-9][0-9].rvdata'),
'Data/MapInfos.rvdata',
'Data/Skills.rvdata',
'Data/States.rvdata',
'Data/System.rvdata',
'Data/Troops.rvdata',
'Data/Weapons.rvdata'
].each do |rvdata|
data = ''
p rvdata
File.open(rvdata, 'rb') do |file|
data = Marshal.load(file.read)
if data.is_a?(Array)
data.each{ |d|
d.unpack_names if d != nil
}
elsif data.is_a?(Hash)
if data.size != 0
data.each_value{|v|
v.unpack_names
}
end
else
data.unpack_names
end
end
File.open('Data/'+File.basename(rvdata,'.rvdata')+'.json', 'w') do |file|
file.write(data.to_json)
end
end

View file

@ -0,0 +1,51 @@
# encoding: utf-8
# to_json2.rb
# author: dice2000
# original author: aoitaku
# https://gist.github.com/aoitaku/7822424
#
require 'jsonable'
require 'zlib'
require_relative 'rgss3'
[
'Data/Actors.rvdata2',
'Data/Animations.rvdata2',
# 'Data/Areas.rvdata2',
'Data/Armors.rvdata2',
'Data/Classes.rvdata2',
'Data/CommonEvents.rvdata2',
'Data/Enemies.rvdata2',
'Data/Items.rvdata2',
*Dir.glob('Data/Map[0-9][0-9][0-9].rvdata2'),
'Data/MapInfos.rvdata2',
'Data/Skills.rvdata2',
'Data/States.rvdata2',
'Data/System.rvdata2',
'Data/Tilesets.rvdata2',
'Data/Troops.rvdata2',
'Data/Weapons.rvdata2'
].each do |rvdata|
data = ''
p rvdata
File.open(rvdata, 'rb') do |file|
data = Marshal.load(file.read)
if data.is_a?(Array)
data.each{ |d|
d.unpack_names if d != nil
}
elsif data.is_a?(Hash)
if data.size != 0
data.each_value{|v|
v.unpack_names
}
end
else
data.unpack_names
end
end
File.open('Data/'+File.basename(rvdata,'.rvdata2')+'.json', 'w') do |file|
file.write(data.to_json)
end
end

View file

@ -0,0 +1,127 @@
# coding: utf-8
# to_rvdata.rb
# author: dice2000
# original author: aoitaku
# https://gist.github.com/aoitaku/7822424
#
# Area.rvdata, Scripts.rvdata未対応
require 'jsonable'
require 'zlib'
require_relative 'rgss2'
def restore_rvdata(list)
return unless list.has_key?("json_class")
obj = nil
case list["json_class"]
when "Color"
obj = Color.new([0,0,0,0])
when "Table"
obj = Table.new([1,1,0,0,1,[]])
when "Tone"
obj = Tone.new([0,0,0,0])
when "RPG::Event"
obj = RPG::Event.new(list["@x"], list["@y"])
when "RPG::EventCommand"
obj = RPG::EventCommand.new(list["@code"], list["@indent"], list["@parameters"])
when "RPG::MoveCommand"
obj = RPG::MoveCommand.new(list["@code"], list["@parameters"])
# when "RPG::BaseItem::Feature"
# obj = RPG::BaseItem::Feature.new(list["@code"], list["@data_id"], list["@value"])
# when "RPG::UsableItem::Effect"
# obj = RPG::UsableItem::Effect.new(list["@code"], list["@data_id"], list["@value1"], list["@value2"])
when "RPG::Map"
obj = RPG::Map.new(list["@width"], list["@height"])
when "RPG::BGM"
obj = RPG::BGM.new(list["@name"], list["@volume"], list["@pitch"])
when "RPG::BGS"
obj = RPG::BGS.new(list["@name"], list["@volume"], list["@pitch"])
when "RPG::ME"
obj = RPG::ME.new(list["@name"], list["@volume"], list["@pitch"])
when "RPG::SE"
obj = RPG::SE.new(list["@name"], list["@volume"], list["@pitch"])
else
str = "obj=" + list["json_class"] + ".new"
eval(str)
end
iterate_setting_value(obj, list)
return obj
end
def iterate_setting_value(target, list)
val = target.instance_variables
val.each{|d|
#マップイベントデータの場合
if d == :@events
list[d.to_s].each{|k, v|
target.events[k.to_i] = restore_rvdata(v)
}
# 値がクラスオブジェクト
elsif list[d.to_s].is_a?(Hash)
target.instance_variable_set(d, restore_rvdata(list[d.to_s]))
# 値がクラスオブジェクトの配列
elsif list[d.to_s].is_a?(Array) && list[d.to_s][0].is_a?(Hash)
data_trans = []
list[d.to_s].each{|d|
data_trans << restore_rvdata(d)
}
target.instance_variable_set(d, data_trans)
else
target.instance_variable_set(d, list[d.to_s])
end
}
end
[
'Data/Actors.json',
'Data/Animations.json',
# 'Data/Areas.json',
'Data/Armors.json',
'Data/Classes.json',
'Data/CommonEvents.json',
'Data/Enemies.json',
'Data/Items.json',
*Dir.glob('Data/Map[0-9][0-9][0-9].json'),
'Data/MapInfos.json',
'Data/Skills.json',
'Data/States.json',
'Data/System.json',
'Data/Troops.json',
'Data/Weapons.json'
].each do |json|
text = ''
p json
f = File.open(json, 'r:utf-8')
f.each {|line|
text += line
}
data = JSON.parse(text)
data_trans = nil
if data.is_a?(Array)
data_trans = []
data.each{ |d|
if d == nil
data_trans << d
else
data_trans << restore_rvdata(d)
end
}
#あまり賢くない方法で対処(後で考える)
elsif data.is_a?(Hash)
if json == 'Data/MapInfos.json'
data_trans = {}
data.each{|k, v|
data_trans[k.to_i] = restore_rvdata(v)
}
else
data_trans = restore_rvdata(data)
end
else
data_trans = restore_rvdata(data)
end
#p data_trans
File.open('Data/'+File.basename(json,'.json')+'.rvdata', 'wb') do |file|
file.write(Marshal.dump(data_trans))
end
f.close
end

View file

@ -0,0 +1,134 @@
# coding: utf-8
require 'jsonable'
require 'zlib'
require_relative 'rgss3'
#2015/6/27
#制限事項Areas.rvdata2とScripts.rvdata2に未対応
#↓解決済2015/6/27
# 既存の不具合/15.6.18
# このスクリプトで復帰させると、以降エディタ上にイベントが表示されない
# (新規作成含む)
# イベント自体は動く
#追加メソッド
def restore_rvdata2(list)
return unless list.has_key?("json_class")
obj = nil
case list["json_class"]
when "Color"
obj = Color.new([0,0,0,0])
when "Table"
obj = Table.new([1,1,0,0,1,[]])
when "Tone"
obj = Tone.new([0,0,0,0])
when "RPG::Event"
obj = RPG::Event.new(list["@x"], list["@y"])
when "RPG::EventCommand"
obj = RPG::EventCommand.new(list["@code"], list["@indent"], list["@parameters"])
when "RPG::MoveCommand"
obj = RPG::MoveCommand.new(list["@code"], list["@parameters"])
when "RPG::BaseItem::Feature"
obj = RPG::BaseItem::Feature.new(list["@code"], list["@data_id"], list["@value"])
when "RPG::UsableItem::Effect"
obj = RPG::UsableItem::Effect.new(list["@code"], list["@data_id"], list["@value1"], list["@value2"])
when "RPG::Map"
obj = RPG::Map.new(list["@width"], list["@height"])
when "RPG::BGM"
obj = RPG::BGM.new(list["@name"], list["@volume"], list["@pitch"])
when "RPG::BGS"
obj = RPG::BGS.new(list["@name"], list["@volume"], list["@pitch"])
when "RPG::ME"
obj = RPG::ME.new(list["@name"], list["@volume"], list["@pitch"])
when "RPG::SE"
obj = RPG::SE.new(list["@name"], list["@volume"], list["@pitch"])
else
str = "obj=" + list["json_class"] + ".new"
eval(str)
end
iterate_setting_value(obj, list)
return obj
end
def iterate_setting_value(target, list)
val = target.instance_variables
val.each{|d|
#マップイベントデータの場合
if d == :@events
list[d.to_s].each{|k, v|
target.events[k.to_i] = restore_rvdata2(v)
}
#target.events.each_key{|key|
# p key
#}
# 値がクラスオブジェクト
elsif list[d.to_s].is_a?(Hash)
target.instance_variable_set(d, restore_rvdata2(list[d.to_s]))
# 値がクラスオブジェクトの配列
elsif list[d.to_s].is_a?(Array) && list[d.to_s][0].is_a?(Hash)
data_trans = []
list[d.to_s].each{|d|
data_trans << restore_rvdata2(d)
}
target.instance_variable_set(d, data_trans)
else
target.instance_variable_set(d, list[d.to_s])
end
}
end
[
'Data/Actors.json',
'Data/Animations.json',
# 'Data/Areas.json',
'Data/Armors.json',
'Data/Classes.json',
'Data/CommonEvents.json',
'Data/Enemies.json',
'Data/Items.json',
*Dir.glob('Data/Map[0-9][0-9][0-9].json'),
'Data/MapInfos.json',
'Data/Skills.json',
'Data/States.json',
'Data/System.json',
'Data/Tilesets.json',
'Data/Troops.json',
'Data/Weapons.json'
].each do |json|
text = ''
p json
f = File.open(json, 'r:utf-8')
f.each {|line|
text += line
}
data = JSON.parse(text)
data_trans = nil
if data.is_a?(Array)
data_trans = []
data.each{ |d|
if d == nil
data_trans << d
else
data_trans << restore_rvdata2(d)
end
}
#あまり賢くない方法で対処(後で考える)
elsif data.is_a?(Hash)
if json == 'Data/MapInfos.json'
data_trans = {}
data.each{|k, v|
data_trans[k.to_i] = restore_rvdata2(v)
}
else
data_trans = restore_rvdata2(data)
end
else
data_trans = restore_rvdata2(data)
end
#p data_trans
File.open('Data/'+File.basename(json,'.json')+'.rvdata2', 'wb') do |file|
file.write(Marshal.dump(data_trans))
end
f.close
end