def self.write_map(original_files_paths, maps_path, output_path, shuffle_level, logging, game_type)
Parameters:
-
game_type
(String
)
--
-
logging
(Boolean
)
--
-
shuffle_level
(Integer
)
--
-
output_path
(String
)
--
-
maps_path
(String
)
--
-
original_files_paths
(Array
)
--
def self.write_map(original_files_paths, maps_path, output_path, shuffle_level, logging, game_type)
maps_object_map = Hash[original_files_paths.map do |filename|
[File.basename(filename), Marshal.load(File.binread(filename))]
end]
maps_original_text = File.readlines(File.join(maps_path, 'maps.txt'), encoding: 'UTF-8', chomp: true).map do |line|
line.gsub('\#', "\n").strip
end.freeze
names_original_text = File.readlines(File.join(maps_path, 'names.txt'), encoding: 'UTF-8', chomp: true).map do |line|
line.gsub('\#', "\n").strip
end.freeze
maps_translated_text = File.readlines(File.join(maps_path, 'maps.txt'), encoding: 'UTF-8', chomp: true).map do |line|
line.gsub('\#', "\n").strip
end
names_translated_text = File.readlines(File.join(maps_path, 'names_trans.txt'), encoding: 'UTF-8', chomp: true).map do |line|
line.gsub('\#', "\n").strip
end
if shuffle_level.positive?
maps_translated_text.shuffle!
names_translated_text.shuffle!
if shuffle_level == 2
maps_translated_text = shuffle_words(maps_translated_text)
names_translated_text = shuffle_words(names_translated_text)
end
end
maps_translation_map = Hash[maps_original_text.zip(maps_translated_text)].freeze
names_translation_map = Hash[names_original_text.zip(names_translated_text)].freeze
# 401 - dialogue lines
# 102 - dialogue choices array
# 402 - one of the dialogue choices from the array
# 356 - system lines/special texts (do they even exist before mv?)
allowed_codes = [401, 102, 402, 356].freeze
maps_object_map.each do |filename, object|
display_name = object.display_name
display_name_gotten = names_translation_map[display_name]
object.display_name = display_name_gotten unless display_name_gotten.nil?
events = object.events
next if events.nil?
events.each_value do |event|
pages = event.pages
next if pages.nil?
pages.each do |page|
list = page.list
next if list.nil?
in_sequence = false
line = []
item_indices = []
list.each_with_index do |item, it|
code = item.code
unless allowed_codes.include?(code)
if in_sequence
joined = line.join('\#').strip
translated = get_parameter_translated(401, joined, maps_translation_map, game_type)
unless translated.nil? || translated.empty?
split = translated.split('\#')
split_length = split.length
line_length = line.length
item_indices.each_with_index do |index, i|
list[index].parameters[0] = i < split_length ? split[i] : ''
end
list[item_indices.last].parameters[0] = split[line_length..].join("\n") if split_length > line_length
end
end
next
end
parameters = item.parameters
if code == 401
next unless parameters[0].is_a?(String) && !parameters[0].empty?
in_sequence = true
line.push(parameters[0])
item_indices.push(it)
elsif parameters[0].is_a?(Array)
parameters[0].each_with_index do |subparameter, sp|
next unless subparameter.is_a?(String)
subparameter = subparameter.strip
next if subparameter.empty?
translated = get_parameter_translated(code, subparameter, maps_translation_map, game_type)
parameters[0][sp] = translated unless translated.nil? || translated.empty?
end
elsif parameters[0].is_a?(String)
parameter = parameters[0].strip
next if parameter.empty?
translated = get_parameter_translated(code, parameter, maps_translation_map, game_type)
parameters[0] = translated unless translated.nil? || translated.empty?
elsif parameters[1].is_a?(String)
parameter = parameters[1].strip
next if parameter.empty?
translated = get_parameter_translated(code, parameter, maps_translation_map, game_type)
parameters[1] = translated unless translated.nil? || translated.empty?
end
item.parameters = parameters
end
end
end
puts "Written #{filename}" if logging
File.binwrite(File.join(output_path, filename), Marshal.dump(object))
end
end