# Compiled binaries # SDL Hexen for OpenVMS Alpha # With fixed 640x480 resolution scaling # To play: # Copy SDL libraries to SYS$SYSROOT:[SYSLIB] copy SDL$SHR.EXE;1 SYS$SYSROOT:[SYSLIB] copy SDL_MIXER$SHR.EXE;1 SYS$SYSROOT:[SYSLIB] # (make sure to have hexen.wad in your path) hexen :== $DISK:[PATH]SDL_HEXEN.EXE hexen # Compile from source https://astr0baby.online/AXP/OpenVMS/Hexen/SRC/ SDL HEXEN - 640x480 Window Scaling Fix for OpenVMS 8.4 (AXP) ================================================================ PROBLEM: -------- The original code was creating a fullscreen SDL window and displaying the game's 320x200 framebuffer in the center of the screen with black borders, resulting in a tiny window that was difficult to see and play. SOLUTION: --------- Modified i_sdl.c to implement proper 2x scaling from 320x200 to 640x480 in a standard SDL window (not fullscreen). CHANGES MADE: ------------- 1. Added new SDL surface variable (line ~96): - SDL_Surface* sdl_scaled_screen; // For the 640x480 display window 2. Modified I_InitGraphics() function (lines ~1416-1455): - Creates a 640x480 windowed display (not fullscreen) - Creates a separate 320x200 off-screen surface for game rendering - Shares the palette between both surfaces 3. Completely rewrote I_Update() function (lines ~1313-1410): - Removed individual SDL_UpdateRect() calls - Added 2x nearest-neighbor scaling algorithm - Scales from 320x200 game buffer to 640x480 display - Each game pixel becomes a 2x2 block on the display - Uses SDL_Flip() for proper double-buffering 4. Updated I_SetPalette() function (line ~1289): - Sets palette on both the game surface and display surface - Ensures color consistency across both buffers 5. Fixed mouse motion handling (line ~1598): - Changed from sdl_screen->w/h to sdl_scaled_screen->w/h - Ensures mouse warping works correctly in the 640x480 window TECHNICAL DETAILS: ------------------ - Original game resolution: 320x200 (SCREENWIDTH x SCREENHEIGHT) - New display resolution: 640x480 (exactly 2x scale) - Scaling method: Nearest-neighbor (fast, preserves pixel-art look) - Window mode: Windowed (not fullscreen) - Double buffering: Enabled via SDL_Flip() BUILDING: --------- To rebuild on OpenVMS 8.4: 1. @CONFIGURE.COM 2. @BUILD.COM The modified i_sdl.c will be compiled with the rest of the sources. TESTING: -------- After building, run: $ @SDL_HEXEN You should now see: - A 640x480 window (not fullscreen) - Properly scaled 2x graphics (no black borders) - Full screen coverage at native resolution - Smooth gameplay with proper mouse control PERFORMANCE: ------------ The nearest-neighbor scaling is very fast and should not impact performance on Alpha systems. The scaling happens once per frame during the I_Update() call. COMPATIBILITY: -------------- - Tested for OpenVMS 8.4 (AXP) - Requires SDL 1.2.x - No changes to core game logic - All existing command-line options still work - Mouse grab mode (-grabmouse) still functional NOTES: ------ - The game still renders internally at 320x200 for compatibility - Only the display output is scaled to 640x480 - This maintains the original game aspect ratio - The scaling is done in software, not hardware - VMS-specific F11/F12 key mapping is preserved