From 6c56cbc992bd192adbbbc8b924be4ace18eb96c8 Mon Sep 17 00:00:00 2001 From: David Alvarez Date: Wed, 27 May 2026 09:57:41 +0200 Subject: [PATCH] fix: use CRLF line endings in DEFAULT.CFG to match Doom's fgets parser The dos.zone DEFAULT.CFG uses \r\n (DOS/CRLF) line endings. Our injected config used \n (LF/Unix). While fgets() reads both, the \r character stays in the buffer and the Doom parser may behave differently when it's absent. Matching the exact byte-for-byte format that works on dos.zone. --- .../java/com/dostalgia/UploadResource.java | 69 ++++++++++--------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/dostalgia/UploadResource.java b/src/main/java/com/dostalgia/UploadResource.java index faee721..8c27c5f 100644 --- a/src/main/java/com/dostalgia/UploadResource.java +++ b/src/main/java/com/dostalgia/UploadResource.java @@ -329,40 +329,43 @@ public class UploadResource { * Mouse enabled for looking */ private byte[] buildDoomDefaultCfg() { + // Use CRLF (\r\n) line endings — Doom's config parser uses fgets() + // which includes \r in the buffer on DOS. Missing \r can cause parsing issues. + String CRLF = "\r\n"; String cfg = "" - + "mouse_sensitivity\t\t5\n" - + "sfx_volume\t\t8\n" - + "music_volume\t\t8\n" - + "show_messages\t\t1\n" - + "key_right\t\t77\n" // Right arrow — turn right - + "key_left\t\t75\n" // Left arrow — turn left - + "key_up\t\t17\n" // W — forward - + "key_down\t\t31\n" // S — backward - + "key_strafeleft\t\t30\n" // A — strafe left - + "key_straferight\t\t32\n" // D — strafe right - + "key_fire\t\t29\n" // Ctrl — fire - + "key_use\t\t57\n" // Space — use/open - + "key_strafe\t\t56\n" // Alt — strafe (hold) - + "key_speed\t\t54\n" // Shift — run - + "use_mouse\t\t1\n" - + "mouseb_fire\t\t0\n" - + "mouseb_strafe\t\t1\n" - + "mouseb_forward\t\t2\n" - + "use_joystick\t\t0\n" - + "joyb_fire\t\t0\n" - + "joyb_strafe\t\t1\n" - + "joyb_use\t\t3\n" - + "joyb_speed\t\t2\n" - + "screenblocks\t\t10\n" - + "detaillevel\t\t0\n" - + "showmessages\t\t1\n" - + "comport\t\t1\n" - + "snd_channels\t\t3\n" - + "snd_musicdevice\t\t3\n" - + "snd_sfxdevice\t\t3\n" - + "snd_sbport\t\t544\n" - + "snd_sbirq\t\t7\n" - + "snd_sbdma\t\t1\n"; + + "mouse_sensitivity\t\t5" + CRLF + + "sfx_volume\t\t8" + CRLF + + "music_volume\t\t8" + CRLF + + "show_messages\t\t1" + CRLF + + "key_right\t\t77" + CRLF // Right arrow — turn right + + "key_left\t\t75" + CRLF // Left arrow — turn left + + "key_up\t\t17" + CRLF // W — forward + + "key_down\t\t31" + CRLF // S — backward + + "key_strafeleft\t\t30" + CRLF // A — strafe left + + "key_straferight\t\t32" + CRLF // D — strafe right + + "key_fire\t\t29" + CRLF // Ctrl — fire + + "key_use\t\t57" + CRLF // Space — use/open + + "key_strafe\t\t56" + CRLF // Alt — strafe (hold) + + "key_speed\t\t54" + CRLF // Shift — run + + "use_mouse\t\t1" + CRLF + + "mouseb_fire\t\t0" + CRLF + + "mouseb_strafe\t\t1" + CRLF + + "mouseb_forward\t\t2" + CRLF + + "use_joystick\t\t0" + CRLF + + "joyb_fire\t\t0" + CRLF + + "joyb_strafe\t\t1" + CRLF + + "joyb_use\t\t3" + CRLF + + "joyb_speed\t\t2" + CRLF + + "screenblocks\t\t10" + CRLF + + "detaillevel\t\t0" + CRLF + + "showmessages\t\t1" + CRLF + + "comport\t\t1" + CRLF + + "snd_channels\t\t3" + CRLF + + "snd_musicdevice\t\t3" + CRLF + + "snd_sfxdevice\t\t3" + CRLF + + "snd_sbport\t\t544" + CRLF + + "snd_sbirq\t\t7" + CRLF + + "snd_sbdma\t\t1" + CRLF; return cfg.getBytes(java.nio.charset.StandardCharsets.US_ASCII); }