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" />
|
||||
[](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)
|
||||
# Xrasher
|
||||
|
||||
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
|
||||
[](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).
|
||||
* Complete Ban Bypass
|
||||
* Xrasher is completely immune to bans, yes seriously, if you get jannied on
|
||||
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
|
||||
* 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.
|
||||
* Wallhack
|
||||
* A perfect and natural wallhack, all relevant entities and players
|
||||
are visible through walls. A wallhack implementation is provided
|
||||
for both the GL renderer (recommended) and the software-renderer
|
||||
(sometimes glitchy).
|
||||
|
||||
## 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).
|
||||
* Silent Aimbot
|
||||
* Very simple and effective silent-aimbot.
|
||||
|
||||
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
|
||||
* 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.
|
||||
* Clientside cheats unlocked
|
||||
|
||||
## 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/).
|
||||
* "Multiplayer" protected commands unlocked
|
||||
|
||||
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
|
||||
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!
|
||||
* No flashing (flashbangs), visual viewpunch, or screenshake, your eyeballs are stoic
|
||||
|
||||
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.
|
||||
## Screenshots
|
||||
|
||||
#### 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.
|
||||
Half-Life Deathmatch, demonstrating wallhack, aimbot, fullbright hack, ui, etc.
|
||||

|
||||

|
||||
|
||||
#### 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`.
|
||||
Counter Strike 1.6, demonstrating wallhack, aimbot, fullbright hack, ui, etc.
|
||||

|
||||

|
||||

