mirror of
https://github.com/pmret/papermario.git
synced 2024-11-09 20:42:41 +01:00
150 lines
4.6 KiB
Python
150 lines
4.6 KiB
Python
|
#!/usr/bin/python3
|
||
|
|
||
|
import os
|
||
|
from pathlib import Path
|
||
|
|
||
|
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||
|
root_dir = script_dir + "/../"
|
||
|
asm_dir = root_dir + "ver/current/asm/"
|
||
|
asm_effects_dir = asm_dir + "nonmatchings/effects/"
|
||
|
asm_data_dir = asm_dir + "data/effects/"
|
||
|
|
||
|
data_to_thing = {
|
||
|
"337F10": "sparkles",
|
||
|
"339F10": "shape_spell",
|
||
|
"33BB70": "gather_energy_pink",
|
||
|
"33D5D0": "drop_leaves",
|
||
|
"33EFE0": "dust",
|
||
|
"3407C0": "shattering_stones",
|
||
|
"342120": "smoke_ring",
|
||
|
"342FD0": "damage_stars",
|
||
|
"343F30": "explosion",
|
||
|
"345190": "lens_flare",
|
||
|
"345B10": "got_item_outline",
|
||
|
"34E710": "spiky_white_aura",
|
||
|
"34F480": "smoke_impact",
|
||
|
"352CB0": "purple_ring",
|
||
|
"354F20": "stars_burst",
|
||
|
"355D10": "stars_shimmer",
|
||
|
"3564E0": "rising_bubble",
|
||
|
"357380": "ring_blast",
|
||
|
"359320": "shockwave",
|
||
|
"35A580": "music_note",
|
||
|
"35BFB0": "smoke_burst",
|
||
|
"35C530": "sweat",
|
||
|
"35E8A0": "windy_leaves",
|
||
|
"35F0A0": "falling_leaves",
|
||
|
"360A10": "stars_spread",
|
||
|
"361640": "steam_burst",
|
||
|
"362C30": "stars_orbiting",
|
||
|
"365970": "green_impact",
|
||
|
"366C80": "radial_shimmer",
|
||
|
"36AE80": "ending_decals",
|
||
|
"36DE10": "light_rays",
|
||
|
"36ED30": "lightning",
|
||
|
"374D80": "shimmer_burst",
|
||
|
"375500": "energy_shockwave",
|
||
|
"376FC0": "shimmer_wave",
|
||
|
"37ACF0": "bulb_glow",
|
||
|
"37D140": "effect_3D",
|
||
|
"38A2F0": "firework",
|
||
|
"38BAB0": "confetti",
|
||
|
"38D040": "snowfall",
|
||
|
"38E8F0": "effect_46",
|
||
|
"38F6F0": "gather_magic",
|
||
|
"393080": "flashing_box_shockwave",
|
||
|
"3960C0": "floating_rock",
|
||
|
"397010": "chomp_drop",
|
||
|
"3BD770": "snowman_doll",
|
||
|
"3C1B60": "fright_jar",
|
||
|
"3CB7C0": "stop_watch",
|
||
|
"3CD670": "effect_63",
|
||
|
"3D11B0": "effect_65",
|
||
|
"3D2460": "tubba_heart_attack",
|
||
|
"3D3910": "whirlwind",
|
||
|
"3D4930": "red_impact",
|
||
|
"3D4E70": "floating_cloud_puff",
|
||
|
"3D5E60": "energy_in_out",
|
||
|
"3D7740": "shiny_flare",
|
||
|
"3D80B0": "huff_puff_breath",
|
||
|
"3D8F30": "cold_breath",
|
||
|
"3DBEA0": "embers",
|
||
|
"3DCD00": "hieroglyphs",
|
||
|
"3DED90": "misc_particles",
|
||
|
"3E11B0": "static_status",
|
||
|
"3E1CC0": "moving_cloud",
|
||
|
"3E5060": "firework_rocket",
|
||
|
"3E5ED0": "peach_star_beam",
|
||
|
"3EBC30": "chapter_change",
|
||
|
"3F8CA0": "ice_shard",
|
||
|
"3FA480": "spirit_card",
|
||
|
"3FF180": "lil_oink",
|
||
|
"4032A0": "something_rotating",
|
||
|
"403BB0": "breaking_junk",
|
||
|
"404E40": "partner_buff",
|
||
|
"407040": "quizmo_assistant",
|
||
|
"40A180": "ice_pillar",
|
||
|
"40BB70": "sun",
|
||
|
"40D130": "star_spirits_energy",
|
||
|
"412FD0": "pink_sparkles",
|
||
|
"413F20": "star_outline",
|
||
|
}
|
||
|
|
||
|
def handle_symbol(effect, symbol):
|
||
|
for root, dirs, files in os.walk(asm_effects_dir + effect + "/"):
|
||
|
for f_name in files:
|
||
|
if f_name.endswith(".s"):
|
||
|
f_path = os.path.join(root, f_name)
|
||
|
|
||
|
with open(f_path) as f:
|
||
|
asm_lines = f.readlines()
|
||
|
|
||
|
has_rodata_section = False
|
||
|
for line in asm_lines:
|
||
|
if ".section .rodata" in line:
|
||
|
has_rodata_section = True
|
||
|
continue
|
||
|
if symbol[1] in line:
|
||
|
if not has_rodata_section:
|
||
|
asm_lines.insert(3, ".section .rodata\n")
|
||
|
asm_lines.insert(4, "\n")
|
||
|
asm_lines.insert(5, ".section .text\n")
|
||
|
asm_lines.insert(6, "\n")
|
||
|
asm_lines.insert(5, f"dlabel {symbol[1]}\n")
|
||
|
asm_lines.insert(6, f"{symbol[2]}\n")
|
||
|
asm_lines.insert(7, "\n")
|
||
|
|
||
|
with open(f_path, "w", newline="\n") as f:
|
||
|
f.write("".join(asm_lines))
|
||
|
|
||
|
return True
|
||
|
return False
|
||
|
|
||
|
|
||
|
def handle_file(f_path):
|
||
|
with open(f_path) as f:
|
||
|
rodata_lines = f.readlines()[4:]
|
||
|
|
||
|
effect = f_path.split("/")[-1].split(".")[0]
|
||
|
|
||
|
symbols = []
|
||
|
for i in range(0, len(rodata_lines), 3):
|
||
|
l1 = rodata_lines[i].strip()
|
||
|
l2 = rodata_lines[i + 1].strip()
|
||
|
symbols.append((i + 4, l1.split()[1], l2))
|
||
|
|
||
|
for symbol in reversed(symbols):
|
||
|
if symbol[2].startswith(".word") and not symbol[1].startswith("jtbl_"):
|
||
|
print("skipping" + str(symbol))
|
||
|
continue
|
||
|
migrated = handle_symbol(data_to_thing[effect], symbol)
|
||
|
|
||
|
# Walk through asm files and rename stuff
|
||
|
print("Walking through asm files")
|
||
|
for root, dirs, files in os.walk(asm_data_dir):
|
||
|
for f_name in files:
|
||
|
if f_name.endswith(".data.s"):
|
||
|
f_path = os.path.join(root, f_name)
|
||
|
|
||
|
handle_file(f_path)
|