Compare commits

...

95 Commits

Author SHA1 Message Date
Alibek Omarov
05ff0d6020 engine: cmd: remove unused global variable 2024-02-17 22:17:22 +03:00
Alibek Omarov
3cea12627e engine: client: add cl_trace_stufftext from old engine 2024-02-17 22:16:39 +03:00
Alibek Omarov
b59b7c1a8d engine: server: better error message for missing spawn functions 2024-02-17 22:15:41 +03:00
Alibek Omarov
dd2c369df3 engine: imagelib: fix integer overflow on huge images when calculating reflectivity 2024-02-17 22:14:27 +03:00
Andrey Akhmichin
8b79e49a0f engine: server: execute maps/<mapname>_unload.cfg on server deactivation. 2024-02-16 17:57:26 +03:00
Andrey Akhmichin
4ea6eba8f2 engine: server: execute maps/<mapname>_load.cfg before entities precaching. 2024-02-16 17:57:26 +03:00
Andrey Akhmichin
f649076bc3 engine: server: execute map change config file before entities precaching. 2024-02-16 17:57:26 +03:00
Andrey Akhmichin
8ecffa4663 engine: server: define new "disconcfgfile" cvar. 2024-02-16 17:57:26 +03:00
Andrey Akhmichin
e90b83849a engine: server: execute map change config file in singleplayer. 2024-02-16 17:57:26 +03:00
Andrey Akhmichin
d517b9717a engine: server: define new "_sv_override_scientist_mdl" cvar for Uplink's scientist model. 2024-02-16 17:57:26 +03:00
Alibek Omarov
2c0d6e06be engine: server: return NULL in SV_ClientBy{Id,Name} if client array isn't allocated 2024-02-15 13:56:47 +03:00
Alibek Omarov
dec71850a1 engine: console: allow changing background filtering 2024-02-13 15:34:33 +03:00
Alibek Omarov
b1860972c6 engine: font: fix inverted check, fix potential division by zero 2024-02-13 15:33:51 +03:00
Alibek Omarov
1f4c9b67da engine: server: don't init or send voice chat in singleplayer 2024-02-13 15:09:26 +03:00
Alibek Omarov
c2da125358 engine: client: as an experiment, let users override default font rendermode through hud_fontrender and con_fontrender cvars 2024-02-09 07:25:47 +03:00
Alibek Omarov
31fa990d44 engine: gamma: fix gamma changes not caught if gamma cvar was set during frame 2024-02-09 06:29:30 +03:00
Alibek Omarov
d3e60c7d84 engine: gamma: higher brightness limit for compatibility 2024-02-09 06:28:31 +03:00
Alibek Omarov
e2424b4303 engine: server: clean up userinfo and fullupdate throttle on client connect 2024-02-07 23:27:02 +03:00
Alibek Omarov
240563cd1b engine: client: set r_lighting_modulate to 0.6 and save it to config for old Xash mods that use it internally 2024-02-07 23:22:27 +03:00
Alibek Omarov
d708cd58fb mainui: update 2024-02-07 23:22:27 +03:00
Alibek Omarov
491b503f96 engine: common: optimize COM_LoadFile/COM_LoadFileForMe removing double allocation 2024-02-07 23:22:27 +03:00
Alibek Omarov
636a2228f6 filesystem: add new API function LoadFileMalloc that returns a pointer that can be freed using standard free() 2024-02-07 23:22:27 +03:00
Alibek Omarov
bb03e2597c filesystem: allow to pass custom allocation functions to LoadFile 2024-02-07 23:22:27 +03:00
Alibek Omarov
21c828ee40 engine: sounds: remove extra logging 2024-02-05 15:57:59 +03:00
Alibek Omarov
132c9de142 engine: host: add the most important command line flag help string 2024-02-05 15:28:18 +03:00
Alibek Omarov
9d9507d77f engine: change mobility API license to Unlicense, as with build.h
See GitHub issue: https://github.com/FWGS/hlsdk-portable/issues/259

Signed-off-by: Alibek Omarov <a1ba.omarov@gmail.com>
2024-02-05 15:01:03 +03:00
Alibek Omarov
7daa6c3451 engine: server: use soundlist to acquire random sounds for physics 2024-02-05 12:49:31 +03:00
Alibek Omarov
c8e1ffe0dd engine: client: use soundlist to acquire random sounds for temp entities 2024-02-05 12:49:31 +03:00
Alibek Omarov
b5f02324a6 engine: add basic sounds.lst implementation 2024-02-05 12:49:27 +03:00
Alibek Omarov
47f5dfdcfd common: define macros for color codes for easier access 2024-02-05 12:49:27 +03:00
Alibek Omarov
33da68b013 engine: client: move reseting gamma changed flag to the end of the frame for custom renderers 2024-02-05 03:41:15 +03:00
Alibek Omarov
618ec83c9d engine: client: don't trigger CheckGamma if there is no screenshot action 2024-02-05 03:40:14 +03:00
Alibek Omarov
85de61ebc8 engine: client: fix userid not being written to player info on userinfo change 2024-02-05 02:58:46 +03:00
Alibek Omarov
2feaae59f7 engine: client: bring back r_lighting_modulate, as a compatibility cvar 2024-02-02 13:52:17 +03:00
Alibek Omarov
2550d7fbd3 public: tests: remove linuxunkabi remnants 2024-02-01 02:54:22 +03:00
Alibek Omarov
565f717804 ref: add ref_null renderer that does nothing
This was sitting in my git stash for months. Let's publish it now.
2024-02-01 02:45:19 +03:00
Alibek Omarov
b56c83a2f9 Documentation: add a note about musl 2024-01-31 23:59:28 +03:00
Alibek Omarov
bf17996f72 public: remove linuxunkabi 2024-01-31 23:59:28 +03:00
Alibek Omarov
a3acb1c85b engine: gamma: validate gamma cvars in local games too 2024-01-30 17:55:36 +03:00
Alibek Omarov
d4d63301e0 mainui: update 2024-01-30 17:50:31 +03:00
Alibek Omarov
e9af0c9810 ref: gl: wscript: remove all libs dependencies from gles3compat, added by mistake 2024-01-30 17:40:59 +03:00
Alibek Omarov
131ad9c790 3rdparty: update submodules 2024-01-30 17:28:12 +03:00
Alibek Omarov
bfcaba54dc wscript: move werror flags into uselib 2024-01-30 17:24:17 +03:00
Alibek Omarov
f67736180b engine: client: allow nearest filtering for loading and pause icons 2024-01-29 05:59:29 +03:00
Alibek Omarov
725b7ea7f9 common: render_api: rename TF_ALLOW_NEAREST_TOGGLE to just TF_ALLOW_NEAREST, it's just shorter 2024-01-29 05:59:06 +03:00
Alibek Omarov
600d574376 ref: gl: make use of new TF_ALLOW_NEAREST_TOGGLE flag 2024-01-29 05:50:59 +03:00
Alibek Omarov
04f42df7d5 common: render_api: new flag TF_ALLOW_NEAREST_TOGGLE that allows toggling nearest filtering for TF_NOMIPMAP textures 2024-01-29 05:48:42 +03:00
Alibek Omarov
ab15662d78 ref: gl: fix toggling nearest filter on TF_NOMIPMAP textures 2024-01-29 05:48:08 +03:00
Alibek Omarov
072b0cef27 ref: gl: small refactoring on filter choosing for newly uploaded texture 2024-01-29 05:47:10 +03:00
Alibek Omarov
e274c62cfc ref: gl: use TextureFilteringEnabled to decide whether texture will have nearest filtering or linear 2024-01-29 05:44:14 +03:00
Alibek Omarov
a28d45fdb2 engine: console: fix TF_NEAREST missing from quake fixed font 2024-01-29 05:42:22 +03:00
Alibek Omarov
6ca5f7c6fb engine: client: request if font texture has nearest filtering from the renderer 2024-01-29 05:41:16 +03:00
Alibek Omarov
af316bff14 engine: client: add hud_scale_minimal_width to limit scaling factor and potentially avoid unsupported hud sprites resolutions 2024-01-29 04:58:07 +03:00
Alibek Omarov
c8945caefc engine: net_buffer: remove unused MSG_SeekToByte 2024-01-28 20:01:29 +03:00
Alibek Omarov
8c61a2f021 engine: server: cleanup server.h header from unused functions prototypes 2024-01-28 11:35:53 +03:00
Alibek Omarov
0b24810927 engine: client: clean up client.h from unused function prototypes, or move them to appropriate C file 2024-01-28 11:17:06 +03:00
Alibek Omarov
b3d8fb03bf engine: client: add generic handler for simple types of screenshots commands 2024-01-28 10:43:37 +03:00
Alibek Omarov
02c5890c2f ref: soft: cleanup after RefAPI changes, remove unused functions 2024-01-28 10:00:51 +03:00
Alibek Omarov
0579e40857 engine: server: remove unused DumpHashString function 2024-01-28 10:00:51 +03:00
Alibek Omarov
c77f290bc6 engine: remove Netsplit_SendLong, as we're not planning to support old protocol on server side 2024-01-28 10:00:51 +03:00
Alibek Omarov
7bf9407177 ref: gl: remove R_TextureRandomTiling, it's handled by R_TextureAnimation (random tiling as a feature still broken) 2024-01-28 10:00:51 +03:00
Alibek Omarov
b41fe076ae engine: server: exclude expired IP filters from check 2024-01-28 10:00:51 +03:00
Alibek Omarov
a7c422fde6 engine: platform: make Platform_SetTimer static inline to not fix unused-function 2024-01-28 10:00:51 +03:00
Alibek Omarov
568a394a40 wscript: enable -Wunused-functions 2024-01-28 10:00:51 +03:00
Alibek Omarov
2b6a550405 engine: clean up common.h header from unused function prototypes, or move them to appropriate header or C file 2024-01-28 10:00:17 +03:00
Alibek Omarov
7200f0da7e 3rdparty: gl-wes-v2: update 2024-01-28 09:55:18 +03:00
Alibek Omarov
d3c3c26618 ref: gl: vgl_shim: fix -Wmissing-prototypes 2024-01-28 09:55:18 +03:00
Alibek Omarov
7152393089 ref: soft: fix -Wmissing-prototypes 2024-01-28 09:55:18 +03:00
Alibek Omarov
661e60720d ref: gl: fix -Wmissing-prototypes 2024-01-28 09:55:18 +03:00
Alibek Omarov
bf959da7ff engine: libmpg: fix -Wmissing-prototypes 2024-01-28 09:55:18 +03:00
Alibek Omarov
75d476f9df engine: fix -Wmissing-prototypes 2024-01-28 09:55:18 +03:00
Alibek Omarov
b077822f4d filesystem: fix -Wmissing-prototypes 2024-01-28 09:55:18 +03:00
Alibek Omarov
6d3f188675 public: fix -Wmissing-prototypes 2024-01-28 09:55:18 +03:00
Alibek Omarov
0231f5e8ac wscript: warn about missing-prototypes by default for C 2024-01-28 09:55:18 +03:00
Alibek Omarov
901b35d4b1 ref: soft: rework @SNMetamorph's fix for avoiding crash when no world is set (like Customize menu with enabled 3D view) 2024-01-27 17:31:34 +03:00
Alibek Omarov
eaafd0ff13 ref: gl: rework @SNMetamorph's fix for avoiding crash when no world is set (like Customize menu with enabled 3D view) 2024-01-27 17:31:26 +03:00
Alibek Omarov
963d9b8f2a ref: soft: remove useless R_CountDynamicLights function 2024-01-27 17:16:01 +03:00
Alibek Omarov
5696c9c96a ref: gl: remove useless R_CountDynamicLights function 2024-01-27 17:15:57 +03:00
Alibek Omarov
862b9e68be engine: server: fix possible null pointer dereference 2024-01-25 16:21:55 +03:00
Alibek Omarov
2f2890cd11 engine: client: use PARM_TEX_FILTERING to figure out whether we should apply half-texel trick to HUD textures when scaling 2024-01-25 05:50:11 +03:00
Alibek Omarov
482aa840e7 ref: soft: add PARM_TEX_FILTERING handler (stub) 2024-01-25 05:47:12 +03:00
Alibek Omarov
4599983c8e ref: gl: add PARM_TEX_FILTERING handler 2024-01-25 05:46:54 +03:00
Alibek Omarov
11172838f2 engine: ref_api: add PARM_TEX_FILTERING into RefAPI to query if filtering is enabled for selected texture 2024-01-25 05:43:51 +03:00
Alibek Omarov
47bc50b8c6 engine: client: fix taking console color from colors.lst 2024-01-25 04:22:20 +03:00
Alibek Omarov
7c82766a5c readme: add sourcehut builds badge [skip ci] 2024-01-24 21:10:21 +03:00
Alibek Omarov
5d6cf62405 engine: client: voice: open microphone only after server sends svc_voiceinit to us and shutdown immediately after disconnect 2024-01-24 20:52:21 +03:00
Alibek Omarov
edc08e39ef common: move FORCEINLINE from port.h to xash3d_types.h, alongside other compiler-specific attributes 2024-01-24 20:51:34 +03:00
Alibek Omarov
a9846e765d waf: upgrade to latest waifu 2024-01-23 21:34:49 +03:00
Alibek Omarov
aa54309d5c engine: wscript: fix pthreads check by explicitly checking it in C mode 2024-01-23 21:23:23 +03:00
Alibek Omarov
443317bedf wscript: fix RPATH under OpenBSD 2024-01-23 21:03:10 +03:00
Alibek Omarov
ffd320507f ci: enable builds.sr.ht 2024-01-23 20:42:09 +03:00
Alibek Omarov
60df08c11c engine: crashhandler: fix build for NetBSD AMD64 2024-01-23 20:25:17 +03:00
Alibek Omarov
7d464df107 engine: platform: linux: define portability macro for sigevent (oh, glibc...) 2024-01-23 19:22:56 +03:00
Alibek Omarov
296f89acf9 engine: platform: linux: fix build with musl (and probably other libcs) using portability macro 2024-01-23 18:57:33 +03:00
mittorn
5f31417bae ref_gl: fix missing vboarray split transition on some maps 2024-01-19 21:28:49 +03:00
168 changed files with 2846 additions and 1783 deletions

27
.builds/alpine.yml Normal file
View File

@@ -0,0 +1,27 @@
image: alpine/latest
packages:
- build-base
- sdl2-dev
- freetype-dev
- fontconfig-dev
- opus-dev
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:
- client: |
cd xash3d-fwgs
./waf configure -8 --enable-tests --enable-engine-tests build install --destdir=bin
- server: |
cd xash3d-fwgs
./waf configure --reconfigure --dedicated build install --destdir=bin
- run-tests: |
cd xash3d-fwgs/bin
export SDL_VIDEODRIVER=wayland
./xash3d -runtests
./xash -runtests
rm -rf valve/gameinfo.txt test_*
- package: |
cd xash3d-fwgs/bin
tar -cjvf xash3d-fwgs-alpine-amd64.tar.bz2 *
artifacts:
- xash3d-fwgs/bin/xash3d-fwgs-alpine-amd64.tar.bz2

30
.builds/debian-arm64.yml Normal file
View File

@@ -0,0 +1,30 @@
image: debian/sid
arch: amd64
packages:
- build-essential
- python-is-python3
- libsdl2-dev
- libfreetype-dev
- libfontconfig-dev
- libopus-dev
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:
- client: |
cd xash3d-fwgs
./waf configure -8 --enable-tests --enable-engine-tests build install --destdir=bin
- server: |
cd xash3d-fwgs
./waf configure --reconfigure --dedicated build install --destdir=bin
- run-tests: |
cd xash3d-fwgs/bin
export SDL_VIDEODRIVER=wayland
./xash3d -runtests
./xash -runtests
rm -rf valve/gameinfo.txt test_*
- package: |
cd xash3d-fwgs/bin
tar -cjvf xash3d-fwgs-debian-arm64.tar.bz2 *
artifacts:
- xash3d-fwgs/bin/xash3d-fwgs-debian-arm64.tar.bz2

29
.builds/debian.yml Normal file
View File

@@ -0,0 +1,29 @@
image: debian/sid
packages:
- build-essential
- python-is-python3
- libsdl2-dev
- libfreetype-dev
- libfontconfig-dev
- libopus-dev
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:
- client: |
cd xash3d-fwgs
./waf configure -8 --enable-tests --enable-engine-tests build install --destdir=bin
- server: |
cd xash3d-fwgs
./waf configure --reconfigure --dedicated build install --destdir=bin
- run-tests: |
cd xash3d-fwgs/bin
export SDL_VIDEODRIVER=wayland
./xash3d -runtests
./xash -runtests
rm -rf valve/gameinfo.txt test_*
- package: |
cd xash3d-fwgs/bin
tar -cjvf xash3d-fwgs-debian-amd64.tar.bz2 *
artifacts:
- xash3d-fwgs/bin/xash3d-fwgs-debian-amd64.tar.bz2

29
.builds/freebsd.yml Normal file
View File

@@ -0,0 +1,29 @@
image: freebsd/latest
packages:
- lang/python
- devel/pkgconf
- devel/sdl20
- print/freetype2
- x11-fonts/fontconfig
- audio/opus
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:
- client: |
cd xash3d-fwgs
./waf configure --enable-tests --enable-engine-tests build install --destdir=bin
- server: |
cd xash3d-fwgs
./waf configure --reconfigure --dedicated build install --destdir=bin
- run-tests: |
cd xash3d-fwgs/bin
export SDL_VIDEODRIVER=wayland
./xash3d -runtests
./xash -runtests
rm -rf valve/gameinfo.txt test_*
- package: |
cd xash3d-fwgs/bin
tar -cjvf xash3d-fwgs-freebsd-amd64.tar.bz2 *
artifacts:
- xash3d-fwgs/bin/xash3d-fwgs-freebsd-amd64.tar.bz2

29
.builds/netbsd.yml Normal file
View File

@@ -0,0 +1,29 @@
image: netbsd/latest
packages:
- python311
- SDL2
- freetype2
- fontconfig
- libopus
- pkgconf
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:
- client: |
cd xash3d-fwgs
python3.11 waf configure --enable-tests --enable-engine-tests build install --destdir=bin
- server: |
cd xash3d-fwgs
python3.11 waf configure --reconfigure --dedicated build install --destdir=bin
- run-tests: |
cd xash3d-fwgs/bin
export SDL_VIDEODRIVER=wayland
./xash3d -runtests
./xash -runtests
rm -rf valve/gameinfo.txt test_*
- package: |
cd xash3d-fwgs/bin
tar -cjvf xash3d-fwgs-netbsd-amd64.tar.bz2 *
artifacts:
- xash3d-fwgs/bin/xash3d-fwgs-netbsd-amd64.tar.bz2

26
.builds/openbsd.yml Normal file
View File

@@ -0,0 +1,26 @@
image: openbsd/latest
packages:
- python3
- sdl2
- opus
sources:
- https://git.sr.ht/~a1batross/xash3d-fwgs
tasks:
- client: |
cd xash3d-fwgs
python3 waf configure --enable-tests --enable-engine-tests build install --destdir=bin
- server: |
cd xash3d-fwgs
python3 waf configure --reconfigure --dedicated build install --destdir=bin
- run-tests: |
cd xash3d-fwgs/bin
export SDL_VIDEODRIVER=wayland
./xash3d -runtests
./xash -runtests
rm -rf valve/gameinfo.txt test_*
- package: |
cd xash3d-fwgs/bin
tar -cjvf xash3d-fwgs-openbsd-amd64.tar.bz2 *
artifacts:
- xash3d-fwgs/bin/xash3d-fwgs-openbsd-amd64.tar.bz2

View File

@@ -18,7 +18,7 @@ def build(bld):
target = 'gl4es',
features = 'c',
includes = ['gl4es/src', 'gl4es/src/gl', 'gl4es/src/glx', 'gl4es/include'],
defines = ['NOX11', 'NO_GBM', 'NO_INIT_CONSTRUCTOR', 'DEFAULT_ES=2', 'NOEGL', 'EXTERNAL_GETPROCADDRESS=GL4ES_GetProcAddress', 'NO_LOADER', 'STATICLIB'],
defines = ['NOX11', 'NO_GBM', 'NO_INIT_CONSTRUCTOR', 'DEFAULT_ES=2', 'NOEGL', 'NO_LOADER', 'STATICLIB'],
cflags = ['-w', '-fvisibility=hidden', '-std=gnu99'],
subsystem = bld.env.MSVC_SUBSYSTEM,
export_includes = '.')

View File

@@ -0,0 +1,65 @@
# sounds.lst.md
Using sounds.lst located in scripts folder, modder can override some of the hardcoded sounds in temp entities and server physics.
File format:
```
<group name>
{
<path1>
<path2>
<path3>
}
<group2 name> <path with %d> <min number> <max number>
```
* Sounds can use any supported sound format (WAV or MP3).
* The path must be relative to the sounds/ folder in the game or base directory root, addon folder, or archive root.
* Groups can be empty or omitted from the file to load no sound.
* Groups can either list a set of files or specify a format string and a range.
* Anything after // will be considered a comment and ignored.
* Behavior is undefined if the group was listed multiple times.
Currently supported groups are:
|Group name|Usage|
|----------|-----|
|`BouncePlayerShell`|Used for BOUNCE_SHELL tempentity hitsound|
|`BounceWeaponShell`|Used for BOUCNE_SHOTSHELL tempentity hitsound|
|`BounceConcrete`|Used for BOUNCE_CONCRETE tempentity hitsound|
|`BounceGlass`|Used for BOUCNE_GLASS|
|`BounceMetal`|Used for BOUNCE_METAL|
|`BounceFlesh`|Used for BOUNCE_FLESH|
|`BounceWood`|Used for BOUNCE_WOOD|
|`Ricochet`|Used for BOUNCE_SHRAP and ricochet tempentities|
|`Explode`|Used for tempentity explosions|
|`EntityWaterEnter`|Used for entity entering water|
|`EntityWaterExit`|Used for entity exiting water|
|`PlayerWaterEnter`|Used for player entering water|
|`PlayerWaterExit`|Used for player exiting water|
## Example
This example is based on defaults sounds used in Half-Life:
```
BouncePlayerShell "player/pl_shell%d.wav" 1 3
BounceWeaponShell "weapons/sshell%d.wav" 1 3
BounceConcrete "debris/concrete%d.wav" 1 3
BounceGlass "debris/glass%d.wav" 1 4
BounceMetal "debris/metal%d.wav" 1 6
BounceFlesh "debris/flesh%d.wav" 1 7
BounceWood "debris/wood%d.wav" 1 4
Ricochet "weapons/ric%d.wav" 1 5
Explode "weapons/explode%d.wav" 3 5
EntityWaterEnter "player/pl_wade%d.wav" 1 4
EntityWaterExit "player/pl_wade%d.wav" 1 4
PlayerWaterEnter
{
"player/pl_wade1.wav"
}
PlayerWaterExit
{
"player/pl_wade2.wav"
}
```

15
Documentation/musl.md Normal file
View File

@@ -0,0 +1,15 @@
# Xash3D FWGS on `musl`
Xash3D FWGS works on `musl` out of the box. However, the engine doesn't try to differentiate glibc and musl anymore. If you see error similar to:
```
Host_InitError: can't initialize cl_dlls/client.so: Error relocating valve/cl_dlls/client.so: __sprintf_chk: symbol not found
```
... or you know that the game you're running is linked against glibc, you can try using `libgcompat`, like this:
```
$ LD_PRELOAD=/lib/libgcompat.so.0 ./xash3d ...
```
It will automatically add the missing symbols that glibc binaries usually need. In the future we might automatically link engine against `libgcompat` for better compatibility with prebuilt or closed-source games, if there will be any use for this.

View File

