Server-side No Lead Fix. For haloceded.exe v1.09 ONLY.
I can't believe it has been over a year since I posted the original idea thread!
I am sorry that I have not got around to trying this sooner but oh well... here it is!
Source is included. It was written as quickly as possible, so it is not well organised, but hopefully the community will benefit more if it is released.
Code:
Halo Lag Compensation Tool
==========================
By PaulusT
==========
This tool prevents or reduces the "leading" that is required in Halo.
It is for Halo Custom Edition 1.09 dedicated server.
First posted to:
modacity.net/forums/showthread.php?24803-Release-Source-Halo-Lag-Compensation-Tool
Installation
============
Place all files and folders in "release" into the directory of haloceded.exe.
E.g.
...
plugins/
haloce.exe
haloceded.exe
winmm.dll
winmm.pdb
...
Setup
=====
Edit your init.txt file for the server (e.g. init_server.txt) to include these lines:
multiplayer_draw_teammates_names 1
mouse_acceleration 95
multiplayer_hit_sound_volume 1
Run your server. E.g. haloceded.exe -exec init_server.txt
Done. Players can now join your server.
Explanation
===========
When player A directly shoots player B, it will usually miss
because by the time the message has reached the server, player B has moved.
This tool will cause the hitbox of player B (and all players) to lag behind
so that player A's shot will hit without player A having to lead.
A similar technique is used in Source games, like Team Fortress 2,
Counter Strike, etc.
The hitbox of player B will lag by the following number of milliseconds:
Ping of player A * multiplayer_hit_sound_volume + mouse_acceleration
The technique is not perfect and the formula will almost certainly need to be tweaked.
The defaults I have provided above have worked OK in my limited testing:
i.e. Ping of player A + 95
Please check back at
modacity.net/forums/showthread.php?24803-Release-Source-Halo-Lag-Compensation-Tool
for updates and the best values to use.
If multiplayer_draw_teammates_names is true, then the average of player A's ping
over the last 10 seconds (sampled once per second) is used,
instead of player A's current ping.
The maximum lag amount is about 2 seconds.
Limitations
===========
This is just a quick hack, but it should fairly be stable.
However, you will still need to lead players in vehicles in this release
(but this can be fixed quite easily I think).
Also, crouching, other animations, rotation
and probably some other things I am forgetting are not taken into account.
I am not sure about how to handle animations.
Source
======
The source is included. The license is the GPLv3. It is a quick hack (sorry!).
Please feel free to incorporate into your own projects.
Please credit PaulusT. Perhaps include a link to:
modacity.net/forums/showthread.php?24803-Release-Source-Halo-Lag-Compensation-Tool
If you use this, please post to the above thread to keep the community in the loop.
winmm.dll
=========
winmm.dll is just a dll loader. It loads all dlls in the "plugins" directory
into the Halo client and Halo dedicated server.
It seems to work OK in Windows 7 and I assume it will work fine for others too.
If not, you can use any other dll loader to load HaloLagCompensation.dll
into the dedicated server.
HaloLagCompensation.dll unloads if it thinks it is loaded into the Halo client,
so your Halo client should not be affected.
If things do go wrong, just delete winmm.dll from your Halo directory.
Thanks
PaulusT
Edit: A few extra points that I forgot to explain!
Who can use this?
This is a server-side fix. So, this will have no effect if you load up your Halo client and connect to a random game. You must start haloceded.exe and then join that server, or join someone else's server that is definitely running the tool. Clients do not need the tool.
Parameters
In order to get this tool released ASAP, I have used the following redundant server-side variables as parameters:
- multiplayer_draw_teammates_names (is the "use average ping" parameter)
- multiplayer_hit_sound_volume (is parameter M below)
- mouse_acceleration (is parameter K below)
The M and K parameters are constants that can be adjusted. The hitbox of player B (in the README example) is lagged by:
ping of player A * M + K
Thus, you will need to try different values of M and K. I have given some defaults in the README above. You must set the server-side variables as explained in the README or the tool may not work. Please report the values you used.
Testing that the tool works
I failed to provide any feedback as to whether the tool is actually working! (It should just work, as long as you have the parameters set and are using the 1.09 custom edition dedicated server). However, for now, you can do the following:
- Check that HaloLagCompensation.dll has loaded into haloceded.exe. You can use a tool like Process Explorer. Open Process Explorer, click the haloceded.exe process to highlight it, view DLLs (Ctr+D) and then find HaloLagCompensation.dll in the lower pane.
- At the server console, do:
- multiplayer_hit_sound_volume 0
- mouse_acceleration 2000
- Now, you should be able to shoot at "where players were 2 seconds ago" and still get hits. I.e. reverse leading. E.g. Player B stands still. Then player B runs away. Then immediately, player A shoots at where player B was when they were standing still. Player B should still take damage.
If it does not work
Please report:
- Version of haloceded.exe that was used. This MUST be the real v1.09.
- Whether Process Explorer shows that HaloLagCompensation.dll was loaded in haloceded.exe.
- The values of the parameters. I.e. go to the *server console* and type:
- multiplayer_draw_teammates_names
- multiplayer_hit_sound_volume
- mouse_acceleration
- ...and tell us what values were output to the console.
Thanks!
Bookmarks