SHARE
TWEET

VX Ace to MV Converter (VX Ace)

ezmash Oct 24th, 2015 (edited) 12,967 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module DEGICA
  2.   module CONVERT
  3.     FOLDER = 'mv-data/'
  4.    
  5.     LOGGING = true # only useful for debugging this script
  6.     LOGSCRIPTS = true # lists any damage formulae, and event commands using scripts
  7.     LOGCOMMENTS = true # only turn this on if you have scripts that look for certain comments and want to re-implement them
  8.    
  9.     def self.run
  10.       DataManager.load_normal_database
  11.       dest = FOLDER.gsub(/\\/){''}
  12.       Dir.mkdir dest unless File.exists?(dest)
  13.      
  14.       #*************************************************************************
  15.       @log = File.open(FOLDER + "_log.txt", "w") if LOGGING
  16.       @scriptlog = File.open(FOLDER + "_scripts.txt", "w") if LOGSCRIPTS
  17.       @commentlog = File.open(FOLDER + "_comments.txt", "w") if LOGCOMMENTS
  18.       #*************************************************************************
  19.      
  20.       convert_actors
  21.       convert_classes
  22.       convert_skills
  23.       convert_items
  24.       convert_weapons
  25.       convert_armors
  26.       convert_enemies
  27.       convert_troops
  28.       convert_states
  29.       convert_animations
  30.       convert_tilesets
  31.       convert_common_events
  32.       convert_system
  33.       convert_mapinfos
  34.      
  35.       Dir.glob('Data/Map???.rvdata2').each {|filename| convert_map(filename)}
  36.      
  37.       #*************************************************************************
  38.       @log.close if LOGGING
  39.       @scriptlog.close if LOGSCRIPTS
  40.       @commentlog.close if LOGCOMMENTS
  41.       #*************************************************************************
  42.     end
  43.    
  44.     #===========================================================================
  45.     #
  46.     # DATABASE CONVERSION
  47.     #
  48.     #===========================================================================
  49.    
  50.     #===========================================================================
  51.     # ACTORS
  52.     #===========================================================================
  53.     def self.convert_actors
  54.       f = File.open(FOLDER + "Actors.json", "w")
  55.       f.puts('[')
  56.       f.puts('null,')
  57.       for x in 1 ... $data_actors.size
  58.         actor = $data_actors[x]
  59.         actor = RPG::Actor.new if !actor
  60.         actor_data = '{'
  61.        
  62.         actor_data += '"id":' + x.to_s + ','
  63.         actor_data += '"battlerName":"",'
  64.         actor_data += '"characterIndex":' + actor.character_index.to_s + ','
  65.         actor_data += '"characterName":"' + actor.character_name + '",'
  66.         actor_data += '"classId":' + actor.class_id.to_s + ','
  67.         actor_data += '"equips":' + actor.equips.to_s.gsub(/ /){''} + ','
  68.         actor_data += '"faceIndex":' + actor.face_index.to_s + ','
  69.         actor_data += '"faceName":"' + actor.face_name + '",'
  70.         actor_data += '"traits":' + get_traits(actor) + ','
  71.         actor_data += '"initialLevel":' + actor.initial_level.to_s + ','
  72.         actor_data += '"maxLevel":' + actor.max_level.to_s + ','
  73.         actor_data += '"name":' + get_text(actor.name) + ','
  74.         actor_data += '"nickname":' + get_text(actor.nickname) + ','
  75.         actor_data += '"note":' + get_text(actor.note) + ','
  76.         actor_data += '"profile":' + get_text(actor.description)
  77.        
  78.         actor_data += '}'
  79.         actor_data += ',' if x < $data_actors.size - 1
  80.         f.puts(actor_data)
  81.       end
  82.       f.puts(']')
  83.       f.close
  84.     end
  85.    
  86.     #===========================================================================
  87.     # CLASSES
  88.     #===========================================================================
  89.     def self.convert_classes
  90.       f = File.open(FOLDER + "Classes.json", "w")
  91.       f.puts('[')
  92.       f.puts('null,')
  93.       for x in 1 ... $data_classes.size
  94.         cls = $data_classes[x]
  95.         cls = RPG::Class.new if !cls
  96.         cls_data = '{'
  97.        
  98.         cls_data += '"id":' + x.to_s + ','
  99.         cls_data += '"expParams":' + cls.exp_params.to_s.gsub(/ /){''} + ','
  100.         cls_data += '"traits":' + get_traits(cls) + ','
  101.         cls_data += '"learnings":' + get_learnings(cls) + ','
  102.         cls_data += '"name":' + get_text(cls.name) + ','
  103.         cls_data += '"note":' + get_text(cls.note) + ','
  104.         cls_data += '"params":' + get_params(cls)
  105.        
  106.         cls_data += '}'
  107.         cls_data += ',' if x < $data_classes.size - 1
  108.         f.puts(cls_data)
  109.       end
  110.       f.puts(']')
  111.       f.close
  112.     end
  113.     def self.get_learnings(obj)
  114.       res = '['
  115.       count = 1
  116.       max_count = obj.learnings.size
  117.       obj.learnings.each do |lrn|
  118.         res += '{"level":' + lrn.level.to_s + ','
  119.         res += '"note":' + get_text(lrn.note) + ','
  120.         res += '"skillId":' + lrn.skill_id.to_s + '}'
  121.         res += ',' if count < max_count
  122.         count += 1
  123.       end      
  124.       res += ']'
  125.       res
  126.     end
  127.    
  128.     def self.get_params(cls)
  129.       res = '['
  130.       for p in 0..7
  131.         res += '['
  132.         for l in 0..99
  133.           res += cls.params[p,l].to_s
  134.           res += ',' if l < 99
  135.         end
  136.         res += ']'
  137.         res += ',' if p < 7
  138.       end
  139.       res += ']'
  140.       res
  141.     end
  142.    
  143.     #===========================================================================
  144.     # SKILLS
  145.     #===========================================================================
  146.     def self.convert_skills
  147.       f = File.open(FOLDER + "Skills.json", "w")
  148.       f.puts('[')
  149.       f.puts('null,')
  150.       for x in 1 ... $data_skills.size
  151.         skill = $data_skills[x]
  152.         skill = RPG::Skill.new if !skill
  153.         skl_data = '{'
  154.        
  155.         skl_data += '"id":' + x.to_s + ','
  156.         skl_data += '"animationId":' + skill.animation_id.to_s + ','
  157.         skl_data += '"damage":' + get_damage(skill) + ','
  158.         skl_data += '"description":' + get_text(skill.description) + ','
  159.         skl_data += '"effects":' + get_effects(skill) + ','
  160.         skl_data += '"hitType":' + skill.hit_type.to_s + ','
  161.         skl_data += '"iconIndex":' + skill.icon_index.to_s + ','
  162.         skl_data += '"message1":' + get_text(skill.message1) + ','
  163.         skl_data += '"message2":' + get_text(skill.message2) + ','
  164.         skl_data += '"mpCost":' + skill.mp_cost.to_s + ','
  165.         skl_data += '"name":' + get_text(skill.name) + ','
  166.         skl_data += '"note":' + get_text(skill.note) + ','
  167.         skl_data += '"occasion":' + skill.occasion.to_s + ','
  168.         skl_data += '"repeats":' + skill.repeats.to_s + ','
  169.         skl_data += '"requiredWtypeId1":' + skill.required_wtype_id1.to_s + ','
  170.         skl_data += '"requiredWtypeId2":' + skill.required_wtype_id2.to_s + ','
  171.         skl_data += '"scope":' + skill.scope.to_s + ','
  172.         skl_data += '"speed":' + skill.speed.to_s + ','
  173.         skl_data += '"stypeId":' + skill.stype_id.to_s + ','
  174.         skl_data += '"successRate":' + skill.success_rate.to_s + ','
  175.         skl_data += '"tpCost":' + skill.tp_cost.to_s + ','
  176.         skl_data += '"tpGain":' + skill.tp_gain.to_s
  177.        
  178.         skl_data += '}'
  179.         skl_data += ',' if x < $data_skills.size - 1
  180.         f.puts(skl_data)
  181.       end
  182.       f.puts(']')
  183.       f.close
  184.     end
  185.    
  186.     #===========================================================================
  187.     # ITEMS
  188.     #===========================================================================
  189.     def self.convert_items
  190.       f = File.open(FOLDER + "Items.json", "w")
  191.       f.puts('[')
  192.       f.puts('null,')
  193.       for x in 1 ... $data_items.size
  194.         item = $data_items[x]
  195.         item = RPG::Item.new if !item
  196.         itm_data = '{'
  197.        
  198.         itm_data += '"id":' + x.to_s + ','
  199.         itm_data += '"animationId":' + item.animation_id.to_s + ','
  200.         itm_data += '"consumable":' + item.consumable.to_s + ','
  201.         itm_data += '"damage":' + get_damage(item) + ','
  202.         itm_data += '"description":' + get_text(item.description) + ','
  203.         itm_data += '"effects":' + get_effects(item) + ','
  204.         itm_data += '"hitType":' + item.hit_type.to_s + ','
  205.         itm_data += '"iconIndex":' + item.icon_index.to_s + ','
  206.         itm_data += '"itypeId":' + item.itype_id.to_s + ','
  207.         itm_data += '"name":' + get_text(item.name) + ','
  208.         itm_data += '"note":' + get_text(item.note) + ','
  209.         itm_data += '"occasion":' + item.occasion.to_s + ','
  210.         itm_data += '"price":' + item.price.to_s + ','
  211.         itm_data += '"repeats":' + item.repeats.to_s + ','
  212.         itm_data += '"scope":' + item.scope.to_s + ','
  213.         itm_data += '"speed":' + item.speed.to_s + ','
  214.         itm_data += '"successRate":' + item.success_rate.to_s + ','
  215.         itm_data += '"tpGain":' + item.tp_gain.to_s
  216.        
  217.         itm_data += '}'
  218.         itm_data += ',' if x < $data_items.size - 1
  219.         f.puts(itm_data)
  220.       end
  221.       f.puts(']')
  222.       f.close
  223.     end
  224.    
  225.     #===========================================================================
  226.     # WEAPONS
  227.     #===========================================================================
  228.     def self.convert_weapons
  229.       f = File.open(FOLDER + "Weapons.json", "w")
  230.       f.puts('[')
  231.       f.puts('null,')
  232.       for x in 1 ... $data_weapons.size
  233.         wpn = $data_weapons[x]
  234.         wpn = RPG::Weapon.new if !wpn
  235.         wpn_data = '{'
  236.        
  237.         wpn_data += '"id":' + x.to_s + ','
  238.         wpn_data += '"animationId":' + wpn.animation_id.to_s + ','
  239.         wpn_data += '"description":' + get_text(wpn.description) + ','
  240.         wpn_data += '"etypeId":1,' # weapons are 0 in Ace, but 1 in MV
  241.         wpn_data += '"traits":' + get_traits(wpn) + ','
  242.         wpn_data += '"iconIndex":' + wpn.icon_index.to_s + ','
  243.         wpn_data += '"name":' + get_text(wpn.name) + ','
  244.         wpn_data += '"note":' + get_text(wpn.note) + ','
  245.         wpn_data += '"params":' + wpn.params.to_s.gsub(/ /){''} + ','
  246.         wpn_data += '"price":' + wpn.price.to_s + ','
  247.         wpn_data += '"wtypeId":' + wpn.wtype_id.to_s
  248.        
  249.         wpn_data += '}'
  250.         wpn_data += ',' if x < $data_weapons.size - 1
  251.         f.puts(wpn_data)
  252.       end
  253.       f.puts(']')
  254.       f.close
  255.     end
  256.    
  257.     #===========================================================================
  258.     # ARMORS
  259.     #===========================================================================
  260.     def self.convert_armors
  261.       f = File.open(FOLDER + "Armors.json", "w")
  262.       f.puts('[')
  263.       f.puts('null,')
  264.       for x in 1 ... $data_armors.size
  265.         amr = $data_armors[x]
  266.         amr = RPG::Armor.new if !amr
  267.         amr_data = '{'
  268.        
  269.         amr_data += '"id":' + x.to_s + ','
  270.         amr_data += '"atypeId":' + amr.atype_id.to_s + ','
  271.         amr_data += '"description":' + get_text(amr.description) + ','
  272.         amr_data += '"etypeId":' + amr.etype_id.to_s + ','
  273.         amr_data += '"traits":' + get_traits(amr) + ','
  274.         amr_data += '"iconIndex":' + amr.icon_index.to_s + ','
  275.         amr_data += '"name":' + get_text(amr.name) + ','
  276.         amr_data += '"note":' + get_text(amr.note) + ','
  277.         amr_data += '"params":' + amr.params.to_s.gsub(/ /){''} + ','
  278.         amr_data += '"price":' + amr.price.to_s
  279.        
  280.         amr_data += '}'
  281.         amr_data += ',' if x < $data_armors.size - 1
  282.         f.puts(amr_data)
  283.       end
  284.       f.puts(']')
  285.       f.close
  286.     end
  287.    
  288.     #===========================================================================
  289.     # ENEMIES
  290.     #===========================================================================
  291.     def self.convert_enemies
  292.       f = File.open(FOLDER + "Enemies.json", "w")
  293.       f.puts('[')
  294.       f.puts('null,')
  295.       for x in 1 ... $data_enemies.size
  296.         foe = $data_enemies[x]
  297.         foe = RPG::Enemy.new if !foe
  298.         foe_data = '{'
  299.        
  300.         foe_data += '"id":' + x.to_s + ','
  301.         foe_data += '"actions":' + get_actions(foe) + ','
  302.         foe_data += '"battlerHue":' + foe.battler_hue.to_s + ','
  303.         foe_data += '"battlerName":"' + foe.battler_name + '",'
  304.         foe_data += '"dropItems":' + get_drop_items(foe) + ','
  305.         foe_data += '"exp":' + foe.exp.to_s + ','
  306.         foe_data += '"traits":' + get_traits(foe) + ','
  307.         foe_data += '"gold":' + foe.gold.to_s + ','
  308.         foe_data += '"name":' + get_text(foe.name) + ','
  309.         foe_data += '"note":' + get_text(foe.note) + ','
  310.         foe_data += '"params":' + foe.params.to_s.gsub(/ /){''}
  311.        
  312.         foe_data += '}'
  313.         foe_data += ',' if x < $data_enemies.size - 1
  314.         f.puts(foe_data)
  315.       end
  316.       f.puts(']')
  317.       f.close
  318.     end
  319.    
  320.     def self.get_actions(foe)
  321.       res = '['
  322.       count = 1
  323.       max_count = foe.actions.size
  324.       foe.actions.each do |action|
  325.         res += '{"conditionParam1":' + action.condition_param1.to_s + ','
  326.         res += '"conditionParam2":' + action.condition_param2.to_s + ','
  327.         res += '"conditionType":' + action.condition_type.to_s + ','
  328.         res += '"rating":' + action.rating.to_s + ','
  329.         res += '"skillId":' + action.skill_id.to_s + '}'
  330.         res += ',' if count < max_count
  331.         count += 1
  332.       end
  333.       res += ']'
  334.       res
  335.     end
  336.    
  337.     def self.get_drop_items(foe)
  338.       res = '['
  339.       count = 1
  340.       max_count = foe.drop_items.size
  341.       foe.drop_items.each do |item|
  342.         res += '{"dataId":' + item.data_id.to_s + ','
  343.         res += '"denominator":' + item.denominator.to_s + ','
  344.         res += '"kind":' + item.kind.to_s + '}'
  345.         res += ',' if count < max_count
  346.         count += 1
  347.       end
  348.       res += ']'
  349.       res
  350.     end
  351.    
  352.     #===========================================================================
  353.     # TROOPS
  354.     #===========================================================================
  355.     def self.convert_troops
  356.       f = File.open(FOLDER + "Troops.json", "w")
  357.       f.puts('[')
  358.       f.puts('null,')
  359.       for x in 1 ... $data_troops.size
  360.         troop = $data_troops[x]
  361.         troop = RPG::Troop.new if !troop
  362.         troop_data = '{'
  363.        
  364.         #***********************************************************************
  365.         log("Troop " + x.to_s + " (" + get_text(troop.name) + ")")
  366.         @logtroop = sprintf('Troop %d %s ', x, troop.name)
  367.         #***********************************************************************
  368.      
  369.         troop_data += '"id":' + x.to_s + ','
  370.         troop_data += '"members":' + get_troop_members(troop) + ','
  371.         troop_data += '"name":' + get_text(troop.name) + ','
  372.         troop_data += '"pages":' + get_troop_pages(troop)
  373.        
  374.         troop_data += '}'
  375.         troop_data += ',' if x < $data_troops.size - 1
  376.         f.puts(troop_data)
  377.       end
  378.       f.puts(']')
  379.       f.close
  380.     end
  381.    
  382.     def self.get_troop_members(troop)
  383.       res = '['
  384.       count = 1
  385.       max_count = troop.members.size
  386.       troop.members.each do |enemy|
  387.         res += '{"enemyId":' + enemy.enemy_id.to_s + ','
  388.         res += '"x":' + enemy.x.to_s + ','
  389.         res += '"y":' + enemy.y.to_s + ','
  390.         res += '"hidden":' + enemy.hidden.to_s + '}'
  391.         res += ',' if count < max_count
  392.         count += 1
  393.       end
  394.       res += ']'
  395.       res
  396.     end
  397.    
  398.     def self.get_troop_pages(troop)
  399.       res = '['
  400.       count = 1
  401.       max_count = troop.pages.size
  402.       troop.pages.each do |page|
  403.         #***********************************************************************
  404.         log("  Page " + count.to_s)
  405.         @logkey = sprintf('%s Page %d', @logtroop, count)
  406.         #***********************************************************************
  407.         cond = page.condition
  408.         res += '{"conditions":{"actorHp":' + cond.actor_hp.to_s + ','
  409.         res += '"actorId":' + cond.actor_id.to_s + ','
  410.         res += '"actorValid":' + cond.actor_valid.to_s + ','
  411.         res += '"enemyHp":' + cond.enemy_hp.to_s + ','
  412.         res += '"enemyIndex":' + cond.enemy_index.to_s + ','
  413.         res += '"enemyValid":' + cond.enemy_valid.to_s + ','
  414.         res += '"switchId":' + cond.switch_id.to_s + ','
  415.         res += '"switchValid":' + cond.switch_valid.to_s + ','
  416.         res += '"turnA":' + cond.turn_a.to_s + ','
  417.         res += '"turnB":' + cond.turn_b.to_s + ','
  418.         res += '"turnEnding":' + cond.turn_ending.to_s + ','
  419.         res += '"turnValid":' + cond.turn_valid.to_s + '},'
  420.        
  421.         res += '"list":' + get_command_list(page.list) + ','
  422.         res += '"span":' + page.span.to_s + '}'
  423.        
  424.         res += ',' if count < max_count
  425.         count += 1
  426.       end
  427.       res += ']'
  428.       res
  429.     end
  430.    
  431.     #===========================================================================
  432.     # STATES
  433.     #===========================================================================
  434.     def self.convert_states
  435.       f = File.open(FOLDER + "States.json", "w")
  436.       f.puts('[')
  437.       f.puts('null,')
  438.       for x in 1 ... $data_states.size
  439.         state = $data_states[x]
  440.         state = RPG::State.new if !state
  441.         state_data = '{'
  442.        
  443.         state_data += '"id":' + x.to_s + ','
  444.         state_data += '"autoRemovalTiming":' + state.auto_removal_timing.to_s + ','
  445.         state_data += '"chanceByDamage":' + state.chance_by_damage.to_s + ','
  446.         state_data += '"iconIndex":' + state.icon_index.to_s + ','
  447.         state_data += '"maxTurns":' + state.max_turns.to_s + ','
  448.         state_data += '"message1":' + get_text(state.message1) + ','
  449.         state_data += '"message2":' + get_text(state.message2) + ','
  450.         state_data += '"message3":' + get_text(state.message3) + ','
  451.         state_data += '"message4":' + get_text(state.message4) + ','
  452.         state_data += '"minTurns":' + state.min_turns.to_s + ','
  453.         state_data += '"motion":0,'
  454.         state_data += '"overlay":0,'
  455.         state_data += '"name":' + get_text(state.name) + ','
  456.         state_data += '"note":' + get_text(state.note) + ','
  457.         state_data += '"priority":' + state.priority.to_s + ','
  458.         state_data += '"removeAtBattleEnd":' + state.remove_at_battle_end.to_s + ','
  459.         state_data += '"removeByDamage":' + state.remove_by_damage.to_s + ','
  460.         state_data += '"removeByRestriction":' + state.remove_by_restriction.to_s + ','
  461.         state_data += '"removeByWalking":' + state.remove_by_walking.to_s + ','
  462.         state_data += '"restriction":' + state.restriction.to_s + ','
  463.         state_data += '"stepsToRemove":' + state.steps_to_remove.to_s + ','
  464.         state_data += '"traits":' + get_traits(state)        
  465.        
  466.         state_data += '}'
  467.         state_data += ',' if x < $data_states.size - 1
  468.         f.puts(state_data)
  469.       end
  470.       f.puts(']')
  471.       f.close
  472.     end
  473.    
  474.     #===========================================================================
  475.     # ANIMATIONS
  476.     #===========================================================================
  477.     def self.convert_animations
  478.       f = File.open(FOLDER + "Animations.json", "w")
  479.       f.puts('[')
  480.       f.puts('null,')
  481.       for x in 1 ... $data_animations.size
  482.         anim = $data_animations[x]
  483.         anim = RPG::Animation.new if !anim
  484.         anim_data = '{'
  485.        
  486.         anim_data += '"id":' + x.to_s + ','
  487.         anim_data += '"animation1Hue":' + anim.animation1_hue.to_s + ','
  488.         anim_data += '"animation1Name":"' + anim.animation1_name + '",'
  489.         anim_data += '"animation2Hue":' + anim.animation2_hue.to_s + ','
  490.         anim_data += '"animation2Name":"' + anim.animation2_name + '",'
  491.         anim_data += '"frames":' + get_anim_frames(anim) + ','
  492.         anim_data += '"name":' + get_text(anim.name) + ','
  493.         anim_data += '"position":' + anim.position.to_s + ','
  494.         anim_data += '"timings":' + get_anim_timings(anim)
  495.        
  496.         anim_data += '}'
  497.         anim_data += ',' if x < $data_animations.size - 1
  498.         f.puts(anim_data)
  499.       end
  500.       f.puts(']')
  501.       f.close
  502.     end
  503.    
  504.     def self.get_anim_frames(anim)
  505.       res = '['
  506.       for f in 0 ... anim.frame_max
  507.         res += '['
  508.         frame = anim.frames[f]
  509.         if frame
  510.           for c in 0 ... frame.cell_max
  511.             res += '['
  512.             frame.cell_data[c,4] = 360 - frame.cell_data[c,4] if frame.cell_data[c,4] != 0
  513.             for i in 0..7
  514.               res += frame.cell_data[c,i].to_s
  515.               res += ',' if i < 7
  516.             end
  517.             res += ']'
  518.             res += ',' if c < frame.cell_max - 1
  519.           end
  520.         else
  521.           res += '[]'
  522.         end
  523.         res += ']'
  524.         res += ',' if f < anim.frame_max - 1
  525.       end
  526.       res += ']'
  527.       res
  528.     end
  529.    
  530.     def self.get_anim_timings(anim)
  531.       res = '['
  532.       for t in 0 ... anim.timings.size
  533.         timing = anim.timings[t]
  534.         res += '{"flashColor":' + get_color(timing.flash_color) + ','
  535.         res += '"flashDuration":' + timing.flash_duration.to_s + ','
  536.         res += '"flashScope":' + timing.flash_scope.to_s + ','
  537.         res += '"frame":' + timing.frame.to_s + ','
  538.         res += '"se":'
  539.         if timing.se.name == ''
  540.           res += 'null'
  541.         else
  542.           res += get_audio(timing.se)
  543.         end
  544.         res += '}'
  545.         res += ',' if t < anim.timings.size - 1
  546.       end
  547.       res += ']'
  548.       res
  549.     end
  550.    
  551.     #===========================================================================
  552.     # TILESETS
  553.     #===========================================================================
  554.     def self.convert_tilesets
  555.       f = File.open(FOLDER + "Tilesets.json", "w")
  556.       f.puts('[')
  557.       f.puts('null,')
  558.       for x in 1 ... $data_tilesets.size
  559.         tileset = $data_tilesets[x]
  560.         tileset = RPG::Tileset.new if !tileset
  561.         ts_data = '{'
  562.        
  563.         ts_data += '"id":' + x.to_s + ','
  564.         ts_data += '"flags":'
  565.         flags = []
  566.         for t in 0 .. 8191
  567.           flags[t] = tileset.flags[t]
  568.         end
  569.         ts_data += flags.to_s.gsub(/ /){''} + ','
  570.         ts_data += '"mode":' + tileset.mode.to_s + ','
  571.         ts_data += '"name":' + get_text(tileset.name) + ','
  572.         ts_data += '"note":' + get_text(tileset.note) + ','
  573.         ts_data += '"tilesetNames":' + tileset.tileset_names.to_s.gsub(/, /){','}
  574.        
  575.         ts_data += '}'
  576.         ts_data += ',' if x < $data_tilesets.size - 1
  577.         f.puts(ts_data)
  578.       end
  579.       f.puts(']')
  580.       f.close
  581.     end
  582.    
  583.     #===========================================================================
  584.     # COMMON EVENTS
  585.     #===========================================================================
  586.     def self.convert_common_events
  587.       f = File.open(FOLDER + "CommonEvents.json", "w")
  588.       f.puts('[')
  589.       f.puts('null,')
  590.       for x in 1 ... $data_common_events.size
  591.         event = $data_common_events[x]
  592.         event = RPG::CommonEvent.new if !event
  593.        
  594.         #***********************************************************************
  595.         log("Common Event " + x.to_s + " (" + get_text(event.name) + ")")
  596.         @logkey = sprintf('Common Event %d %s', x, event.name)
  597.         #***********************************************************************
  598.        
  599.         ev_data = '{'
  600.        
  601.         ev_data += '"id":' + x.to_s + ','
  602.         ev_data += '"list":' + get_command_list(event.list) + ','
  603.         ev_data += '"name":' + get_text(event.name) + ','
  604.         ev_data += '"switchId":' + event.switch_id.to_s + ','
  605.         ev_data += '"trigger":' + event.trigger.to_s
  606.        
  607.         ev_data += '}'
  608.         ev_data += ',' if x < $data_common_events.size - 1
  609.         f.puts(ev_data)
  610.       end
  611.       f.puts(']')
  612.       f.close
  613.     end
  614.    
  615.     #===========================================================================
  616.     # SYSTEM
  617.     #===========================================================================
  618.     def self.convert_system
  619.       f = File.open(FOLDER + "System.json", "w")
  620.       system = $data_system
  621.       sys_data = '{'
  622.      
  623.       sys_data += '"airship":' + get_vehicle(system.airship) + ','
  624.       sys_data += '"armorTypes":' + system.armor_types.to_s.gsub(/nil/){'""'}.gsub(/, /){','} + ','
  625.       sys_data += '"attackMotions":' + get_attack_motions + ','
  626.       sys_data += '"battleBgm":' + get_audio(system.battle_bgm) + ','
  627.       sys_data += '"battleBack1Name":"' + system.battleback1_name + '",'
  628.       sys_data += '"battleBack2Name":"' + system.battleback2_name + '",'
  629.       sys_data += '"battlerHue":' + system.battler_hue.to_s + ','
  630.       sys_data += '"battlerName":"' + system.battler_name + '",'
  631.       sys_data += '"boat":' + get_vehicle(system.boat) + ','
  632.       sys_data += '"currencyUnit":"' + system.currency_unit + '",'
  633.       sys_data += '"defeatMe":{"name":"Defeat1","pan":0,"pitch":100,"volume":90},'
  634.       sys_data += '"editMapId":' + system.edit_map_id.to_s + ','
  635.       sys_data += '"elements":' + system.elements.to_s.gsub(/nil/){'""'}.gsub(/, /){','} + ','
  636.       sys_data += '"equipTypes":' + system.terms.etypes.unshift('').to_s.gsub(/, /){','} + ','
  637.       sys_data += '"gameTitle":' + get_text(system.game_title) + ','
  638.       sys_data += '"gameoverMe":' + get_audio(system.gameover_me) + ','
  639.       sys_data += '"locale":"en_US",'
  640.       sys_data += '"magicSkills":[1],'
  641.       sys_data += '"menuCommands":[true,true,true,true,true,true],'
  642.       sys_data += '"optDisplayTp":' + system.opt_display_tp.to_s + ','
  643.       sys_data += '"optDrawTitle":' + system.opt_draw_title.to_s + ','
  644.       sys_data += '"optExtraExp":' + system.opt_extra_exp.to_s + ','
  645.       sys_data += '"optFloorDeath":' + system.opt_floor_death.to_s + ','
  646.       sys_data += '"optFollowers":' + system.opt_followers.to_s + ','
  647.       sys_data += '"optSideView":false,'
  648.       sys_data += '"optSlipDeath":' + system.opt_slip_death.to_s + ','
  649.       sys_data += '"optTransparent":' + system.opt_transparent.to_s + ','
  650.       sys_data += '"partyMembers":' + system.party_members.to_s.gsub(/ /){''} + ','
  651.       sys_data += '"ship":' + get_vehicle(system.ship) + ','
  652.       sys_data += '"skillTypes":' + system.skill_types.to_s.gsub(/nil/){'""'}.gsub(/, /){','} + ','
  653.       sys_data += '"sounds":' + get_system_sounds(system) + ','
  654.       sys_data += '"startMapId":' + system.start_map_id.to_s + ','
  655.       sys_data += '"startX":' + system.start_x.to_s + ','
  656.       sys_data += '"startY":' + system.start_y.to_s + ','
  657.       system.switches[0] = ''
  658.       sys_data += '"switches":' + system.switches.to_s.gsub(/nil/){'""'}.gsub(/, /){','} + ','
  659.       sys_data += '"terms":{"basic":' + (system.terms.basic + ['EXP','EXP']).to_s.gsub(/, /){','} + ','
  660.       system.terms.commands[11] = 'Options'
  661.       sys_data += '"commands":' + (system.terms.commands + ['Buy','Sell']).to_s.gsub(/, /){','} + ','
  662.       sys_data += '"params":' + (system.terms.params + ['Hit','Evasion']).to_s.gsub(/, /){','} + ','
  663.       sys_data += '"messages":' + get_system_messages + '},'
  664.       sys_data += '"testBattlers":' + get_test_battlers(system.test_battlers) + ','
  665.       sys_data += '"testTroopId":' + system.test_troop_id.to_s + ','
  666.       sys_data += '"title1Name":"' + system.title1_name + '",'
  667.       sys_data += '"title2Name":"' + system.title2_name + '",'
  668.       sys_data += '"titleBgm":' + get_audio(system.title_bgm) + ','
  669.       system.variables[0] = ''
  670.       sys_data += '"variables":' + system.variables.to_s.gsub(/nil/){'""'}.gsub(/, /){','} + ','
  671.       sys_data += '"versionId":' + system.version_id.to_s + ','
  672.       sys_data += '"victoryMe":' + get_audio(system.battle_end_me) + ','
  673.       sys_data += '"weaponTypes":' + system.weapon_types.to_s.gsub(/nil/){'""'}.gsub(/, /){','} + ','
  674.       sys_data += '"windowTone":' + get_tone(system.window_tone)
  675.      
  676.       sys_data += '}'
  677.       f.puts(sys_data)
  678.       f.close
  679.     end
  680.    
  681.     def self.get_attack_motions
  682.       res = '['
  683.       res += '{"type":0,"weaponImageId":0},'
  684.       res += '{"type":1,"weaponImageId":1},'
  685.       res += '{"type":1,"weaponImageId":2},'
  686.       res += '{"type":1,"weaponImageId":3},'
  687.       res += '{"type":1,"weaponImageId":4},'
  688.       res += '{"type":1,"weaponImageId":5},'
  689.       res += '{"type":1,"weaponImageId":6},'
  690.       res += '{"type":2,"weaponImageId":7},'
  691.       res += '{"type":2,"weaponImageId":8},'
  692.       res += '{"type":2,"weaponImageId":9},'
  693.       res += '{"type":0,"weaponImageId":10},'
  694.       res += '{"type":0,"weaponImageId":11},'
  695.       res += '{"type":0,"weaponImageId":12}'
  696.       res += ']'
  697.       res
  698.     end
  699.      
  700.     def self.get_vehicle(vehicle)
  701.       res = '{"bgm":' + get_audio(vehicle.bgm) + ','
  702.       res += '"characterIndex":' + vehicle.character_index.to_s + ','
  703.       res += '"characterName":"' + vehicle.character_name + '",'
  704.       res += '"startMapId":' + vehicle.start_map_id.to_s + ','
  705.       res += '"startX":' + vehicle.start_x.to_s + ','
  706.       res += '"startY":' + vehicle.start_y.to_s + '}'
  707.       res
  708.     end
  709.    
  710.     def self.get_system_sounds(system)
  711.       res = '['
  712.       for x in 0 ... system.sounds.size
  713.         res += get_audio(system.sounds[x])
  714.         res += ',' if x < system.sounds.size - 1
  715.       end
  716.      
  717.       res += ']'
  718.       res
  719.     end
  720.    
  721.     def self.get_system_messages
  722.       res = '{'
  723.       res += '"actionFailure":"There was no effect on %1!",'
  724.       res += '"actorDamage":"%1 took %2 damage!",'
  725.       res += '"actorDrain":"%1 was drained of %2 %3!",'
  726.       res += '"actorGain":"%1 gained %2 %3!",'
  727.       res += '"actorLoss":"%1 lost %2 %3!",'
  728.       res += '"actorNoDamage":"%1 took no damage!",'
  729.       res += '"actorNoHit":"Miss! %1 took no damage!",'
  730.       res += '"actorRecovery":"%1 recovered %2 %3!",'
  731.       res += '"alwaysDash":"Always Dash",'
  732.       res += '"bgmVolume":"BGM Volume",'
  733.       res += '"bgsVolume":"BGS Volume",'
  734.       res += '"buffAdd":"%1\'s %2 went up!",'
  735.       res += '"buffRemove":"%1''s %2 returned to normal!",'
  736.       res += '"commandRemember":"Command Remember",'
  737.       res += '"counterAttack":"%1 counterattacked!",'
  738.       res += '"criticalToActor":"A painful blow!!",'
  739.       res += '"criticalToEnemy":"An excellent hit!!",'
  740.       res += '"debuffAdd":"%1\'s %2 went down!",'
  741.       res += '"defeat":"%1 was defeated.",'
  742.       res += '"emerge":"%1 emerged!",'
  743.       res += '"enemyDamage":"%1 took %2 damage!",'
  744.       res += '"enemyDrain":"%1 was drained of %2 %3!",'
  745.       res += '"enemyGain":"%1 gained %2 %3!",'
  746.       res += '"enemyLoss":"%1 lost %2 %3!",'
  747.       res += '"enemyNoDamage":"%1 took no damage!",'
  748.       res += '"enemyNoHit":"Miss! %1 took no damage!",'
  749.       res += '"enemyRecovery":"%1 recovered %2 %3!",'
  750.       res += '"escapeFailure":"However, it was unable to escape!",'
  751.       res += '"escapeStart":"%1 has started to escape!",'
  752.       res += '"evasion":"%1 evaded the attack!",'
  753.       res += '"expNext":"To Next %1",'
  754.       res += '"expTotal":"Current %1",'
  755.       res += '"file":"File",'
  756.       res += '"levelUp":"%1 is now %2 %3!",'
  757.       res += '"loadMessage":"Load which file?",'
  758.       res += '"magicEvasion":"%1 nullified the magic!",'
  759.       res += '"magicReflection":"%1 reflected the magic!",'
  760.       res += '"meVolume":"ME Volume",'
  761.       res += '"obtainExp":"%1 %2 received!",'
  762.       res += '"obtainGold":"%1\\\\G found!",'
  763.       res += '"obtainItem":"%1 found!",'
  764.       res += '"obtainSkill":"%1 learned!",'
  765.       res += '"partyName":"%1\'s Party",'
  766.       res += '"possession":"Possession",'
  767.       res += '"preemptive":"%1 got the upper hand!",'
  768.       res += '"saveMessage":"Save to which file?",'
  769.       res += '"seVolume":"SE Volume",'
  770.       res += '"substitute":"%1 protected %2!",'
  771.       res += '"surprise":"%1 was surprised!",'
  772.       res += '"useItem":"%1 uses %2!",'
  773.       res += '"victory":"%1 was victorious!"'
  774.       res += '}'
  775.       res
  776.     end
  777.    
  778.     def self.get_test_battlers(battlers)
  779.       res = '['
  780.       for x in 0 ... battlers.size
  781.         battler = battlers[x]
  782.         res += '{'
  783.         res += '"actorId":' + battler.actor_id.to_s + ','
  784.         res += '"equips":' + battler.equips.to_s.gsub(/ /){''} + ','
  785.         res += '"level":' + battler.level.to_s
  786.         res += '}'
  787.         res += ',' if x < battlers.size - 1
  788.       end
  789.       res += ']'
  790.       res
  791.     end
  792.    
  793.     #===========================================================================
  794.     # MAPINFOS
  795.     #===========================================================================
  796.     def self.convert_mapinfos
  797.       f = File.open(FOLDER + "MapInfos.json", "w")
  798.       f.puts('[')
  799.       f.puts('null,')
  800.       max_key = $data_mapinfos.keys.max
  801.       for x in 1 .. max_key
  802.         map = $data_mapinfos[x]
  803.         if map
  804.           map_data = '{'
  805.           map_data += '"id":' + x.to_s + ','
  806.           map_data += '"expanded":' + map.expanded.to_s + ','
  807.           map_data += '"name":' + get_text(map.name) + ','
  808.           map_data += '"order":' + map.order.to_s + ','
  809.           map_data += '"parentId":' + map.parent_id.to_s + ','
  810.           map_data += '"scrollX":' + map.scroll_x.to_s + ','
  811.           map_data += '"scrollY":' + map.scroll_y.to_s
  812.           map_data += '}'
  813.         else
  814.           map_data = 'null'
  815.         end
  816.        
  817.         map_data += ',' if x < max_key
  818.         f.puts(map_data)
  819.       end      
  820.       f.puts(']')
  821.       f.close
  822.     end
  823.    
  824.  
  825.     #===========================================================================
  826.     # MAPS
  827.     #===========================================================================
  828.     def self.convert_map(filename)
  829.       map = load_data(filename)
  830.       f = File.open(FOLDER + filename.gsub(/Data\//){''}.gsub(/rvdata2/){'json'}, "w")
  831.       f.puts('{')
  832.      
  833.       #*************************************************************************
  834.       log("Map " + filename + " (" + map.display_name + ")")
  835.       filename.gsub!(/Map(\d+)\.rvdata2/) do
  836.         @logmap = sprintf('Map %d %s', $1.to_i, (
  837.           $data_mapinfos[$1.to_i] ? $data_mapinfos[$1.to_i].name : '???'))
  838.       end
  839.       #*************************************************************************
  840.      
  841.       map.autoplay_bgm ||= false
  842.       map.autoplay_bgs ||= false
  843.       map.battleback1_name ||= ''
  844.       map.battleback2_name ||= ''
  845.      
  846.       map_data = '"autoplayBgm":' + map.autoplay_bgm.to_s + ','
  847.       map_data += '"autoplayBgs":' + map.autoplay_bgs.to_s + ','
  848.       map_data += '"battleback1Name":"' + map.battleback1_name + '",'
  849.       map_data += '"battleback2Name":"' + map.battleback2_name + '",'
  850.       map_data += '"bgm":' + get_audio(map.bgm) + ','
  851.       map_data += '"bgs":' + get_audio(map.bgs) + ','
  852.       map_data += '"disableDashing":' + map.disable_dashing.to_s + ','
  853.       map_data += '"displayName":' + get_text(map.display_name) + ','
  854.       map_data += '"encounterList":' + get_encounter_list(map.encounter_list) + ','
  855.       map_data += '"encounterStep":' + map.encounter_step.to_s + ','
  856.       map_data += '"height":' + map.height.to_s + ','
  857.       map_data += '"note":' + get_text(map.note) + ','
  858.       map_data += '"parallaxLoopX":' + map.parallax_loop_x.to_s + ','
  859.       map_data += '"parallaxLoopY":' + map.parallax_loop_y.to_s + ','
  860.       map_data += '"parallaxName":"' + map.parallax_name + '",'
  861.       map_data += '"parallaxShow":' + map.parallax_show.to_s + ','
  862.       map_data += '"parallaxSx":' + map.parallax_sx.to_s + ','
  863.       map_data += '"parallaxSy":' + map.parallax_sy.to_s + ','
  864.       map_data += '"scrollType":' + map.scroll_type.to_s + ','
  865.       map_data += '"specifyBattleback":' + map.specify_battleback.to_s + ','
  866.       map_data += '"tilesetId":' + map.tileset_id.to_s + ','
  867.       map_data += '"width":' + map.width.to_s + ','
  868.       map_data += '"data":' + get_map_data(map.data).to_s.gsub(/ /){''} + ','
  869.       map_data += '"events":' + get_map_events(map.events)
  870.       f.puts(map_data)
  871.      
  872.       f.puts('}')
  873.       f.close
  874.     end
  875.    
  876.     def self.get_encounter_list(list)
  877.       res = '['
  878.       for x in 0 ... list.size
  879.         encounter = list[x]
  880.         encounter = RPG::Map::Encounter.new if !encounter
  881.         res += '{"regionSet":' + encounter.region_set.to_s.gsub(/ /){''} + ','
  882.         res += '"troopId":' + encounter.troop_id.to_s + ','
  883.         res += '"weight":' + encounter.weight.to_s
  884.         res += '}'
  885.         res += ',' if x < list.size - 1
  886.       end
  887.       res += ']'
  888.       res
  889.     end
  890.    
  891.     def self.get_map_data(data)
  892.       res = []
  893.       for z in 0 ... data.zsize - 1 # 3 map layers
  894.         for y in 0 ... data.ysize
  895.           for x in 0 ... data.xsize
  896.             res.push(data[x,y,z])
  897.           end
  898.         end
  899.       end
  900.       for y in 0 ... data.ysize # new 4th map layer?
  901.         for x in 0 ... data.xsize
  902.           res.push(0)
  903.         end
  904.       end
  905.       z = data.zsize - 1 # original 4th layer (regions + ???)
  906.       for y in 0 ... data.ysize
  907.         for x in 0 ... data.xsize
  908.           res.push(data[x,y,z])
  909.         end
  910.       end
  911.       for y in 0 ... data.ysize # regions
  912.         for x in 0 ... data.xsize
  913.           res.push(data[x,y,3] >> 8)
  914.         end
  915.       end
  916.       res
  917.     end
  918.    
  919.     def self.get_map_events(events)
  920.       res = '['
  921.       max_key = events.keys.max
  922.       if max_key
  923.         for x in 0 .. max_key
  924.           if events.has_key?(x)
  925.             event = events[x]
  926.             res += get_event(event)
  927.           else
  928.             res += 'null'
  929.           end
  930.           res += ',' if x < max_key
  931.         end
  932.       end
  933.       res += ']'
  934.       res
  935.     end
  936.    
  937.     def self.get_event(event)
  938.       #*************************************************************************
  939.       log("  Event " + event.id.to_s + " (" + get_text(event.name) + " @ " + event.x.to_s + "," + event.y.to_s + ")")
  940.       @logevent = sprintf('%s - Event %d %s (%d,%d)', @logmap, event.id, event.name, event.x, event.y)
  941.       #*************************************************************************
  942.       res = '{"id":' + event.id.to_s + ','
  943.       res += '"name":' + get_text(event.name) + ','
  944.       res += '"note":"",'
  945.       res += '"pages":' + get_event_pages(event.pages) + ','
  946.       res += '"x":' + event.x.to_s + ','
  947.       res += '"y":' + event.y.to_s      
  948.       res += '}'
  949.       res
  950.     end
  951.    
  952.     def self.get_event_pages(pages)
  953.       res = '['
  954.       for x in 0 ... pages.size
  955.         #***********************************************************************
  956.         log("    Page " + (x+1).to_s)
  957.         @logkey = sprintf('%s - Page %d', @logevent, x+1)
  958.         #***********************************************************************
  959.         page = pages[x]
  960.         page = RPG::Event::Page.new if !page
  961.         res += get_page(page)
  962.         res += ',' if x < pages.size - 1
  963.       end
  964.       res += ']'
  965.       res
  966.     end
  967.        
  968.     def self.get_page(page)
  969.       condition = page.condition
  970.       res = '{"conditions":'
  971.       res += '{"actorId":' + condition.actor_id.to_s + ','
  972.       res += '"actorValid":' + condition.actor_valid.to_s + ','
  973.       res += '"itemId":' + condition.item_id.to_s + ','
  974.       res += '"itemValid":' + condition.item_valid.to_s + ','
  975.       res += '"selfSwitchCh":"' + condition.self_switch_ch + '",'
  976.       res += '"selfSwitchValid":' + condition.self_switch_valid.to_s + ','
  977.       res += '"switch1Id":' + condition.switch1_id.to_s + ','
  978.       res += '"switch1Valid":' + condition.switch1_valid.to_s + ','
  979.       res += '"switch2Id":' + condition.switch2_id.to_s + ','
  980.       res += '"switch2Valid":' + condition.switch2_valid.to_s + ','
  981.       res += '"variableId":' + condition.variable_id.to_s + ','
  982.       res += '"variableValid":' + condition.variable_valid.to_s + ','
  983.       res += '"variableValue":' + condition.variable_value.to_s + '},'
  984.      
  985.       res += '"directionFix":' + page.direction_fix.to_s + ','
  986.      
  987.       graphic = page.graphic
  988.       res += '"image":'
  989.       res += '{"tileId":' + graphic.tile_id.to_s + ','
  990.       res += '"characterName":"' + graphic.character_name + '",'
  991.       res += '"direction":' + graphic.direction.to_s + ','
  992.       res += '"pattern":' + graphic.pattern.to_s + ','
  993.       res += '"characterIndex":' + graphic.character_index.to_s + '},'
  994.      
  995.       res += '"moveFrequency":' + page.move_frequency.to_s + ','
  996.       res += '"moveRoute":' + get_move_route(page.move_route) + ','
  997.       res += '"moveSpeed":' + page.move_speed.to_s + ','
  998.       res += '"moveType":' + page.move_type.to_s + ','
  999.       res += '"priorityType":' + page.priority_type.to_s + ','
  1000.       res += '"stepAnime":' + page.step_anime.to_s + ','
  1001.       res += '"through":' + page.through.to_s + ','
  1002.       res += '"trigger":' + page.trigger.to_s + ','
  1003.       res += '"walkAnime":' + page.walk_anime.to_s + ','
  1004.       res += '"list":' + get_command_list(page.list) + '}'
  1005.      
  1006.       res
  1007.     end
  1008.    
  1009.     #===========================================================================
  1010.     # SUPPORT OBJECTS FOR DATABASE
  1011.     #===========================================================================
  1012.    
  1013.     def self.get_traits(obj)
  1014.       res = '['
  1015.       count = 1
  1016.       max_count = obj.features.size
  1017.       obj.features.each do |feat|
  1018.         res += '{"code":' + feat.code.to_s + ','
  1019.         res += '"dataId":' + feat.data_id.to_s + ','
  1020.         res += '"value":' + feat.value.to_s + '}'
  1021.         res += ',' if count < max_count
  1022.         count += 1
  1023.       end      
  1024.       res += ']'
  1025.       res
  1026.     end
  1027.    
  1028.     def self.get_effects(obj)
  1029.       res = '['
  1030.       count = 1
  1031.       max_count = obj.effects.size
  1032.       obj.effects.each do |effct|
  1033.         res += '{"code":' + effct.code.to_s + ','
  1034.         res += '"dataId":' + effct.data_id.to_s + ','
  1035.         res += '"value1":' + effct.value1.to_s + ','
  1036.         res += '"value2":' + effct.value2.to_s + '}'
  1037.         res += ',' if count < max_count
  1038.         count += 1
  1039.       end      
  1040.       res += ']'
  1041.       res
  1042.     end
  1043.    
  1044.     def self.get_damage(obj)
  1045.       dmg = obj.damage
  1046.      
  1047.       if LOGSCRIPTS && obj.damage.formula.to_i.to_s != obj.damage.formula
  1048.         sl_data = sprintf('%s %d %s: Damage Formula: %s',
  1049.           (obj.is_a?(RPG::Skill) ? 'Skill' : 'Item'), obj.id, obj.name, dmg.formula)
  1050.         @scriptlog.puts(sl_data)
  1051.       end
  1052.      
  1053.       res = '{"critical":' + dmg.critical.to_s + ','
  1054.       res += '"elementId":' + dmg.element_id.to_s + ','
  1055.       res += '"formula":"' + dmg.formula + '",'
  1056.       res += '"type":' + dmg.type.to_s + ','
  1057.       res += '"variance":' + dmg.variance.to_s + '}'
  1058.       res
  1059.     end
  1060.    
  1061.    
  1062.     #===========================================================================
  1063.     #
  1064.     # EVENT COMMANDS
  1065.     #
  1066.     #===========================================================================
  1067.    
  1068.     #===========================================================================
  1069.     # COMMAND LISTS
  1070.     #===========================================================================
  1071.    
  1072.     def self.get_command_list(list)
  1073.       res = '['
  1074.       count = 1
  1075.       max_count = list.size
  1076.       list.each do |cmd|
  1077.         @loginfo = sprintf('%s Line %d: ', @logkey, count)
  1078.        
  1079.         case cmd.code
  1080.         when 102 # show choices
  1081.           cmd.parameters[1] -= 1 # disallow cancel
  1082.           cmd.parameters[1] = -2 if cmd.parameters[1] == 4 # branch on cancel
  1083.           cmd.parameters[2] = 0 # default
  1084.           cmd.parameters[3] = 2 # window position
  1085.           cmd.parameters[4] = 0 # window background
  1086.         when 104
  1087.           cmd.parameters[1] = 2 # key item
  1088.         when 108, 408 # comment
  1089.           log_comment(cmd.parameters[0])
  1090.         when 111
  1091.           if cmd.parameters[0] == 11 # Key Pressed
  1092.             # ASD buttons are not catered for in MV.  To use these, you will
  1093.             # have to add 41 (A), 43 (S) and 44 (D) to the Input.keyMapper hash
  1094.             # in rpg_core.js:
  1095.             # Input.keyMapper[41] = 'A'
  1096.             # Input.keyMapper[53] = 'S'
  1097.             # Input.keyMapper[44] = 'D'
  1098.             case cmd.parameters[1]
  1099.             when 14
  1100.               cmd.parameters = [12, "Input.isTriggered('A')"]
  1101.             when 15
  1102.               cmd.parameters = [12, "Input.isTriggered('S')"]
  1103.             when 16
  1104.               cmd.parameters = [12, "Input.isTriggered('D')"]
  1105.             else
  1106.               cmd.parameters[1] = ['', '', 'down', '', 'left', '', 'right', '', 'up',
  1107.                 '', '', 'shift', 'cancel', 'ok', '', '', '', 'pageup', 'pagedown'][
  1108.                 cmd.parameters[1]]
  1109.             end
  1110.           elsif cmd.parameters[0] == 12 # Script
  1111.             log_script('Conditional Branch script call', cmd.parameters[1])
  1112.           end
  1113.         when 122 # Control Variables
  1114.           if cmd.parameters[3] == 4 # Script
  1115.             log_script('Control Variables script call', cmd.parameters[4])
  1116.           end
  1117.         when 231 # show picture
  1118.           if cmd.parameters[9] == 2 # subtract
  1119.             params = cmd.parameters
  1120.             cmd.code = 355
  1121.             cmd.parameters = [sprintf('$gameScreen.showPicture(%d, "%s", %d, %s, %s, %d, %d, %d, %d)',
  1122.               params[0], params[1], params[2], (params[3] == 0 ? params[4].to_s : '$gameVariables.value(' + params[4].to_s + ')'),
  1123.               (params[3] == 0 ? params[5].to_s : '$gameVariables.value(' + params[5].to_s + ')'),
  1124.               params[6], params[7], params[8], params[9])]
  1125.           end
  1126.         when 232 # move picture
  1127.           cmd.parameters[1] = 0 # not used, but can't be blank in MV
  1128.           if cmd.parameters[9] == 2 # subtract
  1129.             params = cmd.parameters
  1130.             cmd.code = 355
  1131.             cmd.parameters = [sprintf('$gameScreen.movePicture(%d, %d, %s, %s, %d, %d, %d, %d, %d)%s',
  1132.               params[0], params[2], (params[3] == 0 ? params[4].to_s : '$gameVariables.value(' + params[4].to_s + ')'),
  1133.               (params[3] == 0 ? params[5].to_s : '$gameVariables.value(' + params[5].to_s + ')'),
  1134.               params[6], params[7], params[8], params[9], params[10], params[11] ? '; this.wait(' + params[10].to_s + ')' : '')]
  1135.           end
  1136.         when 285 # get location info
  1137.           cmd.parameters[1] = 6 if cmd.parameters[1] == 5 # region id now +1
  1138.         when 319 # change equipment
  1139.           cmd.parameters[1] += 1
  1140.         when 302 # shop processing
  1141.           cmd.parameters[3] = 0 if cmd.parameters[3].nil?
  1142.         when 322 # change actor graphic
  1143.           cmd.parameters[4] = 0 # SV graphic
  1144.           cmd.parameters[5] = ''
  1145.         when 355, 655 # Script call
  1146.           log_script('Script call', cmd.parameters[0])
  1147.         when 505 # Move route
  1148.           mvrcmd = cmd.parameters[0]
  1149.           if mvrcmd.code == 45 # script
  1150.             log_script('Move Route Script call', mvrcmd.parameters[0])
  1151.           end
  1152.         end
  1153.        
  1154.         evt_cmd = '{"code":' + cmd.code.to_s + ','
  1155.         evt_cmd += '"indent":' + cmd.indent.to_s + ','
  1156.         evt_cmd += '"parameters":' + convert_parameters(cmd.parameters) + '}'
  1157.        
  1158.         #***********************************************************************
  1159.         log("      " + evt_cmd)
  1160.         #***********************************************************************
  1161.        
  1162.         res += evt_cmd
  1163.         res += ',' if count < max_count
  1164.         count += 1
  1165.       end
  1166.       res += ']'
  1167.       res
  1168.     end
  1169.    
  1170.     def self.get_move_route(mr)
  1171.       res = '{"list":['
  1172.       list = mr.list
  1173.       for x in 0 ... list.size
  1174.         cmd = list[x]
  1175.        
  1176.         case cmd.code
  1177.         when 43
  1178.           if cmd.parameters[0] == 2 then
  1179.             cmd.code = 45
  1180.             cmd.parameters = ["this.setBlendMode(2);"]
  1181.           end
  1182.         end
  1183.        
  1184.         mvr = '{"code":' + cmd.code.to_s + ','
  1185.         mvr += '"indent":null,'
  1186.         mvr += '"parameters":' + convert_parameters(cmd.parameters) + '}'
  1187.        
  1188.         #***********************************************************************
  1189.         log("        " + mvr)
  1190.         #***********************************************************************
  1191.        
  1192.         res += mvr
  1193.         res += ',' if x < list.size - 1
  1194.       end
  1195.       res += '],"repeat":' + mr.repeat.to_s + ','
  1196.       res += '"skippable":' + mr.skippable.to_s + ','
  1197.       res += '"wait":' + mr.wait.to_s + '}'
  1198.       res
  1199.     end
  1200.    
  1201.     def self.convert_parameters(params)
  1202.       res = '['
  1203.       for x in 0 ... params.size
  1204.         param = params[x]
  1205.         case param
  1206.         when RPG::MoveRoute
  1207.           param = get_move_route(param)
  1208.         when RPG::MoveCommand
  1209.           param = get_move_command(param)
  1210.         when RPG::AudioFile
  1211.           param = get_audio(param)
  1212.         when String
  1213.           param = get_text(param)
  1214.         when Symbol
  1215.           param = get_text(param.to_s)
  1216.         when Tone
  1217.           param = get_tone(param)
  1218.         when Color
  1219.           param = get_color(param)
  1220.         end
  1221.        
  1222.         res += param.to_s
  1223.         res += ',' if x < params.size - 1
  1224.       end
  1225.       res += ']'
  1226.       res
  1227.     end
  1228.          
  1229.    
  1230.     #===========================================================================
  1231.     # COMMANDS
  1232.     #===========================================================================
  1233.    
  1234.     def self.get_move_command(param)
  1235.       res = '{"code":' + param.code.to_s + ','
  1236.       res += '"indent":null,'
  1237.       res += '"parameters":' + convert_parameters(param.parameters).to_s + '}'
  1238.       res
  1239.     end
  1240.    
  1241.     #===========================================================================
  1242.     # COMMON OBJECTS
  1243.     #===========================================================================
  1244.    
  1245.     def self.get_text(text)
  1246.       '"' + text.gsub(/\\/){'\\\\'}.gsub(/[\r\n]+/){'\\n'}.gsub(/"/){'\\"'} + '"'
  1247.    end
  1248.    
  1249.    def self.get_audio(a)
  1250.      a = RPG::AudioFile.new if !a
  1251.      res = '{"name":"' + a.name + '",'
  1252.      res += '"pan":0,'
  1253.      res += '"pitch":' + a.pitch.to_s + ','
  1254.      res += '"volume":' + a.volume.to_s + '}'
  1255.      res
  1256.    end      
  1257.    
  1258.    def self.get_color(color)
  1259.      res = '['
  1260.      res += color.red.to_s + ','
  1261.      res += color.green.to_s + ','
  1262.      res += color.blue.to_s + ','
  1263.      res += color.alpha.to_s
  1264.      res += ']'
  1265.      res
  1266.    end
  1267.    
  1268.    def self.get_tone(tone)
  1269.      res = '['
  1270.      res += tone.red.to_s + ','
  1271.      res += tone.green.to_s + ','
  1272.      res += tone.blue.to_s + ','
  1273.      res += tone.gray.to_s
  1274.      res += ']'
  1275.      res
  1276.    end
  1277.    
  1278.    def self.log(details)
  1279.      @log.puts(details) if LOGGING
  1280.    end
  1281.    
  1282.    def self.log_script(title, cmd)
  1283.      @scriptlog.puts(sprintf('%s - %s: %s', @loginfo, title, cmd)) if LOGSCRIPTS
  1284.    end
  1285.    
  1286.    def self.log_comment(comment)
  1287.      @commentlog.puts(sprintf('%s - Comment: %s', @loginfo, comment)) if LOGCOMMENTS
  1288.    end
  1289.  end
  1290. end
  1291. DEGICA::CONVERT::run
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top