First version of Xrasher.
Some checks are pending
Build & Deploy Engine / build (macos-13, amd64, apple) (push) Waiting to run
Build & Deploy Engine / build (macos-14, arm64, apple) (push) Waiting to run
Build & Deploy Engine / build (true, ubuntu-20.04, arm64, linux) (push) Waiting to run
Build & Deploy Engine / build (true, ubuntu-20.04, armhf, linux) (push) Waiting to run
Build & Deploy Engine / build (true, ubuntu-20.04, ppc64el, linux) (push) Waiting to run
Build & Deploy Engine / build (true, ubuntu-20.04, riscv64, linux) (push) Waiting to run
Build & Deploy Engine / build (ubuntu-20.04, amd64, linux) (push) Waiting to run
Build & Deploy Engine / build (ubuntu-20.04, i386, linux) (push) Waiting to run
Build & Deploy Engine / build (ubuntu-20.04, multiarch, android) (push) Waiting to run
Build & Deploy Engine / build (ubuntu-latest, arm64, nswitch) (push) Waiting to run
Build & Deploy Engine / build (ubuntu-latest, armv7hf, psvita) (push) Waiting to run
Build & Deploy Engine / build (windows-2019, i386, win32) (push) Waiting to run
Build & Deploy Engine / build (windows-latest, amd64, win32) (push) Waiting to run
Build & Deploy Engine / flatpak (su.xash.Engine.Compat.i386) (push) Waiting to run
Build & Deploy Engine / Upload releases (push) Blocked by required conditions
Some checks are pending
Build & Deploy Engine / build (macos-13, amd64, apple) (push) Waiting to run
Build & Deploy Engine / build (macos-14, arm64, apple) (push) Waiting to run
Build & Deploy Engine / build (true, ubuntu-20.04, arm64, linux) (push) Waiting to run
Build & Deploy Engine / build (true, ubuntu-20.04, armhf, linux) (push) Waiting to run
Build & Deploy Engine / build (true, ubuntu-20.04, ppc64el, linux) (push) Waiting to run
Build & Deploy Engine / build (true, ubuntu-20.04, riscv64, linux) (push) Waiting to run
Build & Deploy Engine / build (ubuntu-20.04, amd64, linux) (push) Waiting to run
Build & Deploy Engine / build (ubuntu-20.04, i386, linux) (push) Waiting to run
Build & Deploy Engine / build (ubuntu-20.04, multiarch, android) (push) Waiting to run
Build & Deploy Engine / build (ubuntu-latest, arm64, nswitch) (push) Waiting to run
Build & Deploy Engine / build (ubuntu-latest, armv7hf, psvita) (push) Waiting to run
Build & Deploy Engine / build (windows-2019, i386, win32) (push) Waiting to run
Build & Deploy Engine / build (windows-latest, amd64, win32) (push) Waiting to run
Build & Deploy Engine / flatpak (su.xash.Engine.Compat.i386) (push) Waiting to run
Build & Deploy Engine / Upload releases (push) Blocked by required conditions
This commit is contained in:
parent
8af0e2c8b4
commit
457b7fbfd9
19 changed files with 812 additions and 114 deletions
BIN
Documentation/2025-03-13-213630_1600x900_scrot.png
Normal file
BIN
Documentation/2025-03-13-213630_1600x900_scrot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 MiB |
BIN
Documentation/2025-03-15-011749_1600x900_scrot.png
Normal file
BIN
Documentation/2025-03-15-011749_1600x900_scrot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 711 KiB |
BIN
Documentation/2025-03-15-072452_1600x900_scrot.png
Normal file
BIN
Documentation/2025-03-15-072452_1600x900_scrot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 MiB |
BIN
Documentation/2025-03-15-072942_1600x900_scrot.png
Normal file
BIN
Documentation/2025-03-15-072942_1600x900_scrot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.4 MiB |
BIN
Documentation/2025-03-16-035937_1600x900_scrot.png
Normal file
BIN
Documentation/2025-03-16-035937_1600x900_scrot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 MiB |
152
README.md
152
README.md
|
@ -1,102 +1,92 @@
|
||||||
# Xash3D FWGS Engine <img align="right" width="128" height="128" src="https://github.com/FWGS/xash3d-fwgs/raw/master/game_launch/icon-xash-material.png" alt="Xash3D FWGS icon" />
|
# Xrasher
|
||||||
[](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml) [](https://cirrus-ci.com/github/FWGS/xash3d-fwgs) \
|
|
||||||
[](http://fwgsdiscord.mentality.rip/) [](https://t.me/flyingwithgauss) \
|
|
||||||
[](https://github.com/FWGS/xash3d-fwgs/releases/tag/continuous)
|
|
||||||
|
|
||||||
Xash3D ([pronounced](https://ipa-reader.com/?text=ks%C9%91%CA%82) `[ksɑʂ]`) FWGS is a game engine, aimed to provide compatibility with Half-Life Engine and extend it, as well as to give game developers well known workflow.
|
Xrasher is a BVFF cheating super-client for the Xash3D game engine.
|
||||||
|
Read the [original README](README_old.md)
|
||||||
|
|
||||||
Xash3D FWGS is a heavily modified fork of an original [Xash3D Engine](https://www.moddb.com/engines/xash3d-engine) by Unkle Mike.
|
## Features
|
||||||
|
|
||||||
## Donate
|
* Complete Ban Bypass
|
||||||
[](Documentation/donate.md) \
|
* Xrasher is completely immune to bans, yes seriously, if you get jannied on
|
||||||
If you like Xash3D FWGS, consider supporting individual engine maintainers. By supporting us, you help to continue developing this game engine further. The sponsorship links are available in [documentation](Documentation/donate.md).
|
a server for any reason, you can literally just join back in. This is
|
||||||
|
because Xash uses an MD5 hash (generated in various, somewhat strange
|
||||||
|
ways) stored locally, Xrasher completely nullifies the persistence of
|
||||||
|
this "XashID" and generates a new one each time.
|
||||||
|
|
||||||
## Fork features
|
* Wallhack
|
||||||
* Steam Half-Life (HLSDK 2.5) support.
|
* A perfect and natural wallhack, all relevant entities and players
|
||||||
* Crossplatform and modern compilers support: supports Windows, Linux, BSD & Android on x86 & ARM and [many more](Documentation/ports.md).
|
are visible through walls. A wallhack implementation is provided
|
||||||
* Better multiplayer: multiple master servers, headless dedicated server, voice chat, [GoldSrc protocol support](Documentation/goldsrc-protocol-support.md) and IPv6 support.
|
for both the GL renderer (recommended) and the software-renderer
|
||||||
* Multiple renderers support: OpenGL, GLESv1, GLESv2 and Software.
|
(sometimes glitchy).
|
||||||
* Advanced virtual filesystem: `.pk3` and `.pk3dir` support, compatibility with GoldSrc FS module, fast case-insensitivity emulation for crossplatform.
|
|
||||||
* Mobility API: better game integration on mobile devices (vibration, touch controls).
|
|
||||||
* Different input methods: touch and gamepad in addition to mouse & keyboard.
|
|
||||||
* TrueType font rendering, as a part of mainui_cpp.
|
|
||||||
* External VGUI support module.
|
|
||||||
* PNG & KTX2 image format support.
|
|
||||||
* Ogg Vorbis (`.ogg`) & Ogg Opus (`.opus`) audio formats support.
|
|
||||||
* [A set of small improvements](Documentation/), without broken compatibility.
|
|
||||||
|
|
||||||
## Installation & Running
|
* Silent Aimbot
|
||||||
0) Get Xash3D FWGS binaries: you can use [testing](https://github.com/FWGS/xash3d-fwgs/releases/tag/continuous) build or you can compile engine from source code.
|
* Very simple and effective silent-aimbot.
|
||||||
1) Copy engine binaries to some directory.
|
|
||||||
2) Copy `valve` directory from [Half-Life](https://store.steampowered.com/app/70/HalfLife/) to directory with engine binaries.
|
|
||||||
If your CPU is NOT x86 compatible or you're running 64-bit version of the engine, you may want to compile [Half-Life SDK](https://github.com/FWGS/hlsdk-portable).
|
|
||||||
This repository contains our fork of HLSDK and restored source code for Half-Life expansions and some mods.
|
|
||||||
You still needed to copy `valve` directory as all game resources located there.
|
|
||||||
3) Run the main executable (`xash3d.exe` or AppImage).
|
|
||||||
|
|
||||||
For additional info, run Xash3D with `-help` command line key.
|
* Random Name Shuffling
|
||||||
|
* Everytime you start the Xrasher client or join a server, a random name is
|
||||||
|
automatically selected and set for you, confusing your victims and the
|
||||||
|
jannies.
|
||||||
|
|
||||||
## Contributing
|
* Clientside cheats unlocked
|
||||||
* Before sending an issue, check if someone already reported your issue. Make sure you're following "How To Ask Questions The Smart Way" guide by Eric Steven Raymond. Read more: http://www.catb.org/~esr/faqs/smart-questions.html.
|
|
||||||
* Issues are accepted in both English and Russian.
|
|
||||||
* Before sending a PR, check if you followed our contribution guide in CONTRIBUTING.md file.
|
|
||||||
|
|
||||||
## Build instructions
|
* "Multiplayer" protected commands unlocked
|
||||||
We are using Waf build system. If you have some Waf-related questions, I recommend you to read [Waf Book](https://waf.io/book/).
|
|
||||||
|
|
||||||
NOTE: NEVER USE GitHub's ZIP ARCHIVES. GitHub doesn't include external dependencies we're using!
|
* Simple UI
|
||||||
|
* Turn on 'net\_graph' to enable it.
|
||||||
|
|
||||||
### Prerequisites
|
* No flashing (flashbangs), visual viewpunch, or screenshake, your eyeballs are stoic
|
||||||
If your CPU is x86 compatible and you're on Windows or Linux, we are building 32-bit code by default. This was done to maintain compatibility with Steam releases of Half-Life and based on it's engine games.
|
|
||||||
Even if Xash3D FWGS does support targetting 64-bit, you can't load games without recompiling them from source code!
|
|
||||||
|
|
||||||
If your CPU is NOT x86 compatible or you decided build 64-bit version of engine, you may want to compile [Half-Life SDK](https://github.com/FWGS/hlsdk-portable).
|
## Screenshots
|
||||||
This repository contains our fork of HLSDK and restored source code for Half-Life expansions and some mods.
|
|
||||||
|
|
||||||
#### Windows (Visual Studio)
|
Half-Life Deathmatch, demonstrating wallhack, aimbot, fullbright hack, ui, etc.
|
||||||
* Install Visual Studio.
|

|
||||||
* Install latest [Python](https://python.org) **OR** run `cinst python.install` if you have Chocolatey.
|

|
||||||
* Install latest [Git](https://git-scm.com/download/win) **OR** run `cinst git.install` if you have Chocolatey.
|
|
||||||
* Download [SDL2](https://libsdl.org/download-2.0.php) development package for Visual Studio.
|
|
||||||
* Clone this repository: `git clone --recursive https://github.com/FWGS/xash3d-fwgs`.
|
|
||||||
* Make sure you have at least 12GB of free space to store all build-time dependencies: ~10GB for Visual Studio, 300 MB for Git, 100 MB for Python and other.
|
|
||||||
|
|
||||||
#### GNU/Linux
|
Counter Strike 1.6, demonstrating wallhack, aimbot, fullbright hack, ui, etc.
|
||||||
##### Debian/Ubuntu
|

|
||||||
* Only for 32-bit engine on 64-bit x86 operating system:
|

|
||||||
* Enable i386 on your system: `$ sudo dpkg --add-architecture i386`.
|

|
||||||
* Install `aptitude` ([why?](https://github.com/FWGS/xash3d-fwgs/issues/1828#issuecomment-2415131759)): `$ sudo apt update && sudo apt upgrade && sudo apt install aptitude`
|
|
||||||
* Install development tools: `$ sudo aptitude --without-recommends install git build-essential gcc-multilib g++-multilib libsdl2-dev:i386 libfreetype-dev:i386 libopus-dev:i386 libbz2-dev:i386 libvorbis-dev:i386 libopusfile-dev:i386 libogg-dev:i386`.
|
|
||||||
* Set PKG_CONFIG_PATH environment variable to point at 32-bit libraries: `$ export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig`.
|
|
||||||
|
|
||||||
* For 64-bit engine on 64-bit x86 and other non-x86 systems:
|
## Setup
|
||||||
* Install development tools: `$ sudo apt install git build-essential python libsdl2-dev libfreetype6-dev libopus-dev libbz2-dev libvorbis-dev libopusfile-dev libogg-dev`.
|
|
||||||
|
|
||||||
* Clone this repostory: `$ git clone --recursive https://github.com/FWGS/xash3d-fwgs`.
|
Copy binaries or compile Xrasher to your gayme's root. Run it.
|
||||||
|
|
||||||
##### RedHat/Fedora
|
./xash3d -console
|
||||||
* Only for 32-bit engine on 64-bit x86 operating system:
|
|
||||||
* Install development tools: `$ sudo dnf install git gcc gcc-c++ glibc-devel.i686 SDL2-devel.i686 opus-devel.i686 freetype-devel.i686 bzip2-devel.i686 libvorbis-devel.i686 opusfile-devel.i686 libogg-devel.i686`.
|
|
||||||
* Set PKG_CONFIG_PATH environment variable to point at 32-bit libraries: `$ export PKG_CONFIG_PATH=/usr/lib/pkgconfig`.
|
|
||||||
|
|
||||||
* For 64-bit engine on 64-bit x86 and other non-x86 systems:
|
Enable 'net\_graph' in console, Xrasher's ui is implemented inside. The smart
|
||||||
* Install development tools: `$ sudo dnf install git gcc gcc-c++ SDL2-devel opus-devel freetype-devel bzip2-devel libvorbis-devel opusfile-devel libogg-devel`.
|
silent-aimbot should be automatically enabled, copy the sample config file from
|
||||||
|
this directory (config.cfg) to gayme's 'valve' or 'cstrike' for helpful Xrasher
|
||||||
|
keybindings.
|
||||||
|
|
||||||
* Clone this repostory: `$ git clone --recursive https://github.com/FWGS/xash3d-fwgs`.
|
* 1 - Enable distance aimbot
|
||||||
|
* 2 - Disable distance aimbot
|
||||||
|
* 3 - Enable smart aimbot
|
||||||
|
* 4 - Disable smart aimbot
|
||||||
|
|
||||||
### Building
|
Since Xrasher has clientside cheats unlocked, you can do things such as
|
||||||
#### Windows (Visual Studio)
|
enabling 'r\_fullbright 1', for complete visibility, or 'default\_fov 115' for
|
||||||
0) Open command line.
|
a large field-of-view.
|
||||||
1) Navigate to `xash3d-fwgs` directory.
|
|
||||||
2) (optional) Examine which build options are available: `waf --help`.
|
|
||||||
3) Configure build: `waf configure --sdl2=c:/path/to/SDL2`.
|
|
||||||
4) Compile: `waf build`.
|
|
||||||
5) Install: `waf install --destdir=c:/path/to/any/output/directory`.
|
|
||||||
|
|
||||||
#### Linux
|
Enjoy, and cleanse people's video game addictions.
|
||||||
If compiling 32-bit on amd64, make sure `PKG_CONFIG_PATH` from the previous step is set correctly, prior to running configure.
|
|
||||||
|
|
||||||
0) (optional) Examine which build options are available: `./waf --help`.
|
|
||||||
1) Configure build: `./waf configure` (you need to pass `-8` to compile 64-bit engine on 64-bit x86 processor).
|
## New Console Commands
|
||||||
2) Compile: `./waf build`.
|
|
||||||
3) Install: `./waf install --destdir=/path/to/any/output/directory`.
|
* xrasher\_newname - Get a new nickname
|
||||||
|
* xrasher\_aimsmart 1 - Enable the smart aimbot, set it and forget it! (recommended)
|
||||||
|
* xrasher\_aimnear 1 - Enable the aimbot that's focused on what player is closest
|
||||||
|
|
||||||
|
## TODO?
|
||||||
|
|
||||||
|
* Extreme hack, take remote control of server, noclip, invulnerability, spawn entities, etc.
|
||||||
|
* ESP, see health, curweapon, name
|
||||||
|
* UI element that shows nearest players and pickups
|
||||||
|
* "You are locked on:" ui indicator
|
||||||
|
* Automatic bunnyhop
|
||||||
|
* Disable flashes and smoke particles DONE
|
||||||
|
|
||||||
|
## LICENSE
|
||||||
|
|
||||||
|
Xrasher itself is public domain CC0, although Xash3D-FWGS is in a legal grey
|
||||||
|
area, because it attempts to be GPL (and includes some GPL software), but links
|
||||||
|
with proprietary dynamic link libraries at runtime. There is some silly
|
||||||
|
discussions about this you can read.
|
||||||
|
|
102
README_old.md
Normal file
102
README_old.md
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
# Xash3D FWGS Engine <img align="right" width="128" height="128" src="https://github.com/FWGS/xash3d-fwgs/raw/master/game_launch/icon-xash-material.png" alt="Xash3D FWGS icon" />
|
||||||
|
[](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml) [](https://cirrus-ci.com/github/FWGS/xash3d-fwgs) \
|
||||||
|
[](http://fwgsdiscord.mentality.rip/) [](https://t.me/flyingwithgauss) \
|
||||||
|
[](https://github.com/FWGS/xash3d-fwgs/releases/tag/continuous)
|
||||||
|
|
||||||
|
Xash3D ([pronounced](https://ipa-reader.com/?text=ks%C9%91%CA%82) `[ksɑʂ]`) FWGS is a game engine, aimed to provide compatibility with Half-Life Engine and extend it, as well as to give game developers well known workflow.
|
||||||
|
|
||||||
|
Xash3D FWGS is a heavily modified fork of an original [Xash3D Engine](https://www.moddb.com/engines/xash3d-engine) by Unkle Mike.
|
||||||
|
|
||||||
|
## Donate
|
||||||
|
[](Documentation/donate.md) \
|
||||||
|
If you like Xash3D FWGS, consider supporting individual engine maintainers. By supporting us, you help to continue developing this game engine further. The sponsorship links are available in [documentation](Documentation/donate.md).
|
||||||
|
|
||||||
|
## Fork features
|
||||||
|
* Steam Half-Life (HLSDK 2.5) support.
|
||||||
|
* Crossplatform and modern compilers support: supports Windows, Linux, BSD & Android on x86 & ARM and [many more](Documentation/ports.md).
|
||||||
|
* Better multiplayer: multiple master servers, headless dedicated server, voice chat, [GoldSrc protocol support](Documentation/goldsrc-protocol-support.md) and IPv6 support.
|
||||||
|
* Multiple renderers support: OpenGL, GLESv1, GLESv2 and Software.
|
||||||
|
* Advanced virtual filesystem: `.pk3` and `.pk3dir` support, compatibility with GoldSrc FS module, fast case-insensitivity emulation for crossplatform.
|
||||||
|
* Mobility API: better game integration on mobile devices (vibration, touch controls).
|
||||||
|
* Different input methods: touch and gamepad in addition to mouse & keyboard.
|
||||||
|
* TrueType font rendering, as a part of mainui_cpp.
|
||||||
|
* External VGUI support module.
|
||||||
|
* PNG & KTX2 image format support.
|
||||||
|
* Ogg Vorbis (`.ogg`) & Ogg Opus (`.opus`) audio formats support.
|
||||||
|
* [A set of small improvements](Documentation/), without broken compatibility.
|
||||||
|
|
||||||
|
## Installation & Running
|
||||||
|
0) Get Xash3D FWGS binaries: you can use [testing](https://github.com/FWGS/xash3d-fwgs/releases/tag/continuous) build or you can compile engine from source code.
|
||||||
|
1) Copy engine binaries to some directory.
|
||||||
|
2) Copy `valve` directory from [Half-Life](https://store.steampowered.com/app/70/HalfLife/) to directory with engine binaries.
|
||||||
|
If your CPU is NOT x86 compatible or you're running 64-bit version of the engine, you may want to compile [Half-Life SDK](https://github.com/FWGS/hlsdk-portable).
|
||||||
|
This repository contains our fork of HLSDK and restored source code for Half-Life expansions and some mods.
|
||||||
|
You still needed to copy `valve` directory as all game resources located there.
|
||||||
|
3) Run the main executable (`xash3d.exe` or AppImage).
|
||||||
|
|
||||||
|
For additional info, run Xash3D with `-help` command line key.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
* Before sending an issue, check if someone already reported your issue. Make sure you're following "How To Ask Questions The Smart Way" guide by Eric Steven Raymond. Read more: http://www.catb.org/~esr/faqs/smart-questions.html.
|
||||||
|
* Issues are accepted in both English and Russian.
|
||||||
|
* Before sending a PR, check if you followed our contribution guide in CONTRIBUTING.md file.
|
||||||
|
|
||||||
|
## Build instructions
|
||||||
|
We are using Waf build system. If you have some Waf-related questions, I recommend you to read [Waf Book](https://waf.io/book/).
|
||||||
|
|
||||||
|
NOTE: NEVER USE GitHub's ZIP ARCHIVES. GitHub doesn't include external dependencies we're using!
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
If your CPU is x86 compatible and you're on Windows or Linux, we are building 32-bit code by default. This was done to maintain compatibility with Steam releases of Half-Life and based on it's engine games.
|
||||||
|
Even if Xash3D FWGS does support targetting 64-bit, you can't load games without recompiling them from source code!
|
||||||
|
|
||||||
|
If your CPU is NOT x86 compatible or you decided build 64-bit version of engine, you may want to compile [Half-Life SDK](https://github.com/FWGS/hlsdk-portable).
|
||||||
|
This repository contains our fork of HLSDK and restored source code for Half-Life expansions and some mods.
|
||||||
|
|
||||||
|
#### Windows (Visual Studio)
|
||||||
|
* Install Visual Studio.
|
||||||
|
* Install latest [Python](https://python.org) **OR** run `cinst python.install` if you have Chocolatey.
|
||||||
|
* Install latest [Git](https://git-scm.com/download/win) **OR** run `cinst git.install` if you have Chocolatey.
|
||||||
|
* Download [SDL2](https://libsdl.org/download-2.0.php) development package for Visual Studio.
|
||||||
|
* Clone this repository: `git clone --recursive https://github.com/FWGS/xash3d-fwgs`.
|
||||||
|
* Make sure you have at least 12GB of free space to store all build-time dependencies: ~10GB for Visual Studio, 300 MB for Git, 100 MB for Python and other.
|
||||||
|
|
||||||
|
#### GNU/Linux
|
||||||
|
##### Debian/Ubuntu
|
||||||
|
* Only for 32-bit engine on 64-bit x86 operating system:
|
||||||
|
* Enable i386 on your system: `$ sudo dpkg --add-architecture i386`.
|
||||||
|
* Install `aptitude` ([why?](https://github.com/FWGS/xash3d-fwgs/issues/1828#issuecomment-2415131759)): `$ sudo apt update && sudo apt upgrade && sudo apt install aptitude`
|
||||||
|
* Install development tools: `$ sudo aptitude --without-recommends install git build-essential gcc-multilib g++-multilib libsdl2-dev:i386 libfreetype-dev:i386 libopus-dev:i386 libbz2-dev:i386 libvorbis-dev:i386 libopusfile-dev:i386 libogg-dev:i386`.
|
||||||
|
* Set PKG_CONFIG_PATH environment variable to point at 32-bit libraries: `$ export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig`.
|
||||||
|
|
||||||
|
* For 64-bit engine on 64-bit x86 and other non-x86 systems:
|
||||||
|
* Install development tools: `$ sudo apt install git build-essential python libsdl2-dev libfreetype6-dev libopus-dev libbz2-dev libvorbis-dev libopusfile-dev libogg-dev`.
|
||||||
|
|
||||||
|
* Clone this repostory: `$ git clone --recursive https://github.com/FWGS/xash3d-fwgs`.
|
||||||
|
|
||||||
|
##### RedHat/Fedora
|
||||||
|
* Only for 32-bit engine on 64-bit x86 operating system:
|
||||||
|
* Install development tools: `$ sudo dnf install git gcc gcc-c++ glibc-devel.i686 SDL2-devel.i686 opus-devel.i686 freetype-devel.i686 bzip2-devel.i686 libvorbis-devel.i686 opusfile-devel.i686 libogg-devel.i686`.
|
||||||
|
* Set PKG_CONFIG_PATH environment variable to point at 32-bit libraries: `$ export PKG_CONFIG_PATH=/usr/lib/pkgconfig`.
|
||||||
|
|
||||||
|
* For 64-bit engine on 64-bit x86 and other non-x86 systems:
|
||||||
|
* Install development tools: `$ sudo dnf install git gcc gcc-c++ SDL2-devel opus-devel freetype-devel bzip2-devel libvorbis-devel opusfile-devel libogg-devel`.
|
||||||
|
|
||||||
|
* Clone this repostory: `$ git clone --recursive https://github.com/FWGS/xash3d-fwgs`.
|
||||||
|
|
||||||
|
### Building
|
||||||
|
#### Windows (Visual Studio)
|
||||||
|
0) Open command line.
|
||||||
|
1) Navigate to `xash3d-fwgs` directory.
|
||||||
|
2) (optional) Examine which build options are available: `waf --help`.
|
||||||
|
3) Configure build: `waf configure --sdl2=c:/path/to/SDL2`.
|
||||||
|
4) Compile: `waf build`.
|
||||||
|
5) Install: `waf install --destdir=c:/path/to/any/output/directory`.
|
||||||
|
|
||||||
|
#### Linux
|
||||||
|
If compiling 32-bit on amd64, make sure `PKG_CONFIG_PATH` from the previous step is set correctly, prior to running configure.
|
||||||
|
|
||||||
|
0) (optional) Examine which build options are available: `./waf --help`.
|
||||||
|
1) Configure build: `./waf configure` (you need to pass `-8` to compile 64-bit engine on 64-bit x86 processor).
|
||||||
|
2) Compile: `./waf build`.
|
||||||
|
3) Install: `./waf install --destdir=/path/to/any/output/directory`.
|
|
@ -30,6 +30,298 @@ GNU General Public License for more details.
|
||||||
#define CL_CONNECTION_RETRIES 10
|
#define CL_CONNECTION_RETRIES 10
|
||||||
#define CL_TEST_RETRIES 5
|
#define CL_TEST_RETRIES 5
|
||||||
|
|
||||||
|
//Xrasher random name selection
|
||||||
|
#define XRASHER_NAMES 263
|
||||||
|
const char* xrasher_names[XRASHER_NAMES] = {
|
||||||
|
"TomFazano",
|
||||||
|
"SlavaBozhie",
|
||||||
|
"saintlyWarrior",
|
||||||
|
"FAITHFUL_GUARDIAN",
|
||||||
|
"holy_light_seeker",
|
||||||
|
"DivinePathfinder",
|
||||||
|
"orthodox_knight",
|
||||||
|
"SeraphicScribe",
|
||||||
|
"gracefulPilgrim",
|
||||||
|
"CROWNED_IN_FAITH",
|
||||||
|
"VirtuousVanguard",
|
||||||
|
"celestialHerald",
|
||||||
|
"eternal_hope",
|
||||||
|
"BlessedDefender",
|
||||||
|
"trinityChampion",
|
||||||
|
"peacefuldisciple"
|
||||||
|
"FerventPrayer",
|
||||||
|
"cobson",
|
||||||
|
"feraljak",
|
||||||
|
"soyboy27",
|
||||||
|
"CHRIST_WON",
|
||||||
|
"nothacking_justgood58",
|
||||||
|
"Kingforever",
|
||||||
|
"HappyPeanut",
|
||||||
|
"Davidcat",
|
||||||
|
"FrogPaste",
|
||||||
|
"Matikas48",
|
||||||
|
"luke_smith-http://lukesmith.xyz",
|
||||||
|
"LukeSmith-http://lukesmith.xyz",
|
||||||
|
"matika_adventure",
|
||||||
|
"GabeNewell",
|
||||||
|
"etymologically",
|
||||||
|
"TempleOS",
|
||||||
|
"t3rryd4vis",
|
||||||
|
"coughmeyer",
|
||||||
|
"admer45",
|
||||||
|
"dimbeak",
|
||||||
|
"simon",
|
||||||
|
"therealfreeman",
|
||||||
|
"retard",
|
||||||
|
"DavidShekelberg",
|
||||||
|
"AdonaiSilverman",
|
||||||
|
"rothschild",
|
||||||
|
"rosenberg",
|
||||||
|
"MentalOutlaw",
|
||||||
|
"ban_video_games",
|
||||||
|
"keepitfoss",
|
||||||
|
"GMan",
|
||||||
|
"Nihilanth",
|
||||||
|
"Zombie",
|
||||||
|
"epistemology",
|
||||||
|
"the_logos",
|
||||||
|
"RealMichelThomas",
|
||||||
|
"abraham",
|
||||||
|
"abram",
|
||||||
|
"Itslindy",
|
||||||
|
"ITS_OVER",
|
||||||
|
"gigachud",
|
||||||
|
"gigathud",
|
||||||
|
"WriteInC",
|
||||||
|
"the-third-temple",
|
||||||
|
"xmmp_gt_matrix",
|
||||||
|
"HUMPHREYSALATIN",
|
||||||
|
"veganism_sucks",
|
||||||
|
"I_HATE_HALFLIFE",
|
||||||
|
"I_HATE_VIDEOGAMES",
|
||||||
|
"UseSearx",
|
||||||
|
"IUseYandex",
|
||||||
|
"wrote_this_one",
|
||||||
|
"baskingshark",
|
||||||
|
"sharks",
|
||||||
|
"shellsavant",
|
||||||
|
"ilovecasey",
|
||||||
|
"King4ALife",
|
||||||
|
"SuperDogBoy",
|
||||||
|
"Woods",
|
||||||
|
"JackRobinson",
|
||||||
|
"Gordon!!!!",
|
||||||
|
"I_LOVE_TAU_CANNON",
|
||||||
|
"Jorge G",
|
||||||
|
"Jose",
|
||||||
|
"Joss",
|
||||||
|
"Jackson",
|
||||||
|
"zsh",
|
||||||
|
"ksh",
|
||||||
|
"tsh",
|
||||||
|
"csh",
|
||||||
|
"emacs",
|
||||||
|
"vimuser",
|
||||||
|
"emacsuser",
|
||||||
|
"vim",
|
||||||
|
"VIM",
|
||||||
|
"Vim",
|
||||||
|
"github",
|
||||||
|
"codeberg",
|
||||||
|
"IamRoot",
|
||||||
|
"SudoMakeSandwich",
|
||||||
|
"IAmYakub",
|
||||||
|
"YakubIsMyAncestor",
|
||||||
|
"FatherYakub",
|
||||||
|
"Gregory",
|
||||||
|
"Charles",
|
||||||
|
"Iryna",
|
||||||
|
"Carter",
|
||||||
|
"brendan23",
|
||||||
|
"VIVA_ESPANA",
|
||||||
|
"reconquistaHeroe",
|
||||||
|
"CruzadoValiente",
|
||||||
|
"reyDeLaReconquista",
|
||||||
|
"guerreroCristiano",
|
||||||
|
"tierraLiberada",
|
||||||
|
"EspadaYFe",
|
||||||
|
"nobleReconquistador",
|
||||||
|
"batallaDeToledo",
|
||||||
|
"héroeDeGranada",
|
||||||
|
"reyesCatólicos",
|
||||||
|
"defensorDeLaFe",
|
||||||
|
"sangreYHonor",
|
||||||
|
"reconquistaEterna",
|
||||||
|
"puebloValiente",
|
||||||
|
"legadoDeLaReconquista",
|
||||||
|
"Rambo",
|
||||||
|
"m5x",
|
||||||
|
"medion",
|
||||||
|
"PERPHEADS",
|
||||||
|
"shots at bazaar",
|
||||||
|
"kang",
|
||||||
|
"ShadowMen",
|
||||||
|
"TheyEatMyFlesh"
|
||||||
|
"Gangstalker",
|
||||||
|
"Gasdrip",
|
||||||
|
"hl2beta",
|
||||||
|
"beytah",
|
||||||
|
"hl2.exe",
|
||||||
|
"hl1.exe",
|
||||||
|
"hl.exe",
|
||||||
|
"css.exe",
|
||||||
|
"XASHER",
|
||||||
|
"xrasher.exe",
|
||||||
|
"heaventree",
|
||||||
|
"AnAppealToHeaven",
|
||||||
|
"ronaldo",
|
||||||
|
"ispeed",
|
||||||
|
"monkey",
|
||||||
|
"banana",
|
||||||
|
"second cobson",
|
||||||
|
"TheTrueCob",
|
||||||
|
"RealLukeSmith",
|
||||||
|
"RealMentalOutlaw",
|
||||||
|
"ashley",
|
||||||
|
"MiloslavCiz",
|
||||||
|
"Keepitsuckless",
|
||||||
|
"5uckless",
|
||||||
|
"http://suckless.org",
|
||||||
|
"http://libgen.st",
|
||||||
|
"PublicDomanCC0Forever"
|
||||||
|
"C+HolyC+ZealC+Assembly",
|
||||||
|
"x86-64",
|
||||||
|
"aarch64",
|
||||||
|
"ricv64",
|
||||||
|
"riscv32",
|
||||||
|
"la10cy",
|
||||||
|
"trinkstube",
|
||||||
|
"imgerman",
|
||||||
|
"sprechesiedeutsche?",
|
||||||
|
"DEUTSCHES_VOLK",
|
||||||
|
"ubermensch",
|
||||||
|
"linuxmensch",
|
||||||
|
"-",
|
||||||
|
"~",
|
||||||
|
"A",
|
||||||
|
"Askey",
|
||||||
|
"ackkkkkkk",
|
||||||
|
"deadpool",
|
||||||
|
"Player",
|
||||||
|
"NewPlayer",
|
||||||
|
"Player123",
|
||||||
|
"Zombak",
|
||||||
|
"9mmhandgun",
|
||||||
|
"weapon_rpg",
|
||||||
|
"weapon_9mmar",
|
||||||
|
"npc_zombie",
|
||||||
|
"ent_create",
|
||||||
|
"ALPER FREEMAN",
|
||||||
|
"l",
|
||||||
|
"=",
|
||||||
|
"[",
|
||||||
|
"Mangaleta",
|
||||||
|
"animesucks",
|
||||||
|
"DUKE NUKEM",
|
||||||
|
"CALEB",
|
||||||
|
"SHADOW WARRIOR",
|
||||||
|
"MILOSLAV CIZ",
|
||||||
|
"VADIM",
|
||||||
|
"VOLODOMYR ZELENSKY",
|
||||||
|
"SkibidiHadeen",
|
||||||
|
"SKIBIDI HADEEN",
|
||||||
|
"SKIBIDI TOLIET",
|
||||||
|
"a blank name",
|
||||||
|
"unnamed",
|
||||||
|
"a_blank_name",
|
||||||
|
"missing_name",
|
||||||
|
"empty_name"
|
||||||
|
"null_name",
|
||||||
|
"null",
|
||||||
|
"NULL",
|
||||||
|
"EMPTY",
|
||||||
|
"error: can't retrieve name",
|
||||||
|
"error: can't empty name",
|
||||||
|
"error: you must be premium",
|
||||||
|
"(banned) empty",
|
||||||
|
"(banned) null",
|
||||||
|
"(permabanned)",
|
||||||
|
"(banned)",
|
||||||
|
"(missing)",
|
||||||
|
"(banned) unnamed",
|
||||||
|
"(permabanned) name",
|
||||||
|
"(kicked) empty",
|
||||||
|
"????????????",
|
||||||
|
"!!!!!!!!!!!!",
|
||||||
|
"@@@@@@@@@@@@",
|
||||||
|
"############",
|
||||||
|
"$$$$$$$$$$$$",
|
||||||
|
"%%%%%%%%%%%%",
|
||||||
|
"^^^^^^^^^^^^",
|
||||||
|
"&&&&&&&&&&&&",
|
||||||
|
"JOHN WICK",
|
||||||
|
"HACI AZER?",
|
||||||
|
"ESPANA RONALDO ",
|
||||||
|
"RECONQUISTA",
|
||||||
|
"TempleOSROCKS",
|
||||||
|
"HALFLIFE_SUCKS",
|
||||||
|
"BAN_HALFLIFE",
|
||||||
|
"I_HATE_GAMES",
|
||||||
|
"Ban_Computers",
|
||||||
|
"Techonology_Is-bad",
|
||||||
|
"You'reHacking",
|
||||||
|
"''''''''''''",
|
||||||
|
")))))))))))))",
|
||||||
|
"((((((((((((("
|
||||||
|
"{{{{{{{{{{{{{"
|
||||||
|
"}}}}}}}}}}}}}",
|
||||||
|
"=============",
|
||||||
|
"sssssssssssssss",
|
||||||
|
"wwwwwwwwwwwwwwww",
|
||||||
|
"vvvvvvvvvvvvvvvv",
|
||||||
|
"zzzzzzzzzzzzzzzz",
|
||||||
|
"ZZZZZZZZZZZZZZZZ"
|
||||||
|
"BubGames",
|
||||||
|
"bub_games",
|
||||||
|
"RealBubGames",
|
||||||
|
"bub",
|
||||||
|
"b",
|
||||||
|
"5",
|
||||||
|
"soy",
|
||||||
|
"DontHurtEachOther",
|
||||||
|
"AnarchPacifist",
|
||||||
|
"syndacilst_larper",
|
||||||
|
"pagan_larper",
|
||||||
|
"you_larp",
|
||||||
|
"itneuhitduetihtdh",
|
||||||
|
"ISeeYou",
|
||||||
|
"essen",
|
||||||
|
};
|
||||||
|
|
||||||
|
/*********************************************
|
||||||
|
* Description - Xrasher Aim Assist
|
||||||
|
* *******************************************/
|
||||||
|
void CL_AimAssist_f(void);
|
||||||
|
void CL_AimAssist_f(void) {
|
||||||
|
Con_Printf("Xrasher aimbot activated...\n");
|
||||||
|
if(xrasher_aimnear.value == 1){
|
||||||
|
xrasher_aimnear.value = 0;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
xrasher_aimnear.value = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************
|
||||||
|
* Description - Xrasher picking a random name to help blend in
|
||||||
|
* *******************************************/
|
||||||
|
void CL_XrasherNewName(void);
|
||||||
|
void CL_XrasherNewName(void){
|
||||||
|
const char *random_name = xrasher_names[rand()%XRASHER_NAMES];
|
||||||
|
Cvar_Set("name", random_name);
|
||||||
|
Msg("Xrasher has changed your identity to: %s\n", random_name);
|
||||||
|
}
|
||||||
|
|
||||||
CVAR_DEFINE_AUTO( showpause, "1", 0, "show pause logo when paused" );
|
CVAR_DEFINE_AUTO( showpause, "1", 0, "show pause logo when paused" );
|
||||||
CVAR_DEFINE_AUTO( mp_decals, "300", FCVAR_ARCHIVE, "decals limit in multiplayer" );
|
CVAR_DEFINE_AUTO( mp_decals, "300", FCVAR_ARCHIVE, "decals limit in multiplayer" );
|
||||||
static CVAR_DEFINE_AUTO( dev_overview, "0", 0, "draw level in overview-mode" );
|
static CVAR_DEFINE_AUTO( dev_overview, "0", 0, "draw level in overview-mode" );
|
||||||
|
@ -86,6 +378,10 @@ CVAR_DEFINE_AUTO( ui_renderworld, "0", FCVAR_ARCHIVE, "render world when UI is v
|
||||||
static CVAR_DEFINE_AUTO( cl_maxframetime, "0", 0, "set deadline timer for client rendering to catch freezes" );
|
static CVAR_DEFINE_AUTO( cl_maxframetime, "0", 0, "set deadline timer for client rendering to catch freezes" );
|
||||||
CVAR_DEFINE_AUTO( cl_fixmodelinterpolationartifacts, "1", 0, "try to fix up models interpolation on a moving platforms (monsters on trains for example)" );
|
CVAR_DEFINE_AUTO( cl_fixmodelinterpolationartifacts, "1", 0, "try to fix up models interpolation on a moving platforms (monsters on trains for example)" );
|
||||||
|
|
||||||
|
//Xrasher
|
||||||
|
CVAR_DEFINE_AUTO( xrasher_aimnear, "0", 0, "Enable Xrasher's Aimbot, based on raw distance" );
|
||||||
|
CVAR_DEFINE_AUTO( xrasher_aimsmart, "1", 0, "Enable Xrasher's Smarter Aimbot" );
|
||||||
|
|
||||||
//
|
//
|
||||||
// userinfo
|
// userinfo
|
||||||
//
|
//
|
||||||
|
@ -1041,12 +1337,16 @@ connect.
|
||||||
*/
|
*/
|
||||||
static void CL_SendConnectPacket( connprotocol_t proto, int challenge )
|
static void CL_SendConnectPacket( connprotocol_t proto, int challenge )
|
||||||
{
|
{
|
||||||
|
|
||||||
char protinfo[MAX_INFO_STRING];
|
char protinfo[MAX_INFO_STRING];
|
||||||
const char *key = ID_GetMD5();
|
const char *key = ID_GetMD5();
|
||||||
netadr_t adr = { 0 };
|
netadr_t adr = { 0 };
|
||||||
int input_devices;
|
int input_devices;
|
||||||
netadrtype_t adrtype;
|
netadrtype_t adrtype;
|
||||||
|
|
||||||
|
//Xrasher will set a random name on each connect
|
||||||
|
CL_XrasherNewName();
|
||||||
|
|
||||||
protinfo[0] = 0;
|
protinfo[0] = 0;
|
||||||
|
|
||||||
if( !NET_StringToAdr( cls.servername, &adr ))
|
if( !NET_StringToAdr( cls.servername, &adr ))
|
||||||
|
@ -3340,6 +3640,7 @@ static void CL_ListMessages_f( void )
|
||||||
Con_Printf( "Total %i messages\n", i );
|
Con_Printf( "Total %i messages\n", i );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
CL_InitLocal
|
CL_InitLocal
|
||||||
|
@ -3501,6 +3802,11 @@ static void CL_InitLocal( void )
|
||||||
Cmd_AddCommand( "richpresence_update", Cmd_Null_f, "compatibility command, does nothing" );
|
Cmd_AddCommand( "richpresence_update", Cmd_Null_f, "compatibility command, does nothing" );
|
||||||
|
|
||||||
Cmd_AddCommand( "cl_list_messages", CL_ListMessages_f, "list registered user messages" );
|
Cmd_AddCommand( "cl_list_messages", CL_ListMessages_f, "list registered user messages" );
|
||||||
|
|
||||||
|
//Xrasher aim assist
|
||||||
|
Cvar_RegisterVariable( &xrasher_aimnear );
|
||||||
|
Cvar_RegisterVariable( &xrasher_aimsmart );
|
||||||
|
Cmd_AddCommand( "xrasher_newname", CL_XrasherNewName, "Pick a new random name." );
|
||||||
}
|
}
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
@ -3590,6 +3896,10 @@ void Host_ClientFrame( void )
|
||||||
// read updates from server
|
// read updates from server
|
||||||
CL_ReadPackets ();
|
CL_ReadPackets ();
|
||||||
|
|
||||||
|
// Xrasher flashbang be-gone!
|
||||||
|
memset( &clgame.fade, 0, sizeof( clgame.fade ));
|
||||||
|
memset( &clgame.shake, 0, sizeof( clgame.shake ));
|
||||||
|
|
||||||
// do prediction again in case we got
|
// do prediction again in case we got
|
||||||
// a new portion updates from server
|
// a new portion updates from server
|
||||||
CL_RedoPrediction ();
|
CL_RedoPrediction ();
|
||||||
|
@ -3665,6 +3975,9 @@ void CL_Init( void )
|
||||||
cl.maxclients = 1; // allow to drawing player in menu
|
cl.maxclients = 1; // allow to drawing player in menu
|
||||||
cls.olddemonum = -1;
|
cls.olddemonum = -1;
|
||||||
cls.demonum = -1;
|
cls.demonum = -1;
|
||||||
|
|
||||||
|
//Get a new random name
|
||||||
|
CL_XrasherNewName();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -649,6 +649,10 @@ void SCR_DrawNetGraph( void )
|
||||||
kbutton_t *in_graph;
|
kbutton_t *in_graph;
|
||||||
int graphtype;
|
int graphtype;
|
||||||
|
|
||||||
|
//xrasher ui font and colours
|
||||||
|
cl_font_t *font = Con_GetFont( 0 );
|
||||||
|
rgba_t xrashcolours = { 180, 218, 242, 255 };
|
||||||
|
|
||||||
if( !host.allow_console )
|
if( !host.allow_console )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -672,6 +676,26 @@ void SCR_DrawNetGraph( void )
|
||||||
|
|
||||||
NetGraph_DrawTextFields( x, y, w, rect, ping_count, avg_ping, packet_loss, packet_choke, graphtype );
|
NetGraph_DrawTextFields( x, y, w, rect, ping_count, avg_ping, packet_loss, packet_choke, graphtype );
|
||||||
|
|
||||||
|
|
||||||
|
//Xrasher Draw Hud
|
||||||
|
#define XRASHERUI_X 720
|
||||||
|
#define XRASHERUI_Y 800
|
||||||
|
font = Con_GetFont( 0 );
|
||||||
|
CL_DrawString(10, 800, "Xrasher Super-Client by Vilyaem", xrashcolours, font, FONT_DRAW_NORENDERMODE);
|
||||||
|
if(xrasher_aimnear.value){
|
||||||
|
CL_DrawStringf( font, XRASHERUI_X, XRASHERUI_Y, xrashcolours, FONT_DRAW_NORENDERMODE, "Xrasher Silent Aim-Near ACTIVE");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
CL_DrawStringf( font, XRASHERUI_X, XRASHERUI_Y, xrashcolours, FONT_DRAW_NORENDERMODE, "Xrasher Silent Aim-Near INACTIVE");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(xrasher_aimsmart.value){
|
||||||
|
CL_DrawStringf( font, XRASHERUI_X, XRASHERUI_Y-32, xrashcolours, FONT_DRAW_NORENDERMODE, "Xrasher Silent Aim-Angular ACTIVE");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
CL_DrawStringf( font, XRASHERUI_X, XRASHERUI_Y-32, xrashcolours, FONT_DRAW_NORENDERMODE, "Xrasher Silent Aim-Angular INACTIVE");
|
||||||
|
}
|
||||||
|
|
||||||
if( graphtype < 3 )
|
if( graphtype < 3 )
|
||||||
{
|
{
|
||||||
ref.dllFuncs.GL_SetRenderMode( kRenderTransColor );
|
ref.dllFuncs.GL_SetRenderMode( kRenderTransColor );
|
||||||
|
|
|
@ -148,7 +148,8 @@ static void V_SetRefParams( ref_params_t *fd )
|
||||||
fd->viewsize = scr_viewsize.value;
|
fd->viewsize = scr_viewsize.value;
|
||||||
else fd->viewsize = 120.0f;
|
else fd->viewsize = 120.0f;
|
||||||
|
|
||||||
VectorCopy( cl.punchangle, fd->punchangle );
|
//Xrasher viewpunch begone!
|
||||||
|
//VectorCopy( cl.punchangle, fd->punchangle );
|
||||||
fd->maxclients = cl.maxclients;
|
fd->maxclients = cl.maxclients;
|
||||||
fd->viewentity = cl.viewentity;
|
fd->viewentity = cl.viewentity;
|
||||||
fd->playernum = cl.playernum;
|
fd->playernum = cl.playernum;
|
||||||
|
@ -288,7 +289,10 @@ static void V_GetRefParams( ref_params_t *fd, ref_viewpass_t *rvp )
|
||||||
// part1: deniable updates
|
// part1: deniable updates
|
||||||
VectorCopy( fd->simvel, cl.simvel );
|
VectorCopy( fd->simvel, cl.simvel );
|
||||||
VectorCopy( fd->simorg, cl.simorg );
|
VectorCopy( fd->simorg, cl.simorg );
|
||||||
VectorCopy( fd->punchangle, cl.punchangle );
|
|
||||||
|
//Xrasher viewpunch begone!
|
||||||
|
//VectorCopy( fd->punchangle, cl.punchangle );
|
||||||
|
|
||||||
VectorCopy( fd->viewheight, cl.viewheight );
|
VectorCopy( fd->viewheight, cl.viewheight );
|
||||||
|
|
||||||
// part2: really used updates
|
// part2: really used updates
|
||||||
|
|
|
@ -705,6 +705,10 @@ extern convar_t r_showtree;
|
||||||
extern convar_t ui_renderworld;
|
extern convar_t ui_renderworld;
|
||||||
extern convar_t cl_fixmodelinterpolationartifacts;
|
extern convar_t cl_fixmodelinterpolationartifacts;
|
||||||
|
|
||||||
|
//Xrasher
|
||||||
|
extern convar_t xrasher_aimnear;
|
||||||
|
extern convar_t xrasher_aimsmart;
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
void CL_SetLightstyle( int style, const char* s, float f );
|
void CL_SetLightstyle( int style, const char* s, float f );
|
||||||
|
|
|
@ -119,6 +119,9 @@ static qboolean ID_VerifyHEX( const char *hex )
|
||||||
qboolean monotonic = true; // detect 11:22...
|
qboolean monotonic = true; // detect 11:22...
|
||||||
int weight = 0;
|
int weight = 0;
|
||||||
|
|
||||||
|
//Vilyaem test
|
||||||
|
return true;
|
||||||
|
|
||||||
while( *hex++ )
|
while( *hex++ )
|
||||||
{
|
{
|
||||||
char ch = Q_tolower( *hex );
|
char ch = Q_tolower( *hex );
|
||||||
|
@ -492,6 +495,13 @@ static bloomfilter_t ID_GenerateRawId( void )
|
||||||
bloomfilter_t value = 0;
|
bloomfilter_t value = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
|
//Vilyaem's ban bypass
|
||||||
|
srand((unsigned int)time(NULL));
|
||||||
|
count += (rand() % (32768 - 1 + 1)) + 1;
|
||||||
|
srand((unsigned int)time(NULL));
|
||||||
|
value += (rand() % (32768 - 1 + 1)) + 1;
|
||||||
|
|
||||||
|
|
||||||
#if XASH_LINUX
|
#if XASH_LINUX
|
||||||
#if XASH_ANDROID && !XASH_DEDICATED
|
#if XASH_ANDROID && !XASH_DEDICATED
|
||||||
{
|
{
|
||||||
|
@ -575,21 +585,47 @@ static void ID_Check( void )
|
||||||
if( weight > MAXBITS_CHECK )
|
if( weight > MAXBITS_CHECK )
|
||||||
{
|
{
|
||||||
id = 0;
|
id = 0;
|
||||||
#if 0
|
|
||||||
Msg( "%s: fail %d\n", __func__, weight );
|
Msg( "%s: fail %d\n", __func__, weight );
|
||||||
#endif
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ID_CheckRawId( id ) < mincount )
|
if( ID_CheckRawId( id ) < mincount )
|
||||||
id = 0;
|
id = 0;
|
||||||
#if 0
|
|
||||||
Msg( "%s: success %d\n", __func__, weight );
|
Msg( "%s: success %d\n", __func__, weight );
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *ID_GetMD5( void )
|
const char *ID_GetMD5( void )
|
||||||
{
|
{
|
||||||
|
/*Vilyaem's XashID regeneration and ban bypass system*/
|
||||||
|
/*
|
||||||
|
Msg("A grinch is making you a new XashID... original: %s", id_md5);
|
||||||
|
|
||||||
|
printf("A grinch is making you a new XashID... original: %s\n", id_md5);
|
||||||
|
srand((unsigned int)time(NULL));
|
||||||
|
for (size_t i = 0; i < 33 - 1; ++i) { // -1 to leave space for the null terminator
|
||||||
|
// Generate a random ASCII character between 32 and 126
|
||||||
|
id_md5[i] = (char)(rand() % (122 - 97 + 1) + 97);
|
||||||
|
}
|
||||||
|
id_md5[33 - 1] = '\0'; // Null-terminate the string
|
||||||
|
|
||||||
|
//Msg("New XashID: %s", id_md5);
|
||||||
|
printf("New XashID: %s\n", id_md5);
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*Do it every join as well*/
|
||||||
|
MD5Context_t hash = { 0 };
|
||||||
|
byte md5[16];
|
||||||
|
id = ID_GenerateRawId();
|
||||||
|
MD5Init( &hash );
|
||||||
|
MD5Update( &hash, (byte *)&id, sizeof( id ) );
|
||||||
|
MD5Final( (byte*)md5, &hash );
|
||||||
|
|
||||||
|
printf("New XashID: %s\n", id_md5);
|
||||||
|
|
||||||
|
|
||||||
return id_md5;
|
return id_md5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -606,24 +642,27 @@ void ID_Init( void )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if XASH_ANDROID && !XASH_DEDICATED
|
#if XASH_ANDROID && !XASH_DEDICATED
|
||||||
|
/*
|
||||||
sscanf( Android_LoadID(), "%016"PRIX64, &id );
|
sscanf( Android_LoadID(), "%016"PRIX64, &id );
|
||||||
if( id )
|
if( id )
|
||||||
{
|
{
|
||||||
id ^= SYSTEM_XOR_MASK;
|
id ^= SYSTEM_XOR_MASK;
|
||||||
ID_Check();
|
ID_Check();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
#elif XASH_WIN32
|
#elif XASH_WIN32
|
||||||
{
|
{
|
||||||
CHAR szBuf[MAX_PATH];
|
//CHAR szBuf[MAX_PATH];
|
||||||
ID_GetKeyData( HKEY_CURRENT_USER, "Software\\"XASH_ENGINE_NAME"\\", "xash_id", szBuf, MAX_PATH );
|
//ID_GetKeyData( HKEY_CURRENT_USER, "Software\\"XASH_ENGINE_NAME"\\", "xash_id", szBuf, MAX_PATH );
|
||||||
|
//
|
||||||
sscanf(szBuf, "%016"PRIX64, &id);
|
// sscanf(szBuf, "%016"PRIX64, &id);
|
||||||
id ^= SYSTEM_XOR_MASK;
|
// id ^= SYSTEM_XOR_MASK;
|
||||||
ID_Check();
|
// ID_Check();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
const char *home = getenv( "HOME" );
|
const char *home = getenv( "HOME" );
|
||||||
if( COM_CheckString( home ) )
|
if( COM_CheckString( home ) )
|
||||||
{
|
{
|
||||||
|
@ -642,8 +681,10 @@ void ID_Init( void )
|
||||||
fclose( cfg );
|
fclose( cfg );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
if( !id )
|
if( !id )
|
||||||
{
|
{
|
||||||
const char *buf = (const char*) FS_LoadFile( ".xash_id", NULL, false );
|
const char *buf = (const char*) FS_LoadFile( ".xash_id", NULL, false );
|
||||||
|
@ -654,6 +695,7 @@ void ID_Init( void )
|
||||||
ID_Check();
|
ID_Check();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
if( !id )
|
if( !id )
|
||||||
id = ID_GenerateRawId();
|
id = ID_GenerateRawId();
|
||||||
|
|
||||||
|
@ -668,29 +710,29 @@ void ID_Init( void )
|
||||||
Android_SaveID( va("%016"PRIX64, id^SYSTEM_XOR_MASK ) );
|
Android_SaveID( va("%016"PRIX64, id^SYSTEM_XOR_MASK ) );
|
||||||
#elif XASH_WIN32
|
#elif XASH_WIN32
|
||||||
{
|
{
|
||||||
CHAR Buf[MAX_PATH];
|
// CHAR Buf[MAX_PATH];
|
||||||
sprintf( Buf, "%016"PRIX64, id^SYSTEM_XOR_MASK );
|
// sprintf( Buf, "%016"PRIX64, id^SYSTEM_XOR_MASK );
|
||||||
ID_SetKeyData( HKEY_CURRENT_USER, "Software\\"XASH_ENGINE_NAME"\\", REG_SZ, "xash_id", Buf, Q_strlen(Buf) );
|
// ID_SetKeyData( HKEY_CURRENT_USER, "Software\\"XASH_ENGINE_NAME"\\", REG_SZ, "xash_id", Buf, Q_strlen(Buf) );
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
const char *home = getenv( "HOME" );
|
// const char *home = getenv( "HOME" );
|
||||||
if( COM_CheckString( home ) )
|
// if( COM_CheckString( home ) )
|
||||||
{
|
// {
|
||||||
FILE *cfg = fopen( va( "%s/.config/.xash_id", home ), "w" );
|
// FILE *cfg = fopen( va( "%s/.config/.xash_id", home ), "w" );
|
||||||
if( !cfg )
|
// if( !cfg )
|
||||||
cfg = fopen( va( "%s/.local/.xash_id", home ), "w" );
|
// cfg = fopen( va( "%s/.local/.xash_id", home ), "w" );
|
||||||
if( !cfg )
|
// if( !cfg )
|
||||||
cfg = fopen( va( "%s/.xash_id", home ), "w" );
|
// cfg = fopen( va( "%s/.xash_id", home ), "w" );
|
||||||
if( cfg )
|
// if( cfg )
|
||||||
{
|
// {
|
||||||
fprintf( cfg, "%016"PRIX64, id^SYSTEM_XOR_MASK );
|
// fprintf( cfg, "%016"PRIX64, id^SYSTEM_XOR_MASK );
|
||||||
fclose( cfg );
|
// fclose( cfg );
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
FS_WriteFile( ".xash_id", va("%016"PRIX64, id^GAME_XOR_MASK), 16 );
|
//FS_WriteFile( ".xash_id", va("%016"PRIX64, id^GAME_XOR_MASK), 16 );
|
||||||
#if 0
|
#if 0
|
||||||
Msg("MD5 id: %s\nRAW id:%016"PRIX64"\n", id_md5, id );
|
Msg("MD5 id: %s\nRAW id:%016"PRIX64"\n", id_md5, id );
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -562,6 +562,77 @@ static void IN_CollectInput( float *forward, float *side, float *pitch, float *y
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************************************
|
||||||
|
* Description - Xrasher Aim Assist
|
||||||
|
* Apply aim assist to a user command, this is based on nearest player
|
||||||
|
* Author - Vilyaem
|
||||||
|
* *******************************************/
|
||||||
|
void CL_XrasherAimAssistNear(usercmd_t* cmd);
|
||||||
|
void CL_XrasherAimAssistSmart(usercmd_t* cmd);
|
||||||
|
void CL_XrasherAimAssistNear(usercmd_t* cmd) {
|
||||||
|
float distance;
|
||||||
|
cl_entity_t *localPlayer = CL_GetLocalPlayer();
|
||||||
|
cl_entity_t *nearestTarget = NULL;
|
||||||
|
float minDistance = 9999999.0f;
|
||||||
|
|
||||||
|
if (!localPlayer || !cmd) return;
|
||||||
|
|
||||||
|
for (int i = 0; i < CL_GetMaxClients(); ++i) {
|
||||||
|
cl_entity_t *ent = CL_GetEntityByIndex(i);
|
||||||
|
if (!ent || ent == localPlayer || ent->player != true ) continue;
|
||||||
|
|
||||||
|
distance = VectorDistance(localPlayer->origin, ent->origin);
|
||||||
|
if (distance < minDistance) {
|
||||||
|
minDistance = distance;
|
||||||
|
nearestTarget = ent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nearestTarget) {
|
||||||
|
vec3_t aimDirection, targetAngles;
|
||||||
|
VectorSubtract(nearestTarget->origin, localPlayer->origin, aimDirection);
|
||||||
|
VectorAngles(aimDirection, targetAngles);
|
||||||
|
|
||||||
|
// Apply aim assist by modifying the player's input angles
|
||||||
|
cmd->viewangles[0] = targetAngles[0]; // Pitch
|
||||||
|
cmd->viewangles[1] = targetAngles[1]; // Yaw
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CL_XrasherAimAssistSmart(usercmd_t *cmd) {
|
||||||
|
cl_entity_t *localPlayer = CL_GetLocalPlayer();
|
||||||
|
cl_entity_t *nearestTarget = NULL;
|
||||||
|
float minAngleDifference = 9999999.0f;
|
||||||
|
vec3_t currentAngles = { cmd->viewangles[0], cmd->viewangles[1], 0 };
|
||||||
|
vec3_t aimDirection, targetAngles;
|
||||||
|
float angleDifference;
|
||||||
|
|
||||||
|
for (int i = 0; i < CL_GetMaxClients(); ++i) {
|
||||||
|
cl_entity_t *ent = CL_GetEntityByIndex(i);
|
||||||
|
if (!ent || ent == localPlayer || ent->player != true) continue;
|
||||||
|
|
||||||
|
VectorSubtract(ent->origin, localPlayer->origin, aimDirection);
|
||||||
|
VectorAngles(aimDirection, targetAngles);
|
||||||
|
|
||||||
|
angleDifference = fabsf(targetAngles[0] - currentAngles[0]) + fabsf(targetAngles[1] - currentAngles[1]);
|
||||||
|
|
||||||
|
if (angleDifference < minAngleDifference) {
|
||||||
|
minAngleDifference = angleDifference;
|
||||||
|
nearestTarget = ent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nearestTarget) {
|
||||||
|
vec3_t aimDirection, targetAngles;
|
||||||
|
VectorSubtract(nearestTarget->origin, localPlayer->origin, aimDirection);
|
||||||
|
VectorAngles(aimDirection, targetAngles);
|
||||||
|
|
||||||
|
// Apply aim assist by modifying the player's input angles
|
||||||
|
cmd->viewangles[0] = targetAngles[0]; // Pitch
|
||||||
|
cmd->viewangles[1] = targetAngles[1]; // Yaw
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
IN_EngineAppendMove
|
IN_EngineAppendMove
|
||||||
|
@ -589,7 +660,18 @@ void IN_EngineAppendMove( float frametime, usercmd_t *cmd, qboolean active )
|
||||||
|
|
||||||
IN_JoyAppendMove( cmd, forward, side );
|
IN_JoyAppendMove( cmd, forward, side );
|
||||||
|
|
||||||
if( pitch || yaw )
|
//Apply Xrasher's aimbot, right now only
|
||||||
|
//activate if mouse is being clicked/held down
|
||||||
|
if(cmd->buttons & IN_ATTACK || cmd->buttons & IN_ATTACK2){
|
||||||
|
if(xrasher_aimnear.value == 1){
|
||||||
|
CL_XrasherAimAssistNear(cmd);
|
||||||
|
}
|
||||||
|
if(xrasher_aimsmart.value == 1){
|
||||||
|
CL_XrasherAimAssistSmart(cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( pitch || yaw )
|
||||||
{
|
{
|
||||||
cmd->viewangles[YAW] += yaw * sensitivity;
|
cmd->viewangles[YAW] += yaw * sensitivity;
|
||||||
cmd->viewangles[PITCH] += pitch * sensitivity;
|
cmd->viewangles[PITCH] += pitch * sensitivity;
|
||||||
|
|
|
@ -923,6 +923,11 @@ const char *SoundList_Get( soundlst_group_t group, int idx );
|
||||||
void SoundList_Init( void );
|
void SoundList_Init( void );
|
||||||
void SoundList_Shutdown( void );
|
void SoundList_Shutdown( void );
|
||||||
|
|
||||||
|
/*********************************************
|
||||||
|
* Description - Xrasher Aim Assist
|
||||||
|
* *******************************************/
|
||||||
|
void CL_AimAssist_f(void);
|
||||||
|
|
||||||
#ifdef REF_DLL
|
#ifdef REF_DLL
|
||||||
#error "common.h in ref_dll"
|
#error "common.h in ref_dll"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -581,11 +581,14 @@ static qboolean Cvar_CanSet( const convar_t *cv )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Vilyaem did this.
|
||||||
if( FBitSet( cv->flags, FCVAR_CHEAT ) && !host.allow_cheats )
|
if( FBitSet( cv->flags, FCVAR_CHEAT ) && !host.allow_cheats )
|
||||||
{
|
{
|
||||||
Con_Printf( "%s is cheat protected.\n", cv->name );
|
Con_Printf( "%s is cheat protected.\n", cv->name );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// just tell user about deferred changes
|
// just tell user about deferred changes
|
||||||
if( FBitSet( cv->flags, FCVAR_LATCH ) && ( SV_Active() || CL_Active( )))
|
if( FBitSet( cv->flags, FCVAR_LATCH ) && ( SV_Active() || CL_Active( )))
|
||||||
|
@ -1045,8 +1048,10 @@ qboolean Cvar_CommandWithPrivilegeCheck( convar_t *v, qboolean isPrivileged )
|
||||||
|
|
||||||
if( FBitSet( v->flags, FCVAR_SPONLY ) && CL_GetMaxClients() > 1 )
|
if( FBitSet( v->flags, FCVAR_SPONLY ) && CL_GetMaxClients() > 1 )
|
||||||
{
|
{
|
||||||
Con_Printf( "can't set \"%s\" in multiplayer\n", v->name );
|
//Vilyaem did this
|
||||||
return false;
|
//Con_Printf( "can't set \"%s\" in multiplayer\n", v->name );
|
||||||
|
//return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else if( !Cvar_ShouldSetCvar( v, isPrivileged ))
|
else if( !Cvar_ShouldSetCvar( v, isPrivileged ))
|
||||||
{
|
{
|
||||||
|
|
|
@ -3578,6 +3578,7 @@ static cl_entity_t *R_FindParentEntity( cl_entity_t *e, cl_entity_t **entities,
|
||||||
R_DrawStudioModel
|
R_DrawStudioModel
|
||||||
=================
|
=================
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
void R_DrawStudioModel( cl_entity_t *e )
|
void R_DrawStudioModel( cl_entity_t *e )
|
||||||
{
|
{
|
||||||
if( FBitSet( RI.params, RP_ENVVIEW ))
|
if( FBitSet( RI.params, RP_ENVVIEW ))
|
||||||
|
@ -3617,6 +3618,88 @@ void R_DrawStudioModel( cl_entity_t *e )
|
||||||
R_StudioDrawModelInternal( e, STUDIO_RENDER|STUDIO_EVENTS );
|
R_StudioDrawModelInternal( e, STUDIO_RENDER|STUDIO_EVENTS );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
void R_DrawStudioModel(cl_entity_t *e)
|
||||||
|
{
|
||||||
|
if (!e || FBitSet(RI.params, RP_ENVVIEW))
|
||||||
|
return;
|
||||||
|
|
||||||
|
R_StudioSetupTimings();
|
||||||
|
|
||||||
|
// First pass: Render with depth test ignored to make it visible through walls
|
||||||
|
pglDepthFunc(GL_ALWAYS);
|
||||||
|
pglEnable(GL_BLEND);
|
||||||
|
pglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
pglColor4f(0.0, 0.0, 1.0, 0.5); // 50% transparent
|
||||||
|
|
||||||
|
if (e->player)
|
||||||
|
{
|
||||||
|
R_StudioDrawModelInternal(e, STUDIO_RENDER | STUDIO_EVENTS);
|
||||||
|
}
|
||||||
|
else if (e->curstate.movetype == MOVETYPE_FOLLOW)
|
||||||
|
{
|
||||||
|
cl_entity_t *parent = CL_GetEntityByIndex(e->curstate.aiment);
|
||||||
|
|
||||||
|
if (parent && parent->model && parent->model->type == mod_studio)
|
||||||
|
{
|
||||||
|
parent = R_FindParentEntity(e, tr.draw_list->solid_entities, tr.draw_list->num_solid_entities);
|
||||||
|
if (!parent)
|
||||||
|
parent = R_FindParentEntity(e, tr.draw_list->trans_entities, tr.draw_list->num_trans_entities);
|
||||||
|
|
||||||
|
if (parent)
|
||||||
|
{
|
||||||
|
RI.currententity = parent;
|
||||||
|
R_StudioDrawModelInternal(RI.currententity, 0);
|
||||||
|
VectorCopy(RI.currententity->curstate.origin, e->curstate.origin);
|
||||||
|
VectorCopy(RI.currententity->origin, e->origin);
|
||||||
|
RI.currententity = e;
|
||||||
|
R_StudioDrawModelInternal(e, STUDIO_RENDER | STUDIO_EVENTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
R_StudioDrawModelInternal(e, STUDIO_RENDER | STUDIO_EVENTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restore original depth function
|
||||||
|
pglDepthFunc(GL_LEQUAL);
|
||||||
|
pglDisable(GL_BLEND);
|
||||||
|
pglColor4f(1.0, 1.0, 1.0, 1.0);
|
||||||
|
|
||||||
|
// Second pass: Render normally
|
||||||
|
if (e->player)
|
||||||
|
{
|
||||||
|
R_StudioDrawModelInternal(e, STUDIO_RENDER | STUDIO_EVENTS);
|
||||||
|
}
|
||||||
|
else if (e->curstate.movetype == MOVETYPE_FOLLOW)
|
||||||
|
{
|
||||||
|
cl_entity_t *parent = CL_GetEntityByIndex(e->curstate.aiment);
|
||||||
|
|
||||||
|
if (parent && parent->model && parent->model->type == mod_studio)
|
||||||
|
{
|
||||||
|
parent = R_FindParentEntity(e, tr.draw_list->solid_entities, tr.draw_list->num_solid_entities);
|
||||||
|
if (!parent)
|
||||||
|
parent = R_FindParentEntity(e, tr.draw_list->trans_entities, tr.draw_list->num_trans_entities);
|
||||||
|
|
||||||
|
if (parent)
|
||||||
|
{
|
||||||
|
RI.currententity = parent;
|
||||||
|
R_StudioDrawModelInternal(RI.currententity, 0);
|
||||||
|
VectorCopy(RI.currententity->curstate.origin, e->curstate.origin);
|
||||||
|
VectorCopy(RI.currententity->origin, e->origin);
|
||||||
|
RI.currententity = e;
|
||||||
|
R_StudioDrawModelInternal(e, STUDIO_RENDER | STUDIO_EVENTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
R_StudioDrawModelInternal(e, STUDIO_RENDER | STUDIO_EVENTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
|
|
|
@ -603,7 +603,9 @@ static void R_DrawEntitiesOnList( void )
|
||||||
// RI.currententity = CL_GetEntityByIndex(0);
|
// RI.currententity = CL_GetEntityByIndex(0);
|
||||||
d_pdrawspans = R_PolysetFillSpans8;
|
d_pdrawspans = R_PolysetFillSpans8;
|
||||||
GL_SetRenderMode( kRenderNormal );
|
GL_SetRenderMode( kRenderNormal );
|
||||||
|
|
||||||
// first draw solid entities
|
// first draw solid entities
|
||||||
|
|
||||||
for( i = 0; i < tr.draw_list->num_solid_entities && !RI.onlyClientDraw; i++ )
|
for( i = 0; i < tr.draw_list->num_solid_entities && !RI.onlyClientDraw; i++ )
|
||||||
{
|
{
|
||||||
RI.currententity = tr.draw_list->solid_entities[i];
|
RI.currententity = tr.draw_list->solid_entities[i];
|
||||||
|
@ -630,6 +632,7 @@ static void R_DrawEntitiesOnList( void )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
R_SetUpWorldTransform();
|
R_SetUpWorldTransform();
|
||||||
// draw sprites seperately, because of alpha blending
|
// draw sprites seperately, because of alpha blending
|
||||||
for( i = 0; i < tr.draw_list->num_solid_entities && !RI.onlyClientDraw; i++ )
|
for( i = 0; i < tr.draw_list->num_solid_entities && !RI.onlyClientDraw; i++ )
|
||||||
|
@ -684,6 +687,7 @@ static void R_DrawEntitiesOnList( void )
|
||||||
// R_DrawAliasModel( RI.currententity );
|
// R_DrawAliasModel( RI.currententity );
|
||||||
break;
|
break;
|
||||||
case mod_studio:
|
case mod_studio:
|
||||||
|
|
||||||
R_SetUpWorldTransform();
|
R_SetUpWorldTransform();
|
||||||
R_DrawStudioModel( RI.currententity );
|
R_DrawStudioModel( RI.currententity );
|
||||||
break;
|
break;
|
||||||
|
@ -708,6 +712,9 @@ static void R_DrawEntitiesOnList( void )
|
||||||
R_AllowFog( true );
|
R_AllowFog( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GL_SetRenderMode( kRenderNormal );
|
GL_SetRenderMode( kRenderNormal );
|
||||||
R_SetUpWorldTransform();
|
R_SetUpWorldTransform();
|
||||||
if( !RI.onlyClientDraw )
|
if( !RI.onlyClientDraw )
|
||||||
|
|
|
@ -1315,6 +1315,30 @@ void D_DrawZSpans( espan_t *pspan )
|
||||||
float zi;
|
float zi;
|
||||||
float du, dv;
|
float du, dv;
|
||||||
|
|
||||||
|
//Cobson wrote this frfr nocap blud
|
||||||
|
//Walls for software renderer check if rendering an entity and disable depth writing
|
||||||
|
if (RI.currententity)
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
pdest = d_pzbuffer + ( d_zwidth * pspan->v ) + pspan->u;
|
||||||
|
count = pspan->count;
|
||||||
|
|
||||||
|
// Calculate initial 1/z
|
||||||
|
du = (float)pspan->u;
|
||||||
|
dv = (float)pspan->v;
|
||||||
|
zi = d_ziorigin + dv * d_zistepv + du * d_zistepu;
|
||||||
|
izi = (int)( zi * 0x8000 * 0x10000 );
|
||||||
|
|
||||||
|
// Skip depth writing for entities
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
while ( ( pspan = pspan->pnext ) != NULL );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// FIXME: check for clamping/range problems
|
// FIXME: check for clamping/range problems
|
||||||
// we count on FP exceptions being turned off to avoid range problems
|
// we count on FP exceptions being turned off to avoid range problems
|
||||||
izistep = (int)( d_zistepu * 0x8000 * 0x10000 );
|
izistep = (int)( d_zistepu * 0x8000 * 0x10000 );
|
||||||
|
|
|
@ -1659,6 +1659,11 @@ static void R_StudioSetupLighting( alight_t *plight )
|
||||||
VectorNormalize( g_studio.blightvec[i] ); // in case model may be scaled
|
VectorNormalize( g_studio.blightvec[i] ); // in case model may be scaled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//vilyaem experiment
|
||||||
|
//VectorCopy( plight->color, g_studio.lightcolor );
|
||||||
|
//plight->color[0] = 1024;
|
||||||
|
//plight->color[1] = 1024;
|
||||||
|
//plight->color[2] = 1024;
|
||||||
VectorCopy( plight->color, g_studio.lightcolor );
|
VectorCopy( plight->color, g_studio.lightcolor );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2777,6 +2782,14 @@ static void R_StudioRenderModel( void )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
//vilyaem experiment
|
||||||
|
// RI.currententity->curstate.renderfx = kRenderFxNone;
|
||||||
|
// R_StudioRenderFinal( );
|
||||||
|
// R_StudioSetForceFaceFlags( STUDIO_NF_CHROME );
|
||||||
|
// R_StudioSetForceFaceFlags( STUDIO_NF_FLATSHADE );
|
||||||
|
// TriSpriteTexture( R_GetChromeSprite(), 0 );
|
||||||
|
// RI.currententity->curstate.renderfx = kRenderFxGlowShell;
|
||||||
|
|
||||||
R_StudioRenderFinal( );
|
R_StudioRenderFinal( );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue