VOGONS


First post, by ludicrous_peridot

User metadata
Rank Member
Rank
Member

Wanted to play Heretic in DOS with mouse look, so, in a way, revisited this old topic. Only this time aiming to achieve control changes with a TSR that uses id protocol for control devices, and not binary patching. I am not sure which project preceded this; the usual source of Doom engine games wisdom has example of driver source code for Doom, but for Heretic game source code is available, so I simply started from scratch.

So far so good, so sharing an "alpha" build. Source code is available with the moustest project in github and is a single file Watcom C project.

The "driver" interfaces built-in vanilla Heretic code, no code patching happens. If CuteMouse is loaded with mousewheel support (e.g. as CTMOUSE /O /3) mouse wheel is by default mapped to inventory browsing with middle click (usually "wheel click") bound to artifact use. Alternative modes are available that map wheel to weapon cycling or flight control, or use "wheel click" for "over the shoulder look" - see CUTEHT /?.
Also "autorun" can be activated as an option.
In all modes LMB controls shooting, RMB is for strafing and RMB double click is use (switches, doors).
If you are curious, I am testing it with a PS/2 Intellimouse.

The most user-friendly way to run Heretic with the TSR is by providing arguments as a response file and letting CUTEHT filter it via stream redirection (again CUTEHT /? gives an example of this).
It is advised to suppress Heretic's own mouse support code as it may interfere with TSR's usage of int 33H, and the example does exactly that.

Here's a brief capture from an emulator of the TSR "in action".

giphy.gif

Last edited by ludicrous_peridot on 2026-11-07, 21:39. Edited 3 times in total.

GA-G41M-Combo G41/ICH7 - Core 2 Quad Q9550 - DDR3 1033 - Radeon RX570 - CMI-8738 - X3MB - CM-300 - Saitek ST-30
Beetle/M/i815+ICH2 - Celeron 566Mhz - Opti 924 - YMF740 - MT-100
https://archive.org/details/peridot-26

Reply 1 of 4, by keropi

User metadata
Rank l33t++
Rank
l33t++

interesting, so this is something like BMOUSE that makes DN3D more enjoyable... will give it a spin ! thanks!

🎵 🎧 ⏳ ⚡ SoundVision PRO,MK1869 , PCMIDI MPU , OrpheusII , Megacard and 🎶GoldLib soundcard website
💾💾💾 Looking for a full version of LIST ENHANCED 2.4y1 by V. Buerg, message me if you have it for sale! 💾💾💾

Reply 2 of 4, by ludicrous_peridot

User metadata
Rank Member
Rank
Member

Thank you for your interest, Keropi.

This is basically a tool that makes a wheel mouse pretend it's a VR headset from the 90s (plus whatever manipulator that came with it) thanks to an API Raven have added for those.
I have not researched Duke 3D, but did a quick search for similar Heretic tools after posting and there is one called RAVMOUSE. I have examined the thread on DoomWorld about it and the author has pointed out a limitation: after respawn or starting a new level, game engine's and driver's "head pitch" diverge. So there's now synchronization via the said API's built in method in the latest build, but the players need to trigger it manually (bound to RMB tripple click).

Also made it easier to start the game with the driver, using batch file provided.

Have not tested CUTEHT with Hexen, albeit it also has a similar (if not same) API - need to check the game source code first.

*UPD:* Added Doom support. For Doom -d argument is to be given, and only turning/strafing/firing/using are supported as well as weapon selection with mouse wheel and middle mouse button press. A bit of an "academic interest" thing, but it was fun to add this and I used it for testing "newly restored" external driver support in BUCK/Krapfen Doom (which is the DOS source port I develop on from time to time).
The downloads in this very post have been updated.

GA-G41M-Combo G41/ICH7 - Core 2 Quad Q9550 - DDR3 1033 - Radeon RX570 - CMI-8738 - X3MB - CM-300 - Saitek ST-30
Beetle/M/i815+ICH2 - Celeron 566Mhz - Opti 924 - YMF740 - MT-100
https://archive.org/details/peridot-26

Reply 3 of 4, by ludicrous_peridot

User metadata
Rank Member
Rank
Member

Since I was not entirely content with how free mouse look felt in Heretic, I did couple more tweaks to the driver.
- added an option to apply sensitivity in a "non-linear" fashion
- made vertical look feel smoother

In fact, the latter was not exactly a driver change. Modifying vertical look angle in 5-unit multiples was a limitation of the game itself, and I could not resist modding the .EXE to change that to 1 or 2 units. In the attached package, SMOOTHER.BAT runs a patched version of HERETIC.EXE (v1.3 is expected) and also configures the driver to take advantage of this.

Enjoy.

GA-G41M-Combo G41/ICH7 - Core 2 Quad Q9550 - DDR3 1033 - Radeon RX570 - CMI-8738 - X3MB - CM-300 - Saitek ST-30
Beetle/M/i815+ICH2 - Celeron 566Mhz - Opti 924 - YMF740 - MT-100
https://archive.org/details/peridot-26

Reply 4 of 4, by ludicrous_peridot

User metadata
Rank Member
Rank
Member

Using higher sensitivity with mouse-driven horizontal turning has brought to light (or should I say "to sound") strange behavior in Heretic around how stereo separation is being applied to sound samples. When player is turning fast enough clicks start to be heard if a positional sound source is playing nearby. This can become quite annoying, especially when using headphones, but limiting "stereo swing" (reducing the range of possible separation values) removes the effect at the expense of making stereo effect in the game less "pronounced".

The patch to HERETIC.EXE (v1.3) is available in the attachment along with JPATCHT needed to apply it, updated version of startup scripts (the ones packaged before unfortunately had some bugs), and latest build of the TSR.

Also for those who have interest in playing vanilla game with a C-Media PCI soundcard, or are using VSBCMI: looking at the code and listening to Heretic in headphone during last few days made me realize I am uncomfortable with fixup that VSBCMI performs for games code, and how this can potentially be messing up the games critical sections. I have published an updated version of VSBCMI which does not include the fixup and requires SETPVI to be run before any game that relies on POPF to restore interrupts state post CLI - e.g. Heretic will simply hand at startup otherwise. It is a bit of an experiment, but I think I may be hearing fewer clicks and scratching in Heretic post this change.

GA-G41M-Combo G41/ICH7 - Core 2 Quad Q9550 - DDR3 1033 - Radeon RX570 - CMI-8738 - X3MB - CM-300 - Saitek ST-30
Beetle/M/i815+ICH2 - Celeron 566Mhz - Opti 924 - YMF740 - MT-100
https://archive.org/details/peridot-26