set flag hotwire_here. sclass Standalone_OSWithSplashScreens { S programName = "Unknown Program"; // doubles as virtualDirName S virtualDirName; S backgroundID = #1102649; S osID = #1016478; // version of Stefan's OS to use S mainIconID = #1102666; bool showTopInput = true; transient Runnable additionalUnpacking; transient bool standalone = true; S virtualDirName() { ret or2(virtualDirName, programName); } // name / module lib ID / name / module lib ID / ... new LS mainModules; LS helperModules = ll("Task Bar", "#1019954/TaskBar_dev"); void run(S[] args) pcall { if (standalone && javaXStandalone_init(args, noConsole := true)) { print("exiting"); ret; } autoVMExit(); try { // TODO: shouldn't we call standalone_start2 first? it sets the resource loader which we need for loading the background image! temp tempWindow(standardSplashScreen(backgroundID, programName + " Loading")); ret if standalone_start2(standalone, programName, osID, virtualDirName()); zip2dir_withPredicate_overwriteIfDifferentSize(getMainJarLocation(), actualUserDir("JavaX-Caches/#1002203"), //getCacheProgramDir("#1002203"), // x30.hotwire doesn't find this s -> regexpMatches(md5Regexp() + "\\.jar", s)); callF(additionalUnpacking); saveTextFile(stefansOS_backgroundFile(), backgroundID); standalone_runOSWithInitialModules(osID, concatLists(oddEntries(mainModules), oddEntries(helperModules)), osParams := litparams( onStart := voidfunc(O os) { setOpt(os, minLoadScreenShowingTime := 20.0); }, hideFeatures := stefansOS_technicalFeatures(), standardModules := mainModules, botName := "", osName := programName, +showTopInput, +mainIconID, shutdownConsole := r { standardSplashScreen(backgroundID, programName + " Shutting Down") }, )); } catch print e { showConsole(); } } }