fix: add memsize=64 to generated dosbox.conf and fix pre-existing backslash bug
Build & Deploy / build-and-deploy (push) Successful in 42s
Build & Deploy / build-and-deploy (push) Successful in 42s
Fallout needs 64MB of XMS memory to load its ~500MB of data files. DOSBox defaults to 16MB, causing a crash during loading after the loading screen appears. Also fixes a pre-existing bug in GameService.buildDosboxConfBytes() and UploadResource.buildCdOnlyDosboxConf() where \n was used instead of actual newline escapes, producing config files with literal 'backslash-n' characters instead of real line breaks. Cleans up all leftover code from previous fix attempts (fix-paths endpoint, hardcoded CONFIG_PATH_FIXES map, etc.).
This commit is contained in:
@@ -230,12 +230,36 @@ public class GameService {
|
|||||||
String dir = parts[0];
|
String dir = parts[0];
|
||||||
String exe = parts[1];
|
String exe = parts[1];
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("[sdl]\nautolock=true\nusescancodes=true\noutput=surface\n\n");
|
sb.append("[sdl]\n");
|
||||||
sb.append("[cpu]\ncore=auto\ncycles=auto\n\n");
|
sb.append("autolock=true\n");
|
||||||
sb.append("[mixer]\nnosound=false\nrate=44100\n\n");
|
sb.append("usescancodes=true\n");
|
||||||
sb.append("[sblaster]\nsbtype=sb16\nirq=7\ndma=1\nhdma=5\n\n");
|
sb.append("output=surface\n");
|
||||||
sb.append("[dos]\nxms=true\nems=true\numb=true\n\n");
|
sb.append("\n");
|
||||||
sb.append("[autoexec]\n@echo off\nmount c .\n");
|
sb.append("[cpu]\n");
|
||||||
|
sb.append("core=auto\n");
|
||||||
|
sb.append("cycles=auto\n");
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append("[mixer]\n");
|
||||||
|
sb.append("nosound=false\n");
|
||||||
|
sb.append("rate=44100\n");
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append("[sblaster]\n");
|
||||||
|
sb.append("sbtype=sb16\n");
|
||||||
|
sb.append("irq=7\n");
|
||||||
|
sb.append("dma=1\n");
|
||||||
|
sb.append("hdma=5\n");
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append("[dos]\n");
|
||||||
|
sb.append("xms=true\n");
|
||||||
|
sb.append("ems=true\n");
|
||||||
|
sb.append("umb=true\n");
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append("[dosbox]\n");
|
||||||
|
sb.append("memsize=64\n");
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append("[autoexec]\n");
|
||||||
|
sb.append("@echo off\n");
|
||||||
|
sb.append("mount c .\n");
|
||||||
// Mount CD images as D:, E:, … so games can find their CD.
|
// Mount CD images as D:, E:, … so games can find their CD.
|
||||||
// Deduplicate by parent directory — prefer data formats over descriptors.
|
// Deduplicate by parent directory — prefer data formats over descriptors.
|
||||||
Set<String> seenDirs = new java.util.HashSet<>();
|
Set<String> seenDirs = new java.util.HashSet<>();
|
||||||
|
|||||||
@@ -880,12 +880,36 @@ public class UploadResource {
|
|||||||
/** Build config for a CD-only game (no executables on the filesystem). */
|
/** Build config for a CD-only game (no executables on the filesystem). */
|
||||||
private String buildCdOnlyDosboxConf(List<String> cdImages) {
|
private String buildCdOnlyDosboxConf(List<String> cdImages) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("[sdl]\nautolock=true\nusescancodes=true\noutput=surface\n\n");
|
sb.append("[sdl]\n");
|
||||||
sb.append("[cpu]\ncore=auto\ncycles=auto\n\n");
|
sb.append("autolock=true\n");
|
||||||
sb.append("[mixer]\nnosound=false\nrate=44100\n\n");
|
sb.append("usescancodes=true\n");
|
||||||
sb.append("[sblaster]\nsbtype=sb16\nirq=7\ndma=1\nhdma=5\n\n");
|
sb.append("output=surface\n");
|
||||||
sb.append("[dos]\nxms=true\nems=true\numb=true\n\n");
|
sb.append("\n");
|
||||||
sb.append("[autoexec]\n@echo off\nmount c .\n");
|
sb.append("[cpu]\n");
|
||||||
|
sb.append("core=auto\n");
|
||||||
|
sb.append("cycles=auto\n");
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append("[mixer]\n");
|
||||||
|
sb.append("nosound=false\n");
|
||||||
|
sb.append("rate=44100\n");
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append("[sblaster]\n");
|
||||||
|
sb.append("sbtype=sb16\n");
|
||||||
|
sb.append("irq=7\n");
|
||||||
|
sb.append("dma=1\n");
|
||||||
|
sb.append("hdma=5\n");
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append("[dos]\n");
|
||||||
|
sb.append("xms=true\n");
|
||||||
|
sb.append("ems=true\n");
|
||||||
|
sb.append("umb=true\n");
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append("[dosbox]\n");
|
||||||
|
sb.append("memsize=64\n");
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append("[autoexec]\n");
|
||||||
|
sb.append("@echo off\n");
|
||||||
|
sb.append("mount c .\n");
|
||||||
// Mount CD images as D:, E:, …
|
// Mount CD images as D:, E:, …
|
||||||
// Resolve one image per directory with format priority (.cue > .iso > .ccd > .img > .bin)
|
// Resolve one image per directory with format priority (.cue > .iso > .ccd > .img > .bin)
|
||||||
char driveLetter = 'D';
|
char driveLetter = 'D';
|
||||||
@@ -959,6 +983,9 @@ public class UploadResource {
|
|||||||
sb.append("ems=true\n");
|
sb.append("ems=true\n");
|
||||||
sb.append("umb=true\n");
|
sb.append("umb=true\n");
|
||||||
sb.append("\n");
|
sb.append("\n");
|
||||||
|
sb.append("[dosbox]\n");
|
||||||
|
sb.append("memsize=64\n");
|
||||||
|
sb.append("\n");
|
||||||
sb.append("[autoexec]\n");
|
sb.append("[autoexec]\n");
|
||||||
sb.append("@echo off\n");
|
sb.append("@echo off\n");
|
||||||
sb.append("mount c .\n");
|
sb.append("mount c .\n");
|
||||||
|
|||||||
Reference in New Issue
Block a user