* fix dirFromTarget() logic

* passing of extra damageDecl values from radiusDamage() calls

* add fun cg_modelSpin/Bob cvars

* NSActor::MaxAmmo(int) added

* NSItem::ItemPickUpCheck(entity) added

* base/ cleanup
This commit is contained in:
Marco Cawthorne 2024-09-20 09:38:02 -07:00
parent 0909b91703
commit e27e2a85ec
Signed by: eukara
GPG key ID: CE2032F0A2882A22
179 changed files with 10047 additions and 10395 deletions

11
Tools/get-plugins.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
if [ $# -lt 1 ]
then
printf "Unknown\n"
else
if [ -f "$1/PLUGINS" ]
then
head -n 1 "$1/PLUGINS"
fi
fi

View file

@ -1,6 +1,6 @@
/***
*
* Copyright (c) 2000-2022, Vera Visions. All rights reserved.
* Copyright (c) 2000-2024, Vera Visions. All rights reserved.
*
****/

View file

@ -2,3 +2,8 @@ entityDef player
{
"spawnclass" "NSClientPlayer"
}
entityDef player_mp
{
"inherit" "player"
}

View file

@ -10,26 +10,27 @@ entityDef weapon_bat
"ammoRequired" "0"
"def_dropItem" "weapon_bat"
"def_melee" "damage_bat"
"melee_distance" "32"
"def_onFire" "damage_bat"
"testDistance" "-32"
"meleeRateMiss" "0.6"
"meleeRateHit" "0.75"
"actIdle" "0,2"
"actDraw" "4"
"actHolster" "6"
"actMeleeMiss" "9,11,13"
"actMeleeHit" "8,10,12"
"act_idle" "0,2"
"act_draw" "4"
"act_holster" "6"
"act_fireFailed" "9,11,13"
"act_fire" "8,10,12"
"snd_fire" "weapon_bat.hit"
"snd_fireFailed" "weapon_bat.miss"
}
entityDef damage_bat
{
"spawnclass" "NSProjectile"
"is_bullet" "1"
"damage" "15"
"gib" "1"
"snd_hit" "weapon_bat.hit"
"snd_miss" "weapon_bat.miss"
}
// Pistol
@ -48,14 +49,14 @@ entityDef weapon_pistol
"fireRate" ".2"
"snd_fire" "weapon_pistol.fire"
"actFire" "14,16"
"actFireLast" "15,17"
"actReload" "8"
"actReloadEmpty" "9"
"actDrawEmpty" "3"
"actDraw" "2"
"actIdleEmpty" "1"
"actIdle" "0"
"act_fire" "14,16"
"act_fireLast" "15,17"
"act_reload" "8"
"act_reloadEmpty" "9"
"act_drawEmpty" "3"
"act_draw" "2"
"act_idleEmpty" "1"
"act_idle" "0"
}
entityDef projectile_pistol
@ -80,11 +81,11 @@ entityDef weapon_frag
"def_dropItem" "weapon_frag"
"def_onRelease" "projectile_frag"
"actIdle" "0"
"actDraw" "1"
"actHolster" "2"
"actFire" "4"
"actRelease" "6"
"act_idle" "0"
"act_draw" "1"
"act_holster" "2"
"act_fire" "4"
"act_release" "6"
}
entityDef projectile_frag
@ -101,7 +102,6 @@ entityDef projectile_frag
"snd_explode" "fx.explosion"
"snd_bounce" "weapon_frag.bounce"
"decal_detonate" "ExplosionScorch"
"def_damage" "damage_fragDirect"
"def_splash_damage" "damage_fragSplash"
}
@ -116,9 +116,3 @@ entityDef damage_fragSplash
"damage" "150"
"radius" "250"
}
entityDef env_frag_explodeinhand
{
"spawnclass" "idAnimatedEntity"
"model" "grenadeExplosion.prt"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 812 B

After

Width:  |  Height:  |  Size: 786 B

View file

@ -1,153 +0,0 @@
// This file is not meant to be edited.
// It sets defaults to wrangle the engine into
// acting more useful towards our goals and agenda
// You can find Nuclide specific cvars in `cvars.cfg`
// default console font size is 12 pixels, negative values specifies explicit size
seta con_textsize -12
// console background should be opaque so we can read it properly
seta scr_conalpha 1
// idlefps 0 means we will match cl_maxfps
seta cl_idlefps 0
// forces CSQC to take the pvs of an entity into account on its end
seta r_ignoreentpvs 0
// required for spray logos
seta _pext_infoblobs 1
// required for speedy patch/curve collision
seta _q3bsp_bihtraces 1
// required for some custom prop entities
seta sv_gameplayfix_setmodelsize_qw 1
// required so that Quake does not round to the nearest hull or whatever
seta sv_gameplayfix_setmodelrealbox 1
// load console font in HL format
seta gl_font 0
seta gl_font fonts/squaregear/whitrabt.ttf
// sensible texture filtering default
seta gl_texturemode GL_LINEAR_MIPMAP_LINEAR
// sensible mipcap default
seta d_mipcap 0 1000
// sensible texture max size
seta gl_max_size 8192
// no affine texture projection on models by default
seta gl_affinemodels 0
// don't blend sprites by default
seta gl_blendsprites 0
// no flashblend by default
seta gl_flashblend 0
// we assume overbright 2 for best dynamic range
seta gl_overbright 2
// we assume highest texture quality
seta gl_picmip 0
// allow overlays like cshifts
seta gl_polyblend 1
// allow specular...
seta gl_specular 1
// but the engine forces a fallback, which is applied on everything, kill that
seta gl_specular_fallback 0
// set kernel dithering for defaultwall/defaultskin to 0
seta gl_kdither 0
// cull models out of the view to avoid e.g. shotgun shell clipping in HL
seta gl_mindist 4
// allow interpolation of entities
seta cl_nolerp 0
// allow interpolation between framegroups
seta r_noframegrouplerp 0
// allow interpolation between frames
seta r_nolerp 0
// not what you think this means, turning this to 1 disables diffusemap rendering
seta r_lightmap 0
// we want hdr quality lightmaps by default
seta r_lightmap_format e5bgr9
// we want vanilla lightmap saturation by default
seta r_lightmap_saturation 1
// allow models to respect light direction
seta r_nolightdir 0
// respect colored lighting files
seta r_loadlit 1
// FBO setting, render 1:1 framebuffer to our window
seta r_renderscale 1
// disable offset/parallax mapping
seta r_glsl_offsetmapping 0
// disable softwarebanding
seta r_softwarebanding 0
// disable any possible overlay we might have
seta r_postprocshader ""
// disable low dynamic range light clamping
seta gl_ldr 0
// allow fullbright colors on brush models
seta r_fb_bmodels 1
// allow fullbright colors on models
seta r_fb_models 1
// shadows
seta r_shadows 1
seta r_shadow_realtime_dlight 1
seta r_shadow_realtime_dlight_shadows 1
seta r_shadow_realtime_world 1
// disable bloom
seta r_bloom 0
// disable engine coronas
seta r_coronas 0
// enable deluxe mapping on maps that support it
seta r_deluxemapping 1
// allow static entities like flames
seta r_drawflame 1
// don't render the world flat shaded
seta r_drawflat 0
// allow dlights, colored ones at that (2 forces all to be monochrome like Q1)
seta r_dynamic 1
// full quality sky setting
seta r_fastsky 0
// classic liquid style rendering
seta r_lavastyle 1
seta r_waterstyle 1
seta r_slimestyle 1
seta r_telestyle 1
// disable stain mapping
seta r_stains 0
// enable the waterwarp shader
seta r_waterwarp 1
// allow scripted particles
seta r_particledesc "default"
// control gamma via glsl when in windowed mode
seta vid_hardwaregamma 1
// because the defaul cursor scale is not 1 apparently
seta cl_cursor_scale "1"
// disable any extra bob the engine may have.
seta cl_bob "0"
// allow people to look up almost all the way
seta maxpitch "89"
// ditto, but for downwards viewing
seta minpitch "-89"
// this fixes model pitches, otherwise all of our angle math would need *= -1 on x
seta r_meshpitch "1"
// default bob values for Nuclide
seta v_bob "0.01"
seta v_bobcycle "0.8"
seta v_bobup "0.5"
// disable engine side content blends, let the client-game handle it
seta v_contentblend "0"
// people hate having to manually save configs
seta cfg_save_auto "1"
// menu doesn't need to operate at more than 60 fps
seta cl_idlefps "60"
// game shouldn't need to run at more than 250 fps right now
seta cl_maxfps "250"
// allow native code if it's there I guess
seta com_nogamedirnativecode "0"
// don't log centerprints
seta con_logcenterprint "0"
// don't display regular prints in the top corner
seta con_notifylines "0"
// set a default locale, because the engine won't
seta lang "en_us"
// external texture formats that we recognize
seta r_imageextensions "bmp dds jpg ktx pcx png tga vtf"
// store screenshots in TrueVision Targa by default
seta scr_sshot_type "tga"
// don't force music loops
seta media_repeat "0"
// set master servers
exec masters.lst
// load in Nuclide specific cvars
exec cvars.cfg

View file

@ -1,7 +0,0 @@
// Uncomment the ones you'd like to use
//banner.dat
//chatfilter.dat
//chatsounds.dat
//connectsounds.dat
//ircbridge.dat
//voxannouncer.dat

View file

@ -1,84 +0,0 @@
/*
* Copyright (c) 2016-2021 Marco Cawthorne <marco@icculus.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
struct
{
float m_flSpeed;
float m_flFracSin;
float m_flTime;
float m_flMove;
float m_flDelta;
int m_iCycle;
} g_camBobVars[4], *pCamBob;
/* tilts the camera for a head-bob like effect when moving */
vector
Camera_RunBob(vector camera_angle)
{
if (!autocvar(v_cambob, 1, "Enables bobbing effect for the first-person camera"))
return camera_angle;
int s = (float)getproperty(VF_ACTIVESEAT);
pCamBob = &g_camBobVars[s];
/* we don't really care about the vertical velocity */
vector speed = pSeat->m_vecPredictedVelocity;
speed[2] = 0.0f;
pCamBob->m_flSpeed = vlen(speed);
if (pCamBob->m_flSpeed > 330.0f)
pCamBob->m_flSpeed = 330.0f;
/* don't bother on low speeds */
if ( pCamBob->m_flSpeed < 5.0f ) {
pCamBob->m_flMove = 0.0f;
pCamBob->m_flTime = 0.0f; /* progress has halted, start anew */
return camera_angle;
} else {
pCamBob->m_flMove = frametime * (pCamBob->m_flSpeed * 0.01);
}
pCamBob->m_flTime = (pCamBob->m_flTime += pCamBob->m_flMove);
pCamBob->m_flFracSin = fabs(sin(pCamBob->m_flTime * M_PI));
pCamBob->m_iCycle = (int)pCamBob->m_flTime;
pCamBob->m_flDelta = (pCamBob->m_flFracSin * 0.0025f) * pCamBob->m_flSpeed;
camera_angle[0] += pCamBob->m_flDelta;
if (pCamBob->m_iCycle & 1) {
pCamBob->m_flDelta = -pCamBob->m_flDelta;
}
camera_angle[2] += pCamBob->m_flDelta;
return camera_angle;
}
/* applies a tilt to the camera for when we're strafing left to right */
vector
Camera_StrafeRoll(vector camera_angle)
{
if (!autocvar(v_camroll, 0, "Enables strafe-roll for the first-person camera"))
return camera_angle;
float roll;
makevectors(camera_angle);
roll = dotproduct(pSeat->m_vecPredictedVelocity, v_right);
roll *= 0.015f;
camera_angle[2] += roll;
return camera_angle;
}

View file

@ -1,27 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* This is where custom game-specific commands go!
* You'll also inherit all the commands defined in entry.c */
int
ClientGame_ConsoleCommand(void)
{
switch(argv(0)) {
default:
return (0);
}
return (1);
}

View file

@ -1,27 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
void
ClientGame_PreDraw(void)
{
}
void
ClientGame_PostDraw(void)
{
}

View file

@ -1,26 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
int
ClientGame_EntityUpdate(float id, float new)
{
switch (id) {
default:
return (0);
}
return (1);
}

View file

@ -1,39 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
int
ClientGame_EventParse(float fHeader)
{
switch (fHeader) {
case EV_CHAT:
float fSender = readbyte();
float fTeam = readbyte();
string sMessage = readstring();
CSQC_Parse_Print(sprintf("%s: %s", getplayerkeyvalue(fSender, "name"), sMessage), PRINT_CHAT);
break;
case EV_CHAT_TEAM:
float fSender2 = readbyte();
float fTeam2 = readbyte();
string sMessage2 = readstring();
CSQC_Parse_Print(sprintf("[TEAM] %s: %s", getplayerkeyvalue(fSender2, "name"), sMessage2), PRINT_CHAT);
break;
default:
return (0);
}
return (1);
}

View file

@ -1,53 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
const float baseIconSize = 32.0;
const float baseIconPadding = 16.0;
/* main entry */
void
HUD_Init(void)
{
}
/* main entry */
void
HUD_Draw(void)
{
vector hudSize = g_view.GetHUDCanvasSize();
vector iconPos = g_view.GetHUDCanvasPos() + (hudSize / 2);
iconPos[1] = (hudSize[1] - baseIconSize) - baseIconPadding;
/* health, armor icons */
Font_DrawRText(iconPos + [-((baseIconSize/2) + (baseIconPadding/2)) - baseIconPadding, 0], "100", FONT_16);
drawpic(iconPos + [-((baseIconSize/2) + (baseIconPadding/2)), 0], "gfx/hud/health", [baseIconSize, baseIconSize], [1,1,1], 1.0f);
Font_DrawText(iconPos + [(baseIconSize/2) + (baseIconPadding/2) + baseIconSize + baseIconPadding, 0], "100", FONT_16);
drawpic(iconPos + [(baseIconSize/2) + (baseIconPadding/2), 0], "gfx/hud/armor", [baseIconSize, baseIconSize], [1,1,1], 1.0f);
/* little point in not drawing these, even if you don't have a suit */
if (pl.m_activeWeapon) {
pl.m_activeWeapon.UpdateGUI();
}
Textmenu_Draw();
}
/* specatator main entry */
void
HUD_DrawSpectator(void)
{
}

View file

@ -1,37 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/*
=================
ClientGame_Init
Comparable to worldspawn in SSQC in that it's mostly used for precaches
=================
*/
void
ClientGame_Init(float apilevel, string enginename, float engineversion)
{
}
void
ClientGame_InitDone(void)
{
}
void
ClientGame_RendererRestart(string rstr)
{
}

521
base/src/client/main.qc Normal file
View file

@ -0,0 +1,521 @@
/*
* Copyright (c) 2016-2021 Marco Cawthorne <marco@icculus.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
struct
{
float m_flSpeed;
float m_flFracSin;
float m_flTime;
float m_flMove;
float m_flDelta;
int m_iCycle;
} g_camBobVars[4], *pCamBob;
/* tilts the camera for a head-bob like effect when moving */
vector
Camera_RunBob(vector camera_angle)
{
if (!autocvar(v_cambob, 1, "Enables bobbing effect for the first-person camera"))
return camera_angle;
int s = (float)getproperty(VF_ACTIVESEAT);
pCamBob = &g_camBobVars[s];
/* we don't really care about the vertical velocity */
vector speed = pSeat->m_vecPredictedVelocity;
speed[2] = 0.0f;
pCamBob->m_flSpeed = vlen(speed);
if (pCamBob->m_flSpeed > 330.0f)
pCamBob->m_flSpeed = 330.0f;
/* don't bother on low speeds */
if ( pCamBob->m_flSpeed < 5.0f ) {
pCamBob->m_flMove = 0.0f;
pCamBob->m_flTime = 0.0f; /* progress has halted, start anew */
return camera_angle;
} else {
pCamBob->m_flMove = frametime * (pCamBob->m_flSpeed * 0.01);
}
pCamBob->m_flTime = (pCamBob->m_flTime += pCamBob->m_flMove);
pCamBob->m_flFracSin = fabs(sin(pCamBob->m_flTime * M_PI));
pCamBob->m_iCycle = (int)pCamBob->m_flTime;
pCamBob->m_flDelta = (pCamBob->m_flFracSin * 0.0025f) * pCamBob->m_flSpeed;
camera_angle[0] += pCamBob->m_flDelta;
if (pCamBob->m_iCycle & 1) {
pCamBob->m_flDelta = -pCamBob->m_flDelta;
}
camera_angle[2] += pCamBob->m_flDelta;
return camera_angle;
}
/* applies a tilt to the camera for when we're strafing left to right */
vector
Camera_StrafeRoll(vector camera_angle)
{
if (!autocvar(v_camroll, 0, "Enables strafe-roll for the first-person camera"))
return camera_angle;
float roll;
makevectors(camera_angle);
roll = dotproduct(pSeat->m_vecPredictedVelocity, v_right);
roll *= 0.015f;
camera_angle[2] += roll;
return camera_angle;
}
int
ClientGame_ConsoleCommand(void)
{
switch(argv(0)) {
default:
return (0);
}
return (1);
}
void
ClientGame_PreDraw(void)
{
}
void
ClientGame_PostDraw(void)
{
}
int
ClientGame_EntityUpdate(float id, float new)
{
switch (id) {
default:
return (0);
}
return (1);
}
int
ClientGame_EventParse(float fHeader)
{
switch (fHeader) {
default:
return (0);
}
return (1);
}
const float baseIconSize = 32.0;
const float baseIconPadding = 16.0;
void
HUD_Init(void)
{
}
void
HUD_Draw(void)
{
NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer;
vector hudSize = g_view.GetHUDCanvasSize();
vector iconPos = g_view.GetHUDCanvasPos() + (hudSize / 2);
iconPos[1] = (hudSize[1] - baseIconSize) - baseIconPadding;
string healthValue = ftos(pl.health);
string armorValue = ftos(pl.armor);
/* health, armor icons */
Font_DrawRText(iconPos + [-((baseIconSize/2) + (baseIconPadding/2)) - baseIconPadding, 0], healthValue, FONT_16);
drawpic(iconPos + [-((baseIconSize/2) + (baseIconPadding/2)), 0], "gfx/hud/health", [baseIconSize, baseIconSize], [1,1,1], 1.0f);
Font_DrawText(iconPos + [(baseIconSize/2) + (baseIconPadding/2) + baseIconSize + baseIconPadding, 0], armorValue, FONT_16);
drawpic(iconPos + [(baseIconSize/2) + (baseIconPadding/2), 0], "gfx/hud/armor", [baseIconSize, baseIconSize], [1,1,1], 1.0f);
/* little point in not drawing these, even if you don't have a suit */
if (pl.m_activeWeapon) {
pl.m_activeWeapon.UpdateGUI();
}
Textmenu_Draw();
}
void
HUD_DrawSpectator(void)
{
}
void
ClientGame_Init(float apilevel, string enginename, float engineversion)
{
}
void
ClientGame_InitDone(void)
{
}
void
ClientGame_RendererRestart(string rstr)
{
}
#define SCORE_HEADER_C [255/255,156/255,0]
#define SCORE_LINE_C [255/255,200/255,0]
var int autocvar_cl_centerscores = FALSE;
var int g_scores_teamplay = 0;
void
Scores_Init(void)
{
g_scores_teamplay = (int)serverkeyfloat("teamplay");
}
void
Scores_DrawTeam(NSClientPlayer pl, vector pos)
{
drawfill(pos, [290, 1], SCORE_LINE_C, 1.0f, DRAWFLAG_ADDITIVE);
drawfont = Font_GetID(FONT_20);
drawstring(pos + [0,-18], "Teams", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [124,-18], "kills / deaths", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [240,-18], "latency", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
pos[1] += 12;
for (int t = 1; t <= serverkeyfloat("teams"); t++) {
float l;
string temp;
drawstring(pos, serverkey(sprintf("team_%i", t)), [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
temp = serverkey(sprintf("teamscore_%i", t));
l = stringwidth(temp, FALSE, [8,8]);
drawstring(pos + [150-l, 0], temp, [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [158, 0], "wins", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
pos[1] += 16;
for (int i = -1; i > -32; i--) {
if (getplayerkeyfloat(i, "*team") != t) {
continue;
}
temp = getplayerkeyvalue(i, "name");
/* Out of players */
if (!temp) {
break;
} else if (temp == getplayerkeyvalue(pl.entnum-1, "name")) {
drawfill(pos, [290, 13], [0,0,1], 0.5f, DRAWFLAG_ADDITIVE);
}
drawstring(pos + [24,0], getplayerkeyvalue(i, "name"), [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [154,0], "/", [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Get the kills and align them left to right */
temp = getplayerkeyvalue(i, "frags");
l = stringwidth(temp, FALSE, [8,8]);
drawstring(pos + [150 - l,0], temp, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Deaths are right to left aligned */
temp = getplayerkeyvalue(i, "*deaths");
drawstring(pos + [165,0], temp, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Get the latency and align it left to right */
temp = getplayerkeyvalue(i, "ping");
l = stringwidth(temp, FALSE, [8,8]);
drawstring(pos + [290 - l,0], temp, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
pos[1] += 20;
}
pos[1] += 12;
}
drawfont = Font_GetID(FONT_CON);
}
void
Scores_DrawNormal(NSClientPlayer pl, vector pos)
{
drawfill(pos, [290, 1], SCORE_LINE_C, 1.0f, DRAWFLAG_ADDITIVE);
drawfont = Font_GetID(FONT_20);
drawstring(pos + [0,-18], "Player", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [124,-18], "kills / deaths", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [240,-18], "latency", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
pos[1] += 12;
for (int i = -1; i > -32; i--) {
float l;
string ping;
string kills;
string deaths;
string name;
name = getplayerkeyvalue(i, "name");
/* Out of players */
if (!name) {
break;
} else if (name == getplayerkeyvalue(pl.entnum-1, "name")) {
drawfill(pos, [290, 13], [0,0,1], 0.5f, DRAWFLAG_ADDITIVE);
}
drawstring(pos, getplayerkeyvalue(i, "name"), [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [154,0], "/", [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Get the kills and align them left to right */
kills = getplayerkeyvalue(i, "frags");
l = stringwidth(kills, FALSE, [8,8]);
drawstring(pos + [150 - l,0], kills, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Deaths are right to left aligned */
deaths = getplayerkeyvalue(i, "*deaths");
drawstring(pos + [165,0], deaths, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Get the latency and align it left to right */
ping = getplayerkeyvalue(i, "ping");
l = stringwidth(ping, FALSE, [8,8]);
drawstring(pos + [290 - l,0], ping, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
pos[1] += 20;
}
drawfont = Font_GetID(FONT_CON);
}
void
Scores_Draw(void)
{
vector pos;
NSClientPlayer pl;
pl = (NSClientPlayer)pSeat->m_ePlayer;
if (autocvar_cl_centerscores) {
int c = 10;
/* calculate all valid entries */
for (int i = -1; i > -32; i--) {
if (getplayerkeyvalue(i, "name")) {
break;
}
c += 10;
}
pos = video_mins + [(g_vidsize[0] / 2) - 145, (g_vidsize[1] / 2) - c];
} else {
pos = video_mins + [(g_vidsize[0] / 2) - 145, 30];
}
if (Util_IsTeamplay()) {
Scores_DrawTeam(pl, pos);
} else {
Scores_DrawNormal(pl, pos);
}
}
#define BOB_STRENGTH 0.02
#define BOB_CYCLE 1.0
#define BOB_UP 0.60
var vector autocvar_bg_bobAmplitudeDucked = [0.0075, 0.0065, 0.0000];
var vector autocvar_bg_bobAmplitudeProne = [0.02, 0.005, 0.0000];
var vector autocvar_bg_bobAmplitudeSprinting = [0.02, 0.014, 0.0000];
var vector autocvar_bg_bobAmplitudeStanding = [0.007, 0.007, 0.0000];
var float autocvar_bg_bobMax = 8.0;
var float autocvar_player_sprintCameraBob = 0.5;
struct
{
float m_flBobTime;
float m_flBobTime2;
float m_flBob;
float m_flBob2;
float m_flBobCycle;
float m_flBobCycle2;
float m_flSpeed;
float m_flViewBob;
float m_flViewBob2;
} g_viewBobVars[4], *pViewBob;
/* bob vars are calculated separately from application, so that if there's
* more than one viewmodel we won't affect the speed of the bob by running
* the math too many times */
void
Viewmodel_CalcBob(void)
{
int s = (float)getproperty(VF_ACTIVESEAT);
pViewBob = &g_viewBobVars[s];
vector vecVel;
float flBob;
float var_bob;
float var_cycle;
float var_up;
bool isSprinting = pSeat->m_ePlayer.vv_flags & VFL_SPRINTING;
bool isCrouching = pSeat->m_ePlayer.vv_flags & VFL_CROUCHING;
// if (pSeatLocal->m_iSprinting && vlen(pSeat->m_vecPredictedVelocity) > 240)
// isSprinting = true;
var_bob = BOB_STRENGTH;
var_cycle = BOB_CYCLE;
var_up = BOB_UP;
if (isSprinting)
var_cycle *= autocvar_player_sprintCameraBob;
pViewBob->m_flBobTime += frametime;
pViewBob->m_flBobCycle = pViewBob->m_flBobTime - (int)(pViewBob->m_flBobTime / var_cycle) * var_cycle;
pViewBob->m_flBobCycle /= var_cycle;
if (pViewBob->m_flBobCycle < var_up) {
pViewBob->m_flBobCycle = MATH_PI * pViewBob->m_flBobCycle / var_up;
} else {
pViewBob->m_flBobCycle = MATH_PI + MATH_PI * (pViewBob->m_flBobCycle - var_up)/(1.0 - var_up);
}
vecVel = pSeat->m_vecPredictedVelocity;
vecVel[2] = 0;
pViewBob->m_flSpeed = vlen(vecVel);
flBob = pViewBob->m_flSpeed * var_bob;
flBob = flBob * sin(pViewBob->m_flBobCycle);
pViewBob->m_flBob = flBob;
/* BOB2, which is half the cycle of bob1 */
pViewBob->m_flBobTime2 += frametime;
pViewBob->m_flBobCycle2 = pViewBob->m_flBobTime2 - (int)(pViewBob->m_flBobTime2 / (var_cycle * 0.5f)) * (var_cycle * 0.5f);
pViewBob->m_flBobCycle2 /= (var_cycle * 0.5f);
if (pViewBob->m_flBobCycle2 < var_up) {
pViewBob->m_flBobCycle2 = MATH_PI * pViewBob->m_flBobCycle2 / var_up;
} else {
pViewBob->m_flBobCycle2 = MATH_PI + MATH_PI * (pViewBob->m_flBobCycle2 - var_up)/(1.0 - var_up);
}
flBob = pViewBob->m_flSpeed * (var_bob * 0.5);
flBob = flBob * cos(pViewBob->m_flBobCycle2);
pViewBob->m_flBob2 = flBob;
if (isSprinting) {
pViewBob->m_flViewBob2 = pViewBob->m_flBob2 * autocvar_bg_bobAmplitudeSprinting[0] * 25.0f;
pViewBob->m_flViewBob = pViewBob->m_flBob * autocvar_bg_bobAmplitudeSprinting[1] * 25.0f;
pViewBob->m_flBob2 *= autocvar_bg_bobAmplitudeSprinting[0] * 20.0;
pViewBob->m_flBob *= autocvar_bg_bobAmplitudeSprinting[1] * 20.0;
} else if (isCrouching) {
pViewBob->m_flViewBob2 = pViewBob->m_flBob2 * autocvar_bg_bobAmplitudeDucked[0] * 25.0f;
pViewBob->m_flViewBob = pViewBob->m_flBob * autocvar_bg_bobAmplitudeDucked[1] * 25.0f;
pViewBob->m_flBob2 *= autocvar_bg_bobAmplitudeDucked[0] * 20.0;
pViewBob->m_flBob *= autocvar_bg_bobAmplitudeDucked[1] * 20.0;
} else {
pViewBob->m_flViewBob2 = pViewBob->m_flBob2 * autocvar_bg_bobAmplitudeStanding[0] * 25.0f;
pViewBob->m_flViewBob = pViewBob->m_flBob * autocvar_bg_bobAmplitudeStanding[1] * 25.0f;
pViewBob->m_flBob2 *= autocvar_bg_bobAmplitudeStanding[0] * 20.0;
pViewBob->m_flBob *= autocvar_bg_bobAmplitudeStanding[1] * 20.0;
}
}
void
Viewmodel_ApplyBob(entity gun)
{
int s = (float)getproperty(VF_ACTIVESEAT);
pViewBob = &g_viewBobVars[s];
float sintime;
float strength;
float kickUp;
//gun.angles[2] = pViewBob->m_flBob2 * -2.0f;
gun.angles[2] = pViewBob->m_flViewBob * 4.0f;
kickUp = pViewBob->m_flViewBob2 * 4.0f;
vector angmod = [0,0,0];
angmod[0] = pViewBob->m_flViewBob2 + kickUp;
angmod[1] = pViewBob->m_flViewBob;
//angmod[2] += pViewBob->m_flBob * 3.0f;
gun.angles += angmod;
/* sway with speed */
sintime = sin(time);
strength = pViewBob->m_flSpeed;
if (strength > 240)
strength = 240;
strength = 240 - strength;
strength *= 0.01f;
float sprint;
if (pSeat->m_ePlayer.vv_flags & VFL_SPRINTING) {
pSeat->m_flSprintLerp = bound(0.0f, pSeat->m_flSprintLerp + clframetime, 1.0f);
} else {
pSeat->m_flSprintLerp = bound(0.0f, pSeat->m_flSprintLerp - clframetime, 1.0f);
}
sprint = 20 * pSeat->m_flSprintLerp;
gun.angles[0] += sprint;
gun.angles[1] += sprint + (sprint * pViewBob->m_flBob) * 0.25f;
#ifdef WASTES
if (pSeat->m_ePlayer.gflags & GF_IS_HEALING) {
pSeatLocal->m_flHealLerp = bound(0.0f, pSeatLocal->m_flHealLerp + clframetime, 1.0f);
} else {
pSeatLocal->m_flHealLerp = bound(0.0f, pSeatLocal->m_flHealLerp - clframetime, 1.0f);
}
gun.angles[0] += pSeatLocal->m_flHealLerp * 45;
gun.origin[2] -= pSeatLocal->m_flHealLerp * 5;
#endif
gun.angles[0] += strength * sintime;
gun.angles[1] += strength * sintime;
//gun.angles[2] += strength * sintime;
gun.origin += [0,0,-1];
makevectors(g_view.GetCameraAngle());
gun.origin += v_forward * cvar("cl_gunx");
gun.origin += v_right * cvar("cl_guny");
gun.origin += v_up * cvar("cl_gunz");
/* lower gun when moving */
if (pViewBob->m_flSpeed > 10.0) {
gun.origin += (v_up * -pViewBob->m_flSpeed * 0.005f);
gun.origin += (v_right * -pViewBob->m_flSpeed * 0.005f);
}
}
vector
Camera_AddCamBob(vector cameraAngle)
{
vector angmod = g_vec_null;
makevectors(cameraAngle);
angmod = (pViewBob->m_flBob2 * -v_up);
angmod += (pViewBob->m_flBob * -v_right);
return angmod;
}

View file

@ -12,7 +12,6 @@
/* mod specific header */
defs.h
/* for VGUI elements, we want to include this (optional) */
../../../src/vgui/include.src
@ -23,15 +22,7 @@ defs.h
/* mod specific functions */
../shared/include.src
draw.qc
init.qc
entities.qc
camera.qc
cmds.qc
game_event.qc
viewmodel.qc
hud.qc
scoreboard.qc
main.qc
/* global client/shared code */
../../../src/client/include.src

View file

@ -1,168 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#define SCORE_HEADER_C [255/255,156/255,0]
#define SCORE_LINE_C [255/255,200/255,0]
var int autocvar_cl_centerscores = FALSE;
var int g_scores_teamplay = 0;
void
Scores_Init(void)
{
g_scores_teamplay = (int)serverkeyfloat("teamplay");
}
void
Scores_DrawTeam(NSClientPlayer pl, vector pos)
{
drawfill(pos, [290, 1], SCORE_LINE_C, 1.0f, DRAWFLAG_ADDITIVE);
drawfont = Font_GetID(FONT_20);
drawstring(pos + [0,-18], "Teams", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [124,-18], "kills / deaths", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [240,-18], "latency", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
pos[1] += 12;
for (int t = 1; t <= serverkeyfloat("teams"); t++) {
float l;
string temp;
drawstring(pos, serverkey(sprintf("team_%i", t)), [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
temp = serverkey(sprintf("teamscore_%i", t));
l = stringwidth(temp, FALSE, [8,8]);
drawstring(pos + [150-l, 0], temp, [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [158, 0], "wins", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
pos[1] += 16;
for (int i = -1; i > -32; i--) {
if (getplayerkeyfloat(i, "*team") != t) {
continue;
}
temp = getplayerkeyvalue(i, "name");
/* Out of players */
if (!temp) {
break;
} else if (temp == getplayerkeyvalue(pl.entnum-1, "name")) {
drawfill(pos, [290, 13], [0,0,1], 0.5f, DRAWFLAG_ADDITIVE);
}
drawstring(pos + [24,0], getplayerkeyvalue(i, "name"), [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [154,0], "/", [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Get the kills and align them left to right */
temp = getplayerkeyvalue(i, "frags");
l = stringwidth(temp, FALSE, [8,8]);
drawstring(pos + [150 - l,0], temp, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Deaths are right to left aligned */
temp = getplayerkeyvalue(i, "*deaths");
drawstring(pos + [165,0], temp, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Get the latency and align it left to right */
temp = getplayerkeyvalue(i, "ping");
l = stringwidth(temp, FALSE, [8,8]);
drawstring(pos + [290 - l,0], temp, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
pos[1] += 20;
}
pos[1] += 12;
}
drawfont = Font_GetID(FONT_CON);
}
void
Scores_DrawNormal(NSClientPlayer pl, vector pos)
{
drawfill(pos, [290, 1], SCORE_LINE_C, 1.0f, DRAWFLAG_ADDITIVE);
drawfont = Font_GetID(FONT_20);
drawstring(pos + [0,-18], "Player", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [124,-18], "kills / deaths", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [240,-18], "latency", [8,8], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
pos[1] += 12;
for (int i = -1; i > -32; i--) {
float l;
string ping;
string kills;
string deaths;
string name;
name = getplayerkeyvalue(i, "name");
/* Out of players */
if (!name) {
break;
} else if (name == getplayerkeyvalue(pl.entnum-1, "name")) {
drawfill(pos, [290, 13], [0,0,1], 0.5f, DRAWFLAG_ADDITIVE);
}
drawstring(pos, getplayerkeyvalue(i, "name"), [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
drawstring(pos + [154,0], "/", [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Get the kills and align them left to right */
kills = getplayerkeyvalue(i, "frags");
l = stringwidth(kills, FALSE, [8,8]);
drawstring(pos + [150 - l,0], kills, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Deaths are right to left aligned */
deaths = getplayerkeyvalue(i, "*deaths");
drawstring(pos + [165,0], deaths, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
/* Get the latency and align it left to right */
ping = getplayerkeyvalue(i, "ping");
l = stringwidth(ping, FALSE, [8,8]);
drawstring(pos + [290 - l,0], ping, [8,8], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
pos[1] += 20;
}
drawfont = Font_GetID(FONT_CON);
}
void
Scores_Draw(void)
{
vector pos;
NSClientPlayer pl;
pl = (NSClientPlayer)pSeat->m_ePlayer;
if (autocvar_cl_centerscores) {
int c = 10;
/* calculate all valid entries */
for (int i = -1; i > -32; i--) {
if (getplayerkeyvalue(i, "name")) {
break;
}
c += 10;
}
pos = video_mins + [(g_vidsize[0] / 2) - 145, (g_vidsize[1] / 2) - c];
} else {
pos = video_mins + [(g_vidsize[0] / 2) - 145, 30];
}
if (Util_IsTeamplay()) {
Scores_DrawTeam(pl, pos);
} else {
Scores_DrawNormal(pl, pos);
}
}

View file

@ -1,202 +0,0 @@
/*
* Copyright (c) 2016-2021 Marco Cawthorne <marco@icculus.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#define BOB_STRENGTH 0.02
#define BOB_CYCLE 1.0
#define BOB_UP 0.60
var vector autocvar_bg_bobAmplitudeDucked = [0.0075, 0.0065, 0.0000];
var vector autocvar_bg_bobAmplitudeProne = [0.02, 0.005, 0.0000];
var vector autocvar_bg_bobAmplitudeSprinting = [0.02, 0.014, 0.0000];
var vector autocvar_bg_bobAmplitudeStanding = [0.007, 0.007, 0.0000];
var float autocvar_bg_bobMax = 8.0;
var float autocvar_player_sprintCameraBob = 0.5;
struct
{
float m_flBobTime;
float m_flBobTime2;
float m_flBob;
float m_flBob2;
float m_flBobCycle;
float m_flBobCycle2;
float m_flSpeed;
float m_flViewBob;
float m_flViewBob2;
} g_viewBobVars[4], *pViewBob;
/* bob vars are calculated separately from application, so that if there's
* more than one viewmodel we won't affect the speed of the bob by running
* the math too many times */
void
Viewmodel_CalcBob(void)
{
int s = (float)getproperty(VF_ACTIVESEAT);
pViewBob = &g_viewBobVars[s];
vector vecVel;
float flBob;
float var_bob;
float var_cycle;
float var_up;
bool isSprinting = pSeat->m_ePlayer.vv_flags & VFL_SPRINTING;
bool isCrouching = pSeat->m_ePlayer.vv_flags & VFL_CROUCHING;
// if (pSeatLocal->m_iSprinting && vlen(pSeat->m_vecPredictedVelocity) > 240)
// isSprinting = true;
var_bob = BOB_STRENGTH;
var_cycle = BOB_CYCLE;
var_up = BOB_UP;
if (isSprinting)
var_cycle *= autocvar_player_sprintCameraBob;
pViewBob->m_flBobTime += frametime;
pViewBob->m_flBobCycle = pViewBob->m_flBobTime - (int)(pViewBob->m_flBobTime / var_cycle) * var_cycle;
pViewBob->m_flBobCycle /= var_cycle;
if (pViewBob->m_flBobCycle < var_up) {
pViewBob->m_flBobCycle = MATH_PI * pViewBob->m_flBobCycle / var_up;
} else {
pViewBob->m_flBobCycle = MATH_PI + MATH_PI * (pViewBob->m_flBobCycle - var_up)/(1.0 - var_up);
}
vecVel = pSeat->m_vecPredictedVelocity;
vecVel[2] = 0;
pViewBob->m_flSpeed = vlen(vecVel);
flBob = pViewBob->m_flSpeed * var_bob;
flBob = flBob * sin(pViewBob->m_flBobCycle);
pViewBob->m_flBob = flBob;
/* BOB2, which is half the cycle of bob1 */
pViewBob->m_flBobTime2 += frametime;
pViewBob->m_flBobCycle2 = pViewBob->m_flBobTime2 - (int)(pViewBob->m_flBobTime2 / (var_cycle * 0.5f)) * (var_cycle * 0.5f);
pViewBob->m_flBobCycle2 /= (var_cycle * 0.5f);
if (pViewBob->m_flBobCycle2 < var_up) {
pViewBob->m_flBobCycle2 = MATH_PI * pViewBob->m_flBobCycle2 / var_up;
} else {
pViewBob->m_flBobCycle2 = MATH_PI + MATH_PI * (pViewBob->m_flBobCycle2 - var_up)/(1.0 - var_up);
}
flBob = pViewBob->m_flSpeed * (var_bob * 0.5);
flBob = flBob * cos(pViewBob->m_flBobCycle2);
pViewBob->m_flBob2 = flBob;
if (isSprinting) {
pViewBob->m_flViewBob2 = pViewBob->m_flBob2 * autocvar_bg_bobAmplitudeSprinting[0] * 25.0f;
pViewBob->m_flViewBob = pViewBob->m_flBob * autocvar_bg_bobAmplitudeSprinting[1] * 25.0f;
pViewBob->m_flBob2 *= autocvar_bg_bobAmplitudeSprinting[0] * 20.0;
pViewBob->m_flBob *= autocvar_bg_bobAmplitudeSprinting[1] * 20.0;
} else if (isCrouching) {
pViewBob->m_flViewBob2 = pViewBob->m_flBob2 * autocvar_bg_bobAmplitudeDucked[0] * 25.0f;
pViewBob->m_flViewBob = pViewBob->m_flBob * autocvar_bg_bobAmplitudeDucked[1] * 25.0f;
pViewBob->m_flBob2 *= autocvar_bg_bobAmplitudeDucked[0] * 20.0;
pViewBob->m_flBob *= autocvar_bg_bobAmplitudeDucked[1] * 20.0;
} else {
pViewBob->m_flViewBob2 = pViewBob->m_flBob2 * autocvar_bg_bobAmplitudeStanding[0] * 25.0f;
pViewBob->m_flViewBob = pViewBob->m_flBob * autocvar_bg_bobAmplitudeStanding[1] * 25.0f;
pViewBob->m_flBob2 *= autocvar_bg_bobAmplitudeStanding[0] * 20.0;
pViewBob->m_flBob *= autocvar_bg_bobAmplitudeStanding[1] * 20.0;
}
}
void
Viewmodel_ApplyBob(entity gun)
{
int s = (float)getproperty(VF_ACTIVESEAT);
pViewBob = &g_viewBobVars[s];
float sintime;
float strength;
float kickUp;
//gun.angles[2] = pViewBob->m_flBob2 * -2.0f;
gun.angles[2] = pViewBob->m_flViewBob * 4.0f;
kickUp = pViewBob->m_flViewBob2 * 4.0f;
vector angmod = [0,0,0];
angmod[0] = pViewBob->m_flViewBob2 + kickUp;
angmod[1] = pViewBob->m_flViewBob;
//angmod[2] += pViewBob->m_flBob * 3.0f;
gun.angles += angmod;
/* sway with speed */
sintime = sin(time);
strength = pViewBob->m_flSpeed;
if (strength > 240)
strength = 240;
strength = 240 - strength;
strength *= 0.01f;
float sprint;
if (pSeat->m_ePlayer.vv_flags & VFL_SPRINTING) {
pSeat->m_flSprintLerp = bound(0.0f, pSeat->m_flSprintLerp + clframetime, 1.0f);
} else {
pSeat->m_flSprintLerp = bound(0.0f, pSeat->m_flSprintLerp - clframetime, 1.0f);
}
sprint = 20 * pSeat->m_flSprintLerp;
gun.angles[0] += sprint;
gun.angles[1] += sprint + (sprint * pViewBob->m_flBob) * 0.25f;
#ifdef WASTES
if (pSeat->m_ePlayer.gflags & GF_IS_HEALING) {
pSeatLocal->m_flHealLerp = bound(0.0f, pSeatLocal->m_flHealLerp + clframetime, 1.0f);
} else {
pSeatLocal->m_flHealLerp = bound(0.0f, pSeatLocal->m_flHealLerp - clframetime, 1.0f);
}
gun.angles[0] += pSeatLocal->m_flHealLerp * 45;
gun.origin[2] -= pSeatLocal->m_flHealLerp * 5;
#endif
gun.angles[0] += strength * sintime;
gun.angles[1] += strength * sintime;
//gun.angles[2] += strength * sintime;
gun.origin += [0,0,-1];
makevectors(g_view.GetCameraAngle());
gun.origin += v_forward * cvar("cl_gunx");
gun.origin += v_right * cvar("cl_guny");
gun.origin += v_up * cvar("cl_gunz");
/* lower gun when moving */
if (pViewBob->m_flSpeed > 10.0) {
gun.origin += (v_up * -pViewBob->m_flSpeed * 0.005f);
gun.origin += (v_right * -pViewBob->m_flSpeed * 0.005f);
}
}
vector
Camera_AddCamBob(vector cameraAngle)
{
vector angmod = g_vec_null;
makevectors(cameraAngle);
angmod = (pViewBob->m_flBob2 * -v_up);
angmod += (pViewBob->m_flBob * -v_right);
return angmod;
}

View file

@ -1,15 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

View file

@ -1,52 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
class GameRules:CGameRules
{
void GameRules(void);
virtual void(NSClientPlayer) PlayerConnect;
virtual void(NSClientPlayer) PlayerDisconnect;
virtual void(NSClientPlayer) PlayerPostFrame;
virtual void(NSClientPlayer) LevelDecodeParms;
virtual void(NSClientPlayer) LevelChangeParms;
virtual void(void) LevelNewParms;
};
class SingleplayerRules:GameRules
{
void SingleplayerRules(void);
/* client */
virtual void(NSClientPlayer) PlayerSpawn;
virtual void(NSClientPlayer) PlayerDeath;
};
class MultiplayerRules:GameRules
{
int m_iIntermission;
int m_iIntermissionTime;
void MultiplayerRules(void);
virtual void(void) FrameStart;
/* client */
virtual void(NSClientPlayer) PlayerSpawn;
virtual void(NSClientPlayer) PlayerDeath;
virtual bool(NSClientPlayer, string) ConsoleCommand;
};

View file

@ -1,101 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
void
GameRules::GameRules(void)
{
}
void
GameRules::LevelDecodeParms(NSClientPlayer pl)
{
g_landmarkpos[0] = parm1;
g_landmarkpos[1] = parm2;
g_landmarkpos[2] = parm3;
pl.angles[0] = parm4;
pl.angles[1] = parm5;
pl.angles[2] = parm6;
pl.velocity[0] = parm7;
pl.velocity[1] = parm8;
pl.velocity[2] = parm9;
pl.g_items = parm10;
pl.activeweapon = parm11;
pl.flags = parm64;
}
void
GameRules::LevelChangeParms(NSClientPlayer pl)
{
parm1 = g_landmarkpos[0];
parm2 = g_landmarkpos[1];
parm3 = g_landmarkpos[2];
parm4 = pl.angles[0];
parm5 = pl.angles[1];
parm6 = pl.angles[2];
parm7 = pl.velocity[0];
parm8 = pl.velocity[1];
parm9 = pl.velocity[2];
parm64 = pl.flags;
parm10 = pl.g_items;
parm11 = pl.activeweapon;
}
void
GameRules::LevelNewParms(void)
{
parm1 = parm2 = parm3 = parm4 = parm5 = parm6 = parm7 =
parm8 = parm9 = parm10 = parm11 = parm12 = parm13 = parm14 =
parm15 = parm16 = parm17 = parm18 = parm19 = parm20 = parm21 =
parm22 = parm23 = parm24 = parm25 = parm26 = parm27 = parm28 =
parm29 = parm30 = 0;
parm64 = FL_CLIENT;
}
/* we check what fields have changed over the course of the frame and network
* only the ones that have actually changed */
void
GameRules::PlayerPostFrame(NSClientPlayer pl)
{
}
void
GameRules::PlayerConnect(NSClientPlayer pl)
{
if (Plugin_PlayerConnect(pl) == FALSE)
bprint(PRINT_HIGH, sprintf("%s connected\n", pl.netname));
}
void
GameRules::PlayerDisconnect(NSClientPlayer pl)
{
if (Plugin_PlayerDisconnect(pl) == FALSE)
bprint(PRINT_HIGH, sprintf("%s disconnected\n", pl.netname));
/* Make this unusable */
pl.solid = SOLID_NOT;
pl.movetype = MOVETYPE_NONE;
pl.modelindex = 0;
pl.health = 0;
pl.takedamage = 0;
pl.SendFlags = -1;
}
void
Game_Worldspawn(void)
{
}

View file

@ -1,28 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
void
Game_InitRules(void)
{
g_grMode = NSGameRules::InitFromProgs("maps/mp/gametypes/dm.dat");
}
void
Game_Worldspawn(void)
{
}

View file

@ -1,77 +0,0 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
void
SingleplayerRules::SingleplayerRules(void)
{
}
void
SingleplayerRules::PlayerDeath(NSClientPlayer pl)
{
pl.movetype = MOVETYPE_NONE;
pl.solid = SOLID_NOT;
pl.takedamage = DAMAGE_NO;
pl.armor = pl.activeweapon = pl.g_items = pl.weapon = 0;
pl.health = 0;
if (cvar("coop") == 1) {
pl.think = PutClientInServer;
pl.nextthink = time + 4.0f;
}
}
void
SingleplayerRules::PlayerSpawn(NSClientPlayer pl)
{
pl.classname = "player";
pl.health = pl.max_health = 100;
pl.takedamage = DAMAGE_YES;
pl.solid = SOLID_SLIDEBOX;
pl.movetype = MOVETYPE_WALK;
pl.flags = FL_CLIENT;
pl.viewzoom = 1.0;
pl.model = "models/player.mdl";
setmodel(pl, pl.model);
pl.AddEffects(EF_NOSHADOW);
setsize(pl, VEC_HULL_MIN, VEC_HULL_MAX);
pl.velocity = [0,0,0];
pl.gravity = __NULL__;
pl.frame = 1;
pl.SendFlags = UPDATE_ALL;
pl.customphysics = Empty;
pl.iBleeds = TRUE;
forceinfokey(pl, "*spec", "0");
forceinfokey(pl, "*deaths", ftos(pl.deaths));
/* this is where the mods want to deviate */
entity spot;
if (startspot != "") {
dprint(sprintf("^3Gamerules_Spawn^7: Startspot is %s\n", startspot));
LevelDecodeParms(pl);
setorigin(pl, Landmark_GetSpot());
} else {
LevelNewParms();
spot = find(world, ::classname, "info_player_start");
setorigin(pl, spot.origin);
pl.angles = spot.angles;
}
Client_FixAngle(pl, pl.angles);
}

11
base/src/server/main.qc Normal file
View file

@ -0,0 +1,11 @@
void
Game_Worldspawn(void)
{
}
void
Game_InitRules(void)
{
g_grMode = NSGameRules::InitFromProgs("maps/mp/gametypes/dm.dat");
}

View file

@ -12,17 +12,13 @@
../../../src/server/defs.h
../../../src/gs-entbase/server.src
../../../src/gs-entbase/shared.src
/* mod specific header */
defs.h
../shared/include.src
/* include the botlib if desired (optional) */
../../../src/botlib/include.src
/* mod specific functions */
gamerules_multiplayer.qc
main.qc
/* global server/shared code */
../../../src/server/include.src

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/ceiling.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/counter.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/desk.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/door.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/floor.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/healthcharge.tga
else
{

View file

@ -4,7 +4,7 @@
surfaceparm trans
if $programs
program lightmapped
program defaultwall
diffusemap "textures/measure/ladder.tga"
else
{

View file

@ -3,7 +3,7 @@
surfaceParm alien
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_alien.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm computer
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_computer.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm concrete
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_concrete.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm dirt
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_dirt.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm flesh
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_flesh.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm foliage
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_foliage.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm glass
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_glass.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm grate
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_grate.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm metal
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_metal.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm sand
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_sand.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm slosh
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_slosh.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm snow
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_snow.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm tile
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_tile.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm vent
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_vent.tga
else
{

View file

@ -3,7 +3,7 @@
surfaceParm wood
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/mat_wood.tga
else
{

View file

@ -1,6 +1,6 @@
// Vera Visions Material
{
program lightmapped#MASK=0.5
program defaultwall#MASK=0.5
surfaceParm alphashadow
diffusemap textures/measure/rail.tga
}

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/recharge.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/stairs1.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/wall128.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/wall128b.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/wall128g.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/wall128gr.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/wall128pl.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/wall32.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/wall64.tga
else
{

View file

@ -1,7 +1,7 @@
// Vera Visions Material
{
if $programs
program lightmapped
program defaultwall
diffusemap textures/measure/wall64a.tga
else
{

View file

@ -3,7 +3,7 @@
if $programs
diffusemap "textures/next/asphalt1.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -4,7 +4,7 @@ if $programs
diffusemap "textures/next/asphalt2.tga"
normalmap "textures/next/asphalt2_normal.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -3,7 +3,7 @@
if $programs
diffusemap "textures/next/asphalt3.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/bunker1.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/bunker2.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/bunker3.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/bunker4.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/bunker5.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/bunker6.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/bunker7.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/bunker8.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/bunker9.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/cracked1.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/cracked2.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/dirty1.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/dirty2.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/dirty3.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/dirty4.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/earth1.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -6,7 +6,7 @@ if $programs
diffusemap "textures/next/earth2.tga"
normalmap "textures/next/earth2_normal.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/earth3.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/earth4.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/earth5.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/earth6.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/earth7.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/earth8.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/earth9.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/plywood1.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/plywood2.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/plywood3.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/plywood4.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/plywood5.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/rusty1.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/rusty2.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/rusty3.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/rusty4.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/rusty5.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/rusty6.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -5,7 +5,7 @@
if $programs
diffusemap "textures/next/rusty7.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -3,7 +3,7 @@
if $programs
diffusemap "textures/next/tarmac1.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

View file

@ -3,7 +3,7 @@
if $programs
diffusemap "textures/next/tarmac2.tga"
{
program lightmapped
program defaultwall
map $diffuse
map $normalmap
}

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