From 3fc7f006702d50cbfc9d23f28ea50ab15d201def Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christopher=20Holzmann=20P=C3=A9rez?= Date: Thu, 29 Nov 2018 00:34:10 +0100 Subject: [PATCH] v1.2 Added character menu, spirit board, mii clothes, cores, stickers, spirits, milestones, stores, exploration, gym, dojos and music --- README.md | 21 +- Ultimate Smasher.py | 663 +++++++++++++++++++++++++++++++++++++++----- 2 files changed, 608 insertions(+), 76 deletions(-) diff --git a/README.md b/README.md index 0430545..06c6bee 100644 --- a/README.md +++ b/README.md @@ -3,19 +3,28 @@ A Super Smash Bros. Ultimate (Nintendo Switch) save editor written in Python Features ===== -With Ultimate Smasher you can edit the following: +With Ultimate Smasher you can edit the amounts of: * Gold * SP * Hammers * Tickets -* Snacks - +* Snacks (S, M, L) It also allows to: -* Unlock the full roster -* Get All Cores +* Unlock/Lock characters +* Get all Cores +* Get all stickers +* Get all spirits +* Unlock all milestones +* Unlock Mii clothes +* Unlock stores +* Unlock Exploration +* Unlock gym +* Unlock dojos +* Unlock music +* Get a full sized Spirit Board Other features ===== @@ -24,4 +33,4 @@ Other features - The code is even worse -*I'm not held responsible for data losses, PCs exploding, nuclear detonations...etc* +*I'm not held responsible for data losses, PCs or Switches exploding, nuclear detonations...etc* diff --git a/Ultimate Smasher.py b/Ultimate Smasher.py index 1c00aa4..93c0e6a 100644 --- a/Ultimate Smasher.py +++ b/Ultimate Smasher.py @@ -13,16 +13,16 @@ class GUI(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) - self.title("Ultimate Smasher v1.1") - self.geometry("500x340") - + self.title("Ultimate Smasher v1.2") + self.geometry("500x500") + #Open and Save Buttons self.btn_opensavefile = tk.Button(text="Open File", command=self.openfile) self.btn_opensavefile.pack(side=tk.TOP, fill=tk.X) - + self.btn_savefile = tk.Button(text="Save File", command=self.savefile) self.btn_savefile.pack(side=tk.BOTTOM, fill=tk.X) - + #SP self.sp=tk.IntVar() self.lbl_sp = tk.Label(text = "SP") @@ -31,7 +31,7 @@ def __init__(self, *args, **kwargs): self.txtbx_sp.place(x=90, y=50) self.btn_checksp = tk.Button(self, text=u'\u2713',width=2, height=1, command=self.checksp) self.btn_checksp.place(x=170,y=47) - + #Gold self.gold=tk.IntVar() self.lbl_gold = tk.Label(text = "Gold") @@ -49,7 +49,7 @@ def __init__(self, *args, **kwargs): self.txtbx_hammers.place(x=90, y=150) self.btn_checkhammers = tk.Button(self, text=u'\u2713',width=2, height=1, command=self.checkhammers) self.btn_checkhammers.place(x=170,y=147) - + #Tickets self.tickets=tk.IntVar() self.lbl_tickets = tk.Label(text = "Tickets") @@ -58,104 +58,127 @@ def __init__(self, *args, **kwargs): self.txtbx_tickets.place(x=90, y=200) self.btn_checktickets = tk.Button(self, text=u'\u2713',width=2, height=1, command=self.checktickets) self.btn_checktickets.place(x=170,y=197) - + #Snack (S) self.snacks=tk.IntVar() self.lbl_snacks = tk.Label(text = "Snack (S)") - self.lbl_snacks.place(x=300,y=50) + self.lbl_snacks.place(x=20,y=250) self.txtbx_snacks=tk.Entry(self, width=9, textvariable=self.snacks) - self.txtbx_snacks.place(x=370, y=50) + self.txtbx_snacks.place(x=90, y=250) self.btn_checksnacks = tk.Button(self, text=u'\u2713',width=2, height=1, command=self.checksnacks) - self.btn_checksnacks.place(x=450,y=47) - + self.btn_checksnacks.place(x=170,y=247) + #Snack (M) self.snackm=tk.IntVar() self.lbl_snackm = tk.Label(text = "Snack (M)") - self.lbl_snackm.place(x=300,y=100) + self.lbl_snackm.place(x=20,y=300) self.txtbx_snackm=tk.Entry(self, width=9, textvariable=self.snackm) - self.txtbx_snackm.place(x=370, y=100) + self.txtbx_snackm.place(x=90, y=300) self.btn_checksnackm = tk.Button(self, text=u'\u2713',width=2, height=1, command=self.checksnackm) - self.btn_checksnackm.place(x=450,y=97) + self.btn_checksnackm.place(x=170,y=297) #Snack (L) self.snackl=tk.IntVar() self.lbl_snackl = tk.Label(text = "Snack (L)") - self.lbl_snackl.place(x=300,y=150) + self.lbl_snackl.place(x=20,y=350) self.txtbx_snackl=tk.Entry(self, width=9, textvariable=self.snackl) - self.txtbx_snackl.place(x=370, y=150) + self.txtbx_snackl.place(x=90, y=350) self.btn_checksnackl = tk.Button(self, text=u'\u2713',width=2, height=1, command=self.checksnackl) - self.btn_checksnackl.place(x=450,y=147) - + self.btn_checksnackl.place(x=170,y=347) + #Roster self.btn_unlockroster = tk.Button(self, text="Unlock Roster", command=self.unlockroster) - self.btn_unlockroster.place(x=300,y=197) + self.btn_unlockroster.place(x=300,y=47) + + #Characters + self.btn_characters = tk.Button(self, text="Character Menu", command=self.characters) + self.btn_characters.place(x=300,y=97) + + #Cores and Stickers + self.btn_unlockcores = tk.Button(self, text="All Cores and Stickers", command=self.unlockcores) + self.btn_unlockcores.place(x=300,y=147) + + #Spirits + self.btn_unlockspirits = tk.Button(self, text="All Spirits", command=self.unlockspirits) + self.btn_unlockspirits.place(x=300,y=197) - #Cores - self.btn_unlockcores = tk.Button(self, text="Get All Cores", command=self.unlockcores) - self.btn_unlockcores.place(x=300,y=247) + #Spirit Board + self.btn_spiritboard = tk.Button(self, text="Full Size Spirit Board (WIP)", command=self.spiritboard) + self.btn_spiritboard.place(x=300,y=247) + + #Milestones + self.btn_unlockmilestones = tk.Button(self, text="Unlock Milestones", command=self.unlockmilestones) + self.btn_unlockmilestones.place(x=300,y=297) + + #Mii Clothes + self.btn_unlockmiiclothes = tk.Button(self, text="Unlock Mii Clothes (WIP)", command=self.unlockmiiclothes) + self.btn_unlockmiiclothes.place(x=300,y=347) + + #Stores, Explore, Gym, Dojo, Music + self.btn_storesexploregymdojomusic = tk.Button(self, text="Unlock Stores, Exploration,\nGym, Dojo and Music", command=self.storesexploregymdojomusic) + self.btn_storesexploregymdojomusic.place(x=300,y=397) def openfile(self): filename = askopenfilename(initialfile="system_data.bin") f = open(filename, "r+b").read() - print (binascii.hexlify(f)) global h h=(binascii.hexlify(f)) tkMessageBox.showinfo(title="", message="Savefile loaded") - + #Fills every box with its data if "h" in globals(): - + #SP sp=(binascii.hexlify(f[0x4831e4:0x4831e8])) sp1=(binascii.unhexlify(sp)) sp2= struct.unpack("