Index of /AXP/OpenVMS/Hexen/

NameLast ModifiedSizeType
../ -  Directory
SRC/2026-Jul-14 11:41:24-  Directory
README.txt2026-Jul-14 20:16:583.2Ktext/plain; charset=utf-8
SDL$SHR.EXE;12025-Dec-26 18:54:06761.5Kapplication/octet-stream
SDL_HEXEN.EXE2026-Jul-14 11:14:481.7Mapplication/x-msdos-program
SDL_MIXER$SHR.EXE2025-Dec-26 18:54:06159.0Kapplication/x-msdos-program
hexen.wad2025-Dec-26 18:57:1419.1Mapplication/x-doom
# 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
Webserver 1.0