diff --git a/.github/workflows/pyinstaller-linux.yml b/.github/workflows/pyinstaller-linux.yml index b041fc9..d0cf26e 100644 --- a/.github/workflows/pyinstaller-linux.yml +++ b/.github/workflows/pyinstaller-linux.yml @@ -25,7 +25,7 @@ jobs: pip install tksvg - name: Run PyInstaller run: | - pyinstaller --noconfirm --onedir --console --name "Snark" --add-data "version.txt:." --add-data "activities.txt:." --add-data "icon-linux.svg:." --add-data "logo128.png:." --add-data "icon-win32.ico:." --add-data "icon-linux.png:." --add-data "LICENSE:." --add-data "README.md:." --add-data "save:save/" --add-data "scripts:scripts/" --add-data "themes:themes/" --add-data "third_party:third_party/" --add-data "images:images/" --add-data "logs:logs/" "GUI.py" + pyinstaller --noconfirm --onedir --console --name "Snark" --add-data "version.txt:." --add-data "activities.txt:." --add-data "icon-linux.svg:." --add-data "logo128.png:." --add-data "icon-win32.ico:." --add-data "icon-linux.png:." --add-data "LICENSE:." --add-data "README.md:." --add-data "save:save/" --add-data "themes:themes/" --add-data "third_party:third_party/" --add-data "images:images/" --add-data "logs:logs/" "GUI.py" - name: Upload artifact uses: actions/upload-artifact@v4 with: diff --git a/.github/workflows/pyinstaller.yml b/.github/workflows/pyinstaller.yml index 0469a5c..3b07522 100644 --- a/.github/workflows/pyinstaller.yml +++ b/.github/workflows/pyinstaller.yml @@ -22,7 +22,7 @@ jobs: pip install jsoncparser - name: Run PyInstaller run: | - pyinstaller --noconfirm --onedir --console --name "Snark" --add-data "version.txt:." --add-data "activities.txt:." --add-data "logo128.png:." --add-data "icon-win32.ico:." --add-data "icon-linux.png:." --add-data "LICENSE:." --add-data "README.md:." --add-data "save:save/" --add-data "scripts:scripts/" --add-data "themes:themes/" --add-data "third_party:third_party/" --add-data "images:images/" --add-data "logs:logs/" "GUI.py" + pyinstaller --noconfirm --onedir --console --name "Snark" --add-data "version.txt:." --add-data "activities.txt:." --add-data "logo128.png:." --add-data "icon-win32.ico:." --add-data "icon-linux.png:." --add-data "LICENSE:." --add-data "README.md:." --add-data "save:save/" --add-data "themes:themes/" --add-data "third_party:third_party/" --add-data "images:images/" --add-data "logs:logs/" "GUI.py" - name: Upload artifact uses: actions/upload-artifact@v4 with: diff --git a/.gitignore b/.gitignore index 4d54666..511b903 100644 --- a/.gitignore +++ b/.gitignore @@ -162,3 +162,4 @@ cython_debug/ back.bmp Snark.code-workspace *.mdl +scripts/ diff --git a/GUI.py b/GUI.py index 6165f53..8e37ef3 100644 --- a/GUI.py +++ b/GUI.py @@ -29,7 +29,7 @@ def __init__(self): self.devMode = False # Flag specifically for Snark, scripts are currently not implemented yet and is a copy of the scripting system from SMD Tools v1.1 # This will allow me to disable the functionality for it until I come up with a proper implementation - self.allowScripts = True + self.allowScripts = False # Another flag for Snark, it disables booting to the "games" menu and makes the menu show a "This menu will be completed soon" message # instead of showing the (very much) incomplete menu self.allowGames = True @@ -426,32 +426,61 @@ def __init__(self): if winSizeFile and not ws[0] == "": self.goodWidth = int(ws[0].replace("\n", "")) else: + self.update() self.goodWidth = self.winfo_width() - # self.dumbFixMenu5.grid(column=0, row=2, sticky="nsew", columnspan=10) - - self.optMenu = OptionsMenu(self.dumbFixMenu3, thCol, self.changeTheme, self.updateOpt, True) - self.setupMenu = SetupMenu(menu, thCol, self.updateGames) - self.compSetMenu = CompSetupMenu(self.dumbFixMenu4, thCol, self.updateComps, self.flags.allowGames) - self.decMenu = DecompMenu(menu, thCol, True) - self.cmpMenu = CompMenu(self.dumbFixMenu, thCol, True) - self.abtMenu = AboutMenu(self.dumbFixMenu2, thCol, True) - self.scrMenu = ScriptMenu(self.dumbFixMenu5, thCol, False) + print(self.goodWidth) + + self.mTemplate = MenuTemp(thCol, self.goodWidth) + + self.dumbFixMenu3.grid(column=0, row=2, sticky="nsew", columnspan=10) + self.optMenu = OptionsMenu(self.mTemplate, self.dumbFixMenu3, self.changeTheme, self.updateOpt, True) + self.dumbFixMenu3.grid_remove() + + self.setupMenu = SetupMenu(self.mTemplate, menu, self.updateGames) + + self.dumbFixMenu4.grid(column=0, row=2, sticky="nsew", columnspan=10) + self.compSetMenu = CompSetupMenu(self.mTemplate, self.dumbFixMenu4, self.updateComps, self.flags.allowGames) + self.dumbFixMenu4.grid_remove() + + self.decMenu = DecompMenu(self.mTemplate, menu, True) + + self.dumbFixMenu.grid(column=0, row=2, sticky="nsew", columnspan=10) + self.cmpMenu = CompMenu(self.mTemplate, self.dumbFixMenu, False) + if winSizeFile: + self.dumbFixMenu.grid_remove() + self.cmpMenu.hidden = True + + self.dumbFixMenu2.grid(column=0, row=2, sticky="nsew", columnspan=10) + self.abtMenu = AboutMenu(self.mTemplate, self.dumbFixMenu2, True) + self.dumbFixMenu2.grid_remove() + + if self.flags.allowScripts: + self.dumbFixMenu5.grid(column=0, row=2, sticky="nsew", columnspan=10) + self.scrMenu = ScriptMenu(self.mTemplate, self.dumbFixMenu5, True) + self.dumbFixMenu5.grid_remove() # Getting the maximum height - self.update_idletasks() - if not self.scrMenu.hidden: - self.goodHeight = self.winfo_height() + if not self.cmpMenu.hidden or winSizeFile: + if winSizeFile and not ws[1] == "": + self.goodHeight = int(ws[1].replace("\n", "")) + else: + self.update() + self.goodHeight = self.winfo_reqheight() + # Switching back to the setup menu + self.cmpMenu.hide() + self.dumbFixMenu.grid_remove() + self.setupMenu.show() + self.update() print(self.goodHeight) - # Switching back to the setup menu - self.scrMenu.hide() - self.update_idletasks() - self.dumbFixMenu5.grid_remove() - self.setupMenu.show() - self.update_idletasks() if sys.platform == 'linux': - self.geometry(f"{self.goodWidth}x491") + self.geometry(f"{self.goodWidth}x{self.goodHeight}") else: self.geometry("501x443") + + if not os.path.exists("save/WinSize.txt"): + wsf = open("save/WinSize.txt", "w") + wsf.write(f"{self.goodWidth}\n{self.goodHeight}") + wsf.close() # Applying theme @@ -581,7 +610,8 @@ def about(self): self.cmpMenu.hide() self.decMenu.hide() self.optMenu.hide() - self.scrMenu.hide() + if self.flags.allowScripts: + self.scrMenu.hide() def updateOpt(self, key, val): self.setupMenu.updateOpt(key, val) @@ -590,7 +620,8 @@ def updateOpt(self, key, val): self.cmpMenu.updateOpt(key, val) self.decMenu.updateOpt(key, val) self.optMenu.updateOpt(key, val) - self.scrMenu.updateOpt(key, val) + if self.flags.allowScripts: + self.scrMenu.updateOpt(key, val) def updateGames(self, comp): self.cmpMenu.updateGames(comp) @@ -611,7 +642,8 @@ def optionsMenu(self): self.cmpMenu.hide() self.decMenu.hide() self.optMenu.show() - self.scrMenu.hide() + if self.flags.allowScripts: + self.scrMenu.hide() def openfile(self): startDir = self.options["startFolder"] @@ -647,7 +679,8 @@ def bd_menu(self): self.compSetMenu.hide() self.abtMenu.hide() self.optMenu.hide() - self.scrMenu.hide() + if self.flags.allowScripts: + self.scrMenu.hide() def cmpSetupMenu(self): if self.compSetMenu.hidden: @@ -662,7 +695,8 @@ def cmpSetupMenu(self): self.setupMenu.hide() self.abtMenu.hide() self.optMenu.hide() - self.scrMenu.hide() + if self.flags.allowScripts: + self.scrMenu.hide() """ Switches menu to Decompile Menu """ @@ -679,7 +713,8 @@ def mnc_menu(self): self.abtMenu.hide() self.optMenu.hide() self.compSetMenu.hide() - self.scrMenu.hide() + if self.flags.allowScripts: + self.scrMenu.hide() """ Switches menu to Compile Menu """ def cmp_menu(self): @@ -695,23 +730,27 @@ def cmp_menu(self): self.decMenu.hide() self.abtMenu.hide() self.optMenu.hide() - self.scrMenu.hide() + if self.flags.allowScripts: + self.scrMenu.hide() # print(f"width: {self.winfo_width()} height: {self.winfo_height()}") def scripts(self): - if self.scrMenu.hidden: - self.setupMenu.hide() - self.compSetMenu.hide() - self.dumbFixMenu.grid_remove() - self.dumbFixMenu2.grid_remove() - self.dumbFixMenu3.grid_remove() - self.dumbFixMenu4.grid_remove() - self.dumbFixMenu5.grid(column=0, row=2, sticky="nsew", columnspan=10) - self.cmpMenu.hide() - self.decMenu.hide() - self.abtMenu.hide() - self.optMenu.hide() - self.scrMenu.show() + if self.flags.allowScripts: + if self.scrMenu.hidden: + self.setupMenu.hide() + self.compSetMenu.hide() + self.dumbFixMenu.grid_remove() + self.dumbFixMenu2.grid_remove() + self.dumbFixMenu3.grid_remove() + self.dumbFixMenu4.grid_remove() + self.dumbFixMenu5.grid(column=0, row=2, sticky="nsew", columnspan=10) + self.cmpMenu.hide() + self.decMenu.hide() + self.abtMenu.hide() + self.optMenu.hide() + self.scrMenu.show() + else: + a = ScriptWin() def exec_script(self, script): # Script parsing and execution function diff --git a/menus.py b/menus.py index 873fc2d..fcb9024 100644 --- a/menus.py +++ b/menus.py @@ -13,16 +13,27 @@ import sys import jsonc +# To make things easier for myself, I'm making a new class that contains common values that won't (or usually doesn't) change for each menu. +class MenuTemp(): + + def __init__(self, thme:dict, safeWidth:int): + self.thme = thme + self.safeWidth = safeWidth + class SetupMenu(): - def __init__(self, master, thme:dict, updFunc, startHidden:bool=False, allowGUI:bool=True): + def __init__(self, template, master, updFunc, startHidden:bool=False, allowGUI:bool=True): self.hidden = startHidden self.master = master - self.thme = thme + thme = template.thme + self.thme, self.safeWidth = thme, template.safeWidth self.allowGUI = allowGUI self.updFunc = updFunc self.advOpt = Frame(master, borderwidth=2, bg=thme["bg"], relief="sunken") self.top = Frame(master, borderwidth=2, bg=thme["bg"]) self.newGame = False + self.nameEntW = 62 + if self.safeWidth > 609: + self.nameEntW = 59 # Setting up options js = open("save/options.json", 'r') @@ -48,7 +59,7 @@ def __init__(self, master, thme:dict, updFunc, startHidden:bool=False, allowGUI: self.typeSel.set(self.gamePFs[self.gameSel.get()]["type"]) self.name = StringVar() self.name.set(self.gOptions[0]) - self.nameEntry = Entry(master, textvariable=self.name, width=62) + self.nameEntry = Entry(master, textvariable=self.name, width=self.nameEntW) # Capability options self.hrBool = BooleanVar(self.advOpt, False) self.highRes = Checkbutton(self.advOpt, text="High Resolution BMPs", variable=self.hrBool) @@ -160,7 +171,7 @@ def chGame(self, e): self.typeSel.set(self.gamePFs[self.selComp]["type"]) self.hrBool.set(self.gamePFs[self.selComp]["capabilities"]["1024px"]) self.ucBool.set(self.gamePFs[self.selComp]["capabilities"]["unlockedChrome"]) - self.fsBool.set(self.gamePFs[self.selComp]["capabilities"]["flatshade"]) + # self.fsBool.set(self.gamePFs[self.selComp]["capabilities"]["flatshade"]) self.fbBool.set(self.gamePFs[self.selComp]["capabilities"]["fullbright"]) else: js = open(f"save/user/game{self.gameSel.get()}.json", 'r') @@ -169,7 +180,7 @@ def chGame(self, e): self.typeSel.set(gameDat["type"]) self.hrBool.set(gameDat["capabilities"]["1024px"]) self.ucBool.set(gameDat["capabilities"]["unlockedChrome"]) - self.fsBool.set(gameDat["capabilities"]["flatshade"]) + # self.fsBool.set(gameDat["capabilities"]["flatshade"]) self.fbBool.set(gameDat["capabilities"]["fullbright"]) """# If editing options were removed and the compiler doesn't have editing disabled if self.hiddenEdit and not self.compDat[self.selComp]["disableEdit"]: @@ -214,10 +225,12 @@ def show(self): self.saveGame.grid(column=2,row=0,sticky="w", padx=(10,0)) class CompSetupMenu(): - def __init__(self, master, thme:dict, updFunc, startHidden:bool=False): + def __init__(self, template, master, updFunc, startHidden:bool=False): self.hidden = startHidden self.master = master - self.thme = thme + thme = template.thme + self.thme, self.safeWidth = thme, template.safeWidth + self.top = Frame(master, borderwidth=2, bg=thme["bg"]) self.hiddenEdit = True self.updFunc = updFunc # Setting up options @@ -239,21 +252,22 @@ def __init__(self, master, thme:dict, updFunc, startHidden:bool=False): self.gameSel.current(0) self.gameSel.bind("<>", self.chComp) self.setupLabel = Label(master, text="Compiler Setup", background=thme["bg"], foreground=thme["txt"]) - self.nameLabel = Label(master, text="Name: ", background=thme["bg"], foreground=thme["txt"]) - self.pathLabel = Label(master, text="Custom path: ", background=thme["bg"], foreground=thme["txt"]) + self.nameLabel = Label(self.top, text="Name: ", background=thme["bg"], foreground=thme["txt"]) + self.pathLabel = Label(self.top, text="Custom path: ", background=thme["bg"], foreground=thme["txt"]) self.name = StringVar() self.name.set(cOptions[0]) - self.nameEntry = Entry(master, textvariable=self.name, width=50) + self.nameEntry = Entry(self.top, textvariable=self.name, width=50) self.csPath = StringVar() self.csPath.set(self.csPaths["GoldSRC"]) - self.csPathEntry = Entry(master, textvariable=self.csPath, width=40) + self.csPathEntry = Entry(self.top, textvariable=self.csPath, width=40) self.csPathEntry.bind("", self.inputHandler) - self.csPathButton = Button(master, text="Save Path", command=self.savePath) + self.csPathButton = Button(self.top, text="Save Path", command=self.savePath) if not startHidden: self.show() # Applying theme self.applyTheme(master) + self.applyTheme(self.top) def applyTheme(self, master): style=ttk.Style() @@ -309,6 +323,7 @@ def savePath(self): def changeTheme(self, newTheme): self.thme = newTheme self.applyTheme(self.master) + self.applyTheme(self.top) def updateOpt(self, key, value): if not key.startswith("gsMV"): @@ -343,23 +358,25 @@ def hide(self): w.grid_remove() def show(self): self.hidden = False - self.gameSel.grid(column=1, row=2) + self.gameSel.grid(column=1, row=2, sticky="w") self.setupLabel.grid(column=1, row=3, sticky=(W), padx=(10, 0)) if not self.compDat[self.selComp]["disableEdit"]: self.hiddenEdit = False - self.nameLabel.grid(column=1, row=4, sticky=(W)) - self.nameEntry.grid(column=2, row=4, sticky=(W)) - self.pathLabel.grid(column=1, row=5, sticky="w") - self.csPathEntry.grid(column=2, row=5, sticky="w") - self.csPathButton.grid(column=3,row=5,sticky="w", padx=(5,0)) + self.top.grid(column=1, row=4, sticky="nsew") + self.nameLabel.grid(column=1, row=0, sticky=(W)) + self.nameEntry.grid(column=2, row=0, sticky=(W)) + self.pathLabel.grid(column=1, row=1, sticky="w") + self.csPathEntry.grid(column=2, row=1, sticky="w", padx=(15,0)) + self.csPathButton.grid(column=3,row=1,sticky="w", padx=(5,0)) else: self.hiddenEdit = True - self.pathLabel.grid(column=1, row=4, sticky="w") - self.csPathEntry.grid(column=2, row=4, sticky="w") - self.csPathButton.grid(column=3,row=4,sticky="w", padx=(5,0)) + self.top.grid(column=1, row=4, sticky="nsew") + self.pathLabel.grid(column=1, row=0, sticky="w") + self.csPathEntry.grid(column=2, row=0, sticky="w", padx=(15,0)) + self.csPathButton.grid(column=3,row=0,sticky="w", padx=(5,0)) class DecompMenu(): - def __init__(self, master, thme:dict, startHidden:bool=False): + def __init__(self, template, master, startHidden:bool=False): self.curFont = font.nametofont('TkDefaultFont').actual() self.widthFix = 51 self.conFix = 46 @@ -371,8 +388,12 @@ def __init__(self, master, thme:dict, startHidden:bool=False): pass self.hidden = startHidden self.master = master + thme = template.thme + self.thme, self.safeWidth = thme, template.safeWidth + if self.safeWidth > 609: + n = 2 + self.widthFix, self.conFix = self.widthFix-n, self.conFix-n self.advOpt = Frame(master, borderwidth=2, bg=thme["bg"], relief="sunken") - self.thme = thme # Setting up options js = open("save/options.json", 'r') self.options = json.loads(js.read()) @@ -559,15 +580,19 @@ def startDecomp(self): pass class CompMenu(): - def __init__(self, master, thme:dict, startHidden:bool=False): + def __init__(self, template, master, startHidden:bool=False): self.curFont = font.nametofont('TkDefaultFont').actual() self.widthFix = 52 self.conFix = 47 + thme = template.thme + self.thme, self.safeWidth = thme, template.safeWidth self.advOptFix = True if self.curFont["family"].lower() == "nimbus sans l" or sys.platform == "win32": self.widthFix = 58 self.conFix = 40 self.advOptFix = False + elif self.safeWidth > 609: + self.advOptFix = False else: pass self.hidden = startHidden @@ -587,10 +612,12 @@ def __init__(self, master, thme:dict, startHidden:bool=False): js = open("save/options.json", 'r') self.options = json.loads(js.read()) js.close() + if self.safeWidth > 609: + n = 2 + self.widthFix, self.conFix = self.widthFix-n, self.conFix-n self.selects = Frame(master, borderwidth=2, bg=thme["bg"]) self.advOpt = Frame(master, borderwidth=2, bg=thme["bg"], relief="sunken") self.advOpt2 = Frame(self.advOpt, borderwidth=2, bg=thme["bg"]) - self.thme = thme self.setupLabel = Label(master, text="QC Input: ") self.nameLabel = Label(master, text="Output: ") self.name = StringVar() @@ -887,7 +914,7 @@ def show(self): self.advOpt.grid(column=0, row=3, sticky="nsew", columnspan=10, pady=(20,0)) self.advOptLabel.grid(column=0, row=0, sticky="w") self.logChk.grid(column=0, row=1, sticky="w") - if self.advOptFix: + if self.advOptFix or self.safeWidth > 609: self.dashT.grid(column=2, row=1, sticky="w") self.dashTChk.grid(column=1, row=1, sticky="w") else: @@ -900,7 +927,7 @@ def show(self): if self.advOptFix: self.ignoreChk.grid(column=7, row=1, sticky="w") else: - self.advOpt2.grid(column=0, row=2, sticky="nsew") + self.advOpt2.grid(column=0, row=2, sticky="nsew", columnspan=20) self.ignoreChk.grid(column=7, row=1, sticky="w") if self.advOptFix: self.bNormChk.grid(column=8, row=1, sticky="w") @@ -1192,10 +1219,11 @@ def startCompile(self): # os.remove(mdlF) class AboutMenu(): - def __init__(self, master, thme:dict, startHidden:bool=False): + def __init__(self, template, master, startHidden:bool=False): self.hidden = startHidden self.master = master - self.thme = thme + thme = template.thme + self.thme, self.safeWidth = thme, template.safeWidth # Setting up options js = open("save/options.json", 'r') self.options = json.loads(js.read()) @@ -1283,11 +1311,13 @@ def show(self): self.nameLabel.grid(column=1, row=3) class OptionsMenu(): - def __init__(self, master, thme:dict, thmecallback, updFunc, startHidden:bool=False): + def __init__(self, template, master, thmecallback, updFunc, startHidden:bool=False): self.curPage, self.optionsVersion = 0, 3 self.hidden = startHidden self.master = master - self.thme = thme + thme = template.thme + self.thme, self.safeWidth = thme, template.safeWidth + print(self.thme["bg"]) self.updFunc = updFunc # Grabbing options jsf = open('save/options.json', 'r') @@ -1356,6 +1386,10 @@ def __init__(self, master, thme:dict, thmecallback, updFunc, startHidden:bool=Fa self.gameSel = ttk.Combobox(master, values=self.games.gNames) self.gameSel.bind("<>", self.setGame) self.gameSel.current(self.options["defGame"]) + # Checking if anything is exceeding the width of the "safe zone" + self.show() + self.checkWidth() + self.hide() # Tooltips self.themeTT = ToolTip(self.themeCBox, "Changes the program's theme, the built-in themes are: Freeman, Shephard, Calhoun and Cross.", background=thme["tt"], foreground=thme["txt"]) self.startFolderTT = ToolTip(self.startFent, "Sets the directory that the built-in file explorer will start in, the default is the documents folder.", background=thme["tt"], foreground=thme["txt"]) @@ -1370,6 +1404,10 @@ def __init__(self, master, thme:dict, thmecallback, updFunc, startHidden:bool=Fa self.applyTheme(master) self.applyTheme(self.pageButtons) + def checkWidth(self): + curWidth = self.master.winfo_reqwidth() + print(curWidth) + def upgradeJSON(self): # Upgrade from version 1 to 3 if self.options["version"] == 1: @@ -1484,6 +1522,7 @@ def applyTheme(self, master): def changeTheme(self, newTheme): self.thme = newTheme self.applyTheme(self.master) + self.applyTheme(self.pageButtons) self.themeTT.changeTheme(newTheme["tt"], newTheme["txt"]) self.startFolderTT.changeTheme(newTheme["tt"], newTheme["txt"]) self.startFolderTT2.changeTheme(newTheme["tt"], newTheme["txt"]) @@ -1597,7 +1636,7 @@ def show(self): self.setMVP.grid(column=3, row=2, sticky="w") class ScriptMenu(): - def __init__(self, master, thme:dict, startHidden:bool=False): + def __init__(self, template, master, startHidden:bool=False): self.curFont = font.nametofont('TkDefaultFont').actual() self.widthFix = 74 self.conFix = 46 @@ -1609,7 +1648,8 @@ def __init__(self, master, thme:dict, startHidden:bool=False): pass self.hidden = startHidden self.master = master - self.thme = thme + thme = template.thme + self.thme, self.safeWidth = thme, template.safeWidth # Setting up options js = open("save/options.json", 'r') self.options = json.loads(js.read()) diff --git a/save/WinSize.txt b/save/WinSize.txt index 67adbdb..eb67cbf 100644 --- a/save/WinSize.txt +++ b/save/WinSize.txt @@ -1 +1,2 @@ 724 +599 \ No newline at end of file diff --git a/scripts/template.sss b/scripts/template.sss deleted file mode 100644 index 9cf6370..0000000 --- a/scripts/template.sss +++ /dev/null @@ -1,34 +0,0 @@ -- -version 1 -format jsonc -- -{ - "name": "Template Script", - // You can specify a global output folder for every task - "globalOutput": "path/to/output/folder", - "tasks": [ - { - // This specifies the name of the task, this will show up in the console when the task has been started. - // Task names cannot have slashes in their name, otherwise it will confuse the interpreter. - "name": "Decompile MDL", - // Valid values for tasks are compile, decompile and view. - "task": "decompile", - "file": "absolute/path/to/mdl/file", - // You can use this key to specify an output folder for this specific task. - "output": "path/to/output/folder" - }, - { - "name": "Compile MDL", - "task": "compile", - "file": "absolute/path/to/qc/file", - // Please note that with compile tasks, the output will not be put in a subfolder of the output folder. - "output": "path/to/output/folder" - }, - { - "name": "View Compiled Model", - "task": "view", - // For the file key in view tasks, you can specify the file you want to open, or specify a compile task to open a MDL file of your choice! - "file": "Compile MDL" - } - ] -} \ No newline at end of file diff --git a/third_party/mdldec b/third_party/mdldec index fa8b242..4ccc85a 100755 Binary files a/third_party/mdldec and b/third_party/mdldec differ diff --git a/third_party/mdldec_win32.exe b/third_party/mdldec_win32.exe index 953bf94..f07efdb 100755 Binary files a/third_party/mdldec_win32.exe and b/third_party/mdldec_win32.exe differ diff --git a/version.txt b/version.txt index aa8d6e4..12bda4c 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -v0.1.2-(OS)-alpha +v0.1.3-(OS)-alpha