mirror of
https://gitlab.com/GameFeverOnline/mmm-nsf-changer.git
synced 2025-12-17 01:17:43 -04:00
First release. Let's just call it v1.0
This commit is contained in:
parent
742db55fa0
commit
cfe28d5f52
1 changed files with 56 additions and 23 deletions
|
|
@ -4,6 +4,7 @@ from glob import glob
|
||||||
import shutil
|
import shutil
|
||||||
import pathlib
|
import pathlib
|
||||||
import filecmp
|
import filecmp
|
||||||
|
import webbrowser
|
||||||
|
|
||||||
##Here goes the actual code
|
##Here goes the actual code
|
||||||
|
|
||||||
|
|
@ -22,10 +23,12 @@ def safelist():
|
||||||
|
|
||||||
#add
|
#add
|
||||||
|
|
||||||
def check_folder_structure(megamaker_folder):
|
def check_folder_structure(megamaker_folder, og_music=False):
|
||||||
megamaker_folder = os.path.abspath(megamaker_folder)
|
megamaker_folder = os.path.abspath(megamaker_folder)
|
||||||
subfolders = ([ f.path for f in os.scandir(megamaker_folder) if f.is_dir() ])
|
subfolders = ([ f.path for f in os.scandir(megamaker_folder) if f.is_dir() ])
|
||||||
music_folder = f"{megamaker_folder}/Music"
|
music_folder = f"{megamaker_folder}/Music"
|
||||||
|
if og_music:
|
||||||
|
music_folder = f"{megamaker_folder}/original_music"
|
||||||
file_names = []
|
file_names = []
|
||||||
if music_folder in subfolders:
|
if music_folder in subfolders:
|
||||||
file_paths = (glob(f"{music_folder}/*/*.nsf"))
|
file_paths = (glob(f"{music_folder}/*/*.nsf"))
|
||||||
|
|
@ -43,7 +46,11 @@ def move_music_to_ogmusic(path):
|
||||||
path = os.path.abspath(path)
|
path = os.path.abspath(path)
|
||||||
original_filepaths = check_folder_structure(path)
|
original_filepaths = check_folder_structure(path)
|
||||||
if original_filepaths:
|
if original_filepaths:
|
||||||
shutil.move(f"{path}/Music", f"{path}/original_music")
|
if not filecmp.cmp(f'{path}/Music/MM1/Cutman.nsf', f'{path}/Music/MM1/Oilman.nsf', shallow=False):
|
||||||
|
shutil.move(f"{path}/Music", f"{path}/original_music")
|
||||||
|
else:
|
||||||
|
print("Cutman.nsf and Oilman.nsf match in Music folder.")
|
||||||
|
return False
|
||||||
if not os.path.exists(f"{path}/Music"):
|
if not os.path.exists(f"{path}/Music"):
|
||||||
os.makedirs(f"{path}/Music")
|
os.makedirs(f"{path}/Music")
|
||||||
|
|
||||||
|
|
@ -58,41 +65,67 @@ def restore_ogmusic(path):
|
||||||
if os.path.exists(f"{path}/original_music"):
|
if os.path.exists(f"{path}/original_music"):
|
||||||
if os.path.exists(f'{path}/Music'):
|
if os.path.exists(f'{path}/Music'):
|
||||||
if check_folder_structure(f"{path}"):
|
if check_folder_structure(f"{path}"):
|
||||||
if not filecmp.cmp(f'{path}/Music/MM1/Cutman.nsf', f'{path}/original_music/MM1/Cutman.nsf', shallow=False):
|
if check_folder_structure(f"{path}", og_music=True):
|
||||||
shutil.rmtree(f"{path}/Music")
|
if not filecmp.cmp(f'{path}/Music/MM1/Cutman.nsf', f'{path}/original_music/MM1/Cutman.nsf', shallow=False):
|
||||||
shutil.move(f"{path}/original_music/", f"{path}/Music")
|
shutil.rmtree(f"{path}/Music")
|
||||||
|
shutil.move(f"{path}/original_music/", f"{path}/Music")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
print("something went wrong...")
|
||||||
else:
|
else:
|
||||||
print("something went wrong...")
|
return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
def nsf_changer (nsf_path, megamaker_folder):
|
def nsf_changer (nsf_path, megamaker_folder):
|
||||||
original_path = check_folder_structure(megamaker_folder)
|
original_path = check_folder_structure(megamaker_folder)
|
||||||
if original_path:
|
if original_path:
|
||||||
move_music_to_ogmusic(megamaker_folder)
|
move_music_to_ogmusic(megamaker_folder)
|
||||||
recreate_structure(nsf_path, original_path)
|
recreate_structure(nsf_path, original_path)
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
sg.theme('LightBlue')
|
||||||
|
gif = b"R0lGODdhQgAmAHcAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgAAACwAAAAAQgAmAIAAAAAAefsCzISPqcvtD6OctNqLs95chg92YgOGT/mNExpArOqhrgzPpW3WznvSHM8AknwbocK4QGKUBybCWYFCDdMV8XhNZpfbZvf5BUjD1fFteA6GqeR2WvtWxxPmHNwux9PdevAc++cVyDYotmZYWJeCaFLGt5i3yON4NvnYwih5aFl5Sdi4ScPZJwjaeWo3qpko2ooKmYmpKutqaruaWou7S/vae4v5ySv8OxxLjFxqPJvMfKxcHN2sK/087XsNnA3r3E29HfzsjS3+rXOOnn5QAAAh+QQJCgAAACwCAAYAPgAeAIAAAAAAefsClYSPqcvtD6OctNqLcw28a9R5W0hy31FaZXoCLLWSrSuPsdm+0y2eusTD+Wqw4OwXCQaOxJ0x1wQ+hyHV9IOEKJlV243bc/IM2QerTH6iG+doYkvrFrtr+JrRli/stXr/T6cGGKaQJ2IYkxa4eDiIg7ii2Mj46LgUN/mFWUl5CSnJqfm56WkJWjpGerqq2go5CmvqSlIAACH5BAkKAAAALAIABgA+AB4AgAAAAAB5+wKthI+pF+0Lo5zTPYqzBrbtDyZdEJbfaKYYqm4s9C5xOYudVIM5c0e724MFZUNaj/XjFEPI4xKRzDQthqT1qaRmL1et0GvTTi9fMhEMdYqxVfbWc+aqzYounbfO39Po8P5NAtjWxyenB1c3B2e3qBiYeBjIKOlY1hiJUykYd2n4N+jZiegnSkmIF2o6kgpa2qrqCjgWOwtr+1r7qruZK6vZC+wYjMn7u0o8zFpsUQAAIfkECQoAAAAsAgAGAD4AHgCAAAAAAHn7AqGEb6GL7Q+jfIvNi3OrSvsPcQFIkmKJAifFpaW4ru4Ht6o9e3WV4K7M2o1uvBzQIewQLbPjJtkrNn1I6FI5LcaszpdtK4wyf99y+DrMWsA7MVbDVsZh7jTcvMbX6vzIvJ809OenJ1g42HWAeFjYF9KIVrcoFZSnxXiZOValKYdpCerZaTgqCTkZSpqKKpoK+Nkaqyr7Oso6i1u7espbGolWAAAh+QQJCgAAACwCAAgAPgAcAIAAAAAAefsCooSPCcGtD6OcqTmKs142bNl5nxKOUGkiaKp27LG+nCXPVx2nObuPvfnbBD/DzPDokiFpkd/y9ngyDCGp6JTEMqvZaJf0rSS5TC0UXPZuydPm+J1GX9htcxtlpdJB8Hm4tcbGF+gXJ0bIpYcogvcH05docwfJ6KhYSHY5uah5pYYZ2cgp6Sm3mUnaqZrKKorqehpbOUo3C2oruwpbpUvZS9tRAAA7"
|
||||||
layout = [
|
layout = [
|
||||||
|
[sg.Text("Mega Man Maker NSF Music Changer | Made by Timothy GFO", justification="center")],
|
||||||
|
[sg.Text("YouTube", enable_events = True, key="-YT-", text_color="red"), sg.Text("GitLab",enable_events = True,key="-GIT-", text_color="purple"), sg.Text("Blog",enable_events = True,key="-SITE-", text_color="blue")],
|
||||||
[sg.Text("Input NSF File:"), sg.Input(key="-IN-"),sg.FileBrowse(file_types=(("NSF Files", "*.nsf*"),))],
|
[sg.Text("Input NSF File:"), sg.Input(key="-IN-"),sg.FileBrowse(file_types=(("NSF Files", "*.nsf*"),))],
|
||||||
[sg.Text("MegaMaker Folder:"), sg.Input(key="-OUT-"), sg.FolderBrowse()],
|
[sg.Text("MegaMaker Folder:"), sg.Input(key="-OUT-"), sg.FolderBrowse()],
|
||||||
[sg.Exit(), sg.Button("Replace NSF Music"), sg.Button("Restore Original Music")],
|
[sg.Exit(),sg.Button("About") , sg.Button("Replace NSF Music"), sg.Button("Restore Original Music"), sg.Image(data=gif, key='_IMAGE_')],
|
||||||
]
|
]
|
||||||
|
|
||||||
window = sg.Window("MMM NSF Changer", layout, resizable=True)
|
|
||||||
|
|
||||||
while True:
|
how_to_use = "I made this tool to be able to change the music for any Mega Man Maker level while playing the game. It works by replacing every nsf file with a custom one, but while preserving the original folders and file names.\n\nTo use it, just choose a nsf file and then tell the program where you store the *game* folder. That is where the .exe is, not the user folder.\n\nIf you find this useful, you can check out my YouTube Channel or my blog since I will keep making tools like this. Also, if you find any bugs or errors remember to notify me at GitLab by making an Issue."
|
||||||
|
|
||||||
disclaimer = sg.popup_yes_no('NSF Changer, by Timothy GFO', 'This program is not complete, there WILL be bugs. Use at your own risk.', 'Do you want to continue?')
|
|
||||||
if disclaimer == "Yes":
|
window = sg.Window("MMM NSF Music Changer v1.0", layout, grab_anywhere=True)
|
||||||
event,values = window.read()
|
disclaimer = sg.popup_yes_no('NSF Changer, by Timothy GFO', 'This program is not complete, there WILL be bugs. Use at your own risk.', 'Do you want to continue?')
|
||||||
if event in (sg.WINDOW_CLOSED,"Exit"):
|
while disclaimer == "Yes":
|
||||||
break
|
event,values = window.read(timeout=50)
|
||||||
if event == "Replace NSF Music":
|
if event in (sg.WINDOW_CLOSED,"Exit"):
|
||||||
#sg.popup_error("DOESNT WORK HAHAHAA")
|
|
||||||
nsf_changer(values["-IN-"], values["-OUT-"])
|
|
||||||
#recreate_structure(values["-IN-"], values["-OUT-"])
|
|
||||||
if event == "Restore Original Music":
|
|
||||||
# sg.popup_error("DOESNT WORK EITHER HAHAHAHAHAHAA")
|
|
||||||
restore_ogmusic(values["-OUT-"])
|
|
||||||
else:
|
|
||||||
break
|
break
|
||||||
|
window.Element('_IMAGE_').UpdateAnimation(gif, time_between_frames=100)
|
||||||
|
if event == "-YT-":
|
||||||
|
webbrowser.open("https://youtube.com/gamefeveronline")
|
||||||
|
if event == "-SITE-":
|
||||||
|
webbrowser.open("https://gamefeveronline.gitlab.io")
|
||||||
|
if event == "-GIT-":
|
||||||
|
webbrowser.open("https://gitlab.com/gamefeveronline")
|
||||||
|
if event == "About":
|
||||||
|
sg.popup(how_to_use)
|
||||||
|
if event == "Replace NSF Music":
|
||||||
|
if not nsf_changer(values["-IN-"], values["-OUT-"]):
|
||||||
|
restore_ogmusic(values["-OUT-"])
|
||||||
|
if not nsf_changer(values["-IN-"], values["-OUT-"]):
|
||||||
|
sg.popup_error("MegaMaker folder is not valid or definitions out of date.")
|
||||||
|
if event == "Restore Original Music":
|
||||||
|
# sg.popup_error("DOESNT WORK EITHER HAHAHAHAHAHAA")
|
||||||
|
if not restore_ogmusic(values["-OUT-"]):
|
||||||
|
sg.popup_error("Unexpected folder structure or differing")
|
||||||
window.close()
|
window.close()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue