Merge pull request #272 from a1batross/vulkan
Various patches, sync with upstream
This commit is contained in:
commit
803889e54f
|
@ -15,12 +15,12 @@ jobs:
|
|||
targetos: linux
|
||||
targetarch: i386
|
||||
|
||||
- os: ubuntu-18.04
|
||||
targetos: android
|
||||
targetarch: 32
|
||||
- os: ubuntu-18.04
|
||||
targetos: android
|
||||
targetarch: 64
|
||||
# - os: ubuntu-18.04
|
||||
# targetos: android
|
||||
# targetarch: 32
|
||||
# - os: ubuntu-18.04
|
||||
# targetos: android
|
||||
# targetarch: 64
|
||||
|
||||
# - os: ubuntu-18.04
|
||||
# targetos: motomagx
|
||||
|
|
36
.travis.yml
36
.travis.yml
|
@ -1,36 +0,0 @@
|
|||
language: c
|
||||
compiler: gcc
|
||||
sudo: false
|
||||
env:
|
||||
global:
|
||||
- SDL_VERSION=2.0.14
|
||||
- VULKAN_SDK_VERSION=1.2.176.1
|
||||
git:
|
||||
depth: 50
|
||||
submodules: true
|
||||
|
||||
os: linux
|
||||
arch:
|
||||
- aarch64
|
||||
- ppc64le
|
||||
- s390x
|
||||
addons:
|
||||
apt:
|
||||
update: true
|
||||
packages:
|
||||
- libx11-dev
|
||||
- libxext-dev
|
||||
- x11-utils
|
||||
- libgl1-mesa-dev
|
||||
- libasound-dev
|
||||
- libstdc++6
|
||||
- libfuse2
|
||||
- unzip
|
||||
before_script:
|
||||
- sh scripts/travis/deps_common.sh
|
||||
- sh scripts/travis/deps_${TRAVIS_OS_NAME}.sh
|
||||
script:
|
||||
- sh scripts/travis/build_${TRAVIS_OS_NAME}.sh
|
||||
after_script:
|
||||
- ccache --show-stats
|
||||
- sh scripts/continious_upload.sh xash3d-fwgs-${ARCH}.tar.xz xashds-linux-${ARCH}
|
|
@ -161,7 +161,7 @@ Branch **redempt** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/r
|
|||
OpenAG by YaLTeR - https://github.com/YaLTeR/OpenAG
|
||||
|
||||
## Afraid of Monsters
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-aom
|
||||
malortie's recreation - https://github.com/malortie/hl-aom
|
||||
|
||||
Branch **aom** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/aom
|
||||
|
||||
|
@ -169,17 +169,17 @@ Branch **aom** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/aom
|
|||
Reverse-engineered code, branch **aomdc** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/aomdc
|
||||
|
||||
## Azure Sheep
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-asheep
|
||||
malortie's recreation - https://github.com/malortie/hl-asheep
|
||||
|
||||
Reverse-engineered code, branch **asheep** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/asheep
|
||||
|
||||
## Big Lolly
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-biglolly
|
||||
malortie's recreation - https://github.com/malortie/hl-biglolly
|
||||
|
||||
Branch **biglolly** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/biglolly
|
||||
|
||||
## Black Ops
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-blackops
|
||||
malortie's recreation - https://github.com/malortie/hl-blackops
|
||||
|
||||
Branch **blackops** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/blackops
|
||||
|
||||
|
@ -206,7 +206,7 @@ CSO-like Xash3D-based mod, CSMoE - https://github.com/MoeMod/CSMoE
|
|||
Recreation by lostgamer aka nillerusr - https://github.com/LostGamerHL/crack_life
|
||||
|
||||
## Escape from the Darkness
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-eftd
|
||||
malortie's recreation - https://github.com/malortie/hl-eftd
|
||||
|
||||
Reverse-engineered code, branch **eftd** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/eftd
|
||||
|
||||
|
@ -229,7 +229,7 @@ Spirit of Half Life: Opposing-Force Edition - https://github.com/Hammermaps-DEV/
|
|||
Reverse-engineered code, branch **rebellion** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/rebellion
|
||||
|
||||
## Half-Life: Visitors
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-visitors
|
||||
malortie's recreation - https://github.com/malortie/hl-visitors
|
||||
|
||||
Reverse-engineered code, branch **visitors** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/visitors
|
||||
|
||||
|
@ -237,17 +237,17 @@ Reverse-engineered code, branch **visitors** in hlsdk-xash3d - https://github.co
|
|||
Branch **half-secret** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/half-secret
|
||||
|
||||
## Night at the Office
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-noffice
|
||||
malortie's recreation - https://github.com/malortie/hl-nato
|
||||
|
||||
Branch **noffice** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/noffice
|
||||
|
||||
## Poke 646
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-poke646
|
||||
malortie's recreation - https://github.com/malortie/hl-poke646
|
||||
|
||||
Reverse-engineered code, branch **poke646** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/poke646
|
||||
|
||||
## Poke 646: Vendetta
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-poke646
|
||||
malortie's recreation - https://github.com/malortie/hl-poke646-vendetta
|
||||
|
||||
Reverse-engineered code, branch **poke646_vendetta** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/poke646_vendetta
|
||||
|
||||
|
@ -261,19 +261,19 @@ Reverse-engineered code, branch **residual_point** in hlsdk-xash3d - https://git
|
|||
Reverse-engineered code by Velaron - https://github.com/Velaron/tf15-client
|
||||
|
||||
## The Gate
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-TheGate
|
||||
malortie's recreation - https://github.com/malortie/hl-thegate
|
||||
|
||||
Reverse-engineered code, branch **thegate** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/thegate
|
||||
|
||||
## They Hunger
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-Hunger
|
||||
malortie's recreation - https://github.com/malortie/hl-theyhunger
|
||||
|
||||
Reverse-engineered code, branch **theyhunger** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/theyhunger
|
||||
|
||||
They Hunger: Tactical - https://www.moddb.com/mods/they-hunger-tactical/downloads/tht-source-code-documentation
|
||||
|
||||
## Times of Troubles
|
||||
malortie's recreation - https://github.com/malortie/halflife/tree/mod-hl-tot
|
||||
malortie's recreation - https://github.com/malortie/hl-tot
|
||||
|
||||
Branch **tot** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/tot
|
||||
|
||||
|
@ -295,7 +295,7 @@ Branch **dmc** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/dmc
|
|||
Branch **echoes** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/echoes
|
||||
|
||||
## Half-Life: Invasion
|
||||
Port to HLSDK 2.4 by malortie - https://github.com/malortie/halflife/tree/mod-hl-invasion
|
||||
Port to HLSDK 2.4 by malortie - https://github.com/malortie/hl-invasion
|
||||
|
||||
Port to Linux by fmoraw - https://github.com/fmoraw/hlinvasion
|
||||
|
||||
|
@ -309,7 +309,7 @@ Branch **half-screwed** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/t
|
|||
Port to Linux - https://github.com/fmoraw/NS
|
||||
|
||||
## Swiss Cheese Halloween 2002
|
||||
Just more playable version by malortie - https://github.com/malortie/halflife/tree/mod-hl-halloween
|
||||
Just more playable version by malortie - https://github.com/malortie/hl-shall
|
||||
|
||||
Branch **halloween** in hlsdk-xash3d - https://github.com/FWGS/hlsdk-xash3d/tree/halloween
|
||||
|
||||
|
|
10
README.md
10
README.md
|
@ -39,7 +39,7 @@ Regular upstream Xash3D README.md follows.
|
|||
---
|
||||
|
||||
# Xash3D FWGS Engine
|
||||
[![GitHub Actions Status](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml) [![Travis CI Status](https://api.travis-ci.org/FWGS/xash3d-fwgs.svg?branch=master)](https://travis-ci.org/FWGS/xash3d-fwgs) [![FreeBSD Build Status](https://img.shields.io/cirrus/github/FWGS/xash3d-fwgs?label=freebsd%20build)](https://cirrus-ci.com/github/FWGS/xash3d-fwgs) [![Discord Server](https://img.shields.io/discord/355697768582610945.svg)](http://discord.fwgs.ru/) \
|
||||
[![GitHub Actions Status](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/FWGS/xash3d-fwgs/actions/workflows/c-cpp.yml) [![FreeBSD Build Status](https://img.shields.io/cirrus/github/FWGS/xash3d-fwgs?label=freebsd%20build)](https://cirrus-ci.com/github/FWGS/xash3d-fwgs) [![Discord Server](https://img.shields.io/discord/355697768582610945.svg)](http://discord.fwgs.ru/) \
|
||||
[![Download Stable](https://img.shields.io/badge/download-stable-yellow)](https://github.com/FWGS/xash3d-fwgs/releases/latest) [![Download Testing](https://img.shields.io/badge/downloads-testing-orange)](https://github.com/FWGS/xash3d-fwgs/releases/tag/continuous)
|
||||
|
||||
Xash3D FWGS is a fork of Xash3D Engine by Unkle Mike with extended features and crossplatform.
|
||||
|
@ -121,16 +121,16 @@ Even if Xash3D FWGS does support targetting 64-bit, you can't load games without
|
|||
0) Open command line
|
||||
1) Navigate to `xash3d-fwgs` directory.
|
||||
2) Carefully examine which build options are available: `waf --help`
|
||||
3) Configure build: `waf configure -T release --sdl2=c:/path/to/SDL2 --prefix=c:/path/to/any/output/directory`
|
||||
3) Configure build: `waf configure -T release --sdl2=c:/path/to/SDL2`
|
||||
4) Compile: `waf build`
|
||||
5) Install: `waf install`
|
||||
5) Install: `waf install --destdir=c:/path/to/any/output/directory`
|
||||
|
||||
#### Linux
|
||||
0) Examine which build options are available: `./waf --help`
|
||||
1) Configure build: `./waf configure -T release --prefix=/path/to/any/output/directory`
|
||||
1) Configure build: `./waf configure -T release`
|
||||
(You need to pass `-8` to compile 64-bit engine on 64-bit x86 processor)
|
||||
2) Compile: `./waf build`
|
||||
3) Install(optional): `./waf install`
|
||||
3) Install(optional): `./waf install --destdir=/path/to/any/output/directory`
|
||||
|
||||
Note: if compiling 32-bit on amd64, you may need to supply `export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig` prior to running configure.
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ typedef enum
|
|||
IMAGE_ROT_90 = BIT(18), // flip from upper left corner to down right corner
|
||||
IMAGE_ROT180 = IMAGE_FLIP_X|IMAGE_FLIP_Y,
|
||||
IMAGE_ROT270 = IMAGE_FLIP_X|IMAGE_FLIP_Y|IMAGE_ROT_90,
|
||||
IMAGE_EMBOSS = BIT(19), // apply emboss mapping
|
||||
// reserved
|
||||
IMAGE_RESAMPLE = BIT(20), // resample image to specified dims
|
||||
// reserved
|
||||
// reserved
|
||||
|
|
|
@ -25,14 +25,18 @@
|
|||
#define FCVAR_PRINTABLEONLY (1<<7) // This cvar's string cannot contain unprintable characters ( e.g., used for player name etc ).
|
||||
#define FCVAR_UNLOGGED (1<<8) // If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log
|
||||
#define FCVAR_NOEXTRAWHITEPACE (1<<9) // strip trailing/leading white space from this cvar
|
||||
#define FCVAR_PRIVILEGED (1<<10) // only available in privileged mode
|
||||
#define FCVAR_FILTERABLE (1<<11) // filtered in unprivileged mode if cl_filterstuffcmd is 1
|
||||
|
||||
#define FCVAR_MOVEVARS (1<<10) // this cvar is a part of movevars_t struct that shared between client and server
|
||||
#define FCVAR_LATCH (1<<11) // notify client what this cvar will be applied only after server restart (but don't does more nothing)
|
||||
// Xash3D extensions
|
||||
#define FCVAR_GLCONFIG (1<<12) // write it into <renderer>.cfg(see RefAPI)
|
||||
#define FCVAR_CHANGED (1<<13) // set each time the cvar is changed
|
||||
#define FCVAR_GAMEUIDLL (1<<14) // defined by the menu DLL
|
||||
#define FCVAR_CHEAT (1<<15) // can not be changed if cheats are disabled
|
||||
|
||||
// a1ba: let's reuse higher bits for flags extensions from now on
|
||||
#define FCVAR_LATCH (1<<30) // notify client what this cvar will be applied only after server restart (but don't does more nothing)
|
||||
|
||||
typedef struct cvar_s
|
||||
{
|
||||
char *name;
|
||||
|
|
|
@ -25,5 +25,6 @@ GNU General Public License for more details.
|
|||
#define ENGINE_COMPENSATE_QUAKE_BUG (1<<5) // compensate stupid quake bug (inverse pitch) for mods where this bug is fixed
|
||||
#define ENGINE_IMPROVED_LINETRACE (1<<6) // new traceline that tracing through alphatextures
|
||||
#define ENGINE_COMPUTE_STUDIO_LERP (1<<7) // enable MOVETYPE_STEP lerping back in engine
|
||||
#define ENGINE_LINEAR_GAMMA_SPACE (1<<8) // disable influence of gamma/brightness cvars to textures/lightmaps, for mods with custom renderer
|
||||
|
||||
#endif//FEATURES_H
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
ref_device.h - common structures for retrieving GPU information for
|
||||
refs, menu and engine
|
||||
Copyright (C) 2021 a1batross
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
*/
|
||||
#ifndef REF_DEVICE_H
|
||||
#define REF_DEVICE_H
|
||||
|
||||
// modeled after Vulkan and currently useful only for it
|
||||
typedef enum ref_device_type_e
|
||||
{
|
||||
REF_DEVICE_TYPE_OTHER = 0,
|
||||
REF_DEVICE_TYPE_INTERGRATED_GPU,
|
||||
REF_DEVICE_TYPE_DISCRETE_GPU,
|
||||
REF_DEVICE_TYPE_VIRTUAL_GPU,
|
||||
REF_DEVICE_TYPE_CPU,
|
||||
REF_DEVICE_TYPE_LAST,
|
||||
} ref_device_type_t;
|
||||
|
||||
#define REF_DEVICE_NAME_SIZE 256
|
||||
|
||||
// only add new fields to the end of the struct!!!
|
||||
typedef struct ref_device_s {
|
||||
int vendorID;
|
||||
int deviceID;
|
||||
ref_device_type_t deviceType;
|
||||
char deviceName[REF_DEVICE_NAME_SIZE];
|
||||
} ref_device_t;
|
||||
|
||||
#endif /* REF_DEVICE_H */
|
|
@ -82,7 +82,7 @@ typedef enum
|
|||
TF_KEEP_SOURCE = (1<<1), // some images keep source
|
||||
TF_NOFLIP_TGA = (1<<2), // Steam background completely ignore tga attribute 0x20
|
||||
TF_EXPAND_SOURCE = (1<<3), // Don't keep source as 8-bit expand to RGBA
|
||||
TF_ALLOW_EMBOSS = (1<<4), // Allow emboss-mapping for this image
|
||||
// reserved
|
||||
TF_RECTANGLE = (1<<5), // this is GL_TEXTURE_RECTANGLE
|
||||
TF_CUBEMAP = (1<<6), // it's cubemap texture
|
||||
TF_DEPTHMAP = (1<<7), // custom texture filter used
|
||||
|
@ -107,6 +107,7 @@ typedef enum
|
|||
TF_ARB_FLOAT = (1<<26), // float textures
|
||||
TF_NOCOMPARE = (1<<27), // disable comparing for depth textures
|
||||
TF_ARB_16BIT = (1<<28), // keep image as 16-bit (not 24)
|
||||
TF_MULTISAMPLE = (1<<29) // multisampling texture
|
||||
} texFlags_t;
|
||||
|
||||
typedef enum
|
||||
|
|
|
@ -86,6 +86,7 @@ const char *svc_strings[svc_lastmsg+1] =
|
|||
"svc_resourcelocation",
|
||||
"svc_querycvarvalue",
|
||||
"svc_querycvarvalue2",
|
||||
"svc_exec",
|
||||
};
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -1744,6 +1744,29 @@ static int GAME_EXPORT pfnClientCmd( const char *szCmdString )
|
|||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
pfnFilteredClientCmd
|
||||
=============
|
||||
*/
|
||||
static int GAME_EXPORT pfnFilteredClientCmd( const char *szCmdString )
|
||||
{
|
||||
if( !COM_CheckString( szCmdString ))
|
||||
return 0;
|
||||
|
||||
// a1ba:
|
||||
// there should be stufftext validator, that checks
|
||||
// hardcoded commands and disallows them before passing to
|
||||
// filtered buffer, returning 0
|
||||
// I've replaced it by hooking potentially exploitable
|
||||
// commands and variables(motd_write, motdfile, etc) in client interfaces
|
||||
|
||||
Cbuf_AddFilteredText( szCmdString );
|
||||
Cbuf_AddFilteredText( "\n" );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
pfnGetPlayerInfo
|
||||
|
@ -3878,10 +3901,7 @@ static cl_enginefunc_t gEngfuncs =
|
|||
pfnGetAppID,
|
||||
Cmd_AliasGetList,
|
||||
pfnVguiWrap2_GetMouseDelta,
|
||||
|
||||
// HACKHACK: added it here so it wouldn't cause overflow or segfault
|
||||
// TODO: itself client command filtering is not implemented yet
|
||||
pfnClientCmd
|
||||
pfnFilteredClientCmd
|
||||
};
|
||||
|
||||
void CL_UnloadProgs( void )
|
||||
|
|
|
@ -1284,6 +1284,7 @@ void CL_Rcon_f( void )
|
|||
{
|
||||
char message[1024];
|
||||
netadr_t to;
|
||||
string command;
|
||||
int i;
|
||||
|
||||
if( !COM_CheckString( rcon_client_password->string ))
|
||||
|
@ -1306,7 +1307,8 @@ void CL_Rcon_f( void )
|
|||
|
||||
for( i = 1; i < Cmd_Argc(); i++ )
|
||||
{
|
||||
Q_strcat( message, Cmd_Argv( i ));
|
||||
Cmd_Escape( command, Cmd_Argv( i ), sizeof( command ));
|
||||
Q_strcat( message, command );
|
||||
Q_strcat( message, " " );
|
||||
}
|
||||
|
||||
|
@ -2820,13 +2822,13 @@ void CL_InitLocal( void )
|
|||
cl_nodelta = Cvar_Get ("cl_nodelta", "0", 0, "disable delta-compression for server messages" );
|
||||
cl_idealpitchscale = Cvar_Get( "cl_idealpitchscale", "0.8", 0, "how much to look up/down slopes and stairs when not using freelook" );
|
||||
cl_solid_players = Cvar_Get( "cl_solid_players", "1", 0, "Make all players not solid (can't traceline them)" );
|
||||
cl_interp = Cvar_Get( "ex_interp", "0.1", FCVAR_ARCHIVE, "Interpolate object positions starting this many seconds in past" );
|
||||
cl_interp = Cvar_Get( "ex_interp", "0.1", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "Interpolate object positions starting this many seconds in past" );
|
||||
cl_timeout = Cvar_Get( "cl_timeout", "60", 0, "connect timeout (in-seconds)" );
|
||||
cl_charset = Cvar_Get( "cl_charset", "utf-8", FCVAR_ARCHIVE, "1-byte charset to use (iconv style)" );
|
||||
hud_utf8 = Cvar_Get( "hud_utf8", "0", FCVAR_ARCHIVE, "Use utf-8 encoding for hud text" );
|
||||
|
||||
rcon_client_password = Cvar_Get( "rcon_password", "", 0, "remote control client password" );
|
||||
rcon_address = Cvar_Get( "rcon_address", "", 0, "remote control address" );
|
||||
rcon_client_password = Cvar_Get( "rcon_password", "", FCVAR_PRIVILEGED, "remote control client password" );
|
||||
rcon_address = Cvar_Get( "rcon_address", "", FCVAR_PRIVILEGED, "remote control address" );
|
||||
|
||||
cl_trace_messages = Cvar_Get( "cl_trace_messages", "0", FCVAR_ARCHIVE|FCVAR_CHEAT, "enable message names tracing (good for developers)");
|
||||
|
||||
|
@ -2837,7 +2839,7 @@ void CL_InitLocal( void )
|
|||
cl_updaterate = Cvar_Get( "cl_updaterate", "20", FCVAR_USERINFO|FCVAR_ARCHIVE, "refresh rate of server messages" );
|
||||
cl_dlmax = Cvar_Get( "cl_dlmax", "0", FCVAR_USERINFO|FCVAR_ARCHIVE, "max allowed outcoming fragment size" );
|
||||
cl_upmax = Cvar_Get( "cl_upmax", "1200", FCVAR_ARCHIVE, "max allowed incoming fragment size" );
|
||||
rate = Cvar_Get( "rate", "3500", FCVAR_USERINFO|FCVAR_ARCHIVE, "player network rate" );
|
||||
rate = Cvar_Get( "rate", "3500", FCVAR_USERINFO|FCVAR_ARCHIVE|FCVAR_FILTERABLE, "player network rate" );
|
||||
topcolor = Cvar_Get( "topcolor", "0", FCVAR_USERINFO|FCVAR_ARCHIVE, "player top color" );
|
||||
bottomcolor = Cvar_Get( "bottomcolor", "0", FCVAR_USERINFO|FCVAR_ARCHIVE, "player bottom color" );
|
||||
cl_lw = Cvar_Get( "cl_lw", "1", FCVAR_ARCHIVE|FCVAR_USERINFO, "enable client weapon predicting" );
|
||||
|
@ -2876,7 +2878,7 @@ void CL_InitLocal( void )
|
|||
Cmd_AddCommand ("give", NULL, "give specified item or weapon" );
|
||||
Cmd_AddCommand ("drop", NULL, "drop current/specified item or weapon" );
|
||||
Cmd_AddCommand ("gametitle", NULL, "show game logo" );
|
||||
Cmd_AddCommand( "kill", NULL, "die instantly" );
|
||||
Cmd_AddRestrictedCommand ("kill", NULL, "die instantly" );
|
||||
Cmd_AddCommand ("god", NULL, "enable godmode" );
|
||||
Cmd_AddCommand ("fov", NULL, "set client field of view" );
|
||||
Cmd_AddCommand ("log", NULL, "logging server events" );
|
||||
|
@ -2889,8 +2891,8 @@ void CL_InitLocal( void )
|
|||
Cmd_AddCommand ("mp3", CL_PlayCDTrack_f, "Play mp3-track (based on virtual cd-player)" );
|
||||
Cmd_AddCommand ("waveplaylen", CL_WavePlayLen_f, "Get approximate length of wave file");
|
||||
|
||||
Cmd_AddCommand ("setinfo", CL_SetInfo_f, "examine or change the userinfo string (alias of userinfo)" );
|
||||
Cmd_AddCommand ("userinfo", CL_SetInfo_f, "examine or change the userinfo string (alias of setinfo)" );
|
||||
Cmd_AddRestrictedCommand ("setinfo", CL_SetInfo_f, "examine or change the userinfo string (alias of userinfo)" );
|
||||
Cmd_AddRestrictedCommand ("userinfo", CL_SetInfo_f, "examine or change the userinfo string (alias of setinfo)" );
|
||||
Cmd_AddCommand ("physinfo", CL_Physinfo_f, "print current client physinfo" );
|
||||
Cmd_AddCommand ("disconnect", CL_Disconnect_f, "disconnect from server" );
|
||||
Cmd_AddCommand ("record", CL_Record_f, "record a demo" );
|
||||
|
@ -2909,8 +2911,8 @@ void CL_InitLocal( void )
|
|||
Cmd_AddCommand ("fullserverinfo", CL_FullServerinfo_f, "sent by server when serverinfo changes" );
|
||||
Cmd_AddCommand ("upload", CL_BeginUpload_f, "uploading file to the server" );
|
||||
|
||||
Cmd_AddCommand ("quit", CL_Quit_f, "quit from game" );
|
||||
Cmd_AddCommand ("exit", CL_Quit_f, "quit from game" );
|
||||
Cmd_AddRestrictedCommand ("quit", CL_Quit_f, "quit from game" );
|
||||
Cmd_AddRestrictedCommand ("exit", CL_Quit_f, "quit from game" );
|
||||
|
||||
Cmd_AddCommand ("screenshot", CL_ScreenShot_f, "takes a screenshot of the next rendered frame" );
|
||||
Cmd_AddCommand ("snapshot", CL_SnapShot_f, "takes a snapshot of the next rendered frame" );
|
||||
|
@ -2919,7 +2921,7 @@ void CL_InitLocal( void )
|
|||
Cmd_AddCommand ("levelshot", CL_LevelShot_f, "same as \"screenshot\", used for create plaque images" );
|
||||
Cmd_AddCommand ("saveshot", CL_SaveShot_f, "used for create save previews with LoadGame menu" );
|
||||
|
||||
Cmd_AddCommand ("connect", CL_Connect_f, "connect to a server by hostname" );
|
||||
Cmd_AddRestrictedCommand ("connect", CL_Connect_f, "connect to a server by hostname" );
|
||||
Cmd_AddCommand ("reconnect", CL_Reconnect_f, "reconnect to current level" );
|
||||
|
||||
Cmd_AddCommand ("rcon", CL_Rcon_f, "sends a command to the server console (rcon_password and rcon_address required)" );
|
||||
|
|
|
@ -93,6 +93,15 @@ static void *pfnGetNativeObject( const char *obj )
|
|||
return Platform_GetNativeObject( obj );
|
||||
}
|
||||
|
||||
static void pfnTouch_HideButtons( const char *name, byte state )
|
||||
{
|
||||
Touch_HideButtons( name, state, true );
|
||||
}
|
||||
|
||||
static void pfnTouch_RemoveButton( const char *name )
|
||||
{
|
||||
Touch_RemoveButton( name, true );
|
||||
}
|
||||
|
||||
static mobile_engfuncs_t gpMobileEngfuncs =
|
||||
{
|
||||
|
@ -101,9 +110,9 @@ static mobile_engfuncs_t gpMobileEngfuncs =
|
|||
pfnEnableTextInput,
|
||||
Touch_AddClientButton,
|
||||
Touch_AddDefaultButton,
|
||||
Touch_HideButtons,
|
||||
Touch_RemoveButton,
|
||||
(void*)Touch_SetClientOnly,
|
||||
pfnTouch_HideButtons,
|
||||
pfnTouch_RemoveButton,
|
||||
Touch_SetClientOnly,
|
||||
Touch_ResetDefaultButtons,
|
||||
pfnDrawScaledCharacter,
|
||||
Sys_Warn,
|
||||
|
@ -125,8 +134,8 @@ qboolean Mobile_Init( void )
|
|||
success = true;
|
||||
|
||||
Cmd_AddCommand( "vibrate", (xcommand_t)Vibrate_f, "Vibrate for specified time");
|
||||
vibration_length = Cvar_Get( "vibration_length", "1.0", FCVAR_ARCHIVE, "Vibration length");
|
||||
vibration_enable = Cvar_Get( "vibration_enable", "1", FCVAR_ARCHIVE, "Enable vibration");
|
||||
vibration_length = Cvar_Get( "vibration_length", "1.0", FCVAR_ARCHIVE | FCVAR_PRIVILEGED, "Vibration length");
|
||||
vibration_enable = Cvar_Get( "vibration_enable", "1", FCVAR_ARCHIVE | FCVAR_PRIVILEGED, "Enable vibration");
|
||||
|
||||
return success;
|
||||
}
|
||||
|
|
|
@ -1883,45 +1883,88 @@ Find the client cvar value
|
|||
and sent it back to the server
|
||||
==============
|
||||
*/
|
||||
void CL_ParseCvarValue( sizebuf_t *msg )
|
||||
void CL_ParseCvarValue( sizebuf_t *msg, const qboolean ext )
|
||||
{
|
||||
const char *cvarName = MSG_ReadString( msg );
|
||||
convar_t *cvar = Cvar_FindVar( cvarName );
|
||||
const char *cvarName, *response;
|
||||
convar_t *cvar;
|
||||
int requestID;
|
||||
|
||||
// build the answer
|
||||
MSG_BeginClientCmd( &cls.netchan.message, clc_requestcvarvalue );
|
||||
MSG_WriteString( &cls.netchan.message, cvar ? cvar->string : "Not Found" );
|
||||
if( ext )
|
||||
requestID = MSG_ReadLong( msg );
|
||||
|
||||
cvarName = MSG_ReadString( msg );
|
||||
cvar = Cvar_FindVar( cvarName );
|
||||
|
||||
if( cvar )
|
||||
{
|
||||
if( cvar->flags & FCVAR_PRIVILEGED )
|
||||
response = "CVAR is privileged";
|
||||
else if( cvar->flags & FCVAR_SERVER )
|
||||
response = "CVAR is server-only";
|
||||
else if( cvar->flags & FCVAR_PROTECTED )
|
||||
response = "CVAR is protected";
|
||||
else
|
||||
response = cvar->string;
|
||||
}
|
||||
else response = "Bad CVAR request";
|
||||
|
||||
if( ext )
|
||||
{
|
||||
MSG_BeginClientCmd( &cls.netchan.message, clc_requestcvarvalue2 );
|
||||
MSG_WriteLong( &cls.netchan.message, requestID );
|
||||
MSG_WriteString( &cls.netchan.message, cvarName );
|
||||
}
|
||||
else
|
||||
{
|
||||
MSG_BeginClientCmd( &cls.netchan.message, clc_requestcvarvalue );
|
||||
}
|
||||
MSG_WriteString( &cls.netchan.message, response );
|
||||
}
|
||||
|
||||
/*
|
||||
==============
|
||||
CL_ParseCvarValue2
|
||||
CL_ParseExec
|
||||
|
||||
Find the client cvar value
|
||||
and sent it back to the server
|
||||
Exec map/class specific configs
|
||||
==============
|
||||
*/
|
||||
void CL_ParseCvarValue2( sizebuf_t *msg )
|
||||
void CL_ParseExec( sizebuf_t *msg )
|
||||
{
|
||||
int requestID = MSG_ReadLong( msg );
|
||||
const char *cvarName = MSG_ReadString( msg );
|
||||
convar_t *cvar = Cvar_FindVar( cvarName );
|
||||
qboolean is_class;
|
||||
int class_idx;
|
||||
string mapname;
|
||||
const char *class_cfgs[] = {
|
||||
"",
|
||||
"exec scout.cfg\n",
|
||||
"exec sniper.cfg\n",
|
||||
"exec soldier.cfg\n",
|
||||
"exec demoman.cfg\n",
|
||||
"exec medic.cfg\n",
|
||||
"exec hwguy.cfg\n",
|
||||
"exec pyro.cfg\n",
|
||||
"exec spy.cfg\n",
|
||||
"exec engineer.cfg\n",
|
||||
"",
|
||||
"exec civilian.cfg\n"
|
||||
};
|
||||
|
||||
// build the answer
|
||||
MSG_BeginClientCmd( &cls.netchan.message, clc_requestcvarvalue2 );
|
||||
MSG_WriteLong( &cls.netchan.message, requestID );
|
||||
MSG_WriteString( &cls.netchan.message, cvarName );
|
||||
is_class = MSG_ReadByte( msg );
|
||||
|
||||
if( cvar )
|
||||
if ( is_class )
|
||||
{
|
||||
// cheater can change value ignoring Cvar_Set so we responce incorrect value
|
||||
if( cvar->value != Q_atof( cvar->string ))
|
||||
MSG_WriteString( &cls.netchan.message, va( "%s (%g)", cvar->string, cvar->value ));
|
||||
else MSG_WriteString( &cls.netchan.message, cvar->string );
|
||||
class_idx = MSG_ReadByte( msg );
|
||||
|
||||
if ( class_idx >= 0 && class_idx <= 11 && !Q_stricmp( GI->gamefolder, "tfc" ) )
|
||||
Cbuf_AddText( class_cfgs[class_idx] );
|
||||
}
|
||||
else
|
||||
else if ( !Q_stricmp( GI->gamefolder, "tfc" ) )
|
||||
{
|
||||
MSG_WriteString( &cls.netchan.message, "Not Found" );
|
||||
Cbuf_AddText( "exec mapdefault.cfg\n" );
|
||||
|
||||
COM_FileBase( clgame.mapname, mapname );
|
||||
|
||||
if ( COM_CheckString( mapname ) )
|
||||
Cbuf_AddText( va( "exec %s.cfg\n", mapname ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2179,11 +2222,11 @@ void CL_ParseServerMessage( sizebuf_t *msg, qboolean normal_message )
|
|||
case svc_stufftext:
|
||||
s = MSG_ReadString( msg );
|
||||
#ifdef HACKS_RELATED_HLMODS
|
||||
// dsiable Cry Of Fear antisave protection
|
||||
// disable Cry Of Fear antisave protection
|
||||
if( !Q_strnicmp( s, "disconnect", 10 ) && cls.signon != SIGNONS )
|
||||
break; // too early
|
||||
#endif
|
||||
Cbuf_AddText( s );
|
||||
Cbuf_AddFilteredText( s );
|
||||
break;
|
||||
case svc_setangle:
|
||||
CL_ParseSetAngle( msg );
|
||||
|
@ -2329,10 +2372,13 @@ void CL_ParseServerMessage( sizebuf_t *msg, qboolean normal_message )
|
|||
CL_ParseResLocation( msg );
|
||||
break;
|
||||
case svc_querycvarvalue:
|
||||
CL_ParseCvarValue( msg );
|
||||
CL_ParseCvarValue( msg, false );
|
||||
break;
|
||||
case svc_querycvarvalue2:
|
||||
CL_ParseCvarValue2( msg );
|
||||
CL_ParseCvarValue( msg, true );
|
||||
break;
|
||||
case svc_exec:
|
||||
CL_ParseExec( msg );
|
||||
break;
|
||||
default:
|
||||
CL_ParseUserMessage( msg, cmd );
|
||||
|
@ -2944,13 +2990,13 @@ void CL_ParseLegacyServerMessage( sizebuf_t *msg, qboolean normal_message )
|
|||
case svc_stufftext:
|
||||
s = MSG_ReadString( msg );
|
||||
#ifdef HACKS_RELATED_HLMODS
|
||||
// dsiable Cry Of Fear antisave protection
|
||||
// disable Cry Of Fear antisave protection
|
||||
if( !Q_strnicmp( s, "disconnect", 10 ) && cls.signon != SIGNONS )
|
||||
break; // too early
|
||||
#endif
|
||||
|
||||
Con_Reportf( "Stufftext: %s", s );
|
||||
Cbuf_AddText( s );
|
||||
Cbuf_AddFilteredText( s );
|
||||
break;
|
||||
case svc_setangle:
|
||||
CL_ParseSetAngle( msg );
|
||||
|
@ -3116,10 +3162,10 @@ void CL_ParseLegacyServerMessage( sizebuf_t *msg, qboolean normal_message )
|
|||
CL_ParseResLocation( msg );
|
||||
break;
|
||||
case svc_querycvarvalue:
|
||||
CL_ParseCvarValue( msg );
|
||||
CL_ParseCvarValue( msg, false );
|
||||
break;
|
||||
case svc_querycvarvalue2:
|
||||
CL_ParseCvarValue2( msg );
|
||||
CL_ParseCvarValue( msg, true );
|
||||
break;
|
||||
default:
|
||||
CL_ParseUserMessage( msg, cmd );
|
||||
|
|
|
@ -825,6 +825,9 @@ CL_QuakeStuffText
|
|||
void CL_QuakeStuffText( const char *text )
|
||||
{
|
||||
Q_strncat( cmd_buf, text, sizeof( cmd_buf ));
|
||||
|
||||
// a1ba: didn't filtered, anyway quake protocol
|
||||
// only supported for demos, not network games
|
||||
Cbuf_AddText( text );
|
||||
}
|
||||
|
||||
|
|
|
@ -679,7 +679,6 @@ extern convar_t *cl_fixtimerate;
|
|||
extern convar_t *hud_scale;
|
||||
extern convar_t *gl_showtextures;
|
||||
extern convar_t *cl_bmodelinterp;
|
||||
extern convar_t *cl_righthand;
|
||||
extern convar_t *cl_lw; // local weapons
|
||||
extern convar_t *cl_charset;
|
||||
extern convar_t *cl_trace_messages;
|
||||
|
|
|
@ -33,6 +33,8 @@ convar_t *con_color;
|
|||
static int g_codepage = 0;
|
||||
static qboolean g_utf8 = false;
|
||||
|
||||
static qboolean g_messagemode_privileged = true;
|
||||
|
||||
#define CON_TIMES 4 // notify lines
|
||||
#define CON_MAX_TIMES 64 // notify max lines
|
||||
#define COLOR_DEFAULT '7'
|
||||
|
@ -242,6 +244,8 @@ Con_MessageMode_f
|
|||
*/
|
||||
void Con_MessageMode_f( void )
|
||||
{
|
||||
g_messagemode_privileged = Cmd_CurrentCommandIsPrivileged();
|
||||
|
||||
if( Cmd_Argc() == 2 )
|
||||
Q_strncpy( con.chat_cmd, Cmd_Argv( 1 ), sizeof( con.chat_cmd ));
|
||||
else Q_strncpy( con.chat_cmd, "say", sizeof( con.chat_cmd ));
|
||||
|
@ -256,6 +260,8 @@ Con_MessageMode2_f
|
|||
*/
|
||||
void Con_MessageMode2_f( void )
|
||||
{
|
||||
g_messagemode_privileged = Cmd_CurrentCommandIsPrivileged();
|
||||
|
||||
Q_strncpy( con.chat_cmd, "say_team", sizeof( con.chat_cmd ));
|
||||
Key_SetKeyDest( key_message );
|
||||
}
|
||||
|
@ -1865,7 +1871,10 @@ void Key_Message( int key )
|
|||
if( con.chat.buffer[0] && cls.state == ca_active )
|
||||
{
|
||||
Q_snprintf( buffer, sizeof( buffer ), "%s \"%s\"\n", con.chat_cmd, con.chat.buffer );
|
||||
Cbuf_AddText( buffer );
|
||||
|
||||
if( g_messagemode_privileged )
|
||||
Cbuf_AddText( buffer );
|
||||
else Cbuf_AddFilteredText( buffer );
|
||||
}
|
||||
|
||||
Key_SetKeyDest( key_game );
|
||||
|
|
|
@ -380,32 +380,32 @@ Main init procedure
|
|||
*/
|
||||
void Joy_Init( void )
|
||||
{
|
||||
joy_pitch = Cvar_Get( "joy_pitch", "100.0", FCVAR_ARCHIVE, "joystick pitch sensitivity" );
|
||||
joy_yaw = Cvar_Get( "joy_yaw", "100.0", FCVAR_ARCHIVE, "joystick yaw sensitivity" );
|
||||
joy_side = Cvar_Get( "joy_side", "1.0", FCVAR_ARCHIVE, "joystick side sensitivity. Values from -1.0 to 1.0" );
|
||||
joy_forward = Cvar_Get( "joy_forward", "1.0", FCVAR_ARCHIVE, "joystick forward sensitivity. Values from -1.0 to 1.0" );
|
||||
joy_pitch = Cvar_Get( "joy_pitch", "100.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick pitch sensitivity" );
|
||||
joy_yaw = Cvar_Get( "joy_yaw", "100.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick yaw sensitivity" );
|
||||
joy_side = Cvar_Get( "joy_side", "1.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick side sensitivity. Values from -1.0 to 1.0" );
|
||||
joy_forward = Cvar_Get( "joy_forward", "1.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick forward sensitivity. Values from -1.0 to 1.0" );
|
||||
|
||||
joy_lt_threshold = Cvar_Get( "joy_lt_threshold", "16384", FCVAR_ARCHIVE, "left trigger threshold. Value from 0 to 32767");
|
||||
joy_rt_threshold = Cvar_Get( "joy_rt_threshold", "16384", FCVAR_ARCHIVE, "right trigger threshold. Value from 0 to 32767" );
|
||||
joy_lt_threshold = Cvar_Get( "joy_lt_threshold", "16384", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "left trigger threshold. Value from 0 to 32767");
|
||||
joy_rt_threshold = Cvar_Get( "joy_rt_threshold", "16384", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "right trigger threshold. Value from 0 to 32767" );
|
||||
|
||||
// emit a key event at 75% axis move
|
||||
joy_side_key_threshold = Cvar_Get( "joy_side_key_threshold", "24576", FCVAR_ARCHIVE, "side axis key event emit threshold. Value from 0 to 32767" );
|
||||
joy_forward_key_threshold = Cvar_Get( "joy_forward_key_threshold", "24576", FCVAR_ARCHIVE, "forward axis key event emit threshold. Value from 0 to 32767");
|
||||
joy_side_key_threshold = Cvar_Get( "joy_side_key_threshold", "24576", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "side axis key event emit threshold. Value from 0 to 32767" );
|
||||
joy_forward_key_threshold = Cvar_Get( "joy_forward_key_threshold", "24576", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "forward axis key event emit threshold. Value from 0 to 32767");
|
||||
|
||||
// by default, we rely on deadzone detection come from system, but some glitchy devices report false deadzones
|
||||
joy_side_deadzone = Cvar_Get( "joy_side_deadzone", "0", FCVAR_ARCHIVE, "side axis deadzone. Value from 0 to 32767" );
|
||||
joy_forward_deadzone = Cvar_Get( "joy_forward_deadzone", "0", FCVAR_ARCHIVE, "forward axis deadzone. Value from 0 to 32767");
|
||||
joy_pitch_deadzone = Cvar_Get( "joy_pitch_deadzone", "0", FCVAR_ARCHIVE, "pitch axis deadzone. Value from 0 to 32767");
|
||||
joy_yaw_deadzone = Cvar_Get( "joy_yaw_deadzone", "0", FCVAR_ARCHIVE, "yaw axis deadzone. Value from 0 to 32767" );
|
||||
joy_side_deadzone = Cvar_Get( "joy_side_deadzone", "0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "side axis deadzone. Value from 0 to 32767" );
|
||||
joy_forward_deadzone = Cvar_Get( "joy_forward_deadzone", "0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "forward axis deadzone. Value from 0 to 32767");
|
||||
joy_pitch_deadzone = Cvar_Get( "joy_pitch_deadzone", "0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "pitch axis deadzone. Value from 0 to 32767");
|
||||
joy_yaw_deadzone = Cvar_Get( "joy_yaw_deadzone", "0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "yaw axis deadzone. Value from 0 to 32767" );
|
||||
|
||||
joy_axis_binding = Cvar_Get( "joy_axis_binding", "sfpyrl", FCVAR_ARCHIVE, "axis hardware id to engine inner axis binding, "
|
||||
joy_axis_binding = Cvar_Get( "joy_axis_binding", "sfpyrl", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "axis hardware id to engine inner axis binding, "
|
||||
"s - side, f - forward, y - yaw, p - pitch, r - left trigger, l - right trigger" );
|
||||
joy_found = Cvar_Get( "joy_found", "0", FCVAR_READ_ONLY, "is joystick is connected" );
|
||||
// we doesn't loaded config.cfg yet, so this cvar is not archive.
|
||||
// change by +set joy_index in cmdline
|
||||
joy_index = Cvar_Get( "joy_index", "0", FCVAR_READ_ONLY, "current active joystick" );
|
||||
|
||||
joy_enable = Cvar_Get( "joy_enable", "1", FCVAR_ARCHIVE, "enable joystick" );
|
||||
joy_enable = Cvar_Get( "joy_enable", "1", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "enable joystick" );
|
||||
|
||||
if( Sys_CheckParm( "-nojoy" ))
|
||||
{
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -111,14 +111,14 @@ IN_StartupMouse
|
|||
*/
|
||||
void IN_StartupMouse( void )
|
||||
{
|
||||
m_ignore = Cvar_Get( "m_ignore", DEFAULT_M_IGNORE, FCVAR_ARCHIVE , "ignore mouse events" );
|
||||
m_ignore = Cvar_Get( "m_ignore", DEFAULT_M_IGNORE, FCVAR_ARCHIVE | FCVAR_FILTERABLE, "ignore mouse events" );
|
||||
|
||||
m_enginemouse = Cvar_Get( "m_enginemouse", "0", FCVAR_ARCHIVE, "read mouse events in engine instead of client" );
|
||||
m_enginesens = Cvar_Get( "m_enginesens", "0.3", FCVAR_ARCHIVE, "mouse sensitivity, when m_enginemouse enabled" );
|
||||
m_pitch = Cvar_Get( "m_pitch", "0.022", FCVAR_ARCHIVE, "mouse pitch value" );
|
||||
m_yaw = Cvar_Get( "m_yaw", "0.022", FCVAR_ARCHIVE, "mouse yaw value" );
|
||||
look_filter = Cvar_Get( "look_filter", "0", FCVAR_ARCHIVE, "filter look events making it smoother" );
|
||||
m_rawinput = Cvar_Get( "m_rawinput", "1", FCVAR_ARCHIVE, "enable mouse raw input" );
|
||||
m_enginemouse = Cvar_Get( "m_enginemouse", "0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "read mouse events in engine instead of client" );
|
||||
m_enginesens = Cvar_Get( "m_enginesens", "0.3", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "mouse sensitivity, when m_enginemouse enabled" );
|
||||
m_pitch = Cvar_Get( "m_pitch", "0.022", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "mouse pitch value" );
|
||||
m_yaw = Cvar_Get( "m_yaw", "0.022", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "mouse yaw value" );
|
||||
look_filter = Cvar_Get( "look_filter", "0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "filter look events making it smoother" );
|
||||
m_rawinput = Cvar_Get( "m_rawinput", "1", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "enable mouse raw input" );
|
||||
|
||||
// You can use -nomouse argument to prevent using mouse from client
|
||||
// -noenginemouse will disable all mouse input
|
||||
|
@ -462,9 +462,9 @@ IN_Init
|
|||
*/
|
||||
void IN_Init( void )
|
||||
{
|
||||
cl_forwardspeed = Cvar_Get( "cl_forwardspeed", "400", FCVAR_ARCHIVE | FCVAR_CLIENTDLL, "Default forward move speed" );
|
||||
cl_backspeed = Cvar_Get( "cl_backspeed", "400", FCVAR_ARCHIVE | FCVAR_CLIENTDLL, "Default back move speed" );
|
||||
cl_sidespeed = Cvar_Get( "cl_sidespeed", "400", FCVAR_ARCHIVE | FCVAR_CLIENTDLL, "Default side move speed" );
|
||||
cl_forwardspeed = Cvar_Get( "cl_forwardspeed", "400", FCVAR_ARCHIVE | FCVAR_CLIENTDLL | FCVAR_FILTERABLE, "Default forward move speed" );
|
||||
cl_backspeed = Cvar_Get( "cl_backspeed", "400", FCVAR_ARCHIVE | FCVAR_CLIENTDLL | FCVAR_FILTERABLE, "Default back move speed" );
|
||||
cl_sidespeed = Cvar_Get( "cl_sidespeed", "400", FCVAR_ARCHIVE | FCVAR_CLIENTDLL | FCVAR_FILTERABLE, "Default side move speed" );
|
||||
|
||||
if( !Host_IsDedicated() )
|
||||
{
|
||||
|
|
|
@ -61,12 +61,9 @@ extern convar_t *touch_enable;
|
|||
extern convar_t *touch_emulate;
|
||||
|
||||
void Touch_Draw( void );
|
||||
void Touch_SetClientOnly( qboolean state );
|
||||
void Touch_RemoveButton( const char *name );
|
||||
void Touch_HideButtons( const char *name, unsigned char hide );
|
||||
//void IN_TouchSetCommand( const char *name, const char *command );
|
||||
//void IN_TouchSetTexture( const char *name, const char *texture );
|
||||
//void IN_TouchSetColor( const char *name, byte *color );
|
||||
void Touch_SetClientOnly( byte state );
|
||||
void Touch_RemoveButton( const char *name, qboolean privileged );
|
||||
void Touch_HideButtons( const char *name, unsigned char hide, qboolean privileged );
|
||||
void Touch_AddClientButton( const char *name, const char *texture, const char *command, float x1, float y1, float x2, float y2, byte *color, int round, float aspect, int flags );
|
||||
void Touch_AddDefaultButton( const char *name, const char *texturefile, const char *command, float x1, float y1, float x2, float y2, byte *color, int round, float aspect, int flags );
|
||||
void Touch_WriteConfig( void );
|
||||
|
|
|
@ -462,6 +462,7 @@ Writes lines containing "bind key value"
|
|||
void Key_WriteBindings( file_t *f )
|
||||
{
|
||||
int i;
|
||||
string newCommand;
|
||||
|
||||
if( !f ) return;
|
||||
|
||||
|
@ -472,7 +473,8 @@ void Key_WriteBindings( file_t *f )
|
|||
if( !COM_CheckString( keys[i].binding ))
|
||||
continue;
|
||||
|
||||
FS_Printf( f, "bind %s \"%s\"\n", Key_KeynumToString( i ), keys[i].binding );
|
||||
Cmd_Escape( newCommand, keys[i].binding, sizeof( newCommand ));
|
||||
FS_Printf( f, "bind %s \"%s\"\n", Key_KeynumToString( i ), newCommand );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -512,18 +514,18 @@ void Key_Init( void )
|
|||
keyname_t *kn;
|
||||
|
||||
// register our functions
|
||||
Cmd_AddCommand( "bind", Key_Bind_f, "binds a command to the specified key in bindmap" );
|
||||
Cmd_AddCommand( "unbind", Key_Unbind_f, "removes a command on the specified key in bindmap" );
|
||||
Cmd_AddCommand( "unbindall", Key_Unbindall_f, "removes all commands from all keys in bindmap" );
|
||||
Cmd_AddCommand( "resetkeys", Key_Reset_f, "reset all keys to their default values" );
|
||||
Cmd_AddRestrictedCommand( "bind", Key_Bind_f, "binds a command to the specified key in bindmap" );
|
||||
Cmd_AddRestrictedCommand( "unbind", Key_Unbind_f, "removes a command on the specified key in bindmap" );
|
||||
Cmd_AddRestrictedCommand( "unbindall", Key_Unbindall_f, "removes all commands from all keys in bindmap" );
|
||||
Cmd_AddRestrictedCommand( "resetkeys", Key_Reset_f, "reset all keys to their default values" );
|
||||
Cmd_AddCommand( "bindlist", Key_Bindlist_f, "display current key bindings" );
|
||||
Cmd_AddCommand( "makehelp", Key_EnumCmds_f, "write help.txt that contains all console cvars and cmds" );
|
||||
|
||||
// setup default binding. "unbindall" from config.cfg will be reset it
|
||||
for( kn = keynames; kn->name; kn++ ) Key_SetBinding( kn->keynum, kn->binding );
|
||||
|
||||
osk_enable = Cvar_Get( "osk_enable", "0", FCVAR_ARCHIVE, "enable built-in on-screen keyboard" );
|
||||
key_rotate = Cvar_Get( "key_rotate", "0", FCVAR_ARCHIVE, "rotate arrow keys (0-3)" );
|
||||
osk_enable = Cvar_Get( "osk_enable", "0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "enable built-in on-screen keyboard" );
|
||||
key_rotate = Cvar_Get( "key_rotate", "0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "rotate arrow keys (0-3)" );
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ convar_t *gl_showtextures;
|
|||
convar_t *r_decals;
|
||||
convar_t *r_adjust_fov;
|
||||
convar_t *r_showtree;
|
||||
convar_t *gl_wgl_msaa_samples;
|
||||
convar_t *gl_msaa_samples;
|
||||
convar_t *gl_clear;
|
||||
convar_t *r_refdll;
|
||||
|
||||
|
@ -385,11 +385,9 @@ static ref_api_t gEngfuncs =
|
|||
pfnDrawTransparentTriangles,
|
||||
&clgame.drawFuncs,
|
||||
|
||||
#ifdef XASH_VULKAN
|
||||
XVK_GetInstanceExtensions,
|
||||
XVK_GetVkGetInstanceProcAddr,
|
||||
XVK_CreateSurface,
|
||||
#endif
|
||||
};
|
||||
|
||||
static void R_UnloadProgs( void )
|
||||
|
@ -648,11 +646,28 @@ qboolean R_Init( void )
|
|||
gl_showtextures = Cvar_Get( "r_showtextures", "0", FCVAR_CHEAT, "show all uploaded textures" );
|
||||
r_adjust_fov = Cvar_Get( "r_adjust_fov", "1", FCVAR_ARCHIVE, "making FOV adjustment for wide-screens" );
|
||||
r_decals = Cvar_Get( "r_decals", "4096", FCVAR_ARCHIVE, "sets the maximum number of decals" );
|
||||
gl_wgl_msaa_samples = Cvar_Get( "gl_wgl_msaa_samples", "0", FCVAR_GLCONFIG, "samples number for multisample anti-aliasing" );
|
||||
gl_msaa_samples = Cvar_Get( "gl_msaa_samples", "0", FCVAR_GLCONFIG, "samples number for multisample anti-aliasing" );
|
||||
gl_clear = Cvar_Get( "gl_clear", "0", FCVAR_ARCHIVE, "clearing screen after each frame" );
|
||||
r_showtree = Cvar_Get( "r_showtree", "0", FCVAR_ARCHIVE, "build the graph of visible BSP tree" );
|
||||
r_refdll = Cvar_Get( "r_refdll", "", FCVAR_RENDERINFO|FCVAR_VIDRESTART, "choose renderer implementation, if supported" );
|
||||
|
||||
// cvars that are expected to exist
|
||||
Cvar_Get( "r_speeds", "0", FCVAR_ARCHIVE, "shows renderer speeds" );
|
||||
Cvar_Get( "r_fullbright", "0", FCVAR_CHEAT, "disable lightmaps, get fullbright for entities" );
|
||||
Cvar_Get( "r_norefresh", "0", 0, "disable 3D rendering (use with caution)" );
|
||||
Cvar_Get( "r_dynamic", "1", FCVAR_ARCHIVE, "allow dynamic lighting (dlights, lightstyles)" );
|
||||
Cvar_Get( "r_lightmap", "0", FCVAR_CHEAT, "lightmap debugging tool" );
|
||||
Cvar_Get( "tracerred", "0.8", 0, "tracer red component weight ( 0 - 1.0 )" );
|
||||
Cvar_Get( "tracergreen", "0.8", 0, "tracer green component weight ( 0 - 1.0 )" );
|
||||
Cvar_Get( "tracerblue", "0.4", 0, "tracer blue component weight ( 0 - 1.0 )" );
|
||||
Cvar_Get( "traceralpha", "0.5", 0, "tracer alpha amount ( 0 - 1.0 )" );
|
||||
|
||||
Cvar_Get( "r_sprite_lerping", "1", FCVAR_ARCHIVE, "enables sprite animation lerping" );
|
||||
Cvar_Get( "r_sprite_lighting", "1", FCVAR_ARCHIVE, "enables sprite lighting (blood etc)" );
|
||||
|
||||
Cvar_Get( "r_drawviewmodel", "1", 0, "draw firstperson weapon model" );
|
||||
Cvar_Get( "r_glowshellfreq", "2.2", 0, "glowing shell frequency update" );
|
||||
|
||||
// cvars that are expected to exist by client.dll
|
||||
// refdll should just get pointer to them
|
||||
Cvar_Get( "r_drawentities", "1", FCVAR_CHEAT, "render entities" );
|
||||
|
|
|
@ -141,7 +141,7 @@ wavdata_t *S_LoadSound( sfx_t *sfx )
|
|||
if( Q_stricmp( sfx->name, "*default" ))
|
||||
{
|
||||
// load it from disk
|
||||
if( host_developer.value > 0 && CL_Active() )
|
||||
if( s_warn_late_precache.value > 0 && CL_Active() )
|
||||
Con_Printf( S_WARN "S_LoadSound: late precache of %s\n", sfx->name );
|
||||
|
||||
if( sfx->name[0] == '*' )
|
||||
|
|
|
@ -35,17 +35,18 @@ int total_channels;
|
|||
int soundtime; // sample PAIRS
|
||||
int paintedtime; // sample PAIRS
|
||||
|
||||
static CVAR_DEFINE( s_volume, "volume", "0.7", FCVAR_ARCHIVE, "sound volume" );
|
||||
CVAR_DEFINE( s_musicvolume, "MP3Volume", "1.0", FCVAR_ARCHIVE, "background music volume" );
|
||||
static CVAR_DEFINE( s_mixahead, "_snd_mixahead", "0.12", 0, "how much sound to mix ahead of time" );
|
||||
static CVAR_DEFINE_AUTO( s_show, "0", FCVAR_ARCHIVE, "show playing sounds" );
|
||||
CVAR_DEFINE_AUTO( s_lerping, "0", FCVAR_ARCHIVE, "apply interpolation to sound output" );
|
||||
static CVAR_DEFINE( s_ambient_level, "ambient_level", "0.3", FCVAR_ARCHIVE, "volume of environment noises (water and wind)" );
|
||||
static CVAR_DEFINE( s_ambient_fade, "ambient_fade", "1000", FCVAR_ARCHIVE, "rate of volume fading when client is moving" );
|
||||
static CVAR_DEFINE_AUTO( s_combine_sounds, "0", FCVAR_ARCHIVE, "combine channels with same sounds" );
|
||||
CVAR_DEFINE_AUTO( snd_mute_losefocus, "1", FCVAR_ARCHIVE, "silence the audio when game window loses focus" );
|
||||
static CVAR_DEFINE( s_volume, "volume", "0.7", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "sound volume" );
|
||||
CVAR_DEFINE( s_musicvolume, "MP3Volume", "1.0", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "background music volume" );
|
||||
static CVAR_DEFINE( s_mixahead, "_snd_mixahead", "0.12", FCVAR_FILTERABLE, "how much sound to mix ahead of time" );
|
||||
static CVAR_DEFINE_AUTO( s_show, "0", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "show playing sounds" );
|
||||
CVAR_DEFINE_AUTO( s_lerping, "0", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "apply interpolation to sound output" );
|
||||
static CVAR_DEFINE( s_ambient_level, "ambient_level", "0.3", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "volume of environment noises (water and wind)" );
|
||||
static CVAR_DEFINE( s_ambient_fade, "ambient_fade", "1000", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "rate of volume fading when client is moving" );
|
||||
static CVAR_DEFINE_AUTO( s_combine_sounds, "0", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "combine channels with same sounds" );
|
||||
CVAR_DEFINE_AUTO( snd_mute_losefocus, "1", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "silence the audio when game window loses focus" );
|
||||
CVAR_DEFINE_AUTO( s_test, "0", 0, "engine developer cvar for quick testing new features" );
|
||||
CVAR_DEFINE_AUTO( s_samplecount, "0", FCVAR_ARCHIVE, "sample count (0 for default value)" );
|
||||
CVAR_DEFINE_AUTO( s_samplecount, "0", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "sample count (0 for default value)" );
|
||||
CVAR_DEFINE_AUTO( s_warn_late_precache, "0", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "warn about late precached sounds on client-side" );
|
||||
|
||||
/*
|
||||
=============================================================================
|
||||
|
@ -1880,6 +1881,7 @@ qboolean S_Init( void )
|
|||
Cvar_RegisterVariable( &snd_mute_losefocus );
|
||||
Cvar_RegisterVariable( &s_test );
|
||||
Cvar_RegisterVariable( &s_samplecount );
|
||||
Cvar_RegisterVariable( &s_warn_late_precache );
|
||||
|
||||
Cmd_AddCommand( "play", S_Play_f, "playing a specified sound file" );
|
||||
Cmd_AddCommand( "play2", S_Play2_f, "playing a group of specified sound files" ); // nehahra stuff
|
||||
|
|
|
@ -222,6 +222,7 @@ extern convar_t *dsp_off;
|
|||
extern convar_t s_test; // cvar to testify new effects
|
||||
extern convar_t s_samplecount;
|
||||
extern convar_t snd_mute_losefocus;
|
||||
extern convar_t s_warn_late_precache;
|
||||
|
||||
void S_InitScaletable( void );
|
||||
wavdata_t *S_LoadSound( sfx_t *sfx );
|
||||
|
|
|
@ -190,7 +190,7 @@ void VID_Init( void )
|
|||
|
||||
// a1ba: planned to be named vid_mode for compability
|
||||
// but supported mode list is filled by backends, so numbers are not portable any more
|
||||
Cmd_AddCommand( "vid_setmode", VID_Mode_f, "display video mode" );
|
||||
Cmd_AddRestrictedCommand( "vid_setmode", VID_Mode_f, "display video mode" );
|
||||
|
||||
R_Init(); // init renderer
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ extern convar_t *vid_highdpi;
|
|||
extern convar_t *vid_rotate;
|
||||
extern convar_t *vid_scale;
|
||||
|
||||
extern convar_t *gl_wgl_msaa_samples;
|
||||
extern convar_t *gl_msaa_samples;
|
||||
void R_SaveVideoMode( int w, int h, int render_w, int render_h );
|
||||
void VID_CheckChanges( void );
|
||||
const char *VID_GetModeString( int vid_mode );
|
||||
|
|
|
@ -30,11 +30,15 @@ typedef struct
|
|||
} cmdbuf_t;
|
||||
|
||||
qboolean cmd_wait;
|
||||
cmdbuf_t cmd_text;
|
||||
cmdbuf_t cmd_text, filteredcmd_text;
|
||||
byte cmd_text_buf[MAX_CMD_BUFFER];
|
||||
byte filteredcmd_text_buf[MAX_CMD_BUFFER];
|
||||
cmdalias_t *cmd_alias;
|
||||
uint cmd_condition;
|
||||
int cmd_condlevel;
|
||||
static qboolean cmd_currentCommandIsPrivileged;
|
||||
|
||||
static void Cmd_ExecuteStringWithPrivilegeCheck( const char *text, qboolean isPrivileged );
|
||||
|
||||
/*
|
||||
=============================================================================
|
||||
|
@ -52,8 +56,10 @@ Cbuf_Init
|
|||
void Cbuf_Init( void )
|
||||
{
|
||||
cmd_text.data = cmd_text_buf;
|
||||
cmd_text.maxsize = MAX_CMD_BUFFER;
|
||||
cmd_text.cursize = 0;
|
||||
filteredcmd_text.data = filteredcmd_text_buf;
|
||||
|
||||
filteredcmd_text.maxsize = cmd_text.maxsize = MAX_CMD_BUFFER;
|
||||
filteredcmd_text.cursize = cmd_text.cursize = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -63,8 +69,9 @@ Cbuf_Clear
|
|||
*/
|
||||
void Cbuf_Clear( void )
|
||||
{
|
||||
memset( cmd_text.data, 0, sizeof( cmd_text_buf ));
|
||||
cmd_text.cursize = 0;
|
||||
memset( cmd_text.data, 0, cmd_text.maxsize );
|
||||
memset( filteredcmd_text.data, 0, filteredcmd_text.maxsize );
|
||||
cmd_text.cursize = filteredcmd_text.cursize = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -88,6 +95,19 @@ void *Cbuf_GetSpace( cmdbuf_t *buf, int length )
|
|||
return data;
|
||||
}
|
||||
|
||||
static void Cbuf_AddTextToBuffer( cmdbuf_t *buf, const char *text )
|
||||
{
|
||||
int l = Q_strlen( text );
|
||||
|
||||
if(( buf->cursize + l ) >= buf->maxsize )
|
||||
{
|
||||
Con_Reportf( S_WARN "%s: overflow\n", __func__ );
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy( Cbuf_GetSpace( buf, l ), text, l );
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
Cbuf_AddText
|
||||
|
@ -97,16 +117,17 @@ Adds command text at the end of the buffer
|
|||
*/
|
||||
void Cbuf_AddText( const char *text )
|
||||
{
|
||||
int l = Q_strlen( text );
|
||||
Cbuf_AddTextToBuffer( &cmd_text, text );
|
||||
}
|
||||
|
||||
if(( cmd_text.cursize + l ) >= cmd_text.maxsize )
|
||||
{
|
||||
Con_Reportf( S_WARN "Cbuf_AddText: overflow\n" );
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy( Cbuf_GetSpace( &cmd_text, l ), text, l );
|
||||
}
|
||||
/*
|
||||
============
|
||||
Cbuf_AddFilteredText
|
||||
============
|
||||
*/
|
||||
void Cbuf_AddFilteredText( const char *text )
|
||||
{
|
||||
Cbuf_AddTextToBuffer( &filteredcmd_text, text );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -117,43 +138,55 @@ Adds command text immediately after the current command
|
|||
Adds a \n to the text
|
||||
============
|
||||
*/
|
||||
void Cbuf_InsertText( const char *text )
|
||||
static void Cbuf_InsertTextToBuffer( cmdbuf_t *buf, const char *text )
|
||||
{
|
||||
int l = Q_strlen( text );
|
||||
|
||||
if(( cmd_text.cursize + l ) >= cmd_text.maxsize )
|
||||
if(( buf->cursize + l ) >= buf->maxsize )
|
||||
{
|
||||
Con_Reportf( S_WARN "Cbuf_InsertText: overflow\n" );
|
||||
}
|
||||
else
|
||||
{
|
||||
memmove( cmd_text.data + l, cmd_text.data, cmd_text.cursize );
|
||||
memcpy( cmd_text.data, text, l );
|
||||
cmd_text.cursize += l;
|
||||
memmove( buf->data + l, buf->data, buf->cursize );
|
||||
memcpy( buf->data, text, l );
|
||||
buf->cursize += l;
|
||||
}
|
||||
}
|
||||
|
||||
void Cbuf_InsertText( const char *text )
|
||||
{
|
||||
Cbuf_InsertTextToBuffer( &cmd_text, text );
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
Cbuf_Execute
|
||||
============
|
||||
*/
|
||||
void Cbuf_Execute( void )
|
||||
void Cbuf_ExecuteCommandsFromBuffer( cmdbuf_t *buf, qboolean isPrivileged, int cmdsToExecute )
|
||||
{
|
||||
char *text;
|
||||
char line[MAX_CMD_LINE];
|
||||
int i, quotes;
|
||||
char *comment;
|
||||
|
||||
while( cmd_text.cursize )
|
||||
while( buf->cursize )
|
||||
{
|
||||
// limit amount of commands that can be issued
|
||||
if( cmdsToExecute >= 0 )
|
||||
{
|
||||
if( !cmdsToExecute-- )
|
||||
break;
|
||||
}
|
||||
|
||||
// find a \n or ; line break
|
||||
text = (char *)cmd_text.data;
|
||||
text = (char *)buf->data;
|
||||
|
||||
quotes = false;
|
||||
comment = NULL;
|
||||
|
||||
for( i = 0; i < cmd_text.cursize; i++ )
|
||||
for( i = 0; i < buf->cursize; i++ )
|
||||
{
|
||||
if( !comment )
|
||||
{
|
||||
|
@ -162,7 +195,7 @@ void Cbuf_Execute( void )
|
|||
if( quotes )
|
||||
{
|
||||
// make sure i doesn't get > cursize which causes a negative size in memmove, which is fatal --blub
|
||||
if( i < ( cmd_text.cursize - 1 ) && ( text[i+0] == '\\' && (text[i+1] == '"' || text[i+1] == '\\')))
|
||||
if( i < ( buf->cursize - 1 ) && ( text[i+0] == '\\' && (text[i+1] == '"' || text[i+1] == '\\')))
|
||||
i++;
|
||||
}
|
||||
else
|
||||
|
@ -191,19 +224,19 @@ void Cbuf_Execute( void )
|
|||
// delete the text from the command buffer and move remaining commands down
|
||||
// this is necessary because commands (exec) can insert data at the
|
||||
// beginning of the text buffer
|
||||
if( i == cmd_text.cursize )
|
||||
if( i == buf->cursize )
|
||||
{
|
||||
cmd_text.cursize = 0;
|
||||
buf->cursize = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
cmd_text.cursize -= i;
|
||||
memmove( cmd_text.data, text + i, cmd_text.cursize );
|
||||
buf->cursize -= i;
|
||||
memmove( buf->data, text + i, buf->cursize );
|
||||
}
|
||||
|
||||
// execute the command line
|
||||
Cmd_ExecuteString( line );
|
||||
Cmd_ExecuteStringWithPrivilegeCheck( line, isPrivileged );
|
||||
|
||||
if( cmd_wait )
|
||||
{
|
||||
|
@ -215,6 +248,20 @@ void Cbuf_Execute( void )
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
Cbuf_Execute
|
||||
============
|
||||
*/
|
||||
void Cbuf_Execute( void )
|
||||
{
|
||||
Cbuf_ExecuteCommandsFromBuffer( &cmd_text, true, -1 );
|
||||
// a1ba: unlimited commands for filtered buffer per frame
|
||||
// I don't see any sense in restricting that at this moment
|
||||
// but in future we may limit this
|
||||
Cbuf_ExecuteCommandsFromBuffer( &filteredcmd_text, false, -1 );
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
Cbuf_ExecStuffCmds
|
||||
|
@ -282,6 +329,11 @@ void Cbuf_ExecStuffCmds( void )
|
|||
|
||||
==============================================================================
|
||||
*/
|
||||
qboolean Cmd_CurrentCommandIsPrivileged( void )
|
||||
{
|
||||
return cmd_currentCommandIsPrivileged;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_StuffCmds_f
|
||||
|
@ -676,7 +728,7 @@ Cmd_AddRestrictedCommand
|
|||
*/
|
||||
void Cmd_AddRestrictedCommand( const char *cmd_name, xcommand_t function, const char *cmd_desc )
|
||||
{
|
||||
Cmd_AddCommandEx( __FUNCTION__, cmd_name, function, cmd_desc, CMD_LOCALONLY );
|
||||
Cmd_AddCommandEx( __FUNCTION__, cmd_name, function, cmd_desc, CMD_PRIVILEGED );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -696,7 +748,15 @@ Cmd_AddClientCommand
|
|||
*/
|
||||
int GAME_EXPORT Cmd_AddClientCommand( const char *cmd_name, xcommand_t function )
|
||||
{
|
||||
return Cmd_AddCommandEx( __FUNCTION__, cmd_name, function, "client command", CMD_CLIENTDLL );
|
||||
int flags = CMD_CLIENTDLL;
|
||||
|
||||
// a1ba: try to mitigate outdated client.dll vulnerabilities
|
||||
if( !Q_stricmp( cmd_name, "motd_write" ))
|
||||
{
|
||||
flags |= CMD_PRIVILEGED;
|
||||
}
|
||||
|
||||
return Cmd_AddCommandEx( __FUNCTION__, cmd_name, function, "client command", flags );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -876,6 +936,35 @@ void Cmd_Else_f( void )
|
|||
cmd_condition ^= BIT( cmd_condlevel );
|
||||
}
|
||||
|
||||
static qboolean Cmd_ShouldAllowCommand( cmd_t *cmd, qboolean isPrivileged )
|
||||
{
|
||||
const char *prefixes[] = { "cl_", "gl_", "r_", "m_", "hud_" };
|
||||
int i;
|
||||
|
||||
// always allow local commands
|
||||
if( isPrivileged )
|
||||
return true;
|
||||
|
||||
// never allow local only commands from remote
|
||||
if( FBitSet( cmd->flags, CMD_PRIVILEGED ))
|
||||
return false;
|
||||
|
||||
// allow engine commands if user don't mind
|
||||
if( cl_filterstuffcmd.value <= 0.0f )
|
||||
return true;
|
||||
|
||||
if( FBitSet( cmd->flags, CMD_FILTERABLE ))
|
||||
return false;
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( prefixes ); i++ )
|
||||
{
|
||||
if( !Q_strnicmp( cmd->name, prefixes[i], Q_strlen( prefixes[i] )))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
Cmd_ExecuteString
|
||||
|
@ -883,7 +972,7 @@ Cmd_ExecuteString
|
|||
A complete command line has been parsed, so try to execute it
|
||||
============
|
||||
*/
|
||||
void Cmd_ExecuteString( const char *text )
|
||||
static void Cmd_ExecuteStringWithPrivilegeCheck( const char *text, qboolean isPrivileged )
|
||||
{
|
||||
cmd_t *cmd = NULL;
|
||||
cmdalias_t *a = NULL;
|
||||
|
@ -895,7 +984,7 @@ void Cmd_ExecuteString( const char *text )
|
|||
cmd_condlevel = 0;
|
||||
|
||||
// cvar value substitution
|
||||
if( cmd_scripting && cmd_scripting->value )
|
||||
if( CVAR_TO_BOOL( cmd_scripting ))
|
||||
{
|
||||
while( *text )
|
||||
{
|
||||
|
@ -952,44 +1041,56 @@ void Cmd_ExecuteString( const char *text )
|
|||
if( !host.apply_game_config )
|
||||
{
|
||||
// check aliases
|
||||
if( a ) // already found in basecmd
|
||||
if( !a ) // if not found in basecmd
|
||||
{
|
||||
Cbuf_InsertText( a->value );
|
||||
return;
|
||||
for( a = cmd_alias; a; a = a->next )
|
||||
{
|
||||
if( !Q_stricmp( cmd_argv[0], a->name ))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for( a = cmd_alias; a; a = a->next )
|
||||
if( a )
|
||||
{
|
||||
if( !Q_stricmp( cmd_argv[0], a->name ))
|
||||
{
|
||||
Cbuf_InsertText( a->value );
|
||||
return;
|
||||
}
|
||||
Cbuf_InsertTextToBuffer(
|
||||
isPrivileged ? &cmd_text : &filteredcmd_text,
|
||||
a->value );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// special mode for restore game.dll archived cvars
|
||||
if( !host.apply_game_config || !Q_strcmp( cmd_argv[0], "exec" ))
|
||||
{
|
||||
// check functions
|
||||
if( cmd && cmd->function ) // already found in basecmd
|
||||
if( !cmd || !cmd->function ) // if not found in basecmd
|
||||
{
|
||||
cmd->function();
|
||||
return;
|
||||
for( cmd = cmd_functions; cmd; cmd = cmd->next )
|
||||
{
|
||||
if( !Q_stricmp( cmd_argv[0], cmd->name ) && cmd->function )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for( cmd = cmd_functions; cmd; cmd = cmd->next )
|
||||
// check functions
|
||||
if( cmd && cmd->function )
|
||||
{
|
||||
if( !Q_stricmp( cmd_argv[0], cmd->name ) && cmd->function )
|
||||
if( Cmd_ShouldAllowCommand( cmd, isPrivileged ))
|
||||
{
|
||||
cmd_currentCommandIsPrivileged = isPrivileged;
|
||||
cmd->function();
|
||||
return;
|
||||
cmd_currentCommandIsPrivileged = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Con_Printf( S_WARN "Could not execute privileged command %s\n", cmd->name );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// check cvars
|
||||
if( Cvar_Command( cvar )) return;
|
||||
if( Cvar_CommandWithPrivilegeCheck( cvar, isPrivileged )) return;
|
||||
|
||||
if( host.apply_game_config )
|
||||
return; // don't send nothing to server: we is a server!
|
||||
|
@ -1011,6 +1112,11 @@ void Cmd_ExecuteString( const char *text )
|
|||
}
|
||||
}
|
||||
|
||||
void Cmd_ExecuteString( const char *text )
|
||||
{
|
||||
Cmd_ExecuteStringWithPrivilegeCheck( text, true );
|
||||
}
|
||||
|
||||
/*
|
||||
===================
|
||||
Cmd_ForwardToServer
|
||||
|
@ -1225,9 +1331,43 @@ void Cmd_Null_f( void )
|
|||
{
|
||||
}
|
||||
|
||||
/*
|
||||
==========
|
||||
Cmd_Escape
|
||||
|
||||
inserts escape sequences
|
||||
==========
|
||||
*/
|
||||
void Cmd_Escape( char *newCommand, const char *oldCommand, int len )
|
||||
{
|
||||
int c;
|
||||
int scripting = CVAR_TO_BOOL( cmd_scripting );
|
||||
|
||||
while( (c = *oldCommand++) && len > 1 )
|
||||
{
|
||||
if( c == '"' )
|
||||
{
|
||||
*newCommand++ = '\\';
|
||||
len--;
|
||||
}
|
||||
|
||||
if( scripting && c == '$')
|
||||
{
|
||||
*newCommand++ = '$';
|
||||
len--;
|
||||
}
|
||||
|
||||
*newCommand++ = c; len--;
|
||||
}
|
||||
|
||||
*newCommand++ = 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
============
|
||||
Cmd_Init
|
||||
|
||||
============
|
||||
*/
|
||||
void Cmd_Init( void )
|
||||
|
@ -1259,3 +1399,64 @@ void Cmd_Init( void )
|
|||
Cmd_AddCommand( "basecmd_test", BaseCmd_Test_f, "test basecmd" );
|
||||
#endif
|
||||
}
|
||||
|
||||
#if XASH_ENGINE_TESTS
|
||||
#include "tests.h"
|
||||
|
||||
enum
|
||||
{
|
||||
NO_CALL = 0,
|
||||
PRIV = 1,
|
||||
UNPRIV = 2
|
||||
};
|
||||
|
||||
static int test_flags[3] = { NO_CALL, NO_CALL, NO_CALL };
|
||||
|
||||
static void Test_PrivilegedCommand_f( void )
|
||||
{
|
||||
test_flags[0] = Cmd_CurrentCommandIsPrivileged() ? PRIV : UNPRIV;
|
||||
}
|
||||
|
||||
static void Test_UnprivilegedCommand_f( void )
|
||||
{
|
||||
test_flags[1] = Cmd_CurrentCommandIsPrivileged() ? PRIV : UNPRIV;
|
||||
}
|
||||
|
||||
static void Test_FilteredCommand_f( void )
|
||||
{
|
||||
test_flags[2] = Cmd_CurrentCommandIsPrivileged() ? PRIV : UNPRIV;
|
||||
}
|
||||
|
||||
void Test_RunCmd( void )
|
||||
{
|
||||
Cmd_AddCommand( "test_privileged", Test_PrivilegedCommand_f, "bark bark" );
|
||||
Cmd_AddRestrictedCommand( "test_unprivileged", Test_UnprivilegedCommand_f, "meow meow" );
|
||||
Cmd_AddCommand( "hud_filtered", Test_FilteredCommand_f, "dummy description" );
|
||||
|
||||
Cbuf_AddText( "test_privileged; test_unprivileged; hud_filtered\n" );
|
||||
Cbuf_Execute();
|
||||
TASSERT( test_flags[0] == PRIV );
|
||||
TASSERT( test_flags[1] == PRIV );
|
||||
TASSERT( test_flags[2] == PRIV );
|
||||
|
||||
VectorSet( test_flags, NO_CALL, NO_CALL, NO_CALL );
|
||||
Cvar_DirectSet( &cl_filterstuffcmd, "0" );
|
||||
Cbuf_AddFilteredText( "test_privileged; test_unprivileged; hud_filtered\n" );
|
||||
Cbuf_Execute();
|
||||
TASSERT( test_flags[0] == UNPRIV );
|
||||
TASSERT( test_flags[1] == NO_CALL );
|
||||
TASSERT( test_flags[2] == UNPRIV );
|
||||
|
||||
VectorSet( test_flags, NO_CALL, NO_CALL, NO_CALL );
|
||||
Cvar_DirectSet( &cl_filterstuffcmd, "1" );
|
||||
Cbuf_AddFilteredText( "test_privileged; test_unprivileged; hud_filtered\n" );
|
||||
Cbuf_Execute();
|
||||
TASSERT( test_flags[0] == UNPRIV );
|
||||
TASSERT( test_flags[1] == NO_CALL );
|
||||
TASSERT( test_flags[2] == NO_CALL );
|
||||
|
||||
Cmd_RemoveCommand( "hud_filtered" );
|
||||
Cmd_RemoveCommand( "test_unprivileged" );
|
||||
Cmd_RemoveCommand( "test_privileged" );
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -13,6 +13,9 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||
GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#if defined( ALLOCA_H )
|
||||
#include ALLOCA_H
|
||||
#endif
|
||||
#include "common.h"
|
||||
#include "studio.h"
|
||||
#include "xash3d_mathlib.h"
|
||||
|
@ -886,6 +889,10 @@ pfnCvar_RegisterVariable
|
|||
*/
|
||||
cvar_t *pfnCvar_RegisterClientVariable( const char *szName, const char *szValue, int flags )
|
||||
{
|
||||
// a1ba: try to mitigate outdated client.dll vulnerabilities
|
||||
if( !Q_stricmp( szName, "motdfile" ))
|
||||
flags |= FCVAR_PRIVILEGED;
|
||||
|
||||
if( FBitSet( flags, FCVAR_GLCONFIG ))
|
||||
return (cvar_t *)Cvar_Get( szName, szValue, flags, va( CVAR_GLCONFIG_DESCRIPTION, szName ));
|
||||
return (cvar_t *)Cvar_Get( szName, szValue, flags|FCVAR_CLIENTDLL, Cvar_BuildAutoDescription( flags|FCVAR_CLIENTDLL ));
|
||||
|
|
|
@ -184,6 +184,7 @@ extern convar_t host_developer;
|
|||
extern convar_t *host_limitlocal;
|
||||
extern convar_t *host_framerate;
|
||||
extern convar_t *host_maxfps;
|
||||
extern convar_t cl_filterstuffcmd;
|
||||
|
||||
/*
|
||||
==============================================================
|
||||
|
@ -464,8 +465,9 @@ extern sysinfo_t SI;
|
|||
#define CMD_SERVERDLL BIT( 0 ) // added by server.dll
|
||||
#define CMD_CLIENTDLL BIT( 1 ) // added by client.dll
|
||||
#define CMD_GAMEUIDLL BIT( 2 ) // added by GameUI.dll
|
||||
#define CMD_LOCALONLY BIT( 3 ) // restricted from server commands
|
||||
#define CMD_REFDLL BIT( 4 ) // added by ref.dll
|
||||
#define CMD_PRIVILEGED BIT( 3 ) // only available in privileged mode
|
||||
#define CMD_FILTERABLE BIT( 4 ) // filtered in unprivileged mode if cl_filterstuffcmd is 1
|
||||
#define CMD_REFDLL BIT( 5 ) // added by ref.dll
|
||||
|
||||
typedef void (*xcommand_t)( void );
|
||||
|
||||
|
@ -475,9 +477,11 @@ typedef void (*xcommand_t)( void );
|
|||
void Cbuf_Init( void );
|
||||
void Cbuf_Clear( void );
|
||||
void Cbuf_AddText( const char *text );
|
||||
void Cbuf_AddFilteredText( const char *text );
|
||||
void Cbuf_InsertText( const char *text );
|
||||
void Cbuf_ExecStuffCmds( void );
|
||||
void Cbuf_Execute (void);
|
||||
qboolean Cmd_CurrentCommandIsPrivileged( void );
|
||||
int Cmd_Argc( void );
|
||||
const char *Cmd_Args( void );
|
||||
const char *Cmd_Argv( int arg );
|
||||
|
@ -499,6 +503,7 @@ qboolean Cmd_GetMovieList( const char *s, char *completedname, int length );
|
|||
void Cmd_TokenizeString( const char *text );
|
||||
void Cmd_ExecuteString( const char *text );
|
||||
void Cmd_ForwardToServer( void );
|
||||
void Cmd_Escape( char *newCommand, const char *oldCommand, int len );
|
||||
|
||||
//
|
||||
// zone.c
|
||||
|
@ -589,7 +594,7 @@ qboolean FS_SaveImage( const char *filename, rgbdata_t *pix );
|
|||
rgbdata_t *FS_CopyImage( rgbdata_t *in );
|
||||
void FS_FreeImage( rgbdata_t *pack );
|
||||
extern const bpc_desc_t PFDesc[]; // image get pixelformat
|
||||
qboolean Image_Process( rgbdata_t **pix, int width, int height, uint flags, float bumpscale );
|
||||
qboolean Image_Process( rgbdata_t **pix, int width, int height, uint flags, float reserved );
|
||||
void Image_PaletteHueReplace( byte *palSrc, int newHue, int start, int end, int pal_size );
|
||||
void Image_PaletteTranslate( byte *palSrc, int top, int bottom, int pal_size );
|
||||
void Image_SetForceFlags( uint flags ); // set image force flags on loading
|
||||
|
|
|
@ -16,10 +16,13 @@ GNU General Public License for more details.
|
|||
#include <math.h> // fabs...
|
||||
#include "common.h"
|
||||
#include "base_cmd.h"
|
||||
#include "eiface.h" // ARRAYSIZE
|
||||
|
||||
convar_t *cvar_vars = NULL; // head of list
|
||||
convar_t *cmd_scripting;
|
||||
|
||||
CVAR_DEFINE_AUTO( cl_filterstuffcmd, "1", FCVAR_ARCHIVE | FCVAR_PRIVILEGED, "filter commands coming from server" );
|
||||
|
||||
/*
|
||||
============
|
||||
Cvar_GetList
|
||||
|
@ -71,7 +74,7 @@ build cvar auto description that based on the setup flags
|
|||
*/
|
||||
const char *Cvar_BuildAutoDescription( int flags )
|
||||
{
|
||||
static char desc[128];
|
||||
static char desc[256];
|
||||
|
||||
desc[0] = '\0';
|
||||
|
||||
|
@ -91,6 +94,12 @@ const char *Cvar_BuildAutoDescription( int flags )
|
|||
if( FBitSet( flags, FCVAR_ARCHIVE ))
|
||||
Q_strncat( desc, "archived ", sizeof( desc ));
|
||||
|
||||
if( FBitSet( flags, FCVAR_PROTECTED ))
|
||||
Q_strncat( desc, "protected ", sizeof( desc ));
|
||||
|
||||
if( FBitSet( flags, FCVAR_PRIVILEGED ))
|
||||
Q_strncat( desc, "privileged ", sizeof( desc ));
|
||||
|
||||
Q_strncat( desc, "cvar", sizeof( desc ));
|
||||
|
||||
return desc;
|
||||
|
@ -510,8 +519,7 @@ void Cvar_DirectSet( convar_t *var, const char *value )
|
|||
if( var != Cvar_FindVar( var->name ))
|
||||
return; // how this possible?
|
||||
|
||||
//if( FBitSet( var->flags, FCVAR_READ_ONLY|FCVAR_GLCONFIG ))
|
||||
if( FBitSet( var->flags, FCVAR_READ_ONLY )) // TODO: fix order VK init render or fix this GL-eccentric
|
||||
if( FBitSet( var->flags, FCVAR_READ_ONLY ))
|
||||
{
|
||||
Con_Printf( "%s is read-only.\n", var->name );
|
||||
return;
|
||||
|
@ -755,6 +763,32 @@ static void Cvar_SetGL( const char *name, const char *value )
|
|||
Cvar_FullSet( name, value, FCVAR_GLCONFIG );
|
||||
}
|
||||
|
||||
static qboolean Cvar_ShouldSetCvar( convar_t *v, qboolean isPrivileged )
|
||||
{
|
||||
const char *prefixes[] = { "cl_", "gl_", "m_", "r_", "hud_" };
|
||||
int i;
|
||||
|
||||
if( isPrivileged )
|
||||
return true;
|
||||
|
||||
if( FBitSet( v->flags, FCVAR_PRIVILEGED ))
|
||||
return false;
|
||||
|
||||
if( cl_filterstuffcmd.value <= 0.0f )
|
||||
return true;
|
||||
|
||||
if( FBitSet( v->flags, FCVAR_FILTERABLE ))
|
||||
return false;
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( prefixes ); i++ )
|
||||
{
|
||||
if( !Q_strnicmp( v->name, prefixes[i], Q_strlen( prefixes[i] )))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
Cvar_Command
|
||||
|
@ -762,7 +796,7 @@ Cvar_Command
|
|||
Handles variable inspection and changing from the console
|
||||
============
|
||||
*/
|
||||
qboolean Cvar_Command( convar_t *v )
|
||||
qboolean Cvar_CommandWithPrivilegeCheck( convar_t *v, qboolean isPrivileged )
|
||||
{
|
||||
// special case for setup opengl configuration
|
||||
if( host.apply_opengl_config )
|
||||
|
@ -774,7 +808,8 @@ qboolean Cvar_Command( convar_t *v )
|
|||
// check variables
|
||||
if( !v ) // already found in basecmd
|
||||
v = Cvar_FindVar( Cmd_Argv( 0 ));
|
||||
if( !v ) return false;
|
||||
if( !v )
|
||||
return false;
|
||||
|
||||
// perform a variable print or set
|
||||
if( Cmd_Argc() == 1 )
|
||||
|
@ -797,6 +832,11 @@ qboolean Cvar_Command( convar_t *v )
|
|||
Con_Printf( "can't set \"%s\" in multiplayer\n", v->name );
|
||||
return false;
|
||||
}
|
||||
else if( !Cvar_ShouldSetCvar( v, isPrivileged ))
|
||||
{
|
||||
Con_Printf( "%s is a privileged variable\n", v->name );
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Cvar_DirectSet( v, Cmd_Argv( 1 ));
|
||||
|
@ -954,11 +994,59 @@ Reads in all archived cvars
|
|||
void Cvar_Init( void )
|
||||
{
|
||||
cvar_vars = NULL;
|
||||
cmd_scripting = Cvar_Get( "cmd_scripting", "0", FCVAR_ARCHIVE, "enable simple condition checking and variable operations" );
|
||||
cmd_scripting = Cvar_Get( "cmd_scripting", "0", FCVAR_ARCHIVE|FCVAR_PRIVILEGED, "enable simple condition checking and variable operations" );
|
||||
Cvar_RegisterVariable (&host_developer); // early registering for dev
|
||||
Cvar_RegisterVariable( &cl_filterstuffcmd );
|
||||
|
||||
Cmd_AddCommand( "setgl", Cvar_SetGL_f, "change the value of a opengl variable" ); // OBSOLETE
|
||||
Cmd_AddCommand( "toggle", Cvar_Toggle_f, "toggles a console variable's values (use for more info)" );
|
||||
Cmd_AddCommand( "reset", Cvar_Reset_f, "reset any type variable to initial value" );
|
||||
Cmd_AddRestrictedCommand( "setgl", Cvar_SetGL_f, "change the value of a opengl variable" ); // OBSOLETE
|
||||
Cmd_AddRestrictedCommand( "toggle", Cvar_Toggle_f, "toggles a console variable's values (use for more info)" );
|
||||
Cmd_AddRestrictedCommand( "reset", Cvar_Reset_f, "reset any type variable to initial value" );
|
||||
Cmd_AddCommand( "cvarlist", Cvar_List_f, "display all console variables beginning with the specified prefix" );
|
||||
}
|
||||
|
||||
#if XASH_ENGINE_TESTS
|
||||
#include "tests.h"
|
||||
|
||||
void Test_RunCvar( void )
|
||||
{
|
||||
convar_t *test_privileged = Cvar_Get( "test_privileged", "0", FCVAR_PRIVILEGED, "bark bark" );
|
||||
convar_t *test_unprivileged = Cvar_Get( "test_unprivileged", "0", 0, "meow meow" );
|
||||
convar_t *hud_filtered = Cvar_Get( "hud_filtered", "0", 0, "dummy description" );
|
||||
convar_t *filtered2 = Cvar_Get( "filtered2", "0", FCVAR_FILTERABLE, "filtered2" );
|
||||
|
||||
Cbuf_AddText( "test_privileged 1; test_unprivileged 1; hud_filtered 1; filtered2 1\n" );
|
||||
Cbuf_Execute();
|
||||
TASSERT( test_privileged->value != 0.0f );
|
||||
TASSERT( test_unprivileged->value != 0.0f );
|
||||
TASSERT( hud_filtered->value != 0.0f );
|
||||
TASSERT( filtered2->value != 0.0f );
|
||||
|
||||
Cvar_DirectSet( test_privileged, "0" );
|
||||
Cvar_DirectSet( test_unprivileged, "0" );
|
||||
Cvar_DirectSet( hud_filtered, "0" );
|
||||
Cvar_DirectSet( filtered2, "0" );
|
||||
Cvar_DirectSet( &cl_filterstuffcmd, "0" );
|
||||
Cbuf_AddFilteredText( "test_privileged 1; test_unprivileged 1; hud_filtered 1; filtered2 1\n" );
|
||||
Cbuf_Execute();
|
||||
Cbuf_Execute();
|
||||
Cbuf_Execute();
|
||||
TASSERT( test_privileged->value == 0.0f );
|
||||
TASSERT( test_unprivileged->value != 0.0f );
|
||||
TASSERT( hud_filtered->value != 0.0f );
|
||||
TASSERT( filtered2->value != 0.0f );
|
||||
|
||||
Cvar_DirectSet( test_privileged, "0" );
|
||||
Cvar_DirectSet( test_unprivileged, "0" );
|
||||
Cvar_DirectSet( hud_filtered, "0" );
|
||||
Cvar_DirectSet( filtered2, "0" );
|
||||
Cvar_DirectSet( &cl_filterstuffcmd, "1" );
|
||||
Cbuf_AddFilteredText( "test_privileged 1; test_unprivileged 1; hud_filtered 1; filtered2 1\n" );
|
||||
Cbuf_Execute();
|
||||
Cbuf_Execute();
|
||||
Cbuf_Execute();
|
||||
TASSERT( test_privileged->value == 0.0f );
|
||||
TASSERT( test_unprivileged->value != 0.0f );
|
||||
TASSERT( hud_filtered->value == 0.0f );
|
||||
TASSERT( filtered2->value == 0.0f );
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -47,7 +47,7 @@ typedef struct convar_s
|
|||
#define FCVAR_ALLOCATED (1<<19) // this convar_t is fully dynamic allocated (include description)
|
||||
#define FCVAR_VIDRESTART (1<<20) // recreate the window is cvar with this flag was changed
|
||||
#define FCVAR_TEMPORARY (1<<21) // these cvars holds their values and can be unlink in any time
|
||||
#define FCVAR_LOCALONLY (1<<22) // can be set only from local buffers
|
||||
#define FCVAR_MOVEVARS (1<<22) // this cvar is a part of movevars_t struct that shared between client and server
|
||||
|
||||
#define CVAR_DEFINE( cv, cvname, cvstr, cvflags, cvdesc ) \
|
||||
convar_t cv = { (char*)cvname, (char*)cvstr, cvflags, 0.0f, (void *)CVAR_SENTINEL, (char*)cvdesc, NULL }
|
||||
|
@ -75,7 +75,7 @@ void Cvar_WriteVariables( file_t *f, int group );
|
|||
qboolean Cvar_Exists( const char *var_name );
|
||||
void Cvar_Reset( const char *var_name );
|
||||
void Cvar_SetCheatState( void );
|
||||
qboolean Cvar_Command( convar_t *v );
|
||||
qboolean Cvar_CommandWithPrivilegeCheck( convar_t *v, qboolean isPrivileged );
|
||||
void Cvar_Init( void );
|
||||
void Cvar_Unlink( int group );
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ const char *svc_strings[256] =
|
|||
"svc_unused56",
|
||||
"svc_querycvarvalue",
|
||||
"svc_querycvarvalue2",
|
||||
"svc_unused59",
|
||||
"svc_exec",
|
||||
"svc_unused60",
|
||||
"svc_unused61",
|
||||
"svc_unused62",
|
||||
|
|
|
@ -2061,9 +2061,9 @@ void FS_Init( void )
|
|||
|
||||
FS_InitMemory();
|
||||
|
||||
Cmd_AddCommand( "fs_rescan", FS_Rescan_f, "rescan filesystem search pathes" );
|
||||
Cmd_AddCommand( "fs_path", FS_Path_f, "show filesystem search pathes" );
|
||||
Cmd_AddCommand( "fs_clearpaths", FS_ClearPaths_f, "clear filesystem search pathes" );
|
||||
Cmd_AddRestrictedCommand( "fs_rescan", FS_Rescan_f, "rescan filesystem search pathes" );
|
||||
Cmd_AddRestrictedCommand( "fs_path", FS_Path_f, "show filesystem search pathes" );
|
||||
Cmd_AddRestrictedCommand( "fs_clearpaths", FS_ClearPaths_f, "clear filesystem search pathes" );
|
||||
|
||||
#if !XASH_WIN32
|
||||
if( Sys_CheckParm( "-casesensitive" ) )
|
||||
|
|
|
@ -15,6 +15,7 @@ GNU General Public License for more details.
|
|||
|
||||
#include "common.h"
|
||||
#include "xash3d_mathlib.h"
|
||||
#include "enginefeatures.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Gamma conversion support
|
||||
|
@ -78,10 +79,16 @@ void BuildGammaTable( float lightgamma, float brightness )
|
|||
|
||||
byte LightToTexGamma( byte b )
|
||||
{
|
||||
return lightgammatable[b];
|
||||
if( FBitSet( host.features, ENGINE_LINEAR_GAMMA_SPACE ))
|
||||
return b;
|
||||
else
|
||||
return lightgammatable[b];
|
||||
}
|
||||
|
||||
byte TextureToGamma( byte b )
|
||||
{
|
||||
return texgammatable[b];
|
||||
if( FBitSet( host.features, ENGINE_LINEAR_GAMMA_SPACE ))
|
||||
return b;
|
||||
else
|
||||
return texgammatable[b];
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ sysinfo_t SI;
|
|||
struct tests_stats_s tests_stats;
|
||||
#endif
|
||||
|
||||
CVAR_DEFINE( host_developer, "developer", "0", 0, "engine is in development-mode" );
|
||||
CVAR_DEFINE( host_developer, "developer", "0", FCVAR_FILTERABLE, "engine is in development-mode" );
|
||||
CVAR_DEFINE_AUTO( sys_ticrate, "100", 0, "framerate in dedicated mode" );
|
||||
|
||||
convar_t *host_serverstate;
|
||||
|
@ -353,10 +353,11 @@ Host_Exec_f
|
|||
*/
|
||||
void Host_Exec_f( void )
|
||||
{
|
||||
string cfgpath;
|
||||
string cfgpath;
|
||||
byte *f;
|
||||
char *txt;
|
||||
fs_offset_t len;
|
||||
const char *arg;
|
||||
|
||||
if( Cmd_Argc() != 2 )
|
||||
{
|
||||
|
@ -364,14 +365,47 @@ void Host_Exec_f( void )
|
|||
return;
|
||||
}
|
||||
|
||||
if( !Q_stricmp( "game.cfg", Cmd_Argv( 1 )))
|
||||
arg = Cmd_Argv( 1 );
|
||||
|
||||
#ifndef XASH_DEDICATED
|
||||
if( !Cmd_CurrentCommandIsPrivileged() )
|
||||
{
|
||||
const char *unprivilegedWhitelist[] =
|
||||
{
|
||||
NULL, "mapdefault.cfg", "scout.cfg", "sniper.cfg",
|
||||
"soldier.cfg", "demoman.cfg", "medic.cfg", "hwguy.cfg",
|
||||
"pyro.cfg", "spy.cfg", "engineer.cfg", "civilian.cfg"
|
||||
};
|
||||
int i;
|
||||
qboolean allow = false;
|
||||
|
||||
unprivilegedWhitelist[0] = va( "%s.cfg", clgame.mapname );
|
||||
|
||||
for( i = 0; i < ARRAYSIZE( unprivilegedWhitelist ); i++ )
|
||||
{
|
||||
if( !Q_strcmp( arg, unprivilegedWhitelist[i] ))
|
||||
{
|
||||
allow = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( !allow )
|
||||
{
|
||||
Con_Printf( "exec %s: not privileged or in whitelist\n", arg );
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif // XASH_DEDICATED
|
||||
|
||||
if( !Q_stricmp( "game.cfg", arg ))
|
||||
{
|
||||
// don't execute game.cfg in singleplayer
|
||||
if( SV_GetMaxClients() == 1 )
|
||||
return;
|
||||
}
|
||||
|
||||
Q_strncpy( cfgpath, Cmd_Argv( 1 ), sizeof( cfgpath ));
|
||||
Q_strncpy( cfgpath, arg, sizeof( cfgpath ));
|
||||
COM_DefaultExtension( cfgpath, ".cfg" ); // append as default
|
||||
|
||||
f = FS_LoadFile( cfgpath, &len, false );
|
||||
|
@ -381,7 +415,7 @@ void Host_Exec_f( void )
|
|||
return;
|
||||
}
|
||||
|
||||
if( !Q_stricmp( "config.cfg", Cmd_Argv( 1 )))
|
||||
if( !Q_stricmp( "config.cfg", arg ))
|
||||
host.config_executed = true;
|
||||
|
||||
// adds \n\0 at end of the file
|
||||
|
@ -391,7 +425,7 @@ void Host_Exec_f( void )
|
|||
Mem_Free( f );
|
||||
|
||||
if( !host.apply_game_config )
|
||||
Con_Printf( "execing %s\n", Cmd_Argv( 1 ));
|
||||
Con_Printf( "execing %s\n", arg );
|
||||
Cbuf_InsertText( txt );
|
||||
Mem_Free( txt );
|
||||
}
|
||||
|
@ -784,6 +818,8 @@ static void Host_RunTests( int stage )
|
|||
memset( &tests_stats, 0, sizeof( tests_stats ));
|
||||
Test_RunLibCommon();
|
||||
Test_RunCommon();
|
||||
Test_RunCmd();
|
||||
Test_RunCvar();
|
||||
break;
|
||||
case 1: // after FS load
|
||||
Test_RunImagelib();
|
||||
|
@ -990,7 +1026,7 @@ void Host_InitCommon( int argc, char **argv, const char *progname, qboolean bCha
|
|||
|
||||
Cmd_AddCommand( "exec", Host_Exec_f, "execute a script file" );
|
||||
Cmd_AddCommand( "memlist", Host_MemStats_f, "prints memory pool information" );
|
||||
Cmd_AddCommand( "userconfigd", Host_Userconfigd_f, "execute all scripts from userconfig.d" );
|
||||
Cmd_AddRestrictedCommand( "userconfigd", Host_Userconfigd_f, "execute all scripts from userconfig.d" );
|
||||
|
||||
FS_Init();
|
||||
Image_Init();
|
||||
|
@ -1046,15 +1082,15 @@ int EXPORT Host_Main( int argc, char **argv, const char *progname, int bChangeGa
|
|||
// init commands and vars
|
||||
if( host_developer.value >= DEV_EXTENDED )
|
||||
{
|
||||
Cmd_AddCommand ( "sys_error", Sys_Error_f, "just throw a fatal error to test shutdown procedures");
|
||||
Cmd_AddCommand ( "host_error", Host_Error_f, "just throw a host error to test shutdown procedures");
|
||||
Cmd_AddCommand ( "crash", Host_Crash_f, "a way to force a bus error for development reasons");
|
||||
Cmd_AddRestrictedCommand ( "sys_error", Sys_Error_f, "just throw a fatal error to test shutdown procedures");
|
||||
Cmd_AddRestrictedCommand ( "host_error", Host_Error_f, "just throw a host error to test shutdown procedures");
|
||||
Cmd_AddRestrictedCommand ( "crash", Host_Crash_f, "a way to force a bus error for development reasons");
|
||||
}
|
||||
|
||||
host_serverstate = Cvar_Get( "host_serverstate", "0", FCVAR_READ_ONLY, "displays current server state" );
|
||||
host_maxfps = Cvar_Get( "fps_max", "72", FCVAR_ARCHIVE, "host fps upper limit" );
|
||||
host_framerate = Cvar_Get( "host_framerate", "0", 0, "locks frame timing to this value in seconds" );
|
||||
host_sleeptime = Cvar_Get( "sleeptime", "1", FCVAR_ARCHIVE, "milliseconds to sleep for each frame. higher values reduce fps accuracy" );
|
||||
host_maxfps = Cvar_Get( "fps_max", "72", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "host fps upper limit" );
|
||||
host_framerate = Cvar_Get( "host_framerate", "0", FCVAR_FILTERABLE, "locks frame timing to this value in seconds" );
|
||||
host_sleeptime = Cvar_Get( "sleeptime", "1", FCVAR_ARCHIVE|FCVAR_FILTERABLE, "milliseconds to sleep for each frame. higher values reduce fps accuracy" );
|
||||
host_gameloaded = Cvar_Get( "host_gameloaded", "0", FCVAR_READ_ONLY, "inidcates a loaded game.dll" );
|
||||
host_clientloaded = Cvar_Get( "host_clientloaded", "0", FCVAR_READ_ONLY, "inidcates a loaded client.dll" );
|
||||
host_limitlocal = Cvar_Get( "host_limitlocal", "0", 0, "apply cl_cmdrate and rate to loopback connection" );
|
||||
|
@ -1072,7 +1108,7 @@ int EXPORT Host_Main( int argc, char **argv, const char *progname, int bChangeGa
|
|||
// allow to change game from the console
|
||||
if( pChangeGame != NULL )
|
||||
{
|
||||
Cmd_AddCommand( "game", Host_ChangeGame_f, "change game" );
|
||||
Cmd_AddRestrictedCommand( "game", Host_ChangeGame_f, "change game" );
|
||||
Cvar_Get( "host_allow_changegame", "1", FCVAR_READ_ONLY, "allows to change games" );
|
||||
}
|
||||
else
|
||||
|
@ -1092,10 +1128,10 @@ int EXPORT Host_Main( int argc, char **argv, const char *progname, int bChangeGa
|
|||
Wcon_InitConsoleCommands ();
|
||||
#endif
|
||||
|
||||
Cmd_AddCommand( "quit", Sys_Quit, "quit the game" );
|
||||
Cmd_AddCommand( "exit", Sys_Quit, "quit the game" );
|
||||
Cmd_AddRestrictedCommand( "quit", Sys_Quit, "quit the game" );
|
||||
Cmd_AddRestrictedCommand( "exit", Sys_Quit, "quit the game" );
|
||||
}
|
||||
else Cmd_AddCommand( "minimize", Host_Minimize_f, "minimize main window to tray" );
|
||||
else Cmd_AddRestrictedCommand( "minimize", Host_Minimize_f, "minimize main window to tray" );
|
||||
|
||||
host.errorframe = 0;
|
||||
|
||||
|
|
|
@ -1077,10 +1077,10 @@ void HPAK_Validate_f( void )
|
|||
|
||||
void HPAK_Init( void )
|
||||
{
|
||||
Cmd_AddCommand( "hpklist", HPAK_List_f, "list all files in specified HPK-file" );
|
||||
Cmd_AddCommand( "hpkremove", HPAK_Remove_f, "remove specified file from HPK-file" );
|
||||
Cmd_AddCommand( "hpkval", HPAK_Validate_f, "validate specified HPK-file" );
|
||||
Cmd_AddCommand( "hpkextract", HPAK_Extract_f, "extract all lumps from specified HPK-file" );
|
||||
Cmd_AddRestrictedCommand( "hpklist", HPAK_List_f, "list all files in specified HPK-file" );
|
||||
Cmd_AddRestrictedCommand( "hpkremove", HPAK_Remove_f, "remove specified file from HPK-file" );
|
||||
Cmd_AddRestrictedCommand( "hpkval", HPAK_Validate_f, "validate specified HPK-file" );
|
||||
Cmd_AddRestrictedCommand( "hpkextract", HPAK_Extract_f, "extract all lumps from specified HPK-file" );
|
||||
hpk_maxsize = Cvar_Get( "hpk_maxsize", "0", FCVAR_ARCHIVE, "set limit by size for all HPK-files ( 0 - unlimited )" );
|
||||
|
||||
gp_hpak_queue = NULL;
|
||||
|
|
|
@ -614,10 +614,10 @@ void ID_Init( void )
|
|||
byte md5[16];
|
||||
int i;
|
||||
|
||||
Cmd_AddCommand( "bloomfilter", ID_BloomFilter_f, "print bloomfilter raw value of arguments set");
|
||||
Cmd_AddCommand( "verifyhex", ID_VerifyHEX_f, "check if id source seems to be fake" );
|
||||
Cmd_AddRestrictedCommand( "bloomfilter", ID_BloomFilter_f, "print bloomfilter raw value of arguments set");
|
||||
Cmd_AddRestrictedCommand( "verifyhex", ID_VerifyHEX_f, "check if id source seems to be fake" );
|
||||
#if XASH_LINUX
|
||||
Cmd_AddCommand( "testcpuinfo", ID_TestCPUInfo_f, "try read cpu serial" );
|
||||
Cmd_AddRestrictedCommand( "testcpuinfo", ID_TestCPUInfo_f, "try read cpu serial" );
|
||||
#endif
|
||||
|
||||
#if XASH_ANDROID && !XASH_DEDICATED
|
||||
|
|
|
@ -80,15 +80,6 @@ static byte palette_hl[768] =
|
|||
147,255,247,199,255,255,255,159,91,83
|
||||
};
|
||||
|
||||
static float img_emboss[FILTER_SIZE][FILTER_SIZE] =
|
||||
{
|
||||
{-0.7f, -0.7f, -0.7f, -0.7f, 0.0f },
|
||||
{-0.7f, -0.7f, -0.7f, 0.0f, 0.7f },
|
||||
{-0.7f, -0.7f, 0.0f, 0.7f, 0.7f },
|
||||
{-0.7f, 0.0f, 0.7f, 0.7f, 0.7f },
|
||||
{ 0.0f, 0.7f, 0.7f, 0.7f, 0.7f },
|
||||
};
|
||||
|
||||
/*
|
||||
=============================================================================
|
||||
|
||||
|
@ -1368,107 +1359,7 @@ qboolean Image_RemapInternal( rgbdata_t *pic, int topColor, int bottomColor )
|
|||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
==================
|
||||
Image_ApplyFilter
|
||||
|
||||
Applies a 5 x 5 filtering matrix to the texture, then runs it through a simulated OpenGL texture environment
|
||||
blend with the original data to derive a new texture. Freaky, funky, and *f--king* *fantastic*. You can do
|
||||
reasonable enough "fake bumpmapping" with this baby...
|
||||
|
||||
Filtering algorithm from http://www.student.kuleuven.ac.be/~m0216922/CG/filtering.html
|
||||
All credit due
|
||||
==================
|
||||
*/
|
||||
static void Image_ApplyFilter( rgbdata_t *pic, float factor )
|
||||
{
|
||||
int i, x, y;
|
||||
uint *fin, *fout;
|
||||
size_t size;
|
||||
|
||||
// don't waste time
|
||||
if( factor <= 0.0f ) return;
|
||||
|
||||
// first expand the image into 32-bit buffer
|
||||
pic = Image_DecompressInternal( pic );
|
||||
factor = bound( 0.0f, factor, 1.0f );
|
||||
size = image.width * image.height * 4;
|
||||
image.tempbuffer = Mem_Realloc( host.imagepool, image.tempbuffer, size );
|
||||
fout = (uint *)image.tempbuffer;
|
||||
fin = (uint *)pic->buffer;
|
||||
|
||||
for( x = 0; x < image.width; x++ )
|
||||
{
|
||||
for( y = 0; y < image.height; y++ )
|
||||
{
|
||||
vec3_t vout = { 0.0f, 0.0f, 0.0f };
|
||||
int pos_x, pos_y;
|
||||
float avg;
|
||||
|
||||
for( pos_x = 0; pos_x < FILTER_SIZE; pos_x++ )
|
||||
{
|
||||
for( pos_y = 0; pos_y < FILTER_SIZE; pos_y++ )
|
||||
{
|
||||
int img_x = (x - (FILTER_SIZE / 2) + pos_x + image.width) % image.width;
|
||||
int img_y = (y - (FILTER_SIZE / 2) + pos_y + image.height) % image.height;
|
||||
|
||||
// casting's a unary operation anyway, so the othermost set of brackets in the left part
|
||||
// of the rvalue should not be necessary... but i'm paranoid when it comes to C...
|
||||
vout[0] += ((float)((byte *)&fin[img_y * image.width + img_x])[0]) * img_emboss[pos_x][pos_y];
|
||||
vout[1] += ((float)((byte *)&fin[img_y * image.width + img_x])[1]) * img_emboss[pos_x][pos_y];
|
||||
vout[2] += ((float)((byte *)&fin[img_y * image.width + img_x])[2]) * img_emboss[pos_x][pos_y];
|
||||
}
|
||||
}
|
||||
|
||||
// multiply by factor, add bias, and clamp
|
||||
for( i = 0; i < 3; i++ )
|
||||
{
|
||||
vout[i] *= factor;
|
||||
vout[i] += 128.0f; // base
|
||||
vout[i] = bound( 0.0f, vout[i], 255.0f );
|
||||
}
|
||||
|
||||
// NTSC greyscale conversion standard
|
||||
avg = (vout[0] * 30.0f + vout[1] * 59.0f + vout[2] * 11.0f) / 100.0f;
|
||||
|
||||
// divide by 255 so GL operations work as expected
|
||||
vout[0] = avg / 255.0f;
|
||||
vout[1] = avg / 255.0f;
|
||||
vout[2] = avg / 255.0f;
|
||||
|
||||
// write to temp - first, write data in (to get the alpha channel quickly and
|
||||
// easily, which will be left well alone by this particular operation...!)
|
||||
fout[y * image.width + x] = fin[y * image.width + x];
|
||||
|
||||
// now write in each element, applying the blend operator. blend
|
||||
// operators are based on standard OpenGL TexEnv modes, and the
|
||||
// formulas are derived from the OpenGL specs (http://www.opengl.org).
|
||||
for( i = 0; i < 3; i++ )
|
||||
{
|
||||
// divide by 255 so GL operations work as expected
|
||||
float src = ((float)((byte *)&fin[y * image.width + x])[i]) / 255.0f;
|
||||
float tmp;
|
||||
|
||||
// default is GL_BLEND here
|
||||
// CsS + CdD works out as Src * Dst * 2
|
||||
tmp = vout[i] * src * 2.0f;
|
||||
|
||||
// multiply back by 255 to get the proper byte scale
|
||||
tmp *= 255.0f;
|
||||
|
||||
// bound the temp target again now, cos the operation may have thrown it out
|
||||
tmp = bound( 0.0f, tmp, 255.0f );
|
||||
// and copy it in
|
||||
((byte *)&fout[y * image.width + x])[i] = (byte)tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// copy result back
|
||||
memcpy( fin, fout, size );
|
||||
}
|
||||
|
||||
qboolean Image_Process( rgbdata_t **pix, int width, int height, uint flags, float bumpscale )
|
||||
qboolean Image_Process(rgbdata_t **pix, int width, int height, uint flags, float reserved )
|
||||
{
|
||||
rgbdata_t *pic = *pix;
|
||||
qboolean result = true;
|
||||
|
@ -1509,9 +1400,6 @@ qboolean Image_Process( rgbdata_t **pix, int width, int height, uint flags, floa
|
|||
if( FBitSet( flags, IMAGE_LIGHTGAMMA ))
|
||||
pic = Image_LightGamma( pic );
|
||||
|
||||
if( FBitSet( flags, IMAGE_EMBOSS ))
|
||||
Image_ApplyFilter( pic, bumpscale );
|
||||
|
||||
out = Image_FlipInternal( pic->buffer, &pic->width, &pic->height, pic->type, flags );
|
||||
if( pic->buffer != out ) memcpy( pic->buffer, image.tempbuffer, pic->size );
|
||||
|
||||
|
|
|
@ -15,8 +15,6 @@ GNU General Public License for more details.
|
|||
|
||||
#ifdef SINGLE_BINARY
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "build.h"
|
||||
#include "common.h"
|
||||
#ifdef XASH_SDLMAIN
|
||||
|
@ -37,7 +35,7 @@ static char **g_pszArgv;
|
|||
|
||||
void Launcher_ChangeGame( const char *progname )
|
||||
{
|
||||
strncpy( szGameDir, progname, sizeof( szGameDir ) - 1 );
|
||||
Q_strncpy( szGameDir, progname, sizeof( szGameDir ) - 1 );
|
||||
Host_Shutdown( );
|
||||
exit( Host_Main( g_iArgc, g_pszArgv, szGameDir, 1, &Launcher_ChangeGame ) );
|
||||
}
|
||||
|
@ -81,7 +79,7 @@ int main( int argc, char** argv )
|
|||
}
|
||||
else
|
||||
{
|
||||
strncpy( gamedir_buf, gamedir, 32 );
|
||||
Q_strncpy( gamedir_buf, gamedir, 32 );
|
||||
gamedir = gamedir_buf;
|
||||
}
|
||||
|
||||
|
|
|
@ -2023,7 +2023,7 @@ static void Mod_LoadTextures( dbspmodel_t *bmod )
|
|||
|
||||
if( FS_FileExists( texpath, false ))
|
||||
{
|
||||
tx->gl_texturenum = ref.dllFuncs.GL_LoadTexture( texpath, NULL, 0, TF_ALLOW_EMBOSS|txFlags );
|
||||
tx->gl_texturenum = ref.dllFuncs.GL_LoadTexture( texpath, NULL, 0, txFlags );
|
||||
bmod->wadlist.wadusage[j]++; // this wad are really used
|
||||
break;
|
||||
}
|
||||
|
@ -2039,7 +2039,7 @@ static void Mod_LoadTextures( dbspmodel_t *bmod )
|
|||
|
||||
if( custom_palette ) size += sizeof( short ) + 768;
|
||||
Q_snprintf( texname, sizeof( texname ), "#%s:%s.mip", loadstat.name, mt->name );
|
||||
tx->gl_texturenum = ref.dllFuncs.GL_LoadTexture( texname, (byte *)mt, size, TF_ALLOW_EMBOSS|txFlags );
|
||||
tx->gl_texturenum = ref.dllFuncs.GL_LoadTexture( texname, (byte *)mt, size, txFlags );
|
||||
}
|
||||
|
||||
// if texture is completely missed
|
||||
|
@ -2780,13 +2780,28 @@ qboolean Mod_LoadBmodelLumps( const byte *mod_base, qboolean isworld )
|
|||
if( isworld ) world.flags = 0; // clear world settings
|
||||
bmod->isworld = isworld;
|
||||
|
||||
if( header->version == HLBSP_VERSION &&
|
||||
header->lumps[LUMP_ENTITIES].fileofs <= 1024 &&
|
||||
(header->lumps[LUMP_ENTITIES].filelen % sizeof( dplane_t )) == 0 )
|
||||
if( header->version == HLBSP_VERSION )
|
||||
{
|
||||
// blue-shift swapped lumps
|
||||
srclumps[0].lumpnumber = LUMP_PLANES;
|
||||
srclumps[1].lumpnumber = LUMP_ENTITIES;
|
||||
// only relevant for half-life maps
|
||||
if( header->lumps[LUMP_ENTITIES].fileofs <= 1024 &&
|
||||
(header->lumps[LUMP_ENTITIES].filelen % sizeof( dplane_t )) == 0 )
|
||||
{
|
||||
// blue-shift swapped lumps
|
||||
srclumps[0].lumpnumber = LUMP_PLANES;
|
||||
srclumps[1].lumpnumber = LUMP_ENTITIES;
|
||||
}
|
||||
else
|
||||
{
|
||||
// everything else
|
||||
srclumps[0].lumpnumber = LUMP_ENTITIES;
|
||||
srclumps[1].lumpnumber = LUMP_PLANES;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// everything else
|
||||
srclumps[0].lumpnumber = LUMP_ENTITIES;
|
||||
srclumps[1].lumpnumber = LUMP_PLANES;
|
||||
}
|
||||
|
||||
// loading base lumps
|
||||
|
|
|
@ -1693,15 +1693,15 @@ void NET_Init( void )
|
|||
|
||||
if( net.initialized ) return;
|
||||
|
||||
net_clockwindow = Cvar_Get( "clockwindow", "0.5", 0, "timewindow to execute client moves" );
|
||||
net_clockwindow = Cvar_Get( "clockwindow", "0.5", FCVAR_PRIVILEGED, "timewindow to execute client moves" );
|
||||
net_address = Cvar_Get( "net_address", "0", FCVAR_READ_ONLY, "contain local address of current client" );
|
||||
net_ipname = Cvar_Get( "ip", "localhost", FCVAR_READ_ONLY, "network ip address" );
|
||||
net_iphostport = Cvar_Get( "ip_hostport", "0", FCVAR_READ_ONLY, "network ip host port" );
|
||||
net_hostport = Cvar_Get( "hostport", va( "%i", PORT_SERVER ), FCVAR_READ_ONLY, "network default host port" );
|
||||
net_ipclientport = Cvar_Get( "ip_clientport", "0", FCVAR_READ_ONLY, "network ip client port" );
|
||||
net_clientport = Cvar_Get( "clientport", va( "%i", PORT_CLIENT ), FCVAR_READ_ONLY, "network default client port" );
|
||||
net_fakelag = Cvar_Get( "fakelag", "0", 0, "lag all incoming network data (including loopback) by xxx ms." );
|
||||
net_fakeloss = Cvar_Get( "fakeloss", "0", 0, "act like we dropped the packet this % of the time." );
|
||||
net_fakelag = Cvar_Get( "fakelag", "0", FCVAR_PRIVILEGED, "lag all incoming network data (including loopback) by xxx ms." );
|
||||
net_fakeloss = Cvar_Get( "fakeloss", "0", FCVAR_PRIVILEGED, "act like we dropped the packet this % of the time." );
|
||||
|
||||
// prepare some network data
|
||||
for( i = 0; i < NS_COUNT; i++ )
|
||||
|
@ -2543,10 +2543,10 @@ void HTTP_Init( void )
|
|||
|
||||
http.first_file = http.last_file = NULL;
|
||||
|
||||
Cmd_AddCommand("http_download", &HTTP_Download_f, "add file to download queue");
|
||||
Cmd_AddCommand("http_skip", &HTTP_Skip_f, "skip current download server");
|
||||
Cmd_AddCommand("http_cancel", &HTTP_Cancel_f, "cancel current download");
|
||||
Cmd_AddCommand("http_clear", &HTTP_Clear_f, "cancel all downloads");
|
||||
Cmd_AddRestrictedCommand("http_download", &HTTP_Download_f, "add file to download queue");
|
||||
Cmd_AddRestrictedCommand("http_skip", &HTTP_Skip_f, "skip current download server");
|
||||
Cmd_AddRestrictedCommand("http_cancel", &HTTP_Cancel_f, "cancel current download");
|
||||
Cmd_AddRestrictedCommand("http_clear", &HTTP_Clear_f, "cancel all downloads");
|
||||
Cmd_AddCommand("http_list", &HTTP_List_f, "list all queued downloads");
|
||||
Cmd_AddCommand("http_addcustomserver", &HTTP_AddCustomServer_f, "add custom fastdl server");
|
||||
http_useragent = Cvar_Get( "http_useragent", "xash3d", FCVAR_ARCHIVE, "User-Agent string" );
|
||||
|
|
|
@ -78,7 +78,8 @@ GNU General Public License for more details.
|
|||
#define svc_resourcelocation 56 // [string]
|
||||
#define svc_querycvarvalue 57 // [string]
|
||||
#define svc_querycvarvalue2 58 // [string][int] (context)
|
||||
#define svc_lastmsg 58 // start user messages at this point
|
||||
#define svc_exec 59 // [byte][...]
|
||||
#define svc_lastmsg 59 // start user messages at this point
|
||||
|
||||
// client to server
|
||||
#define clc_bad 0 // immediately drop client when received
|
||||
|
|
|
@ -1247,7 +1247,7 @@ qboolean Sequence_ParseSentenceLine( void )
|
|||
if( *c )
|
||||
*c = 0;
|
||||
|
||||
strcpy( groupName, fullgroup );
|
||||
Q_strncpy( groupName, fullgroup, sizeof( groupName ));
|
||||
|
||||
len = Sequence_GetLine( data, sizeof( data ) );
|
||||
lastCharacterPos = len - 1;
|
||||
|
|
|
@ -24,6 +24,8 @@ extern struct tests_stats_s tests_stats;
|
|||
void Test_RunImagelib( void );
|
||||
void Test_RunLibCommon( void );
|
||||
void Test_RunCommon( void );
|
||||
void Test_RunCmd( void );
|
||||
void Test_RunCvar( void );
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -449,9 +449,9 @@ void Platfrom_MouseMove( float *yaw, float *pitch )
|
|||
|
||||
void Evdev_Init( void )
|
||||
{
|
||||
Cmd_AddCommand ("evdev_open", Evdev_OpenDevice_f, "Open event device");
|
||||
Cmd_AddCommand ("evdev_close", Evdev_CloseDevice_f, "Close event device");
|
||||
Cmd_AddCommand ("evdev_autodetect", Evdev_Autodetect_f, "Automaticly open mouses and keyboards");
|
||||
Cmd_AddRestrictedCommand ("evdev_open", Evdev_OpenDevice_f, "Open event device");
|
||||
Cmd_AddRestrictedCommand ("evdev_close", Evdev_CloseDevice_f, "Close event device");
|
||||
Cmd_AddRestrictedCommand ("evdev_autodetect", Evdev_Autodetect_f, "Automaticly open mouses and keyboards");
|
||||
#if XASH_INPUT == INPUT_EVDEV
|
||||
Evdev_Autodetect_f();
|
||||
#endif
|
||||
|
|
|
@ -66,7 +66,7 @@ qboolean SNDDMA_Init( void )
|
|||
|
||||
Sys_GetParmFromCmdLine( "-alsadev", device );
|
||||
|
||||
Cmd_AddCommand("pcm_pause", SND_Pause_f, "set pcm pause (debug)" );
|
||||
Cmd_AddRestrictedCommand("pcm_pause", SND_Pause_f, "set pcm pause (debug)" );
|
||||
|
||||
if( ( err = snd_pcm_open( &s_alsa.pcm_handle, device, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK ) ) < 0)
|
||||
{
|
||||
|
|
|
@ -88,6 +88,7 @@ GNU General Public License for more details.
|
|||
#define SDL_SCANCODE_PRINTSCREEN SDLK_PRINT
|
||||
#define SDL_SCANCODE_UNKNOWN SDLK_UNKNOWN
|
||||
#define SDL_GetScancodeName( x ) "unknown"
|
||||
#define SDL_JoystickID Uint8
|
||||
#endif
|
||||
|
||||
static qboolean SDLash_IsInstanceIDAGameController( SDL_JoystickID joyId )
|
||||
|
|
|
@ -14,9 +14,7 @@ GNU General Public License for more details.
|
|||
*/
|
||||
#if !XASH_DEDICATED
|
||||
#include <SDL.h>
|
||||
#ifdef XASH_VULKAN
|
||||
#include <SDL_vulkan.h>
|
||||
#endif
|
||||
#include "common.h"
|
||||
#include "client.h"
|
||||
#include "mod_local.h"
|
||||
|
@ -641,11 +639,9 @@ qboolean VID_CreateWindow( int width, int height, qboolean fullscreen )
|
|||
case REF_GL:
|
||||
wndFlags |= SDL_WINDOW_OPENGL;
|
||||
break;
|
||||
#ifdef XASH_VULKAN
|
||||
case REF_VULKAN:
|
||||
wndFlags |= SDL_WINDOW_VULKAN;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
if( !fullscreen )
|
||||
|
@ -674,7 +670,7 @@ qboolean VID_CreateWindow( int width, int height, qboolean fullscreen )
|
|||
|
||||
glw_state.safe++;
|
||||
|
||||
if( !gl_wgl_msaa_samples->value && glw_state.safe == SAFE_NOMSAA )
|
||||
if( !gl_msaa_samples->value && glw_state.safe == SAFE_NOMSAA )
|
||||
glw_state.safe++; // no need to skip msaa, if we already disabled it
|
||||
|
||||
GL_SetupAttributes(); // re-choose attributes
|
||||
|
@ -817,7 +813,7 @@ qboolean VID_CreateWindow( int width, int height, qboolean fullscreen )
|
|||
|
||||
glw_state.safe++;
|
||||
|
||||
if( !gl_wgl_msaa_samples->value && glw_state.safe == SAFE_NOMSAA )
|
||||
if( !gl_msaa_samples->value && glw_state.safe == SAFE_NOMSAA )
|
||||
glw_state.safe++; // no need to skip msaa, if we already disabled it
|
||||
|
||||
GL_SetupAttributes(); // re-choose attributes
|
||||
|
@ -972,7 +968,6 @@ int GL_GetAttribute( int attr, int *val )
|
|||
#define EGL_LIB NULL
|
||||
#endif
|
||||
|
||||
#ifdef XASH_VULKAN
|
||||
int XVK_GetInstanceExtensions( unsigned int count, const char **pNames )
|
||||
{
|
||||
if (!SDL_Vulkan_GetInstanceExtensions(host.hWnd, &count, pNames))
|
||||
|
@ -1001,7 +996,6 @@ VkSurfaceKHR XVK_CreateSurface( VkInstance instance )
|
|||
|
||||
return surface;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
==================
|
||||
|
@ -1050,10 +1044,8 @@ qboolean R_Init_Video( const int type )
|
|||
return false;
|
||||
}
|
||||
break;
|
||||
#ifdef XASH_VULKAN
|
||||
case REF_VULKAN:
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
Host_Error( "Can't initialize unknown context type %d!\n", type );
|
||||
break;
|
||||
|
|
|
@ -419,7 +419,7 @@ typedef struct ref_api_s
|
|||
void (*Image_SetForceFlags)( uint flags );
|
||||
void (*Image_ClearForceFlags)( void );
|
||||
qboolean (*Image_CustomPalette)( void );
|
||||
qboolean (*Image_Process)( rgbdata_t **pix, int width, int height, uint flags, float bumpscale );
|
||||
qboolean (*Image_Process)( rgbdata_t **pix, int width, int height, uint flags, float reserved );
|
||||
rgbdata_t *(*FS_LoadImage)( const char *filename, const byte *buffer, size_t size );
|
||||
qboolean (*FS_SaveImage)( const char *filename, rgbdata_t *pix );
|
||||
rgbdata_t *(*FS_CopyImage)( rgbdata_t *in );
|
||||
|
@ -433,11 +433,9 @@ typedef struct ref_api_s
|
|||
void (*pfnDrawTransparentTriangles)( void );
|
||||
render_interface_t *drawFuncs;
|
||||
|
||||
#ifdef XASH_VULKAN
|
||||
int (*XVK_GetInstanceExtensions)( unsigned int count, const char **pNames );
|
||||
void *(*XVK_GetVkGetInstanceProcAddr)( void );
|
||||
VkSurfaceKHR (*XVK_CreateSurface)( VkInstance instance );
|
||||
#endif
|
||||
} ref_api_t;
|
||||
|
||||
struct mip_s;
|
||||
|
@ -631,4 +629,52 @@ typedef int (*REFAPI)( int version, ref_interface_t *pFunctionTable, ref_api_t*
|
|||
typedef void (*REF_HUMANREADABLE_NAME)( char *out, size_t len );
|
||||
#define GET_REF_HUMANREADABLE_NAME "GetRefHumanReadableName"
|
||||
|
||||
#ifdef REF_DLL
|
||||
#define DEFINE_ENGINE_SHARED_CVAR( x, y ) cvar_t *x = NULL;
|
||||
#define DECLARE_ENGINE_SHARED_CVAR( x, y ) extern cvar_t *x;
|
||||
#define RETRIEVE_ENGINE_SHARED_CVAR( x, y ) \
|
||||
if(!( x = gEngfuncs.pfnGetCvarPointer( #y, 0 ) )) \
|
||||
gEngfuncs.Host_Error( S_ERROR "engine betrayed us and didn't gave us %s cvar pointer\n", #y );
|
||||
#define ENGINE_SHARED_CVAR_NAME( f, x, y ) f( x, y )
|
||||
#define ENGINE_SHARED_CVAR( f, x ) ENGINE_SHARED_CVAR_NAME( f, x, x )
|
||||
|
||||
// cvars that's logic is shared between renderer and engine
|
||||
// actually, they are just created on engine side for convinience
|
||||
// and must be retrieved by renderer side
|
||||
// sometimes it's done to standartize cvars to make it easier for users
|
||||
#define ENGINE_SHARED_CVAR_LIST( f ) \
|
||||
ENGINE_SHARED_CVAR_NAME( f, vid_gamma, gamma ) \
|
||||
ENGINE_SHARED_CVAR_NAME( f, vid_brightness, brightness ) \
|
||||
ENGINE_SHARED_CVAR_NAME( f, gl_showtextures, r_showtextures ) \
|
||||
ENGINE_SHARED_CVAR( f, r_speeds ) \
|
||||
ENGINE_SHARED_CVAR( f, r_fullbright ) \
|
||||
ENGINE_SHARED_CVAR( f, r_norefresh ) \
|
||||
ENGINE_SHARED_CVAR( f, r_lightmap ) \
|
||||
ENGINE_SHARED_CVAR( f, r_dynamic ) \
|
||||
ENGINE_SHARED_CVAR( f, r_drawentities ) \
|
||||
ENGINE_SHARED_CVAR( f, r_decals ) \
|
||||
ENGINE_SHARED_CVAR( f, r_showhull ) \
|
||||
ENGINE_SHARED_CVAR( f, gl_vsync ) \
|
||||
ENGINE_SHARED_CVAR( f, gl_clear ) \
|
||||
ENGINE_SHARED_CVAR( f, cl_himodels ) \
|
||||
ENGINE_SHARED_CVAR( f, cl_lightstyle_lerping ) \
|
||||
ENGINE_SHARED_CVAR( f, tracerred ) \
|
||||
ENGINE_SHARED_CVAR( f, tracergreen ) \
|
||||
ENGINE_SHARED_CVAR( f, tracerblue ) \
|
||||
ENGINE_SHARED_CVAR( f, traceralpha ) \
|
||||
ENGINE_SHARED_CVAR( f, r_sprite_lerping ) \
|
||||
ENGINE_SHARED_CVAR( f, r_sprite_lighting ) \
|
||||
ENGINE_SHARED_CVAR( f, r_drawviewmodel ) \
|
||||
ENGINE_SHARED_CVAR( f, r_glowshellfreq ) \
|
||||
|
||||
#define DECLARE_ENGINE_SHARED_CVAR_LIST() \
|
||||
ENGINE_SHARED_CVAR_LIST( DECLARE_ENGINE_SHARED_CVAR )
|
||||
|
||||
#define DEFINE_ENGINE_SHARED_CVAR_LIST() \
|
||||
ENGINE_SHARED_CVAR_LIST( DEFINE_ENGINE_SHARED_CVAR )
|
||||
|
||||
#define RETRIEVE_ENGINE_SHARED_CVAR_LIST() \
|
||||
ENGINE_SHARED_CVAR_LIST( RETRIEVE_ENGINE_SHARED_CVAR )
|
||||
#endif
|
||||
|
||||
#endif // REF_API
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
#ifdef XASH_VULKAN
|
||||
#ifndef REF_VULKAN_H
|
||||
#define REF_VULKAN_H
|
||||
|
||||
// Define Vulkan handles without depending on vulkan.h
|
||||
#ifndef VULKAN_H_
|
||||
|
@ -22,4 +21,4 @@ int XVK_GetInstanceExtensions( unsigned int count, const char **pNames );
|
|||
void *XVK_GetVkGetInstanceProcAddr( void );
|
||||
VkSurfaceKHR XVK_CreateSurface( VkInstance instance );
|
||||
|
||||
#endif // ifdef XASH_VULKAN
|
||||
#endif /* REF_VULKAN_H */
|
||||
|
|
|
@ -1002,19 +1002,19 @@ is available always
|
|||
*/
|
||||
void SV_InitHostCommands( void )
|
||||
{
|
||||
Cmd_AddCommand( "map", SV_Map_f, "start new level" );
|
||||
Cmd_AddRestrictedCommand( "map", SV_Map_f, "start new level" );
|
||||
Cmd_AddCommand( "maps", SV_Maps_f, "list maps" );
|
||||
|
||||
if( host.type == HOST_NORMAL )
|
||||
{
|
||||
Cmd_AddCommand( "newgame", SV_NewGame_f, "begin new game" );
|
||||
Cmd_AddCommand( "hazardcourse", SV_HazardCourse_f, "starting a Hazard Course" );
|
||||
Cmd_AddCommand( "map_background", SV_MapBackground_f, "set background map" );
|
||||
Cmd_AddCommand( "load", SV_Load_f, "load a saved game file" );
|
||||
Cmd_AddCommand( "loadquick", SV_QuickLoad_f, "load a quick-saved game file" );
|
||||
Cmd_AddCommand( "reload", SV_Reload_f, "continue from latest save or restart level" );
|
||||
Cmd_AddCommand( "killsave", SV_DeleteSave_f, "delete a saved game file and saveshot" );
|
||||
Cmd_AddCommand( "nextmap", SV_NextMap_f, "load next level" );
|
||||
Cmd_AddRestrictedCommand( "newgame", SV_NewGame_f, "begin new game" );
|
||||
Cmd_AddRestrictedCommand( "hazardcourse", SV_HazardCourse_f, "starting a Hazard Course" );
|
||||
Cmd_AddRestrictedCommand( "map_background", SV_MapBackground_f, "set background map" );
|
||||
Cmd_AddRestrictedCommand( "load", SV_Load_f, "load a saved game file" );
|
||||
Cmd_AddRestrictedCommand( "loadquick", SV_QuickLoad_f, "load a quick-saved game file" );
|
||||
Cmd_AddRestrictedCommand( "reload", SV_Reload_f, "continue from latest save or restart level" );
|
||||
Cmd_AddRestrictedCommand( "killsave", SV_DeleteSave_f, "delete a saved game file and saveshot" );
|
||||
Cmd_AddRestrictedCommand( "nextmap", SV_NextMap_f, "load next level" );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -426,14 +426,14 @@ static void SV_WriteIP_f( void )
|
|||
|
||||
void SV_InitFilter( void )
|
||||
{
|
||||
Cmd_AddCommand( "banid", SV_BanID_f, "ban player by ID" );
|
||||
Cmd_AddCommand( "listid", SV_ListID_f, "list banned players" );
|
||||
Cmd_AddCommand( "removeid", SV_RemoveID_f, "remove player from banned list" );
|
||||
Cmd_AddCommand( "writeid", SV_WriteID_f, "write banned.cfg" );
|
||||
Cmd_AddCommand( "addip", SV_AddIP_f, "add entry to IP filter" );
|
||||
Cmd_AddCommand( "listip", SV_ListIP_f, "list current IP filter" );
|
||||
Cmd_AddCommand( "removeip", SV_RemoveIP_f, "remove IP filter" );
|
||||
Cmd_AddCommand( "writeip", SV_WriteIP_f, "write listip.cfg" );
|
||||
Cmd_AddRestrictedCommand( "banid", SV_BanID_f, "ban player by ID" );
|
||||
Cmd_AddRestrictedCommand( "listid", SV_ListID_f, "list banned players" );
|
||||
Cmd_AddRestrictedCommand( "removeid", SV_RemoveID_f, "remove player from banned list" );
|
||||
Cmd_AddRestrictedCommand( "writeid", SV_WriteID_f, "write banned.cfg" );
|
||||
Cmd_AddRestrictedCommand( "addip", SV_AddIP_f, "add entry to IP filter" );
|
||||
Cmd_AddRestrictedCommand( "listip", SV_ListIP_f, "list current IP filter" );
|
||||
Cmd_AddRestrictedCommand( "removeip", SV_RemoveIP_f, "remove IP filter" );
|
||||
Cmd_AddRestrictedCommand( "writeip", SV_WriteIP_f, "write listip.cfg" );
|
||||
}
|
||||
|
||||
void SV_ShutdownFilter( void )
|
||||
|
|
|
@ -97,7 +97,6 @@ def configure(conf):
|
|||
conf.define_cond('XASH_64BIT', conf.env.DEST_SIZEOF_VOID_P != 4)
|
||||
conf.define_cond('DBGHELP', conf.env.DEST_OS == 'win32')
|
||||
conf.define_cond('PSAPI_VERSION', conf.env.DEST_OS == 'win32') # will be defined as 1
|
||||
conf.define_cond('XASH_VULKAN', conf.options.VK)
|
||||
|
||||
def build(bld):
|
||||
is_cxx_link = False
|
||||
|
|
2
mainui
2
mainui
|
@ -1 +1 @@
|
|||
Subproject commit fc7866300794c14ec4577478ed8a96de99815c7f
|
||||
Subproject commit 330b16fb29cfe0915047db9e2a374777e6b513ec
|
|
@ -60,23 +60,6 @@ qboolean Q_isdigit( const char *str )
|
|||
return false;
|
||||
}
|
||||
|
||||
size_t Q_strlen( const char *string )
|
||||
{
|
||||
size_t len;
|
||||
const char *p;
|
||||
|
||||
if( !string ) return 0;
|
||||
|
||||
len = 0;
|
||||
p = string;
|
||||
while( *p )
|
||||
{
|
||||
p++;
|
||||
len++;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
size_t Q_colorstr( const char *string )
|
||||
{
|
||||
size_t len;
|
||||
|
|
|
@ -17,6 +17,7 @@ GNU General Public License for more details.
|
|||
#define STDLIB_H
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include "build.h"
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
@ -50,7 +51,7 @@ enum
|
|||
void Q_strnupr( const char *in, char *out, size_t size_out );
|
||||
#define Q_strlwr( in, out ) Q_strnlwr( in, out, 99999 )
|
||||
void Q_strnlwr( const char *in, char *out, size_t size_out );
|
||||
size_t Q_strlen( const char *string );
|
||||
#define Q_strlen( str ) (( str ) ? strlen(( str )) : 0 )
|
||||
size_t Q_colorstr( const char *string );
|
||||
char Q_toupper( const char in );
|
||||
char Q_tolower( const char in );
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit a0e87aa362efa072598b7b671df67f8565b387fe
|
||||
Subproject commit 4f2151a104ac45bf5417a0063e96148204f8256c
|
|
@ -18,6 +18,10 @@ GNU General Public License for more details.
|
|||
#include "gl_local.h"
|
||||
#include "gl_export.h"
|
||||
|
||||
#ifdef XASH_GL4ES
|
||||
#include "gl4es/include/gl4esinit.h"
|
||||
#endif
|
||||
|
||||
ref_api_t gEngfuncs;
|
||||
ref_globals_t *gpGlobals;
|
||||
|
||||
|
@ -337,7 +341,6 @@ qboolean R_SetDisplayTransform( ref_screen_rotation_t rotate, int offset_x, int
|
|||
static void* GAME_EXPORT R_GetProcAddress( const char *name )
|
||||
{
|
||||
#ifdef XASH_GL4ES
|
||||
extern void *gl4es_GetProcAddress( const char *name );
|
||||
return gl4es_GetProcAddress( name );
|
||||
#else // TODO: other wrappers
|
||||
return gEngfuncs.GL_GetProcAddress( name );
|
||||
|
|
|
@ -687,6 +687,7 @@ typedef float GLmatrix[16];
|
|||
#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
|
||||
#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
|
||||
#define GL_MULTISAMPLE_BIT_ARB 0x20000000
|
||||
#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
|
||||
|
||||
#define GL_COLOR_SUM_ARB 0x8458
|
||||
#define GL_VERTEX_PROGRAM_ARB 0x8620
|
||||
|
@ -1353,6 +1354,10 @@ APIENTRY_LINKAGE void GL_FUNCTION( glGenVertexArrays )( GLsizei n, const GLuint
|
|||
APIENTRY_LINKAGE GLboolean GL_FUNCTION( glIsVertexArray )( GLuint array );
|
||||
APIENTRY_LINKAGE void GL_FUNCTION( glSwapInterval ) ( int interval );
|
||||
|
||||
#if !defined( XASH_GLES ) && !defined( XASH_GL4ES )
|
||||
APIENTRY_LINKAGE void GL_FUNCTION( glTexImage2DMultisample )(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
|
||||
#endif /* !XASH_GLES && !XASH_GL4ES */
|
||||
|
||||
#if defined( XASH_GL_STATIC ) && !defined( REF_GL_KEEP_MANGLED_FUNCTIONS )
|
||||
#define pglGetError glGetError
|
||||
#define pglGetString glGetString
|
||||
|
@ -1652,6 +1657,7 @@ APIENTRY_LINKAGE void GL_FUNCTION( glSwapInterval ) ( int interval );
|
|||
#define pglTexGeniv glTexGeniv
|
||||
#define pglTexImage1D glTexImage1D
|
||||
#define pglTexImage2D glTexImage2D
|
||||
#define pglTexImage2DMultisample glTexImage2DMultisample
|
||||
#define pglTexParameterf glTexParameterf
|
||||
#define pglTexParameterfv glTexParameterfv
|
||||
#define pglTexParameteri glTexParameteri
|
||||
|
|
|
@ -49,6 +49,8 @@ static const char *GL_TargetToString( GLenum target )
|
|||
return "1D";
|
||||
case GL_TEXTURE_2D:
|
||||
return "2D";
|
||||
case GL_TEXTURE_2D_MULTISAMPLE:
|
||||
return "2D Multisample";
|
||||
case GL_TEXTURE_3D:
|
||||
return "3D";
|
||||
case GL_TEXTURE_CUBE_MAP_ARB:
|
||||
|
@ -117,6 +119,10 @@ void GL_ApplyTextureParams( gl_texture_t *tex )
|
|||
|
||||
Assert( tex != NULL );
|
||||
|
||||
// multisample textures does not support any sampling state changing
|
||||
if( FBitSet( tex->flags, TF_MULTISAMPLE ))
|
||||
return;
|
||||
|
||||
// set texture filter
|
||||
if( FBitSet( tex->flags, TF_DEPTHMAP ))
|
||||
{
|
||||
|
@ -523,6 +529,7 @@ static void GL_SetTextureDimensions( gl_texture_t *tex, int width, int height, i
|
|||
{
|
||||
case GL_TEXTURE_1D:
|
||||
case GL_TEXTURE_2D:
|
||||
case GL_TEXTURE_2D_MULTISAMPLE:
|
||||
maxTextureSize = glConfig.max_2d_texture_size;
|
||||
break;
|
||||
case GL_TEXTURE_2D_ARRAY_EXT:
|
||||
|
@ -626,6 +633,8 @@ static void GL_SetTextureTarget( gl_texture_t *tex, rgbdata_t *pic )
|
|||
tex->target = GL_TEXTURE_3D;
|
||||
else if( FBitSet( tex->flags, TF_RECTANGLE ))
|
||||
tex->target = GL_TEXTURE_RECTANGLE_EXT;
|
||||
else if( FBitSet(tex->flags, TF_MULTISAMPLE ))
|
||||
tex->target = GL_TEXTURE_2D_MULTISAMPLE;
|
||||
else tex->target = GL_TEXTURE_2D; // default case
|
||||
|
||||
// check for hardware support
|
||||
|
@ -648,6 +657,9 @@ static void GL_SetTextureTarget( gl_texture_t *tex, rgbdata_t *pic )
|
|||
// depth cubemaps only allowed when GL_EXT_gpu_shader4 is supported
|
||||
if( tex->target == GL_TEXTURE_CUBE_MAP_ARB && !GL_Support( GL_EXT_GPU_SHADER4 ) && FBitSet( tex->flags, TF_DEPTHMAP ))
|
||||
tex->target = GL_NONE;
|
||||
|
||||
if(( tex->target == GL_TEXTURE_2D_MULTISAMPLE ) && !GL_Support( GL_TEXTURE_MULTISAMPLE ))
|
||||
tex->target = GL_NONE;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1006,6 +1018,7 @@ static void GL_TextureImageRAW( gl_texture_t *tex, GLint side, GLint level, GLin
|
|||
qboolean subImage = FBitSet( tex->flags, TF_IMG_UPLOADED );
|
||||
GLenum inFormat = gEngfuncs.Image_GetPFDesc(type)->glFormat;
|
||||
GLint dataType = GL_UNSIGNED_BYTE;
|
||||
GLsizei samplesCount = 0;
|
||||
|
||||
Assert( tex != NULL );
|
||||
|
||||
|
@ -1032,6 +1045,25 @@ static void GL_TextureImageRAW( gl_texture_t *tex, GLint side, GLint level, GLin
|
|||
if( subImage ) pglTexSubImage3D( tex->target, level, 0, 0, 0, width, height, depth, inFormat, dataType, data );
|
||||
else pglTexImage3D( tex->target, level, tex->format, width, height, depth, 0, inFormat, dataType, data );
|
||||
}
|
||||
else if( tex->target == GL_TEXTURE_2D_MULTISAMPLE )
|
||||
{
|
||||
#if !defined( XASH_GLES ) && !defined( XASH_GL4ES )
|
||||
samplesCount = (GLsizei)gEngfuncs.pfnGetCvarFloat("gl_msaa_samples");
|
||||
switch (samplesCount)
|
||||
{
|
||||
case 2:
|
||||
case 4:
|
||||
case 8:
|
||||
case 16:
|
||||
break;
|
||||
default:
|
||||
samplesCount = 1;
|
||||
}
|
||||
pglTexImage2DMultisample( tex->target, samplesCount, tex->format, width, height, GL_TRUE );
|
||||
#else /* !XASH_GLES && !XASH_GL4ES */
|
||||
gEngfuncs.Con_Printf( S_ERROR "GLES renderer don't support GL_TEXTURE_2D_MULTISAMPLE!\n" );
|
||||
#endif /* !XASH_GLES && !XASH_GL4ES */
|
||||
}
|
||||
else // 2D or RECT
|
||||
{
|
||||
if( subImage ) pglTexSubImage2D( tex->target, level, 0, 0, width, height, inFormat, dataType, data );
|
||||
|
@ -1234,7 +1266,6 @@ do specified actions on pixels
|
|||
*/
|
||||
static void GL_ProcessImage( gl_texture_t *tex, rgbdata_t *pic )
|
||||
{
|
||||
float emboss_scale = 0.0f;
|
||||
uint img_flags = 0;
|
||||
|
||||
// force upload texture as RGB or RGBA (detail textures requires this)
|
||||
|
@ -1267,12 +1298,6 @@ static void GL_ProcessImage( gl_texture_t *tex, rgbdata_t *pic )
|
|||
tex->flags &= ~TF_MAKELUMA;
|
||||
}
|
||||
|
||||
if( tex->flags & TF_ALLOW_EMBOSS )
|
||||
{
|
||||
img_flags |= IMAGE_EMBOSS;
|
||||
tex->flags &= ~TF_ALLOW_EMBOSS;
|
||||
}
|
||||
|
||||
if( !FBitSet( tex->flags, TF_IMG_UPLOADED ) && FBitSet( tex->flags, TF_KEEP_SOURCE ))
|
||||
tex->original = gEngfuncs.FS_CopyImage( pic ); // because current pic will be expanded to rgba
|
||||
|
||||
|
@ -1280,12 +1305,8 @@ static void GL_ProcessImage( gl_texture_t *tex, rgbdata_t *pic )
|
|||
if( pic->type == PF_INDEXED_24 || pic->type == PF_INDEXED_32 )
|
||||
img_flags |= IMAGE_FORCE_RGBA;
|
||||
|
||||
// dedicated server doesn't register this variable
|
||||
if( gl_emboss_scale != NULL )
|
||||
emboss_scale = gl_emboss_scale->value;
|
||||
|
||||
// processing image before uploading (force to rgba, make luma etc)
|
||||
if( pic->buffer ) gEngfuncs.Image_Process( &pic, 0, 0, img_flags, emboss_scale );
|
||||
if( pic->buffer ) gEngfuncs.Image_Process( &pic, 0, 0, img_flags, 0 );
|
||||
|
||||
if( FBitSet( tex->flags, TF_LUMINANCE ))
|
||||
ClearBits( pic->flags, IMAGE_HAS_COLOR );
|
||||
|
@ -2165,6 +2186,9 @@ void R_TextureList_f( void )
|
|||
case GL_TEXTURE_2D_ARRAY_EXT:
|
||||
gEngfuncs.Con_Printf( "ARRAY " );
|
||||
break;
|
||||
case GL_TEXTURE_2D_MULTISAMPLE:
|
||||
gEngfuncs.Con_Printf( "MSAA ");
|
||||
break;
|
||||
default:
|
||||
gEngfuncs.Con_Printf( "???? " );
|
||||
break;
|
||||
|
|
|
@ -66,7 +66,7 @@ extern poolhandle_t r_temppool;
|
|||
#define BLOCK_SIZE_DEFAULT 128 // for keep backward compatibility
|
||||
#define BLOCK_SIZE_MAX 1024
|
||||
|
||||
#define MAX_TEXTURES 4096
|
||||
#define MAX_TEXTURES 8192 // a1ba: increased by users request
|
||||
#define MAX_DETAIL_TEXTURES 256
|
||||
#define MAX_LIGHTMAPS 256
|
||||
#define SUBDIVIDE_SIZE 64
|
||||
|
@ -622,6 +622,7 @@ enum
|
|||
GL_DEBUG_OUTPUT,
|
||||
GL_ARB_VERTEX_BUFFER_OBJECT_EXT,
|
||||
GL_DRAW_RANGEELEMENTS_EXT,
|
||||
GL_TEXTURE_MULTISAMPLE,
|
||||
GL_EXTCOUNT, // must be last
|
||||
};
|
||||
|
||||
|
@ -722,7 +723,6 @@ extern cvar_t *gl_texture_lodbias;
|
|||
extern cvar_t *gl_texture_nearest;
|
||||
extern cvar_t *gl_lightmap_nearest;
|
||||
extern cvar_t *gl_keeptjunctions;
|
||||
extern cvar_t *gl_emboss_scale;
|
||||
extern cvar_t *gl_round_down;
|
||||
extern cvar_t *gl_wireframe;
|
||||
extern cvar_t *gl_polyoffset;
|
||||
|
@ -733,9 +733,6 @@ extern cvar_t *gl_test; // cvar to testify new effects
|
|||
extern cvar_t *gl_msaa;
|
||||
extern cvar_t *gl_stencilbits;
|
||||
|
||||
extern cvar_t *r_speeds;
|
||||
extern cvar_t *r_fullbright;
|
||||
extern cvar_t *r_norefresh;
|
||||
extern cvar_t *r_lighting_extended;
|
||||
extern cvar_t *r_lighting_modulate;
|
||||
extern cvar_t *r_lighting_ambient;
|
||||
|
@ -748,24 +745,14 @@ extern cvar_t *r_nocull;
|
|||
extern cvar_t *r_lockpvs;
|
||||
extern cvar_t *r_lockfrustum;
|
||||
extern cvar_t *r_traceglow;
|
||||
extern cvar_t *r_dynamic;
|
||||
extern cvar_t *r_lightmap;
|
||||
extern cvar_t *r_vbo;
|
||||
extern cvar_t *r_vbo_dlightmode;
|
||||
|
||||
extern cvar_t *vid_brightness;
|
||||
extern cvar_t *vid_gamma;
|
||||
|
||||
//
|
||||
// engine shared convars
|
||||
//
|
||||
extern cvar_t *gl_showtextures;
|
||||
extern cvar_t *tracerred;
|
||||
extern cvar_t *tracergreen;
|
||||
extern cvar_t *tracerblue;
|
||||
extern cvar_t *traceralpha;
|
||||
extern cvar_t *cl_lightstyle_lerping;
|
||||
extern cvar_t *r_showhull;
|
||||
DECLARE_ENGINE_SHARED_CVAR_LIST()
|
||||
|
||||
//
|
||||
// engine callbacks
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
|
||||
#include "gl_local.h"
|
||||
#if XASH_GL4ES
|
||||
#include "gl4es/include/gl4esinit.h"
|
||||
#include "gl4es/include/gl4eshint.h"
|
||||
#endif // XASH_GL4ES
|
||||
|
||||
cvar_t *gl_extensions;
|
||||
cvar_t *gl_texture_anisotropy;
|
||||
|
@ -7,7 +11,6 @@ cvar_t *gl_texture_lodbias;
|
|||
cvar_t *gl_texture_nearest;
|
||||
cvar_t *gl_lightmap_nearest;
|
||||
cvar_t *gl_keeptjunctions;
|
||||
cvar_t *gl_emboss_scale;
|
||||
cvar_t *gl_check_errors;
|
||||
cvar_t *gl_polyoffset;
|
||||
cvar_t *gl_wireframe;
|
||||
|
@ -18,14 +21,10 @@ cvar_t *gl_clear;
|
|||
cvar_t *gl_test;
|
||||
cvar_t *gl_msaa;
|
||||
cvar_t *gl_stencilbits;
|
||||
cvar_t *r_speeds;
|
||||
cvar_t *r_fullbright;
|
||||
cvar_t *r_norefresh;
|
||||
cvar_t *r_lighting_extended;
|
||||
cvar_t *r_lighting_modulate;
|
||||
cvar_t *r_lighting_ambient;
|
||||
cvar_t *r_detailtextures;
|
||||
cvar_t *r_drawentities;
|
||||
cvar_t *r_adjust_fov;
|
||||
cvar_t *r_decals;
|
||||
cvar_t *r_novis;
|
||||
|
@ -34,21 +33,17 @@ cvar_t *r_lockpvs;
|
|||
cvar_t *r_lockfrustum;
|
||||
cvar_t *r_traceglow;
|
||||
cvar_t *r_dynamic;
|
||||
cvar_t *r_lightmap;
|
||||
cvar_t *r_showhull;
|
||||
cvar_t *gl_round_down;
|
||||
cvar_t *r_vbo;
|
||||
cvar_t *r_vbo_dlightmode;
|
||||
cvar_t *gl_showtextures;
|
||||
cvar_t *cl_lightstyle_lerping;
|
||||
|
||||
cvar_t *vid_brightness;
|
||||
cvar_t *vid_gamma;
|
||||
cvar_t *tracerred;
|
||||
cvar_t *tracergreen;
|
||||
cvar_t *tracerblue;
|
||||
cvar_t *traceralpha;
|
||||
|
||||
DEFINE_ENGINE_SHARED_CVAR_LIST()
|
||||
|
||||
poolhandle_t r_temppool;
|
||||
|
||||
gl_globals_t tr;
|
||||
|
@ -245,6 +240,12 @@ static dllfunc_t vbofuncs[] =
|
|||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static dllfunc_t multisampletexfuncs[] =
|
||||
{
|
||||
{ GL_CALL(glTexImage2DMultisample) },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
static dllfunc_t drawrangeelementsfuncs[] =
|
||||
{
|
||||
{ GL_CALL( glDrawRangeElements ) },
|
||||
|
@ -345,7 +346,7 @@ qboolean GL_CheckExtension( const char *name, const dllfunc_t *funcs, const char
|
|||
if( cvarname )
|
||||
{
|
||||
// system config disable extensions
|
||||
parm = gEngfuncs.Cvar_Get( cvarname, "1", FCVAR_GLCONFIG, va( CVAR_GLCONFIG_DESCRIPTION, name ));
|
||||
parm = gEngfuncs.Cvar_Get( cvarname, "1", FCVAR_GLCONFIG|FCVAR_READ_ONLY, va( CVAR_GLCONFIG_DESCRIPTION, name ));
|
||||
}
|
||||
|
||||
if(( parm && !CVAR_TO_BOOL( parm )) || ( !CVAR_TO_BOOL( gl_extensions ) && r_ext != GL_OPENGL_110 ))
|
||||
|
@ -648,7 +649,6 @@ void GL_InitExtensionsBigGL( void )
|
|||
const char *version = pglGetString( GL_VERSION | 0x10000 );
|
||||
const char *extensions = pglGetString( GL_EXTENSIONS | 0x10000 );
|
||||
glConfig.wrapper = GLES_WRAPPER_GL4ES;
|
||||
|
||||
}
|
||||
|
||||
// multitexture
|
||||
|
@ -711,6 +711,7 @@ void GL_InitExtensionsBigGL( void )
|
|||
GL_CheckExtension( "GL_ARB_depth_buffer_float", NULL, "gl_texture_depth_float", GL_ARB_DEPTH_FLOAT_EXT );
|
||||
GL_CheckExtension( "GL_EXT_gpu_shader4", NULL, NULL, GL_EXT_GPU_SHADER4 ); // don't confuse users
|
||||
GL_CheckExtension( "GL_ARB_vertex_buffer_object", vbofuncs, "gl_vertex_buffer_object", GL_ARB_VERTEX_BUFFER_OBJECT_EXT );
|
||||
GL_CheckExtension( "GL_ARB_texture_multisample", multisampletexfuncs, "gl_texture_multisample", GL_TEXTURE_MULTISAMPLE );
|
||||
if( GL_CheckExtension( "GL_ARB_shading_language_100", NULL, NULL, GL_SHADER_GLSL100_EXT ))
|
||||
{
|
||||
pglGetIntegerv( GL_MAX_TEXTURE_COORDS_ARB, &glConfig.max_texture_coords );
|
||||
|
@ -827,58 +828,39 @@ GL_InitCommands
|
|||
*/
|
||||
void GL_InitCommands( void )
|
||||
{
|
||||
r_speeds = gEngfuncs.Cvar_Get( "r_speeds", "0", FCVAR_ARCHIVE, "shows renderer speeds" );
|
||||
r_fullbright = gEngfuncs.Cvar_Get( "r_fullbright", "0", FCVAR_CHEAT, "disable lightmaps, get fullbright for entities" );
|
||||
r_norefresh = gEngfuncs.Cvar_Get( "r_norefresh", "0", 0, "disable 3D rendering (use with caution)" );
|
||||
r_lighting_extended = gEngfuncs.Cvar_Get( "r_lighting_extended", "1", FCVAR_ARCHIVE, "allow to get lighting from world and bmodels" );
|
||||
r_lighting_modulate = gEngfuncs.Cvar_Get( "r_lighting_modulate", "0.6", FCVAR_ARCHIVE, "lightstyles modulate scale" );
|
||||
r_lighting_ambient = gEngfuncs.Cvar_Get( "r_lighting_ambient", "0.3", FCVAR_ARCHIVE, "map ambient lighting scale" );
|
||||
RETRIEVE_ENGINE_SHARED_CVAR_LIST();
|
||||
|
||||
r_lighting_extended = gEngfuncs.Cvar_Get( "r_lighting_extended", "1", FCVAR_GLCONFIG, "allow to get lighting from world and bmodels" );
|
||||
r_lighting_modulate = gEngfuncs.Cvar_Get( "r_lighting_modulate", "0.6", FCVAR_GLCONFIG, "lightstyles modulate scale" );
|
||||
r_lighting_ambient = gEngfuncs.Cvar_Get( "r_lighting_ambient", "0.3", FCVAR_GLCONFIG, "map ambient lighting scale" );
|
||||
r_novis = gEngfuncs.Cvar_Get( "r_novis", "0", 0, "ignore vis information (perfomance test)" );
|
||||
r_nocull = gEngfuncs.Cvar_Get( "r_nocull", "0", 0, "ignore frustrum culling (perfomance test)" );
|
||||
r_detailtextures = gEngfuncs.Cvar_Get( "r_detailtextures", "1", FCVAR_ARCHIVE, "enable detail textures support" );
|
||||
r_lockpvs = gEngfuncs.Cvar_Get( "r_lockpvs", "0", FCVAR_CHEAT, "lockpvs area at current point (pvs test)" );
|
||||
r_lockfrustum = gEngfuncs.Cvar_Get( "r_lockfrustum", "0", FCVAR_CHEAT, "lock frustrum area at current point (cull test)" );
|
||||
r_dynamic = gEngfuncs.Cvar_Get( "r_dynamic", "1", FCVAR_ARCHIVE, "allow dynamic lighting (dlights, lightstyles)" );
|
||||
r_traceglow = gEngfuncs.Cvar_Get( "r_traceglow", "1", FCVAR_ARCHIVE, "cull flares behind models" );
|
||||
r_lightmap = gEngfuncs.Cvar_Get( "r_lightmap", "0", FCVAR_CHEAT, "lightmap debugging tool" );
|
||||
r_drawentities = gEngfuncs.pfnGetCvarPointer( "r_drawentities", 0 );
|
||||
r_decals = gEngfuncs.pfnGetCvarPointer( "r_decals", 0 );
|
||||
r_showhull = gEngfuncs.pfnGetCvarPointer( "r_showhull", 0 );
|
||||
r_traceglow = gEngfuncs.Cvar_Get( "r_traceglow", "1", FCVAR_GLCONFIG, "cull flares behind models" );
|
||||
|
||||
gl_extensions = gEngfuncs.Cvar_Get( "gl_allow_extensions", "1", FCVAR_GLCONFIG, "allow gl_extensions" );
|
||||
gl_texture_nearest = gEngfuncs.Cvar_Get( "gl_texture_nearest", "0", FCVAR_ARCHIVE, "disable texture filter" );
|
||||
gl_lightmap_nearest = gEngfuncs.Cvar_Get( "gl_lightmap_nearest", "0", FCVAR_ARCHIVE, "disable lightmap filter" );
|
||||
gl_check_errors = gEngfuncs.Cvar_Get( "gl_check_errors", "1", FCVAR_ARCHIVE, "ignore video engine errors" );
|
||||
gl_vsync = gEngfuncs.pfnGetCvarPointer( "gl_vsync", 0 );
|
||||
gl_texture_anisotropy = gEngfuncs.Cvar_Get( "gl_anisotropy", "8", FCVAR_ARCHIVE, "textures anisotropic filter" );
|
||||
gl_texture_lodbias = gEngfuncs.Cvar_Get( "gl_texture_lodbias", "0.0", FCVAR_ARCHIVE, "LOD bias for mipmapped textures (perfomance|quality)" );
|
||||
gl_keeptjunctions = gEngfuncs.Cvar_Get( "gl_keeptjunctions", "1", FCVAR_ARCHIVE, "removing tjuncs causes blinking pixels" );
|
||||
gl_emboss_scale = gEngfuncs.Cvar_Get( "gl_emboss_scale", "0", FCVAR_ARCHIVE|FCVAR_LATCH, "fake bumpmapping scale" );
|
||||
gl_showtextures = gEngfuncs.pfnGetCvarPointer( "r_showtextures", 0 );
|
||||
gl_finish = gEngfuncs.Cvar_Get( "gl_finish", "0", FCVAR_ARCHIVE, "use glFinish instead of glFlush" );
|
||||
gl_nosort = gEngfuncs.Cvar_Get( "gl_nosort", "0", FCVAR_ARCHIVE, "disable sorting of translucent surfaces" );
|
||||
gl_clear = gEngfuncs.pfnGetCvarPointer( "gl_clear", 0 );
|
||||
gl_extensions = gEngfuncs.Cvar_Get( "gl_allow_extensions", "1", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "allow gl_extensions" );
|
||||
gl_texture_nearest = gEngfuncs.Cvar_Get( "gl_texture_nearest", "0", FCVAR_GLCONFIG, "disable texture filter" );
|
||||
gl_lightmap_nearest = gEngfuncs.Cvar_Get( "gl_lightmap_nearest", "0", FCVAR_GLCONFIG, "disable lightmap filter" );
|
||||
gl_check_errors = gEngfuncs.Cvar_Get( "gl_check_errors", "1", FCVAR_GLCONFIG, "ignore video engine errors" );
|
||||
gl_texture_anisotropy = gEngfuncs.Cvar_Get( "gl_anisotropy", "8", FCVAR_GLCONFIG, "textures anisotropic filter" );
|
||||
gl_texture_lodbias = gEngfuncs.Cvar_Get( "gl_texture_lodbias", "0.0", FCVAR_GLCONFIG, "LOD bias for mipmapped textures (perfomance|quality)" );
|
||||
gl_keeptjunctions = gEngfuncs.Cvar_Get( "gl_keeptjunctions", "1", FCVAR_GLCONFIG, "removing tjuncs causes blinking pixels" );
|
||||
gl_finish = gEngfuncs.Cvar_Get( "gl_finish", "0", FCVAR_GLCONFIG, "use glFinish instead of glFlush" );
|
||||
gl_nosort = gEngfuncs.Cvar_Get( "gl_nosort", "0", FCVAR_GLCONFIG, "disable sorting of translucent surfaces" );
|
||||
gl_test = gEngfuncs.Cvar_Get( "gl_test", "0", 0, "engine developer cvar for quick testing new features" );
|
||||
gl_wireframe = gEngfuncs.Cvar_Get( "gl_wireframe", "0", FCVAR_ARCHIVE|FCVAR_SPONLY, "show wireframe overlay" );
|
||||
gl_msaa = gEngfuncs.Cvar_Get( "gl_msaa", "1", FCVAR_ARCHIVE, "enable or disable multisample anti-aliasing" );
|
||||
gl_stencilbits = gEngfuncs.Cvar_Get( "gl_stencilbits", "8", FCVAR_GLCONFIG, "pixelformat stencil bits (0 - auto)" );
|
||||
gl_round_down = gEngfuncs.Cvar_Get( "gl_round_down", "2", FCVAR_GLCONFIG, "round texture sizes to nearest POT value" );
|
||||
gl_wireframe = gEngfuncs.Cvar_Get( "gl_wireframe", "0", FCVAR_GLCONFIG|FCVAR_SPONLY, "show wireframe overlay" );
|
||||
gl_msaa = gEngfuncs.Cvar_Get( "gl_msaa", "1", FCVAR_GLCONFIG, "enable or disable multisample anti-aliasing" );
|
||||
gl_stencilbits = gEngfuncs.Cvar_Get( "gl_stencilbits", "8", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "pixelformat stencil bits (0 - auto)" );
|
||||
gl_round_down = gEngfuncs.Cvar_Get( "gl_round_down", "2", FCVAR_GLCONFIG|FCVAR_READ_ONLY, "round texture sizes to nearest POT value" );
|
||||
|
||||
// these cvar not used by engine but some mods requires this
|
||||
gl_polyoffset = gEngfuncs.Cvar_Get( "gl_polyoffset", "2.0", FCVAR_ARCHIVE, "polygon offset for decals" );
|
||||
gl_polyoffset = gEngfuncs.Cvar_Get( "gl_polyoffset", "2.0", FCVAR_GLCONFIG, "polygon offset for decals" );
|
||||
|
||||
// make sure gl_vsync is checked after vid_restart
|
||||
SetBits( gl_vsync->flags, FCVAR_CHANGED );
|
||||
|
||||
vid_gamma = gEngfuncs.pfnGetCvarPointer( "gamma", 0 );
|
||||
vid_brightness = gEngfuncs.pfnGetCvarPointer( "brightness", 0 );
|
||||
|
||||
tracerred = gEngfuncs.Cvar_Get( "tracerred", "0.8", 0, "tracer red component weight ( 0 - 1.0 )" );
|
||||
tracergreen = gEngfuncs.Cvar_Get( "tracergreen", "0.8", 0, "tracer green component weight ( 0 - 1.0 )" );
|
||||
tracerblue = gEngfuncs.Cvar_Get( "tracerblue", "0.4", 0, "tracer blue component weight ( 0 - 1.0 )" );
|
||||
traceralpha = gEngfuncs.Cvar_Get( "traceralpha", "0.5", 0, "tracer alpha amount ( 0 - 1.0 )" );
|
||||
|
||||
cl_lightstyle_lerping = gEngfuncs.pfnGetCvarPointer( "cl_lightstyle_lerping", 0 );
|
||||
|
||||
gEngfuncs.Cmd_AddCommand( "r_info", R_RenderInfo_f, "display renderer info" );
|
||||
gEngfuncs.Cmd_AddCommand( "timerefresh", SCR_TimeRefresh_f, "turn quickly and print rendering statistcs" );
|
||||
}
|
||||
|
@ -991,6 +973,10 @@ void R_Shutdown( void )
|
|||
|
||||
Mem_FreePool( &r_temppool );
|
||||
|
||||
#ifdef XASH_GL4ES
|
||||
close_gl4es();
|
||||
#endif // XASH_GL4ES
|
||||
|
||||
// shut down OS specific OpenGL stuff like contexts, etc.
|
||||
gEngfuncs.R_Free_Video();
|
||||
}
|
||||
|
@ -1135,13 +1121,13 @@ void GL_SetupAttributes( int safegl )
|
|||
|
||||
if( safegl < SAFE_NOMSAA )
|
||||
{
|
||||
switch( (int)gEngfuncs.pfnGetCvarFloat( "gl_wgl_msaa_samples" ))
|
||||
switch( (int)gEngfuncs.pfnGetCvarFloat( "gl_msaa_samples" ))
|
||||
{
|
||||
case 2:
|
||||
case 4:
|
||||
case 8:
|
||||
case 16:
|
||||
samples = gEngfuncs.pfnGetCvarFloat( "gl_wgl_msaa_samples" );
|
||||
samples = gEngfuncs.pfnGetCvarFloat( "gl_msaa_samples" );
|
||||
break;
|
||||
default:
|
||||
samples = 0; // don't use, because invalid parameter is passed
|
||||
|
@ -1164,15 +1150,13 @@ void GL_SetupAttributes( int safegl )
|
|||
}
|
||||
else
|
||||
{
|
||||
gEngfuncs.Cvar_Set( "gl_wgl_msaa_samples", "0" );
|
||||
gEngfuncs.Cvar_Set( "gl_msaa_samples", "0" );
|
||||
}
|
||||
}
|
||||
|
||||
void wes_init( const char *gles2 );
|
||||
int nanoGL_Init( void );
|
||||
#ifdef XASH_GL4ES
|
||||
#include "gl4es/include/gl4esinit.h"
|
||||
#include "gl4es/include/gl4eshint.h"
|
||||
void GL4ES_GetMainFBSize( int *width, int *height )
|
||||
{
|
||||
*width = gpGlobals->width;
|
||||
|
@ -1185,7 +1169,6 @@ void *GL4ES_GetProcAddress( const char *name )
|
|||
return NULL;
|
||||
return gEngfuncs.GL_GetProcAddress( name );
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void GL_OnContextCreated( void )
|
||||
|
@ -1220,5 +1203,4 @@ void GL_OnContextCreated( void )
|
|||
// dxt unpacked to 16-bit looks ugly
|
||||
pglHint( GL_AVOID16BITS_HINT_GL4ES, 1 );
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
|
@ -24,8 +24,6 @@ GNU General Public License for more details.
|
|||
#define MAPSPRITE_SIZE 128
|
||||
#define GLARE_FALLOFF 19000.0f
|
||||
|
||||
cvar_t *r_sprite_lerping;
|
||||
cvar_t *r_sprite_lighting;
|
||||
char sprite_name[MAX_QPATH];
|
||||
char group_suffix[8];
|
||||
static uint r_texFlags = 0;
|
||||
|
@ -40,8 +38,6 @@ R_SpriteInit
|
|||
*/
|
||||
void R_SpriteInit( void )
|
||||
{
|
||||
r_sprite_lerping = gEngfuncs.Cvar_Get( "r_sprite_lerping", "1", FCVAR_ARCHIVE, "enables sprite animation lerping" );
|
||||
r_sprite_lighting = gEngfuncs.Cvar_Get( "r_sprite_lighting", "1", FCVAR_ARCHIVE, "enables sprite lighting (blood etc)" );
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -34,8 +34,6 @@ typedef struct
|
|||
model_t *model;
|
||||
} player_model_t;
|
||||
|
||||
cvar_t *r_glowshellfreq;
|
||||
|
||||
cvar_t r_shadows = { "r_shadows", "0", 0 };
|
||||
|
||||
static vec3_t hullcolor[8] =
|
||||
|
@ -125,9 +123,7 @@ typedef struct
|
|||
|
||||
// studio-related cvars
|
||||
static cvar_t *r_studio_sort_textures;
|
||||
static cvar_t *r_drawviewmodel;
|
||||
cvar_t *cl_righthand = NULL;
|
||||
static cvar_t *cl_himodels;
|
||||
static cvar_t *cl_righthand = NULL;
|
||||
static cvar_t *r_studio_drawelements;
|
||||
|
||||
static r_studio_interface_t *pStudioDraw;
|
||||
|
@ -152,15 +148,10 @@ R_StudioInit
|
|||
*/
|
||||
void R_StudioInit( void )
|
||||
{
|
||||
// guaranteed to exist by engine
|
||||
cl_himodels = gEngfuncs.pfnGetCvarPointer( "cl_himodels", 0 );
|
||||
|
||||
r_studio_sort_textures = gEngfuncs.Cvar_Get( "r_studio_sort_textures", "0", FCVAR_ARCHIVE, "change draw order for additive meshes" );
|
||||
r_drawviewmodel = gEngfuncs.Cvar_Get( "r_drawviewmodel", "1", 0, "draw firstperson weapon model" );
|
||||
r_studio_drawelements = gEngfuncs.Cvar_Get( "r_studio_drawelements", "1", FCVAR_ARCHIVE, "use glDrawElements for studiomodels" );
|
||||
r_studio_sort_textures = gEngfuncs.Cvar_Get( "r_studio_sort_textures", "0", FCVAR_GLCONFIG, "change draw order for additive meshes" );
|
||||
r_studio_drawelements = gEngfuncs.Cvar_Get( "r_studio_drawelements", "1", FCVAR_GLCONFIG, "use glDrawElements for studiomodels" );
|
||||
|
||||
Matrix3x4_LoadIdentity( g_studio.rotationmatrix );
|
||||
r_glowshellfreq = gEngfuncs.Cvar_Get( "r_glowshellfreq", "2.2", 0, "glowing shell frequency update" );
|
||||
|
||||
// g-cont. cvar disabled by Valve
|
||||
// gEngfuncs.Cvar_RegisterVariable( &r_shadows );
|
||||
|
|
|
@ -20,9 +20,6 @@ ref_globals_t *gpGlobals;
|
|||
gl_globals_t tr;
|
||||
ref_speeds_t r_stats;
|
||||
poolhandle_t r_temppool;
|
||||
cvar_t *gl_emboss_scale;
|
||||
cvar_t *r_norefresh;
|
||||
cvar_t *vid_brightness;
|
||||
viddef_t vid;
|
||||
static void GAME_EXPORT R_ClearScreen( void )
|
||||
{
|
||||
|
|
|
@ -777,12 +777,6 @@ static void GL_ProcessImage( image_t *tex, rgbdata_t *pic )
|
|||
tex->flags &= ~TF_MAKELUMA;
|
||||
}
|
||||
|
||||
if( tex->flags & TF_ALLOW_EMBOSS )
|
||||
{
|
||||
img_flags |= IMAGE_EMBOSS;
|
||||
tex->flags &= ~TF_ALLOW_EMBOSS;
|
||||
}
|
||||
|
||||
if( !FBitSet( tex->flags, TF_IMG_UPLOADED ) && FBitSet( tex->flags, TF_KEEP_SOURCE ))
|
||||
tex->original = gEngfuncs.FS_CopyImage( pic ); // because current pic will be expanded to rgba
|
||||
|
||||
|
@ -790,9 +784,6 @@ static void GL_ProcessImage( image_t *tex, rgbdata_t *pic )
|
|||
if( pic->type == PF_INDEXED_24 || pic->type == PF_INDEXED_32 )
|
||||
img_flags |= IMAGE_FORCE_RGBA;
|
||||
|
||||
// processing image before uploading (force to rgba, make luma etc)
|
||||
if( pic->buffer ) gEngfuncs.Image_Process( &pic, 0, 0, img_flags, gl_emboss_scale->value );
|
||||
|
||||
if( FBitSet( tex->flags, TF_LUMINANCE ))
|
||||
ClearBits( pic->flags, IMAGE_HAS_COLOR );
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ extern poolhandle_t r_temppool;
|
|||
#define BLOCK_SIZE_DEFAULT 128 // for keep backward compatibility
|
||||
#define BLOCK_SIZE_MAX 1024
|
||||
|
||||
#define MAX_TEXTURES 4096
|
||||
#define MAX_TEXTURES 8192 // a1ba: increased by users request
|
||||
#define MAX_DECAL_SURFS 4096
|
||||
|
||||
#if XASH_LOW_MEMORY
|
||||
|
@ -686,73 +686,13 @@ void TriBrightness( float brightness );
|
|||
|
||||
extern ref_api_t gEngfuncs;
|
||||
extern ref_globals_t *gpGlobals;
|
||||
extern cvar_t *gl_emboss_scale;
|
||||
extern cvar_t *r_drawentities;
|
||||
extern cvar_t *vid_brightness;
|
||||
extern cvar_t *vid_gamma;
|
||||
extern cvar_t *r_norefresh;
|
||||
extern cvar_t *r_dynamic;
|
||||
extern cvar_t *r_lightmap;
|
||||
|
||||
DECLARE_ENGINE_SHARED_CVAR_LIST()
|
||||
|
||||
// todo: gl_cull.c
|
||||
#define R_CullModel(...) 0
|
||||
|
||||
#if 0
|
||||
//
|
||||
// renderer cvars
|
||||
//
|
||||
extern cvar_t *gl_texture_anisotropy;
|
||||
extern cvar_t *gl_extensions;
|
||||
extern cvar_t *gl_check_errors;
|
||||
extern cvar_t *gl_texture_lodbias;
|
||||
extern cvar_t *gl_texture_nearest;
|
||||
extern cvar_t *gl_lightmap_nearest;
|
||||
extern cvar_t *gl_keeptjunctions;
|
||||
|
||||
extern cvar_t *gl_round_down;
|
||||
extern cvar_t *gl_wireframe;
|
||||
extern cvar_t *gl_polyoffset;
|
||||
extern cvar_t *gl_finish;
|
||||
extern cvar_t *gl_nosort;
|
||||
extern cvar_t *gl_clear;
|
||||
extern cvar_t *gl_test; // cvar to testify new effects
|
||||
extern cvar_t *gl_msaa;
|
||||
extern cvar_t *gl_stencilbits;
|
||||
|
||||
extern cvar_t *r_speeds;
|
||||
extern cvar_t *r_fullbright;
|
||||
extern cvar_t *r_showtree; // build graph of visible hull
|
||||
extern cvar_t *r_lighting_extended;
|
||||
extern cvar_t *r_lighting_modulate;
|
||||
extern cvar_t *r_lighting_ambient;
|
||||
extern cvar_t *r_studio_lambert;
|
||||
extern cvar_t *r_detailtextures;
|
||||
extern cvar_t *r_drawentities;
|
||||
extern cvar_t *r_decals;
|
||||
extern cvar_t *r_novis;
|
||||
extern cvar_t *r_nocull;
|
||||
extern cvar_t *r_lockpvs;
|
||||
extern cvar_t *r_lockfrustum;
|
||||
extern cvar_t *r_traceglow;
|
||||
extern cvar_t *r_dynamic;
|
||||
extern cvar_t *r_lightmap;
|
||||
extern cvar_t *r_vbo;
|
||||
extern cvar_t *r_vbo_dlightmode;
|
||||
|
||||
extern cvar_t *vid_brightness;
|
||||
extern cvar_t *vid_gamma;
|
||||
|
||||
//
|
||||
// engine shared convars
|
||||
//
|
||||
extern cvar_t *gl_showtextures;
|
||||
extern cvar_t *tracerred;
|
||||
extern cvar_t *tracergreen;
|
||||
extern cvar_t *tracerblue;
|
||||
extern cvar_t *traceralpha;
|
||||
extern cvar_t *cl_lightstyle_lerping;
|
||||
extern cvar_t *r_showhull;
|
||||
#endif
|
||||
// softrender defs
|
||||
|
||||
#define CACHE_SIZE 32
|
||||
|
|
|
@ -56,7 +56,6 @@ int r_screenwidth;
|
|||
|
||||
int r_viewcluster, r_oldviewcluster;
|
||||
|
||||
cvar_t *r_lefthand;
|
||||
cvar_t *sw_aliasstats;
|
||||
cvar_t *sw_allow_modex;
|
||||
cvar_t *sw_clearcolor;
|
||||
|
@ -74,31 +73,18 @@ cvar_t *sw_notransbrushes;
|
|||
cvar_t *sw_noalphabrushes;
|
||||
|
||||
cvar_t *r_drawworld;
|
||||
cvar_t *r_drawentities;
|
||||
cvar_t *r_dspeeds;
|
||||
cvar_t *r_fullbright;
|
||||
cvar_t *r_lerpmodels;
|
||||
cvar_t *r_novis;
|
||||
cvar_t *r_lightmap;
|
||||
cvar_t *r_dynamic;
|
||||
cvar_t *r_traceglow;
|
||||
|
||||
cvar_t *tracerred;
|
||||
cvar_t *tracergreen;
|
||||
cvar_t *tracerblue;
|
||||
cvar_t *traceralpha;
|
||||
|
||||
cvar_t *r_speeds;
|
||||
cvar_t *r_lightlevel; //FIXME HACK
|
||||
|
||||
cvar_t *vid_fullscreen;
|
||||
cvar_t *vid_gamma;
|
||||
|
||||
//PGM
|
||||
cvar_t *sw_lockpvs;
|
||||
//PGM
|
||||
|
||||
cvar_t *r_decals;
|
||||
DEFINE_ENGINE_SHARED_CVAR_LIST()
|
||||
|
||||
int r_viewcluster, r_oldviewcluster;
|
||||
|
||||
|
@ -1927,15 +1913,7 @@ qboolean GAME_EXPORT R_Init( void )
|
|||
{
|
||||
qboolean glblit = false;
|
||||
|
||||
gl_emboss_scale = gEngfuncs.Cvar_Get( "gl_emboss_scale", "0", FCVAR_ARCHIVE|FCVAR_LATCH, "fake bumpmapping scale" );
|
||||
vid_gamma = gEngfuncs.pfnGetCvarPointer( "gamma", 0 );
|
||||
r_norefresh = gEngfuncs.Cvar_Get( "r_norefresh", "0", 0, "disable 3D rendering (use with caution)" );
|
||||
r_drawentities = gEngfuncs.pfnGetCvarPointer( "r_drawentities", 0 );
|
||||
vid_brightness = gEngfuncs.pfnGetCvarPointer( "brightness", 0 );
|
||||
r_fullbright = gEngfuncs.Cvar_Get( "r_fullbright", "0", FCVAR_CHEAT, "disable lightmaps, get fullbright for entities" );
|
||||
|
||||
r_dynamic = gEngfuncs.Cvar_Get( "r_dynamic", "1", FCVAR_ARCHIVE, "allow dynamic lighting (dlights, lightstyles)" );
|
||||
r_lightmap = gEngfuncs.Cvar_Get( "r_lightmap", "0", FCVAR_CHEAT, "lightmap debugging tool" );
|
||||
RETRIEVE_ENGINE_SHARED_CVAR_LIST();
|
||||
|
||||
// sw_aliasstats = ri.Cvar_Get ("sw_polymodelstats", "0", 0);
|
||||
// sw_allow_modex = ri.Cvar_Get( "sw_allow_modex", "1", CVAR_ARCHIVE );
|
||||
|
@ -1953,24 +1931,17 @@ qboolean GAME_EXPORT R_Init( void )
|
|||
sw_waterwarp = gEngfuncs.Cvar_Get ("sw_waterwarp", "1", FCVAR_GLCONFIG, "nothing");
|
||||
sw_notransbrushes = gEngfuncs.Cvar_Get( "sw_notransbrushes", "0", FCVAR_GLCONFIG, "do not apply transparency to water/glasses (faster)");
|
||||
sw_noalphabrushes = gEngfuncs.Cvar_Get( "sw_noalphabrushes", "0", FCVAR_GLCONFIG, "do not draw brush holes (faster)");
|
||||
r_traceglow = gEngfuncs.Cvar_Get( "r_traceglow", "1", FCVAR_ARCHIVE, "cull flares behind models" );
|
||||
r_traceglow = gEngfuncs.Cvar_Get( "r_traceglow", "1", FCVAR_GLCONFIG, "cull flares behind models" );
|
||||
#ifndef DISABLE_TEXFILTER
|
||||
sw_texfilt = gEngfuncs.Cvar_Get ("sw_texfilt", "0", FCVAR_GLCONFIG, "texture dither");
|
||||
#endif
|
||||
//r_lefthand = ri.Cvar_Get( "hand", "0", FCVAR_USERINFO | FCVAR_ARCHIVE );
|
||||
// r_speeds = ri.Cvar_Get ("r_speeds", "0", 0);
|
||||
r_decals = gEngfuncs.pfnGetCvarPointer( "r_decals", 0 );
|
||||
//r_drawworld = ri.Cvar_Get ("r_drawworld", "1", 0);
|
||||
//r_dspeeds = ri.Cvar_Get ("r_dspeeds", "0", 0);
|
||||
// r_lightlevel = ri.Cvar_Get ("r_lightlevel", "0", 0);
|
||||
//r_lerpmodels = ri.Cvar_Get( "r_lerpmodels", "1", 0 );
|
||||
r_novis = gEngfuncs.Cvar_Get( "r_novis", "0", 0, "" );
|
||||
|
||||
tracerred = gEngfuncs.Cvar_Get( "tracerred", "0.8", 0, "tracer red component weight ( 0 - 1.0 )" );
|
||||
tracergreen = gEngfuncs.Cvar_Get( "tracergreen", "0.8", 0, "tracer green component weight ( 0 - 1.0 )" );
|
||||
tracerblue = gEngfuncs.Cvar_Get( "tracerblue", "0.4", 0, "tracer blue component weight ( 0 - 1.0 )" );
|
||||
traceralpha = gEngfuncs.Cvar_Get( "traceralpha", "0.5", 0, "tracer alpha amount ( 0 - 1.0 )" );
|
||||
|
||||
r_temppool = Mem_AllocPool( "ref_soft zone" );
|
||||
|
||||
glblit = !!gEngfuncs.Sys_CheckParm( "-glblit" );
|
||||
|
|
|
@ -24,8 +24,6 @@ GNU General Public License for more details.
|
|||
#define MAPSPRITE_SIZE 128
|
||||
#define GLARE_FALLOFF 19000.0f
|
||||
|
||||
cvar_t *r_sprite_lerping;
|
||||
cvar_t *r_sprite_lighting;
|
||||
char sprite_name[MAX_QPATH];
|
||||
char group_suffix[8];
|
||||
static uint r_texFlags = 0;
|
||||
|
@ -40,8 +38,6 @@ R_SpriteInit
|
|||
*/
|
||||
void R_SpriteInit( void )
|
||||
{
|
||||
r_sprite_lerping = gEngfuncs.Cvar_Get( "r_sprite_lerping", "1", FCVAR_ARCHIVE, "enables sprite animation lerping" );
|
||||
r_sprite_lighting = gEngfuncs.Cvar_Get( "r_sprite_lighting", "1", FCVAR_ARCHIVE, "enables sprite lighting (blood etc)" );
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -34,8 +34,6 @@ typedef struct
|
|||
model_t *model;
|
||||
} player_model_t;
|
||||
|
||||
cvar_t *r_glowshellfreq;
|
||||
|
||||
cvar_t r_shadows = { "r_shadows", "0", 0 };
|
||||
|
||||
static vec3_t hullcolor[8] =
|
||||
|
@ -122,9 +120,7 @@ typedef struct
|
|||
|
||||
// studio-related cvars
|
||||
static cvar_t *r_studio_sort_textures;
|
||||
static cvar_t *r_drawviewmodel;
|
||||
cvar_t *cl_righthand = NULL;
|
||||
static cvar_t *cl_himodels;
|
||||
static cvar_t *cl_righthand = NULL;
|
||||
static cvar_t *r_studio_drawelements;
|
||||
|
||||
static r_studio_interface_t *pStudioDraw;
|
||||
|
@ -151,13 +147,8 @@ void R_StudioInit( void )
|
|||
{
|
||||
r_studio_sort_textures = gEngfuncs.Cvar_Get( "r_studio_sort_textures", "0", FCVAR_ARCHIVE, "change draw order for additive meshes" );
|
||||
r_drawviewmodel = gEngfuncs.Cvar_Get( "r_drawviewmodel", "1", 0, "draw firstperson weapon model" );
|
||||
r_studio_drawelements = gEngfuncs.Cvar_Get( "r_studio_drawelements", "1", FCVAR_ARCHIVE, "use glDrawElements for studiomodels" );
|
||||
|
||||
// guaranteed to exist by engine
|
||||
cl_himodels = gEngfuncs.pfnGetCvarPointer( "cl_himodels", 0 );
|
||||
|
||||
Matrix3x4_LoadIdentity( g_studio.rotationmatrix );
|
||||
r_glowshellfreq = gEngfuncs.Cvar_Get( "r_glowshellfreq", "2.2", 0, "glowing shell frequency update" );
|
||||
|
||||
// g-cont. cvar disabled by Valve
|
||||
// gEngfuncs.Cvar_RegisterVariable( &r_shadows );
|
||||
|
|
|
@ -292,13 +292,15 @@ static const VkExtensionProperties *findExtension( const VkExtensionProperties *
|
|||
|
||||
static qboolean deviceSupportsRtx( const VkExtensionProperties *exts, uint32_t num_exts )
|
||||
{
|
||||
qboolean result = true;
|
||||
|
||||
for (int i = 1 /* skip swapchain ext */; i < ARRAYSIZE(device_extensions); ++i) {
|
||||
if (!findExtension(exts, num_exts, device_extensions[i])) {
|
||||
gEngine.Con_Reportf(S_ERROR "Extension %s is not supported\n", device_extensions[i]);
|
||||
return false;
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
return result;
|
||||
}
|
||||
|
||||
// FIXME this is almost exactly the physical_device_t, reuse
|
||||
|
|
|
@ -208,12 +208,6 @@ static void VK_ProcessImage( vk_texture_t *tex, rgbdata_t *pic )
|
|||
tex->flags &= ~TF_MAKELUMA;
|
||||
}
|
||||
|
||||
if( tex->flags & TF_ALLOW_EMBOSS )
|
||||
{
|
||||
img_flags |= IMAGE_EMBOSS;
|
||||
tex->flags &= ~TF_ALLOW_EMBOSS;
|
||||
}
|
||||
|
||||
/* FIXME provod: ???
|
||||
if( !FBitSet( tex->flags, TF_IMG_UPLOADED ) && FBitSet( tex->flags, TF_KEEP_SOURCE ))
|
||||
tex->original = gEngine.FS_CopyImage( pic ); // because current pic will be expanded to rgba
|
||||
|
|
|
@ -11,10 +11,10 @@ def options(opt):
|
|||
grp = opt.add_option_group('ref_vk options')
|
||||
|
||||
grp.add_option('--disable-vulkan', action='store_false', dest='VK', default=True,
|
||||
help = 'disable vulkan [default: vulkan is enabled]')
|
||||
help = 'disable vulkan [default: %default]')
|
||||
|
||||
grp.add_option('', '--aftermath', action='store', dest = 'NSIGHT_AFTERMATH_SDK', default = None,
|
||||
help = 'Path to Nvidia Nsight Aftermath SDK (optional)')
|
||||
grp.add_option('--aftermath', action='store', dest = 'NSIGHT_AFTERMATH_SDK', default = None,
|
||||
help = 'path to Nvidia Nsight Aftermath SDK (optional) [default: %default]')
|
||||
|
||||
def configure(conf):
|
||||
# check for dedicated server build
|
||||
|
@ -39,7 +39,6 @@ def configure(conf):
|
|||
conf.load('glslc')
|
||||
|
||||
conf.define('REF_DLL', 1)
|
||||
conf.define('XASH_VULKAN', 1)
|
||||
|
||||
if conf.options.NSIGHT_AFTERMATH_SDK:
|
||||
conf.start_msg('Nvidia Nsight Aftermath SDK')
|
||||
|
@ -63,8 +62,8 @@ def configure(conf):
|
|||
# TODO if debug
|
||||
conf.env.GLSLCFLAGS += ['-g']
|
||||
|
||||
# TODO for rtx shaders only (rgen, rmiss, rchit, ...)
|
||||
conf.env.GLSLCFLAGS += ['--target-env=vulkan1.2']
|
||||
if '-Werror=declaration-after-statement' in conf.env.CFLAGS:
|
||||
conf.env.CFLAGS.remove('-Werror=declaration-after-statement')
|
||||
|
||||
def build(bld):
|
||||
if not bld.env.VK:
|
||||
|
@ -75,7 +74,8 @@ def build(bld):
|
|||
libpath = []
|
||||
|
||||
source = bld.path.ant_glob(['*.c'])
|
||||
glsl_source = bld.path.ant_glob(['shaders/*.vert', 'shaders/*.frag', 'shaders/*.comp', 'shaders/*.rgen', 'shaders/*.rchit', 'shaders/*.rmiss', 'shaders/*.rahit'])
|
||||
glsl_source = bld.path.ant_glob(['shaders/*.vert', 'shaders/*.frag', 'shaders/*.comp'])
|
||||
rtx_glsl_source = bld.path.ant_glob(['shaders/*.rgen', 'shaders/*.rchit', 'shaders/*.rmiss', 'shaders/*.rahit'])
|
||||
|
||||
includes = ['.',
|
||||
'../engine',
|
||||
|
@ -116,4 +116,11 @@ def build(bld):
|
|||
install_path = bld.env.LIBDIR + '/valve' # FIXME TEMPORARY!!!!
|
||||
)
|
||||
|
||||
bld(
|
||||
source = rtx_glsl_source,
|
||||
features = 'glsl',
|
||||
install_path = bld.env.LIBDIR + '/valve', # FIXME TEMPORARY!!!!
|
||||
glslcflags = '--target-env=vulkan1.2'
|
||||
)
|
||||
|
||||
bld.install_files(bld.env.LIBDIR + '/valve/maps', bld.path.ant_glob('rad/*.rad'))
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
. scripts/lib.sh
|
||||
|
||||
if [ "$1" = "dedicated" ]; then
|
||||
APP=xashds
|
||||
else # elif [ "$1" = "full" ]; then
|
||||
|
@ -12,9 +14,9 @@ build_engine()
|
|||
cd "$CIRRUS_WORKING_DIR" || die
|
||||
|
||||
if [ "$APP" = "xashds" ]; then
|
||||
./waf configure -T release -d -W || die
|
||||
./waf configure -T release -d || die
|
||||
elif [ "$APP" = "xash3d-fwgs" ]; then
|
||||
./waf configure -T release --enable-stb -W --enable-utils || die
|
||||
./waf configure -T release --enable-stb --enable-utils --enable-gl4es --enable-gles1 --enable-gles2 || die
|
||||
else
|
||||
die
|
||||
fi
|
||||
|
|
|
@ -50,13 +50,7 @@ fi
|
|||
RELEASE_BODY=""
|
||||
GIT_REPO_SLUG="$REPO_SLUG"
|
||||
|
||||
GIT_COMMIT="$TRAVIS_COMMIT"
|
||||
GIT_TAG="$TRAVIS_TAG"
|
||||
|
||||
if [ ! -z "$TRAVIS_REPO_SLUG" ] ; then
|
||||
GIT_REPO_SLUG="$TRAVIS_REPO_SLUG"
|
||||
RELEASE_BODY="Travis CI build log: ${TRAVIS_BUILD_WEB_URL}"
|
||||
elif [ ! -z "$GITHUB_ACTIONS" ] ; then
|
||||
if [ ! -z "$GITHUB_ACTIONS" ] ; then
|
||||
GIT_COMMIT="$GITHUB_SHA"
|
||||
GIT_REPO_SLUG="$GITHUB_REPOSITORY"
|
||||
if [[ "$GITHUB_REF" == "refs/tags/"* ]] ; then
|
||||
|
@ -115,99 +109,21 @@ else
|
|||
esac
|
||||
fi
|
||||
|
||||
if [ "$ARTIFACTORY_BASE_URL" != "" ]; then
|
||||
echo "ARTIFACTORY_BASE_URL set, trying to upload to artifactory"
|
||||
|
||||
if [ "$ARTIFACTORY_API_KEY" == "" ]; then
|
||||
echo "Please set ARTIFACTORY_API_KEY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
files="$@"
|
||||
|
||||
# artifactory doesn't support any kind of "artifact description", so we're uploading a text file containing the
|
||||
# relevant details along with the other artifacts
|
||||
tempdir=$(mktemp -d)
|
||||
info_file="$tempdir"/build-info.txt
|
||||
echo "Travis CI build log: ${TRAVIS_BUILD_WEB_URL}" > "$info_file"
|
||||
files+=("$info_file")
|
||||
|
||||
set +x
|
||||
|
||||
for file in ${files[@]}; do
|
||||
url="${ARTIFACTORY_BASE_URL}/travis-${TRAVIS_BUILD_NUMBER}/"$(basename "$file")
|
||||
md5sum=$(md5sum "$file" | cut -d' ' -f1)
|
||||
sha1sum=$(sha1sum "$file" | cut -d' ' -f1)
|
||||
sha256sum=$(sha256sum "$file" | cut -d' ' -f1)
|
||||
echo "Uploading $file to $url"
|
||||
hashsums=(-H "X-Checksum-Md5:$md5sum")
|
||||
hashsums+=(-H "X-Checksum-Sha1:$sha1sum")
|
||||
hashsums+=(-H "X-Checksum-Sha256:$sha256sum")
|
||||
if ! curl -H 'X-JFrog-Art-Api:'"$ARTIFACTORY_API_KEY" "${hashsums[@]}" -T "$file" "$url"; then
|
||||
echo "Failed to upload file, exiting"
|
||||
rm -r "$tempdir"
|
||||
exit 1
|
||||
fi
|
||||
echo
|
||||
echo "MD5 checksum: $md5sum"
|
||||
echo "SHA1 checksum: $sha1sum"
|
||||
echo "SHA256 checksum: $sha256sum"
|
||||
done
|
||||
rm -r "$tempdir"
|
||||
fi
|
||||
|
||||
# Do not upload non-master branch builds
|
||||
# if [ "$GIT_TAG" != "$TRAVIS_BRANCH" ] && [ "$TRAVIS_BRANCH" != "master" ]; then export TRAVIS_EVENT_TYPE=pull_request; fi
|
||||
if [ "$TRAVIS_EVENT_TYPE" == "pull_request" ] || [ "$GITHUB_EVENT_NAME" == "pull_request" ] ; then
|
||||
echo "Release uploading disabled for pull requests"
|
||||
if [ "$ARTIFACTORY_BASE_URL" != "" ]; then
|
||||
echo "Releases have already been uploaded to Artifactory, exiting"
|
||||
exit 0
|
||||
else
|
||||
echo "Release uploading disabled for pull requests, uploading to transfersh.com instead"
|
||||
rm -f ./uploaded-to
|
||||
for FILE in "$@" ; do
|
||||
BASENAME="$(basename "${FILE}")"
|
||||
curl \
|
||||
--max-time 60 \
|
||||
--connect-timeout 10 \
|
||||
--retry 5 \
|
||||
--speed-limit 16384 \
|
||||
--speed-time 10 \
|
||||
--upload-file $FILE \
|
||||
"https://transfersh.com/$BASENAME" \
|
||||
> ./one-upload
|
||||
echo "$(cat ./one-upload)" # this way we get a newline
|
||||
echo -n "$(cat ./one-upload)\\n" >> ./uploaded-to # this way we get a \n but no newline
|
||||
done
|
||||
fi
|
||||
# review_url="https://api.github.com/repos/${GIT_REPO_SLUG}/pulls/${TRAVIS_PULL_REQUEST}/reviews"
|
||||
# if [ -z $UPLOADTOOL_PR_BODY ] ; then
|
||||
# body="Travis CI has created build artifacts for this PR here:"
|
||||
# else
|
||||
# body="$UPLOADTOOL_PR_BODY"
|
||||
# fi
|
||||
# body="$body\n$(cat ./uploaded-to)\nThe link(s) will expire 14 days from now."
|
||||
# review_comment=$(curl -X POST \
|
||||
# --header "Authorization: token ${GITHUB_TOKEN}" \
|
||||
# --data '{"commit_id": "'"$GIT_COMMIT"'","body": "'"$body"'","event": "COMMENT"}' \
|
||||
# $review_url)
|
||||
# if echo $review_comment | grep -q "Bad credentials" 2>/dev/null ; then
|
||||
# echo '"Bad credentials" response for --data {"commit_id": "'"$GIT_COMMIT"'","body": "'"$body"'","event": "COMMENT"}'
|
||||
# fi
|
||||
if [ "$GITHUB_EVENT_NAME" == "pull_request" ] ; then
|
||||
echo "Release uploading disabled for pull requests, uploading to transfer.sh instead"
|
||||
rm -f ./uploaded-to
|
||||
for FILE in "$@" ; do
|
||||
BASENAME="$(basename "${FILE}")"
|
||||
curl --upload-file $FILE "https://transfer.sh/$BASENAME" > ./one-upload
|
||||
echo "$(cat ./one-upload)" # this way we get a newline
|
||||
echo -n "$(cat ./one-upload)\\n" >> ./uploaded-to # this way we get a \n but no newline
|
||||
done
|
||||
$shatool "$@"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ ! -z "$TRAVIS_REPO_SLUG" ] ; then
|
||||
echo "Running on Travis CI"
|
||||
echo "TRAVIS_COMMIT: $TRAVIS_COMMIT"
|
||||
if [ -z "$GITHUB_TOKEN" ] ; then
|
||||
echo "\$GITHUB_TOKEN missing, please set it in the Travis CI settings of this project"
|
||||
echo "You can get one from https://github.com/settings/tokens"
|
||||
exit 1
|
||||
fi
|
||||
elif [ ! -z "$GITHUB_ACTIONS" ] ; then
|
||||
if [ ! -z "$GITHUB_ACTIONS" ] ; then
|
||||
echo "Running on GitHub Actions"
|
||||
if [ -z "$GITHUB_TOKEN" ] ; then
|
||||
echo "\$GITHUB_TOKEN missing, please add the following to your run action:"
|
||||
|
@ -218,7 +134,7 @@ elif [ ! -z "$GITHUB_ACTIONS" ] ; then
|
|||
else
|
||||
echo "Not running on known CI"
|
||||
if [ -z "$GIT_REPO_SLUG" ] ; then
|
||||
read -r -p "Repo Slug (GitHub and Travis CI username/reponame): " GIT_REPO_SLUG
|
||||
read -r -p "Repo Slug (GitHub username/reponame): " GIT_REPO_SLUG
|
||||
fi
|
||||
if [ -z "$GITHUB_TOKEN" ] ; then
|
||||
read -r -s -p "Token (https://github.com/settings/tokens): " GITHUB_TOKEN
|
||||
|
@ -320,11 +236,6 @@ for FILE in "$@" ; do
|
|||
curl -H "Authorization: token ${GITHUB_TOKEN}" \
|
||||
-H "Accept: application/vnd.github.manifold-preview" \
|
||||
-H "Content-Type: application/octet-stream" \
|
||||
--max-time 60 \
|
||||
--connect-timeout 10 \
|
||||
--retry 5 \
|
||||
--speed-limit 16384 \
|
||||
--speed-time 10 \
|
||||
--data-binary "@$FULLNAME" \
|
||||
"$upload_url?name=$(urlencode "$BASENAME")"
|
||||
echo ""
|
||||
|
|
|
@ -46,9 +46,9 @@ build_engine()
|
|||
fi
|
||||
|
||||
if [ "$1" = "dedicated" ]; then
|
||||
./waf configure -T release -d -W $AMD64 || die
|
||||
./waf configure -T release -d $AMD64 || die
|
||||
elif [ "$1" = "full" ]; then
|
||||
./waf configure --sdl2=SDL2_linux -T release --enable-stb --prefix="$APPDIR" -W $AMD64 --enable-utils || die
|
||||
./waf configure --sdl2=SDL2_linux -T release --enable-stb $AMD64 --enable-utils || die
|
||||
else
|
||||
die
|
||||
fi
|
||||
|
@ -60,7 +60,7 @@ build_appimage()
|
|||
{
|
||||
cd "$BUILDDIR" || die
|
||||
|
||||
./waf install || die
|
||||
./waf install --destdir="$APPDIR" || die
|
||||
|
||||
# Generate extras.pak
|
||||
python3 scripts/makepak.py xash-extras/ "$APPDIR/extras.pak"
|
||||
|
|
|
@ -12,7 +12,7 @@ cd hlsdk
|
|||
./waf configure -T fast --enable-magx --enable-simple-mod-hacks build install --destdir=../Xash || die
|
||||
cd ../
|
||||
|
||||
./waf configure -T fast --enable-magx --win-style-install --prefix='' build install --destdir=Xash/ || die
|
||||
./waf configure -T fast --enable-magx build install --destdir=Xash/ || die
|
||||
|
||||
cat > Xash/run.sh << 'EOF'
|
||||
mypath=${0%/*}
|
||||
|
|
|
@ -14,7 +14,7 @@ fi
|
|||
|
||||
# NOTE: to build with other version use --msvc_version during configuration
|
||||
# NOTE: sometimes you may need to add WinSDK to %PATH%
|
||||
./waf.bat configure -s "SDL2_VC" -T "debug" --prefix=`pwd` --enable-utils $AMD64 || die
|
||||
./waf.bat configure -s "SDL2_VC" -T "debug" --enable-utils --prefix=`pwd` $AMD64 || die
|
||||
./waf.bat build -v || die
|
||||
./waf.bat install || die
|
||||
|
||||
|
|
|
@ -1,103 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
. scripts/lib.sh
|
||||
|
||||
APP=xash3d-fwgs
|
||||
APPDIR=$APP
|
||||
APPIMAGE=$APP-$ARCH.tar.xz
|
||||
|
||||
build_sdl2()
|
||||
{
|
||||
cd "$BUILDDIR"/SDL2_src || die
|
||||
if [ "$ARCH" = "i386" ]; then
|
||||
export CFLAGS="-msse2 -march=i686 -m32 -ggdb -O2"
|
||||
export LDFLAGS="-m32"
|
||||
fi
|
||||
./configure \
|
||||
--disable-render \
|
||||
--disable-haptic \
|
||||
--disable-power \
|
||||
--disable-filesystem \
|
||||
--disable-file \
|
||||
--disable-libudev \
|
||||
--disable-dbus \
|
||||
--disable-ibus \
|
||||
--disable-ime \
|
||||
--disable-fcitx \
|
||||
--enable-alsa-shared \
|
||||
--enable-pulseaudio-shared \
|
||||
--enable-wayland-shared \
|
||||
--enable-x11-shared \
|
||||
--prefix / || die # get rid of /usr/local stuff
|
||||
make -j2 || die
|
||||
mkdir -p "$BUILDDIR"/SDL2_linux
|
||||
make install DESTDIR="$BUILDDIR"/SDL2_linux || die
|
||||
export CFLAGS=""
|
||||
export LDFLAGS=""
|
||||
}
|
||||
|
||||
build_engine()
|
||||
{
|
||||
# Build engine
|
||||
cd "$BUILDDIR" || die
|
||||
|
||||
if [ "$ARCH" = "amd64" ]; then # we need enabling 64-bit target only on Intel-compatible CPUs
|
||||
AMD64="-8"
|
||||
fi
|
||||
|
||||
if [ "$1" = "dedicated" ]; then
|
||||
./waf configure -T release -d -W $AMD64 || die
|
||||
elif [ "$1" = "full" ]; then
|
||||
./waf configure --sdl2=SDL2_linux -T release --enable-stb --prefix="$APPDIR" -W $AMD64 --enable-utils || die
|
||||
else
|
||||
die
|
||||
fi
|
||||
|
||||
./waf build || die
|
||||
}
|
||||
|
||||
build_archive()
|
||||
{
|
||||
cd "$BUILDDIR" || die
|
||||
|
||||
./waf install || die
|
||||
|
||||
# Generate extras.pak
|
||||
python3 scripts/makepak.py xash-extras/ "$APPDIR/extras.pak"
|
||||
|
||||
cp SDL2_linux/lib/libSDL2-2.0.so.0 "$APPDIR/"
|
||||
if [ "$ARCH" = "i386" ]; then
|
||||
cp vgui-dev/lib/vgui.so "$APPDIR/"
|
||||
fi
|
||||
|
||||
cat > "$APPDIR"/run.sh << 'EOF'
|
||||
#!/bin/sh
|
||||
|
||||
if [ "$XASH3D_BASEDIR" = "" ]; then
|
||||
export XASH3D_BASEDIR=$PWD
|
||||
fi
|
||||
echo "Xash3D FWGS installed as tarball."
|
||||
echo "Base directory is $XASH3D_BASEDIR. Set XASH3D_BASEDIR environment variable to override this"
|
||||
|
||||
export XASH3D_EXTRAS_PAK1="${XASH3D_BASEDIR}"/extras.pak
|
||||
export LD_LIBRARY_PATH="${XASH3D_BASEDIR}":$LD_LIBRARY_PATH
|
||||
${DEBUGGER} "${XASH3D_BASEDIR}"/xash3d "$@"
|
||||
exit $?
|
||||
EOF
|
||||
|
||||
chmod +x "$APPDIR"/xash3d "$APPDIR"/run.sh # Engine launcher & engine launcher script
|
||||
|
||||
echo "Contents of tarball: "
|
||||
ls -R "$APPDIR"
|
||||
|
||||
tar -cJvf $APPIMAGE $APPDIR/*
|
||||
}
|
||||
|
||||
rm -rf build # clean-up build directory
|
||||
build_engine dedicated
|
||||
mv build/engine/xash xashds-linux-$ARCH
|
||||
|
||||
rm -rf build
|
||||
build_sdl2
|
||||
build_engine full
|
||||
build_archive
|
|
@ -1 +0,0 @@
|
|||
git clone --depth 1 https://github.com/FWGS/xash-extras
|
|
@ -1,11 +0,0 @@
|
|||
# SDL2 sources. We will build our own version
|
||||
curl http://libsdl.org/release/SDL2-$SDL_VERSION.zip -o SDL2.zip
|
||||
unzip -q SDL2.zip
|
||||
mv SDL2-$SDL_VERSION SDL2_src
|
||||
|
||||
# ref_vk required Vulkan SDK
|
||||
wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add -
|
||||
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.2.176-bionic.list https://packages.lunarg.com/vulkan/1.2.176/lunarg-vulkan-1.2.176-bionic.list
|
||||
sudo apt update
|
||||
[ "$ARCH" = "i386" ] && SUFFIX=":i386" || SUFFIX=""
|
||||
sudo apt install -y vulkan-sdk"$SUFFIX"
|
|
@ -51,7 +51,7 @@ CFLAGS = {
|
|||
'common': {
|
||||
# disable thread-safe local static initialization for C++11 code, as it cause crashes on Windows XP
|
||||
'msvc': ['/D_USING_V110_SDK71_', '/FS', '/Zc:threadSafeInit-', '/MT'],
|
||||
'clang': ['-g', '-gdwarf-2', '-fvisibility=hidden'],
|
||||
'clang': ['-g', '-gdwarf-2', '-fvisibility=hidden', '-fno-threadsafe-statics'],
|
||||
'gcc': ['-g', '-fvisibility=hidden'],
|
||||
'owcc': ['-fno-short-enum', '-ffloat-store', '-g3']
|
||||
},
|
||||
|
|
|
@ -44,6 +44,10 @@ def process_glsl_source(self, src):
|
|||
self.env.INCPATHS = [x.path_from(cwd) for x in lst]
|
||||
self.env.append_unique('GLSLCDEFINES', self.to_list(getattr(self, 'defines', [])))
|
||||
|
||||
flags = getattr(self, 'glslcflags', None)
|
||||
if flags:
|
||||
self.env.append_unique('GLSLCFLAGS', self.to_list(flags))
|
||||
|
||||
tsk = self.create_task('glsl', src, src.parent.find_or_declare('%s.spv' % src.name))
|
||||
|
||||
inst_to = getattr(self, 'install_path', None)
|
||||
|
|
|
@ -20,12 +20,12 @@ import os
|
|||
import sys
|
||||
|
||||
ANDROID_NDK_ENVVARS = ['ANDROID_NDK_HOME', 'ANDROID_NDK']
|
||||
ANDROID_NDK_SUPPORTED = [10, 19, 20]
|
||||
ANDROID_NDK_SUPPORTED = [10, 19, 20, 23]
|
||||
ANDROID_NDK_HARDFP_MAX = 11 # latest version that supports hardfp
|
||||
ANDROID_NDK_GCC_MAX = 17 # latest NDK that ships with GCC
|
||||
ANDROID_NDK_UNIFIED_SYSROOT_MIN = 15
|
||||
ANDROID_NDK_SYSROOT_FLAG_MAX = 19 # latest NDK that need --sysroot flag
|
||||
ANDROID_NDK_API_MIN = { 10: 3, 19: 16, 20: 16 } # minimal API level ndk revision supports
|
||||
ANDROID_NDK_API_MIN = { 10: 3, 19: 16, 20: 16, 23: 16 } # minimal API level ndk revision supports
|
||||
ANDROID_64BIT_API_MIN = 21 # minimal API level that supports 64-bit targets
|
||||
|
||||
# This class does support ONLY r10e and r19c/r20 NDK
|
||||
|
@ -196,6 +196,8 @@ class Android:
|
|||
return os.path.join(self.gen_gcc_toolchain_path(), 'bin', triplet)
|
||||
|
||||
def gen_binutils_path(self):
|
||||
if self.ndk_rev >= 23:
|
||||
return os.path.join(self.gen_gcc_toolchain_path(), 'bin')
|
||||
return os.path.join(self.gen_gcc_toolchain_path(), self.ndk_triplet(), 'bin')
|
||||
|
||||
def cc(self):
|
||||
|
@ -227,6 +229,9 @@ class Android:
|
|||
if 'STRIP' in environ:
|
||||
return environ['STRIP']
|
||||
return 'llvm-strip'
|
||||
|
||||
if self.ndk_rev >= 23:
|
||||
return os.path.join(self.gen_binutils_path(), 'llvm-strip')
|
||||
return os.path.join(self.gen_binutils_path(), 'strip')
|
||||
|
||||
def system_stl(self):
|
||||
|
@ -322,9 +327,16 @@ class Android:
|
|||
return linkflags
|
||||
|
||||
def ldflags(self):
|
||||
ldflags = ['-lgcc', '-no-canonical-prefixes']
|
||||
ldflags = []
|
||||
|
||||
if self.ndk_rev < 23:
|
||||
ldflags += ['-lgcc']
|
||||
|
||||
ldflags += ['-no-canonical-prefixes']
|
||||
|
||||
if self.is_clang() or self.is_host():
|
||||
ldflags += ['-stdlib=libstdc++']
|
||||
|
||||
if self.is_arm():
|
||||
if self.arch == 'armeabi-v7a':
|
||||
ldflags += ['-march=armv7-a', '-mthumb']
|
||||
|
|
23
wscript
23
wscript
|
@ -79,8 +79,8 @@ def options(opt):
|
|||
grp.add_option('-8', '--64bits', action = 'store_true', dest = 'ALLOW64', default = False,
|
||||
help = 'allow targetting 64-bit engine(Linux/Windows/OSX x86 only) [default: %default]')
|
||||
|
||||
grp.add_option('-W', '--win-style-install', action = 'store_true', dest = 'WIN_INSTALL', default = False,
|
||||
help = 'install like Windows build, ignore prefix, useful for development [default: %default]')
|
||||
grp.add_option('-P', '--enable-packaging', action = 'store_true', dest = 'PACKAGING', default = False,
|
||||
help = 'respect prefix option, useful for packaging for various operating systems [default: %default]')
|
||||
|
||||
grp.add_option('--enable-bsp2', action = 'store_true', dest = 'SUPPORT_BSP2_FORMAT', default = False,
|
||||
help = 'build engine and renderers with BSP2 map support(recommended for Quake, breaks compatibility!) [default: %default]')
|
||||
|
@ -148,8 +148,6 @@ def configure(conf):
|
|||
conf.options.NANOGL = True
|
||||
conf.options.GLWES = True
|
||||
conf.options.GL = False
|
||||
# Vulkan is not supported on Android yet for CI reasons: requres NDK>12, glslc lookup etc.
|
||||
conf.options.VK = False
|
||||
elif conf.env.MAGX:
|
||||
conf.options.USE_SELECT = True
|
||||
conf.options.SDL12 = True
|
||||
|
@ -161,8 +159,8 @@ def configure(conf):
|
|||
conf.options.NO_ASYNC_RESOLVE = True
|
||||
conf.define('XASH_SDLMAIN', 1)
|
||||
enforce_pic = False
|
||||
else:
|
||||
conf.options.VK = True
|
||||
elif conf.env.DEST_OS == 'dos':
|
||||
conf.options.SINGLE_BINARY = True
|
||||
|
||||
if conf.env.STATIC_LINKING:
|
||||
enforce_pic = False # PIC may break full static builds
|
||||
|
@ -252,8 +250,6 @@ def configure(conf):
|
|||
conf.env.ENABLE_UTILS = conf.options.ENABLE_UTILS
|
||||
conf.env.DEDICATED = conf.options.DEDICATED
|
||||
conf.env.SINGLE_BINARY = conf.options.SINGLE_BINARY or conf.env.DEDICATED
|
||||
if conf.env.DEST_OS == 'dos':
|
||||
conf.env.SINGLE_BINARY = True
|
||||
|
||||
if conf.env.DEST_OS != 'win32':
|
||||
conf.check_cc(lib='dl', mandatory=False)
|
||||
|
@ -296,11 +292,20 @@ def configure(conf):
|
|||
else:
|
||||
conf.undefine('HAVE_TGMATH_H')
|
||||
|
||||
# check if we can use alloca.h or malloc.h
|
||||
if conf.check_cc(header_name='alloca.h', mandatory=False):
|
||||
conf.define('ALLOCA_H', 'alloca.h')
|
||||
elif conf.check_cc(header_name='malloc.h', mandatory=False):
|
||||
conf.define('ALLOCA_H', 'malloc.h')
|
||||
|
||||
# indicate if we are packaging for Linux/BSD
|
||||
if not conf.options.WIN_INSTALL and conf.env.DEST_OS not in ['win32', 'darwin', 'android']:
|
||||
if conf.options.PACKAGING:
|
||||
conf.env.LIBDIR = conf.env.BINDIR = '${PREFIX}/lib/xash3d'
|
||||
conf.env.SHAREDIR = '${PREFIX}/share/xash3d'
|
||||
else:
|
||||
if sys.platform != 'win32':
|
||||
conf.env.PREFIX = '/'
|
||||
|
||||
conf.env.SHAREDIR = conf.env.LIBDIR = conf.env.BINDIR = conf.env.PREFIX
|
||||
|
||||
conf.define('XASH_BUILD_COMMIT', conf.env.GIT_VERSION if conf.env.GIT_VERSION else 'notset')
|
||||
|
|
Loading…
Reference in New Issue