diff options
Diffstat (limited to '')
| -rw-r--r-- | CONTEXT.md | 10 |
1 files changed, 7 insertions, 3 deletions
| @@ -303,9 +303,13 @@ vocabulary / decisions. | |||
| 303 | ApplySpread` is inlined into `CBaseEntity::FireBullets` and draws x/y via | 303 | ApplySpread` is inlined into `CBaseEntity::FireBullets` and draws x/y via |
| 304 | the global `CUniformRandomStream` (`_ZTV20CUniformRandomStream` + 8, slot 1 | 304 | the global `CUniformRandomStream` (`_ZTV20CUniformRandomStream` + 8, slot 1 |
| 305 | = `RandomFloat(float,float)`; confirmed against `libvstdlib.so`). The hook | 305 | = `RandomFloat(float,float)`; confirmed against `libvstdlib.so`). The hook |
| 306 | returns 0 for those draws only when the calling frame's `this` (at | 306 | returns 0 for those draws so every pellet follows the exact shot direction. |
| 307 | `ebp+8`) is the local server player, so every pellet follows the exact shot | 307 | Detection is frame-based (`ebp+8` = the local server player) *and* a small |
| 308 | direction. NPC fire and the client's prediction stream keep normal values. | 308 | armed window: the player's `FireBullets` `RandomSeed` call sets a counter of |
| 309 | 8 draws, which the next `RandomFloat` calls consume. The window is required | ||
| 310 | because the compiler can outline the `ApplySpread` draws into a different | ||
| 311 | frame, where the first argument is not the player. NPC fire and the client's | ||
| 312 | prediction stream keep normal values. | ||
| 309 | - This attacks the random cone offset only. The cone size, the pistol's | 313 | - This attacks the random cone offset only. The cone size, the pistol's |
| 310 | `m_flAccuracyPenalty` growth, the server view punch added to | 314 | `m_flAccuracyPenalty` growth, the server view punch added to |
| 311 | `GetAutoaimVector`, and any damage falloff are server-side state. In | 315 | `GetAutoaimVector`, and any damage falloff are server-side state. In |
