
CptJesus
Citizen-
Posts
37 -
Joined
-
Last visited
Everything posted by CptJesus
-
Skyrim Revisited Pre-Release Feedback
CptJesus replied to Neovalen's topic in Skyrim Revisited (retired)
The only feedback I have right now is that ENB absolutely wrecked my framerate, and disabling it made the game playable for me. -
Skyrim Revisited Pre-Release Feedback
CptJesus replied to Neovalen's topic in Skyrim Revisited (retired)
Looks like Serious HD was updated to 2.0. A lot of the textures were redone. Btw, the wiki page says the guide has been frozen while a new one is created...what does that mean exactly? -
Skyrim Revisited Pre-Release Feedback
CptJesus replied to Neovalen's topic in Skyrim Revisited (retired)
Wow, thanks! Disabling XP32 fixed it. So what was your solution to this? Reinstall? Edit: Reinstalled Xp32, and it works perfectly fine now. Thanks for the help! -
Skyrim Revisited Pre-Release Feedback
CptJesus replied to Neovalen's topic in Skyrim Revisited (retired)
I can't for the life of me figure out what's wrong. I'm just getting CTDs when removing the body armor for my character. My femalebody textures are provided by Mature Skin Texture, and the meshes are provided by UNPB. I ran FNIS, and it updated fine. What am I missing? -
Skyrim Revisited Pre-Release Feedback
CptJesus replied to Neovalen's topic in Skyrim Revisited (retired)
So where do the textures for UNP come from exactly? We remove the textures from the actual UNP package, and we don't install the textures for UNPB. What step am I missing? -
Skyrim Revisited Pre-Release Feedback
CptJesus replied to Neovalen's topic in Skyrim Revisited (retired)
So I'm running Skyrim Performance Monitor, and it looks like Skyrim is maxing out my VRam easily. Memory is sitting at around 2 GB which is perfectly fine, and CPU is sitting at about 30%ish. Apparently when I take off my character's clothes, the whole game CTD's, so I'm not sure what's up with that. My best guess for that one is something wrong with my UNP setup, but I'm not entirely sure. Edit: Fixed the CTD issue. Does the install of Skyrim Revisited actually remove the nudity from UNP? -
Skyrim Revisited Pre-Release Feedback
CptJesus replied to Neovalen's topic in Skyrim Revisited (retired)
So interestingly, I'm having major instability issues after setting up Skyrim Revisited, and I'm not entirely sure why. I've been crashing frequently, and this is in Helgen. Game hasn't even really started yet. Running a HD 6950 2Gb with a i5-2500k, so I shouldn't be having too many problems, especially when I chose the lower end settings for most of the mods. -
ACCEPTED Ultimate HD Fire Effects (by BuzzDee84)
CptJesus replied to JudgmentJay's topic in Skyrim LE Mods
Cool cool, just pointing it out since the STEP guide still recommends you install that. -
Just out of curiosity, is it supposed to take multiple hours to process the second HRDLC package?
-
ACCEPTED Ultimate HD Fire Effects (by BuzzDee84)
CptJesus replied to JudgmentJay's topic in Skyrim LE Mods
Unless I'm missing something, it appears the SMIM Compatible Meshes is no longer available. -
I've been calling the executable directly, but I'm sure it would work without it with a bit of tweaking. The binary is a remnant from the batch script I was using previously. As it stands right now, you just need 7z.exe in the same folder as the scripts themselves Sent from my SGH-T889 using Tapatalk 2
-
The first post has been updated with all the newest scripts that I'm using currently. Also, the magicpacker has more pre-configured archives.
-
3. It's possible they'll work on 2 Sent from my SGH-T889 using Tapatalk 2
-
I'll consolidate everything to the first post. Have you gotten a chance to test any of these by any chance? Sent from my SGH-T889 using Tapatalk 2
-
So before I go to sleep, I'm going to post the update to the previous script. I went ahead and cleaned up the code a bit, and added some more packages (all from baseline STEP). I also supressed the 7zip output because I realized how annoying it was. It takes about 30 seconds to create a new entry to search for and repack, so this is pretty easy to extend. Using this in conjunction with the other repacker script written, you could easily set it up so you just download everything, and then run this and it would repack almost every mod in an intelligent manner and move it over to your Skyrim Mods folder. I'm toying with the idea to speed up reinstalls of STEP and automate a lot of the tedious tasks. Then again, I'm probably one of the few people who actually repack everything to 7zip max and non-solid. import sys import os import shutil import glob import subprocess import re FOLDERPATH = "X:\Steam\steamapps\common\Skyrim Mods\Bash Installers" DUALSHEATHLIST = {"Dual Sheath Redux-34155-1-6b.7z":"00 Core","Elemental Staffs Pack-34155-.7z":"01 Elemental Staffs Patch","Skyrim Weapon De-LARP-ification Project Pack On Back Update-34155-.7z":"02 Skyrim De-LARP Patch"} NACMIM = {"NACMIM - Full-26822-1-6.zip":"00 Core","NACMIM SkyUI 3-4 Patch - Default-26822-1-34.zip":"01 SkyUI Patch"} SKYHD = {"Skyrim HD v1_5 LITE - Dungeons-607.7z":"00 Dungeons","Skyrim HD v1_5 LITE - Towns-607.7z":"00 Towns","Skyrim HD v1_5 LITE - Landscape-607.7z":"00 Landscape","Skyrim HD v1_5 LITE - Misc-607.7z":"00 Misc"} SERIOUSHD = {"Serious HD Retexture LANDSCAPE 1024px-2146-v2-0.rar":"00 Core","Serious HD Retexture RIFTEN 1024px-2146.rar":"01 Riften Patch"} TOBE = {"Tobes Highres Textures 1_2 1024-1123-1-2.rar":"00 Core","Tobes Highres Textures 1_2b SMIM Patch-1123-1-2.rar":"01 SMIM Patch"} def processarchive(archivename,outputdir): print("Extracting Archive " + archivename + " to " + outputdir) tempcwd = os.getcwd() os.makedirs(outputdir) cmd = ["7z.exe",'x','-otemp',archivename] with open(os.devnull, "w") as q: subprocess.call(cmd,stdout = q) os.remove(archivename) out = os.path.abspath(outputdir) traverse("temp",out) os.chdir(tempcwd) shutil.rmtree("temp") def traverse(path,outputpath): os.chdir(path) filenameso = os.listdir(os.getcwd()) founddir = False for filen in filenameso: if re.match(".*esp",filen) or re.match(".*esm",filen): founddir = True filenames = [x.lower() for x in filenameso] if (founddir or "meshes" in filenames or "textures" in filenames or "interface" in filenames or "video" in filenames or "strings" in filenames or "sound" in filenames or "scripts" in filenames): for filex in filenameso: shutil.move(filex,outputpath) return elif (len(filenames) > 0): for filen in filenames: if (os.path.isdir(filen)): traverse(filen,outputpath) os.chdir("..") return else: return def testlist(filenames,test,listname): testset = set(test.keys()) if (testset.issubset(filenames)): print("Found files for " + listname) templ = [] for k in testset: processarchive(k,test[k]) templ.append(test[k]) print("Compressing archives to our new package: " + listname + ".7z") cmd = ["7z.exe",'a','-ms=off','-mx9',listname + ".7z"] cmd.extend(templ) with open(os.devnull, "w") as q: subprocess.call(cmd,stdout = q) for t in templ: shutil.rmtree(t) print("Moving our file to its new home!") shutil.move(listname + ".7z",FOLDERPATH) def main(): filenames = glob.glob('*.rar') filenames.extend(glob.glob('*.7z')) filenames.extend(glob.glob('*.zip')) converted = set(filenames) testlist(filenames,DUALSHEATHLIST,"Dual Sheath Redux") testlist(filenames,NACMIM,"Not Another Colored Map Icon Mod") testlist(filenames,SKYHD,"Skyrim HD") testlist(filenames,SERIOUSHD,"Serious HD") testlist(filenames,TOBE,"Tobe's Highres Textures") if __name__=="__main__": main()
-
DROPPED Bethesda Hi-Res DLC Optimized (by Vano89)
CptJesus replied to Farlo's topic in Skyrim LE Mods
Edit: My mistake, reread through the STEP guide, and it looks like it's fine. -
So I'm sure you guys are getting really tired of seeing these scripts, but I threw together another script that I thought would be useful. It's basically complete functionality wise, but I'm working on a dictionary to go with it. I'm calling it the MagicPacker. I noticed that a lot of STEP mods have multiple items, such as patches. When this is complete, you should theoretically be able to download all your mods and just run this, and it'll repackage any complex archives into nice Wrye Bash ones. It uses a dictionary to create mappings for Archives to Folders, and then attempts to group them together. If it doesn't find all the archives necessary for STEP, it'll just skip it. As of right now, the only one configured is Dual Sheath Redux. The issue with this packer is going to be maintenance as file names update. Let me know what you guys think. I'm going back through the STEP install again, and I'm actually going to set multiple cases up and see how it works out. import sys import os import shutil import glob import subprocess import re FOLDERPATH = "X:\Steam\steamapps\common\Skyrim Mods\Bash Installers" DUALSHEATHLIST = {"Dual Sheath Redux-34155-1-6b.7z":"00 Core","Elemental Staffs Pack-34155-.7z":"01 Elemental Staffs Patch","Skyrim Weapon De-LARP-ification Project Pack On Back Update-34155-.7z":"02 Skyrim De-LARP Patch"} def processarchive(archivename,outputdir):   print("Processing Archive " + archivename + " to " + outputdir)   tempcwd = os.getcwd()   os.makedirs(outputdir)   cmd = ["7z.exe",'x','-otemp',archivename]   subprocess.call(cmd)   os.remove(archivename)   out = os.path.abspath(outputdir)   traverse("temp",out)   os.chdir(tempcwd)   shutil.rmtree("temp") def traverse(path,outputpath):   os.chdir(path)   filenameso = os.listdir(os.getcwd())   founddir = False   for filen in filenameso:    if re.match(".*esp",filen) or re.match(".*esm",filen):    founddir = True   filenames = [x.lower() for x in filenameso]   if (founddir or "meshes" in filenames or "textures" in filenames or "interface" in filenames    or "video" in filenames or "strings" in filenames    or "sound" in filenames or "scripts" in filenames):    for filex in filenameso:      shutil.move(filex,outputpath)    return   elif (len(filenames) > 0):    for filen in filenames:      if (os.path.isdir(filen)):       traverse(filen,outputpath)       os.chdir("..")    return   else:    return def main():   filenames = glob.glob('*.rar')   filenames.extend(glob.glob('*.7z'))   filenames.extend(glob.glob('*.zip'))   converted = set(filenames)   DUAL = set(DUALSHEATHLIST.keys())   if (DUAL.issubset(filenames)):    print("Found files for Dual Sheath Redux!")    templ =    for k in DUAL:      processarchive(k,DUALSHEATHLIST[k])      templ.append(DUALSHEATHLIST[k])    cmd = ["7z.exe",'a','-ms=off','-mx9',"Dual Sheath Redux.7z"]    cmd.extend(templ)    subprocess.call(cmd)   for t in templ:    shutil.rmtree(t)   shutil.move("Dual Sheath Redux.7z",FOLDERPATH) if __name__=="__main__": main()
-
Just to note, I added BCFs to HD Baskets and Enhanced HD Dragon Bones. Didn't want to edit them into the wiki guide, so I just left them on their respective pages.
-
Cool I'll make sure to refresh my pages then Sent from my SGH-T889 using Tapatalk 2
-
I submitted the BCF excluding the two empty directories for now. I can easily edit it whenever we actually get those folders
-
Good friends, I bring you yet another script. This one will take multiple archives and allow you to repack them in a sane manner. For example, the Skyrim Weapon Delarpificatioon Project. If you pass the three archives to the script, it will allow you to pick new folder names for each one, and then unpack them. It will repackage the final folders into a single 7zip compressed to maximum and non-solid. import sys import subprocess import shutil import re import os FOLDERPATH = "C:\Program Files (x86)\Steam\SteamApps\common\Skyrim Mods\Bash Installers" def main(argv): filelist = argv[1:] final = [] origsize = 0 startdir = os.getcwd() + "\\" for f in filelist:  origsize = origsize + os.stat(f).st_size  foldername = input("Choose folder name for " + f + ": ")  final.append(foldername)  os.makedirs(foldername)  zippath = os.path.abspath("7z.exe")  cmd = ["7z.exe",'x','-otemp',f]  subprocess.call(cmd)  folderpath = os.path.abspath(foldername)  traverse("temp",zippath,folderpath)  os.chdir(startdir)  shutil.rmtree("temp") finalname = input("Enter the final filename: ") finalname = finalname + ".7z" cmd = ["7z.exe",'a','-ms=off','-mx9',finalname] cmd.extend(final) subprocess.call(cmd) finalsize = os.stat(finalname).st_size saving = (origsize - finalsize) / 1024 print("Size Difference: " + str(saving) + "kb") for fn in final:  shutil.rmtree(fn) shutil.move(finalname,FOLDERPATH) def traverse(path,zippath,outputpath): os.chdir(path) filenameso = os.listdir(os.getcwd()) founddir = False for filen in filenameso:  if re.match(".*esp",filen) or re.match(".*esm",filen):   print("We've found the directory with the esp! Zip it all up")   founddir = True filenames = [x.lower() for x in filenameso] if (founddir or "meshes" in filenames or "textures" in filenames or "interface" in filenames  or "video" in filenames or "strings" in filenames  or "sound" in filenames or "scripts" in filenames):  print("We've found the meshes/textures directory! Zip it all up")  for filex in filenameso:   shutil.move(filex,outputpath)  return elif (len(filenames) > 0):  for filen in filenames:   if (os.path.isdir(filen)):    traverse(filen,zippath,outputpath)    os.chdir("..")  return else:  return if __name__=="__main__": main(sys.argv) For example: repacker.py DeLARPCore DeLARPDawnguard DeLARPDragonborn Choose folder names 00 Core, 01 Dawnguard, 02 Dragonborn Voila, DeLARP with both patches in a nice Wrye Bash compatible format. Hope someone finds a use for this!
-
Not sure if this has been mentioned before, but when creating a BCF for Book of Silence, I found that the weapons package recommends Elven weapons, but the texture directory for that particular subpackage is empty. Not sure if this package USED to have something in it, but it definitely doesn't know. For right now, I'm setting up the BCF to just ignore that package, but if someone could give me some guidance on this, that would be great.
-
So as an update, I decided to scrap my wizardwizard and just wrote a simple parser that takes a file and converts it to Wrye Bash format. You write the whole thing in shorthand and it'll give you a working Wrye Bash wizard in return. import sys def main(argv): f = open(argv[1],"r") o = open("wizard.txt","w") for line in f:  newline = line.replace("REQUIRE","RequireVersions \"\", \"\", \"\", \"296+\" ; Skyrim version, SKSE version, (no SKGE), Wrye Bash version")  newline = newline.replace("SM","SelectMany")  newline = newline.replace("SO","SelectOne")  newline = newline.replace("SSP","SelectSubPackage")  newline = newline.replace("DSA","DeSelectAll")  newline = newline.replace("BRK","Break")  newline = newline.replace("ES","EndSelect")  newline = newline.replace("IMG","Wizard Images\\\\")  newline = newline.replace("DEF","Default Texture")  newline = newline.replace("CUST", "Custom Texture")  newline = newline.replace("NOIN","Do not install a texture")  newline = newline.replace("\"CTEX","\"Customized Texture from")  o.write(newline) if __name__=="__main__": main(sys.argv) The following shorthand is used: REQUIRE is the Require String SM = SelectMany SO = SelectOne SSP = SelectSubPackage DSA = DeSelectAll BRK = Break ES = EndSelect IMG = Wizard Images\\ DEF = Default Texture CUST = Custom Texture NOIN = Do not install a texture CTEX = Customized Texture from Im working on a better solution, but this is a decent stopgap.We'll create an awesome solution yet! Example Usage: wizardparser text.txt Outputs wizard.txt Heres an example input: REQUIRE DSA SO "Select Configuration for Book of Silence (Weapons)", \ "|STEP Default", "The recommended install for Step", "IMGdefault.jpg", \ "Customized Install", "Customize your installation", "IMGcustom.jpg" Case "STEP Default"  SSP "01 Iron"  SSP "02 Steel"  SSP "03 Skyforge"  SSP "04 Silver"  SSP "05 Orcish"  SSP "06 Dwarven" BRK Case "Customized Install"  SO "Iron Weapons", \   "|CUST","CTEX Book of Silence","IMGiron.jpg",   "DEF","NOIN",""   Case "CUST"    SSP "01 Iron"   BRK   Case "DEF"   BRK  ES  SO "Steel Weapons", \   "|CUST","CTEX Book of Silence","IMGsteel.jpg",   "DEF","NOIN",""   Case "CUST"    SSP "02 Steel"   BRK   Case "DEF"   BRK  ES  SO "Skyforge Weapons", \   "|CUST","CTEX Book of Silence","IMGskyforge weapons.jpg",   "DEF","NOIN",""   Case "CUST"    SSP "03 Skyforge"   BRK   Case "DEF"   BRK  ES  SO "Silver Weapons", \   "|CUST","CTEX Book of Silence","IMGsilver.jpg",   "DEF","NOIN",""   Case "CUST"    SSP "04 Silver"   BRK   Case "DEF"   BRK  ES  SO "Orcish Weapons", \   "|CUST","CTEX Book of Silence","IMGorcish.jpg",   "DEF","NOIN",""   Case "CUST"    SSP "05 Orcish"   BRK   Case "DEF"   BRK  ES  SO "Dwarven Weapons", \   "|CUST","CTEX Book of Silence","IMGdwarven.jpg",   "DEF","NOIN",""   Case "CUST"    SSP "06 Dwarven"   BRK   Case "DEF"   BRK  ES BRK ES And heres the output: RequireVersions "", "", "", "296+" ; Skyrim version, SKSE version, (no SKGE), Wrye Bash version DeSelectAll SelectOne "Select Configuration for Book of Silence (Weapons)", \ "|STEP Default", "The recommended install for Step", "Wizard Images\\default.jpg", \ "Customized Install", "Customize your installation", "Wizard Images\\custom.jpg" Case "STEP Default"  SelectSubPackage "01 Iron"  SelectSubPackage "02 Steel"  SelectSubPackage "03 Skyforge"  SelectSubPackage "04 Silver"  SelectSubPackage "05 Orcish"  SelectSubPackage "06 Dwarven" Break Case "Customized Install"  SelectOne "Iron Weapons", \   "|Custom Texture","Customized Texture from Book of Silence","Wizard Images\\iron.jpg",   "Default Texture","Do not install a texture",""   Case "Custom Texture"    SelectSubPackage "01 Iron"   Break   Case "Default Texture"   Break  EndSelect  SelectOne "Steel Weapons", \   "|Custom Texture","Customized Texture from Book of Silence","Wizard Images\\steel.jpg",   "Default Texture","Do not install a texture",""   Case "Custom Texture"    SelectSubPackage "02 Steel"   Break   Case "Default Texture"   Break  EndSelect  SelectOne "Skyforge Weapons", \   "|Custom Texture","Customized Texture from Book of Silence","Wizard Images\\skyforge weapons.jpg",   "Default Texture","Do not install a texture",""   Case "Custom Texture"    SelectSubPackage "03 Skyforge"   Break   Case "Default Texture"   Break  EndSelect  SelectOne "Silver Weapons", \   "|Custom Texture","Customized Texture from Book of Silence","Wizard Images\\silver.jpg",   "Default Texture","Do not install a texture",""   Case "Custom Texture"    SelectSubPackage "04 Silver"   Break   Case "Default Texture"   Break  EndSelect  SelectOne "Orcish Weapons", \   "|Custom Texture","Customized Texture from Book of Silence","Wizard Images\\orcish.jpg",   "Default Texture","Do not install a texture",""   Case "Custom Texture"    SelectSubPackage "05 Orcish"   Break   Case "Default Texture"   Break  EndSelect  SelectOne "Dwarven Weapons", \   "|Custom Texture","Customized Texture from Book of Silence","Wizard Images\\dwarven.jpg",   "Default Texture","Do not install a texture",""   Case "Custom Texture"    SelectSubPackage "06 Dwarven"   Break   Case "Default Texture"   Break  EndSelect Break EndSelect
-
Making a decent Wrye Bash Wizard Creator is a lot harder than I thought. I think I need to take a different approach to this. I might try a parser of some kind where you shorthand the wizard and it replaces everything with the proper syntax
-
Ok so I come with 2 gifts. The first is an updated compression script with solid off. import sys import subprocess import os import shutil import re FOLDERPATH = "C:\Program Files (x86)\Steam\SteamApps\common\Skyrim Mods\Bash Installers" def main(argv): if (os.path.exists("temp")): shutil.rmtree("temp") infile = argv[1] outfile = os.path.splitext(infile)[0] startdir = os.getcwd() + "\\" zippath = os.path.abspath("7z.exe") outputpath = startdir + outfile+".7z" infile = startdir + infile origsize = os.stat(infile).st_size cmd = [zippath,'x','-otemp',infile] subprocess.call(cmd) os.remove(infile) traverse("temp",zippath,outputpath) os.chdir(startdir) shutil.rmtree("temp") finalsize = os.stat(outputpath).st_size shutil.move(outputpath,FOLDERPATH) saving = (origsize - finalsize) / 1024 print("Total Bytes Saved: " + str(saving) + "kb") def traverse(path,zippath,outputpath): os.chdir(path) filenames = os.listdir(os.getcwd()) for filen in filenames: if re.match(".*esp",filen) or re.match(".*esm",filen): print("We've found the directory with the esp! Zip it all up") cmd = [zippath,'a','-ms=off','-mx9',outputpath,'*'] subprocess.call(cmd) return elif re.match("00.*",filen) or re.match("01.*",filen): print("Found a directory with Wrye Bash Stuff. Zip it all up!") cmd = [zippath,'a','-ms=off','-mx9',outputpath,'*'] subprocess.call(cmd) return filenames = [x.lower() for x in filenames] if ("meshes" in filenames or "textures" in filenames or "interface" in filenames or "video" in filenames or "strings" in filenames or "sound" in filenames or "scripts" in filenames): print("We've found the meshes/textures directory! Zip it all up") cmd = [zippath,'a','-ms=off','-mx9',outputpath,'*'] subprocess.call(cmd) return elif ("skse" in filenames or "SKSE" in filenames or "Skse" in filenames): print("SKSE Plugin. Zip it!") cmd = [zippath,'a','-ms=off','-mx9',outputpath,'*'] subprocess.call(cmd) return elif (len(filenames) > 0): for filen in filenames: if (os.path.isdir(filen)): traverse(filen,zippath,outputpath) os.chdir("..") return else: return if __name__=="__main__": main(sys.argv) The second thing I bring is what I'm calling wizardwizard. It automates the process of making Wrye Bash wizards to some extent. It's kind of hard to understand, but it'll allow you to make a wizard in almost any which way. It's very rough around the edges, but I'm putting it out there. If you can improve on it, feel free and let me know. I put it together in like a couple hours. It requires the EasyGUI package because I was way too lazy to code up any complicated GUI stuff. import sys import easygui as eg import shutil import os depth = 0 f = None #==== Utilites for Writing to the file def dwrite(text): global f if (depth > 0): f.write("\t" * depth) f.write(text) def twrite(text): global f if (depth > 0): f.write("\t" * depth + "SelectSubPackage \"") while text[-1:] == "\n": text = text[:-1] text = text.replace('\n','\n' + '\t' * depth + "SelectSubPackage \"") f.write(text + "\"") f.write('\n') def awrite(text): global f f.write(text) def main(): if os.path.exists("wizard.txt"): os.remove("wizard.txt") global f f = open("wizard.txt","w") dwrite("RequireVersions \"\", \"\", \"\", \"296+\" ; Skyrim version, SKSE version, (no SKGE), Wrye Bash version\n\n") dwrite("DeSelectAll\n\n") msg = "Is there a core package?" title= "Core Package" directory = "" if (eg.ynbox(msg,title) == 1): directory = eg.enterbox("What is the name of the core directory") dwrite("SelectSubpackage " + directory + "\n\n") SelectOne() def choice(): choices = ["SelectOne","SelectMany","Text"] return eg.choicebox("Pick the next element","Next Element",choices) def casepick(casename): choices = ["SelectOne","SelectMany","Text","Finish"] return eg.choicebox("Pick the next element for " + casename,"Next Element",choices) def SelectMany(): cases = [] msg = "Create SelectMany" title = eg.enterbox("Title of SelectMany") dwrite("SelectOne \"" + title + "\", \\\n") global depth depth = depth + 1 m = "Enter Case Details" fieldNames = ["Case Name","Case Description","Screenshot Path"] values = [] values = eg.multenterbox(m,"Create Case",fieldNames) dwrite("\"|" + values[0] + "\", \"" + values[1] + "\", \"" + values[2] + "\"") cases.append(values[0]) msg = "Add another case?" while (eg.ynbox(msg) == 1): awrite(", \\\n") m = "Enter Case Details" fieldNames = ["Case Name","Case Description","Screenshot Path"] values = [] values = eg.multenterbox(m,"Create Case",fieldNames) cases.append(values[0]) dwrite("\"" + values[0] + "\", \"" + values[1] + "\", \"" + values[2] + "\"") awrite("\n") processCases(cases) depth = depth - 1 dwrite("EndSelect\n") def SelectOne(): cases = [] msg = "Create SelectOne" title = eg.enterbox("Title of SelectOne") dwrite("SelectOne \"" + title + "\", \\\n") global depth depth = depth + 1 m = "Enter Case Details" fieldNames = ["Case Name","Case Description","Screenshot Path"] values = [] values = eg.multenterbox(m,"Create Case",fieldNames) dwrite("\"|" + values[0] + "\", \"" + values[1] + "\", \"" + values[2] + "\"") cases.append(values[0]) msg = "Add another case?" while (eg.ynbox(msg) == 1): awrite(", \\\n") m = "Enter Case Details" fieldNames = ["Case Name","Case Description","Screenshot Path"] values = [] values = eg.multenterbox(m,"Create Case",fieldNames) cases.append(values[0]) dwrite("\"" + values[0] + "\", \"" + values[1] + "\", \"" + values[2] + "\"") awrite("\n") processCases(cases) depth = depth - 1 dwrite("EndSelect\n") def processCases(cases): global depth for case in cases: awrite("\n") dwrite("Case \"" + case + "\"\n") depth = depth + 1 pick = "" while (pick != "Finish"): pick = casepick(case) if (pick == "Text"): text = eg.textbox("Enter subpackages for " + case) twrite(text) elif (pick == "SelectOne"): SelectOne() elif (pick == "SelectMany"): SelectMany() else: depth = depth - 1 dwrite("Break\n") if __name__=="__main__": main() Just as a side note, I'm writing this in part to teach myself python, so sorry for the weird coding quirks =)