Index of /AXP/OpenVMS/Hexen/
| Name | Last Modified | Size | Type |
| ../ | | - | Directory |
| SRC/ | 2026-Jul-14 11:41:24 | - | Directory |
| README.txt | 2026-Jul-14 20:16:58 | 3.2K | text/plain; charset=utf-8 |
| SDL$SHR.EXE;1 | 2025-Dec-26 18:54:06 | 761.5K | application/octet-stream |
| SDL_HEXEN.EXE | 2026-Jul-14 11:14:48 | 1.7M | application/x-msdos-program |
| SDL_MIXER$SHR.EXE | 2025-Dec-26 18:54:06 | 159.0K | application/x-msdos-program |
| hexen.wad | 2025-Dec-26 18:57:14 | 19.1M | application/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