|
||||
|
||||
* 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`.
|
||||
## Setup
|
||||
|
||||
* 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
|
||||
* 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`.
|
||||
./xash3d -console
|
||||
|
||||
* 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`.
|
||||
Enable 'net\_graph' in console, Xrasher's ui is implemented inside. The smart
|
||||
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
|
||||
#### 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`.
|
||||
Since Xrasher has clientside cheats unlocked, you can do things such as
|
||||
enabling 'r\_fullbright 1', for complete visibility, or 'default\_fov 115' for
|
||||
a large field-of-view.
|
||||
|
||||
#### Linux
|
||||
If compiling 32-bit on amd64, make sure `PKG_CONFIG_PATH` from the previous step is set correctly, prior to running configure.
|
||||
Enjoy, and cleanse people's video game addictions.
|
||||
|
||||
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`.
|
||||
|
||||
## New Console Commands
|
||||
|
||||
* 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_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( mp_decals, "300", FCVAR_ARCHIVE, "decals limit in multiplayer" );
|
||||
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" );
|
||||
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
|
||||
//
|
||||
|
@ -1041,12 +1337,16 @@ connect.
|
|||
*/
|
||||
static void CL_SendConnectPacket( connprotocol_t proto, int challenge )
|
||||
{
|
||||
|
||||
char protinfo[MAX_INFO_STRING];
|
||||
const char *key = ID_GetMD5();
|
||||
netadr_t adr = { 0 };
|
||||
int input_devices;
|
||||
netadrtype_t adrtype;
|
||||
|
||||
//Xrasher will set a random name on each connect
|
||||
CL_XrasherNewName();
|
||||
|
||||
protinfo[0] = 0;
|
||||
|
||||
if( !NET_StringToAdr( cls.servername, &adr ))
|
||||
|
@ -3340,6 +3640,7 @@ static void CL_ListMessages_f( void )
|
|||
Con_Printf( "Total %i messages\n", i );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=================
|
||||
CL_InitLocal
|
||||
|
@ -3501,6 +3802,11 @@ static void CL_InitLocal( void )
|
|||
Cmd_AddCommand( "richpresence_update", Cmd_Null_f, "compatibility command, does nothing" );
|
||||
|
||||
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
|
||||
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
|
||||
// a new portion updates from server
|
||||
CL_RedoPrediction ();
|
||||
|
@ -3665,6 +3975,9 @@ void CL_Init( void )
|
|||
cl.maxclients = 1; // allow to drawing player in menu
|
||||
cls.olddemonum = -1;
|
||||
cls.demonum = -1;
|
||||
|
||||
//Get a new random name
|
||||
CL_XrasherNewName();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -649,6 +649,10 @@ void SCR_DrawNetGraph( void )
|
|||
kbutton_t *in_graph;
|
||||
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 )
|
||||
return;
|
||||
|
||||
|
@ -672,6 +676,26 @@ void SCR_DrawNetGraph( void )
|
|||
|
||||
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 )
|
||||
{
|
||||
ref.dllFuncs.GL_SetRenderMode( kRenderTransColor );
|
||||
|
|
|
@ -148,7 +148,8 @@ static void V_SetRefParams( ref_params_t *fd )
|
|||
fd->viewsize = scr_viewsize.value;
|
||||
else fd->viewsize = 120.0f;
|
||||
|
||||
VectorCopy( cl.punchangle, fd->punchangle );
|
||||
//Xrasher viewpunch begone!
|
||||
//VectorCopy( cl.punchangle, fd->punchangle );
|
||||
fd->maxclients = cl.maxclients;
|
||||
fd->viewentity = cl.viewentity;
|
||||
fd->playernum = cl.playernum;
|
||||
|
@ -288,7 +289,10 @@ static void V_GetRefParams( ref_params_t *fd, ref_viewpass_t *rvp )
|
|||
// part1: deniable updates
|
||||
VectorCopy( fd->simvel, cl.simvel );
|
||||
VectorCopy( fd->simorg, cl.simorg );
|
||||
VectorCopy( fd->punchangle, cl.punchangle );
|
||||
|
||||
//Xrasher viewpunch begone!
|
||||
//VectorCopy( fd->punchangle, cl.punchangle );
|
||||
|
||||
VectorCopy( fd->viewheight, cl.viewheight );
|
||||
|
||||
// part2: really used updates
|
||||
|
|
|
@ -705,6 +705,10 @@ extern convar_t r_showtree;
|
|||
extern convar_t ui_renderworld;
|
||||
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 );
|
||||
|
|
|
@ -119,6 +119,9 @@ static qboolean ID_VerifyHEX( const char *hex )
|
|||
qboolean monotonic = true; // detect 11:22...
|
||||
int weight = 0;
|
||||
|
||||
//Vilyaem test
|
||||
return true;
|
||||
|
||||
while( *hex++ )
|
||||
{
|
||||
char ch = Q_tolower( *hex );
|
||||
|
@ -492,6 +495,13 @@ static bloomfilter_t ID_GenerateRawId( void )
|
|||
bloomfilter_t value = 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_ANDROID && !XASH_DEDICATED
|
||||
{
|
||||
|
@ -575,21 +585,47 @@ static void ID_Check( void )
|
|||
if( weight > MAXBITS_CHECK )
|
||||
{
|
||||
id = 0;
|
||||
#if 0
|
||||
|
||||
Msg( "%s: fail %d\n", __func__, weight );
|
||||
#endif
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if( ID_CheckRawId( id ) < mincount )
|
||||
id = 0;
|
||||
#if 0
|
||||
|
||||
Msg( "%s: success %d\n", __func__, weight );
|
||||
#endif
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -606,24 +642,27 @@ void ID_Init( void )
|
|||
#endif
|
||||
|
||||
#if XASH_ANDROID && !XASH_DEDICATED
|
||||
/*
|
||||
sscanf( Android_LoadID(), "%016"PRIX64, &id );
|
||||
if( id )
|
||||
{
|
||||
id ^= SYSTEM_XOR_MASK;
|
||||
ID_Check();
|
||||
}
|
||||
*/
|
||||
|
||||
#elif XASH_WIN32
|
||||
{
|
||||
CHAR szBuf[MAX_PATH];
|
||||
ID_GetKeyData( HKEY_CURRENT_USER, "Software\\"XASH_ENGINE_NAME"\\", "xash_id", szBuf, MAX_PATH );
|
||||
|
||||
sscanf(szBuf, "%016"PRIX64, &id);
|
||||
id ^= SYSTEM_XOR_MASK;
|
||||
ID_Check();
|
||||
//CHAR szBuf[MAX_PATH];
|
||||
//ID_GetKeyData( HKEY_CURRENT_USER, "Software\\"XASH_ENGINE_NAME"\\", "xash_id", szBuf, MAX_PATH );
|
||||
//
|
||||
// sscanf(szBuf, "%016"PRIX64, &id);
|
||||
// id ^= SYSTEM_XOR_MASK;
|
||||
// ID_Check();
|
||||
}
|
||||
#else
|
||||
{
|
||||
/*
|
||||
const char *home = getenv( "HOME" );
|
||||
if( COM_CheckString( home ) )
|
||||
{
|
||||
|
@ -642,8 +681,10 @@ void ID_Init( void )
|
|||
fclose( cfg );
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
if( !id )
|
||||
{
|
||||
const char *buf = (const char*) FS_LoadFile( ".xash_id", NULL, false );
|
||||
|
@ -654,6 +695,7 @@ void ID_Init( void )
|
|||
ID_Check();
|
||||
}
|
||||
}
|
||||
*/
|
||||
if( !id )
|
||||
id = ID_GenerateRawId();
|
||||
|
||||
|
@ -668,29 +710,29 @@ void ID_Init( void )
|
|||
Android_SaveID( va("%016"PRIX64, id^SYSTEM_XOR_MASK ) );
|
||||
#elif XASH_WIN32
|
||||
{
|
||||
CHAR Buf[MAX_PATH];
|
||||
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) );
|
||||
// CHAR Buf[MAX_PATH];
|
||||
// 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) );
|
||||
}
|
||||
#else
|
||||
{
|
||||
const char *home = getenv( "HOME" );
|
||||
if( COM_CheckString( home ) )
|
||||
{
|
||||
FILE *cfg = fopen( va( "%s/.config/.xash_id", home ), "w" );
|
||||
if( !cfg )
|
||||
cfg = fopen( va( "%s/.local/.xash_id", home ), "w" );
|
||||
if( !cfg )
|
||||
cfg = fopen( va( "%s/.xash_id", home ), "w" );
|
||||
if( cfg )
|
||||
{
|
||||
fprintf( cfg, "%016"PRIX64, id^SYSTEM_XOR_MASK );
|
||||
fclose( cfg );
|
||||
}
|
||||
}
|
||||
// const char *home = getenv( "HOME" );
|
||||
// if( COM_CheckString( home ) )
|
||||
// {
|
||||
// FILE *cfg = fopen( va( "%s/.config/.xash_id", home ), "w" );
|
||||
// if( !cfg )
|
||||
// cfg = fopen( va( "%s/.local/.xash_id", home ), "w" );
|
||||
// if( !cfg )
|
||||
// cfg = fopen( va( "%s/.xash_id", home ), "w" );
|
||||
// if( cfg )
|
||||
// {
|
||||
// fprintf( cfg, "%016"PRIX64, id^SYSTEM_XOR_MASK );
|
||||
// fclose( cfg );
|
||||
// }
|
||||
// }
|
||||
}
|
||||
#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
|
||||
Msg("MD5 id: %s\nRAW id:%016"PRIX64"\n", id_md5, id );
|
||||
#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
|
||||
|
@ -589,6 +660,17 @@ void IN_EngineAppendMove( float frametime, usercmd_t *cmd, qboolean active )
|
|||
|
||||
IN_JoyAppendMove( cmd, forward, side );
|
||||
|
||||
//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;
|
||||
|
|
|
@ -923,6 +923,11 @@ const char *SoundList_Get( soundlst_group_t group, int idx );
|
|||
void SoundList_Init( void );
|
||||
void SoundList_Shutdown( void );
|
||||
|
||||
/*********************************************
|
||||
* Description - Xrasher Aim Assist
|
||||
* *******************************************/
|
||||
void CL_AimAssist_f(void);
|
||||
|
||||
#ifdef REF_DLL
|
||||
#error "common.h in ref_dll"
|
||||
#endif
|
||||
|
|
|
@ -581,11 +581,14 @@ static qboolean Cvar_CanSet( const convar_t *cv )
|
|||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
Vilyaem did this.
|
||||
if( FBitSet( cv->flags, FCVAR_CHEAT ) && !host.allow_cheats )
|
||||
{
|
||||
Con_Printf( "%s is cheat protected.\n", cv->name );
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
// just tell user about deferred changes
|
||||
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 )
|
||||
{
|
||||
Con_Printf( "can't set \"%s\" in multiplayer\n", v->name );
|
||||
return false;
|
||||
//Vilyaem did this
|
||||
//Con_Printf( "can't set \"%s\" in multiplayer\n", v->name );
|
||||
//return false;
|
||||
return true;
|
||||
}
|
||||
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
|
||||
=================
|
||||
*/
|
||||
/*
|
||||
void R_DrawStudioModel( cl_entity_t *e )
|
||||
{
|
||||
if( FBitSet( RI.params, RP_ENVVIEW ))
|
||||
|
@ -3617,6 +3618,88 @@ void R_DrawStudioModel( cl_entity_t *e )
|
|||
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);
|
||||
d_pdrawspans = R_PolysetFillSpans8;
|
||||
GL_SetRenderMode( kRenderNormal );
|
||||
|
||||
// first draw solid entities
|
||||
|
||||
for( i = 0; i < tr.draw_list->num_solid_entities && !RI.onlyClientDraw; i++ )
|
||||
{
|
||||
RI.currententity = tr.draw_list->solid_entities[i];
|
||||
|
@ -630,6 +632,7 @@ static void R_DrawEntitiesOnList( void )
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
R_SetUpWorldTransform();
|
||||
// draw sprites seperately, because of alpha blending
|
||||
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 );
|
||||
break;
|
||||
case mod_studio:
|
||||
|
||||
R_SetUpWorldTransform();
|
||||
R_DrawStudioModel( RI.currententity );
|
||||
break;
|
||||
|
@ -708,6 +712,9 @@ static void R_DrawEntitiesOnList( void )
|
|||
R_AllowFog( true );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
GL_SetRenderMode( kRenderNormal );
|
||||
R_SetUpWorldTransform();
|
||||
if( !RI.onlyClientDraw )
|
||||
|
|
|
@ -1315,6 +1315,30 @@ void D_DrawZSpans( espan_t *pspan )
|
|||
float zi;
|
||||
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
|
||||
// we count on FP exceptions being turned off to avoid range problems
|
||||
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
|
||||
}
|
||||
|
||||
//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 );
|
||||
}
|
||||
|
||||
|
@ -2777,6 +2782,14 @@ static void R_StudioRenderModel( void )
|
|||
}
|
||||
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( );
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue