def write_to_project(self, resource_open): # Dump an additional YML with color0 data palette_settings = dict() log.debug("Writing palette settings") for i in range(0, 32): # For each map tileset entry = dict() tileset = None for ts in self.tilesets: if ts.has_map_tileset(i): tileset = ts break palettes = tileset.get_palettes_by_map_tileset(i) palettes.sort() for (palette_id, palette) in palettes: entry[palette_id] = palette.settings_yml_rep() palette_settings[i] = entry with resource_open("map_palette_settings", "yml") as f: yml_str_rep = yml_dump(palette_settings, default_flow_style=False) yml_str_rep = convert_values_to_hex_repr(yml_str_rep, "Event Flag") f.write(yml_str_rep) # Dump the tilesets for i, tileset in enumerate(self.tilesets): log.debug("Writing tileset #{}".format(i)) with resource_open("Tilesets/" + str(i).zfill(2), "fts") as f: tileset.to_file(f)
def to_yml_file(self, f, default_flow_style=False): yml_str_rep = yml_dump(self.to_yml_rep(), default_flow_style=default_flow_style) # Rewrite hexints in hexidecimal # The YAML parser does not offer this option, so this has to be done with a regex for hex_label in self.schema.yml_rep_hex_labels(): yml_str_rep = convert_values_to_hex_repr(yml_str_rep, hex_label) f.write(yml_str_rep)
def write_to_project(self, resourceOpener): out = dict() x = y = 0 rowOut = dict() for entry in self.door_areas: if not entry: rowOut[x % 32] = None else: rowOut[x % 32] = [z.yml_rep() for z in entry] if (x % 32) == 31: # Start new row out[y] = rowOut x = 0 y += 1 rowOut = dict() else: x += 1 with resourceOpener("map_doors", "yml", True) as f: s = yml_dump(out, default_flow_style=False) s = convert_values_to_hex_repr(yml_str_rep=s, key="Event Flag") f.write(s)
def write_to_project(self, resourceOpener): out = dict() x = y = 0 rowOut = dict() for entry in self.door_areas: if not entry: rowOut[x % 32] = None else: rowOut[x % 32] = [z.yml_rep() for z in entry] if (x % 32) == 31: # Start new row out[y] = rowOut x = 0 y += 1 rowOut = dict() else: x += 1 with resourceOpener("map_doors", "yml", True) as f: s = yml_dump( out, default_flow_style=False) s = convert_values_to_hex_repr(yml_str_rep=s, key="Event Flag") f.write(s)
def test_convert_values_to_hex_repr(): assert_equal(convert_values_to_hex_repr("ABC: 0", "ABC"), "ABC: 0x0") assert_equal(convert_values_to_hex_repr("ABC: 55", "ABC"), "ABC: 0x37") assert_equal(convert_values_to_hex_repr("ABC: 55", "ABCD"), "ABC: 55") assert_equal(convert_values_to_hex_repr("A:\n - {ABC: 16}", "ABC"), "A:\n - {ABC: 0x10}")
def write_map_palette_settings(self, palette_settings, resource_open): with resource_open("map_palette_settings", "yml") as f: yml_str_rep = yml_dump(palette_settings, default_flow_style=False) yml_str_rep = convert_values_to_hex_repr(yml_str_rep, "Event Flag") f.write(yml_str_rep)
def upgrade_project(self, old_version, new_version, rom, resource_open_r, resource_open_w, resource_delete): if old_version == new_version: return elif old_version == 3: replace_field_in_yml(resource_name="item_configuration_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Effect", new_key="Action") replace_field_in_yml(resource_name="psi_ability_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Effect", new_key="Action") replace_field_in_yml(resource_name="psi_ability_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="PSI Name", value_map={0: None, 1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 5, 7: 6, 8: 7, 9: 8, 10: 9, 11: 10, 12: 11, 13: 12, 14: 13, 15: 14, 16: 15, 17: 16}) resource_delete("cmd_window_text") resource_delete("psi_anim_palettes") resource_delete("sound_stone_palette") self.upgrade_project(old_version=old_version + 1, new_version=new_version, rom=rom, resource_open_r=resource_open_r, resource_open_w=resource_open_w, resource_delete=resource_delete) elif old_version == 2: replace_field_in_yml(resource_name="timed_delivery_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Suitable Area Text Pointer", new_key="Delivery Success Text Pointer") replace_field_in_yml(resource_name="timed_delivery_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Unsuitable Area Text Pointer", new_key="Delivery Failure Text Pointer") with resource_open_r("timed_delivery_table", "yml") as f: out = yml_load(f) yml_str_rep = yml_dump(out, default_flow_style=False) yml_str_rep = convert_values_to_hex_repr(yml_str_rep, "Event Flag") with resource_open_w("timed_delivery_table", "yml") as f: f.write(yml_str_rep) self.upgrade_project(old_version=old_version + 1, new_version=new_version, rom=rom, resource_open_r=resource_open_r, resource_open_w=resource_open_w, resource_delete=resource_delete) elif old_version == 1: replace_field_in_yml(resource_name="psi_ability_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Target", new_key="Usability Outside of Battle", value_map={"Nobody": "Other", "Enemies": "Unusable", "Allies": "Usable"}) replace_field_in_yml(resource_name="battle_action_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Direction", value_map={"Party": "Enemy", "Enemy": "Party"}) self.upgrade_project(old_version=old_version + 1, new_version=new_version, rom=rom, resource_open_r=resource_open_r, resource_open_w=resource_open_w, resource_delete=resource_delete) else: self.upgrade_project(old_version + 1, new_version, rom, resource_open_r, resource_open_w, resource_delete)
def upgrade_project(self, old_version, new_version, rom, resource_open_r, resource_open_w, resource_delete): if old_version == new_version: return elif old_version == 3: replace_field_in_yml(resource_name="item_configuration_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Effect", new_key="Action") replace_field_in_yml(resource_name="psi_ability_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Effect", new_key="Action") replace_field_in_yml(resource_name="psi_ability_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="PSI Name", value_map={0: None, 1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 5, 7: 6, 8: 7, 9: 8, 10: 9, 11: 10, 12: 11, 13: 12, 14: 13, 15: 14, 16: 15, 17: 16}) resource_delete("cmd_window_text") resource_delete("psi_anim_palettes") resource_delete("sound_stone_palette") self.upgrade_project(old_version=old_version + 1, new_version=new_version, rom=rom, resource_open_r=resource_open_r, resource_open_w=resource_open_w, resource_delete=resource_delete) elif old_version == 2: replace_field_in_yml(resource_name="timed_delivery_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Suitable Area Text Pointer", new_key="Delivery Success Text Pointer") replace_field_in_yml(resource_name="timed_delivery_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Unsuitable Area Text Pointer", new_key="Delivery Failure Text Pointer") with resource_open_r("timed_delivery_table", "yml", True) as f: out = yml_load(f) yml_str_rep = yml_dump(out, default_flow_style=False) yml_str_rep = convert_values_to_hex_repr(yml_str_rep, "Event Flag") with resource_open_w("timed_delivery_table", "yml", True) as f: f.write(yml_str_rep) self.upgrade_project(old_version=old_version + 1, new_version=new_version, rom=rom, resource_open_r=resource_open_r, resource_open_w=resource_open_w, resource_delete=resource_delete) elif old_version == 1: replace_field_in_yml(resource_name="psi_ability_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Target", new_key="Usability Outside of Battle", value_map={"Nobody": "Other", "Enemies": "Unusable", "Allies": "Usable"}) replace_field_in_yml(resource_name="battle_action_table", resource_open_r=resource_open_r, resource_open_w=resource_open_w, key="Direction", value_map={"Party": "Enemy", "Enemy": "Party"}) self.upgrade_project(old_version=old_version + 1, new_version=new_version, rom=rom, resource_open_r=resource_open_r, resource_open_w=resource_open_w, resource_delete=resource_delete) else: self.upgrade_project(old_version + 1, new_version, rom, resource_open_r, resource_open_w, resource_delete)