@@ -1,5 +1,5 @@
# Xash3D FWGS Engine <img align="right" width="128" height="128" src="https://github.com/FWGS/xash3d-fwgs/raw/master/game_launch/icon-xash-material.png" alt="Xash3D FWGS icon" />
[![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://fwgsdiscord.mentality.rip/) \
[![builds.sr.ht status](https://builds.sr.ht/~a1batross/xash3d-fwgs.svg)](https://builds.sr.ht/~a1batross/xash3d-fwgs?) [![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://fwgsdiscord.mentality.rip/) \
[![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 game engine, aimed to provide compatibility with Half-Life Engine and extend it, as well as to give game developers well known workflow.

View File

@@ -35,7 +35,6 @@ GNU General Public License for more details.
#define __cdecl
#define __stdcall
#define _inline static inline
#define FORCEINLINE inline __attribute__((always_inline))
#if XASH_POSIX
#include <unistd.h>
@@ -63,13 +62,6 @@ GNU General Public License for more details.
int x, y;
} POINT;
#else // WIN32
#ifdef __MINGW32__
#define _inline static inline
#define FORCEINLINE inline __attribute__((always_inline))
#else
#define FORCEINLINE __forceinline
#endif
#define open _open
#define read _read
#define alloca _alloca

View File

@@ -107,7 +107,8 @@ 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
TF_MULTISAMPLE = (1<<29), // multisampling texture
TF_ALLOW_NEAREST = (1<<30), // allows toggling nearest filtering for TF_NOMIPMAP textures
} texFlags_t;
typedef enum

View File

@@ -86,6 +86,8 @@ typedef uint64_t longtime_t;
#define NORETURN __attribute__((noreturn))
#define NONNULL __attribute__((nonnull))
#define ALLOC_CHECK(x) __attribute__((alloc_size(x)))
#define FORCEINLINE inline __attribute__((always_inline))
#define NOINLINE __attribute__((noinline))
#elif defined(_MSC_VER)
#define EXPORT __declspec( dllexport )
#define GAME_EXPORT
@@ -93,6 +95,8 @@ typedef uint64_t longtime_t;
#define NORETURN
#define NONNULL
#define ALLOC_CHECK(x)
#define FORCEINLINE __forceinline
#define NOINLINE __declspec( noinline )
#else
#define EXPORT
#define GAME_EXPORT
@@ -100,6 +104,8 @@ typedef uint64_t longtime_t;
#define NORETURN
#define NONNULL
#define ALLOC_CHECK(x)
#define FORCEINLINE
#define NOINLINE
#endif
#if ( __GNUC__ >= 3 )

View File

@@ -157,32 +157,12 @@ void CL_PlayCDTrack_f( void )
CL_ScreenshotGetName
==================
*/
static qboolean CL_ScreenshotGetName( int lastnum, char *filename, size_t size )
static qboolean CL_ScreenshotGetName( const char *fmt, int lastnum, char *filename, size_t size )
{
if( lastnum < 0 || lastnum > 9999 )
{
Con_Printf( S_ERROR "unable to write screenshot\n" );
return false;
}
return Q_snprintf( filename, size, "scrshots/%s_shot%04d.png", clgame.mapname, lastnum ) > 0;
}
/*
==================
CL_SnapshotGetName
==================
*/
static qboolean CL_SnapshotGetName( int lastnum, char *filename, size_t size )
{
if( lastnum < 0 || lastnum > 9999 )
{
Con_Printf( S_ERROR "unable to write snapshot\n" );
FS_AllowDirectPaths( false );
return false;
}
return Q_snprintf( filename, size, "../%s_%04d.png", clgame.mapname, lastnum ) > 0;
return Q_snprintf( filename, size, fmt, clgame.mapname, lastnum ) > 0;
}
/*
@@ -192,127 +172,6 @@ static qboolean CL_SnapshotGetName( int lastnum, char *filename, size_t size )
==============================================================================
*/
/*
==================
CL_ScreenShot_f
normal screenshot
==================
*/
void CL_ScreenShot_f( void )
{
int i;
string checkname;
if( CL_IsDevOverviewMode() == 1 )
{
// special case for write overview image and script file
Q_snprintf( cls.shotname, sizeof( cls.shotname ), "overviews/%s.bmp", clgame.mapname );
cls.scrshot_action = scrshot_mapshot; // build new frame for mapshot
}
else
{
// scan for a free filename
for( i = 0; i < 9999; i++ )
{
if( !CL_ScreenshotGetName( i, checkname, sizeof( checkname )))
return; // no namespace
if( !FS_FileExists( checkname, true ))
break;
}
Q_strncpy( cls.shotname, checkname, sizeof( cls.shotname ));
cls.scrshot_action = scrshot_normal; // build new frame for screenshot
}
cls.envshot_vieworg = NULL; // no custom view
cls.envshot_viewsize = 0;
}
/*
==================
CL_SnapShot_f
save screenshots into root dir
==================
*/
void CL_SnapShot_f( void )
{
int i;
string checkname;
if( CL_IsDevOverviewMode() == 1 )
{
// special case for write overview image and script file
Q_snprintf( cls.shotname, sizeof( cls.shotname ), "overviews/%s.bmp", clgame.mapname );
cls.scrshot_action = scrshot_mapshot; // build new frame for mapshot
}
else
{
FS_AllowDirectPaths( true );
// scan for a free filename
for( i = 0; i < 9999; i++ )
{
if( !CL_SnapshotGetName( i, checkname, sizeof( checkname )))
return; // no namespace
if( !FS_FileExists( checkname, true ))
break;
}
FS_AllowDirectPaths( false );
Q_strncpy( cls.shotname, checkname, sizeof( cls.shotname ));
cls.scrshot_action = scrshot_snapshot; // build new frame for screenshot
}
cls.envshot_vieworg = NULL; // no custom view
cls.envshot_viewsize = 0;
}
/*
==================
CL_EnvShot_f
cubemap view
==================
*/
void CL_EnvShot_f( void )
{
if( Cmd_Argc() < 2 )
{
Con_Printf( S_USAGE "envshot <shotname>\n" );
return;
}
Q_snprintf( cls.shotname, sizeof( cls.shotname ), "gfx/env/%s", Cmd_Argv( 1 ));
cls.scrshot_action = scrshot_envshot; // build new frame for envshot
cls.envshot_vieworg = NULL; // no custom view
cls.envshot_viewsize = 0;
}
/*
==================
CL_SkyShot_f
skybox view
==================
*/
void CL_SkyShot_f( void )
{
if( Cmd_Argc() < 2 )
{
Con_Printf( S_USAGE "skyshot <shotname>\n" );
return;
}
Q_snprintf( cls.shotname, sizeof( cls.shotname ),"gfx/env/%s", Cmd_Argv( 1 ));
cls.scrshot_action = scrshot_skyshot; // build new frame for skyshot
cls.envshot_vieworg = NULL; // no custom view
cls.envshot_viewsize = 0;
}
/*
==================
CL_LevelShot_f
@@ -355,23 +214,100 @@ void CL_LevelShot_f( void )
else cls.scrshot_action = scrshot_inactive; // disable - not needs
}
/*
==================
CL_SaveShot_f
mini-pic in loadgame menu
==================
*/
void CL_SaveShot_f( void )
static scrshot_t CL_GetScreenshotTypeFromString( const char *string )
{
if( Cmd_Argc() < 2 )
if( !Q_stricmp( string, "snapshot" ))
return scrshot_snapshot;
if( !Q_stricmp( string, "screenshot" ))
return scrshot_normal;
if( !Q_stricmp( string, "saveshot" ))
return scrshot_savegame;
if( !Q_stricmp( string, "envshot" ))
return scrshot_envshot;
if( !Q_stricmp( string, "skyshot" ))
return scrshot_skyshot;
return scrshot_inactive;
}
void CL_GenericShot_f( void )
{
const char *argv0 = Cmd_Argv( 0 );
scrshot_t type;
type = CL_GetScreenshotTypeFromString( argv0 );
if( type == scrshot_normal || type == scrshot_snapshot )
{
Con_Printf( S_USAGE "saveshot <savename>\n" );
return;
if( CL_IsDevOverviewMode() == 1 )
type = scrshot_mapshot;
}
else
{
if( Cmd_Argc() < 2 )
{
Con_Printf( S_USAGE "%s <shotname>\n", argv0 );
return;
}
}
Q_snprintf( cls.shotname, sizeof( cls.shotname ), DEFAULT_SAVE_DIRECTORY "%s.bmp", Cmd_Argv( 1 ));
cls.scrshot_action = scrshot_savegame; // build new frame for saveshot
switch( type )
{
case scrshot_envshot:
case scrshot_skyshot:
Q_snprintf( cls.shotname, sizeof( cls.shotname ), "gfx/env/%s", Cmd_Argv( 1 ));
break;
case scrshot_savegame:
Q_snprintf( cls.shotname, sizeof( cls.shotname ), DEFAULT_SAVE_DIRECTORY "%s.bmp", Cmd_Argv( 1 ));
break;
case scrshot_mapshot:
Q_snprintf( cls.shotname, sizeof( cls.shotname ), "overviews/%s.bmp", clgame.mapname );
break;
case scrshot_normal:
case scrshot_snapshot:
{
const char *fmt;
string checkname;
int i;
if( type == scrshot_snapshot )
{
fmt = "../%s_%04d.png";
FS_AllowDirectPaths( true );
}
else fmt = "scrshots/%s_shot%04d.png";
for( i = 0; i < 9999; i++ )
{
if( !CL_ScreenshotGetName( fmt, i, checkname, sizeof( checkname )))
{
Con_Printf( S_ERROR "unable to write %s\n", argv0 );
FS_AllowDirectPaths( false );
return;
}
if( !FS_FileExists( checkname, true ))
break;
}
FS_AllowDirectPaths( false );
Q_strncpy( cls.shotname, checkname, sizeof( cls.shotname ));
break;
}
case scrshot_inactive:
case scrshot_plaque:
default:
return; // shouldn't happen
}
cls.scrshot_action = type; // build new frame for saveshot
cls.envshot_vieworg = NULL;
cls.envshot_viewsize = 0;
}
/*

View File

@@ -127,7 +127,7 @@ void CL_MoveToOnHandList( resource_t *pResource )
CL_AddToResourceList( pResource, &cl.resourcesonhand );
}
void CL_ClearResourceList( resource_t *pList )
static void CL_ClearResourceList( resource_t *pList )
{
resource_t *p, *n;

View File

@@ -107,6 +107,8 @@ struct
int angle_position;
} demo;
static qboolean CL_NextDemo( void );
/*
====================
CL_StartupDemoHeader
@@ -156,7 +158,7 @@ CL_GetDemoRecordClock
write time while demo is recording
====================
*/
float CL_GetDemoRecordClock( void )
static float CL_GetDemoRecordClock( void )
{
return cl.mtime[0];
}
@@ -168,7 +170,7 @@ CL_GetDemoPlaybackClock
overwrite host.realtime
====================
*/
float CL_GetDemoPlaybackClock( void )
static float CL_GetDemoPlaybackClock( void )
{
return host.realtime + host.frametime;
}
@@ -194,7 +196,7 @@ CL_WriteDemoCmdHeader
Writes the demo command header and time-delta
====================
*/
void CL_WriteDemoCmdHeader( byte cmd, file_t *file )
static void CL_WriteDemoCmdHeader( byte cmd, file_t *file )
{
float dt;
@@ -267,7 +269,7 @@ Save state of cls.netchan sequences
so that we can play the demo correctly.
====================
*/
void CL_WriteDemoSequence( file_t *file )
static void CL_WriteDemoSequence( file_t *file )
{
Assert( file != NULL );
@@ -348,7 +350,7 @@ CL_WriteDemoHeader
Write demo header
====================
*/
void CL_WriteDemoHeader( const char *name )
static void CL_WriteDemoHeader( const char *name )
{
int copysize;
int savepos;
@@ -436,7 +438,7 @@ CL_StopRecord
finish recording demo
=================
*/
void CL_StopRecord( void )
static void CL_StopRecord( void )
{
int i, curpos;
float stoptime;
@@ -518,7 +520,7 @@ CL_ReadDemoCmdHeader
read the demo command
=================
*/
qboolean CL_ReadDemoCmdHeader( byte *cmd, float *dt )
static qboolean CL_ReadDemoCmdHeader( byte *cmd, float *dt )
{
// read the command
// HACKHACK: skip NOPs
@@ -548,7 +550,7 @@ read the demo usercmd for predicting
and smooth movement during playback the demo
=================
*/
void CL_ReadDemoUserCmd( qboolean discard )
static void CL_ReadDemoUserCmd( qboolean discard )
{
byte data[1024];
int cmdnumber;
@@ -613,7 +615,7 @@ CL_ReadDemoSequence
read netchan sequences
=================
*/
void CL_ReadDemoSequence( qboolean discard )
static void CL_ReadDemoSequence( qboolean discard )
{
int incoming_sequence;
int incoming_acknowledged;
@@ -647,7 +649,7 @@ void CL_ReadDemoSequence( qboolean discard )
CL_DemoStartPlayback
=================
*/
void CL_DemoStartPlayback( int mode )
static void CL_DemoStartPlayback( int mode )
{
if( cls.changedemo )
{
@@ -692,7 +694,7 @@ void CL_DemoStartPlayback( int mode )
CL_DemoAborted
=================
*/
void CL_DemoAborted( void )
static void CL_DemoAborted( void )
{
if( cls.demofile )
FS_Close( cls.demofile );
@@ -732,7 +734,7 @@ returns true on success, false on failure
g-cont. probably captain obvious mode is ON
=================
*/
qboolean CL_DemoMoveToNextSection( void )
static qboolean CL_DemoMoveToNextSection( void )
{
if( ++demo.entryIndex >= demo.directory.numentries )
{
@@ -754,7 +756,7 @@ qboolean CL_DemoMoveToNextSection( void )
return true;
}
qboolean CL_ReadRawNetworkData( byte *buffer, size_t *length )
static qboolean CL_ReadRawNetworkData( byte *buffer, size_t *length )
{
int msglen = 0;
@@ -805,7 +807,7 @@ CL_DemoReadMessageQuake
reads demo data and write it to client
=================
*/
qboolean CL_DemoReadMessageQuake( byte *buffer, size_t *length )
static qboolean CL_DemoReadMessageQuake( byte *buffer, size_t *length )
{
vec3_t viewangles;
int msglen = 0;
@@ -1020,7 +1022,7 @@ qboolean CL_DemoReadMessage( byte *buffer, size_t *length )
return CL_ReadRawNetworkData( buffer, length );
}
void CL_DemoFindInterpolatedViewAngles( float t, float *frac, demoangle_t **prev, demoangle_t **next )
static void CL_DemoFindInterpolatedViewAngles( float t, float *frac, demoangle_t **prev, demoangle_t **next )
{
int i, i0, i1, imod;
float at;
@@ -1115,7 +1117,7 @@ CL_FinishTimeDemo
show stats
==============
*/
void CL_FinishTimeDemo( void )
static void CL_FinishTimeDemo( void )
{
int frames;
double time;
@@ -1264,7 +1266,7 @@ CL_NextDemo
Called when a demo finishes
==================
*/
qboolean CL_NextDemo( void )
static qboolean CL_NextDemo( void )
{
char str[MAX_QPATH];

View File

@@ -218,7 +218,7 @@ R_AllocTracer
can return NULL if particles is out
================
*/
particle_t *R_AllocTracer( const vec3_t org, const vec3_t vel, float life )
static particle_t *R_AllocTracer( const vec3_t org, const vec3_t vel, float life )
{
particle_t *p;
@@ -300,7 +300,7 @@ R_BeamAlloc
==============
*/
BEAM *R_BeamAlloc( void )
static BEAM *R_BeamAlloc( void )
{
BEAM *pBeam;
@@ -323,7 +323,7 @@ R_BeamFree
==============
*/
void R_BeamFree( BEAM *pBeam )
static void R_BeamFree( BEAM *pBeam )
{
// free particles that have died off.
R_FreeDeadParticles( &pBeam->particles );
@@ -605,7 +605,7 @@ CL_BeamAttemptToDie
Check for expired beams
==============
*/
qboolean CL_BeamAttemptToDie( BEAM *pBeam )
static qboolean CL_BeamAttemptToDie( BEAM *pBeam )
{
Assert( pBeam != NULL );
@@ -2040,7 +2040,7 @@ void CL_ReadPointFile_f( void )
else Con_Printf( "map %s has no leaks!\n", clgame.mapname );
}
void CL_FreeDeadBeams( void )
static void CL_FreeDeadBeams( void )
{
BEAM *pBeam, *pNext, *pPrev = NULL;
// draw temporary entity beams

View File

@@ -40,7 +40,7 @@ CL_CalcPlayerVelocity
compute velocity for a given client
=============
*/
void CL_CalcPlayerVelocity( int idx, vec3_t velocity )
static void CL_CalcPlayerVelocity( int idx, vec3_t velocity )
{
clientdata_t *pcd;
vec3_t delta;
@@ -78,7 +78,7 @@ CL_DescribeEvent
=============
*/
void CL_DescribeEvent( event_info_t *ei, int slot )
static void CL_DescribeEvent( event_info_t *ei, int slot )
{
int idx = (slot & 63) * 2;
con_nprint_t info;
@@ -202,7 +202,7 @@ CL_FireEvent
=============
*/
qboolean CL_FireEvent( event_info_t *ei, int slot )
static qboolean CL_FireEvent( event_info_t *ei, int slot )
{
cl_user_event_t *ev;
const char *name;
@@ -292,7 +292,7 @@ CL_FindEvent
find first empty event
=============
*/
event_info_t *CL_FindEmptyEvent( void )
static event_info_t *CL_FindEmptyEvent( void )
{
int i;
event_state_t *es;
@@ -320,7 +320,7 @@ CL_FindEvent
replace only unreliable events
=============
*/
event_info_t *CL_FindUnreliableEvent( void )
static event_info_t *CL_FindUnreliableEvent( void )
{
event_state_t *es;
event_info_t *ei;
@@ -350,7 +350,7 @@ CL_QueueEvent
=============
*/
void CL_QueueEvent( int flags, int index, float delay, event_args_t *args )
static void CL_QueueEvent( int flags, int index, float delay, event_args_t *args )
{
event_info_t *ei;

View File

@@ -46,10 +46,35 @@ static int CL_LoadFontTexture( const char *fontname, uint texFlags, int *width )
return tex;
}
qboolean Con_LoadFixedWidthFont( const char *fontname, cl_font_t *font, float scale, int rendermode, uint texFlags )
static int CL_FontRenderMode( convar_t *fontrender )
{
switch((int)fontrender->value )
{
case 0:
return kRenderTransAdd;
case 1:
return kRenderTransAlpha;
case 2:
return kRenderTransTexture;
default:
Cvar_DirectSet( fontrender, fontrender->def_string );
}
return kRenderTransTexture;
}
void CL_SetFontRendermode( cl_font_t *font )
{
ref.dllFuncs.GL_SetRenderMode( CL_FontRenderMode( font->rendermode ));
}
qboolean Con_LoadFixedWidthFont( const char *fontname, cl_font_t *font, float scale, convar_t *rendermode, uint texFlags )
{
int font_width, i;
if( !rendermode )
return false;
if( font->valid )
return true; // already loaded
@@ -60,7 +85,6 @@ qboolean Con_LoadFixedWidthFont( const char *fontname, cl_font_t *font, float sc
font->type = FONT_FIXED;
font->valid = true;
font->scale = scale;
font->nearest = FBitSet( texFlags, TF_NEAREST );
font->rendermode = rendermode;
font->charHeight = Q_rint( font_width / 16 * scale );
@@ -77,13 +101,16 @@ qboolean Con_LoadFixedWidthFont( const char *fontname, cl_font_t *font, float sc
return true;
}
qboolean Con_LoadVariableWidthFont( const char *fontname, cl_font_t *font, float scale, int rendermode, uint texFlags )
qboolean Con_LoadVariableWidthFont( const char *fontname, cl_font_t *font, float scale, convar_t *rendermode, uint texFlags )
{
fs_offset_t length;
qfont_t src;
byte *pfile;
int font_width, i;
if( !rendermode )
return false;
if( font->valid )
return true;
@@ -106,8 +133,7 @@ qboolean Con_LoadVariableWidthFont( const char *fontname, cl_font_t *font, float
font->type = FONT_VARIABLE;
font->valid = true;
font->scale = scale;
font->nearest = FBitSet( texFlags, TF_NEAREST );
font->scale = scale ? scale : 1.0f;
font->rendermode = rendermode;
font->charHeight = Q_rint( src.rowheight * scale );
@@ -179,7 +205,8 @@ int CL_DrawCharacter( float x, float y, int number, rgba_t color, cl_font_t *fon
return font->charWidths[number];
rc = &font->fontRc[number];
if( font->nearest || font->scale <= 1.0f )
if( font->scale <= 1.f || !REF_GET_PARM( PARM_TEX_FILTERING, font->hFontTexture ))
half = 0;
s1 = ((float)rc->left + half ) / texw;
@@ -193,7 +220,7 @@ int CL_DrawCharacter( float x, float y, int number, rgba_t color, cl_font_t *fon
SPR_AdjustSize( &x, &y, &w, &h );
if( !FBitSet( flags, FONT_DRAW_NORENDERMODE ))
ref.dllFuncs.GL_SetRenderMode( font->rendermode );
CL_SetFontRendermode( font );
// don't apply color to fixed fonts it's already colored
if( font->type != FONT_FIXED || REF_GET_PARM( PARM_TEX_GLFORMAT, font->hFontTexture ) == 0x8045 ) // GL_LUMINANCE8_ALPHA8
@@ -216,7 +243,7 @@ int CL_DrawString( float x, float y, const char *s, rgba_t color, cl_font_t *fon
Con_UtfProcessChar( 0 ); // clear utf state
if( !FBitSet( flags, FONT_DRAW_NORENDERMODE ))
ref.dllFuncs.GL_SetRenderMode( font->rendermode );
CL_SetFontRendermode( font );
Vector4Copy( color, current_color );

View File

@@ -52,7 +52,7 @@ CL_UpdatePositions
Store another position into interpolation circular buffer
==================
*/
void CL_UpdatePositions( cl_entity_t *ent )
static void CL_UpdatePositions( cl_entity_t *ent )
{
position_history_t *ph, *prev;
@@ -85,7 +85,7 @@ CL_ResetPositions
Interpolation init or reset after teleporting
==================
*/
void CL_ResetPositions( cl_entity_t *ent )
static void CL_ResetPositions( cl_entity_t *ent )
{
position_history_t store;
@@ -107,7 +107,7 @@ check for instant movement in case
we don't want interpolate this
==================
*/
qboolean CL_EntityTeleported( cl_entity_t *ent )
static qboolean CL_EntityTeleported( cl_entity_t *ent )
{
float len, maxlen;
vec3_t delta;
@@ -128,7 +128,7 @@ CL_CompareTimestamps
round-off floating errors
==================
*/
qboolean CL_CompareTimestamps( float t1, float t2 )
static qboolean CL_CompareTimestamps( float t1, float t2 )
{
int iTime1 = t1 * 1000;
int iTime2 = t2 * 1000;
@@ -143,7 +143,7 @@ CL_EntityIgnoreLerp
some ents will be ignore lerping
==================
*/
qboolean CL_EntityIgnoreLerp( cl_entity_t *e )
static qboolean CL_EntityIgnoreLerp( cl_entity_t *e )
{
if( cl_nointerp.value > 0.f )
return true;
@@ -160,7 +160,7 @@ CL_EntityCustomLerp
==================
*/
qboolean CL_EntityCustomLerp( cl_entity_t *e )
static qboolean CL_EntityCustomLerp( cl_entity_t *e )
{
switch( e->curstate.movetype )
{
@@ -226,7 +226,7 @@ CL_UpdateLatchedVars
====================
*/
void CL_UpdateLatchedVars( cl_entity_t *ent )
static void CL_UpdateLatchedVars( cl_entity_t *ent )
{
if( !ent->model || ( ent->model->type != mod_alias && ent->model->type != mod_studio ))
return; // below fields used only for alias and studio interpolation
@@ -321,7 +321,7 @@ CL_ProcessEntityUpdate
apply changes since new frame received
==================
*/
void CL_ProcessEntityUpdate( cl_entity_t *ent )
static void CL_ProcessEntityUpdate( cl_entity_t *ent )
{
qboolean parametric;
@@ -585,7 +585,7 @@ CL_ProcessPlayerState
process player states after the new packet has received
=================
*/
void CL_ProcessPlayerState( int playerindex, entity_state_t *state )
static void CL_ProcessPlayerState( int playerindex, entity_state_t *state )
{
entity_state_t *ps;
@@ -605,7 +605,7 @@ reset latched state if this frame entity was teleported
or just EF_NOINTERP was set
=================
*/
void CL_ResetLatchedState( int pnum, frame_t *frame, cl_entity_t *ent )
static void CL_ResetLatchedState( int pnum, frame_t *frame, cl_entity_t *ent )
{
if( CHECKVISBIT( frame->flags, pnum ))
{
@@ -695,7 +695,7 @@ CL_FlushEntityPacket
Read and ignore whole entity packet.
=================
*/
void CL_FlushEntityPacket( sizebuf_t *msg )
static void CL_FlushEntityPacket( sizebuf_t *msg )
{
int newnum;
entity_state_t from, to;
@@ -725,7 +725,7 @@ CL_DeltaEntity
processing delta update
=================
*/
void CL_DeltaEntity( sizebuf_t *msg, frame_t *frame, int newnum, entity_state_t *old, qboolean has_update )
static void CL_DeltaEntity( sizebuf_t *msg, frame_t *frame, int newnum, entity_state_t *old, qboolean has_update )
{
cl_entity_t *ent;
entity_state_t *state;
@@ -1057,7 +1057,7 @@ CL_LinkCustomEntity
Add server beam to draw list
=============
*/
void CL_LinkCustomEntity( cl_entity_t *ent, entity_state_t *state )
static void CL_LinkCustomEntity( cl_entity_t *ent, entity_state_t *state )
{
ent->curstate.movetype = state->modelindex; // !!!
@@ -1080,7 +1080,7 @@ Create visible entities in the correct position
for all current players
=============
*/
void CL_LinkPlayers( frame_t *frame )
static void CL_LinkPlayers( frame_t *frame )
{
entity_state_t *state;
cl_entity_t *ent;
@@ -1163,7 +1163,7 @@ CL_LinkPacketEntities
===============
*/
void CL_LinkPacketEntities( frame_t *frame )
static void CL_LinkPacketEntities( frame_t *frame )
{
cl_entity_t *ent;
entity_state_t *state;
@@ -1492,9 +1492,3 @@ qboolean CL_GetMovieSpatialization( rawchan_t *ch )
return true;
}
void CL_ExtraUpdate( void )
{
clgame.dllFuncs.IN_Accumulate();
S_ExtraUpdate();
}

View File

@@ -357,20 +357,23 @@ void SPR_AdjustSize( float *x, float *y, float *w, float *h )
*h *= yscale;
}
void SPR_AdjustTexCoords( float width, float height, float *s1, float *t1, float *s2, float *t2 )
static void SPR_AdjustTexCoords( int texnum, float width, float height, float *s1, float *t1, float *s2, float *t2 )
{
if( refState.width != clgame.scrInfo.iWidth )
if( REF_GET_PARM( PARM_TEX_FILTERING, texnum ))
{
// align to texel if scaling
*s1 += 0.5f;
*s2 -= 0.5f;
}
if( refState.width != clgame.scrInfo.iWidth )
{
// align to texel if scaling
*s1 += 0.5f;
*s2 -= 0.5f;
}
if( refState.height != clgame.scrInfo.iHeight )
{
// align to texel if scaling
*t1 += 0.5f;
*t2 -= 0.5f;
if( refState.height != clgame.scrInfo.iHeight )
{
// align to texel if scaling
*t1 += 0.5f;
*t2 -= 0.5f;
}
}
*s1 /= width;
@@ -402,6 +405,8 @@ static void SPR_DrawGeneric( int frame, float x, float y, float width, float hei
height = h;
}
texnum = ref.dllFuncs.R_GetSpriteTexture( clgame.ds.pSprite, frame );
if( prc )
{
wrect_t rc = *prc;
@@ -418,7 +423,7 @@ static void SPR_DrawGeneric( int frame, float x, float y, float width, float hei
t2 = rc.bottom;
// calc user-defined rectangle
SPR_AdjustTexCoords( width, height, &s1, &t1, &s2, &t2 );
SPR_AdjustTexCoords( texnum, width, height, &s1, &t1, &s2, &t2 );
width = rc.right - rc.left;
height = rc.bottom - rc.top;
}
@@ -434,7 +439,6 @@ static void SPR_DrawGeneric( int frame, float x, float y, float width, float hei
// scale for screen sizes
SPR_AdjustSize( &x, &y, &width, &height );
texnum = ref.dllFuncs.R_GetSpriteTexture( clgame.ds.pSprite, frame );
ref.dllFuncs.Color4ub( clgame.ds.spriteColor[0], clgame.ds.spriteColor[1], clgame.ds.spriteColor[2], clgame.ds.spriteColor[3] );
ref.dllFuncs.R_DrawStretchPic( x, y, width, height, s1, t1, s2, t2, texnum );
}
@@ -470,8 +474,7 @@ void CL_DrawCenterPrint( void )
pText = clgame.centerPrint.message;
CL_DrawCharacterLen( font, 0, NULL, &charHeight );
ref.dllFuncs.GL_SetRenderMode( font->rendermode );
CL_SetFontRendermode( font );
for( i = 0; i < clgame.centerPrint.lines; i++ )
{
lineLength = 0;
@@ -547,7 +550,7 @@ fill screen with specfied color
can be modulated
=============
*/
void CL_DrawScreenFade( void )
static void CL_DrawScreenFade( void )
{
screenfade_t *sf = &clgame.fade;
int alpha;
@@ -763,7 +766,7 @@ CL_SoundFromIndex
return soundname from index
====================
*/
const char *CL_SoundFromIndex( int index )
static const char *CL_SoundFromIndex( int index )
{
sfx_t *sfx = NULL;
int hSound;
@@ -909,7 +912,7 @@ CL_DrawCrosshair
Render crosshair
====================
*/
void CL_DrawCrosshair( void )
static void CL_DrawCrosshair( void )
{
int x, y, width, height;
float xscale, yscale;
@@ -1326,6 +1329,7 @@ pfnSPR_Load
function exported for support GoldSrc Monitor utility
=========
*/
HSPRITE EXPORT pfnSPR_Load( const char *szPicName );
HSPRITE EXPORT pfnSPR_Load( const char *szPicName )
{
model_t *spr;
@@ -1375,6 +1379,7 @@ pfnSPR_Frames
function exported for support GoldSrc Monitor utility
=========
*/
int EXPORT pfnSPR_Frames( HSPRITE hPic );
int EXPORT pfnSPR_Frames( HSPRITE hPic )
{
int numFrames = 0;
@@ -1593,7 +1598,7 @@ CL_FillRGBA
=============
*/
void GAME_EXPORT CL_FillRGBA( int x, int y, int w, int h, int r, int g, int b, int a )
static void GAME_EXPORT CL_FillRGBA( int x, int y, int w, int h, int r, int g, int b, int a )
{
float _x = x, _y = y, _w = w, _h = h;
@@ -1635,6 +1640,7 @@ get actual screen info
*/
int GAME_EXPORT CL_GetScreenInfo( SCREENINFO *pscrinfo )
{
qboolean apply_scale_factor = false;
float scale_factor = hud_scale.value;
if( FBitSet( hud_fontscale.flags, FCVAR_CHANGED ))
@@ -1649,17 +1655,24 @@ int GAME_EXPORT CL_GetScreenInfo( SCREENINFO *pscrinfo )
clgame.scrInfo.iSize = sizeof( clgame.scrInfo );
clgame.scrInfo.iFlags = SCRINFO_SCREENFLASH;
if( scale_factor && scale_factor != 1.0f)
if( scale_factor && scale_factor != 1.0f )
{
float scaled_width = (float)refState.width / scale_factor;
if( scaled_width >= hud_scale_minimal_width.value )
apply_scale_factor = true;
}
if( apply_scale_factor )
{
clgame.scrInfo.iWidth = (float)refState.width / scale_factor;
clgame.scrInfo.iHeight = (float)refState.height / scale_factor;
clgame.scrInfo.iFlags |= SCRINFO_STRETCHED;
SetBits( clgame.scrInfo.iFlags, SCRINFO_STRETCHED );
}
else
{
clgame.scrInfo.iWidth = refState.width;
clgame.scrInfo.iHeight = refState.height;
clgame.scrInfo.iFlags &= ~SCRINFO_STRETCHED;
ClearBits( clgame.scrInfo.iFlags, SCRINFO_STRETCHED );
}
if( !pscrinfo ) return 0;
@@ -2121,7 +2134,7 @@ pfnGetViewModel
=============
*/
cl_entity_t* GAME_EXPORT CL_GetViewModel( void )
static cl_entity_t* GAME_EXPORT CL_GetViewModel( void )
{
return &clgame.viewent;
}
@@ -2470,6 +2483,36 @@ static physent_t *pfnGetVisent( int idx )
return NULL;
}
static int GAME_EXPORT CL_TestLine( const vec3_t start, const vec3_t end, int flags )
{
return PM_TestLineExt( clgame.pmove, clgame.pmove->physents, clgame.pmove->numphysent, start, end, flags );
}
/*
=============
CL_PushTraceBounds
=============
*/
static void GAME_EXPORT CL_PushTraceBounds( int hullnum, const float *mins, const float *maxs )
{
hullnum = bound( 0, hullnum, 3 );
VectorCopy( mins, clgame.pmove->player_mins[hullnum] );
VectorCopy( maxs, clgame.pmove->player_maxs[hullnum] );
}
/*
=============
CL_PopTraceBounds
=============
*/
static void GAME_EXPORT CL_PopTraceBounds( void )
{
memcpy( clgame.pmove->player_mins, host.player_mins, sizeof( host.player_mins ));
memcpy( clgame.pmove->player_maxs, host.player_maxs, sizeof( host.player_maxs ));
}
/*
=============
pfnSetTraceHull
@@ -2665,6 +2708,48 @@ static model_t *pfnLoadMapSprite( const char *filename )
return NULL;
}
/*
=============
COM_AddAppDirectoryToSearchPath
=============
*/
static void GAME_EXPORT COM_AddAppDirectoryToSearchPath( const char *pszBaseDir, const char *appName )
{
FS_AddGameHierarchy( pszBaseDir, FS_NOWRITE_PATH );
}
/*
===========
COM_ExpandFilename
Finds the file in the search path, copies over the name with the full path name.
This doesn't search in the pak file.
===========
*/
static int GAME_EXPORT COM_ExpandFilename( const char *fileName, char *nameOutBuffer, int nameOutBufferSize )
{
char result[MAX_SYSPATH];
if( !COM_CheckString( fileName ) || !nameOutBuffer || nameOutBufferSize <= 0 )
return 0;
// filename examples:
// media\sierra.avi - D:\Xash3D\valve\media\sierra.avi
// models\barney.mdl - D:\Xash3D\bshift\models\barney.mdl
if( g_fsapi.GetFullDiskPath( result, sizeof( result ), fileName, false ))
{
// check for enough room
if( Q_strlen( result ) > nameOutBufferSize )
return 0;
Q_strncpy( nameOutBuffer, result, nameOutBufferSize );
return 1;
}
return 0;
}
/*
=============
PlayerInfo_ValueForKey

View File

@@ -542,7 +542,7 @@ pfnPIC_Set
=========
*/
void GAME_EXPORT pfnPIC_Set( HIMAGE hPic, int r, int g, int b, int a )
static void GAME_EXPORT pfnPIC_Set( HIMAGE hPic, int r, int g, int b, int a )
{
gameui.ds.gl_texturenum = hPic;
r = bound( 0, r, 255 );
@@ -558,7 +558,7 @@ pfnPIC_Draw
=========
*/
void GAME_EXPORT pfnPIC_Draw( int x, int y, int width, int height, const wrect_t *prc )
static void GAME_EXPORT pfnPIC_Draw( int x, int y, int width, int height, const wrect_t *prc )
{
ref.dllFuncs.GL_SetRenderMode( kRenderNormal );
PIC_DrawGeneric( x, y, width, height, prc );
@@ -570,7 +570,7 @@ pfnPIC_DrawTrans
=========
*/
void GAME_EXPORT pfnPIC_DrawTrans( int x, int y, int width, int height, const wrect_t *prc )
static void GAME_EXPORT pfnPIC_DrawTrans( int x, int y, int width, int height, const wrect_t *prc )
{
ref.dllFuncs.GL_SetRenderMode( kRenderTransTexture );
PIC_DrawGeneric( x, y, width, height, prc );
@@ -582,7 +582,7 @@ pfnPIC_DrawHoles
=========
*/
void GAME_EXPORT pfnPIC_DrawHoles( int x, int y, int width, int height, const wrect_t *prc )
static void GAME_EXPORT pfnPIC_DrawHoles( int x, int y, int width, int height, const wrect_t *prc )
{
ref.dllFuncs.GL_SetRenderMode( kRenderTransAlpha );
PIC_DrawGeneric( x, y, width, height, prc );
@@ -594,7 +594,7 @@ pfnPIC_DrawAdditive
=========
*/
void GAME_EXPORT pfnPIC_DrawAdditive( int x, int y, int width, int height, const wrect_t *prc )
static void GAME_EXPORT pfnPIC_DrawAdditive( int x, int y, int width, int height, const wrect_t *prc )
{
ref.dllFuncs.GL_SetRenderMode( kRenderTransAdd );
PIC_DrawGeneric( x, y, width, height, prc );
@@ -984,7 +984,7 @@ pfnCheckGameDll
=========
*/
int GAME_EXPORT pfnCheckGameDll( void )
static int GAME_EXPORT pfnCheckGameDll( void )
{
#ifdef XASH_INTERNAL_GAMELIBS
return true;
@@ -1092,6 +1092,11 @@ static int pfnDelete( const char *path )
return FS_Delete( path );
}
static void GAME_EXPORT pfnCon_DefaultColor( int r, int g, int b )
{
Con_DefaultColor( r, g, b, true );
}
// engine callbacks
static ui_enginefuncs_t gEngfuncs =
{
@@ -1131,7 +1136,7 @@ static ui_enginefuncs_t gEngfuncs =
UI_DrawConsoleString,
UI_DrawSetTextColor,
Con_DrawStringLen,
Con_DefaultColor,
pfnCon_DefaultColor,
pfnGetPlayerModel,
pfnSetPlayerModel,
pfnClearScene,

View File

@@ -61,7 +61,9 @@ CVAR_DEFINE_AUTO( cl_smoothtime, "0.1", FCVAR_ARCHIVE, "time to smooth up" );
CVAR_DEFINE_AUTO( cl_clockreset, "0.1", FCVAR_ARCHIVE, "frametime delta maximum value before reset" );
CVAR_DEFINE_AUTO( cl_fixtimerate, "7.5", FCVAR_ARCHIVE, "time in msec to client clock adjusting" );
CVAR_DEFINE_AUTO( hud_fontscale, "1.0", FCVAR_ARCHIVE|FCVAR_LATCH, "scale hud font texture" );
CVAR_DEFINE_AUTO( hud_fontrender, "0", FCVAR_ARCHIVE, "hud font render mode (0: additive, 1: holes, 2: trans)" );
CVAR_DEFINE_AUTO( hud_scale, "0", FCVAR_ARCHIVE|FCVAR_LATCH, "scale hud at current resolution" );
CVAR_DEFINE_AUTO( hud_scale_minimal_width, "640", FCVAR_ARCHIVE|FCVAR_LATCH, "if hud_scale results in a HUD virtual screen smaller than this value, it won't be applied" );
CVAR_DEFINE_AUTO( cl_solid_players, "1", 0, "Make all players not solid (can't traceline them)" );
CVAR_DEFINE_AUTO( cl_updaterate, "20", FCVAR_USERINFO|FCVAR_ARCHIVE, "refresh rate of server messages" );
CVAR_DEFINE_AUTO( cl_showevents, "0", FCVAR_ARCHIVE, "show events playback" );
@@ -73,8 +75,9 @@ static CVAR_DEFINE_AUTO( cl_upmax, "1200", FCVAR_ARCHIVE, "max allowed incoming
CVAR_DEFINE_AUTO( cl_lw, "1", FCVAR_ARCHIVE|FCVAR_USERINFO, "enable client weapon predicting" );
CVAR_DEFINE_AUTO( cl_charset, "utf-8", FCVAR_ARCHIVE, "1-byte charset to use (iconv style)" );
CVAR_DEFINE_AUTO( cl_trace_messages, "0", FCVAR_ARCHIVE|FCVAR_CHEAT, "enable message names tracing (good for developers)");
CVAR_DEFINE_AUTO( cl_trace_events, "0", FCVAR_ARCHIVE|FCVAR_CHEAT, "enable events tracing (good for developers)");
CVAR_DEFINE_AUTO( cl_trace_stufftext, "0", FCVAR_ARCHIVE|FCVAR_CHEAT, "enable stufftext (server-to-client console commands) tracing (good for developers)" );
CVAR_DEFINE_AUTO( cl_trace_messages, "0", FCVAR_ARCHIVE|FCVAR_CHEAT, "enable message names tracing (good for developers)" );
CVAR_DEFINE_AUTO( cl_trace_events, "0", FCVAR_ARCHIVE|FCVAR_CHEAT, "enable events tracing (good for developers)" );
static CVAR_DEFINE_AUTO( cl_nat, "0", 0, "show servers running under NAT" );
CVAR_DEFINE_AUTO( hud_utf8, "0", FCVAR_ARCHIVE, "Use utf-8 encoding for hud text" );
CVAR_DEFINE_AUTO( ui_renderworld, "0", FCVAR_ARCHIVE, "render world when UI is visible" );
@@ -178,7 +181,7 @@ finalize connection process and begin new frame
with new cls.state
===============
*/
void CL_CheckClientState( void )
static void CL_CheckClientState( void )
{
// first update is the pre-final signon stage
if(( cls.state == ca_connected || cls.state == ca_validate ) && ( cls.signon == SIGNONS ))
@@ -278,7 +281,7 @@ CL_DriftInterpolationAmount
Drift interpolation value (this is used for server unlag system)
===============
*/
int CL_DriftInterpolationAmount( int goal )
static int CL_DriftInterpolationAmount( int goal )
{
float fgoal, maxmove, diff;
int msec;
@@ -306,7 +309,7 @@ CL_ComputeClientInterpolationAmount
Validate interpolation cvars, calc interpolation window
===============
*/
void CL_ComputeClientInterpolationAmount( usercmd_t *cmd )
static void CL_ComputeClientInterpolationAmount( usercmd_t *cmd )
{
const float epsilon = 0.001f; // to avoid float invalid comparision
float min_interp;
@@ -352,7 +355,7 @@ CL_ComputePacketLoss
=================
*/
void CL_ComputePacketLoss( void )
static void CL_ComputePacketLoss( void )
{
int i, frm;
frame_t *frame;
@@ -397,7 +400,7 @@ void CL_UpdateFrameLerp( void )
cl.commands[(cls.netchan.outgoing_sequence - 1) & CL_UPDATE_MASK].frame_lerp = cl.lerpFrac;
}
void CL_FindInterpolatedAddAngle( float t, float *frac, pred_viewangle_t **prev, pred_viewangle_t **next )
static void CL_FindInterpolatedAddAngle( float t, float *frac, pred_viewangle_t **prev, pred_viewangle_t **next )
{
int i, i0, i1, imod;
float at;
@@ -439,7 +442,7 @@ void CL_FindInterpolatedAddAngle( float t, float *frac, pred_viewangle_t **prev,
*frac = bound( 0.0f, *frac, 1.0f );
}
void CL_ApplyAddAngle( void )
static void CL_ApplyAddAngle( void )
{
pred_viewangle_t *prev = NULL, *next = NULL;
float addangletotal = 0.0f;
@@ -475,7 +478,7 @@ CL_ProcessShowTexturesCmds
navigate around texture atlas
===============
*/
qboolean CL_ProcessShowTexturesCmds( usercmd_t *cmd )
static qboolean CL_ProcessShowTexturesCmds( usercmd_t *cmd )
{
static int oldbuttons;
int changed;
@@ -504,7 +507,7 @@ CL_ProcessOverviewCmds
Transform user movement into overview adjust
===============
*/
qboolean CL_ProcessOverviewCmds( usercmd_t *cmd )
static qboolean CL_ProcessOverviewCmds( usercmd_t *cmd )
{
ref_overview_t *ov = &clgame.overView;
int sign = 1;
@@ -556,7 +559,7 @@ CL_UpdateClientData
tell the client.dll about player origin, angles, fov, etc
=================
*/
void CL_UpdateClientData( void )
static void CL_UpdateClientData( void )
{
client_data_t cdat;
@@ -583,7 +586,7 @@ void CL_UpdateClientData( void )
CL_CreateCmd
=================
*/
void CL_CreateCmd( void )
static void CL_CreateCmd( void )
{
usercmd_t nullcmd, *cmd;
runcmd_t *pcmd;
@@ -687,7 +690,7 @@ Create and send the command packet to the server
Including both the reliable commands and the usercmds
===================
*/
void CL_WritePacket( void )
static void CL_WritePacket( void )
{
sizebuf_t buf;
qboolean send_command = false;
@@ -879,7 +882,7 @@ CL_SendCommand
Called every frame to builds and sends a command packet to the server.
=================
*/
void CL_SendCommand( void )
static void CL_SendCommand( void )
{
// we create commands even if a demo is playing,
CL_CreateCmd();
@@ -893,7 +896,7 @@ void CL_SendCommand( void )
CL_BeginUpload_f
==================
*/
void CL_BeginUpload_f( void )
static void CL_BeginUpload_f( void )
{
const char *name;
resource_t custResource;
@@ -990,7 +993,7 @@ We have gotten a challenge from the server, so try and
connect.
======================
*/
void CL_SendConnectPacket( void )
static void CL_SendConnectPacket( void )
{
char protinfo[MAX_INFO_STRING];
const char *qport;
@@ -1076,7 +1079,7 @@ CL_CheckForResend
Resend a connect message if the last one has timed out
=================
*/
void CL_CheckForResend( void )
static void CL_CheckForResend( void )
{
netadr_t adr;
net_gai_state_t res;
@@ -1162,7 +1165,7 @@ void CL_CheckForResend( void )
Netchan_OutOfBandPrint( NS_CLIENT, adr, "getchallenge\n" );
}
resource_t *CL_AddResource( resourcetype_t type, const char *name, int size, qboolean bFatalIfMissing, int index )
static resource_t *CL_AddResource( resourcetype_t type, const char *name, int size, qboolean bFatalIfMissing, int index )
{
resource_t *r = &cl.resourcelist[cl.num_resources];
@@ -1179,7 +1182,7 @@ resource_t *CL_AddResource( resourcetype_t type, const char *name, int size, qbo
return r;
}
void CL_CreateResourceList( void )
static void CL_CreateResourceList( void )
{
char szFileName[MAX_OSPATH];
byte rgucMD5_hash[16];
@@ -1227,7 +1230,7 @@ CL_Connect_f
================
*/
void CL_Connect_f( void )
static void CL_Connect_f( void )
{
string server;
qboolean legacyconnect = false;
@@ -1274,7 +1277,7 @@ Send the rest of the command line over as
an unconnected command.
=====================
*/
void CL_Rcon_f( void )
static void CL_Rcon_f( void )
{
char message[1024];
netadr_t to;
@@ -1381,7 +1384,7 @@ CL_SendDisconnectMessage
Sends a disconnect message to the server
=====================
*/
void CL_SendDisconnectMessage( void )
static void CL_SendDisconnectMessage( void )
{
sizebuf_t buf;
byte data[32];
@@ -1426,7 +1429,7 @@ CL_Reconnect
build a request to reconnect client
=====================
*/
void CL_Reconnect( qboolean setup_netchan )
static void CL_Reconnect( qboolean setup_netchan )
{
if( setup_netchan )
{
@@ -1553,7 +1556,7 @@ void CL_Crashed( void )
CL_LocalServers_f
=================
*/
void CL_LocalServers_f( void )
static void CL_LocalServers_f( void )
{
netadr_t adr;
@@ -1622,7 +1625,7 @@ static void CL_SendMasterServerScanRequest( void )
CL_InternetServers_f
=================
*/
void CL_InternetServers_f( void )
static void CL_InternetServers_f( void )
{
qboolean nat = cl_nat.value != 0.0f;
uint32_t key;
@@ -1651,7 +1654,7 @@ CL_Reconnect_f
The server is changing levels
=================
*/
void CL_Reconnect_f( void )
static void CL_Reconnect_f( void )
{
if( cls.state == ca_disconnected )
return;
@@ -1688,7 +1691,7 @@ CL_FixupColorStringsForInfoString
all the keys and values must be ends with ^7
=================
*/
void CL_FixupColorStringsForInfoString( const char *in, char *out )
static void CL_FixupColorStringsForInfoString( const char *in, char *out )
{
qboolean hasPrefix = false;
qboolean endOfKeyVal = false;
@@ -1752,7 +1755,7 @@ CL_ParseStatusMessage
Handle a reply from a info
=================
*/
void CL_ParseStatusMessage( netadr_t from, sizebuf_t *msg )
static void CL_ParseStatusMessage( netadr_t from, sizebuf_t *msg )
{
static char infostring[MAX_INFO_STRING+8];
char *s = MSG_ReadString( msg );
@@ -1801,7 +1804,7 @@ CL_ParseNETInfoMessage
Handle a reply from a netinfo
=================
*/
void CL_ParseNETInfoMessage( netadr_t from, sizebuf_t *msg, const char *s )
static void CL_ParseNETInfoMessage( netadr_t from, sizebuf_t *msg, const char *s )
{
net_request_t *nr;
static char infostring[MAX_INFO_STRING+8];
@@ -1856,7 +1859,7 @@ CL_ProcessNetRequests
check for timeouts
=================
*/
void CL_ProcessNetRequests( void )
static void CL_ProcessNetRequests( void )
{
net_request_t *nr;
int i;
@@ -1938,7 +1941,7 @@ CL_ConnectionlessPacket
Responses to broadcasts, etc
=================
*/
void CL_ConnectionlessPacket( netadr_t from, sizebuf_t *msg )
static void CL_ConnectionlessPacket( netadr_t from, sizebuf_t *msg )
{
char *args;
const char *c;
@@ -2235,7 +2238,7 @@ CL_GetMessage
Handles recording and playback of demos, on top of NET_ code
====================
*/
int CL_GetMessage( byte *data, size_t *length )
static int CL_GetMessage( byte *data, size_t *length )
{
if( cls.demoplayback )
{
@@ -2254,7 +2257,7 @@ int CL_GetMessage( byte *data, size_t *length )
CL_ReadNetMessage
=================
*/
void CL_ReadNetMessage( void )
static void CL_ReadNetMessage( void )
{
size_t curSize;
@@ -2338,7 +2341,7 @@ Updates the local time and reads/handles messages
on client net connection.
=================
*/
void CL_ReadPackets( void )
static void CL_ReadPackets( void )
{
// decide the simulation time
cl.oldtime = cl.time;
@@ -2402,7 +2405,7 @@ CL_CleanFileName
Replace the displayed name for some resources
====================
*/
const char *CL_CleanFileName( const char *filename )
static const char *CL_CleanFileName( const char *filename )
{
if( COM_CheckString( filename ) && filename[0] == '!' )
return "customization";
@@ -2418,7 +2421,7 @@ CL_RegisterCustomization
register custom resource for player
====================
*/
void CL_RegisterCustomization( resource_t *resource )
static void CL_RegisterCustomization( resource_t *resource )
{
qboolean bFound = false;
customization_t *pList;
@@ -2624,7 +2627,7 @@ void CL_ServerCommand( qboolean reliable, const char *fmt, ... )
CL_SetInfo_f
==============
*/
void CL_SetInfo_f( void )
static void CL_SetInfo_f( void )
{
convar_t *var;
@@ -2664,7 +2667,7 @@ void CL_SetInfo_f( void )
CL_Physinfo_f
==============
*/
void CL_Physinfo_f( void )
static void CL_Physinfo_f( void )
{
Con_Printf( "Phys info settings:\n" );
Info_Print( cls.physinfo );
@@ -2819,7 +2822,7 @@ CL_FullServerinfo_f
Sent by server when serverinfo changes
==================
*/
void CL_FullServerinfo_f( void )
static void CL_FullServerinfo_f( void )
{
if( Cmd_Argc() != 2 )
{
@@ -2837,7 +2840,7 @@ CL_Escape_f
Escape to menu from game
=================
*/
void CL_Escape_f( void )
static void CL_Escape_f( void )
{
if( cls.key_dest == key_menu )
return;
@@ -2855,7 +2858,7 @@ void CL_Escape_f( void )
CL_InitLocal
=================
*/
void CL_InitLocal( void )
static void CL_InitLocal( void )
{
cls.state = ca_disconnected;
cls.signon = 0;
@@ -2890,6 +2893,7 @@ void CL_InitLocal( void )
Cvar_RegisterVariable( &rcon_address );
Cvar_RegisterVariable( &cl_trace_stufftext );
Cvar_RegisterVariable( &cl_trace_messages );
Cvar_RegisterVariable( &cl_trace_events );
@@ -2925,7 +2929,9 @@ void CL_InitLocal( void )
Cvar_RegisterVariable( &cl_clockreset );
Cvar_RegisterVariable( &cl_fixtimerate );
Cvar_RegisterVariable( &hud_fontscale );
Cvar_RegisterVariable( &hud_fontrender );
Cvar_RegisterVariable( &hud_scale );
Cvar_RegisterVariable( &hud_scale_minimal_width );
Cvar_Get( "cl_background", "0", FCVAR_READ_ONLY, "indicate what background map is running" );
Cvar_RegisterVariable( &cl_showevents );
Cvar_Get( "lastdemo", "", FCVAR_ARCHIVE, "last played demo" );
@@ -2981,12 +2987,12 @@ void CL_InitLocal( void )
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" );
Cmd_AddCommand ("envshot", CL_EnvShot_f, "takes a six-sides cubemap shot with specified name" );
Cmd_AddCommand ("skyshot", CL_SkyShot_f, "takes a six-sides envmap (skybox) shot with specified name" );
Cmd_AddCommand ("screenshot", CL_GenericShot_f, "takes a screenshot of the next rendered frame" );
Cmd_AddCommand ("snapshot", CL_GenericShot_f, "takes a snapshot of the next rendered frame" );
Cmd_AddCommand ("envshot", CL_GenericShot_f, "takes a six-sides cubemap shot with specified name" );
Cmd_AddCommand ("skyshot", CL_GenericShot_f, "takes a six-sides envmap (skybox) shot with specified name" );
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 ("saveshot", CL_GenericShot_f, "used for create save previews with LoadGame menu" );
Cmd_AddCommand ("connect", CL_Connect_f, "connect to a server by hostname" );
Cmd_AddCommand ("reconnect", CL_Reconnect_f, "reconnect to current level" );
@@ -3005,7 +3011,7 @@ slowly adjuct client clock
to smooth lag effect
==================
*/
void CL_AdjustClock( void )
static void CL_AdjustClock( void )
{
if( cl.timedelta == 0.0f || !cl_fixtimerate.value )
return;
@@ -3139,7 +3145,7 @@ void CL_Init( void )
VID_Init(); // init video
S_Init(); // init sound
Voice_Init( VOICE_DEFAULT_CODEC, 3 ); // init voice
Voice_Init( VOICE_DEFAULT_CODEC, 3, true ); // init voice (do not open the device)
// unreliable buffer. unsed for unreliable commands and voice stream
MSG_Init( &cls.datagram, "cls.datagram", cls.datagram_buf, sizeof( cls.datagram_buf ));

View File

@@ -387,7 +387,7 @@ static void NetGraph_DrawTextFields( int x, int y, int w, wrect_t rect, int coun
// move rolling average
framerate = FRAMERATE_AVG_FRAC * host.frametime + ( 1.0f - FRAMERATE_AVG_FRAC ) * framerate;
ref.dllFuncs.GL_SetRenderMode( font->rendermode );
CL_SetFontRendermode( font );
if( framerate > 0.0f )
{

View File

@@ -21,7 +21,6 @@ GNU General Public License for more details.
#include "shake.h"
#include "hltv.h"
#include "input.h"
#include "server.h"
#if XASH_LOW_MEMORY != 2
int CL_UPDATE_BACKUP = SINGLEPLAYER_BACKUP;
#endif
@@ -32,7 +31,7 @@ CL_UserMsgStub
Default stub for missed callbacks
===============
*/
int CL_UserMsgStub( const char *pszName, int iSize, void *pbuf )
static int CL_UserMsgStub( const char *pszName, int iSize, void *pbuf )
{
return 1;
}
@@ -58,7 +57,7 @@ CL_ParseSoundPacket
==================
*/
void CL_ParseSoundPacket( sizebuf_t *msg )
static void CL_ParseSoundPacket( sizebuf_t *msg )
{
vec3_t pos;
int chan, sound;
@@ -305,7 +304,7 @@ CL_ParseStaticEntity
static client entity
==================
*/
void CL_ParseStaticEntity( sizebuf_t *msg )
static void CL_ParseStaticEntity( sizebuf_t *msg )
{
int i, newnum;
entity_state_t from, to;
@@ -619,7 +618,7 @@ static void CL_StartResourceDownloading( const char *pszMessage, qboolean bCusto
CL_BatchResourceRequest( !bCustom );
}
customization_t *CL_PlayerHasCustomization( int nPlayerNum, resourcetype_t type )
static customization_t *CL_PlayerHasCustomization( int nPlayerNum, resourcetype_t type )
{
customization_t *pList;
@@ -631,7 +630,7 @@ customization_t *CL_PlayerHasCustomization( int nPlayerNum, resourcetype_t type
return NULL;
}
void CL_RemoveCustomization( int nPlayerNum, customization_t *pRemove )
static void CL_RemoveCustomization( int nPlayerNum, customization_t *pRemove )
{
customization_t *pList;
customization_t *pNext;
@@ -802,7 +801,7 @@ CL_CreateCustomizationList
loading custom decal for self
==================
*/
void CL_CreateCustomizationList( void )
static void CL_CreateCustomizationList( void )
{
resource_t *pResource;
player_info_t *pPlayer;
@@ -1383,9 +1382,13 @@ void CL_UpdateUserinfo( sizebuf_t *msg, qboolean legacy )
if( slot >= MAX_CLIENTS )
Host_Error( "CL_ParseServerMessage: svc_updateuserinfo >= MAX_CLIENTS\n" );
player = &cl.players[slot];
if( !legacy )
id = MSG_ReadLong( msg ); // unique user ID
player = &cl.players[slot];
else
id = 0; // bogus
active = MSG_ReadOneBit( msg ) ? true : false;
if( active )
@@ -1407,6 +1410,10 @@ void CL_UpdateUserinfo( sizebuf_t *msg, qboolean legacy )
memset( player, 0, sizeof( *player ));
}
// in GoldSrc userinfo might be empty but userid is always sent as separate value
// thus avoids clean up even after client disconnect
player->userid = id;
}
/*
@@ -1494,7 +1501,7 @@ void CL_UpdateUserPings( sizebuf_t *msg )
}
}
void CL_SendConsistencyInfo( sizebuf_t *msg )
static void CL_SendConsistencyInfo( sizebuf_t *msg )
{
qboolean user_changed_diskfile;
vec3_t mins, maxs;
@@ -1671,7 +1678,7 @@ void CL_RegisterResources( sizebuf_t *msg )
}
}
void CL_ParseConsistencyInfo( sizebuf_t *msg )
static void CL_ParseConsistencyInfo( sizebuf_t *msg )
{
int lastcheck;
int delta;
@@ -1736,7 +1743,7 @@ CL_ParseResourceList
==============
*/
void CL_ParseResourceList( sizebuf_t *msg )
static void CL_ParseResourceList( sizebuf_t *msg )
{
resource_t *pResource;
int i, total;
@@ -1773,12 +1780,12 @@ CL_ParseVoiceInit
==================
*/
void CL_ParseVoiceInit( sizebuf_t *msg )
static void CL_ParseVoiceInit( sizebuf_t *msg )
{
char *pszCodec = MSG_ReadString( msg );
int quality = MSG_ReadByte( msg );
Voice_Init( pszCodec, quality );
Voice_Init( pszCodec, quality, false ); // init requested codec and the device
}
/*
@@ -1787,7 +1794,7 @@ CL_ParseVoiceData
==================
*/
void CL_ParseVoiceData( sizebuf_t *msg )
static void CL_ParseVoiceData( sizebuf_t *msg )
{
int size, idx, frames;
byte received[8192];
@@ -1904,7 +1911,7 @@ CL_ParseScreenShake
Set screen shake
==============
*/
void CL_ParseScreenShake( sizebuf_t *msg )
static void CL_ParseScreenShake( sizebuf_t *msg )
{
float amplitude = (float)(word)MSG_ReadShort( msg ) * ( 1.0f / (float)( 1 << 12 ));
float duration = (float)(word)MSG_ReadShort( msg ) * ( 1.0f / (float)( 1 << 12 ));
@@ -1927,7 +1934,7 @@ CL_ParseScreenFade
Set screen fade
==============
*/
void CL_ParseScreenFade( sizebuf_t *msg )
static void CL_ParseScreenFade( sizebuf_t *msg )
{
float duration, holdTime;
screenfade_t *sf = &clgame.fade;
@@ -2026,7 +2033,7 @@ CL_ParseExec
Exec map/class specific configs
==============
*/
void CL_ParseExec( sizebuf_t *msg )
static void CL_ParseExec( sizebuf_t *msg )
{
qboolean is_class;
int class_idx;
@@ -2322,11 +2329,18 @@ void CL_ParseServerMessage( sizebuf_t *msg, qboolean normal_message )
break;
case svc_stufftext:
s = MSG_ReadString( msg );
if( cl_trace_stufftext.value )
{
size_t len = Q_strlen( s );
Con_Printf( "Stufftext: %s%c", s, len && s[len-1] == '\n' ? '\0' : '\n' );
}
#ifdef HACKS_RELATED_HLMODS
// disable Cry Of Fear antisave protection
if( !Q_strnicmp( s, "disconnect", 10 ) && cls.signon != SIGNONS )
break; // too early
#endif
Cbuf_AddFilteredText( s );
break;
case svc_setangle:

View File

@@ -30,7 +30,7 @@ CL_ParseStaticEntity
static client entity
==================
*/
void CL_LegacyParseStaticEntity( sizebuf_t *msg )
static void CL_LegacyParseStaticEntity( sizebuf_t *msg )
{
int i;
entity_state_t state;
@@ -98,7 +98,7 @@ void CL_LegacyParseStaticEntity( sizebuf_t *msg )
R_AddEfrags( ent ); // add link
}
void CL_LegacyParseSoundPacket( sizebuf_t *msg, qboolean is_ambient )
static void CL_LegacyParseSoundPacket( sizebuf_t *msg, qboolean is_ambient )
{
vec3_t pos;
int chan, sound;
@@ -167,7 +167,7 @@ CL_PrecacheSound
prceache sound from server
================
*/
void CL_LegacyPrecacheSound( sizebuf_t *msg )
static void CL_LegacyPrecacheSound( sizebuf_t *msg )
{
int soundIndex;
@@ -184,7 +184,7 @@ void CL_LegacyPrecacheSound( sizebuf_t *msg )
cl.sound_index[soundIndex] = S_RegisterSound( cl.sound_precache[soundIndex] );
}
void CL_LegacyPrecacheModel( sizebuf_t *msg )
static void CL_LegacyPrecacheModel( sizebuf_t *msg )
{
int modelIndex;
string model;
@@ -214,7 +214,7 @@ void CL_LegacyPrecacheModel( sizebuf_t *msg )
cl.nummodels = Q_max( cl.nummodels, modelIndex );
}
void CL_LegacyPrecacheEvent( sizebuf_t *msg )
static void CL_LegacyPrecacheEvent( sizebuf_t *msg )
{
int eventIndex;
@@ -242,7 +242,7 @@ CL_ParseResourceList
==============
*/
void CL_LegacyParseResourceList( sizebuf_t *msg )
static void CL_LegacyParseResourceList( sizebuf_t *msg )
{
int i = 0;
static struct
@@ -443,13 +443,17 @@ void CL_ParseLegacyServerMessage( sizebuf_t *msg, qboolean normal_message )
break;
case svc_stufftext:
s = MSG_ReadString( msg );
if( cl_trace_stufftext.value )
{
size_t len = Q_strlen( s );
Con_Printf( "Stufftext: %s%c", s, len && s[len-1] == '\n' ? '\0' : '\n' );
}
#ifdef HACKS_RELATED_HLMODS
// 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_AddFilteredText( s );
break;
case svc_setangle:

View File

@@ -54,31 +54,6 @@ void GAME_EXPORT CL_PopPMStates( void )
clgame.pushed = false;
}
/*
=============
CL_PushTraceBounds
=============
*/
void GAME_EXPORT CL_PushTraceBounds( int hullnum, const float *mins, const float *maxs )
{
hullnum = bound( 0, hullnum, 3 );
VectorCopy( mins, clgame.pmove->player_mins[hullnum] );
VectorCopy( maxs, clgame.pmove->player_maxs[hullnum] );
}
/*
=============
CL_PopTraceBounds
=============
*/
void GAME_EXPORT CL_PopTraceBounds( void )
{
memcpy( clgame.pmove->player_mins, host.player_mins, sizeof( host.player_mins ));
memcpy( clgame.pmove->player_maxs, host.player_maxs, sizeof( host.player_maxs ));
}
/*
===============
CL_IsPredicted
@@ -417,7 +392,7 @@ CL_AddLinksToPmove
collect solid entities
====================
*/
void CL_AddLinksToPmove( frame_t *frame )
static void CL_AddLinksToPmove( frame_t *frame )
{
entity_state_t *state;
model_t *model;
@@ -687,11 +662,6 @@ cl_entity_t *CL_GetWaterEntity( const float *rgflPos )
return CL_GetEntityByIndex( entnum );
}
int GAME_EXPORT CL_TestLine( const vec3_t start, const vec3_t end, int flags )
{
return PM_TestLineExt( clgame.pmove, clgame.pmove->physents, clgame.pmove->numphysent, start, end, flags );
}
static int GAME_EXPORT pfnTestPlayerPosition( float *pos, pmtrace_t *ptrace )
{
return PM_TestPlayerPosition( clgame.pmove, pos, ptrace, NULL );
@@ -897,7 +867,7 @@ static void CL_SetupPMove( playermove_t *pmove, const local_state_t *from, const
Q_strncpy( pmove->physinfo, cls.physinfo, MAX_INFO_STRING );
}
const void CL_FinishPMove( const playermove_t *pmove, local_state_t *to )
static const void CL_FinishPMove( const playermove_t *pmove, local_state_t *to )
{
entity_state_t *ps;
clientdata_t *cd;
@@ -950,7 +920,7 @@ CL_RunUsercmd
Runs prediction code for user cmd
=================
*/
void CL_RunUsercmd( local_state_t *from, local_state_t *to, usercmd_t *u, qboolean runfuncs, double *time, unsigned int random_seed )
static void CL_RunUsercmd( local_state_t *from, local_state_t *to, usercmd_t *u, qboolean runfuncs, double *time, unsigned int random_seed )
{
usercmd_t cmd;

View File

@@ -414,7 +414,7 @@ If an entities model or origin changes from frame to frame, it must be
relinked. Other attributes can change without relinking.
==================
*/
void CL_ParseQuakeEntityData( sizebuf_t *msg, int bits )
static void CL_ParseQuakeEntityData( sizebuf_t *msg, int bits )
{
int i, newnum, pack;
qboolean forcelink;
@@ -565,7 +565,7 @@ CL_ParseQuakeParticles
==================
*/
void CL_ParseQuakeParticle( sizebuf_t *msg )
static void CL_ParseQuakeParticle( sizebuf_t *msg )
{
int count, color;
vec3_t org, dir;
@@ -587,7 +587,7 @@ CL_ParseQuakeStaticSound
===================
*/
void CL_ParseQuakeStaticSound( sizebuf_t *msg )
static void CL_ParseQuakeStaticSound( sizebuf_t *msg )
{
int sound_num;
float vol, attn;
@@ -816,7 +816,7 @@ CL_QuakeStuffText
==================
*/
void CL_QuakeStuffText( const char *text )
static void CL_QuakeStuffText( const char *text )
{
Q_strncat( cmd_buf, text, sizeof( cmd_buf ));
@@ -831,7 +831,7 @@ CL_QuakeExecStuff
==================
*/
void CL_QuakeExecStuff( void )
static void CL_QuakeExecStuff( void )
{
char *text = cmd_buf;
char token[256];

View File

@@ -126,7 +126,7 @@ CL_GenericHandle
=============
*/
const char *CL_GenericHandle( int fileindex )
static const char *CL_GenericHandle( int fileindex )
{
if( fileindex < 0 || fileindex >= MAX_CUSTOM )
return 0;

View File

@@ -252,7 +252,7 @@ VID_WriteOverviewScript
Create overview script file
===============
*/
void VID_WriteOverviewScript( void )
static void VID_WriteOverviewScript( void )
{
ref_overview_t *ov = &clgame.overView;
string filename;
@@ -288,6 +288,9 @@ void SCR_MakeScreenShot( void )
qboolean iRet = false;
int viewsize;
if( cls.scrshot_action == scrshot_inactive )
return;
if( cls.envshot_viewsize > 0 )
viewsize = cls.envshot_viewsize;
else viewsize = cl_envshot_size.value;
@@ -319,8 +322,6 @@ void SCR_MakeScreenShot( void )
if( iRet )
VID_WriteOverviewScript(); // store overview script too
break;
case scrshot_inactive:
return;
}
// report
@@ -344,7 +345,7 @@ void SCR_MakeScreenShot( void )
SCR_DrawPlaque
================
*/
void SCR_DrawPlaque( void )
static void SCR_DrawPlaque( void )
{
if(( cl_allow_levelshots.value && !cls.changelevel ) || cl.background )
{
@@ -415,7 +416,7 @@ void SCR_EndLoadingPlaque( void )
SCR_AddDirtyPoint
=================
*/
void SCR_AddDirtyPoint( int x, int y )
static void SCR_AddDirtyPoint( int x, int y )
{
if( x < scr_dirty.x1 ) scr_dirty.x1 = x;
if( x > scr_dirty.x2 ) scr_dirty.x2 = x;
@@ -572,15 +573,15 @@ void SCR_LoadCreditsFont( void )
"creditsfont_%s.fnt", Cvar_VariableString( "con_charset" )) > 0 )
{
if( FS_FileExists( charsetFnt, false ))
success = Con_LoadVariableWidthFont( charsetFnt, font, scale, kRenderTransAdd, TF_FONT );
success = Con_LoadVariableWidthFont( charsetFnt, font, scale, &hud_fontrender, TF_FONT );
}
}
if( !success )
success = Con_LoadVariableWidthFont( "gfx/creditsfont.fnt", font, scale, kRenderTransAdd, TF_FONT );
success = Con_LoadVariableWidthFont( "gfx/creditsfont.fnt", font, scale, &hud_fontrender, TF_FONT );
if( !success )
success = Con_LoadFixedWidthFont( "gfx/conchars", font, scale, kRenderTransAdd, TF_FONT );
success = Con_LoadFixedWidthFont( "gfx/conchars", font, scale, &hud_fontrender, TF_FONT );
// copy font size for client.dll
if( success )
@@ -602,7 +603,7 @@ SCR_InstallParticlePalette
INTERNAL RESOURCE
================
*/
void SCR_InstallParticlePalette( void )
static void SCR_InstallParticlePalette( void )
{
rgbdata_t *pic;
int i;
@@ -648,21 +649,21 @@ void SCR_RegisterTextures( void )
// register gfx.wad images
if( FS_FileExists( "gfx/paused.lmp", false ))
cls.pauseIcon = ref.dllFuncs.GL_LoadTexture( "gfx/paused.lmp", NULL, 0, TF_IMAGE );
cls.pauseIcon = ref.dllFuncs.GL_LoadTexture( "gfx/paused.lmp", NULL, 0, TF_IMAGE|TF_ALLOW_NEAREST );
else if( FS_FileExists( "gfx/pause.lmp", false ))
cls.pauseIcon = ref.dllFuncs.GL_LoadTexture( "gfx/pause.lmp", NULL, 0, TF_IMAGE );
cls.pauseIcon = ref.dllFuncs.GL_LoadTexture( "gfx/pause.lmp", NULL, 0, TF_IMAGE|TF_ALLOW_NEAREST );
if( FS_FileExists( "gfx/lambda.lmp", false ))
{
if( cl_allow_levelshots.value )
cls.loadingBar = ref.dllFuncs.GL_LoadTexture( "gfx/lambda.lmp", NULL, 0, TF_IMAGE|TF_LUMINANCE );
else cls.loadingBar = ref.dllFuncs.GL_LoadTexture( "gfx/lambda.lmp", NULL, 0, TF_IMAGE );
cls.loadingBar = ref.dllFuncs.GL_LoadTexture( "gfx/lambda.lmp", NULL, 0, TF_IMAGE|TF_LUMINANCE|TF_ALLOW_NEAREST );
else cls.loadingBar = ref.dllFuncs.GL_LoadTexture( "gfx/lambda.lmp", NULL, 0, TF_IMAGE|TF_ALLOW_NEAREST );
}
else if( FS_FileExists( "gfx/loading.lmp", false ))
{
if( cl_allow_levelshots.value )
cls.loadingBar = ref.dllFuncs.GL_LoadTexture( "gfx/loading.lmp", NULL, 0, TF_IMAGE|TF_LUMINANCE );
else cls.loadingBar = ref.dllFuncs.GL_LoadTexture( "gfx/loading.lmp", NULL, 0, TF_IMAGE );
cls.loadingBar = ref.dllFuncs.GL_LoadTexture( "gfx/loading.lmp", NULL, 0, TF_IMAGE|TF_LUMINANCE|TF_ALLOW_NEAREST );
else cls.loadingBar = ref.dllFuncs.GL_LoadTexture( "gfx/loading.lmp", NULL, 0, TF_IMAGE|TF_ALLOW_NEAREST );
}
cls.tileImage = ref.dllFuncs.GL_LoadTexture( "gfx/backtile.lmp", NULL, 0, TF_NOMIPMAP );
@@ -675,7 +676,7 @@ SCR_SizeUp_f
Keybinding command
=================
*/
void SCR_SizeUp_f( void )
static void SCR_SizeUp_f( void )
{
Cvar_SetValue( "viewsize", Q_min( scr_viewsize.value + 10, 120 ));
}
@@ -688,7 +689,7 @@ SCR_SizeDown_f
Keybinding command
=================
*/
void SCR_SizeDown_f( void )
static void SCR_SizeDown_f( void )
{
Cvar_SetValue( "viewsize", Q_max( scr_viewsize.value - 10, 30 ));
}

View File

@@ -57,35 +57,7 @@ const char *cl_default_sprites[] =
"sprites/shellchrome.spr",
};
const char *cl_player_shell_sounds[] =
{
"player/pl_shell1.wav",
"player/pl_shell2.wav",
"player/pl_shell3.wav",
};
const char *cl_weapon_shell_sounds[] =
{
"weapons/sshell1.wav",
"weapons/sshell2.wav",
"weapons/sshell3.wav",
};
const char *cl_ricochet_sounds[] =
{
"weapons/ric1.wav",
"weapons/ric2.wav",
"weapons/ric3.wav",
"weapons/ric4.wav",
"weapons/ric5.wav",
};
const char *cl_explode_sounds[] =
{
"weapons/explode3.wav",
"weapons/explode4.wav",
"weapons/explode5.wav",
};
static void CL_PlayerDecal( int playerIndex, int textureIndex, int entityIndex, float *pos );
/*
================
@@ -146,6 +118,7 @@ client resources not precached by server
*/
void CL_AddClientResources( void )
{
const char *snd;
char filepath[MAX_QPATH];
int i;
@@ -161,37 +134,37 @@ void CL_AddClientResources( void )
}
// then check sounds
for( i = 0; i < ARRAYSIZE( cl_player_shell_sounds ); i++ )
for( i = 0; ( snd = SoundList_Get( BouncePlayerShell, i )); i++ )
{
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", cl_player_shell_sounds[i] );
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
if( !FS_FileExists( filepath, false ))
CL_AddClientResource( cl_player_shell_sounds[i], t_sound );
CL_AddClientResource( snd, t_sound );
}
for( i = 0; i < ARRAYSIZE( cl_weapon_shell_sounds ); i++ )
for( i = 0; ( snd = SoundList_Get( BounceWeaponShell, i )); i++ )
{
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", cl_weapon_shell_sounds[i] );
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
if( !FS_FileExists( filepath, false ))
CL_AddClientResource( cl_weapon_shell_sounds[i], t_sound );
CL_AddClientResource( snd, t_sound );
}
for( i = 0; i < ARRAYSIZE( cl_explode_sounds ); i++ )
for( i = 0; ( snd = SoundList_Get( Explode, i )); i++ )
{
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", cl_explode_sounds[i] );
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
if( !FS_FileExists( filepath, false ))
CL_AddClientResource( cl_explode_sounds[i], t_sound );
CL_AddClientResource( snd, t_sound );
}
#if 0 // ric sounds was precached by server-side
for( i = 0; i < ARRAYSIZE( cl_ricochet_sounds ); i++ )
for( i = 0; ( snd = SoundList_Get( Ricochet, i )); i++ )
{
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", cl_ricochet_sounds[i] );
Q_snprintf( filepath, sizeof( filepath ), DEFAULT_SOUNDPATH "%s", snd );
if( !FS_FileExists( filepath, false ))
CL_AddClientResource( cl_ricochet_sounds[i], t_sound );
CL_AddClientResource( snd, t_sound );
}
#endif
}
@@ -255,7 +228,7 @@ CL_PrepareTEnt
set default values
==============
*/
void CL_PrepareTEnt( TEMPENTITY *pTemp, model_t *pmodel )
static void CL_PrepareTEnt( TEMPENTITY *pTemp, model_t *pmodel )
{
int frameCount = 0;
int modelIndex = 0;
@@ -296,10 +269,10 @@ CL_TempEntPlaySound
play collide sound
==============
*/
void CL_TempEntPlaySound( TEMPENTITY *pTemp, float damp )
static void CL_TempEntPlaySound( TEMPENTITY *pTemp, float damp )
{
float fvol;
char soundname[32];
const char *soundname = NULL;
qboolean isshellcasing = false;
int zvel;
@@ -310,36 +283,39 @@ void CL_TempEntPlaySound( TEMPENTITY *pTemp, float damp )
switch( pTemp->hitSound )
{
case BOUNCE_GLASS:
Q_snprintf( soundname, sizeof( soundname ), "debris/glass%i.wav", COM_RandomLong( 1, 4 ));
soundname = SoundList_GetRandom( BounceGlass );
break;
case BOUNCE_METAL:
Q_snprintf( soundname, sizeof( soundname ), "debris/metal%i.wav", COM_RandomLong( 1, 6 ));
soundname = SoundList_GetRandom( BounceMetal );
break;
case BOUNCE_FLESH:
Q_snprintf( soundname, sizeof( soundname ), "debris/flesh%i.wav", COM_RandomLong( 1, 7 ));
soundname = SoundList_GetRandom( BounceFlesh );
break;
case BOUNCE_WOOD:
Q_snprintf( soundname, sizeof( soundname ), "debris/wood%i.wav", COM_RandomLong( 1, 4 ));
soundname = SoundList_GetRandom( BounceWood );
break;
case BOUNCE_SHRAP:
Q_strncpy( soundname, cl_ricochet_sounds[COM_RandomLong( 0, 4 )], sizeof( soundname ) );
soundname = SoundList_GetRandom( Ricochet );
break;
case BOUNCE_SHOTSHELL:
Q_strncpy( soundname, cl_weapon_shell_sounds[COM_RandomLong( 0, 2 )], sizeof( soundname ) );
soundname = SoundList_GetRandom( BounceWeaponShell );
isshellcasing = true; // shell casings have different playback parameters
fvol = 0.5f;
break;
case BOUNCE_SHELL:
Q_strncpy( soundname, cl_player_shell_sounds[COM_RandomLong( 0, 2 )], sizeof( soundname ) );
soundname = SoundList_GetRandom( BouncePlayerShell );
isshellcasing = true; // shell casings have different playback parameters
break;
case BOUNCE_CONCRETE:
Q_snprintf( soundname, sizeof( soundname ), "debris/concrete%i.wav", COM_RandomLong( 1, 3 ));
soundname = SoundList_GetRandom( BounceConcrete );
break;
default: // null sound
return;
}
if( !soundname )
return;
zvel = abs( pTemp->entity.baseline.origin[2] );
// only play one out of every n
@@ -380,7 +356,7 @@ CL_TEntAddEntity
add entity to renderlist
==============
*/
int CL_TempEntAddEntity( cl_entity_t *pEntity )
static int CL_TempEntAddEntity( cl_entity_t *pEntity )
{
vec3_t mins, maxs;
@@ -432,7 +408,7 @@ CL_TEntAddEntity
free the first low priority tempent it finds.
==============
*/
qboolean CL_FreeLowPriorityTempEnt( void )
static qboolean CL_FreeLowPriorityTempEnt( void )
{
TEMPENTITY *pActive = cl_active_tents;
TEMPENTITY *pPrev = NULL;
@@ -1489,7 +1465,7 @@ void GAME_EXPORT R_FunnelSprite( const vec3_t org, int modelIndex, int reverse )
===============
R_SparkEffect
Create a streaks + richochet sprite
Create a streaks + ricochet sprite
===============
*/
void GAME_EXPORT R_SparkEffect( const vec3_t pos, int count, int velocityMin, int velocityMax )
@@ -1505,18 +1481,25 @@ R_RicochetSound
Make a random ricochet sound
==============
*/
static void R_RicochetSound_( const vec3_t pos, int sound )
static void R_RicochetSoundByName( const vec3_t pos, const char *name )
{
sound_t handle;
handle = S_RegisterSound( cl_ricochet_sounds[sound] );
sound_t handle;
handle = S_RegisterSound( name );
S_StartSound( pos, 0, CHAN_AUTO, handle, VOL_NORM, 1.0, 100, 0 );
}
static void R_RicochetSoundByIndex( const vec3_t pos, int idx )
{
const char *name = SoundList_Get( Ricochet, idx );
if( name )
R_RicochetSoundByName( pos, name );
}
void GAME_EXPORT R_RicochetSound( const vec3_t pos )
{
R_RicochetSound_( pos, COM_RandomLong( 0, 4 ));
const char *name = SoundList_GetRandom( Ricochet );
if( name )
R_RicochetSoundByName( pos, name );
}
/*
@@ -1663,8 +1646,12 @@ void GAME_EXPORT R_Explosion( vec3_t pos, int model, float scale, float framerat
if( !FBitSet( flags, TE_EXPLFLAG_NOSOUND ))
{
hSound = S_RegisterSound( cl_explode_sounds[COM_RandomLong( 0, 2 )] );
S_StartSound( pos, 0, CHAN_STATIC, hSound, VOL_NORM, 0.3f, PITCH_NORM, 0 );
const char *name = SoundList_GetRandom( Explode );
if( name )
{
hSound = S_RegisterSound( name );
S_StartSound( pos, 0, CHAN_STATIC, hSound, VOL_NORM, 0.3f, PITCH_NORM, 0 );
}
}
}
@@ -1907,6 +1894,7 @@ void CL_ParseTempEntity( sizebuf_t *msg )
cl_entity_t *pEnt;
dlight_t *dl;
sound_t hSound;
const char *name;
if( cls.legacymode )
iSize = MSG_ReadByte( msg );
@@ -1966,8 +1954,11 @@ void CL_ParseTempEntity( sizebuf_t *msg )
pos[2] = MSG_ReadCoord( &buf );
R_BlobExplosion( pos );
hSound = S_RegisterSound( cl_explode_sounds[0] );
S_StartSound( pos, -1, CHAN_AUTO, hSound, VOL_NORM, 1.0f, PITCH_NORM, 0 );
if(( name = SoundList_Get( Explode, 0 )))
{
hSound = S_RegisterSound( name );
S_StartSound( pos, -1, CHAN_AUTO, hSound, VOL_NORM, 1.0f, PITCH_NORM, 0 );
}
break;
case TE_SMOKE:
pos[0] = MSG_ReadCoord( &buf );
@@ -2020,8 +2011,11 @@ void CL_ParseTempEntity( sizebuf_t *msg )
dl->die = cl.time + 0.5;
dl->decay = 300;
hSound = S_RegisterSound( cl_explode_sounds[0] );
S_StartSound( pos, -1, CHAN_AUTO, hSound, VOL_NORM, 0.6f, PITCH_NORM, 0 );
if(( name = SoundList_Get( Explode, 0 )))
{
hSound = S_RegisterSound( name );
S_StartSound( pos, -1, CHAN_AUTO, hSound, VOL_NORM, 1.0f, PITCH_NORM, 0 );
}
break;
case TE_BSPDECAL:
case TE_DECAL:
@@ -2249,8 +2243,8 @@ void CL_ParseTempEntity( sizebuf_t *msg )
CL_DecalShoot( CL_DecalIndex( decalIndex ), entityIndex, 0, pos, 0 );
R_BulletImpactParticles( pos );
flags = COM_RandomLong( 0, 0x7fff );
if( flags < 0x3fff )
R_RicochetSound_( pos, flags % 5 );
if( flags < 0x3fff && ( count = SoundList_Count( Ricochet )))
R_RicochetSoundByIndex( pos, flags % count );
break;
case TE_SPRAY:
case TE_SPRITE_SPRAY:
@@ -2414,7 +2408,7 @@ LIGHT STYLE MANAGEMENT
CL_ClearLightStyles
================
*/
void CL_ClearLightStyles( void )
static void CL_ClearLightStyles( void )
{
memset( cl.lightstyles, 0, sizeof( cl.lightstyles ));
}
@@ -2472,7 +2466,7 @@ dlight_t cl_elights[MAX_ELIGHTS];
CL_ClearDlights
================
*/
void CL_ClearDlights( void )
static void CL_ClearDlights( void )
{
memset( cl_dlights, 0, sizeof( cl_dlights ));
memset( cl_elights, 0, sizeof( cl_elights ));
@@ -2919,7 +2913,7 @@ CL_PlayerDecal
spray custom colored decal (clan logo etc)
===============
*/
void CL_PlayerDecal( int playernum, int customIndex, int entityIndex, float *pos )
static void CL_PlayerDecal( int playernum, int customIndex, int entityIndex, float *pos )
{
int textureIndex = 0;
customization_t *pCust = NULL;

View File

@@ -68,7 +68,7 @@ qboolean SCR_NextMovie( void )
return true;
}
void SCR_CreateStartupVids( void )
static void SCR_CreateStartupVids( void )
{
file_t *f;

View File

@@ -29,7 +29,7 @@ V_CalcViewRect
calc frame rectangle (Quake1 style)
===============
*/
void V_CalcViewRect( void )
static void V_CalcViewRect( void )
{
qboolean full = false;
int sb_lines;
@@ -88,7 +88,7 @@ void V_CalcViewRect( void )
V_SetupViewModel
===============
*/
void V_SetupViewModel( void )
static void V_SetupViewModel( void )
{
cl_entity_t *view = &clgame.viewent;
player_info_t *info = &cl.players[cl.playernum];
@@ -118,7 +118,7 @@ void V_SetupViewModel( void )
V_SetRefParams
===============
*/
void V_SetRefParams( ref_params_t *fd )
static void V_SetRefParams( ref_params_t *fd )
{
memset( fd, 0, sizeof( ref_params_t ));
@@ -182,7 +182,7 @@ V_MergeOverviewRefdef
merge refdef with overview settings
===============
*/
void V_RefApplyOverview( ref_viewpass_t *rvp )
static void V_RefApplyOverview( ref_viewpass_t *rvp )
{
ref_overview_t *ov = &clgame.overView;
float aspect;
@@ -281,7 +281,7 @@ static void V_AdjustFov( float *fov_x, float *fov_y, float width, float height,
V_GetRefParams
=============
*/
void V_GetRefParams( ref_params_t *fd, ref_viewpass_t *rvp )
static void V_GetRefParams( ref_params_t *fd, ref_viewpass_t *rvp )
{
// part1: deniable updates
VectorCopy( fd->simvel, cl.simvel );
@@ -408,14 +408,14 @@ void V_RenderView( void )
#define NODE_INTERVAL_X(x) (x * 16.0f)
#define NODE_INTERVAL_Y(x) (x * 16.0f)
void R_DrawLeafNode( float x, float y, float scale )
static void R_DrawLeafNode( float x, float y, float scale )
{
float downScale = scale * 0.25f;// * POINT_SIZE;
ref.dllFuncs.R_DrawStretchPic( x - downScale * 0.5f, y - downScale * 0.5f, downScale, downScale, 0, 0, 1, 1, R_GetBuiltinTexture( REF_PARTICLE_TEXTURE ) );
}
void R_DrawNodeConnection( float x, float y, float x2, float y2 )
static void R_DrawNodeConnection( float x, float y, float x2, float y2 )
{
ref.dllFuncs.Begin( TRI_LINES );
ref.dllFuncs.Vertex3f( x, y, 0 );
@@ -423,7 +423,7 @@ void R_DrawNodeConnection( float x, float y, float x2, float y2 )
ref.dllFuncs.End( );
}
void R_ShowTree_r( mnode_t *node, float x, float y, float scale, int shownodes, mleaf_t *viewleaf )
static void R_ShowTree_r( mnode_t *node, float x, float y, float scale, int shownodes, mleaf_t *viewleaf )
{
float downScale = scale * 0.8f;
@@ -470,7 +470,7 @@ void R_ShowTree_r( mnode_t *node, float x, float y, float scale, int shownodes,
world.recursion_level--;
}
void R_ShowTree( void )
static void R_ShowTree( void )
{
float x = (float)((refState.width - (int)POINT_SIZE) >> 1);
float y = NODE_INTERVAL_Y(1.0f);
@@ -553,4 +553,6 @@ void V_PostRender( void )
ref.dllFuncs.R_AllowFog( true );
Platform_SetTimer( 0.0f );
ref.dllFuncs.R_EndFrame();
V_CheckGammaEnd();
}

View File

@@ -342,8 +342,7 @@ typedef struct
byte charWidths[256]; // scaled widths
int charHeight; // scaled height
int type; // fixed width font or variable
int rendermode; // default rendermode
qboolean nearest; // nearest filtering enabled
convar_t *rendermode; // user-defined default rendermode
qboolean valid; // all rectangles are valid
} cl_font_t;
@@ -682,11 +681,14 @@ extern convar_t cl_draw_beams;
extern convar_t cl_clockreset;
extern convar_t cl_fixtimerate;
extern convar_t hud_fontscale;
extern convar_t hud_fontrender;
extern convar_t hud_scale;
extern convar_t hud_scale_minimal_width;
extern convar_t r_showtextures;
extern convar_t cl_bmodelinterp;
extern convar_t cl_lw; // local weapons
extern convar_t cl_charset;
extern convar_t cl_trace_stufftext;
extern convar_t cl_trace_messages;
extern convar_t cl_trace_events;
extern convar_t hud_utf8;
@@ -705,7 +707,6 @@ extern convar_t cl_fixmodelinterpolationartifacts;
//=============================================================================
void CL_SetLightstyle( int style, const char* s, float f );
void CL_RunLightStyles( void );
void CL_DecayLights( void );
dlight_t *CL_GetDynamicLight( int number );
dlight_t *CL_GetEntityLight( int number );
@@ -716,12 +717,8 @@ dlight_t *CL_GetEntityLight( int number );
// cl_cmds.c
//
void CL_Quit_f( void );
void CL_ScreenShot_f( void );
void CL_SnapShot_f( void );
void CL_GenericShot_f( void );
void CL_PlayCDTrack_f( void );
void CL_EnvShot_f( void );
void CL_SkyShot_f( void );
void CL_SaveShot_f( void );
void CL_LevelShot_f( void );
void CL_SetSky_f( void );
void SCR_Viewpos_f( void );
@@ -742,8 +739,6 @@ void CL_ClearResourceLists( void );
void CL_Parse_Debug( qboolean enable );
void CL_Parse_RecordCommand( int cmd, int startoffset );
void CL_ResetFrame( frame_t *frame );
void CL_WriteMessageHistory( void );
const char *CL_MsgInfo( int cmd );
//
// cl_efx.c
@@ -754,7 +749,6 @@ void CL_Particle( const vec3_t org, int color, float life, int zpos, int zvel );
// cl_main.c
//
void CL_Init( void );
void CL_SendCommand( void );
void CL_Disconnect_f( void );
void CL_ProcessFile( qboolean successfully_received, const char *filename );
void CL_WriteUsercmd( sizebuf_t *msg, int from, int to );
@@ -763,7 +757,6 @@ qboolean CL_PrecacheResources( void );
void CL_SetupOverviewParams( void );
void CL_UpdateFrameLerp( void );
int CL_IsDevOverviewMode( void );
void CL_PingServers_f( void );
void CL_SignonReply( void );
void CL_ClearState( void );
@@ -781,8 +774,6 @@ void CL_CheckStartupDemos( void );
void CL_WriteDemoJumpTime( void );
void CL_CloseDemoHeader( void );
void CL_DemoCompleted( void );
void CL_StopPlayback( void );
void CL_StopRecord( void );
void CL_PlayDemo_f( void );
void CL_TimeDemo_f( void );
void CL_StartDemos_f( void );
@@ -790,6 +781,7 @@ void CL_Demos_f( void );
void CL_DeleteDemo_f( void );
void CL_Record_f( void );
void CL_Stop_f( void );
int CL_GetDemoComment( const char *demoname, char *comment );
//
// cl_events.c
@@ -797,12 +789,9 @@ void CL_Stop_f( void );
void CL_ParseEvent( sizebuf_t *msg );
void CL_ParseReliableEvent( sizebuf_t *msg );
void CL_SetEventIndex( const char *szEvName, int ev_index );
void CL_QueueEvent( int flags, int index, float delay, event_args_t *args );
void CL_PlaybackEvent( int flags, const edict_t *pInvoker, word eventindex, float delay, float *origin,
float *angles, float fparam1, float fparam2, int iparam1, int iparam2, int bparam1, int bparam2 );
void CL_RegisterEvent( int lastnum, const char *szEvName, pfnEventHook func );
void CL_BatchResourceRequest( qboolean initialize );
int CL_EstimateNeededResources( void );
void CL_ResetEvent( event_info_t *ei );
word CL_EventIndex( const char *name );
void CL_FireEvents( void );
@@ -811,9 +800,10 @@ void CL_FireEvents( void );
// cl_font.c
//
qboolean CL_FixedFont( cl_font_t *font );
qboolean Con_LoadFixedWidthFont( const char *fontname, cl_font_t *font, float scale, int rendermode, uint texFlags );
qboolean Con_LoadVariableWidthFont( const char *fontname, cl_font_t *font, float scale, int rendermode, uint texFlags );
qboolean Con_LoadFixedWidthFont( const char *fontname, cl_font_t *font, float scale, convar_t *rendermode, uint texFlags );
qboolean Con_LoadVariableWidthFont( const char *fontname, cl_font_t *font, float scale, convar_t *rendermode, uint texFlags );
void CL_FreeFont( cl_font_t *font );
void CL_SetFontRendermode( cl_font_t *font );
int CL_DrawCharacter( float x, float y, int number, rgba_t color, cl_font_t *font, int flags );
int CL_DrawString( float x, float y, const char *s, rgba_t color, cl_font_t *font, int flags );
void CL_DrawCharacterLen( cl_font_t *font, int number, int *width, int *height );
@@ -826,10 +816,7 @@ int CL_DrawStringf( cl_font_t *font, float x, float y, rgba_t color, int flags,
//
void CL_UnloadProgs( void );
qboolean CL_LoadProgs( const char *name );
void CL_ParseUserMessage( sizebuf_t *msg, int svc_num );
void CL_LinkUserMessage( char *pszName, const int svc_num, int iSize );
void CL_ParseFinaleCutscene( sizebuf_t *msg, int level );
void CL_ParseTextMessage( sizebuf_t *msg );
void CL_DrawHUD( int state );
void CL_InitEdicts( int maxclients );
void CL_FreeEdicts( void );
@@ -846,20 +833,17 @@ model_t *CL_LoadClientSprite( const char *filename );
model_t *CL_LoadModel( const char *modelname, int *index );
HSPRITE pfnSPR_LoadExt( const char *szPicName, uint texFlags );
void SPR_AdjustSize( float *x, float *y, float *w, float *h );
void SPR_AdjustTexCoords( float width, float height, float *s1, float *t1, float *s2, float *t2 );
int CL_GetScreenInfo( SCREENINFO *pscrinfo );
void CL_FillRGBA( int x, int y, int width, int height, int r, int g, int b, int a );
pmtrace_t *PM_CL_TraceLine( float *start, float *end, int flags, int usehull, int ignore_pe );
const char *PM_CL_TraceTexture( int ground, float *vstart, float *vend );
int PM_CL_PointContents( const float *p, int *truecontents );
void CL_GetMousePosition( int *mx, int *my ); // TODO: move to input
cl_entity_t* CL_GetViewModel( void );
physent_t *pfnGetPhysent( int idx );
struct msurface_s *pfnTraceSurface( int ground, float *vstart, float *vend );
movevars_t *pfnGetMoveVars( void );
void CL_EnableScissor( scissor_state_t *scissor, int x, int y, int width, int height );
void CL_DisableScissor( scissor_state_t *scissor );
qboolean CL_Scissor( const scissor_state_t *scissor, float *x, float *y, float *width, float *height, float *u0, float *v0, float *u1, float *v1 );
struct cl_entity_s *CL_GetEntityByIndex( int index );
_inline cl_entity_t *CL_EDICT_NUM( int n )
{
@@ -911,6 +895,11 @@ qboolean CL_RequestMissingResources( void );
void CL_RegisterResources ( sizebuf_t *msg );
void CL_ParseViewEntity( sizebuf_t *msg );
void CL_ParseServerTime( sizebuf_t *msg );
void CL_ParseUserMessage( sizebuf_t *msg, int svc_num );
void CL_ParseFinaleCutscene( sizebuf_t *msg, int level );
void CL_ParseTextMessage( sizebuf_t *msg );
void CL_BatchResourceRequest( qboolean initialize );
int CL_EstimateNeededResources( void );
//
// cl_parse_48.c
@@ -924,8 +913,6 @@ void CL_LegacyPrecache_f( void );
void SCR_VidInit( void );
void SCR_TileClear( void );
void SCR_DirtyScreen( void );
void SCR_AddDirtyPoint( int x, int y );
void SCR_InstallParticlePalette( void );
void SCR_EndLoadingPlaque( void );
void SCR_RegisterTextures( void );
void SCR_LoadCreditsFont( void );
@@ -961,20 +948,17 @@ void CL_InitClientMove( void );
void CL_PredictMovement( qboolean repredicting );
void CL_CheckPredictionError( void );
qboolean CL_IsPredicted( void );
int CL_TruePointContents( const vec3_t p );
int CL_WaterEntity( const float *rgflPos );
cl_entity_t *CL_GetWaterEntity( const float *rgflPos );
int CL_TestLine( const vec3_t start, const vec3_t end, int flags );
pmtrace_t *CL_VisTraceLine( vec3_t start, vec3_t end, int flags );
pmtrace_t CL_TraceLine( vec3_t start, vec3_t end, int flags );
void CL_PushTraceBounds( int hullnum, const float *mins, const float *maxs );
void CL_PopTraceBounds( void );
void CL_MoveSpectatorCamera( void );
void CL_SetLastUpdate( void );
void CL_RedoPrediction( void );
void CL_PushPMStates( void );
void CL_PopPMStates( void );
void CL_SetUpPlayerPrediction( int dopred, int bIncludeLocalClient );
void CL_SetIdealPitch( void );
//
// cl_qparse.c
@@ -991,12 +975,10 @@ qboolean CL_AddVisibleEntity( cl_entity_t *ent, int entityType );
void CL_ResetLatchedVars( cl_entity_t *ent, qboolean full_reset );
qboolean CL_GetEntitySpatialization( struct channel_s *ch );
qboolean CL_GetMovieSpatialization( struct rawchan_s *ch );
void CL_ProcessPlayerState( int playerindex, entity_state_t *state );
void CL_ComputePlayerOrigin( cl_entity_t *clent );
void CL_ProcessPacket( frame_t *frame );
void CL_MoveThirdpersonCamera( void );
qboolean CL_IsPlayerIndex( int idx );
void CL_SetIdealPitch( void );
void CL_EmitEntities( void );
//
@@ -1020,6 +1002,7 @@ const ref_overview_t *GL_GetOverviewParms( void );
//
void R_StoreEfrags( efrag_t **ppefrag, int framecount );
void R_AddEfrags( cl_entity_t *ent );
//
// cl_tent.c
//
@@ -1030,7 +1013,6 @@ void CL_ClearEfrags( void );
void CL_TestLights( void );
void CL_FireCustomDecal( int textureIndex, int entityIndex, int modelIndex, float *pos, int flags, float scale );
void CL_DecalShoot( int textureIndex, int entityIndex, int modelIndex, float *pos, int flags );
void CL_PlayerDecal( int playerIndex, int textureIndex, int entityIndex, float *pos );
void R_FreeDeadParticles( struct particle_s **ppparticles );
void CL_AddClientResource( const char *filename, int type );
void CL_AddClientResources( void );
@@ -1052,7 +1034,6 @@ void CL_ReadPointFile_f( void );
void CL_DrawEFX( float time, qboolean fTrans );
void CL_ThinkParticle( double frametime, particle_t *p );
void CL_ReadLineFile_f( void );
void CL_RunLightStyles( void );
//
// console.c
@@ -1072,27 +1053,23 @@ int Con_UtfProcessChar( int in );
int Con_UtfProcessCharForce( int in );
int Con_UtfMoveLeft( char *str, int pos );
int Con_UtfMoveRight( char *str, int pos, int length );
void Con_DefaultColor( int r, int g, int b );
void Con_InvalidateFonts( void );
void Con_DefaultColor( int r, int g, int b, qboolean gameui );
cl_font_t *Con_GetCurFont( void );
cl_font_t *Con_GetFont( int num );
void Con_DrawCharacterLen( int number, int *width, int *height );
int Con_DrawString( int x, int y, const char *string, rgba_t setColor ); // legacy, use cl_font.c
void GAME_EXPORT Con_DrawStringLen( const char *pText, int *length, int *height ); // legacy, use cl_font.c
void Con_CharEvent( int key );
void Con_RestoreFont( void );
void Key_Console( int key );
void Key_Message( int key );
void Con_FastClose( void );
void Con_Bottom( void );
void Con_Top( void );
void Con_PageDown( int lines );
void Con_PageUp( int lines );
//
// s_main.c
//
void S_StreamRawSamples( int samples, int rate, int width, int channels, const byte *data );
void S_StreamAviSamples( void *Avi, int entnum, float fvol, float attn, float synctime );
void S_StartBackgroundTrack( const char *intro, const char *loop, int position, qboolean fullpath );
void S_StopBackgroundTrack( void );
@@ -1139,11 +1116,6 @@ void UI_ConnectionProgress_Precache( void );
void UI_ConnectionProgress_Connect( const char *server );
void UI_ConnectionProgress_ChangeLevel( void );
void UI_ConnectionProgress_ParseServerInfo( const char *server );
void pfnPIC_Set( HIMAGE hPic, int r, int g, int b, int a );
void pfnPIC_Draw( int x, int y, int width, int height, const wrect_t *prc );
void pfnPIC_DrawTrans( int x, int y, int width, int height, const wrect_t *prc );
void pfnPIC_DrawHoles( int x, int y, int width, int height, const wrect_t *prc );
void pfnPIC_DrawAdditive( int x, int y, int width, int height, const wrect_t *prc );
//
// cl_mobile.c

View File

@@ -25,6 +25,7 @@ GNU General Public License for more details.
static CVAR_DEFINE_AUTO( scr_conspeed, "600", FCVAR_ARCHIVE, "console moving speed" );
static CVAR_DEFINE_AUTO( con_notifytime, "3", FCVAR_ARCHIVE, "notify time to live" );
CVAR_DEFINE_AUTO( con_fontsize, "1", FCVAR_ARCHIVE, "console font number (0, 1 or 2)" );
static CVAR_DEFINE_AUTO( con_fontrender, "2", FCVAR_ARCHIVE, "console font render mode (0: additive, 1: holes, 2: trans)" );
static CVAR_DEFINE_AUTO( con_charset, "cp1251", FCVAR_ARCHIVE, "console font charset (only cp1251 supported now)" );
static CVAR_DEFINE_AUTO( con_fontscale, "1.0", FCVAR_ARCHIVE, "scale font texture" );
static CVAR_DEFINE_AUTO( con_fontnum, "-1", FCVAR_ARCHIVE, "console font number (0, 1 or 2), -1 for autoselect" );
@@ -140,8 +141,9 @@ typedef struct
static console_t con;
void Con_ClearField( field_t *edit );
void Field_CharEvent( field_t *edit, int ch );
static void Con_ClearField( field_t *edit );
static void Field_CharEvent( field_t *edit, int ch );
static void Con_InvalidateFonts( void );
static void Con_LoadHistory( con_history_t *self );
static void Con_SaveHistory( con_history_t *self );
@@ -151,7 +153,7 @@ static void Con_SaveHistory( con_history_t *self );
Con_Clear_f
================
*/
void Con_Clear_f( void )
static void Con_Clear_f( void )
{
con.lines_count = 0;
con.backscroll = 0; // go to end
@@ -175,10 +177,10 @@ static void Con_SetColor( void )
switch( num )
{
case 1:
Con_DefaultColor( r, r, r );
Con_DefaultColor( r, r, r, false );
break;
case 3:
Con_DefaultColor( r, g, b );
Con_DefaultColor( r, g, b, false );
break;
default:
Cvar_DirectSet( &con_color, con_color.def_string );
@@ -206,7 +208,7 @@ void Con_ClearNotify( void )
Con_ClearTyping
================
*/
void Con_ClearTyping( void )
static void Con_ClearTyping( void )
{
Con_ClearField( &con.input );
con.input.widthInChars = con.linewidth;
@@ -219,7 +221,7 @@ void Con_ClearTyping( void )
Con_MessageMode_f
================
*/
void Con_MessageMode_f( void )
static void Con_MessageMode_f( void )
{
g_messagemode_privileged = Cmd_CurrentCommandIsPrivileged();
@@ -235,7 +237,7 @@ void Con_MessageMode_f( void )
Con_MessageMode2_f
================
*/
void Con_MessageMode2_f( void )
static void Con_MessageMode2_f( void )
{
g_messagemode_privileged = Cmd_CurrentCommandIsPrivileged();
@@ -280,7 +282,7 @@ void Con_ToggleConsole_f( void )
Con_SetTimes_f
================
*/
void Con_SetTimes_f( void )
static void Con_SetTimes_f( void )
{
int newtimes;
@@ -303,7 +305,7 @@ Notifies the console code about the current time
went backwards)
================
*/
void Con_FixTimes( void )
static void Con_FixTimes( void )
{
double diff;
int i;
@@ -324,7 +326,7 @@ Con_DeleteLine
Deletes the first line from the console history.
================
*/
void Con_DeleteLine( void )
static void Con_DeleteLine( void )
{
if( con.lines_count == 0 )
return;
@@ -339,7 +341,7 @@ Con_DeleteLastLine
Deletes the last line from the console history.
================
*/
void Con_DeleteLastLine( void )
static void Con_DeleteLastLine( void )
{
if( con.lines_count == 0 )
return;
@@ -398,7 +400,7 @@ Con_AddLine
Appends a given string as a new line to the console.
================
*/
void Con_AddLine( const char *line, int length, qboolean newline )
static void Con_AddLine( const char *line, int length, qboolean newline )
{
char *putpos;
con_lineinfo_t *p;
@@ -444,7 +446,7 @@ Con_CheckResize
If the line width has changed, reformat the buffer.
================
*/
void Con_CheckResize( void )
static void Con_CheckResize( void )
{
int charWidth = 8;
int i, width;
@@ -493,7 +495,7 @@ void Con_PageDown( int lines )
Con_Top
================
*/
void Con_Top( void )
static void Con_Top( void )
{
con.backscroll = CON_MAXLINES;
}
@@ -546,7 +548,7 @@ static void Con_LoadConsoleFont( int fontNumber, cl_font_t *font )
if( con_oldfont.value )
{
success = Con_LoadVariableWidthFont( "gfx/conchars.fnt", font, scale, kRenderTransTexture, TF_FONT|TF_NEAREST );
success = Con_LoadVariableWidthFont( "gfx/conchars.fnt", font, scale, &con_fontrender, TF_FONT|TF_NEAREST );
}
else
{
@@ -559,14 +561,14 @@ static void Con_LoadConsoleFont( int fontNumber, cl_font_t *font )
if( Q_snprintf( path, sizeof( path ),
"font%i_%s.fnt", fontNumber, Cvar_VariableString( "con_charset" )) > 0 )
{
success = Con_LoadVariableWidthFont( path, font, scale, kRenderTransTexture, TF_FONT|TF_NEAREST );
success = Con_LoadVariableWidthFont( path, font, scale, &con_fontrender, TF_FONT|TF_NEAREST );
}
}
if( !success )
{
Q_snprintf( path, sizeof( path ), "fonts/font%i", fontNumber );
success = Con_LoadVariableWidthFont( path, font, scale, kRenderTransTexture, TF_FONT|TF_NEAREST );
success = Con_LoadVariableWidthFont( path, font, scale, &con_fontrender, TF_FONT|TF_NEAREST );
}
}
@@ -574,7 +576,7 @@ static void Con_LoadConsoleFont( int fontNumber, cl_font_t *font )
{
// quake fixed font as fallback
// keep source to print directly into conback image
if( !Con_LoadFixedWidthFont( "gfx/conchars", font, scale, kRenderTransTexture, TF_FONT|TF_KEEP_SOURCE ))
if( !Con_LoadFixedWidthFont( "gfx/conchars", font, scale, &con_fontrender, TF_FONT|TF_NEAREST|TF_KEEP_SOURCE ))
Con_DPrintf( S_ERROR "failed to load console font\n" );
}
}
@@ -839,6 +841,7 @@ void Con_Init( void )
Cvar_RegisterVariable( &con_fontsize );
Cvar_RegisterVariable( &con_charset );
Cvar_RegisterVariable( &con_fontscale );
Cvar_RegisterVariable( &con_fontrender );
Cvar_RegisterVariable( &con_fontnum );
Cvar_RegisterVariable( &con_color );
Cvar_RegisterVariable( &scr_drawversion );
@@ -1120,7 +1123,7 @@ EDIT FIELDS
Con_ClearField
================
*/
void Con_ClearField( field_t *edit )
static void Con_ClearField( field_t *edit )
{
memset( edit->buffer, 0, MAX_STRING );
edit->cursor = 0;
@@ -1143,7 +1146,7 @@ static void Field_Set( field_t *f, const char *string )
Field_Paste
================
*/
void Field_Paste( field_t *edit )
static void Field_Paste( field_t *edit )
{
char *cbd;
int i, pasteLen;
@@ -1179,7 +1182,7 @@ in-game talk, and menu fields
Key events are used for non-printable characters, others are gotten from char events.
=================
*/
void Field_KeyDownEvent( field_t *edit, int key )
static void Field_KeyDownEvent( field_t *edit, int key )
{
int len;
@@ -1250,7 +1253,7 @@ void Field_KeyDownEvent( field_t *edit, int key )
Field_CharEvent
==================
*/
void Field_CharEvent( field_t *edit, int ch )
static void Field_CharEvent( field_t *edit, int ch )
{
int len;
@@ -1311,7 +1314,7 @@ void Field_CharEvent( field_t *edit, int ch )
Field_DrawInputLine
==================
*/
void Field_DrawInputLine( int x, int y, field_t *edit )
static void Field_DrawInputLine( int x, int y, field_t *edit )
{
int len, cursorChar;
int drawLen;
@@ -1683,7 +1686,7 @@ Con_DrawInput
The input line scrolls horizontally if typing goes beyond the right edge
================
*/
void Con_DrawInput( int lines )
static void Con_DrawInput( int lines )
{
int y;
@@ -1703,7 +1706,7 @@ Con_DrawDebugLines
Custom debug messages
================
*/
int Con_DrawDebugLines( void )
static int Con_DrawDebugLines( void )
{
notify_t *notify = con.notify;
int i, count = 0;
@@ -1788,7 +1791,7 @@ Con_DrawNotify
Draws the last few lines of output transparently over the game top
================
*/
void Con_DrawNotify( void )
static void Con_DrawNotify( void )
{
double time = cl.time;
int i, x, y = 0;
@@ -1840,7 +1843,7 @@ If alpha is 0, the line is not drawn, but still wrapped and its height
returned.
================
*/
int Con_DrawConsoleLine( int y, int lineno )
static int Con_DrawConsoleLine( int y, int lineno )
{
con_lineinfo_t *li = &CON_LINES( lineno );
@@ -1895,7 +1898,7 @@ Con_DrawConsole
Draws the console with the solid background
================
*/
void Con_DrawSolidConsole( int lines )
static void Con_DrawSolidConsole( int lines )
{
int i, x, y;
float fraction;
@@ -2184,6 +2187,8 @@ INTERNAL RESOURCE
*/
void Con_VidInit( void )
{
const uint flags = TF_IMAGE|TF_ALLOW_NEAREST;
if( !con.historyLoaded )
{
Con_LoadHistory( &con.history );
@@ -2203,28 +2208,28 @@ void Con_VidInit( void )
{
// trying to load truecolor image first
if( FS_FileExists( "gfx/shell/conback.bmp", false ) || FS_FileExists( "gfx/shell/conback.tga", false ))
con.background = ref.dllFuncs.GL_LoadTexture( "gfx/shell/conback", NULL, 0, TF_IMAGE );
con.background = ref.dllFuncs.GL_LoadTexture( "gfx/shell/conback", NULL, 0, flags );
if( !con.background )
{
if( FS_FileExists( "cached/conback640", false ))
con.background = ref.dllFuncs.GL_LoadTexture( "cached/conback640", NULL, 0, TF_IMAGE );
con.background = ref.dllFuncs.GL_LoadTexture( "cached/conback640", NULL, 0, flags );
else if( FS_FileExists( "cached/conback", false ))
con.background = ref.dllFuncs.GL_LoadTexture( "cached/conback", NULL, 0, TF_IMAGE );
con.background = ref.dllFuncs.GL_LoadTexture( "cached/conback", NULL, 0, flags );
}
}
else
{
// trying to load truecolor image first
if( FS_FileExists( "gfx/shell/loading.bmp", false ) || FS_FileExists( "gfx/shell/loading.tga", false ))
con.background = ref.dllFuncs.GL_LoadTexture( "gfx/shell/loading", NULL, 0, TF_IMAGE );
con.background = ref.dllFuncs.GL_LoadTexture( "gfx/shell/loading", NULL, 0, flags );
if( !con.background )
{
if( FS_FileExists( "cached/loading640", false ))
con.background = ref.dllFuncs.GL_LoadTexture( "cached/loading640", NULL, 0, TF_IMAGE );
con.background = ref.dllFuncs.GL_LoadTexture( "cached/loading640", NULL, 0, flags );
else if( FS_FileExists( "cached/loading", false ))
con.background = ref.dllFuncs.GL_LoadTexture( "cached/loading", NULL, 0, TF_IMAGE );
con.background = ref.dllFuncs.GL_LoadTexture( "cached/loading", NULL, 0, flags );
}
}
@@ -2310,11 +2315,20 @@ Con_DefaultColor
called from MainUI
=========
*/
void GAME_EXPORT Con_DefaultColor( int r, int g, int b )
void Con_DefaultColor( int r, int g, int b, qboolean gameui )
{
r = bound( 0, r, 255 );
g = bound( 0, g, 255 );
b = bound( 0, b, 255 );
// gameui wants to override console color... check if it's not default
if( gameui && ( g_color_table[7][0] != r || g_color_table[7][1] != g || g_color_table[7][2] != b ))
{
// yes, different from default orange, disable con_color
SetBits( con_color.flags, FCVAR_READ_ONLY );
ClearBits( con_color.flags, FCVAR_CHANGED );
}
MakeRGBA( g_color_table[7], r, g, b, 255 );
}

View File

@@ -21,6 +21,7 @@ GNU General Public License for more details.
//-----------------------------------------------------------------------------
// Gamma conversion support
//-----------------------------------------------------------------------------
static qboolean gamma_rebuilt;
static byte texgammatable[256];
static uint lightgammatable[1024];
static uint lineargammatable[1024];
@@ -82,9 +83,6 @@ static void BuildGammaTable( const float gamma, const float brightness, const fl
static void V_ValidateGammaCvars( void )
{
if( Host_IsLocalGame( ))
return;
if( v_gamma.value < 1.8f )
Cvar_DirectSet( &v_gamma, "1.8" );
else if( v_gamma.value > 3.0f )
@@ -102,14 +100,13 @@ static void V_ValidateGammaCvars( void )
if( v_brightness.value < 0.0f )
Cvar_DirectSet( &v_brightness, "0" );
else if( v_brightness.value > 2.0f )
Cvar_DirectSet( &v_brightness, "2" );
else if( v_brightness.value > 3.0f )
Cvar_DirectSet( &v_brightness, "3" );
}
void V_CheckGamma( void )
{
static qboolean dirty = false;
qboolean notify_refdll = false;
// because these cvars were defined as archive
// but wasn't doing anything useful
@@ -135,20 +132,33 @@ void V_CheckGamma( void )
V_ValidateGammaCvars();
dirty = false;
gamma_rebuilt = true;
BuildGammaTable( v_gamma.value, v_brightness.value, v_texgamma.value, v_lightgamma.value );
// force refdll to recalculate lightmaps
notify_refdll = true;
if( ref.initialized )
ref.dllFuncs.R_GammaChanged( false );
}
}
// unfortunately, recalculating textures isn't possible yet
void V_CheckGammaEnd( void )
{
// don't reset changed flag if it was set during frame
// keep it for next frame
if( !gamma_rebuilt )
return;
gamma_rebuilt = false;
// keep the flags until the end of frame so client.dll will catch these changes
if( FBitSet( v_texgamma.flags|v_lightgamma.flags|v_brightness.flags|v_gamma.flags, FCVAR_CHANGED ))
{
ClearBits( v_texgamma.flags, FCVAR_CHANGED );
ClearBits( v_lightgamma.flags, FCVAR_CHANGED );
ClearBits( v_brightness.flags, FCVAR_CHANGED );
ClearBits( v_gamma.flags, FCVAR_CHANGED );
}
if( notify_refdll && ref.initialized )
ref.dllFuncs.R_GammaChanged( false );
}
void V_Init( void )

View File

@@ -252,7 +252,7 @@ Touch_DumpConfig
Dump config to file
=================
*/
qboolean Touch_DumpConfig( const char *name, const char *profilename )
static qboolean Touch_DumpConfig( const char *name, const char *profilename )
{
file_t *f;
touch_button_t *button;

View File

@@ -107,7 +107,7 @@ void IN_LockInputDevices( qboolean lock )
IN_StartupMouse
===========
*/
void IN_StartupMouse( void )
static void IN_StartupMouse( void )
{
Cvar_RegisterVariable( &m_ignore );
@@ -206,7 +206,7 @@ void IN_ToggleClientMouse( int newstate, int oldstate )
}
}
void IN_CheckMouseState( qboolean active )
static void IN_CheckMouseState( qboolean active )
{
static qboolean s_bRawInput, s_bMouseGrab;
@@ -313,7 +313,7 @@ void IN_DeactivateMouse( void )
IN_MouseMove
================
*/
void IN_MouseMove( void )
static void IN_MouseMove( void )
{
int x, y;
@@ -588,7 +588,7 @@ void IN_EngineAppendMove( float frametime, void *cmd1, qboolean active )
}
}
void IN_Commands( void )
static void IN_Commands( void )
{
#if XASH_USE_EVDEV
IN_EvdevFrame();

View File

@@ -332,7 +332,7 @@ int Key_GetKey( const char *pBinding )
Key_Unbind_f
===================
*/
void Key_Unbind_f( void )
static void Key_Unbind_f( void )
{
int b;
@@ -358,7 +358,7 @@ void Key_Unbind_f( void )
Key_Unbindall_f
===================
*/
void Key_Unbindall_f( void )
static void Key_Unbindall_f( void )
{
int i;
@@ -378,7 +378,7 @@ void Key_Unbindall_f( void )
Key_Reset_f
===================
*/
void Key_Reset_f( void )
static void Key_Reset_f( void )
{
keyname_t *kn;
int i;
@@ -400,7 +400,7 @@ void Key_Reset_f( void )
Key_Bind_f
===================
*/
void Key_Bind_f( void )
static void Key_Bind_f( void )
{
char cmd[1024];
int i, c, b;
@@ -473,7 +473,7 @@ Key_Bindlist_f
============
*/
void Key_Bindlist_f( void )
static void Key_Bindlist_f( void )
{
int i;
@@ -523,7 +523,7 @@ void Key_Init( void )
Key_AddKeyCommands
===================
*/
void Key_AddKeyCommands( int key, const char *kb, qboolean down )
static void Key_AddKeyCommands( int key, const char *kb, qboolean down )
{
char button[1024];
char *buttonPtr;

View File

@@ -109,6 +109,12 @@ static void *pfnMod_Extradata( int type, model_t *m )
return NULL;
}
static void CL_ExtraUpdate( void )
{
clgame.dllFuncs.IN_Accumulate();
S_ExtraUpdate();
}
static void pfnCL_GetScreenInfo( int *width, int *height ) // clgame.scrInfo, ptrs may be NULL
{
if( width ) *width = clgame.scrInfo.iWidth;
@@ -605,6 +611,7 @@ qboolean R_Init( void )
// cvars that are expected to exist by client.dll
// refdll should just get pointer to them
Cvar_Get( "r_lighting_modulate", "0.6", FCVAR_ARCHIVE, "compatibility cvar, does nothing" );
Cvar_Get( "r_drawentities", "1", FCVAR_CHEAT, "render entities" );
Cvar_Get( "cl_himodels", "1", FCVAR_ARCHIVE, "draw high-resolution player models in multiplayer" );

View File

@@ -91,7 +91,7 @@ void S_FadeClientVolume( float fadePercent, float fadeOutSeconds, float holdTime
S_IsClient
=================
*/
qboolean S_IsClient( int entnum )
static qboolean S_IsClient( int entnum )
{
return ( entnum == s_listener.entnum );
}
@@ -124,7 +124,7 @@ void S_FreeChannel( channel_t *ch )
S_UpdateSoundFade
=================
*/
void S_UpdateSoundFade( void )
static void S_UpdateSoundFade( void )
{
float f, totaltime, elapsed;
@@ -184,7 +184,7 @@ override any other sound playing on the same channel (see code comments below fo
exceptions).
=================
*/
qboolean SND_FStreamIsPlaying( sfx_t *sfx )
static qboolean SND_FStreamIsPlaying( sfx_t *sfx )
{
int ch_idx;
@@ -399,7 +399,7 @@ returns TRUE if sound was altered,
returns FALSE if sound was not found (sound is not playing)
=================
*/
int S_AlterChannel( int entnum, int channel, sfx_t *sfx, int vol, int pitch, int flags )
static int S_AlterChannel( int entnum, int channel, sfx_t *sfx, int vol, int pitch, int flags )
{
channel_t *ch;
int i;
@@ -457,7 +457,7 @@ int S_AlterChannel( int entnum, int channel, sfx_t *sfx, int vol, int pitch, int
S_SpatializeChannel
=================
*/
void S_SpatializeChannel( int *left_vol, int *right_vol, int master_vol, float gain, float dot, float dist )
static void S_SpatializeChannel( int *left_vol, int *right_vol, int master_vol, float gain, float dot, float dist )
{
float lscale, rscale, scale;
@@ -480,7 +480,7 @@ void S_SpatializeChannel( int *left_vol, int *right_vol, int master_vol, float g
SND_Spatialize
=================
*/
void SND_Spatialize( channel_t *ch )
static void SND_Spatialize( channel_t *ch )
{
vec3_t source_vec;
float dist, dot, gain = 1.0f;
@@ -953,7 +953,7 @@ int S_GetCurrentDynamicSounds( soundlist_t *pout, int size )
S_InitAmbientChannels
===================
*/
void S_InitAmbientChannels( void )
static void S_InitAmbientChannels( void )
{
int ambient_channel;
channel_t *chan;
@@ -975,7 +975,7 @@ void S_InitAmbientChannels( void )
S_UpdateAmbientSounds
===================
*/
void S_UpdateAmbientSounds( void )
static void S_UpdateAmbientSounds( void )
{
mleaf_t *leaf;
float vol;
@@ -1407,7 +1407,7 @@ static void S_FreeRawChannels( void )
S_ClearBuffer
==================
*/
void S_ClearBuffer( void )
static void S_ClearBuffer( void )
{
S_ClearRawChannels();
@@ -1506,7 +1506,7 @@ static int S_GetSoundtime( void )
}
//=============================================================================
void S_UpdateChannels( void )
static void S_UpdateChannels( void )
{
uint endtime;
int samps;
@@ -1695,7 +1695,7 @@ console functions
===============================================================================
*/
void S_Play_f( void )
static void S_Play_f( void )
{
if( Cmd_Argc() == 1 )
{
@@ -1706,7 +1706,7 @@ void S_Play_f( void )
S_StartLocalSound( Cmd_Argv( 1 ), VOL_NORM, false );
}
void S_Play2_f( void )
static void S_Play2_f( void )
{
int i = 1;
@@ -1723,7 +1723,7 @@ void S_Play2_f( void )
}
}
void S_PlayVol_f( void )
static void S_PlayVol_f( void )
{
if( Cmd_Argc() == 1 )
{
@@ -1749,7 +1749,7 @@ static void S_Say( const char *name, qboolean reliable )
S_StartLocalSound( sentence, 1.0f, reliable );
}
void S_Say_f( void )
static void S_Say_f( void )
{
if( Cmd_Argc() == 1 )
{
@@ -1760,7 +1760,7 @@ void S_Say_f( void )
S_Say( Cmd_Argv( 1 ), false );
}
void S_SayReliable_f( void )
static void S_SayReliable_f( void )
{
if( Cmd_Argc() == 1 )
{
@@ -1776,7 +1776,7 @@ void S_SayReliable_f( void )
S_Music_f
=================
*/
void S_Music_f( void )
static void S_Music_f( void )
{
int c = Cmd_Argc();
@@ -1840,7 +1840,7 @@ void S_Music_f( void )
S_StopSound_f
=================
*/
void S_StopSound_f( void )
static void S_StopSound_f( void )
{
S_StopAllSounds( true );
}
@@ -1850,7 +1850,7 @@ void S_StopSound_f( void )
S_SoundFade_f
=================
*/
void S_SoundFade_f( void )
static void S_SoundFade_f( void )
{
int c = Cmd_Argc();
float fadeTime = 5.0f;
@@ -1884,7 +1884,7 @@ void S_SoundInfo_f( void )
S_VoiceRecordStart_f
=================
*/
void S_VoiceRecordStart_f( void )
static void S_VoiceRecordStart_f( void )
{
if( cls.state != ca_active || cls.legacymode )
return;
@@ -1897,7 +1897,7 @@ void S_VoiceRecordStart_f( void )
S_VoiceRecordStop_f
=================
*/
void S_VoiceRecordStop_f( void )
static void S_VoiceRecordStop_f( void )
{
if( cls.state != ca_active || !Voice_IsRecording() )
return;

View File

@@ -58,7 +58,7 @@ S_TransferPaintBuffer
===================
*/
void S_TransferPaintBuffer( int endtime )
static void S_TransferPaintBuffer( int endtime )
{
int *snd_p, snd_linear_count;
int lpos, lpaintedtime;
@@ -201,7 +201,7 @@ CHANNEL MIXING
===============================================================================
*/
void S_PaintMonoFrom8( portable_samplepair_t *pbuf, int *volume, byte *pData, int outCount )
static void S_PaintMonoFrom8( portable_samplepair_t *pbuf, int *volume, byte *pData, int outCount )
{
int *lscale, *rscale;
int i, data;
@@ -217,7 +217,7 @@ void S_PaintMonoFrom8( portable_samplepair_t *pbuf, int *volume, byte *pData, in
}
}
void S_PaintStereoFrom8( portable_samplepair_t *pbuf, int *volume, byte *pData, int outCount )
static void S_PaintStereoFrom8( portable_samplepair_t *pbuf, int *volume, byte *pData, int outCount )
{
int *lscale, *rscale;
uint left, right;
@@ -237,7 +237,7 @@ void S_PaintStereoFrom8( portable_samplepair_t *pbuf, int *volume, byte *pData,
}
}
void S_PaintMonoFrom16( portable_samplepair_t *pbuf, int *volume, short *pData, int outCount )
static void S_PaintMonoFrom16( portable_samplepair_t *pbuf, int *volume, short *pData, int outCount )
{
int left, right;
int i, data;
@@ -252,7 +252,7 @@ void S_PaintMonoFrom16( portable_samplepair_t *pbuf, int *volume, short *pData,
}
}
void S_PaintStereoFrom16( portable_samplepair_t *pbuf, int *volume, short *pData, int outCount )
static void S_PaintStereoFrom16( portable_samplepair_t *pbuf, int *volume, short *pData, int outCount )
{
uint *data;
int left, right;
@@ -273,11 +273,11 @@ void S_PaintStereoFrom16( portable_samplepair_t *pbuf, int *volume, short *pData
}
}
void S_Mix8MonoTimeCompress( portable_samplepair_t *pbuf, int *volume, byte *pData, int inputOffset, uint rateScale, int outCount, int timecompress )
static void S_Mix8MonoTimeCompress( portable_samplepair_t *pbuf, int *volume, byte *pData, int inputOffset, uint rateScale, int outCount, int timecompress )
{
}
void S_Mix8Mono( portable_samplepair_t *pbuf, int *volume, byte *pData, int inputOffset, uint rateScale, int outCount, int timecompress )
static void S_Mix8Mono( portable_samplepair_t *pbuf, int *volume, byte *pData, int inputOffset, uint rateScale, int outCount, int timecompress )
{
int i, sampleIndex = 0;
uint sampleFrac = inputOffset;
@@ -309,7 +309,7 @@ void S_Mix8Mono( portable_samplepair_t *pbuf, int *volume, byte *pData, int inpu
}
}
void S_Mix8Stereo( portable_samplepair_t *pbuf, int *volume, byte *pData, int inputOffset, uint rateScale, int outCount )
static void S_Mix8Stereo( portable_samplepair_t *pbuf, int *volume, byte *pData, int inputOffset, uint rateScale, int outCount )
{
int i, sampleIndex = 0;
uint sampleFrac = inputOffset;
@@ -335,7 +335,7 @@ void S_Mix8Stereo( portable_samplepair_t *pbuf, int *volume, byte *pData, int in
}
}
void S_Mix16Mono( portable_samplepair_t *pbuf, int *volume, short *pData, int inputOffset, uint rateScale, int outCount )
static void S_Mix16Mono( portable_samplepair_t *pbuf, int *volume, short *pData, int inputOffset, uint rateScale, int outCount )
{
int i, sampleIndex = 0;
uint sampleFrac = inputOffset;
@@ -357,7 +357,7 @@ void S_Mix16Mono( portable_samplepair_t *pbuf, int *volume, short *pData, int in
}
}
void S_Mix16Stereo( portable_samplepair_t *pbuf, int *volume, short *pData, int inputOffset, uint rateScale, int outCount )
static void S_Mix16Stereo( portable_samplepair_t *pbuf, int *volume, short *pData, int inputOffset, uint rateScale, int outCount )
{
int i, sampleIndex = 0;
uint sampleFrac = inputOffset;
@@ -379,7 +379,7 @@ void S_Mix16Stereo( portable_samplepair_t *pbuf, int *volume, short *pData, int
}
}
void S_MixChannel( channel_t *pChannel, void *pData, int outputOffset, int inputOffset, uint fracRate, int outCount, int timecompress )
static void S_MixChannel( channel_t *pChannel, void *pData, int outputOffset, int inputOffset, uint fracRate, int outCount, int timecompress )
{
int pvol[CCHANVOLUMES];
paintbuffer_t *ppaint = MIX_GetCurrentPaintbufferPtr();
@@ -496,7 +496,7 @@ int S_MixDataToDevice( channel_t *pChannel, int sampleCount, int outRate, int ou
return outOffset - startingOffset;
}
qboolean S_ShouldContinueMixing( channel_t *ch )
static qboolean S_ShouldContinueMixing( channel_t *ch )
{
if( ch->isSentence )
{
@@ -517,7 +517,7 @@ qboolean S_ShouldContinueMixing( channel_t *ch )
// this routine will fill the paintbuffer to endtime. Otherwise, fewer samples are mixed.
// if( endtime - paintedtime ) is not aligned on boundaries of 4,
// we'll miss data if outputRate < SOUND_DMA_SPEED!
void MIX_MixChannelsToPaintbuffer( int endtime, int rate, int outputRate )
static void MIX_MixChannelsToPaintbuffer( int endtime, int rate, int outputRate )
{
channel_t *ch;
wavdata_t *pSource;
@@ -647,7 +647,7 @@ _inline portable_samplepair_t *S_GetNextpFilter( int i, portable_samplepair_t *p
// if NULL then perform no filtering.
// count: how many samples to upsample. will become count*2 samples in buffer, in place.
void S_Interpolate2xCubic( portable_samplepair_t *pbuffer, portable_samplepair_t *pfiltermem, int cfltmem, int count )
static void S_Interpolate2xCubic( portable_samplepair_t *pbuffer, portable_samplepair_t *pfiltermem, int cfltmem, int count )
{
// implement cubic interpolation on 2x upsampled buffer. Effectively delays buffer contents by 2 samples.
@@ -740,7 +740,7 @@ void S_Interpolate2xCubic( portable_samplepair_t *pbuffer, portable_samplepair_t
// prevfilter: filter memory. NOTE: this must match the filtertype ie: filterlinear[] for FILTERTYPE_LINEAR
// if NULL then perform no filtering.
// count: how many samples to upsample. will become count*2 samples in buffer, in place.
void S_Interpolate2xLinear( portable_samplepair_t *pbuffer, portable_samplepair_t *pfiltermem, int cfltmem, int count )
static void S_Interpolate2xLinear( portable_samplepair_t *pbuffer, portable_samplepair_t *pfiltermem, int cfltmem, int count )
{
int i, upCount = count<<1;
@@ -769,7 +769,7 @@ void S_Interpolate2xLinear( portable_samplepair_t *pbuffer, portable_samplepair_
// if NULL then perform no filtering.
// cfltmem: max number of sample pairs filter can use
// filtertype: FILTERTYPE_NONE, _LINEAR, _CUBIC etc. Must match prevfilter.
void S_MixBufferUpsample2x( int count, portable_samplepair_t *pbuffer, portable_samplepair_t *pfiltermem, int cfltmem, int filtertype )
static void S_MixBufferUpsample2x( int count, portable_samplepair_t *pbuffer, portable_samplepair_t *pfiltermem, int cfltmem, int filtertype )
{
int upCount = count<<1;
int i, j;
@@ -822,7 +822,7 @@ void MIX_ClearAllPaintBuffers( int SampleCount, qboolean clearFilters )
// mixes pbuf1 + pbuf2 into pbuf3, count samples
// fgain is output gain 0-1.0
// NOTE: pbuf3 may equal pbuf1 or pbuf2!
void MIX_MixPaintbuffers( int ibuf1, int ibuf2, int ibuf3, int count, float fgain )
static void MIX_MixPaintbuffers( int ibuf1, int ibuf2, int ibuf3, int count, float fgain )
{
portable_samplepair_t *pbuf1, *pbuf2, *pbuf3;
int i, gain;
@@ -855,7 +855,7 @@ void MIX_MixPaintbuffers( int ibuf1, int ibuf2, int ibuf3, int count, float fgai
}
}
void MIX_CompressPaintbuffer( int ipaint, int count )
static void MIX_CompressPaintbuffer( int ipaint, int count )
{
portable_samplepair_t *pbuf;
paintbuffer_t *ppaint;
@@ -871,7 +871,7 @@ void MIX_CompressPaintbuffer( int ipaint, int count )
}
}
void S_MixUpsample( int sampleCount, int filtertype )
static void S_MixUpsample( int sampleCount, int filtertype )
{
paintbuffer_t *ppaint = MIX_GetCurrentPaintbufferPtr();
int ifilter = ppaint->ifilter;
@@ -884,7 +884,7 @@ void S_MixUpsample( int sampleCount, int filtertype )
ppaint->ifilter++;
}
void MIX_MixRawSamplesBuffer( int end )
static void MIX_MixRawSamplesBuffer( int end )
{
portable_samplepair_t *pbuf, *roombuf, *streambuf;
uint i, j, stop;
@@ -928,7 +928,7 @@ void MIX_MixRawSamplesBuffer( int end )
// IROOMBUFFER, IFACINGBUFFER, IFACINGAWAY
// dsp fx are then applied to these buffers by the caller.
// caller also remixes all into final IPAINTBUFFER output.
void MIX_UpsampleAllPaintbuffers( int end, int count )
static void MIX_UpsampleAllPaintbuffers( int end, int count )
{
// 11khz sounds are mixed into 3 buffers based on distance from listener, and facing direction
// These buffers are facing, facingaway, room

View File

@@ -428,6 +428,9 @@ void Voice_Disconnect( void )
voice.players_status[i].talking_ack = false;
}
}
VoiceCapture_Shutdown();
voice.device_opened = false;
}
/*
@@ -588,48 +591,53 @@ Voice_Init
Initialize the voice subsystem
=========================
*/
qboolean Voice_Init( const char *pszCodecName, int quality )
qboolean Voice_Init( const char *pszCodecName, int quality, qboolean preinit )
{
if( !voice_enable.value )
return false;
if( Q_strcmp( pszCodecName, VOICE_OPUS_CUSTOM_CODEC ))
{
Con_Printf( S_ERROR "Server requested unsupported codec: %s\n", pszCodecName );
return false;
}
// reinitialize only if codec parameters are different
if( !Q_strcmp( voice.codec, pszCodecName ) && voice.quality == quality )
return true;
Voice_Shutdown();
voice.autogain.block_size = 128;
if( !Voice_InitOpusDecoder( ))
if( Q_strcmp( pszCodecName, voice.codec ) || voice.quality != quality )
{
// no reason to init encoder and open audio device
// if we can't hear other players
Con_Printf( S_ERROR "Voice chat disabled.\n" );
Voice_Shutdown();
return false;
if( Q_strcmp( pszCodecName, VOICE_OPUS_CUSTOM_CODEC ))
{
Con_Printf( S_ERROR "Server requested unsupported codec: %s\n", pszCodecName );
return false;
}
voice.autogain.block_size = 128;
if( !Voice_InitOpusDecoder( ))
{
// no reason to init encoder and open audio device
// if we can't hear other players
Con_Printf( S_ERROR "Voice chat disabled.\n" );
Voice_Shutdown();
return false;
}
// we can hear others players, so it's fine to fail now
voice.initialized = true;
Q_strncpy( voice.codec, pszCodecName, sizeof( voice.codec ));
if( !Voice_InitOpusEncoder( quality ))
{
Con_Printf( S_WARN "Other players will not be able to hear you.\n" );
return false;
}
voice.quality = quality;
}
// we can hear others players, so it's fine to fail now
voice.initialized = true;
Q_strncpy( voice.codec, pszCodecName, sizeof( voice.codec ));
if( !Voice_InitOpusEncoder( quality ))
if( !preinit )
{
Con_Printf( S_WARN "Other players will not be able to hear you.\n" );
return false;
voice.device_opened = VoiceCapture_Init();
if( !voice.device_opened )
Con_Printf( S_WARN "No microphone is available.\n" );
}
voice.quality = quality;
if( !VoiceCapture_Init( ))
Con_Printf( S_WARN "No microphone is available.\n" );
return true;
}

View File

@@ -53,6 +53,7 @@ typedef struct voice_state_s
qboolean initialized;
qboolean is_recording;
qboolean device_opened;
double start_time;
voice_status_t local;
@@ -92,7 +93,7 @@ extern voice_state_t voice;
void CL_AddVoiceToDatagram( void );
void Voice_RegisterCvars( void );
qboolean Voice_Init( const char *pszCodecName, int quality );
qboolean Voice_Init( const char *pszCodecName, int quality, qboolean preinit );
void Voice_Idle( double frametime );
qboolean Voice_IsRecording( void );
void Voice_RecordStop( void );

View File

@@ -52,7 +52,7 @@ CSCR_ExpectString
Return true if next token is pExpext and skip it
===================
*/
qboolean CSCR_ExpectString( parserstate_t *ps, const char *pExpect, qboolean skip, qboolean error )
static qboolean CSCR_ExpectString( parserstate_t *ps, const char *pExpect, qboolean skip, qboolean error )
{
char *tmp = COM_ParseFile( ps->buf, ps->token, sizeof( ps->token ));
@@ -75,7 +75,7 @@ CSCR_ParseType
Determine script variable type
===================
*/
cvartype_t CSCR_ParseType( parserstate_t *ps )
static cvartype_t CSCR_ParseType( parserstate_t *ps )
{
int i;
@@ -96,7 +96,7 @@ cvartype_t CSCR_ParseType( parserstate_t *ps )
CSCR_ParseSingleCvar
=========================
*/
qboolean CSCR_ParseSingleCvar( parserstate_t *ps, scrvardef_t *result )
static qboolean CSCR_ParseSingleCvar( parserstate_t *ps, scrvardef_t *result )
{
// read the name
ps->buf = COM_ParseFile( ps->buf, result->name, sizeof( result->name ));
@@ -170,7 +170,7 @@ CSCR_ParseHeader
Check version and seek to first cvar name
======================
*/
qboolean CSCR_ParseHeader( parserstate_t *ps )
static qboolean CSCR_ParseHeader( parserstate_t *ps )
{
if( !CSCR_ExpectString( ps, "VERSION", false, true ))
return false;

View File

@@ -53,7 +53,7 @@ static void Cmd_ExecuteStringWithPrivilegeCheck( const char *text, qboolean isPr
Cbuf_Init
============
*/
void Cbuf_Init( void )
static void Cbuf_Init( void )
{
cmd_text.data = cmd_text_buf;
filteredcmd_text.data = filteredcmd_text_buf;
@@ -79,7 +79,7 @@ void Cbuf_Clear( void )
Cbuf_GetSpace
============
*/
void *Cbuf_GetSpace( cmdbuf_t *buf, int length )
static void *Cbuf_GetSpace( cmdbuf_t *buf, int length )
{
void *data;
@@ -176,7 +176,7 @@ void Cbuf_InsertText( const char *text )
Cbuf_Execute
============
*/
void Cbuf_ExecuteCommandsFromBuffer( cmdbuf_t *buf, qboolean isPrivileged, int cmdsToExecute )
static void Cbuf_ExecuteCommandsFromBuffer( cmdbuf_t *buf, qboolean isPrivileged, int cmdsToExecute )
{
char *text;
char line[MAX_CMD_LINE];
@@ -356,7 +356,7 @@ hl.exe -dev 3 +map c1a0d
hl.exe -nosound -game bshift
===============
*/
void Cmd_StuffCmds_f( void )
static void Cmd_StuffCmds_f( void )
{
host.stuffcmds_pending = true;
}
@@ -370,7 +370,7 @@ next frame. This allows commands like:
bind g "cmd use rocket ; +attack ; wait ; -attack ; cmd use blaster"
============
*/
void Cmd_Wait_f( void )
static void Cmd_Wait_f( void )
{
cmd_wait = true;
}
@@ -382,7 +382,7 @@ Cmd_Echo_f
Just prints the rest of the line to the console
===============
*/
void Cmd_Echo_f( void )
static void Cmd_Echo_f( void )
{
int i;
@@ -398,7 +398,7 @@ Cmd_Alias_f
Creates a new command that executes a command string (possibly ; seperated)
===============
*/
void Cmd_Alias_f( void )
static void Cmd_Alias_f( void )
{
cmdalias_t *a;
char cmd[MAX_CMD_LINE];
@@ -529,7 +529,6 @@ typedef struct cmd_s
static int cmd_argc;
static const char *cmd_args = NULL;
static char *cmd_argv[MAX_CMD_TOKENS];
static char cmd_tokenized[MAX_CMD_BUFFER]; // will have 0 bytes inserted
static cmd_t *cmd_functions; // possible commands to execute
/*
@@ -882,7 +881,7 @@ Cmd_If_f
Compare and et condition bit if true
============
*/
void Cmd_If_f( void )
static void Cmd_If_f( void )
{
// reset bit first
cmd_condition &= ~BIT( cmd_condlevel );
@@ -943,7 +942,7 @@ Cmd_Else_f
Invert condition bit
============
*/
void Cmd_Else_f( void )
static void Cmd_Else_f( void )
{
cmd_condition ^= BIT( cmd_condlevel );
}
@@ -1179,7 +1178,7 @@ void Cmd_ForwardToServer( void )
Cmd_List_f
============
*/
void Cmd_List_f( void )
static void Cmd_List_f( void )
{
cmd_t *cmd;
int i = 0;

View File

@@ -17,15 +17,24 @@ GNU General Public License for more details.
#define COM_STRINGS_H
// default colored message headers
#define S_NOTE "^2Note:^7 "
#define S_WARN "^3Warning:^7 "
#define S_ERROR "^1Error:^7 "
#define S_USAGE "Usage: "
#define S_USAGE_INDENT " "
#define S_BLACK "^0"
#define S_RED "^1"
#define S_GREEN "^2"
#define S_YELLOW "^3"
#define S_BLUE "^4"
#define S_CYAN "^5"
#define S_MAGENTA "^6"
#define S_DEFAULT "^7"
#define S_OPENGL_NOTE "^2OpenGL Note:^7 "
#define S_OPENGL_WARN "^3OpenGL Warning:^7 "
#define S_OPENGL_ERROR "^3OpenGL Error:^7 "
#define S_NOTE S_GREEN "Note: " S_DEFAULT
#define S_WARN S_YELLOW "Warning: " S_DEFAULT
#define S_ERROR S_RED "Error: " S_DEFAULT
#define S_USAGE "Usage: "
#define S_USAGE_INDENT "\t"
#define S_OPENGL_NOTE S_GREEN "OpenGL Note: " S_DEFAULT
#define S_OPENGL_WARN S_YELLOW "OpenGL Warning: " S_DEFAULT
#define S_OPENGL_ERROR S_RED "OpenGL Error: " S_DEFAULT
// end game final default message
#define DEFAULT_ENDGAME_MESSAGE "The End"

View File

@@ -531,47 +531,6 @@ int GAME_EXPORT COM_FileSize( const char *filename )
return FS_FileSize( filename, false );
}
/*
=============
COM_AddAppDirectoryToSearchPath
=============
*/
void GAME_EXPORT COM_AddAppDirectoryToSearchPath( const char *pszBaseDir, const char *appName )
{
FS_AddGameHierarchy( pszBaseDir, FS_NOWRITE_PATH );
}
/*
===========
COM_ExpandFilename
Finds the file in the search path, copies over the name with the full path name.
This doesn't search in the pak file.
===========
*/
int GAME_EXPORT COM_ExpandFilename( const char *fileName, char *nameOutBuffer, int nameOutBufferSize )
{
char result[MAX_SYSPATH];
if( !COM_CheckString( fileName ) || !nameOutBuffer || nameOutBufferSize <= 0 )
return 0;
// filename examples:
// media\sierra.avi - D:\Xash3D\valve\media\sierra.avi
// models\barney.mdl - D:\Xash3D\bshift\models\barney.mdl
if( g_fsapi.GetFullDiskPath( result, sizeof( result ), fileName, false ))
{
// check for enough room
if( Q_strlen( result ) > nameOutBufferSize )
return 0;
Q_strncpy( nameOutBuffer, result, nameOutBufferSize );
return 1;
}
return 0;
}
/*
=============
COM_TrimSpace
@@ -734,7 +693,7 @@ COM_LoadFileForMe
byte *GAME_EXPORT COM_LoadFileForMe( const char *filename, int *pLength )
{
string name;
byte *file, *pfile;
byte *pfile;
fs_offset_t iLength;
if( !COM_CheckString( filename ))
@@ -747,21 +706,9 @@ byte *GAME_EXPORT COM_LoadFileForMe( const char *filename, int *pLength )
Q_strncpy( name, filename, sizeof( name ));
COM_FixSlashes( name );
pfile = FS_LoadFile( name, &iLength, false );
pfile = g_fsapi.LoadFileMalloc( name, &iLength, false );
if( pLength ) *pLength = (int)iLength;
if( pfile )
{
file = malloc( iLength + 1 );
if( file != NULL )
{
memcpy( file, pfile, iLength );
file[iLength] = '\0';
}
Mem_Free( pfile );
pfile = file;
}
return pfile;
}
@@ -869,18 +816,6 @@ cvar_t *GAME_EXPORT pfnCVarGetPointer( const char *szVarName )
return (cvar_t *)Cvar_FindVar( szVarName );
}
/*
=============
pfnCVarDirectSet
allow to set cvar directly
=============
*/
void GAME_EXPORT pfnCVarDirectSet( cvar_t *var, const char *szValue )
{
Cvar_DirectSet( (convar_t *)var, szValue );
}
/*
=============
COM_CompareFileTime
@@ -996,21 +931,6 @@ qboolean COM_IsSafeFileToDownload( const char *filename )
return true;
}
const char *COM_GetResourceTypeName( resourcetype_t restype )
{
switch( restype )
{
case t_decal: return "decal";
case t_eventscript: return "eventscript";
case t_generic: return "generic";
case t_model: return "model";
case t_skin: return "skin";
case t_sound: return "sound";
case t_world: return "world";
default: return "unknown";
}
}
char *_copystring( poolhandle_t mempool, const char *s, const char *filename, int fileline )
{
size_t size;

View File

@@ -388,7 +388,6 @@ void *FS_GetNativeObject( const char *obj );
//
// cmd.c
//
void Cbuf_Init( void );
void Cbuf_Clear( void );
void Cbuf_AddText( const char *text );
void Cbuf_AddTextf( const char *text, ... ) _format( 1 );
@@ -412,9 +411,6 @@ void Cmd_RemoveCommand( const char *cmd_name );
qboolean Cmd_Exists( const char *cmd_name );
void Cmd_LookupCmds( void *buffer, void *ptr, setpair_t callback );
int Cmd_ListMaps( search_t *t , char *lastmapname, size_t len );
qboolean Cmd_GetMapList( const char *s, char *completedname, int length );
qboolean Cmd_GetDemoList( const char *s, char *completedname, int length );
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 );
@@ -461,13 +457,12 @@ 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 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
size_t Image_DXTGetLinearSize( int type, int width, int height, int depth );
qboolean Image_CustomPalette( void );
void Image_ClearForceFlags( void );
void Image_SetMDLPointer( byte *p );
void Image_CheckPaletteQ1( void );
/*
========================================================================
@@ -543,7 +538,6 @@ qboolean Host_IsQuakeCompatible( void );
void EXPORT Host_Shutdown( void );
int EXPORT Host_Main( int argc, char **argv, const char *progname, int bChangeGame, pfnChangeGame func );
int Host_CompareFileTime( int ft1, int ft2 );
void Host_NewInstance( const char *name, const char *finalmsg );
void Host_EndGame( qboolean abort, const char *message, ... ) _format( 2 );
void Host_AbortCurrentFrame( void ) NORETURN;
void Host_WriteServerConfig( const char *name );
@@ -556,7 +550,6 @@ void Host_ShutdownServer( void );
void Host_Error( const char *error, ... ) _format( 1 );
void Host_ValidateEngineFeatures( uint32_t features );
void Host_Frame( float time );
void Host_InitDecals( void );
void Host_Credits( void );
//
@@ -600,7 +593,6 @@ void COM_HexConvert( const char *pszInput, int nInputLength, byte *pOutput );
int COM_SaveFile( const char *filename, const void *data, int len );
byte* COM_LoadFileForMe( const char *filename, int *pLength );
qboolean COM_IsSafeFileToDownload( const char *filename );
const char *COM_GetResourceTypeName( resourcetype_t restype );
cvar_t *pfnCVarGetPointer( const char *szVarName );
int pfnDrawConsoleString( int x, int y, char *string );
void pfnDrawSetTextColor( float r, float g, float b );
@@ -608,7 +600,6 @@ void pfnDrawConsoleStringLen( const char *pText, int *length, int *height );
void *Cache_Check( poolhandle_t mempool, struct cache_user_s *c );
void COM_TrimSpace( const char *source, char *dest );
void pfnGetModelBounds( model_t *mod, float *mins, float *maxs );
void pfnCVarDirectSet( cvar_t *var, const char *szValue );
int COM_CheckParm( char *parm, char **ppnext );
void pfnGetGameDir( char *szGetGameDir );
int pfnGetModelType( model_t *mod );
@@ -650,7 +641,6 @@ void pfnResetTutorMessageDecayData( void );
//
// con_utils.c
//
qboolean Cmd_AutocompleteName( const char *source, int arg, char *buffer, size_t bufsize );
void Con_CompleteCommand( field_t *field );
void Cmd_AutoComplete( char *complete_string );
void Cmd_AutoCompleteClear( void );
@@ -706,24 +696,15 @@ void CL_LegacyUpdateInfo( void );
void CL_CharEvent( int key );
qboolean CL_DisableVisibility( void );
byte *COM_LoadFile( const char *filename, int usehunk, int *pLength );
int CL_GetDemoComment( const char *demoname, char *comment );
void COM_AddAppDirectoryToSearchPath( const char *pszBaseDir, const char *appName );
int COM_ExpandFilename( const char *fileName, char *nameOutBuffer, int nameOutBufferSize );
struct cmd_s *Cmd_GetFirstFunctionHandle( void );
struct cmd_s *Cmd_GetNextFunctionHandle( struct cmd_s *cmd );
struct cmdalias_s *Cmd_AliasGetList( void );
const char *Cmd_GetName( struct cmd_s *cmd );
void SV_StartSound( edict_t *ent, int chan, const char *sample, float vol, float attn, int flags, int pitch );
void SV_CreateDecal( sizebuf_t *msg, const float *origin, int decalIndex, int entityIndex, int modelIndex, int flags, float scale );
void Log_Printf( const char *fmt, ... ) _format( 1 );
void SV_BroadcastCommand( const char *fmt, ... ) _format( 1 );
qboolean SV_RestoreCustomDecal( struct decallist_s *entry, edict_t *pEdict, qboolean adjacent );
void SV_BroadcastPrintf( struct sv_client_s *ignore, const char *fmt, ... ) _format( 2 );
int R_CreateDecalList( struct decallist_s *pList );
void R_ClearAllDecals( void );
void CL_ClearStaticEntities( void );
qboolean S_StreamGetCurrentState( char *currentTrack, char *loopTrack, int *position );
struct cl_entity_s *CL_GetEntityByIndex( int index );
void CL_ServerCommand( qboolean reliable, const char *fmt, ... ) _format( 2 );
void CL_HudMessage( const char *pMessage );
const char *CL_MsgInfo( int cmd );
@@ -732,17 +713,14 @@ void SV_DrawOrthoTriangles( void );
double CL_GetDemoFramerate( void );
qboolean UI_CreditsActive( void );
void CL_StopPlayback( void );
void CL_ExtraUpdate( void );
int CL_GetMaxClients( void );
int SV_GetMaxClients( void );
qboolean CL_IsRecordDemo( void );
qboolean CL_IsTimeDemo( void );
qboolean CL_IsPlaybackDemo( void );
qboolean SV_Initialized( void );
qboolean CL_LoadProgs( const char *name );
void CL_ProcessFile( qboolean successfully_received, const char *filename );
int SV_GetSaveComment( const char *savename, char *comment );
qboolean SV_NewGame( const char *mapName, qboolean loadGame );
void SV_ClipPMoveToEntity( struct physent_s *pe, const vec3_t start, vec3_t mins, vec3_t maxs, const vec3_t end, struct pmtrace_s *tr );
void CL_ClipPMoveToEntity( struct physent_s *pe, const vec3_t start, vec3_t mins, vec3_t maxs, const vec3_t end, struct pmtrace_s *tr );
void SV_SysError( const char *error_string );
@@ -751,11 +729,9 @@ void SV_ExecLoadLevel( void );
void SV_ExecLoadGame( void );
void SV_ExecChangeLevel( void );
void CL_WriteMessageHistory( void );
void CL_SendCmd( void );
void CL_Disconnect( void );
void CL_ClearEdicts( void );
void CL_Crashed( void );
qboolean CL_NextDemo( void );
char *SV_Serverinfo( void );
void CL_Drop( void );
void Con_Init( void );
@@ -780,7 +756,6 @@ qboolean Info_SetValueForStarKey( char *s, const char *key, const char *value, i
qboolean Info_IsValid( const char *s );
void Info_WriteVars( file_t *f );
void Info_Print( const char *s );
void Cmd_WriteVariables( file_t *f );
int Cmd_CheckMapsList( int fRefresh );
void COM_SetRandomSeed( int lSeed );
int COM_RandomLong( int lMin, int lMax );
@@ -802,6 +777,7 @@ int COM_FileSize( const char *filename );
void COM_FreeFile( void *buffer );
int COM_CompareFileTime( const char *filename1, const char *filename2, int *iCompare );
char *va( const char *format, ... ) _format( 1 );
qboolean CRC32_MapFile( dword *crcvalue, const char *filename, qboolean multiplayer );
// soundlib shared exports
qboolean S_Init( void );
@@ -819,6 +795,7 @@ uint ScreenGammaTable( uint );
uint LinearGammaTable( uint );
void V_Init( void );
void V_CheckGamma( void );
void V_CheckGammaEnd( void );
//
// identification.c
@@ -839,6 +816,34 @@ void NET_MasterClear( void );
void NET_MasterShutdown( void );
qboolean NET_GetMaster( netadr_t from, uint *challenge, double *last_heartbeat );
//
// sounds.c
//
typedef enum soundlst_group_e
{
BouncePlayerShell = 0,
BounceWeaponShell,
BounceConcrete,
BounceGlass,
BounceMetal,
BounceFlesh,
BounceWood,
Ricochet,
Explode,
PlayerWaterEnter,
PlayerWaterExit,
EntityWaterEnter,
EntityWaterExit,
SoundList_Groups // must be last
} soundlst_group_t;
int SoundList_Count( soundlst_group_t group );
const char *SoundList_GetRandom( soundlst_group_t group );
const char *SoundList_Get( soundlst_group_t group, int idx );
void SoundList_Init( void );
void SoundList_Shutdown( void );
#ifdef REF_DLL
#error "common.h in ref_dll"
#endif

View File

@@ -184,7 +184,7 @@ Cmd_GetMapList
Prints or complete map filename
=====================================
*/
qboolean Cmd_GetMapList( const char *s, char *completedname, int length )
static qboolean Cmd_GetMapList( const char *s, char *completedname, int length )
{
search_t *t;
string matchbuf;
@@ -220,7 +220,7 @@ Cmd_GetDemoList
Prints or complete demo filename
=====================================
*/
qboolean Cmd_GetDemoList( const char *s, char *completedname, int length )
static qboolean Cmd_GetDemoList( const char *s, char *completedname, int length )
{
search_t *t;
string matchbuf;
@@ -267,7 +267,7 @@ Cmd_GetMovieList
Prints or complete movie filename
=====================================
*/
qboolean Cmd_GetMovieList( const char *s, char *completedname, int length )
static qboolean Cmd_GetMovieList( const char *s, char *completedname, int length )
{
search_t *t;
string matchbuf;
@@ -314,7 +314,7 @@ Cmd_GetMusicList
Prints or complete background track filename
=====================================
*/
qboolean Cmd_GetMusicList( const char *s, char *completedname, int length )
static qboolean Cmd_GetMusicList( const char *s, char *completedname, int length )
{
search_t *t;
string matchbuf;
@@ -362,7 +362,7 @@ Cmd_GetSavesList
Prints or complete savegame filename
=====================================
*/
qboolean Cmd_GetSavesList( const char *s, char *completedname, int length )
static qboolean Cmd_GetSavesList( const char *s, char *completedname, int length )
{
search_t *t;
string matchbuf;
@@ -409,7 +409,7 @@ Cmd_GetConfigList
Prints or complete .cfg filename
=====================================
*/
qboolean Cmd_GetConfigList( const char *s, char *completedname, int length )
static qboolean Cmd_GetConfigList( const char *s, char *completedname, int length )
{
search_t *t;
string matchbuf;
@@ -456,7 +456,7 @@ Cmd_GetSoundList
Prints or complete sound filename
=====================================
*/
qboolean Cmd_GetSoundList( const char *s, char *completedname, int length )
static qboolean Cmd_GetSoundList( const char *s, char *completedname, int length )
{
search_t *t;
string matchbuf;
@@ -508,7 +508,7 @@ Cmd_GetItemsList
Prints or complete item classname (weapons only)
=====================================
*/
qboolean Cmd_GetItemsList( const char *s, char *completedname, int length )
static qboolean Cmd_GetItemsList( const char *s, char *completedname, int length )
{
search_t *t;
string matchbuf;
@@ -555,7 +555,7 @@ Cmd_GetKeysList
Autocomplete for bind command
=====================================
*/
qboolean Cmd_GetKeysList( const char *s, char *completedname, int length )
static qboolean Cmd_GetKeysList( const char *s, char *completedname, int length )
{
size_t i, numkeys;
string keys[256];
@@ -636,7 +636,7 @@ Cmd_GetCommandsList
Autocomplete for bind command
=====================================
*/
qboolean Cmd_GetCommandsList( const char *s, char *completedname, int length )
static qboolean Cmd_GetCommandsList( const char *s, char *completedname, int length )
{
size_t i;
string matchbuf;
@@ -701,7 +701,7 @@ Cmd_GetCustomList
Prints or complete .HPK filenames
=====================================
*/
qboolean Cmd_GetCustomList( const char *s, char *completedname, int length )
static qboolean Cmd_GetCustomList( const char *s, char *completedname, int length )
{
search_t *t;
string matchbuf;
@@ -747,17 +747,13 @@ Cmd_GetGameList
Prints or complete gamedir name
=====================================
*/
qboolean Cmd_GetGamesList( const char *s, char *completedname, int length )
static qboolean Cmd_GetGamesList( const char *s, char *completedname, int length )
{
int i, numgamedirs;
string gamedirs[MAX_MODS];
string matchbuf;
int len;
// stand-alone games doesn't have cmd "game"
if( !Cmd_Exists( "game" ))
return false;
// compare gamelist with current keyword
len = Q_strlen( s );
@@ -800,7 +796,7 @@ Cmd_GetCDList
Prints or complete CD command name
=====================================
*/
qboolean Cmd_GetCDList( const char *s, char *completedname, int length )
static qboolean Cmd_GetCDList( const char *s, char *completedname, int length )
{
int i, numcdcommands;
string cdcommands[8];
@@ -854,7 +850,7 @@ qboolean Cmd_GetCDList( const char *s, char *completedname, int length )
return true;
}
qboolean Cmd_CheckMapsList_R( qboolean fRefresh, qboolean onlyingamedir )
static qboolean Cmd_CheckMapsList_R( qboolean fRefresh, qboolean onlyingamedir )
{
qboolean use_filter = false;
byte buf[MAX_SYSPATH];
@@ -1061,7 +1057,7 @@ Autocomplete filename
for various cmds
============
*/
qboolean Cmd_AutocompleteName( const char *source, int arg, char *buffer, size_t bufsize )
static qboolean Cmd_AutocompleteName( const char *source, int arg, char *buffer, size_t bufsize )
{
autocomplete_list_t *list;
@@ -1345,13 +1341,13 @@ static void Cmd_WriteHelp(const char *name, const char *unused, const char *desc
if( length == 0 ) FS_Printf( f, "%s \"%s\"\n", name, desc );
}
void Cmd_WriteOpenGLVariables( file_t *f )
static void Cmd_WriteOpenGLVariables( file_t *f )
{
Cvar_LookupVars( FCVAR_GLCONFIG, NULL, f, (setpair_t)Cmd_WriteOpenGLCvar );
}
#if !XASH_DEDICATED
void Host_FinalizeConfig( file_t *f, const char *config )
static void Host_FinalizeConfig( file_t *f, const char *config )
{
string backup, newcfg;

View File

@@ -372,9 +372,9 @@ static void Sys_Crash( int signal, siginfo_t *si, void *context)
bp = (void**)ucontext->uc_mcontext.mc_rbp;
sp = (void**)ucontext->uc_mcontext.mc_rsp;
#elif XASH_NETBSD
pc = (void*)ucontext->uc_mcontext.__gregs[REG_RIP];
bp = (void**)ucontext->uc_mcontext.__gregs[REG_RBP];
sp = (void**)ucontext->uc_mcontext.__gregs[REG_RSP];
pc = (void*)ucontext->uc_mcontext.__gregs[_REG_RIP];
bp = (void**)ucontext->uc_mcontext.__gregs[_REG_RBP];
sp = (void**)ucontext->uc_mcontext.__gregs[_REG_RSP];
#elif XASH_OPENBSD
pc = (void*)ucontext->sc_rip;
bp = (void**)ucontext->sc_rbp;

View File

@@ -195,7 +195,7 @@ Cvar_ValidateString
deal with userinfo etc
============
*/
const char *Cvar_ValidateString( convar_t *var, const char *value )
static const char *Cvar_ValidateString( convar_t *var, const char *value )
{
const char *pszValue;
static char szNew[MAX_STRING];
@@ -278,7 +278,7 @@ Cvar_UnlinkVar
unlink the variable
============
*/
int Cvar_UnlinkVar( const char *var_name, int group )
static int Cvar_UnlinkVar( const char *var_name, int group )
{
int count = 0;
convar_t **prev;
@@ -685,7 +685,7 @@ Cvar_DirectSet
way to change value for many cvars
============
*/
void Cvar_DirectSet( convar_t *var, const char *value )
void GAME_EXPORT Cvar_DirectSet( convar_t *var, const char *value )
{
const char *pszValue;
@@ -1091,7 +1091,7 @@ Cvar_Toggle_f
Toggles a cvar for easy single key binding
============
*/
void Cvar_Toggle_f( void )
static void Cvar_Toggle_f( void )
{
int v;
@@ -1114,7 +1114,7 @@ Allows setting and defining of arbitrary cvars from console, even if they
weren't declared in C code.
============
*/
void Cvar_Set_f( void )
static void Cvar_Set_f( void )
{
int i, c, l = 0, len;
char combined[MAX_CMD_TOKENS];
@@ -1147,7 +1147,7 @@ Cvar_SetGL_f
As Cvar_Set, but also flags it as glconfig
============
*/
void Cvar_SetGL_f( void )
static void Cvar_SetGL_f( void )
{
if( Cmd_Argc() != 3 )
{
@@ -1163,7 +1163,7 @@ void Cvar_SetGL_f( void )
Cvar_Reset_f
============
*/
void Cvar_Reset_f( void )
static void Cvar_Reset_f( void )
{
if( Cmd_Argc() != 2 )
{
@@ -1179,7 +1179,7 @@ void Cvar_Reset_f( void )
Cvar_List_f
============
*/
void Cvar_List_f( void )
static void Cvar_List_f( void )
{
convar_t *var;
const char *match = NULL;

View File

@@ -134,15 +134,6 @@ void Con_Init( void )
}
void R_ClearAllDecals( void )
{
}
int R_CreateDecalList( struct decallist_s *pList )
{
return 0;
}
void GAME_EXPORT S_StopSound(int entnum, int channel, const char *soundname)
{

View File

@@ -65,7 +65,7 @@ static CVAR_DEFINE( host_sleeptime, "sleeptime", "1", FCVAR_ARCHIVE|FCVAR_FILTER
static CVAR_DEFINE_AUTO( host_sleeptime_debug, "0", 0, "print sleeps between frames" );
CVAR_DEFINE( con_gamemaps, "con_mapfilter", "1", FCVAR_ARCHIVE, "when true show only maps in game folder" );
void Sys_PrintUsage( void )
static void Sys_PrintUsage( void )
{
string version_str;
const char *usage_str;
@@ -109,6 +109,7 @@ void Sys_PrintUsage( void )
O("-clockwindow <cw>", "adjust clockwindow used to ignore client commands to prevent speed hacks")
"\nGame options:\n"
O("-game <directory>", "set game directory to start engine with")
O("-dll <path> ", "override server DLL path")
#if !XASH_DEDICATED
O("-clientlib <path>", "override client DLL path")
@@ -348,7 +349,7 @@ static int Host_CalcSleep( void )
return host_sleeptime.value;
}
void Host_NewInstance( const char *name, const char *finalmsg )
static void Host_NewInstance( const char *name, const char *finalmsg )
{
if( !pChangeGame ) return;
@@ -366,7 +367,7 @@ Host_ChangeGame_f
Change game modification
=================
*/
void Host_ChangeGame_f( void )
static void Host_ChangeGame_f( void )
{
int i;
@@ -405,7 +406,7 @@ void Host_ChangeGame_f( void )
Host_Exec_f
===============
*/
void Host_Exec_f( void )
static void Host_Exec_f( void )
{
string cfgpath;
byte *f;
@@ -491,7 +492,7 @@ void Host_Exec_f( void )
Host_MemStats_f
===============
*/
void Host_MemStats_f( void )
static void Host_MemStats_f( void )
{
switch( Cmd_Argc( ))
{
@@ -509,7 +510,7 @@ void Host_MemStats_f( void )
}
}
void Host_Minimize_f( void )
static void Host_Minimize_f( void )
{
#ifdef XASH_SDL
if( host.hWnd ) SDL_MinimizeWindow( host.hWnd );
@@ -548,7 +549,7 @@ qboolean Host_IsLocalClient( void )
Host_RegisterDecal
=================
*/
qboolean Host_RegisterDecal( const char *name, int *count )
static qboolean Host_RegisterDecal( const char *name, int *count )
{
char shortname[MAX_QPATH];
int i;
@@ -582,7 +583,7 @@ qboolean Host_RegisterDecal( const char *name, int *count )
Host_InitDecals
=================
*/
void Host_InitDecals( void )
static void Host_InitDecals( void )
{
int i, num_decals = 0;
search_t *t;
@@ -613,7 +614,7 @@ Host_GetCommands
Add them exactly as if they had been typed at the console
===================
*/
void Host_GetCommands( void )
static void Host_GetCommands( void )
{
char *cmd;
@@ -631,7 +632,7 @@ Host_CalcFPS
compute actual FPS for various modes
===================
*/
double Host_CalcFPS( void )
static double Host_CalcFPS( void )
{
double fps = 0.0;
@@ -748,7 +749,7 @@ Host_FilterTime
Returns false if the time is too short to run a frame
===================
*/
qboolean Host_FilterTime( float time )
static qboolean Host_FilterTime( float time )
{
static double oldtime;
double dt;
@@ -873,7 +874,7 @@ void GAME_EXPORT Host_Error( const char *error, ... )
Host_AbortCurrentFrame();
}
void Host_Error_f( void )
static void Host_Error_f( void )
{
const char *error = Cmd_Argv( 1 );
@@ -881,7 +882,7 @@ void Host_Error_f( void )
Host_Error( "%s\n", error );
}
void Sys_Error_f( void )
static void Sys_Error_f( void )
{
const char *error = Cmd_Argv( 1 );
@@ -904,7 +905,7 @@ static void Host_Crash_f( void )
Host_Userconfigd_f
=================
*/
void Host_Userconfigd_f( void )
static void Host_Userconfigd_f( void )
{
search_t *t;
int i;
@@ -948,7 +949,7 @@ static void Host_RunTests( int stage )
Host_InitCommon
=================
*/
void Host_InitCommon( int argc, char **argv, const char *progname, qboolean bChangeGame )
static void Host_InitCommon( int argc, char **argv, const char *progname, qboolean bChangeGame )
{
char dev_level[4];
int developer = DEFAULT_DEV;
@@ -1240,7 +1241,7 @@ void Host_InitCommon( int argc, char **argv, const char *progname, qboolean bCha
Key_Init();
}
void Host_FreeCommon( void )
static void Host_FreeCommon( void )
{
Image_Shutdown();
Sound_Shutdown();
@@ -1310,6 +1311,7 @@ int EXPORT Host_Main( int argc, char **argv, const char *progname, int bChangeGa
HTTP_Init();
ID_Init();
SoundList_Init();
if( Host_IsDedicated() )
{
@@ -1412,6 +1414,7 @@ void EXPORT Host_Shutdown( void )
SV_ShutdownFilter();
CL_Shutdown();
SoundList_Shutdown();
Mod_Shutdown();
NET_Shutdown();
HTTP_Shutdown();

View File

@@ -121,7 +121,7 @@ void COM_ChangeLevel( char const *pNewLevel, char const *pLandmarkName, qboolean
GameState->newGame = false;
}
void Host_ShutdownGame( void )
static void Host_ShutdownGame( void )
{
SV_ShutdownGame();
@@ -137,7 +137,7 @@ void Host_ShutdownGame( void )
}
}
void Host_RunFrame( float time )
static void Host_RunFrame( float time )
{
// at this time, we don't need to get events from OS on dedicated
#if !XASH_DEDICATED

View File

@@ -34,7 +34,7 @@ static hash_pack_queue_t *gp_hpak_queue = NULL;
static hpak_header_t hash_pack_header;
static hpak_info_t hash_pack_info;
const char *HPAK_TypeFromIndex( int type )
static const char *HPAK_TypeFromIndex( int type )
{
switch( type )
{
@@ -94,7 +94,7 @@ void HPAK_FlushHostQueue( void )
gp_hpak_queue = NULL;
}
void HPAK_CreatePak( const char *filename, resource_t *pResource, byte *pData, file_t *fin )
static void HPAK_CreatePak( const char *filename, resource_t *pResource, byte *pData, file_t *fin )
{
int filelocation;
string pakname;
@@ -872,7 +872,7 @@ void HPAK_RemoveLump( const char *name, resource_t *pResource )
FS_Rename( save_path, read_path );
}
void HPAK_List_f( void )
static void HPAK_List_f( void )
{
int nCurrent;
hpak_header_t header;
@@ -950,7 +950,7 @@ void HPAK_List_f( void )
FS_Close( f );
}
void HPAK_Extract_f( void )
static void HPAK_Extract_f( void )
{
int nCurrent;
hpak_header_t header;
@@ -1061,7 +1061,7 @@ void HPAK_Extract_f( void )
FS_Close( f );
}
void HPAK_Remove_f( void )
static void HPAK_Remove_f( void )
{
resource_t resource;
@@ -1083,7 +1083,7 @@ void HPAK_Remove_f( void )
}
}
void HPAK_Validate_f( void )
static void HPAK_Validate_f( void )
{
if( Cmd_Argc() != 2 )
{

View File

@@ -28,7 +28,7 @@ qboolean Image_LoadBMP( const char *name, const byte *buffer, fs_offset_t filesi
rgba_t palette[256] = { 0 };
int i, columns, column, rows, row, bpp = 1;
int cbPalBytes = 0, padSize = 0, bps = 0;
int reflectivity[3] = { 0, 0, 0 };
uint reflectivity[3] = { 0, 0, 0 };
qboolean load_qfont = false;
bmp_t bhdr;
fs_offset_t estimatedSize;

View File

@@ -17,7 +17,7 @@ GNU General Public License for more details.
#include "xash3d_mathlib.h"
#include "img_dds.h"
qboolean Image_CheckDXT3Alpha( dds_t *hdr, byte *fin )
static qboolean Image_CheckDXT3Alpha( dds_t *hdr, byte *fin )
{
word sAlpha;
byte *alpha;
@@ -50,7 +50,7 @@ qboolean Image_CheckDXT3Alpha( dds_t *hdr, byte *fin )
return false;
}
qboolean Image_CheckDXT5Alpha( dds_t *hdr, byte *fin )
static qboolean Image_CheckDXT5Alpha( dds_t *hdr, byte *fin )
{
uint bits, bitmask;
byte *alphamask;
@@ -91,7 +91,7 @@ qboolean Image_CheckDXT5Alpha( dds_t *hdr, byte *fin )
return false;
}
void Image_DXTGetPixelFormat( dds_t *hdr, dds_header_dxt10_t *headerExt )
static void Image_DXTGetPixelFormat( dds_t *hdr, dds_header_dxt10_t *headerExt )
{
uint bits = hdr->dsPixelFormat.dwRGBBitCount;
@@ -215,7 +215,7 @@ void Image_DXTGetPixelFormat( dds_t *hdr, dds_header_dxt10_t *headerExt )
image.num_mips = hdr->dwMipMapCount; // get actual mip count
}
size_t Image_DXTCalcMipmapSize( dds_t *hdr )
static size_t Image_DXTCalcMipmapSize( dds_t *hdr )
{
size_t buffsize = 0;
int i, width, height;
@@ -231,7 +231,7 @@ size_t Image_DXTCalcMipmapSize( dds_t *hdr )
return buffsize;
}
uint Image_DXTCalcSize( const char *name, dds_t *hdr, size_t filesize )
static uint Image_DXTCalcSize( const char *name, dds_t *hdr, size_t filesize )
{
size_t buffsize = 0;
int w = image.width;
@@ -269,7 +269,7 @@ uint Image_DXTCalcSize( const char *name, dds_t *hdr, size_t filesize )
return buffsize;
}
void Image_DXTAdjustVolume( dds_t *hdr )
static void Image_DXTAdjustVolume( dds_t *hdr )
{
if( hdr->dwDepth <= 1 )
return;

View File

@@ -597,6 +597,7 @@ void Test_RunImagelib( void )
}
#define IMPLEMENT_IMAGELIB_FUZZ_TARGET( export, target ) \
int export( const uint8_t *Data, size_t Size ); \
int EXPORT export( const uint8_t *Data, size_t Size ) \
{ \
rgbdata_t *rgb; \

View File

@@ -65,7 +65,7 @@ static int bias[netsize]; // bias and freq arrays for learning
static int freq[netsize];
static int radpower[initrad]; // radpower for precomputation
void initnet( byte *thepic, int len, int sample )
static void initnet( byte *thepic, int len, int sample )
{
register int i, *p;
@@ -83,7 +83,7 @@ void initnet( byte *thepic, int len, int sample )
}
// Unbias network to give byte values 0..255 and record position i to prepare for sort
void unbiasnet( void )
static void unbiasnet( void )
{
int i, j, temp;
@@ -103,7 +103,7 @@ void unbiasnet( void )
}
// Insertion sort of network and building of netindex[0..255] (to do after unbias)
void inxbuild( void )
static void inxbuild( void )
{
register int *p, *q;
register int i, j, smallpos, smallval;
@@ -162,7 +162,7 @@ void inxbuild( void )
// Search for BGR values 0..255 (after net is unbiased) and return colour index
int inxsearch( int r, int g, int b )
static int inxsearch( int r, int g, int b )
{
register int i, j, dist, a, bestd;
register int *p;
@@ -243,7 +243,7 @@ int inxsearch( int r, int g, int b )
}
// Search for biased BGR values
int contest( int r, int g, int b )
static int contest( int r, int g, int b )
{
register int *p, *f, *n;
register int i, dist, a, biasdist, betafreq;
@@ -298,7 +298,7 @@ int contest( int r, int g, int b )
}
// Move neuron i towards biased (b,g,r) by factor alpha
void altersingle( int alpha, int i, int r, int g, int b )
static void altersingle( int alpha, int i, int r, int g, int b )
{
register int *n;
@@ -311,7 +311,7 @@ void altersingle( int alpha, int i, int r, int g, int b )
}
// Move adjacent neurons by precomputed alpha*(1-((i-j)^2/[r]^2)) in radpower[|i-j|]
void alterneigh( int rad, int i, int r, int g, int b )
static void alterneigh( int rad, int i, int r, int g, int b )
{
register int j, k, lo, hi, a;
register int *p, *q;
@@ -354,7 +354,7 @@ void alterneigh( int rad, int i, int r, int g, int b )
}
// Main Learning Loop
void learn( void )
static void learn( void )
{
register byte *p;
register int i, j, r, g, b;

View File

@@ -29,7 +29,7 @@ qboolean Image_LoadTGA( const char *name, const byte *buffer, fs_offset_t filesi
rgba_t palette[256];
byte red = 0, green = 0, blue = 0, alpha = 0;
int readpixelcount, pixelcount;
int reflectivity[3] = { 0, 0, 0 };
uint reflectivity[3] = { 0, 0, 0 };
qboolean compressed;
tga_t targa_header;

View File

@@ -281,7 +281,7 @@ int Image_ComparePalette( const byte *pal )
return PAL_CUSTOM;
}
void Image_SetPalette( const byte *pal, uint *d_table )
static void Image_SetPalette( const byte *pal, uint *d_table )
{
byte rgba[4];
uint uirgba; // TODO: palette looks byte-swapped on big-endian
@@ -530,7 +530,7 @@ void Image_PaletteHueReplace( byte *palSrc, int newHue, int start, int end, int
}
}
void Image_PaletteTranslate( byte *palSrc, int top, int bottom, int pal_size )
static void Image_PaletteTranslate( byte *palSrc, int top, int bottom, int pal_size )
{
byte dst[256], src[256];
int i;
@@ -726,7 +726,7 @@ static void Image_Resample24LerpLine( const byte *in, byte *out, int inwidth, in
}
}
void Image_Resample32Lerp( const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight )
static void Image_Resample32Lerp( const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight )
{
const byte *inrow;
int i, j, r, yi, oldy = 0, f, fstep, lerp, endy = (inheight - 1);
@@ -834,7 +834,7 @@ void Image_Resample32Lerp( const void *indata, int inwidth, int inheight, void *
Mem_Free( resamplerow1 );
}
void Image_Resample32Nolerp( const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight )
static void Image_Resample32Nolerp( const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight )
{
int i, j;
uint frac, fracstep;
@@ -873,7 +873,7 @@ void Image_Resample32Nolerp( const void *indata, int inwidth, int inheight, void
}
}
void Image_Resample24Lerp( const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight )
static void Image_Resample24Lerp( const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight )
{
const byte *inrow;
int i, j, r, yi, oldy, f, fstep, lerp, endy = (inheight - 1);
@@ -974,7 +974,7 @@ void Image_Resample24Lerp( const void *indata, int inwidth, int inheight, void *
Mem_Free( resamplerow1 );
}
void Image_Resample24Nolerp( const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight )
static void Image_Resample24Nolerp( const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight )
{
uint frac, fracstep;
int i, j, f, inwidth3 = inwidth * 3;
@@ -1040,7 +1040,7 @@ void Image_Resample24Nolerp( const void *indata, int inwidth, int inheight, void
}
}
void Image_Resample8Nolerp( const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight )
static void Image_Resample8Nolerp( const void *indata, int inwidth, int inheight, void *outdata, int outwidth, int outheight )
{
int i, j;
byte *in, *inrow;
@@ -1179,7 +1179,7 @@ byte *Image_FlipInternal( const byte *in, word *srcwidth, word *srcheight, int t
return image.tempbuffer;
}
byte *Image_CreateLumaInternal( byte *fin, int width, int height, int type, int flags )
static byte *Image_CreateLumaInternal( byte *fin, int width, int height, int type, int flags )
{
byte *out;
int i;
@@ -1235,7 +1235,7 @@ Image_Decompress
force to unpack any image to 32-bit buffer
=============
*/
qboolean Image_Decompress( const byte *data )
static qboolean Image_Decompress( const byte *data )
{
byte *fin, *fout;
int i, size;
@@ -1303,7 +1303,7 @@ qboolean Image_Decompress( const byte *data )
return true;
}
rgbdata_t *Image_DecompressInternal( rgbdata_t *pic )
static rgbdata_t *Image_DecompressInternal( rgbdata_t *pic )
{
// quick case to reject unneeded conversions
if( pic->type == PF_RGBA_32 )
@@ -1326,7 +1326,7 @@ rgbdata_t *Image_DecompressInternal( rgbdata_t *pic )
return pic;
}
rgbdata_t *Image_LightGamma( rgbdata_t *pic )
static rgbdata_t *Image_LightGamma( rgbdata_t *pic )
{
byte *in = (byte *)pic->buffer;
int i;
@@ -1344,7 +1344,7 @@ rgbdata_t *Image_LightGamma( rgbdata_t *pic )
return pic;
}
qboolean Image_RemapInternal( rgbdata_t *pic, int topColor, int bottomColor )
static qboolean Image_RemapInternal( rgbdata_t *pic, int topColor, int bottomColor )
{
if( !pic->palette )
return false;

View File

@@ -360,7 +360,7 @@ qboolean Image_LoadMIP( const char *name, const byte *buffer, fs_offset_t filesi
byte *fin, *pal;
int ofs[4], rendermode;
int i, pixels, numcolors;
int reflectivity[3] = { 0, 0, 0 };
uint reflectivity[3] = { 0, 0, 0 };
if( filesize < sizeof( mip ))
return false;

View File

@@ -333,7 +333,7 @@ void Info_RemovePrefixedKeys( char *start, char prefix )
}
}
qboolean Info_IsKeyImportant( const char *key )
static qboolean Info_IsKeyImportant( const char *key )
{
if( key[0] == '*' )
return true;
@@ -358,7 +358,7 @@ qboolean Info_IsKeyImportant( const char *key )
return false;
}
char *Info_FindLargestKey( char *s )
static char *Info_FindLargestKey( char *s )
{
char key[MAX_KV_SIZE];
char value[MAX_KV_SIZE];

View File

@@ -166,7 +166,7 @@ Some modders use _i?86 suffix in game library name
So strip it to follow library naming for non-Intel CPUs
==============
*/
static void COM_StripIntelSuffix( char *out )
static inline void COM_StripIntelSuffix( char *out )
{
char *suffix = Q_strrchr( out, '_' );

View File

@@ -583,7 +583,7 @@ void Mod_PrintWorldStats_f( void )
Mod_DecompressPVS
===================
*/
byte *Mod_DecompressPVS( const byte *in, int visbytes )
static byte *Mod_DecompressPVS( const byte *in, int visbytes )
{
byte *out;
int c;

View File

@@ -20,6 +20,7 @@ GNU General Public License for more details.
#if !XASH_DEDICATED
#include "ref_common.h"
#endif // XASH_DEDICATED
#include "mod_local.h"
/*

View File

@@ -188,11 +188,6 @@ int MSG_SeekToBit( sizebuf_t *sb, int bitPos, int whence )
return 0;
}
void MSG_SeekToByte( sizebuf_t *sb, int bytePos )
{
sb->iCurBit = bytePos << 3;
}
void MSG_WriteOneBit( sizebuf_t *sb, int nValue )
{
if( !MSG_Overflow( sb, 1 ))

View File

@@ -198,44 +198,6 @@ qboolean NetSplit_GetLong( netsplit_t *ns, netadr_t *from, byte *data, size_t *l
return false;
}
/*
======================
NetSplit_SendLong
Send parts that are less or equal maxpacket
======================
*/
void NetSplit_SendLong( netsrc_t sock, size_t length, void *data, netadr_t to, unsigned int maxpacket, unsigned int id)
{
netsplit_packet_t packet = {0};
unsigned int part = maxpacket - NETSPLIT_HEADER_SIZE;
packet.signature = LittleLong(0xFFFFFFFE);
packet.id = LittleLong(id);
packet.length = LittleLong(length);
packet.part = LittleLong(part);
packet.count = ( length - 1 ) / part + 1;
//Con_Reportf( S_NOTE "NetSplit_SendLong: packet to %s, count %d, length %d\n", NET_AdrToString( to ), (int)packet.count, (int)packet.length );
while( packet.index < packet.count )
{
unsigned int size = part;
if( size > length )
size = length;
length -= size;
memcpy( packet.data, (const byte*)data + packet.index * part, size );
//Con_Reportf( S_NOTE "NetSplit_SendLong: packet to %s, id %d, index %d\n", NET_AdrToString( to ), (int)packet.id, (int)packet.index );
NET_SendPacket( sock, size + NETSPLIT_HEADER_SIZE, &packet, to );
packet.index++;
}
}
/*
===============
Netchan_Init
@@ -367,7 +329,7 @@ Netchan_UnlinkFragment
==============================
*/
void Netchan_UnlinkFragment( fragbuf_t *buf, fragbuf_t **list )
static void Netchan_UnlinkFragment( fragbuf_t *buf, fragbuf_t **list )
{
fragbuf_t *search;
@@ -405,7 +367,7 @@ Netchan_ClearFragbufs
==============================
*/
void Netchan_ClearFragbufs( fragbuf_t **ppbuf )
static void Netchan_ClearFragbufs( fragbuf_t **ppbuf )
{
fragbuf_t *buf, *n;
@@ -431,7 +393,7 @@ Netchan_ClearFragments
==============================
*/
void Netchan_ClearFragments( netchan_t *chan )
static void Netchan_ClearFragments( netchan_t *chan )
{
fragbufwaiting_t *wait, *next;
int i;
@@ -539,7 +501,7 @@ Netchan_AllocFragbuf
==============================
*/
fragbuf_t *Netchan_AllocFragbuf( int fragment_size )
static fragbuf_t *Netchan_AllocFragbuf( int fragment_size )
{
fragbuf_t *buf;
@@ -556,7 +518,7 @@ Netchan_AddFragbufToTail
==============================
*/
void Netchan_AddFragbufToTail( fragbufwaiting_t *wait, fragbuf_t *buf )
static void Netchan_AddFragbufToTail( fragbufwaiting_t *wait, fragbuf_t *buf )
{
fragbuf_t *p;
@@ -579,7 +541,7 @@ Netchan_UpdateFlow
==============================
*/
void Netchan_UpdateFlow( netchan_t *chan )
static void Netchan_UpdateFlow( netchan_t *chan )
{
float faccumulatedtime = 0.0;
int i, bytes = 0;
@@ -791,7 +753,7 @@ Netchan_FindBufferById
==============================
*/
fragbuf_t *Netchan_FindBufferById( fragbuf_t **pplist, int id, qboolean allocate )
static fragbuf_t *Netchan_FindBufferById( fragbuf_t **pplist, int id, qboolean allocate )
{
fragbuf_t *list = *pplist;
fragbuf_t *pnewbuf;
@@ -821,7 +783,7 @@ Netchan_CheckForCompletion
==============================
*/
void Netchan_CheckForCompletion( netchan_t *chan, int stream, int intotalbuffers )
static void Netchan_CheckForCompletion( netchan_t *chan, int stream, int intotalbuffers )
{
int c, id;
int size;
@@ -1287,7 +1249,7 @@ qboolean Netchan_CopyFileFragments( netchan_t *chan, sizebuf_t *msg )
return true;
}
qboolean Netchan_Validate( netchan_t *chan, sizebuf_t *sb, qboolean *frag_message, uint *fragid, int *frag_offset, int *frag_length )
static qboolean Netchan_Validate( netchan_t *chan, sizebuf_t *sb, qboolean *frag_message, uint *fragid, int *frag_offset, int *frag_length )
{
int i, buffer, offset;
int count, length;

View File

@@ -317,7 +317,7 @@ static void NET_SockadrToNetadr( const struct sockaddr_storage *s, netadr_t *a )
NET_GetHostByName
============
*/
qboolean NET_GetHostByName( const char *hostname, int family, struct sockaddr_storage *addr )
static qboolean NET_GetHostByName( const char *hostname, int family, struct sockaddr_storage *addr )
{
#if defined HAVE_GETADDRINFO
struct addrinfo *ai = NULL, *cur;
@@ -372,7 +372,7 @@ static void NET_ResolveThread( void );
#define detach_thread( x ) pthread_detach(x)
#define mutex_t pthread_mutex_t
#define thread_t pthread_t
void *NET_ThreadStart( void *unused )
static void *NET_ThreadStart( void *unused )
{
NET_ResolveThread();
return NULL;
@@ -1018,7 +1018,7 @@ idnewt
192.246.40.70
=============
*/
qboolean NET_StringToAdrEx( const char *string, netadr_t *adr, int family )
static qboolean NET_StringToAdrEx( const char *string, netadr_t *adr, int family )
{
struct sockaddr_storage s;
@@ -1339,7 +1339,7 @@ NET_GetLong
receive long packet from network
==================
*/
qboolean NET_GetLong( byte *pData, int size, size_t *outSize, int splitsize )
static qboolean NET_GetLong( byte *pData, int size, size_t *outSize, int splitsize )
{
int i, sequence_number, offset;
SPLITPACKET *pHeader = (SPLITPACKET *)pData;
@@ -1534,7 +1534,7 @@ NET_SendLong
Fragment long packets, send short directly
==================
*/
int NET_SendLong( netsrc_t sock, int net_socket, const char *buf, size_t len, int flags, const struct sockaddr_storage *to, size_t tolen, size_t splitsize )
static int NET_SendLong( netsrc_t sock, int net_socket, const char *buf, size_t len, int flags, const struct sockaddr_storage *to, size_t tolen, size_t splitsize )
{
#ifdef NET_USE_FRAGMENTS
// do we need to break this packet up?
@@ -1864,7 +1864,7 @@ NET_GetLocalAddress
Returns the servers' ip address as a string.
================
*/
void NET_GetLocalAddress( void )
static void NET_GetLocalAddress( void )
{
char hostname[512];
char buff[512];

View File

@@ -48,7 +48,7 @@ SampleMiptex
fence texture testing
=============
*/
int PM_SampleMiptex( const msurface_t *surf, const vec3_t point )
static int PM_SampleMiptex( const msurface_t *surf, const vec3_t point )
{
mextrasurf_t *info = surf->info;
mfacebevel_t *fb = info->bevel;
@@ -221,7 +221,7 @@ PM_TestLine_r
optimized trace for light gathering
==================
*/
int PM_TestLine_r( model_t *mod, mnode_t *node, vec_t p1f, vec_t p2f, const vec3_t start, const vec3_t stop, linetrace_t *trace )
static int PM_TestLine_r( model_t *mod, mnode_t *node, vec_t p1f, vec_t p2f, const vec3_t start, const vec3_t stop, linetrace_t *trace )
{
float front, back;
float frac, midf;

View File

@@ -105,7 +105,7 @@ To keep everything totally uniform, bounding boxes are turned into small
BSP trees instead of being compared directly.
===================
*/
hull_t *PM_HullForBox( const vec3_t mins, const vec3_t maxs )
static hull_t *PM_HullForBox( const vec3_t mins, const vec3_t maxs )
{
pm_boxplanes[0].dist = maxs[0];
pm_boxplanes[1].dist = mins[0];
@@ -199,7 +199,7 @@ PM_HullForStudio
generate multiple hulls as hitboxes
==================
*/
hull_t *PM_HullForStudio( physent_t *pe, playermove_t *pmove, int *numhitboxes )
static hull_t *PM_HullForStudio( physent_t *pe, playermove_t *pmove, int *numhitboxes )
{
vec3_t size;

View File

@@ -56,20 +56,20 @@ static int good_enc( const int enc )
return FALSE;
}
void mpg123_rates( const long **list, size_t *number )
static void mpg123_rates( const long **list, size_t *number )
{
if( number != NULL ) *number = sizeof( my_rates ) / sizeof( long );
if( list != NULL ) *list = my_rates;
}
// now that's a bit tricky... One build of the library knows only a subset of the encodings.
void mpg123_encodings( const int **list, size_t *number )
static void mpg123_encodings( const int **list, size_t *number )
{
if( number != NULL ) *number = sizeof( good_encodings ) / sizeof( int );
if( list != NULL ) *list = good_encodings;
}
int mpg123_encsize( int encoding )
static int mpg123_encsize( int encoding )
{
return sizeof( short );
}
@@ -364,7 +364,7 @@ int mpg123_format( mpg123_handle_t *mh, long rate, int channels, int encodings )
return r;
}
int mpg123_format_support( mpg123_handle_t *mh, long rate, int encoding )
static int mpg123_format_support( mpg123_handle_t *mh, long rate, int encoding )
{
if( mh == NULL )
return 0;

View File

@@ -393,7 +393,7 @@ void frame_exit( mpg123_handle_t *fr )
bc_cleanup( &fr->rdat.buffer );
}
int mpg123_framedata( mpg123_handle_t *mh, ulong *header, byte **bodydata, size_t *bodybytes )
static int mpg123_framedata( mpg123_handle_t *mh, ulong *header, byte **bodydata, size_t *bodybytes )
{
if( mh == NULL )
return MPG123_BAD_HANDLE;
@@ -512,7 +512,7 @@ mpg_off_t frame_index_find( mpg123_handle_t *fr, mpg_off_t want_frame, mpg_off_t
return gopos;
}
mpg_off_t frame_ins2outs( mpg123_handle_t *fr, mpg_off_t ins )
static mpg_off_t frame_ins2outs( mpg123_handle_t *fr, mpg_off_t ins )
{
mpg_off_t outs = 0;

View File

@@ -15,6 +15,7 @@ GNU General Public License for more details.
#include "mpg123.h"
#include "sample.h"
#include "libmpg.h"
static int initialized = 0;
@@ -83,7 +84,7 @@ mpg123_handle_t *mpg123_parnew( mpg123_parm_t *mp, int *error )
return fr;
}
int mpg123_par( mpg123_parm_t *mp, enum mpg123_parms key, long val )
static int mpg123_par( mpg123_parm_t *mp, enum mpg123_parms key, long val )
{
int ret = MPG123_OK;
@@ -189,7 +190,7 @@ int mpg123_param( mpg123_handle_t *mh, enum mpg123_parms key, long val )
}
}
int mpg123_close( mpg123_handle_t *mh )
static int mpg123_close( mpg123_handle_t *mh )
{
if( mh == NULL )
return MPG123_BAD_HANDLE;
@@ -263,7 +264,7 @@ int mpg123_replace_reader_handle( mpg123_handle_t *mh, mpg_ssize_t (*fread)( voi
// a) a new choice of decoder
// b) a changed native format of the MPEG stream
// ... calls are only valid after parsing some MPEG frame!
int decode_update( mpg123_handle_t *mh )
static int decode_update( mpg123_handle_t *mh )
{
long native_rate;
int b;
@@ -320,13 +321,13 @@ int decode_update( mpg123_handle_t *mh )
return 0;
}
size_t mpg123_safe_buffer( void )
static size_t mpg123_safe_buffer( void )
{
// real is the largest possible output
return sizeof( float ) * 2 * 1152;
}
size_t mpg123_outblock( mpg123_handle_t *mh )
static size_t mpg123_outblock( mpg123_handle_t *mh )
{
// try to be helpful and never return zero output block size.
if( mh != NULL && mh->outblock > 0 )
@@ -697,7 +698,7 @@ int mpg123_getformat( mpg123_handle_t *mh, int *rate, int *channels, int *encodi
return MPG123_OK;
}
int mpg123_scan( mpg123_handle_t *mh )
static int mpg123_scan( mpg123_handle_t *mh )
{
mpg_off_t track_frames = 0;
mpg_off_t track_samples = 0;
@@ -963,8 +964,10 @@ const char *mpg123_plain_strerror( int errcode )
}
}
const char *get_error( mpg123_handle_t *mh )
const char *get_error( void *handle )
{
mpg123_handle_t *mh = handle;
if( !mh ) return mpg123_plain_strerror( MPG123_BAD_HANDLE );
return mpg123_plain_strerror( mh->err );
}

View File

@@ -68,7 +68,7 @@ void set_pointer( mpg123_handle_t *fr, long backstep )
fr->bitindex = 0;
}
int frame_bitrate( mpg123_handle_t *fr )
static int frame_bitrate( mpg123_handle_t *fr )
{
return tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index];
}
@@ -643,7 +643,7 @@ static int forget_head_shift( mpg123_handle_t *fr, ulong *newheadp, int forget )
// returns: 0: bad or just unparseable tag
// 1: good, (possibly) new tag info
// <0: reader error (may need more data feed, try again)
int parse_new_id3( mpg123_handle_t *fr, ulong first4bytes )
static int parse_new_id3( mpg123_handle_t *fr, ulong first4bytes )
{
byte buf[6];
ulong length=0;

View File

@@ -25,7 +25,7 @@ GNU General Public License for more details.
else { *(samples) = REAL_TO_SHORT( sum ); }
// main synth function, uses the plain dct64
int synth_1to1( float *bandPtr, int channel, mpg123_handle_t *fr, int final )
static int synth_1to1( float *bandPtr, int channel, mpg123_handle_t *fr, int final )
{
static const int step = 2;
short *samples = (short *) (fr->buffer.data + fr->buffer.fill);
@@ -147,7 +147,7 @@ static int synth_stereo( float *bandPtr_l, float *bandPtr_r, mpg123_handle_t *fr
}
// mono to stereo synth, wrapping over synth_1to1
int synth_1to1_m2s(float *bandPtr, mpg123_handle_t *fr )
static int synth_1to1_m2s(float *bandPtr, mpg123_handle_t *fr )
{
byte *samples = fr->buffer.data;
int i, ret;
@@ -165,7 +165,7 @@ int synth_1to1_m2s(float *bandPtr, mpg123_handle_t *fr )
}
// mono synth, wrapping over synth_1to1
int synth_1to1_mono( float *bandPtr, mpg123_handle_t *fr )
static int synth_1to1_mono( float *bandPtr, mpg123_handle_t *fr )
{
short samples_tmp[BLOCK];
short *tmp1 = samples_tmp;

View File

@@ -18,7 +18,7 @@ GNU General Public License for more details.
// global sound variables
sndlib_t sound;
void Sound_Reset( void )
static void Sound_Reset( void )
{
// reset global variables
sound.width = sound.rate = 0;
@@ -30,7 +30,7 @@ void Sound_Reset( void )
sound.size = 0;
}
wavdata_t *SoundPack( void )
static wavdata_t *SoundPack( void )
{
wavdata_t *pack = Mem_Calloc( host.soundpool, sizeof( wavdata_t ));
@@ -294,6 +294,7 @@ void FS_FreeStream( stream_t *stream )
#if XASH_ENGINE_TESTS
#define IMPLEMENT_SOUNDLIB_FUZZ_TARGET( export, target ) \
int EXPORT export( const uint8_t *Data, size_t Size ); \
int EXPORT export( const uint8_t *Data, size_t Size ) \
{ \
wavdata_t *wav; \

View File

@@ -186,6 +186,7 @@ static qboolean Sound_ParseID3Tag( const byte *buffer, fs_offset_t filesize )
}
#if XASH_ENGINE_TESTS
int EXPORT Fuzz_Sound_ParseID3Tag( const uint8_t *Data, size_t Size );
int EXPORT Fuzz_Sound_ParseID3Tag( const uint8_t *Data, size_t Size )
{
memset( &sound, 0, sizeof( sound ));
@@ -294,7 +295,7 @@ qboolean Sound_LoadMPG( const char *name, const byte *buffer, fs_offset_t filesi
FS_SeekEx
=================
*/
fs_offset_t FS_SeekEx( file_t *file, fs_offset_t offset, int whence )
static fs_offset_t FS_SeekEx( file_t *file, fs_offset_t offset, int whence )
{
return FS_Seek( file, offset, whence ) == -1 ? -1 : FS_Tell( file );
}

View File

@@ -83,7 +83,7 @@ void Sound_Shutdown( void )
Mem_FreePool( &host.soundpool );
}
byte *Sound_Copy( size_t size )
static byte *Sound_Copy( size_t size )
{
byte *out;
@@ -139,7 +139,7 @@ Sound_ResampleInternal
We need convert sound to signed even if nothing to resample
================
*/
qboolean Sound_ResampleInternal( wavdata_t *sc, int inrate, int inwidth, int outrate, int outwidth )
static qboolean Sound_ResampleInternal( wavdata_t *sc, int inrate, int inwidth, int outrate, int outwidth )
{
double stepscale, j;
int outcount;

View File

@@ -117,7 +117,7 @@ static void FindChunk( const char *filename, const char *name )
StreamFindNextChunk
============
*/
qboolean StreamFindNextChunk( file_t *file, const char *name, int *last_chunk )
static qboolean StreamFindNextChunk( file_t *file, const char *name, int *last_chunk )
{
char chunkName[4];
int iff_chunk_len;

362
engine/common/sounds.c Normal file
View File

@@ -0,0 +1,362 @@
/*
sounds.c - sounds.lst parser
Copyright (C) 2024 Alibek Omarov
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.
*/
#include "common.h"
enum soundlst_type_e
{
SoundList_None,
SoundList_Range,
SoundList_List
};
static const char *soundlst_groups[SoundList_Groups] =
{
"BouncePlayerShell",
"BounceWeaponShell",
"BounceConcrete",
"BounceGlass",
"BounceMetal",
"BounceFlesh",
"BounceWood",
"Ricochet",
"Explode",
"PlayerWaterEnter",
"PlayerWaterExit",
"EntityWaterEnter",
"EntityWaterExit",
};
typedef struct soundlst_s
{
enum soundlst_type_e type;
char *snd;
int min; // the string length if type is group
int max; // the string count if type is group
} soundlst_t;
soundlst_t soundlst[SoundList_Groups];
static void SoundList_Print_f( void );
static void SoundList_Free( soundlst_t *lst )
{
if( lst->snd )
Mem_Free( lst->snd );
memset( lst, 0, sizeof( *lst ));
}
void SoundList_Shutdown( void )
{
int i;
for( i = 0; i < SoundList_Groups; i++ )
SoundList_Free( &soundlst[i] );
}
int SoundList_Count( enum soundlst_group_e group )
{
soundlst_t *lst = &soundlst[group];
switch( lst->type )
{
case SoundList_Range:
return lst->max - lst->min + 1;
case SoundList_List:
return lst->max;
}
return 0;
}
const char *SoundList_Get( enum soundlst_group_e group, int i )
{
static string temp;
soundlst_t *lst = &soundlst[group];
if( i < 0 || i >= SoundList_Count( group ))
return NULL;
switch( lst->type )
{
case SoundList_Range:
Q_snprintf( temp, sizeof( temp ), lst->snd, lst->min + i );
return temp;
case SoundList_List:
return &lst->snd[i * lst->min];
}
return NULL;
}
const char *SoundList_GetRandom( enum soundlst_group_e group )
{
int count = SoundList_Count( group );
int idx = COM_RandomLong( 0, count - 1 );
// Con_Printf( "%s: %s %d %d\n", __func__, soundlst_groups[group], count, idx );
return SoundList_Get( group, idx );
}
static qboolean SoundList_ParseGroup( soundlst_t *lst, char **file )
{
string token;
int count = 0, slen = 0, i;
char *p;
p = *file;
while(( p = COM_ParseFile( p, token, sizeof( token ))))
{
int len;
if( !Q_strcmp( token, "}" ))
break;
if( !Q_strcmp( token, "{" ))
{
Con_Printf( "%s: expected '}' but got '{' during group list parse\n", __func__ );
return false;
}
else if( !COM_CheckStringEmpty( token ))
{
Con_Printf( "%s: expected '}' but got EOF during group list parse\n", __func__ );
return false;
}
len = Q_strlen( token ) + 1;
if( slen < len )
slen = len;
count++;
}
if( count == 0 ) // deactivate group
{
lst->type = SoundList_None;
lst->snd = NULL;
lst->min = lst->max = 0;
return true;
}
lst->type = SoundList_List;
lst->min = slen;
lst->max = count;
lst->snd = Mem_Malloc( host.mempool, count * slen ); // allocate single buffer for the whole group
for( i = 0; i < count; i++ )
{
*file = COM_ParseFile( *file, token, sizeof( token ));
Q_strncpy( &lst->snd[i * slen], token, slen );
}
return true;
}
static qboolean SoundList_ParseRange( soundlst_t *lst, char **file )
{
string token, snd;
char *p;
int i = 0;
lst->type = SoundList_Range;
*file = COM_ParseFile( *file, snd, sizeof( snd ));
// validate format string, count all % characters
p = snd;
i = 0;
while(( p = Q_strchr( p, '%' )))
{
// only decimal
if( p[1] != 'd' && p[1] != 'i' && p[1] != 'u' )
{
Con_Printf( "%s: invalid range string %s, only decimal numbers are allowed", __func__, snd );
return false;
}
i++;
p++;
}
// if more than one %, then it's an invalid format string
if( i != 1 )
{
Con_Printf( "%s: invalid range string %s, only single specifier is allowed\n", __func__, snd );
return false;
}
*file = COM_ParseFile( *file, token, sizeof( token ));
if( !Q_isdigit( token ))
{
Con_Printf( "%s: %s must be a digit\n", __func__, token );
return false;
}
lst->min = Q_atoi( token );
*file = COM_ParseFile( *file, token, sizeof( token ));
if( !Q_isdigit( token ))
{
Con_Printf( "%s: %s must be a digit\n", __func__, token );
return false;
}
lst->max = Q_atoi( token );
lst->snd = copystring( snd );
return true;
}
static qboolean SoundList_Parse( char *file )
{
string token;
int i;
while(( file = COM_ParseFile( file, token, sizeof( token ))))
{
soundlst_t *lst = NULL;
char *p;
for( i = 0; i < SoundList_Groups; i++ )
{
if( !Q_strcmp( token, soundlst_groups[i] ))
{
lst = &soundlst[i];
break;
}
}
if( !lst )
{
Con_Printf( "%s: unexpected token %s, must be group name\n", __func__, token );
goto cleanup;
}
p = COM_ParseFile( file, token, sizeof( token ));
// group is a range
if( !Q_strcmp( token, "{" ))
{
file = p; // advance pointer
if( !SoundList_ParseGroup( lst, &file ))
goto cleanup;
file = COM_ParseFile( file, token, sizeof( token ));
if( Q_strcmp( token, "}" ))
{
Con_Printf( "%s: unexpected token %s, must be }\n", __func__, token );
goto cleanup;
}
}
else
{
// ranges are more simple, but need to rewind pointer for them
if( !SoundList_ParseRange( lst, &file ))
goto cleanup;
}
}
if( host_developer.value >= 2 )
SoundList_Print_f();
return true;
cleanup:
SoundList_Shutdown();
return false;
}
static void SoundList_Print_f( void )
{
int i;
for( i = 0; i < SoundList_Groups; i++ )
{
soundlst_t *lst = &soundlst[i];
switch( lst->type )
{
case SoundList_Range:
Con_Reportf( "%-16s\t" S_CYAN "Range" S_DEFAULT " %s [%d; %d]\n",
soundlst_groups[i], lst->snd, lst->min, lst->max );
break;
case SoundList_List:
{
int j;
Con_Reportf( "%-16s\t" S_MAGENTA "List" S_DEFAULT " [", soundlst_groups[i] );
for( j = 0; j < lst->max; j++ )
Con_Reportf( "%s%s", &lst->snd[j * lst->min], j + 1 == lst->max ? "" : ", " );
Con_Reportf( "]\n" );
break;
}
default:
Con_Reportf( "%-16s\t" S_RED "inactive" S_DEFAULT "\n", soundlst_groups[i] );
break;
}
}
}
// I wish we had #embed already
static const char default_sounds_lst[] =
"BouncePlayerShell \"player/pl_shell%d.wav\" 1 3\n"
"BounceWeaponShell \"weapons/sshell%d.wav\" 1 3\n"
"BounceConcrete \"debris/concrete%d.wav\" 1 3\n"
"BounceGlass \"debris/glass%d.wav\" 1 4\n"
"BounceMetal \"debris/metal%d.wav\" 1 6\n"
"BounceFlesh \"debris/flesh%d.wav\" 1 7\n"
"BounceWood \"debris/wood%d.wav\" 1 4\n"
"Ricochet \"weapons/ric%d.wav\" 1 5\n"
"Explode \"weapons/explode%d.wav\" 3 5\n"
"EntityWaterEnter \"player/pl_wade%d.wav\" 1 4\n"
"EntityWaterExit \"player/pl_wade%d.wav\" 1 4\n"
"PlayerWaterEnter\n"
"{\n"
" \"player/pl_wade1.wav\"\n"
"}\n"
"\n"
"PlayerWaterExit\n"
"{\n"
" \"player/pl_wade2.wav\"\n"
"}\n";
static void SoundList_Reload_f( void )
{
qboolean load_internal = false;
char *pfile = FS_LoadFile( "scripts/sounds.lst", NULL, false );
if( pfile )
{
if( !SoundList_Parse( pfile ))
{
Con_Printf( S_ERROR "can't parse sounds.lst file, loading internal...\n" );
load_internal = true;
}
Mem_Free( pfile );
}
else load_internal = true;
if( load_internal )
SoundList_Parse( (char *)default_sounds_lst );
}
void SoundList_Init( void )
{
Cmd_AddRestrictedCommand( "host_soundlist_print", SoundList_Print_f, "print current sound list" );
Cmd_AddRestrictedCommand( "host_soundlist_reload", SoundList_Reload_f, "reload sound list" );
SoundList_Reload_f ();
}

View File

@@ -362,7 +362,7 @@ Sys_WaitForQuit
wait for 'Esc' key will be hit
================
*/
void Sys_WaitForQuit( void )
static void Sys_WaitForQuit( void )
{
#if XASH_WIN32
MSG msg;

View File

@@ -2,15 +2,30 @@
mobility_int.h - interface between engine and client for mobile platforms
Copyright (C) 2015 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 is free and unencumbered software released into the public domain.
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.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>
*/
#pragma once

View File

@@ -29,7 +29,8 @@ GNU General Public License for more details.
#include "platform/platform.h"
#include <sys/types.h>
#if defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 30)
#if defined( __GLIBC__ )
#if ( __GLIBC__ <= 2 ) && ( __GLIBC_MINOR__ <= 30 )
// Library support was added in glibc 2.30.
// Earlier glibc versions did not provide a wrapper for this system call,
// necessitating the use of syscall(2).
@@ -39,7 +40,14 @@ static pid_t gettid( void )
{
return syscall( SYS_gettid );
}
#endif
#endif // ( __GLIBC__ <= 2 ) && ( __GLIBC_MINOR__ <= 30 )
// Glibc misses this macro in POSIX headers (bits/types/sigevent_t.h)
// but it does present in Linux headers (asm-generic/siginfo.h) and musl
#if !defined( sigev_notify_thread_id )
#define sigev_notify_thread_id _sigev_un._tid
#endif // !defined( sigev_notify_thread_id )
#endif // defined(__GLIBC__)
static void *g_hsystemd;
static int (*g_pfn_sd_notify)( int unset_environment, const char *state );
@@ -150,7 +158,7 @@ void Linux_SetTimer( float tm )
// this path availiable in POSIX, but may signal wrong thread...
// sev.sigev_notify = SIGEV_SIGNAL;
sev.sigev_notify = SIGEV_THREAD_ID;
sev._sigev_un._tid = gettid();
sev.sigev_notify_thread_id = gettid();
sev.sigev_signo = DEBUG_TIMER_SIGNAL;
sev.sigev_value.sival_ptr = &timerid;
timer_create( CLOCK_REALTIME, &sev, &timerid );

View File

@@ -183,7 +183,7 @@ void Platform_SetClipboardText( const char *buffer );
#define SDL_VERSION_ATLEAST( x, y, z ) 0
#endif
static void Platform_SetTimer( float time )
static inline void Platform_SetTimer( float time )
{
#if XASH_LINUX
Linux_SetTimer( time );

View File

@@ -49,7 +49,7 @@ static SDL_AudioDeviceID in_dev = 0;
static SDL_AudioFormat sdl_format;
static char sdl_backend_name[32];
void SDL_SoundCallback( void *userdata, Uint8 *stream, int len )
static void SDL_SoundCallback( void *userdata, Uint8 *stream, int len )
{
const int size = dma.samples << 1;
int pos;
@@ -244,7 +244,7 @@ void SNDDMA_Activate( qboolean active )
SDL_SoundInputCallback
===========
*/
void SDL_SoundInputCallback( void *userdata, Uint8 *stream, int len )
static void SDL_SoundInputCallback( void *userdata, Uint8 *stream, int len )
{
int size = Q_min( len, sizeof( voice.input_buffer ) - voice.input_buffer_pos );

View File

@@ -46,8 +46,8 @@ GNU General Public License for more details.
#define REF_API_VERSION 7
#define TF_SKY (TF_SKYSIDE|TF_NOMIPMAP)
#define TF_FONT (TF_NOMIPMAP|TF_CLAMP)
#define TF_SKY (TF_SKYSIDE|TF_NOMIPMAP|TF_ALLOW_NEAREST)
#define TF_FONT (TF_NOMIPMAP|TF_CLAMP|TF_ALLOW_NEAREST)
#define TF_IMAGE (TF_NOMIPMAP|TF_CLAMP)
#define TF_DECAL (TF_CLAMP)
@@ -283,6 +283,12 @@ typedef enum
PARM_GET_MOVEVARS_PTR = -13, // clgame.movevars
PARM_GET_PALETTE_PTR = -14, // clgame.palette
PARM_GET_VIEWENT_PTR = -15, // clgame.viewent
// implemented by ref_dll
// returns non-null integer if filtering is enabled for texture
// pass -1 to query global filtering settings
PARM_TEX_FILTERING = -65536,
} ref_parm_e;
typedef struct ref_api_s

View File

@@ -487,25 +487,16 @@ int SV_ModelIndex( const char *name );
int SV_SoundIndex( const char *name );
int SV_EventIndex( const char *name );
int SV_GenericIndex( const char *name );
int SV_CalcPacketLoss( sv_client_t *cl );
void SV_ExecuteUserCommand (char *s);
void SV_InitOperatorCommands( void );
void SV_KillOperatorCommands( void );
void SV_RemoteCommand( netadr_t from, sizebuf_t *msg );
void SV_PrepWorldFrame( void );
void SV_ProcessFile( sv_client_t *cl, const char *filename );
void SV_SendResource( resource_t *pResource, sizebuf_t *msg );
void SV_SendResourceList( sv_client_t *cl );
void SV_AddToMaster( netadr_t from, sizebuf_t *msg );
qboolean SV_ProcessUserAgent( netadr_t from, const char *useragent );
void Host_SetServerState( int state );
qboolean SV_IsSimulating( void );
void SV_FreeClients( void );
//
// sv_init.c
//
qboolean CRC32_MapFile( dword *crcvalue, const char *filename, qboolean multiplayer );
qboolean SV_InitGame( void );
void SV_ActivateServer( int runPhysics );
qboolean SV_SpawnServer( const char *server, const char *startspot, qboolean background );
@@ -537,14 +528,11 @@ void SV_WaterMove( edict_t *ent );
//
void SV_SendClientMessages( void );
void SV_ClientPrintf( sv_client_t *cl, const char *fmt, ... ) _format( 2 );
void SV_BroadcastCommand( const char *fmt, ... ) _format( 1 );
//
// sv_client.c
//
char *SV_StatusString( void );
void SV_RefreshUserinfo( void );
void SV_GetChallenge( netadr_t from );
void SV_TogglePause( const char *msg );
qboolean SV_ShouldUpdatePing( sv_client_t *cl );
const char *SV_GetClientIDString( sv_client_t *cl );
@@ -554,15 +542,12 @@ void SV_FullClientUpdate( sv_client_t *cl, sizebuf_t *msg );
void SV_FullUpdateMovevars( sv_client_t *cl, sizebuf_t *msg );
void SV_GetPlayerStats( sv_client_t *cl, int *ping, int *packet_loss );
void SV_SendServerdata( sizebuf_t *msg, sv_client_t *cl );
void SV_ClientThink( sv_client_t *cl, usercmd_t *cmd );
void SV_ExecuteClientMessage( sv_client_t *cl, sizebuf_t *msg );
void SV_ConnectionlessPacket( netadr_t from, sizebuf_t *msg );
edict_t *SV_FakeConnect( const char *netname );
void SV_ExecuteClientCommand( sv_client_t *cl, const char *s );
void SV_BuildReconnect( sizebuf_t *msg );
qboolean SV_IsPlayerIndex( int idx );
int SV_CalcPing( sv_client_t *cl );
void SV_InitClientMove( void );
void SV_UpdateServerInfo( void );
void SV_EndRedirect( host_redirect_t *rd );
void SV_RejectConnection( netadr_t from, const char *fmt, ... ) _format( 2 );
@@ -571,8 +556,6 @@ void SV_GetPlayerCount( int *clients, int *bots );
//
// sv_cmds.c
//
void SV_Status_f( void );
void SV_Newgame_f( void );
void SV_InitHostCommands( void );
//
@@ -594,7 +577,6 @@ void SV_RequestMissingResources( void );
// sv_filter.c
//
void SV_InitFilter( void );
void SV_ShutdownFilter( void );
qboolean SV_CheckIP( netadr_t *adr );
qboolean SV_CheckID( const char *id );
@@ -603,8 +585,6 @@ qboolean SV_CheckID( const char *id );
//
void SV_InactivateClients( void );
int SV_FindBestBaselineForStatic( int index, entity_state_t **baseline, entity_state_t *to );
void SV_WriteFrameToClient( sv_client_t *client, sizebuf_t *msg );
void SV_BuildClientFrame( sv_client_t *client );
void SV_SkipUpdates( void );
//
@@ -651,6 +631,8 @@ int pfnDropToFloor( edict_t* e );
edict_t *SV_EdictNum( int n );
void SV_SetModel( edict_t *ent, const char *name );
int pfnDecalIndex( const char *m );
void SV_CreateDecal( sizebuf_t *msg, const float *origin, int decalIndex, int entityIndex, int modelIndex, int flags, float scale );
qboolean SV_RestoreCustomDecal( struct decallist_s *entry, edict_t *pEdict, qboolean adjacent );
//
// sv_log.c
@@ -675,6 +657,7 @@ void SV_ClearGameState( void );
//
// sv_pmove.c
//
void SV_InitClientMove( void );
qboolean SV_PlayerIsFrozen( edict_t *pClient );
void SV_RunCmd( sv_client_t *cl, usercmd_t *ucmd, int random_seed );
@@ -685,7 +668,6 @@ void SV_ClearWorld( void );
void SV_UnlinkEdict( edict_t *ent );
void SV_ClipMoveToEntity( edict_t *ent, const vec3_t start, vec3_t mins, vec3_t maxs, const vec3_t end, trace_t *trace );
void SV_CustomClipMoveToEntity( edict_t *ent, const vec3_t start, vec3_t mins, vec3_t maxs, const vec3_t end, trace_t *trace );
trace_t SV_TraceHull( edict_t *ent, int hullNum, const vec3_t start, vec3_t mins, vec3_t maxs, const vec3_t end );
trace_t SV_Move( const vec3_t start, vec3_t mins, vec3_t maxs, const vec3_t end, int type, edict_t *e, qboolean monsterclip );
trace_t SV_MoveNoEnts( const vec3_t start, vec3_t mins, vec3_t maxs, const vec3_t end, int type, edict_t *e );
const char *SV_TraceTexture( edict_t *ent, const vec3_t start, const vec3_t end );

View File

@@ -43,6 +43,7 @@ typedef struct ucmd_s
static int g_userid = 1;
static void SV_UserinfoChanged( sv_client_t *cl );
static void SV_ExecuteClientCommand( sv_client_t *cl, const char *s );
/*
=================
@@ -84,7 +85,7 @@ flood the server with invalid connection IPs. With a
challenge, they must give a valid IP address.
=================
*/
void SV_GetChallenge( netadr_t from )
static void SV_GetChallenge( netadr_t from )
{
int i, oldest = 0;
double oldestTime;
@@ -118,7 +119,7 @@ void SV_GetChallenge( netadr_t from )
Netchan_OutOfBandPrint( NS_SERVER, svs.challenges[i].adr, "challenge %i", svs.challenges[i].challenge );
}
int SV_GetFragmentSize( void *pcl, fragsize_t mode )
static int SV_GetFragmentSize( void *pcl, fragsize_t mode )
{
sv_client_t *cl = (sv_client_t*)pcl;
int cl_frag_size;
@@ -191,7 +192,7 @@ for some reasons file can't be downloaded
tell the client about this problem
================
*/
void SV_FailDownload( sv_client_t *cl, const char *filename )
static void SV_FailDownload( sv_client_t *cl, const char *filename )
{
if( !COM_CheckString( filename ))
return;
@@ -207,7 +208,7 @@ SV_CheckChallenge
Make sure connecting client is not spoofing
================
*/
int SV_CheckChallenge( netadr_t from, int challenge )
static int SV_CheckChallenge( netadr_t from, int challenge )
{
int i;
@@ -247,7 +248,7 @@ SV_CheckIPRestrictions
Determine if client is outside appropriate address range
================
*/
int SV_CheckIPRestrictions( netadr_t from )
static int SV_CheckIPRestrictions( netadr_t from )
{
if( sv_lan.value )
{
@@ -265,7 +266,7 @@ Get slot # and set client_t pointer for player, if possible
We don't do this search on a "reconnect, we just reuse the slot
================
*/
int SV_FindEmptySlot( netadr_t from, int *pslot, sv_client_t **ppClient )
static int SV_FindEmptySlot( netadr_t from, int *pslot, sv_client_t **ppClient )
{
sv_client_t *cl;
int i;
@@ -291,7 +292,7 @@ SV_ConnectClient
A connection request that did not come from the master
==================
*/
void SV_ConnectClient( netadr_t from )
static void SV_ConnectClient( netadr_t from )
{
char userinfo[MAX_INFO_STRING];
char protinfo[MAX_INFO_STRING];
@@ -452,6 +453,11 @@ void SV_ConnectClient( netadr_t from )
// parse some info from the info strings (this can override cl_updaterate)
Q_strncpy( newcl->userinfo, userinfo, sizeof( newcl->userinfo ));
newcl->fullupdate_next_calltime = 0;
newcl->userinfo_next_changetime = 0;
newcl->userinfo_penalty = 0;
newcl->userinfo_change_attempts = 0;
SV_UserinfoChanged( newcl );
SV_ClearResourceLists( newcl );
#if 0
@@ -793,7 +799,7 @@ sv_client_t *SV_ClientById( int id )
ASSERT( id >= 0 );
for( i = 0, cl = svs.clients; i < svgame.globals->maxClients; i++, cl++ )
for( i = 0, cl = svs.clients; cl && i < svgame.globals->maxClients; i++, cl++ )
{
if( !cl->state )
continue;
@@ -813,7 +819,7 @@ sv_client_t *SV_ClientByName( const char *name )
if( !COM_CheckString( name ))
return NULL;
for( i = 0, cl = svs.clients; i < svgame.globals->maxClients; i++, cl++ )
for( i = 0, cl = svs.clients; cl && i < svgame.globals->maxClients; i++, cl++ )
{
if( !cl->state )
continue;
@@ -831,7 +837,7 @@ SV_TestBandWidth
================
*/
void SV_TestBandWidth( netadr_t from )
static void SV_TestBandWidth( netadr_t from )
{
const int version = Q_atoi( Cmd_Argv( 1 ));
const int packetsize = Q_atoi( Cmd_Argv( 2 ));
@@ -876,7 +882,7 @@ SV_Ack
================
*/
void SV_Ack( netadr_t from )
static void SV_Ack( netadr_t from )
{
Con_Printf( "ping %s\n", NET_AdrToString( from ));
}
@@ -889,7 +895,7 @@ Responds with short info for broadcast scans
The second parameter should be the current protocol version number.
================
*/
void SV_Info( netadr_t from, int protocolVersion )
static void SV_Info( netadr_t from, int protocolVersion )
{
char s[512];
@@ -947,7 +953,7 @@ SV_BuildNetAnswer
Responds with long info for local and broadcast requests
================
*/
void SV_BuildNetAnswer( netadr_t from )
static void SV_BuildNetAnswer( netadr_t from )
{
char string[MAX_INFO_STRING];
int version, context, type;
@@ -1043,7 +1049,7 @@ SV_Ping
Just responds with an acknowledgement
================
*/
void SV_Ping( netadr_t from )
static void SV_Ping( netadr_t from )
{
Netchan_OutOfBandPrint( NS_SERVER, from, "ack" );
}
@@ -1053,7 +1059,7 @@ void SV_Ping( netadr_t from )
Rcon_Validate
================
*/
qboolean Rcon_Validate( void )
static qboolean Rcon_Validate( void )
{
if( !COM_CheckString( rcon_password.string ))
return false;
@@ -1156,7 +1162,7 @@ SV_EstablishTimeBase
Finangles latency and the like.
===================
*/
void SV_EstablishTimeBase( sv_client_t *cl, usercmd_t *cmds, int dropped, int numbackup, int numcmds )
static void SV_EstablishTimeBase( sv_client_t *cl, usercmd_t *cmds, int dropped, int numbackup, int numcmds )
{
double runcmd_time = 0.0;
int i, cmdnum = dropped;
@@ -1190,7 +1196,7 @@ SV_CalcClientTime
compute latency for client
===================
*/
float SV_CalcClientTime( sv_client_t *cl )
static float SV_CalcClientTime( sv_client_t *cl )
{
float minping, maxping;
float ping = 0.0f;
@@ -1389,7 +1395,7 @@ Called when a player connects to a server or respawns in
a deathmatch.
============
*/
void SV_PutClientInServer( sv_client_t *cl )
static void SV_PutClientInServer( sv_client_t *cl )
{
static byte msg_buf[MAX_INIT_MSG + 0x200]; // MAX_INIT_MSG + some space
edict_t *ent = cl->edict;
@@ -1522,7 +1528,7 @@ SV_UpdateClientView
Resend the client viewentity (used for demos)
============
*/
void SV_UpdateClientView( sv_client_t *cl )
static void SV_UpdateClientView( sv_client_t *cl )
{
int viewEnt;
@@ -3040,7 +3046,7 @@ ucmd_t enttoolscmds[] =
SV_ExecuteUserCommand
==================
*/
void SV_ExecuteClientCommand( sv_client_t *cl, const char *s )
static void SV_ExecuteClientCommand( sv_client_t *cl, const char *s )
{
ucmd_t *u;
@@ -3306,7 +3312,7 @@ SV_ParseResourceList
Parse resource list
===================
*/
void SV_ParseResourceList( sv_client_t *cl, sizebuf_t *msg )
static void SV_ParseResourceList( sv_client_t *cl, sizebuf_t *msg )
{
int totalsize;
resource_t *resource;
@@ -3395,7 +3401,7 @@ SV_ParseCvarValue
Parse a requested value from client cvar
===================
*/
void SV_ParseCvarValue( sv_client_t *cl, sizebuf_t *msg )
static void SV_ParseCvarValue( sv_client_t *cl, sizebuf_t *msg )
{
const char *value = MSG_ReadString( msg );
@@ -3411,7 +3417,7 @@ SV_ParseCvarValue2
Parse a requested value from client cvar
===================
*/
void SV_ParseCvarValue2( sv_client_t *cl, sizebuf_t *msg )
static void SV_ParseCvarValue2( sv_client_t *cl, sizebuf_t *msg )
{
string name, value;
int requestID = MSG_ReadLong( msg );
@@ -3429,7 +3435,7 @@ void SV_ParseCvarValue2( sv_client_t *cl, sizebuf_t *msg )
SV_ParseVoiceData
===================
*/
void SV_ParseVoiceData( sv_client_t *cl, sizebuf_t *msg )
static void SV_ParseVoiceData( sv_client_t *cl, sizebuf_t *msg )
{
char received[4096];
sv_client_t *cur;
@@ -3452,7 +3458,7 @@ void SV_ParseVoiceData( sv_client_t *cl, sizebuf_t *msg )
MSG_ReadBytes( msg, received, size );
if( !sv_voiceenable.value )
if( !sv_voiceenable.value || svs.maxclients <= 1 )
return;
for( i = 0, cur = svs.clients; i < svs.maxclients; i++, cur++ )

View File

@@ -169,7 +169,7 @@ SV_ValidateMap
check map for typically errors
==================
*/
qboolean SV_ValidateMap( const char *pMapName, qboolean check_spawn )
static qboolean SV_ValidateMap( const char *pMapName, qboolean check_spawn )
{
char *spawn_entity;
int flags;
@@ -210,7 +210,7 @@ Goes directly to a given map without any savegame archiving.
For development work
==================
*/
void SV_Map_f( void )
static void SV_Map_f( void )
{
char mapname[MAX_QPATH];
@@ -240,7 +240,7 @@ Lists maps according to given substring.
TODO: Make it more convenient. (Timestamp check, temporary file, ...)
==================
*/
void SV_Maps_f( void )
static void SV_Maps_f( void )
{
const char *separator = "-------------------";
const char *argStr = Cmd_Argv( 1 ); // Substr
@@ -275,7 +275,7 @@ SV_MapBackground_f
Set background map (enable physics in menu)
==================
*/
void SV_MapBackground_f( void )
static void SV_MapBackground_f( void )
{
char mapname[MAX_QPATH];
@@ -315,7 +315,7 @@ Change map for next in alpha-bethical ordering
For development work
==================
*/
void SV_NextMap_f( void )
static void SV_NextMap_f( void )
{
char nextmap[MAX_QPATH];
int i, next;
@@ -366,7 +366,7 @@ SV_NewGame_f
==============
*/
void SV_NewGame_f( void )
static void SV_NewGame_f( void )
{
if( Cmd_Argc() != 1 )
{
@@ -383,7 +383,7 @@ SV_HazardCourse_f
==============
*/
void SV_HazardCourse_f( void )
static void SV_HazardCourse_f( void )
{
if( Cmd_Argc() != 1 )
{
@@ -406,7 +406,7 @@ SV_Load_f
==============
*/
void SV_Load_f( void )
static void SV_Load_f( void )
{
char path[MAX_QPATH];
@@ -426,7 +426,7 @@ SV_QuickLoad_f
==============
*/
void SV_QuickLoad_f( void )
static void SV_QuickLoad_f( void )
{
Cbuf_AddText( "echo Quick Loading...; wait; load quick" );
}
@@ -437,7 +437,7 @@ SV_Save_f
==============
*/
void SV_Save_f( void )
static void SV_Save_f( void )
{
qboolean ret = false;
@@ -464,7 +464,7 @@ SV_QuickSave_f
==============
*/
void SV_QuickSave_f( void )
static void SV_QuickSave_f( void )
{
Cbuf_AddText( "echo Quick Saving...; wait; save quick" );
}
@@ -475,7 +475,7 @@ SV_DeleteSave_f
==============
*/
void SV_DeleteSave_f( void )
static void SV_DeleteSave_f( void )
{
if( Cmd_Argc() != 2 )
{
@@ -494,7 +494,7 @@ SV_AutoSave_f
==============
*/
void SV_AutoSave_f( void )
static void SV_AutoSave_f( void )
{
if( Cmd_Argc() != 1 )
{
@@ -513,7 +513,7 @@ SV_Restart_f
restarts current level
==================
*/
void SV_Restart_f( void )
static void SV_Restart_f( void )
{
// because restart can be multiple issued
if( sv.state != ss_active )
@@ -528,7 +528,7 @@ SV_Reload_f
continue from latest savedgame
==================
*/
void SV_Reload_f( void )
static void SV_Reload_f( void )
{
// because reload can be multiple issued
if( GameState->nextstate != STATE_RUNFRAME )
@@ -545,7 +545,7 @@ SV_ChangeLevel_f
classic change level
==================
*/
void SV_ChangeLevel_f( void )
static void SV_ChangeLevel_f( void )
{
if( Cmd_Argc() != 2 )
{
@@ -563,7 +563,7 @@ SV_ChangeLevel2_f
smooth change level
==================
*/
void SV_ChangeLevel2_f( void )
static void SV_ChangeLevel2_f( void )
{
if( Cmd_Argc() != 3 )
{
@@ -581,7 +581,7 @@ SV_Kick_f
Kick a user off of the server
==================
*/
void SV_Kick_f( void )
static void SV_Kick_f( void )
{
sv_client_t *cl;
const char *param;
@@ -612,7 +612,7 @@ void SV_Kick_f( void )
SV_EntPatch_f
==================
*/
void SV_EntPatch_f( void )
static void SV_EntPatch_f( void )
{
const char *mapname;
@@ -638,7 +638,7 @@ void SV_EntPatch_f( void )
SV_Status_f
================
*/
void SV_Status_f( void )
static void SV_Status_f( void )
{
sv_client_t *cl;
int i;
@@ -687,7 +687,7 @@ void SV_Status_f( void )
SV_ConSay_f
==================
*/
void SV_ConSay_f( void )
static void SV_ConSay_f( void )
{
const char *p;
char text[MAX_SYSPATH];
@@ -730,7 +730,7 @@ SV_ServerInfo_f
Examine or change the serverinfo string
===========
*/
void SV_ServerInfo_f( void )
static void SV_ServerInfo_f( void )
{
convar_t *var;
@@ -774,7 +774,7 @@ SV_LocalInfo_f
Examine or change the localinfo string
===========
*/
void SV_LocalInfo_f( void )
static void SV_LocalInfo_f( void )
{
if( Cmd_Argc() == 1 )
{
@@ -806,7 +806,7 @@ SV_ClientInfo_f
Examine all a users info strings
===========
*/
void SV_ClientInfo_f( void )
static void SV_ClientInfo_f( void )
{
sv_client_t *cl;
@@ -832,7 +832,7 @@ SV_ClientUserAgent_f
Examine useragent strings
===========
*/
void SV_ClientUserAgent_f( void )
static void SV_ClientUserAgent_f( void )
{
sv_client_t *cl;
@@ -857,7 +857,7 @@ SV_KillServer_f
Kick everyone off, possibly in preparation for a new game
===============
*/
void SV_KillServer_f( void )
static void SV_KillServer_f( void )
{
Host_ShutdownServer();
}
@@ -869,7 +869,7 @@ SV_PlayersOnly_f
disable plhysics but players
===============
*/
void SV_PlayersOnly_f( void )
static void SV_PlayersOnly_f( void )
{
if( !Cvar_VariableInteger( "sv_cheats" )) return;
@@ -884,7 +884,7 @@ SV_EdictUsage_f
===============
*/
void SV_EdictUsage_f( void )
static void SV_EdictUsage_f( void )
{
int active;
@@ -906,7 +906,7 @@ SV_EntityInfo_f
===============
*/
void SV_EntityInfo_f( void )
static void SV_EntityInfo_f( void )
{
edict_t *ent;
int i;
@@ -950,7 +950,7 @@ Rcon_Redirect_f
Force redirect N lines of console output to client
================
*/
void Rcon_Redirect_f( void )
static void Rcon_Redirect_f( void )
{
int lines = 2000;

View File

@@ -16,7 +16,7 @@ GNU General Public License for more details.
#include "common.h"
#include "server.h"
void SV_CreateCustomizationList( sv_client_t *cl )
static void SV_CreateCustomizationList( sv_client_t *cl )
{
resource_t *pResource;
customization_t *pList, *pCust;
@@ -61,7 +61,7 @@ void SV_CreateCustomizationList( sv_client_t *cl )
}
}
qboolean SV_FileInConsistencyList( const char *filename, consistency_t **ppout )
static qboolean SV_FileInConsistencyList( const char *filename, consistency_t **ppout )
{
int i;
@@ -246,7 +246,7 @@ void SV_TransferConsistencyInfo( void )
sv.num_consistency = total;
}
void SV_SendConsistencyList( sv_client_t *cl, sizebuf_t *msg )
static void SV_SendConsistencyList( sv_client_t *cl, sizebuf_t *msg )
{
int i, lastcheck;
int delta;
@@ -288,7 +288,7 @@ void SV_SendConsistencyList( sv_client_t *cl, sizebuf_t *msg )
MSG_WriteOneBit( msg, 0 );
}
qboolean SV_CheckFile( sizebuf_t *msg, const char *filename )
static qboolean SV_CheckFile( sizebuf_t *msg, const char *filename )
{
resource_t p;
@@ -337,7 +337,7 @@ void SV_AddToResourceList( resource_t *pResource, resource_t *pList )
pList->pPrev = pResource;
}
void SV_SendCustomization( sv_client_t *cl, int playernum, resource_t *pResource )
static void SV_SendCustomization( sv_client_t *cl, int playernum, resource_t *pResource )
{
MSG_BeginServerCmd( &cl->netchan.message, svc_customization );
MSG_WriteByte( &cl->netchan.message, playernum ); // playernum
@@ -410,7 +410,7 @@ int SV_EstimateNeededResources( sv_client_t *cl )
return size;
}
void SV_Customization( sv_client_t *pClient, resource_t *pResource, qboolean bSkipPlayer )
static void SV_Customization( sv_client_t *pClient, resource_t *pResource, qboolean bSkipPlayer )
{
int i, nPlayerNumber = -1;
sv_client_t *cl;
@@ -435,7 +435,7 @@ void SV_Customization( sv_client_t *pClient, resource_t *pResource, qboolean bSk
}
}
void SV_PropagateCustomizations( sv_client_t *pHost )
static void SV_PropagateCustomizations( sv_client_t *pHost )
{
customization_t *pCust;
resource_t *pResource;
@@ -459,7 +459,7 @@ void SV_PropagateCustomizations( sv_client_t *pHost )
}
}
void SV_RegisterResources( sv_client_t *pHost )
static void SV_RegisterResources( sv_client_t *pHost )
{
resource_t *pResource;
@@ -470,7 +470,7 @@ void SV_RegisterResources( sv_client_t *pHost )
}
}
qboolean SV_UploadComplete( sv_client_t *cl )
static qboolean SV_UploadComplete( sv_client_t *cl )
{
if( &cl->resourcesneeded != cl->resourcesneeded.pNext )
return false;

View File

@@ -286,31 +286,8 @@ typedef struct ipfilter_s
static ipfilter_t *ipfilter = NULL;
static void SV_CleanExpiredIPFilters( void )
{
ipfilter_t *f, **back;
back = &ipfilter;
while( 1 )
{
f = *back;
if( !f ) return;
if( f->endTime && host.realtime > f->endTime )
{
*back = f->next;
back = &f->next;
Mem_Free( f );
}
else back = &f->next;
}
}
static int SV_FilterToString( char *dest, size_t size, qboolean config, ipfilter_t *f )
{
const char *strformat;
if( config )
{
return Q_snprintf( dest, size, "addip 0 %s/%d\n", NET_AdrToString( f->adr ), f->prefixlen );
@@ -379,6 +356,9 @@ qboolean SV_CheckIP( netadr_t *adr )
for( ; entry; entry = entry->next )
{
if( entry->endTime && host.realtime > entry->endTime )
continue; // expired
switch( entry->adr.type6 )
{
case NA_IP:
@@ -600,7 +580,7 @@ void SV_ShutdownFilter( void )
#include "tests.h"
void Test_StringToFilterAdr( void )
static void Test_StringToFilterAdr( void )
{
ipfilter_t f1;
int i;
@@ -669,7 +649,7 @@ void Test_StringToFilterAdr( void )
}
}
void Test_IPFilterIncludesIPFilter( void )
static void Test_IPFilterIncludesIPFilter( void )
{
qboolean ret;
const char *adrs[] =

View File

@@ -180,7 +180,7 @@ SV_FindBestBaseline
trying to deltas with previous entities
=============
*/
int SV_FindBestBaseline( sv_client_t *cl, int index, entity_state_t **baseline, entity_state_t *to, client_frame_t *frame, qboolean player )
static int SV_FindBestBaseline( sv_client_t *cl, int index, entity_state_t **baseline, entity_state_t *to, client_frame_t *frame, qboolean player )
{
int bestBitCount;
int i, bitCount;
@@ -515,7 +515,7 @@ SV_EmitPings
=============
*/
void SV_EmitPings( sizebuf_t *msg )
static void SV_EmitPings( sizebuf_t *msg )
{
sv_client_t *cl;
int packet_loss;
@@ -547,7 +547,7 @@ SV_WriteClientdataToMessage
==================
*/
void SV_WriteClientdataToMessage( sv_client_t *cl, sizebuf_t *msg )
static void SV_WriteClientdataToMessage( sv_client_t *cl, sizebuf_t *msg )
{
clientdata_t nullcd;
clientdata_t *from_cd, *to_cd;
@@ -634,7 +634,7 @@ SV_WriteEntitiesToClient
==================
*/
void SV_WriteEntitiesToClient( sv_client_t *cl, sizebuf_t *msg )
static void SV_WriteEntitiesToClient( sv_client_t *cl, sizebuf_t *msg )
{
client_frame_t *frame;
entity_state_t *state;
@@ -706,7 +706,7 @@ FRAME UPDATES
SV_SendClientDatagram
=======================
*/
void SV_SendClientDatagram( sv_client_t *cl )
static void SV_SendClientDatagram( sv_client_t *cl )
{
byte msg_buf[MAX_DATAGRAM];
sizebuf_t msg;
@@ -752,7 +752,7 @@ void SV_SendClientDatagram( sv_client_t *cl )
SV_UpdateUserInfo
=======================
*/
void SV_UpdateUserInfo( sv_client_t *cl )
static void SV_UpdateUserInfo( sv_client_t *cl )
{
SV_FullClientUpdate( cl, &sv.reliable_datagram );
ClearBits( cl->flags, FCL_RESEND_USERINFO );
@@ -764,7 +764,7 @@ void SV_UpdateUserInfo( sv_client_t *cl )
SV_UpdateToReliableMessages
=======================
*/
void SV_UpdateToReliableMessages( void )
static void SV_UpdateToReliableMessages( void )
{
sv_client_t *cl;
int i;

View File

@@ -1209,7 +1209,7 @@ static edict_t* SV_AllocPrivateData( edict_t *ent, string_t className )
if( !SpawnEdict )
{
Con_Printf( S_ERROR "No spawn function for %s\n", STRING( className ));
Con_Printf( S_ERROR "No spawn function for \"%s\"\n", pszClassName );
// free entity immediately
SV_FreeEdict( ent );
@@ -4796,7 +4796,7 @@ static enginefuncs_t gEngfuncs =
Delta_UnsetFieldByIndex,
pfnSetGroupMask,
pfnCreateInstancedBaseline,
pfnCVarDirectSet,
(void*)Cvar_DirectSet,
pfnForceUnmodified,
pfnGetPlayerStats,
Cmd_AddServerCommand,

View File

@@ -27,6 +27,17 @@ server_t sv; // local server
server_static_t svs; // persistant server info
svgame_static_t svgame; // persistant game info
/*
==================
Host_SetServerState
==================
*/
static void Host_SetServerState( int state )
{
Cvar_FullSet( "host_serverstate", va( "%i", state ), FCVAR_READ_ONLY );
sv.state = state;
}
/*
================
SV_AddResource
@@ -56,7 +67,7 @@ SV_SendSingleResource
hot precache on a flying
================
*/
void SV_SendSingleResource( const char *name, resourcetype_t type, int index, byte flags )
static void SV_SendSingleResource( const char *name, resourcetype_t type, int index, byte flags )
{
resource_t *pResource = &sv.resources[sv.num_resources];
int nSize = 0;
@@ -284,7 +295,22 @@ static resourcetype_t SV_DetermineResourceType( const char *filename )
return t_generic;
}
void SV_ReadResourceList( const char *filename )
static const char *SV_GetResourceTypeName( resourcetype_t restype )
{
switch( restype )
{
case t_decal: return "decal";
case t_eventscript: return "eventscript";
case t_generic: return "generic";
case t_model: return "model";
case t_skin: return "skin";
case t_sound: return "sound";
case t_world: return "world";
default: return "unknown";
}
}
static void SV_ReadResourceList( const char *filename )
{
string token;
byte *afile;
@@ -306,7 +332,7 @@ void SV_ReadResourceList( const char *filename )
COM_FixSlashes( token );
restype = SV_DetermineResourceType( token );
Con_DPrintf( " %s (%s)\n", token, COM_GetResourceTypeName( restype ));
Con_DPrintf( " %s (%s)\n", token, SV_GetResourceTypeName( restype ));
switch( restype )
{
// TODO do we need to handle other resource types specifically too?
@@ -334,7 +360,7 @@ SV_CreateGenericResources
loads external resource list
================
*/
void SV_CreateGenericResources( void )
static void SV_CreateGenericResources( void )
{
string filename;
@@ -353,7 +379,7 @@ SV_CreateResourceList
add resources to common list
================
*/
void SV_CreateResourceList( void )
static void SV_CreateResourceList( void )
{
qboolean ffirstsent = false;
int i, nSize;
@@ -418,7 +444,7 @@ void SV_CreateResourceList( void )
SV_WriteVoiceCodec
================
*/
void SV_WriteVoiceCodec( sizebuf_t *msg )
static void SV_WriteVoiceCodec( sizebuf_t *msg )
{
MSG_BeginServerCmd( msg, svc_voiceinit );
MSG_WriteString( msg, VOICE_DEFAULT_CODEC );
@@ -436,14 +462,15 @@ baseline will be transmitted
INTERNAL RESOURCE
================
*/
void SV_CreateBaseline( void )
static void SV_CreateBaseline( void )
{
entity_state_t nullstate, *base;
int playermodel;
int delta_type;
int entnum;
SV_WriteVoiceCodec( &sv.signon );
if( svs.maxclients > 1 )
SV_WriteVoiceCodec( &sv.signon );
if( FBitSet( host.features, ENGINE_QUAKE_COMPATIBLE ))
playermodel = SV_ModelIndex( DEFAULT_PLAYER_PATH_QUAKE );
@@ -545,7 +572,7 @@ void SV_FreeOldEntities( void )
}
// decrement svgame.numEntities if the highest number entities died
for( ; EDICT_NUM( svgame.numEntities - 1 )->free; svgame.numEntities-- );
for( ; ( ent = EDICT_NUM( svgame.numEntities - 1 )) && ent->free; svgame.numEntities-- );
}
/*
@@ -646,14 +673,6 @@ void SV_ActivateServer( int runPhysics )
if( sv.ignored_world_decals )
Con_Printf( S_WARN "%i static decals was rejected due buffer overflow\n", sv.ignored_world_decals );
if( svs.maxclients > 1 )
{
const char *cycle = Cvar_VariableString( "mapchangecfgfile" );
if( COM_CheckString( cycle ))
Cbuf_AddTextf( "exec %s\n", cycle );
}
}
/*
@@ -666,6 +685,13 @@ deactivate server, free edicts, strings etc
void SV_DeactivateServer( void )
{
int i;
const char *cycle = Cvar_VariableString( "disconcfgfile" );
if( COM_CheckString( cycle ))
Cbuf_AddTextf( "exec %s\n", cycle );
if( COM_CheckStringEmpty( sv.name ))
Cbuf_AddTextf( "exec maps/%s_unload.cfg\n", sv.name );
if( !svs.initialized || sv.state == ss_dead )
return;
@@ -758,7 +784,7 @@ SV_SetupClients
determine the game type and prepare clients
================
*/
void SV_SetupClients( void )
static void SV_SetupClients( void )
{
qboolean changed_maxclients = false;
@@ -961,8 +987,9 @@ clients along with it.
*/
qboolean SV_SpawnServer( const char *mapname, const char *startspot, qboolean background )
{
int i, current_skill;
edict_t *ent;
int i, current_skill;
edict_t *ent;
const char *cycle;
SV_SetupClients();
@@ -980,6 +1007,13 @@ qboolean SV_SpawnServer( const char *mapname, const char *startspot, qboolean ba
svs.timestart = Sys_DoubleTime();
svs.spawncount++; // any partially connected client will be restarted
cycle = Cvar_VariableString( "mapchangecfgfile" );
if( COM_CheckString( cycle ))
Cbuf_AddTextf( "exec %s\n", cycle );
Cbuf_AddTextf( "exec maps/%s_load.cfg\n", mapname );
// let's not have any servers with no name
if( !COM_CheckString( hostname.string ))
Cvar_Set( "hostname", svgame.dllFuncs.pfnGetGameDescription ? svgame.dllFuncs.pfnGetGameDescription() : FS_Title( ));

Some files were not shown because too many files have changed in this diff Show More