diff --git a/PROJECT b/PROJECT new file mode 100644 index 0000000..97d4b9d --- /dev/null +++ b/PROJECT @@ -0,0 +1 @@ +RadTherapy \ No newline at end of file diff --git a/README.md b/README.md index 1229163..950c95e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ -# FreeHL -Clean-room reimplementation of Half-Life: Deathmatch and Half-Life (Experimental, this means Singleplayer is NOT complete). +# Rad-Therapy (FreeHL) + +Clean-room reimplementation of Valve Corporation's Half-Life: Deathmatch and Half-Life (Experimental, this means Singleplayer is NOT complete). Similar to FreeCS, this aims to recreate the feeling of the original game. It's designed to work with the content from the CD version of the game. diff --git a/engine.h b/engine.h new file mode 100644 index 0000000..7353663 --- /dev/null +++ b/engine.h @@ -0,0 +1,251 @@ +/*** +* +* Copyright (c) 2000-2022, Vera Visions. All rights reserved. +* +****/ + +#define FULLENGINENAME "Rad-Therapy" +#define GAME_SHORTNAME "HL" +#define GAME_BASEGAMES "valve" +#define GAME_PROTOCOL "FTE-HalfLife" + +#define BRANDING_ICON "freecs.ico" +#define DISTRIBUTION "FHL" +#define DISTRIBUTIONLONG "eukara" +#define GAME_FULLNAME FULLENGINENAME +#define GAME_DEFAULTPORT 23000 +#define ENGINEWEBSITE "https://www.frag-net.com/" + +#ifndef GLQUAKE +#define GLQUAKE +#endif + +/* +#ifndef VKQUAKE +#define VKQUAKE +#endif +*/ +#undef VKQUAKE /* not yet, needs more testing */ + + /* disable quake specific hacks and overrides */ +#define QUAKETC +#define NOBUILTINMENUS +#define NOLEGACY + +/* engine behaviour */ +#define PLUGINS /* enables fteplug_ files */ +#define AVAIL_ZLIB /* we need this for pk3 and ogg vorbis */ +#define CL_MASTER /* allows for serverbrowser builtins */ +#define CSQC_DAT /* clientside qcvm */ +#define MENU_DAT /* persistent qcvm */ +#define PSET_SCRIPT /* scripts defining particles */ +#define LOADERTHREAD /* multithreading related */ +#define USEAREAGRID /* leave it on, improves performance */ +#define AVAIL_DINPUT /* input for Windows */ +#define AVAIL_FREETYPE /* for truetype font rendering */ +#define AVAIL_STBI /* avoid libpng/libjpeg dependancies */ +#define ENGINE_ROUTING /* engine-side, fast routing */ + +#ifndef LEGACY_GPU + #define RTLIGHTS +#else + #undef RTLIGHTS +#endif + +#undef D3D9QUAKE /* MICROS~1 trash */ +#undef D3D11QUAKE /* MICROS~1 trash */ +#undef D3D8QUAKE /* MICROS~1 trash */ + +/* uncompressed textures */ +#define IMAGEFMT_BMP /* sprays */ +#define IMAGEFMT_TGA + +/* compressed textures */ +#define IMAGEFMT_KTX +#define DECOMPRESS_ETC2 +#define DECOMPRESS_RGTC +#define DECOMPRESS_S3TC + +/* To be able to comm with Frag-Net.com */ +#define HAVE_PACKET +#define SUPPORT_ICE +#define HAVE_TCP +#define HAVE_GNUTLS /* linux tls/dtls support */ +#define HAVE_WINSSPI /* windows tls/dtls support */ +#define WEBCLIENT /* uri_get+any internal downloads etc */ + +#ifndef MULTITHREAD +#define MULTITHREAD +#endif + +#ifndef DEBUG +/* if 2, disables writing fteextensions.qc completely. */ +#define NOQCDESCRIPTIONS 2 +#endif + +/* various package formats */ +#define PACKAGE_PK3 +#define PACKAGE_TEXWAD +#define PACKAGE_Q1PAK + +/* level formats */ +#define Q3BSPS +#define Q1BSPS +#define TERRAIN + +/* audio */ +#undef AVAIL_DSOUND +#define AVAIL_OPENAL +#define AVAIL_OGGVORBIS +#define HAVE_OPUS +#define VOICECHAT + +/* todo: make OpenAL only */ +#define HAVE_MIXER + +/* Model formats, IQM/VVM and HLMDL for legacy maps */ +#define INTERQUAKEMODELS +#define HALFLIFEMODELS + +/* physics */ +#undef USE_INTERNAL_ODE +#undef USE_INTERNAL_BULLET +#define USERBE +#define RAGDOLL + +/* we don't need any of these */ +#undef IMAGEFMT_PCX +#undef PACKAGE_DOOMWAD +#undef DOOMWADS +#undef MAP_PROC +#undef Q2BSPS +#define RFBSPS +#define VERTEXINDEXBYTES 2 //16bit indexes work everywhere but may break some file types, 32bit indexes are optional in gles<=2 and d3d<=9 and take more memory/copying but allow for bigger batches/models. Plugins need to be compiled the same way so this is no longer set per-renderer. +#define SPRMODELS +#undef SP2MODELS +#undef DSPMODELS +#undef MD1MODELS +#undef MD2MODELS +#undef MD3MODELS +#undef MD5MODELS +#undef ZYMOTICMODELS +#undef DPMMODELS +#undef PSKMODELS +#undef MENU_NATIVECODE /* native menu replacing menuQC */ +#undef MVD_RECORDING /* server can record MVDs. */ +#undef AVAIL_WASAPI /* windows advanced sound api */ +//#undef AVAIL_DSOUND /* MICROS~1 trash */ +#undef BOTLIB_STATIC /* q3 botlib */ +#undef AVAIL_XZDEC /* .xz decompression */ +#undef HAVE_SPEEX /* .xz decompression */ +#undef AVAIL_GZDEC /* .gz decompression */ +#undef PACKAGE_DZIP /* .dzip special-case archive support */ +#undef AVAIL_PNGLIB /* .png image format support (read+screenshots) */ +#undef AVAIL_JPEGLIB /* .jpeg image format support (read+screenshots) */ +#undef AVAIL_MP3_ACM /* .mp3 support (in windows). */ +#undef IMAGEFMT_DDS +#undef IMAGEFMT_PKM +#undef IMAGEFMT_BLP +#undef NETPREPARSE /* allows for running both nq+qw on the same server (if not, protocol used must match gamecode) */ +#undef USE_SQLITE /* sql-database-as-file support */ +#undef QUAKESTATS /* defines STAT_HEALTH etc. if omitted, you'll need to provide that functionality yourself */ +#undef QUAKEHUD /* support for drawing the vanilla hud */ +#undef QWSKINS /* disabling this means no qw .pcx skins nor enemy/team skin/colour forcing */ +#undef SVRANKING /* legacy server-side ranking system */ +#define HUFFNETWORK /* crappy network compression. probably needs reseeding */ +#undef SVCHAT /* ancient lame builtin to support NPC-style chat.. */ +#undef VM_Q1 /* q1qvm implementation, to support ktx */ +#undef Q2SERVER /* q2 server+gamecode */ +#undef Q2CLIENT /* q2 client. file formats enabled separately */ +#undef Q3CLIENT /* q3 client stuff */ +#undef Q3SERVER /* q3 server stuff */ +#undef HEXEN2 /* runs hexen2 gamecode, supports hexen2 file formats */ +#undef NQPROT /* act as an nq client/server, with nq gamecode */ +#undef WEBSERVER /* sv_ftp + sv_http cvars */ +#undef RUNTIMELIGHTING /* automatic generation of .lit files */ +#undef R_XFLIP /* old silly thing */ +#undef TEXTEDITOR /* because emacs */ +#undef TCPCONNECT /* support for playing over tcp sockets, instead of just udp. compatible with qizmo */ +#undef IRCCONNECT /* lame support for routing game packets via irc server. not a good idea */ +#undef PSET_CLASSIC /* support the 'classic' particle system, for that classic quake feel */ +#undef HAVE_CDPLAYER /* Redbook CD Audio */ +#undef QTERM +#undef SIDEVIEWS +#undef MAX_SPLITS +#undef SUBSERVERS /* multi-map */ +#undef VM_LUA /* lua game-logic */ +#undef HLCLIENT /* regressed, unfinished*/ +#undef HLSERVER /* regressed, unfinished */ +#undef FTPSERVER +#undef HAVE_JUKEBO /* includes built-in jukebox */ +#define HAVE_MEDIA_DECODER /* can play cin/roq, more with plugins */ +#undef HAVE_MEDIA_ENCODER /* capture/capturedemo work */ +#undef HAVE_SPEECHTOTEXT /* Windows speech-to-text thing */ +#undef SAVEDGAMES +#undef PACKAGEMANAGER /* enable/disable/download packages and plugins */ +#undef HEADLESSQUAKE +#undef WAYLANDQUAKE +#undef SERVER_DEMO_PLAYBACK /* deprecated */ +#undef DECOMPRESS_BPTC +#undef IMAGEFMT_HDR +#undef IMAGEFMT_PBM +#undef IMAGEFMT_PSD +#undef IMAGEFMT_XCF +#undef IMAGEFMT_LMP +#undef IMAGEFMT_PNG +#undef IMAGEFMT_JPG +#undef IMAGEFMT_GIF +#undef IMAGEFMT_EXR +#undef IPLOG +#undef AVAIL_BOTLIB +#undef AVAIL_BZLIB +#undef DECOMPRESS_ASTC +#undef IMAGEFMT_ASTC +#undef HAVE_HTTPSV +#undef MODELFMT_MDX +#undef MODELFMT_OBJ +#undef MODELFMT_GLTF + +#ifdef COMPILE_OPTS +/* things to configure qclib, which annoyingly doesn't include this + * file itself */ +-DOMIT_QCC /* disable the built-in qcc */ +//-DSIMPLE_QCVM /* disable qc debugging and 32bit opcodes */ +#ifndef AVAIL_ZLIB +-DNO_ZLIB /* disable zlib */ +#endif +#ifdef AVAIL_PNGLIB +-DLINK_PNG +#endif +#ifdef AVAIL_JPEGLIB +-DLINK_JPEG +#endif +#ifdef AVAIL_FREETYPE +-DLINK_FREETYPE +#endif + +/* makefile will respond to this by trying to link bullet into the + * engine itself, instead of as a plugin. */ +#ifdef USE_INTERNAL_BULLET +-DLINK_INTERNAL_BULLET +#endif + +#ifdef USE_INTERNAL_ODE +-DODE_STATIC +#endif + +/* disable static speex */ +#ifdef HAVE_SPEEX +-DNO_SPEEX +#endif + +/* disable static botlib */ +#ifndef BOTLIB_STATIC +-DNO_BOTLIB +#endif + +-DLIBVORBISFILE_STATIC + +/* optimise for size instead of speed. less cpu cache needed means that + * its sometimes faster.*/ +#endif diff --git a/manifest.fmf b/manifest.fmf deleted file mode 100644 index c16c646..0000000 --- a/manifest.fmf +++ /dev/null @@ -1,19 +0,0 @@ -FTEMANIFEST 1 -GAME valve -NAME "Half-Life" -BASEGAME platform -BASEGAME valve - -// you don't really want to change these -RTCBROKER master.frag-net.com:27950 -PROTOCOLNAME "FTE-HalfLife" -MAINCONFIG game.cfg -DOWNLOADSURL "http://www.frag-net.com/dl/packages" - --exec platform_default.cfg - -// load ffmpeg for the logo.avi file --plug_load ffmpeg - -// override some liblist.gam entries --set gameinfo_chatroom "halflife" \ No newline at end of file diff --git a/src/Makefile b/src/Makefile index 5e8df06..3580572 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,6 +1,6 @@ -CC=fteqcc +QCC=fteqcc all: cd client && $(MAKE) cd server && $(MAKE) - cd menu && $(MAKE) + cd menu && $(MAKE) \ No newline at end of file diff --git a/src/server/modelevent.qc b/src/client/HLWeaponSelect.qc similarity index 56% rename from src/server/modelevent.qc rename to src/client/HLWeaponSelect.qc index 1052cff..56cc733 100644 --- a/src/server/modelevent.qc +++ b/src/client/HLWeaponSelect.qc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2022 Vera Visions LLC. + * Copyright (c) 2016-2020 Marco Cawthorne * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -12,14 +12,52 @@ * 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 +HLWeaponSelect +{ + void HLWeaponSelect(void); + + virtual void Draw(void); + virtual void SelectSlot(bool); + virtual void SelectNext(bool); + virtual void SelectPrevious(bool); + virtual void SelectBest(bool); +}; void -Game_ServerModelEvent(float flTimeStamp, int iCode, string strData) +HLWeaponSelect::HLWeaponSelect(void) { - switch (iCode) { - default: - Event_ServerModelEvent(flTimeStamp, iCode, strData); - break; - } + +} + +void +HLWeaponSelect::Draw(void) +{ + +} + +void +HLWeaponSelect::SelectSlot(bool fastSwitch) +{ + +} + +void +HLWeaponSelect::SelectNext(bool fastSwitch) +{ + +} + +void +HLWeaponSelect::SelectPrevious(bool fastSwitch) +{ + +} + +void +HLWeaponSelect::SelectBest(bool fastSwitch) +{ + } diff --git a/src/client/Makefile b/src/client/Makefile index 627019a..2fe44a4 100644 --- a/src/client/Makefile +++ b/src/client/Makefile @@ -1,4 +1,4 @@ -CC=fteqcc +QCC=fteqcc all: - $(CC) progs.src + $(QCC) progs.src diff --git a/src/client/cmds.qc b/src/client/cmds.qc index af09116..2b3593b 100644 --- a/src/client/cmds.qc +++ b/src/client/cmds.qc @@ -21,6 +21,9 @@ ClientGame_ConsoleCommand(void) case "chooseteam": sendevent("HLDM_Chooseteam", "s", argv(1)); break; + case "hudSort": + HLWeapon_SortWeaponChain((NSClientPlayer)pSeat->m_ePlayer); + break; default: return (0); } diff --git a/src/client/defs.h b/src/client/defs.h index 41cf6b0..dc50a65 100644 --- a/src/client/defs.h +++ b/src/client/defs.h @@ -16,6 +16,7 @@ #include "obituary.h" #include "particles.h" +#include "hud_sprite.h" var int autocvar_cl_autoweaponswitch = TRUE; @@ -65,4 +66,6 @@ void HUD_DrawAmmo1(void); void HUD_DrawAmmo2(void); void HUD_DrawAmmo3(void); void HUD_DrawAmmoBar(vector pos, float val, float max, float a); -void HUD_WeaponPickupNotify(int); \ No newline at end of file +void HUD_WeaponPickupNotify(int); + +NSWeapon HLWeapon_SortWeaponChain(NSClientPlayer targetPlayer); diff --git a/src/client/entities.qc b/src/client/entities.qc index 9632dd3..fc5060e 100644 --- a/src/client/entities.qc +++ b/src/client/entities.qc @@ -19,7 +19,17 @@ ClientGame_EntityUpdate(float id, float new) { switch (id) { case ENT_TRIPMINE: - w_tripmine_parse(); + NSENTITY_READENTITY(HLTripmine, new) + break; + case ENT_WEAPON: + NSENTITY_READENTITY(HLWeapon, new) + break; + case ENT_PLAYER: +#ifndef GEARBOX + NSENTITY_READENTITY(HLPlayer, new) +#else + NSENTITY_READENTITY(OP4Player, new) +#endif break; default: return (0); diff --git a/src/client/hud.qc b/src/client/hud.qc index 31f5938..b1205a4 100644 --- a/src/client/hud.qc +++ b/src/client/hud.qc @@ -138,7 +138,7 @@ void HUD_DrawHealth(void) { vector pos; - player pl = (player)pSeat->m_ePlayer; + NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer; if (pl.health != pSeatLocal->m_iHealthOld) { pSeatLocal->m_flHealthAlpha = 1.0; @@ -185,7 +185,7 @@ void HUD_DrawArmor(void) { vector pos; - player pl = (player)pSeat->m_ePlayer; + NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer; pos = g_hudmins + [198, g_hudres[1] - 42]; @@ -232,7 +232,7 @@ HUD_DrawArmor(void) void HUD_DrawAmmo1(void) { - player pl = (player)pSeat->m_ePlayer; + NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer; vector pos; if (pl.a_ammo1 != pSeatLocal->m_iAmmo1Old) { @@ -255,7 +255,7 @@ HUD_DrawAmmo1(void) void HUD_DrawAmmo2(void) { - player pl = (player)pSeat->m_ePlayer; + NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer; vector pos; if (pl.a_ammo2 != pSeatLocal->m_iAmmo2Old) { @@ -277,7 +277,7 @@ HUD_DrawAmmo2(void) void HUD_DrawAmmo3(void) { - player pl = (player)pSeat->m_ePlayer; + NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer; vector pos; if (pl.a_ammo3 != pSeatLocal->m_iAmmo3Old) { @@ -313,7 +313,7 @@ void HUD_DrawFlashlight(void) { vector pos; - player pl = (player)pSeat->m_ePlayer; + NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer; pos = g_hudmins + [g_hudres[0] - 48, 16]; /* both on, draw both sprites at full intensity */ @@ -389,7 +389,7 @@ HUD_DrawLogo(void) void HUD_DrawNotify(void) { - player pl = (player)self; + NSClientPlayer pl = (NSClientPlayer)self; vector pos; float a; @@ -404,7 +404,7 @@ HUD_DrawNotify(void) a = bound(0.0, pSeatLocal->m_flPickupAlpha, 1.0); pos[1] += 48 * (1.0 - a); - Weapons_HUDPic(pl, pSeatLocal->m_iPickupWeapon, 1, pos, a); + //Weapons_HUDPic(pl, pSeatLocal->m_iPickupWeapon, 1, pos, a); HUD_ItemNotify_Draw(pos); HUD_AmmoNotify_Draw(pos); pSeatLocal->m_flPickupAlpha -= (clframetime * 0.5); @@ -413,6 +413,7 @@ HUD_DrawNotify(void) void HUD_WeaponPickupNotify(int w) { +#if 0 #if defined (VALVE) || defined (GEARBOX) switch (w) { case WEAPON_SNARK: @@ -426,7 +427,7 @@ HUD_WeaponPickupNotify(int w) default: } #endif - +#endif pSeatLocal->m_iPickupWeapon = w; pSeatLocal->m_flPickupAlpha = 2.5f; } @@ -471,7 +472,7 @@ HUD_TimeRemaining(void) void HUD_Draw(void) { - player pl = (player)pSeat->m_ePlayer; + NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer; #ifndef TFC #ifndef GEARBOX @@ -487,7 +488,9 @@ HUD_Draw(void) #endif /* little point in not drawing these, even if you don't have a suit */ - Weapons_DrawCrosshair(pl); + if (pl.m_activeWeapon) + pl.m_activeWeapon.UpdateGUI(); + HUD_DrawDamageIndicator(); HUD_DrawWeaponSelect(); Obituary_Draw(); @@ -495,7 +498,7 @@ HUD_Draw(void) HUD_TimeRemaining(); - if (!(pl.g_items & ITEM_SUIT)) { + if (pl.HasItem("item_suit") == false) { return; } diff --git a/src/client/hud_ammonotify.qc b/src/client/hud_ammonotify.qc index 7870fea..850e256 100644 --- a/src/client/hud_ammonotify.qc +++ b/src/client/hud_ammonotify.qc @@ -98,26 +98,26 @@ HUD_AmmoNotify_Insert(int type, int count) /* called whenever we should check for pickup updates */ void -HUD_AmmoNotify_Check(player pl) +HUD_AmmoNotify_Check(NSClientPlayer pl) { - HUD_AmmoNotify_Insert(0, pl.ammo_9mm - pl.ammo_9mm_net); - HUD_AmmoNotify_Insert(1, pl.ammo_357 - pl.ammo_357_net); - HUD_AmmoNotify_Insert(2, pl.ammo_m203_grenade - pl.ammo_m203_grenade_net); - HUD_AmmoNotify_Insert(3, pl.ammo_buckshot - pl.ammo_buckshot_net); - HUD_AmmoNotify_Insert(4, pl.ammo_bolt - pl.ammo_bolt_net); - HUD_AmmoNotify_Insert(5, pl.ammo_rocket - pl.ammo_rocket_net); - HUD_AmmoNotify_Insert(6, pl.ammo_uranium - pl.ammo_uranium_net); - HUD_AmmoNotify_Insert(7, pl.ammo_hornet - pl.ammo_hornet_net); - HUD_AmmoNotify_Insert(8, pl.ammo_handgrenade - pl.ammo_handgrenade_net); - HUD_AmmoNotify_Insert(9, pl.ammo_satchel - pl.ammo_satchel_net); - HUD_AmmoNotify_Insert(10, pl.ammo_snark - pl.ammo_snark_net); - HUD_AmmoNotify_Insert(11, pl.ammo_tripmine - pl.ammo_tripmine_net); + HUD_AmmoNotify_Insert(0, pl.m_iAmmoTypes[1] - pl.m_iAmmoTypes_net[1]); + HUD_AmmoNotify_Insert(1, pl.m_iAmmoTypes[2] - pl.m_iAmmoTypes_net[2]); + HUD_AmmoNotify_Insert(2, pl.m_iAmmoTypes[12] - pl.m_iAmmoTypes_net[12]); + HUD_AmmoNotify_Insert(3, pl.m_iAmmoTypes[3] - pl.m_iAmmoTypes_net[3]); + HUD_AmmoNotify_Insert(4, pl.m_iAmmoTypes[4] - pl.m_iAmmoTypes_net[4]); + HUD_AmmoNotify_Insert(5, pl.m_iAmmoTypes[5] - pl.m_iAmmoTypes_net[5]); + HUD_AmmoNotify_Insert(6, pl.m_iAmmoTypes[6] - pl.m_iAmmoTypes_net[6]); + HUD_AmmoNotify_Insert(7, pl.m_iAmmoTypes[11] - pl.m_iAmmoTypes_net[11]); + HUD_AmmoNotify_Insert(8, pl.m_iAmmoTypes[7] - pl.m_iAmmoTypes_net[7]); + HUD_AmmoNotify_Insert(9, pl.m_iAmmoTypes[8] - pl.m_iAmmoTypes_net[8]); + HUD_AmmoNotify_Insert(10, pl.m_iAmmoTypes[10] - pl.m_iAmmoTypes_net[10]); + HUD_AmmoNotify_Insert(11, pl.m_iAmmoTypes[9] - pl.m_iAmmoTypes_net[9]); #ifdef GEARBOX - HUD_AmmoNotify_Insert(12, pl.ammo_556 - pl.ammo_556_net); - HUD_AmmoNotify_Insert(13, pl.ammo_762 - pl.ammo_762_net); - HUD_AmmoNotify_Insert(14, pl.ammo_spore - pl.ammo_spore_net); - HUD_AmmoNotify_Insert(15, pl.ammo_shock - pl.ammo_shock_net); - HUD_AmmoNotify_Insert(16, pl.ammo_penguin - pl.ammo_penguin_net); + HUD_AmmoNotify_Insert(12, pl.m_iAmmoTypes[13] - pl.m_iAmmoTypes_net[13]); + HUD_AmmoNotify_Insert(13, pl.m_iAmmoTypes[14] - pl.m_iAmmoTypes_net[14]); + HUD_AmmoNotify_Insert(14, pl.m_iAmmoTypes[15] - pl.m_iAmmoTypes_net[15]); + HUD_AmmoNotify_Insert(15, pl.m_iAmmoTypes[16] - pl.m_iAmmoTypes_net[16]); + HUD_AmmoNotify_Insert(16, pl.m_iAmmoTypes[17] - pl.m_iAmmoTypes_net[17]); #endif } \ No newline at end of file diff --git a/src/client/hud_itemnotify.qc b/src/client/hud_itemnotify.qc index 203365f..b51acb0 100644 --- a/src/client/hud_itemnotify.qc +++ b/src/client/hud_itemnotify.qc @@ -76,8 +76,9 @@ HUD_ItemNotify_Insert(int type, int count) /* called whenever we should check for pickup updates */ void -HUD_ItemNotify_Check(player pl) +HUD_ItemNotify_Check(NSClientPlayer pl) { +#if 0 int healthdiff = (int)bound(0, pl.health - pSeatLocal->m_iHealthOld, 100); int armordiff = (int)bound(0, pl.armor - pSeatLocal->m_iArmorOld, 100); bool ljDiff = ((pl.g_items & ITEM_LONGJUMP) > (pSeatLocal->m_iItemsOld & ITEM_LONGJUMP)) ? true : false; @@ -107,4 +108,5 @@ HUD_ItemNotify_Check(player pl) } pSeatLocal->m_iItemsOld = pl.g_items; +#endif } \ No newline at end of file diff --git a/src/client/hud_sprite.h b/src/client/hud_sprite.h new file mode 100644 index 0000000..e985247 --- /dev/null +++ b/src/client/hud_sprite.h @@ -0,0 +1,19 @@ +typedef struct +{ + string m_strImage; + vector m_vecSize; + vector m_vecCanvasSize; + vector m_vecCanvasPos; +} hlsprite_t; + +void HLSprite_Init(void); + +void HLSprite_Draw_RGBA(string spriteName, vector spritePos, vector spriteColor, float spriteAlpha, bool isAdditive); + +void HLSprite_Draw(string spriteName, vector spritePos, bool isAdditive); + +void HLSprite_Draw_A(string spriteName, vector spritePos, float spriteAlpha, bool isAdditive); + +void HLSprite_Draw_RGB(string spriteName, vector spritePos, vector spriteColor, bool isAdditive); + +void HLSprite_DrawCrosshair(string spriteName); \ No newline at end of file diff --git a/src/client/hud_sprite.qc b/src/client/hud_sprite.qc index 6c35fbb..a7c4ac0 100644 --- a/src/client/hud_sprite.qc +++ b/src/client/hud_sprite.qc @@ -14,35 +14,61 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -typedef struct -{ - string m_strImage; - vector m_vecSize; - vector m_vecCanvasSize; - vector m_vecCanvasPos; -} hlsprite_t; - hlsprite_t *g_hlsprites; var hashtable g_hashhlsprite; +var int g_hlSpriteCount; -void -HLSprite_Init(void) +static int +HLSprite_CountEntriesInFile(string fileName) { - filestream hudFile; - vector imgSize; int spriteCount = 0i; - int i = 0i; - int c = 0i; + filestream hudFile; string line; + int c = 0i; - hudFile = fopen("sprites/hud.txt", FILE_READ); + hudFile = fopen(fileName, FILE_READ); if (hudFile < 0) { - NSError("Missing file sprites/hud.txt"); - return; + NSError("Missing file %S", fileName); + return (-1i); } /* count valid entries */ + while ((line = fgets(hudFile))) { + c = tokenize_console(line); + + if (c != 7) { + continue; + } + + if (argv(1) != "640") { + continue; + } + + spriteCount += 1i; + } + + fclose(hudFile); + + return (spriteCount); +} + +static bool +HLSprite_LoadFromFile(string fileName, string prefix) +{ + filestream hudFile; + int c = 0i; + vector imgSize = g_vec_null; + string line = ""; + string sheetName; + + hudFile = fopen(fileName, FILE_READ); + + if (hudFile < 0) { + NSError("Missing file %S", fileName); + return (false); + } + while ((line = fgets(hudFile))) { c = tokenize_console(line); @@ -52,7 +78,45 @@ HLSprite_Init(void) if (argv(1) != "640") continue; - spriteCount++; + if (prefix != "") + sheetName = strcat(prefix, argv(0)); + else + sheetName = argv(0); + + //printf("%S %S\n", sheetName, prefix); + + g_hlsprites[g_hlSpriteCount].m_strImage = spriteframe(sprintf("sprites/%s.spr", argv(2)), 0, 0.0f); + g_hlsprites[g_hlSpriteCount].m_vecSize[0] = stof(argv(5)); + g_hlsprites[g_hlSpriteCount].m_vecSize[1] = stof(argv(6)); + imgSize = drawgetimagesize(g_hlsprites[g_hlSpriteCount].m_strImage); + g_hlsprites[g_hlSpriteCount].m_vecCanvasPos[0] = stof(argv(3)) / imgSize[0]; + g_hlsprites[g_hlSpriteCount].m_vecCanvasPos[1] = stof(argv(4)) / imgSize[1]; + g_hlsprites[g_hlSpriteCount].m_vecCanvasSize[0] = g_hlsprites[g_hlSpriteCount].m_vecSize[0] / imgSize[0]; + g_hlsprites[g_hlSpriteCount].m_vecCanvasSize[1] = g_hlsprites[g_hlSpriteCount].m_vecSize[1] / imgSize[1]; + hash_add(g_hashhlsprite, sheetName, (int)g_hlSpriteCount); + g_hlSpriteCount += 1i; + } + + fclose(hudFile); + return (true); +} + +void +HLSprite_Init(void) +{ + int spriteCount = 0i; + searchhandle sh; + string hudFile; + string prefix; + + g_hlSpriteCount = 0i; + spriteCount = HLSprite_CountEntriesInFile("sprites/hud.txt"); + + sh = search_begin("sprites/weapon_*.txt", TRUE, TRUE); + + for (int i = 0; i < search_getsize(sh); i++) { + hudFile = search_getfilename(sh, i); + spriteCount += HLSprite_CountEntriesInFile(hudFile); } /* if we couldn't find anything, don't bother */ @@ -64,33 +128,19 @@ HLSprite_Init(void) g_hashhlsprite = hash_createtab(2, HASH_ADD); } - /* to the beginning we go. */ - fseek(hudFile, 0); /* allocate valid entries */ g_hlsprites = memalloc(sizeof(hlsprite_t) * spriteCount); /* read the data into our banks */ - while ((line = fgets(hudFile))) { - c = tokenize_console(line); + HLSprite_LoadFromFile("sprites/hud.txt", ""); - if (c != 7) - continue; - - if (argv(1) != "640") - continue; - - g_hlsprites[i].m_strImage = spriteframe(sprintf("sprites/%s.spr", argv(2)), 0, 0.0f); - g_hlsprites[i].m_vecSize[0] = stof(argv(5)); - g_hlsprites[i].m_vecSize[1] = stof(argv(6)); - imgSize = drawgetimagesize(g_hlsprites[i].m_strImage); - g_hlsprites[i].m_vecCanvasPos[0] = stof(argv(3)) / imgSize[0]; - g_hlsprites[i].m_vecCanvasPos[1] = stof(argv(4)) / imgSize[1]; - g_hlsprites[i].m_vecCanvasSize[0] = g_hlsprites[i].m_vecSize[0] / imgSize[0]; - g_hlsprites[i].m_vecCanvasSize[1] = g_hlsprites[i].m_vecSize[1] / imgSize[1]; - hash_add(g_hashhlsprite, argv(0), (int)i); - i++; + for (int i = 0; i < search_getsize(sh); i++) { + hudFile = search_getfilename(sh, i); + prefix = substring(hudFile, 8, -4); + HLSprite_LoadFromFile(hudFile, prefix); } - + + search_end(sh); NSLog("...initialized %i HL sprites.", spriteCount); } @@ -134,4 +184,23 @@ void HLSprite_Draw_RGB(string spriteName, vector spritePos, vector spriteColor, bool isAdditive) { HLSprite_Draw_RGBA(spriteName, spritePos, spriteColor, 1.0f, isAdditive); +} + +void +HLSprite_DrawCrosshair(string spriteName) +{ + int spriteNum = -1i; + + if (!spriteName) { + return; + } + + spriteNum = (int)hash_get(g_hashhlsprite, spriteName, -1i); + + if (spriteNum == -1i) { + NSError("Cannot draw sprite %S!", spriteName); + return; + } + + Cross_DrawSub(g_hlsprites[spriteNum].m_strImage, g_hlsprites[spriteNum].m_vecSize, g_hlsprites[spriteNum].m_vecCanvasPos, g_hlsprites[spriteNum].m_vecCanvasSize); } \ No newline at end of file diff --git a/src/client/hud_weaponselect.qc b/src/client/hud_weaponselect.qc index 77fde99..826b071 100644 --- a/src/client/hud_weaponselect.qc +++ b/src/client/hud_weaponselect.qc @@ -14,7 +14,80 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -void View_ForceChange(player pl, int targetWeapon); +.NSWeapon m_nextWeapon; +.NSWeapon m_prevWeapon; + +void View_ForceChange(NSClientPlayer pl, int targetWeapon); + +NSWeapon +HLWeapon_SortWeaponChain(NSClientPlayer targetPlayer) +{ + NSWeapon itemChain = targetPlayer.m_itemList; + int heighestSlot = -1i; + int heighestPos = -1i; + NSWeapon firstWeapon, lastWeapon; + + firstWeapon = lastWeapon = __NULL__; + + if (!targetPlayer.m_itemList) { + return __NULL__; + } + + /* first we determine the range of our hud buckets. */ + while (itemChain) { + if (itemChain.IsWeapon() == true) { + int hudSlot = itemChain.GetDefInt("hudSlot"); + int hudPos = itemChain.GetDefInt("hudSlotPos"); + + if (hudSlot > heighestSlot) { + heighestSlot = hudSlot; + } + if (hudPos > heighestPos) { + heighestPos = hudPos; + } + } + + itemChain = itemChain.chain; + } + + for (int hS = 0i; hS <= heighestSlot; hS++) { + for (int hP = 0i; hP <= heighestPos; hP++) { + itemChain = targetPlayer.m_itemList; + + while (itemChain) { + if (itemChain.IsWeapon() == true) { + int hudSlot = itemChain.GetDefInt("hudSlot"); + int hudPos = itemChain.GetDefInt("hudSlotPos"); + + if (hudSlot == hS && hudPos == hP) { + /* first weapon in the chain? */ + if (!lastWeapon) { + firstWeapon = itemChain; + lastWeapon = firstWeapon; + } else { + /* assign this weapon to the last weapon of our chain. */ + lastWeapon.m_nextWeapon = itemChain; + itemChain.m_prevWeapon = lastWeapon; + lastWeapon = itemChain; + } + } + } + + itemChain = itemChain.chain; + } + } + } + + /* test */ + NSWeapon weaponTest = firstWeapon; + while (weaponTest) { + weaponTest = weaponTest.m_nextWeapon; + } + + firstWeapon.m_prevWeapon = lastWeapon; + + return (firstWeapon); +} vector g_vecHUDNums[6] = { @@ -27,104 +100,74 @@ vector g_vecHUDNums[6] = }; bool -HUD_DrawWeaponSelect_CanSwitch(player pl) +HUD_DrawWeaponSelect_CanSwitch(NSClientPlayer pl) { - if (!pl.activeweapon) + if (!pl.m_activeWeapon) return false; - for (int i = 1; i < g_weapons.length; i++) { - if (pl.g_items & g_weapons[i].id && g_weapons[i].isempty(pl) == false) { - return true; - } - } - - return false; + return true; } void -HUD_DrawWeaponSelect_Forward(void) +HUD_SelectWeapon(NSWeapon nextWeapon) { - player pl = (player)pSeat->m_ePlayer; - - if (HUD_DrawWeaponSelect_CanSwitch(pl) == false) { - pSeat->m_flHUDWeaponSelectTime = time + 3; - pSeat->m_iHUDWeaponSelected = pl.activeweapon; + if (!nextWeapon) { + pSeat->m_iHUDWeaponSelected = 0i; return; } - if (pSeat->m_flHUDWeaponSelectTime < time) { - pSeat->m_iHUDWeaponSelected = pl.activeweapon; - pl.StartSoundDef("Player.WeaponSelectionOpen", CHAN_ITEM, false); - } else { - pl.StartSoundDef("Player.WeaponSelectionMoveSlot", CHAN_ITEM, false); + pSeat->m_iHUDWeaponSelected = nextWeapon.GetSharedID(); +} - pSeat->m_iHUDWeaponSelected--; - if (pSeat->m_iHUDWeaponSelected <= 0) { - pSeat->m_iHUDWeaponSelected = g_weapons.length - 1; - } +/* Select the next item in the list. */ +void +HUD_DrawWeaponSelect_Forward(void) +{ + NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer; + NSWeapon firstWeapon; + + if (HUD_DrawWeaponSelect_CanSwitch(pl) = false) { + return; } - pSeat->m_flHUDWeaponSelectTime = time + 3; + firstWeapon = HLWeapon_SortWeaponChain(pl); - if not (pl.g_items & g_weapons[pSeat->m_iHUDWeaponSelected].id) - HUD_DrawWeaponSelect_Forward(); - else if (g_weapons[pSeat->m_iHUDWeaponSelected].isempty) - if (g_weapons[pSeat->m_iHUDWeaponSelected].isempty(pl)) - HUD_DrawWeaponSelect_Forward(); + if (pl.m_activeWeapon.m_nextWeapon) { + HUD_SelectWeapon(pl.m_activeWeapon.m_nextWeapon); + } else { + HUD_SelectWeapon(firstWeapon); + } } void HUD_DrawWeaponSelect_Back(void) { - player pl = (player)pSeat->m_ePlayer; + NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer; + NSWeapon firstWeapon; - if (HUD_DrawWeaponSelect_CanSwitch(pl) == false) { - pSeat->m_flHUDWeaponSelectTime = time + 3; - pSeat->m_iHUDWeaponSelected = pl.activeweapon; + if (HUD_DrawWeaponSelect_CanSwitch(pl) = false) { return; } - if (pSeat->m_flHUDWeaponSelectTime < time) { - pSeat->m_iHUDWeaponSelected = pl.activeweapon; - pl.StartSoundDef("Player.WeaponSelectionOpen", CHAN_ITEM, false); + firstWeapon = HLWeapon_SortWeaponChain(pl); + + if (pl.m_activeWeapon.m_prevWeapon) { + HUD_SelectWeapon(pl.m_activeWeapon.m_prevWeapon); } else { - pl.StartSoundDef("Player.WeaponSelectionMoveSlot", CHAN_ITEM, false); - - pSeat->m_iHUDWeaponSelected++; - if (pSeat->m_iHUDWeaponSelected >= g_weapons.length) { - pSeat->m_iHUDWeaponSelected = 1; - } + HUD_SelectWeapon(firstWeapon); } - - pSeat->m_flHUDWeaponSelectTime = time + 3; - - if not (pl.g_items & g_weapons[pSeat->m_iHUDWeaponSelected].id) - HUD_DrawWeaponSelect_Back(); - else if (g_weapons[pSeat->m_iHUDWeaponSelected].isempty) - if (g_weapons[pSeat->m_iHUDWeaponSelected].isempty(pl)) - HUD_DrawWeaponSelect_Back(); } void HUD_DrawWeaponSelect_Trigger(void) { - player pl = (player)pSeat->m_ePlayer; - if (pl.activeweapon != pSeat->m_iHUDWeaponSelected) - View_ForceChange(pl, pSeat->m_iHUDWeaponSelected); - - - Sound_Play(pSeat->m_ePlayer, CHAN_ITEM, "Player.WeaponSelected"); - pSeat->m_iHUDWeaponSelected = pSeat->m_flHUDWeaponSelectTime = 0; } void HUD_DrawWeaponSelect_Last(void) { - player pl = (player)pSeat->m_ePlayer; - if (pl.g_items & g_weapons[pSeat->m_iOldWeapon].id) { - View_ForceChange(pl, pSeat->m_iOldWeapon); - } + } void @@ -136,23 +179,15 @@ HUD_DrawWeaponSelect_Num(vector vecPos, float fValue) int HUD_InSlotPos(int slot, int pos) { - player pl = (player)pSeat->m_ePlayer; - for (int i = 1; i < g_weapons.length; i++) { - if (g_weapons[i].slot == slot && g_weapons[i].slot_pos == pos) { - if (pl.g_items & g_weapons[i].id) { - return i; - } else { - return (-1); - } - } - } + return (-1); } void HUD_SlotSelect(int slot) { - player pl = (player)pSeat->m_ePlayer; +#if 0 + NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer; int curslot = g_weapons[pSeat->m_iHUDWeaponSelected].slot; int i; @@ -201,12 +236,14 @@ HUD_SlotSelect(int slot) pSeat->m_flHUDWeaponSelectTime = time + 3; } } +#endif } void HUD_DrawWeaponSelect(void) { - player pl = (player)pSeat->m_ePlayer; +#if 0 + NSClientPlayer pl = (NSClientPlayer)pSeat->m_ePlayer; if (!pl.activeweapon) { return; } @@ -254,4 +291,5 @@ HUD_DrawWeaponSelect(void) vecPos[0] += 25; } } +#endif } diff --git a/src/client/init.qc b/src/client/init.qc index 666ff25..25c2fc7 100644 --- a/src/client/init.qc +++ b/src/client/init.qc @@ -26,6 +26,7 @@ ClientGame_Init(float apilevel, string enginename, float engineversion) { Obituary_Init(); registercommand("chooseteam"); + registercommand("hudSort"); } void VGUI_ShowMOTD(); @@ -56,6 +57,8 @@ ClientGame_RendererRestart(string rstr) MUZZLE_SMALL = (int)getmodelindex("sprites/muzzleflash2.spr"); MUZZLE_WEIRD = (int)getmodelindex("sprites/muzzleflash3.spr"); + HLSprite_Init(); + Damage_Precache(); Obituary_Precache(); diff --git a/src/client/obituary.qc b/src/client/obituary.qc index be2b602..cbdd278 100644 --- a/src/client/obituary.qc +++ b/src/client/obituary.qc @@ -17,6 +17,7 @@ void Obituary_Init(void) { +#if 0 int c; int i; filestream fh; @@ -74,6 +75,7 @@ Obituary_Init(void) } fclose(fh); +#endif } void @@ -86,6 +88,7 @@ Obituary_Precache(void) void Obituary_KillIcon(int id, float w) { +#if 0 if (w > 0) for (int i = 0; i < g_obtype_count; i++) { if (g_weapons[w].name == g_obtypes[i].name) { @@ -101,11 +104,13 @@ Obituary_KillIcon(int id, float w) return; } } +#endif } void Obituary_Add(string attacker, string victim, float weapon, float flags) { +#if 0 int i; int x, y; x = OBITUARY_LINES; @@ -143,6 +148,7 @@ Obituary_Add(string attacker, string victim, float weapon, float flags) print("\n"); } } +#endif } void diff --git a/src/client/progs.src b/src/client/progs.src index 7fb792b..c28df20 100644 --- a/src/client/progs.src +++ b/src/client/progs.src @@ -1,6 +1,6 @@ #pragma target fte_5768 //#pragma flag enable assumeint -#pragma progs_dat "../../csprogs.dat" +#pragma progs_dat "../../zpak001.pk3dir/csprogs.dat" #define CSQC #define CLIENT diff --git a/src/client/scoreboard.qc b/src/client/scoreboard.qc index b020b56..ae85744 100644 --- a/src/client/scoreboard.qc +++ b/src/client/scoreboard.qc @@ -29,7 +29,7 @@ Scores_Init(void) } void -Scores_DrawTeam(player pl, vector pos) +Scores_DrawTeam(NSClientPlayer pl, vector pos) { drawfill(pos, [290, 1], SCORE_LINE_C, 1.0f, DRAWFLAG_ADDITIVE); @@ -135,7 +135,7 @@ Scores_DrawTeam(player pl, vector pos) } void -Scores_DrawNormal(player pl, vector pos) +Scores_DrawNormal(NSClientPlayer pl, vector pos) { drawfill(pos, [290, 1], SCORE_LINE_C, 1.0f, DRAWFLAG_ADDITIVE); @@ -192,9 +192,9 @@ void Scores_Draw(void) { vector pos; - player pl; + NSClientPlayer pl; - pl = (player)pSeat->m_ePlayer; + pl = (NSClientPlayer)pSeat->m_ePlayer; if (autocvar_cl_centerscores) { int c = 10; diff --git a/src/menu/Makefile b/src/menu/Makefile index 627019a..2fe44a4 100644 --- a/src/menu/Makefile +++ b/src/menu/Makefile @@ -1,4 +1,4 @@ -CC=fteqcc +QCC=fteqcc all: - $(CC) progs.src + $(QCC) progs.src diff --git a/src/menu/progs.src b/src/menu/progs.src index b81630b..6bc139e 100644 --- a/src/menu/progs.src +++ b/src/menu/progs.src @@ -1,6 +1,6 @@ #pragma target fte_5768_5768 //#pragma flag enable assumeint -#pragma progs_dat "../../menu.dat" +#pragma progs_dat "../../zpak001.pk3dir/menu.dat" #define MENU #define GAME_DIR "valve" #define MODEL_PREVIEW diff --git a/src/server/Makefile b/src/server/Makefile index 627019a..2fe44a4 100644 --- a/src/server/Makefile +++ b/src/server/Makefile @@ -1,4 +1,4 @@ -CC=fteqcc +QCC=fteqcc all: - $(CC) progs.src + $(QCC) progs.src diff --git a/src/server/flashlight.qc b/src/server/flashlight.qc index 97a36a4..83d6b5a 100644 --- a/src/server/flashlight.qc +++ b/src/server/flashlight.qc @@ -22,7 +22,7 @@ void Flashlight_Toggle(void) } } -#ifdef VALVE +#if 0 player pl = (player)self; if (!(pl.g_items & ITEM_SUIT)) { return; diff --git a/src/server/gamerules.h b/src/server/gamerules.h index 6ecef05..95ae9b4 100644 --- a/src/server/gamerules.h +++ b/src/server/gamerules.h @@ -18,7 +18,6 @@ class HLGameRules:CGameRules { virtual void PlayerConnect(NSClientPlayer); virtual void PlayerDisconnect(NSClientPlayer); - virtual void PlayerKill(NSClientPlayer); virtual void PlayerPostFrame(NSClientPlayer); virtual void LevelDecodeParms(NSClientPlayer); diff --git a/src/server/gamerules.qc b/src/server/gamerules.qc index c3727ef..a8b8cb7 100644 --- a/src/server/gamerules.qc +++ b/src/server/gamerules.qc @@ -21,9 +21,8 @@ HLGameRules::IsMultiplayer(void) } void -HLGameRules::LevelDecodeParms(NSClientPlayer pp) +HLGameRules::LevelDecodeParms(NSClientPlayer pl) { - player pl = (player)pp; g_landmarkpos[0] = parm1; g_landmarkpos[1] = parm2; g_landmarkpos[2] = parm3; @@ -36,6 +35,7 @@ HLGameRules::LevelDecodeParms(NSClientPlayer pp) pl.activeweapon = parm11; pl.flags = parm64; +#if 0 pl.ammo_9mm = parm12; pl.ammo_357 = parm13; pl.ammo_buckshot = parm14; @@ -56,19 +56,12 @@ HLGameRules::LevelDecodeParms(NSClientPlayer pp) pl.crossbow_mag = parm28; pl.rpg_mag = parm29; pl.satchel_chg = parm30; - - /* reset bounds */ - if (pl.HasFlags(FL_CROUCHING)) { - pl.SetSize(VEC_CHULL_MIN, VEC_CHULL_MAX); - } else { - pl.SetSize(VEC_HULL_MIN, VEC_HULL_MAX); - } +#endif } void -HLGameRules::LevelChangeParms(NSClientPlayer pp) +HLGameRules::LevelChangeParms(NSClientPlayer pl) { - player pl = (player)pp; parm1 = g_landmarkpos[0]; parm2 = g_landmarkpos[1]; parm3 = g_landmarkpos[2]; @@ -81,6 +74,8 @@ HLGameRules::LevelChangeParms(NSClientPlayer pp) parm64 = pl.GetFlags(); parm10 = pl.g_items; parm11 = pl.activeweapon; + +#if 0 parm12 = pl.ammo_9mm; parm13 = pl.ammo_357; parm14 = pl.ammo_buckshot; @@ -100,6 +95,7 @@ HLGameRules::LevelChangeParms(NSClientPlayer pp) parm28 = pl.crossbow_mag; parm29 = pl.rpg_mag; parm30 = pl.satchel_chg; +#endif } void @@ -132,12 +128,6 @@ HLGameRules::PlayerDisconnect(NSClientPlayer pl) super::PlayerDisconnect(pl); } -void -HLGameRules::PlayerKill(NSClientPlayer pl) -{ - Damage_Apply(pl, pl, pl.health, WEAPON_NONE, DMG_SKIP_ARMOR); -} - void TriggerFlashlight(NSClient target) { diff --git a/src/server/gamerules_multiplayer.qc b/src/server/gamerules_multiplayer.qc index 163cb79..7c56d8f 100644 --- a/src/server/gamerules_multiplayer.qc +++ b/src/server/gamerules_multiplayer.qc @@ -122,9 +122,9 @@ HLMultiplayerRules::PlayerDeath(NSClientPlayer pl) #ifdef VALVE /* explode all satchels */ - s_satchel_detonate((entity)pl); + //s_satchel_detonate((entity)pl); /* drop their posessions into a weaponbox item */ - weaponbox_spawn((player)pl); + //weaponbox_spawn(pl); #endif /* either gib, or make a corpse */ @@ -133,6 +133,7 @@ HLMultiplayerRules::PlayerDeath(NSClientPlayer pl) float gibStrength = g_dmg_iDamage * 2.0f; BreakModel_Entity(pl, gibDir, gibStrength); } else { +#if 0 float deathAnimation = ANIM_DIESIMPLE; switch (g_dmg_iHitBody) { @@ -159,16 +160,16 @@ HLMultiplayerRules::PlayerDeath(NSClientPlayer pl) break; } - NSEntity newCorpse = (NSEntity)FX_Corpse_Spawn((player)pl, deathAnimation); + NSEntity newCorpse = (NSEntity)FX_Corpse_Spawn(pl, deathAnimation); /* if we were crouching, adjust the bbox (thx 2 lack of crouch death animation) */ - if (pl.flags & FL_CROUCHING) { + if (pl.IsCrouching()) { newCorpse.SetSize(VEC_HULL_MIN, [16, 16, -16]); } +#endif } /* now let's make the real client invisible */ - pl.Death(); pl.SetTakedamage(DAMAGE_NO); pl.gflags &= ~GF_FLASHLIGHT; pl.gflags &= ~GF_EGONBEAM; @@ -185,9 +186,8 @@ HLMultiplayerRules::PlayerDeath(NSClientPlayer pl) } void -HLMultiplayerRules::PlayerSpawn(NSClientPlayer pp) +HLMultiplayerRules::PlayerSpawn(NSClientPlayer pl) { - player pl = (player)pp; string playerModel; /* this is where the mods want to deviate */ entity spot; @@ -239,21 +239,20 @@ HLMultiplayerRules::PlayerSpawn(NSClientPlayer pp) pl.SetInfoKey("*dead", "0"); pl.SetInfoKey("*deaths", ftos(pl.deaths)); pl.SetPropData("actor_human"); - pl.SetCanBleed(true); + pl.EnableBleeding(); LevelNewParms(); LevelDecodeParms(pl); #if defined (VALVE) || defined (GEARBOX) - pl.g_items = ITEM_CROWBAR | ITEM_GLOCK | ITEM_SUIT; - pl.activeweapon = WEAPON_GLOCK; - pl.glock_mag = 18; - pl.ammo_9mm = 44; + pl.GiveItem("item_suit"); + pl.GiveItem("weapon_9mmhandgun"); + pl.GiveItem("weapon_crowbar"); + //pl.ammo_9mm = 44; #endif spot = Spawn_SelectRandom("info_player_deathmatch"); pl.Transport(spot.origin, spot.angles); - Weapons_RefreshAmmo(pl); Client_FixAngle(pl, pl.angles); } @@ -293,7 +292,7 @@ void CSEv_HLDM_Chooseteam_s(string teamName) { HLGameRules rules = (HLGameRules)g_grMode; - player pl = (player)self; + NSClientPlayer pl = (NSClientPlayer)self; if (!teamName) return; @@ -310,7 +309,9 @@ CSEv_HLDM_Chooseteam_s(string teamName) for (int i = 0; i < c; i++) { if (argv(i) == teamName) { pl.SetTeam((float)i + 1); - Damage_Apply(pl, pl, 100, 0, DMG_SKIP_ARMOR); + pl.SetHealth(-100); + pl.Death(pl, pl, 100i, g_vec_null, 0i); + //Damage_Apply(pl, pl, 100, 0, DMG_SKIP_ARMOR); return; } } diff --git a/src/server/gamerules_singleplayer.qc b/src/server/gamerules_singleplayer.qc index 026e462..d8fbe9e 100644 --- a/src/server/gamerules_singleplayer.qc +++ b/src/server/gamerules_singleplayer.qc @@ -50,7 +50,7 @@ HLSingleplayerRules::PlayerDeath(NSClientPlayer pl) corpse.movetype = MOVETYPE_TOSS; corpse.solid = SOLID_TRIGGER; corpse.modelindex = pl.modelindex; - corpse.frame = ANIM_DIESIMPLE; + //corpse.frame = ANIM_DIESIMPLE; corpse.angles = pl.angles; corpse.velocity = pl.velocity; } @@ -85,31 +85,32 @@ HLSingleplayerRules::PlayerSpawn(NSClientPlayer pl) pl.ClearVelocity(); pl.SetInfoKey("*spec", "0"); pl.SetInfoKey("*deaths", ftos(pl.deaths)); - pl.SetCanBleed(true); + pl.EnableBleeding(); if (startspot != "") { LevelDecodeParms(pl); pl.SetOrigin(Landmark_GetSpot()); + pl.Physics_Run(); } else { entity spawnPoint; LevelNewParms(); spawnPoint = find(world, ::classname, "info_player_start"); pl.Transport(spawnPoint.origin, spawnPoint.angles); + pl.Physics_Run(); } - Weapons_RefreshAmmo(pl); Client_FixAngle(pl, pl.angles); } bool -HLSingleplayerRules::ImpulseCommand(NSClient bp, float num) +HLSingleplayerRules::ImpulseCommand(NSClient pl, float num) { switch (num) { case 101: - player pl = (player)bp; pl.SetHealth(100); pl.SetMaxHealth(100); pl.SetArmor(100); +#if 0 pl.g_items |= ITEM_SUIT; Weapons_AddItem(pl, WEAPON_CROWBAR, -1); Weapons_AddItem(pl, WEAPON_GLOCK, -1); @@ -137,10 +138,11 @@ HLSingleplayerRules::ImpulseCommand(NSClient bp, float num) Weapons_AddItem(pl, WEAPON_SNIPERRIFLE, -1); Weapons_AddItem(pl, WEAPON_SPORELAUNCHER, -1); Weapons_AddItem(pl, WEAPON_SHOCKRIFLE, -1); +#endif #endif break; default: - return super::ImpulseCommand(bp, num); + return super::ImpulseCommand(pl, num); } return true; diff --git a/src/server/items.h b/src/server/items.h index 9a34809..abe7476 100644 --- a/src/server/items.h +++ b/src/server/items.h @@ -14,6 +14,7 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#if 0 /* PICKUP ITEMS */ class item_pickup:NSRenderableEntity { @@ -30,3 +31,4 @@ class item_pickup:NSRenderableEntity virtual void SetFloating(int); virtual void PickupRespawn(void); }; +#endif \ No newline at end of file diff --git a/src/server/player.qc b/src/server/player.qc index 68edb08..0263fae 100644 --- a/src/server/player.qc +++ b/src/server/player.qc @@ -14,19 +14,6 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -void Weapons_Draw(player pl); - -void -CSEv_PlayerSwitchWeapon_i(int w) -{ - player pl = (player)self; - - if (pl.activeweapon != w) { - pl.activeweapon = w; - Weapons_Draw(pl); - } -} - void Player_Precache(void) { diff --git a/src/server/progs.src b/src/server/progs.src index 8445f11..f317d3d 100644 --- a/src/server/progs.src +++ b/src/server/progs.src @@ -1,6 +1,6 @@ #pragma target fte_5768 //#pragma flag enable assumeint -#pragma progs_dat "../../progs.dat" +#pragma progs_dat "../../zpak001.pk3dir/progs.dat" #define QWSSQC #define SERVER @@ -20,19 +20,19 @@ defs.h ../shared/include.src player.qc -items.qc -item_longjump.qc -item_suit.qc -item_healthkit.qc -item_battery.qc -item_weaponbox.qc -world_items.qc +//items.qc +//item_longjump.qc +//item_suit.qc +//item_healthkit.qc +//item_battery.qc +//item_weaponbox.qc +//world_items.qc xen_spore_small.qc xen_spore_medium.qc xen_spore_large.qc xen_hair.qc xen_plantlight.qc -ammo.qc +//ammo.qc ../../../src/botlib/include.src @@ -42,7 +42,6 @@ gamerules_multiplayer.qc server.qc damage.qc flashlight.qc -modelevent.qc spawn.qc diff --git a/src/server/server.qc b/src/server/server.qc index a149c8e..5f25a57 100644 --- a/src/server/server.qc +++ b/src/server/server.qc @@ -33,7 +33,6 @@ Game_Worldspawn(void) precache_model("models/player.mdl"); precache_model("models/w_weaponbox.mdl"); - Weapons_Init(); Player_Precache(); FX_Corpse_Init(); } diff --git a/src/server/xen_hair.qc b/src/server/xen_hair.qc index 1b00205..ee29b60 100644 --- a/src/server/xen_hair.qc +++ b/src/server/xen_hair.qc @@ -33,10 +33,9 @@ class xen_hair:NSRenderableEntity void xen_hair::Respawn(void) { + super::Respawn(); SetSolid(SOLID_SLIDEBOX); SetMovetype(MOVETYPE_WALK); - SetModel(GetSpawnModel()); - SetOrigin(GetSpawnOrigin()); } void diff --git a/src/server/xen_plantlight.qc b/src/server/xen_plantlight.qc index 22dafd0..6da221e 100644 --- a/src/server/xen_plantlight.qc +++ b/src/server/xen_plantlight.qc @@ -33,10 +33,9 @@ class xen_plantlight:NSRenderableEntity void xen_plantlight::Respawn(void) { + super::Respawn(); SetSolid(SOLID_SLIDEBOX); SetMovetype(MOVETYPE_WALK); - SetModel(GetSpawnModel()); - SetOrigin(GetSpawnOrigin()); } void diff --git a/src/server/xen_spore_large.qc b/src/server/xen_spore_large.qc index 3cf6c95..539b86f 100644 --- a/src/server/xen_spore_large.qc +++ b/src/server/xen_spore_large.qc @@ -33,10 +33,9 @@ class xen_spore_large:NSRenderableEntity void xen_spore_large::Respawn(void) { + super::Respawn(); SetSolid(SOLID_SLIDEBOX); SetMovetype(MOVETYPE_WALK); - SetModel(GetSpawnModel()); - SetOrigin(GetSpawnOrigin()); } void diff --git a/src/server/xen_spore_medium.qc b/src/server/xen_spore_medium.qc index 03b0156..d478b9b 100644 --- a/src/server/xen_spore_medium.qc +++ b/src/server/xen_spore_medium.qc @@ -33,10 +33,9 @@ class xen_spore_medium:NSRenderableEntity void xen_spore_medium::Respawn(void) { + super::Respawn(); SetSolid(SOLID_SLIDEBOX); SetMovetype(MOVETYPE_WALK); - SetModel(GetSpawnModel()); - SetOrigin(GetSpawnOrigin()); } void diff --git a/src/server/xen_spore_small.qc b/src/server/xen_spore_small.qc index 7112806..dac57bb 100644 --- a/src/server/xen_spore_small.qc +++ b/src/server/xen_spore_small.qc @@ -33,10 +33,9 @@ class xen_spore_small:NSRenderableEntity void xen_spore_small::Respawn(void) { + super::Respawn(); SetSolid(SOLID_SLIDEBOX); SetMovetype(MOVETYPE_WALK); - SetModel(GetSpawnModel()); - SetOrigin(GetSpawnOrigin()); } void diff --git a/src/shared/HLGaussBeam.qc b/src/shared/HLGaussBeam.qc new file mode 100644 index 0000000..bfb3d3b --- /dev/null +++ b/src/shared/HLGaussBeam.qc @@ -0,0 +1,88 @@ +#ifdef SERVER +class +HLGaussBeam:NSProjectile +{ + void HLGaussBeam(void); + + virtual void Launch(vector, vector, float, float, float); + nonvirtual void GaussAttack(float); +}; + +void +HLGaussBeam::HLGaussBeam(void) +{ +} + +void +HLGaussBeam::Launch(vector startPos, vector launchDir, float fuseOffset, float powerMultiplier, float dmgMultiplier) +{ + GaussAttack(fuseOffset); + + if (fuseOffset > 0.0f) + FX_GaussBeam(startPos, launchDir, 6, owner); + else + FX_GaussBeam(startPos, launchDir, 0, owner); + + NSError("fuseOffset: %f", fuseOffset); +} + +void +HLGaussBeam::GaussAttack(float fuseOffset) +{ + NSClientPlayer ourOwner = (NSClientPlayer)owner; + int iLoop = 6i; + vector vecCurPlane; + vector vecCurPos; + vector vecSrc; + vector vecEndPos; + vector vecDir; + + vecDir = anglesToForward(ourOwner.GetViewAngle()); + vecSrc = ourOwner.GetEyePos(); + vecEndPos = vecSrc + v_forward * 1024; + traceline(vecSrc, vecEndPos, FALSE, ourOwner); + vecCurPlane = trace_plane_normal; + vecCurPos = trace_endpos; + + int iDamage; + + if (fuseOffset > 0.0) { + iDamage = (int)rint(lerp(20, 150, fuseOffset / 5.0f)); + } else { + iDamage = 20i; + } + + if (serverkeyfloat("*bspversion") == BSPVER_HL) + if (getsurfacetexture(trace_ent, getsurfacenearpoint(trace_ent, trace_endpos)) == "sky") { + return; + } + + if (trace_ent.takedamage == DAMAGE_YES) { + //Damage_Apply(trace_ent, ourOwner, iDamage, WEAPON_GAUSS, DMG_ELECTRO); + sound(trace_ent, CHAN_ITEM, sprintf("weapons/electro%d.wav", random(0,3)+4), 1, ATTN_NORM); + } + + // reflection equation: + trace_plane_normal = vecCurPlane; + trace_endpos = vecCurPos; + + while (iLoop > 0i) { + vector newDir; + trace_plane_normal = vecCurPlane; + trace_endpos = vecCurPos; + newDir = vecDir - 2 * (vecDir * trace_plane_normal) * trace_plane_normal; + vecDir = newDir; + vecSrc = trace_endpos + (vecDir * -1); + vecEndPos = trace_endpos + (vecDir * 8192); + traceline(vecSrc, vecEndPos, FALSE, ourOwner); + vecCurPlane = trace_plane_normal; + vecCurPos = trace_endpos; + iLoop--; + + if (trace_ent.takedamage == DAMAGE_YES) { + //Damage_Apply(trace_ent, ourOwner, iDamage, WEAPON_GAUSS, DMG_ELECTRO); + sound(trace_ent, CHAN_ITEM, sprintf("weapons/electro%d.wav", random(0,3)+4), 1, ATTN_NORM); + } + } +} +#endif \ No newline at end of file diff --git a/src/shared/HLWeapon.qc b/src/shared/HLWeapon.qc new file mode 100644 index 0000000..79e4a10 --- /dev/null +++ b/src/shared/HLWeapon.qc @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2024 Marco Cawthorne + * + * 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. + */ + +/*! \brief Half-Life weapon base class. */ +/*!QUAKED HLWeapon (0 0.8 0.8) (-16 -16 0) (16 16 72) +# OVERVIEW +Half-Life specific weapon based on NSWeapon. + +# NEW KEYS +- "ammoIcon" - Which sprites/ image to use. See notes. +- "crosshair" - Which sprites/ image to use as a crosshair. See notes. +- "hudSlot" - In which weapon selection slot this weapon belongs to. +- "hudSlotPos" - The position of the weapon in the respective weapon selection slot. + +# NOTES +Both `ammoIcon` and `crosshair` refer to sprite declarations inside the sprites/ directory. FreeHL scans the `sprites/hud.txt` file and and weapon specific files. +Since the weapon specific files only contain short names like `ammo` and `crosshair` you have to refer to them with a prefix separated by a `.` period symbol. + +For example, `ammoIcon` being set to `weapon_foobar.ammo` will look up `ammo` inside `sprites/weapon_foobar.txt`. +*/ +class +HLWeapon:NSWeapon +{ + void HLWeapon(void); + + bool m_bAltModeSwitch; + virtual void AddedToInventory(void); + virtual void PrimaryAttack(void); + virtual void SecondaryAttack(void); + +#ifdef SERVER + virtual void SpawnKey(string, string); +#endif + +#ifdef CLIENT + int m_iHudSlot; + int m_iHudSlotPos; + + string m_ammoIcon; + string m_crossHair; + NSWeapon m_nextWeapon; + virtual void UpdateGUI(void); + nonvirtual void DrawLaser(void); +#endif +}; + +void +HLWeapon::HLWeapon(void) +{ + +} + +#ifdef SERVER +void +HLWeapon::SpawnKey(string keyName, string setValue) +{ + switch (keyName) { + case "altLaser": + case "ammoIcon": + case "crosshair": + case "hudSlot": + case "hudSlotPos": + break; + default: + super::SpawnKey(keyName, setValue); + } +} +#endif + +void +HLWeapon::PrimaryAttack(void) +{ + if (m_bAltModeSwitch == true) { + if (CanFire() == false) { + return; + } + + //m_iMode = 1 - m_iMode; + } + + if (m_iMode) { + super::SecondaryAttack(); + return; + } + + super::PrimaryAttack(); +} + +void +HLWeapon::SecondaryAttack(void) +{ + if (m_bAltModeSwitch == true) { + if (CanFire() == false) { + return; + } + + m_iMode = 1 - m_iMode; + SetAttackNext(1.0); + SetIdleNext(1.0f); + return; + } + + super::SecondaryAttack(); +} + + +void +HLWeapon::AddedToInventory(void) +{ + super::AddedToInventory(); + +#ifdef CLIENT + m_ammoIcon = GetDefString("ammoIcon"); + + if (m_ammoIcon == "") { + m_ammoIcon = sprintf("%s.ammo", strtolower(classname)); + } + + m_crossHair = GetDefString("crosshair"); + + if (m_crossHair == "") { + m_crossHair = sprintf("%s.crosshair", strtolower(classname)); + } + + if (m_ammoIcon == "none") { + m_ammoIcon = __NULL__; + } + + if (m_crossHair == "none") { + m_crossHair = __NULL__; + } + + m_iHudSlot = GetDefInt("hudSlot"); + m_iHudSlotPos = GetDefInt("hudSlotPos"); +#endif + + m_bAltModeSwitch = GetDefBool("altLaser"); +} + +#ifdef CLIENT +void +HLWeapon::UpdateGUI(void) +{ + NSClientPlayer ourOwner = __NULL__; + + /* draw crosshair */ + HLSprite_DrawCrosshair(m_crossHair); + + /* draw ammo icon */ + if (m_ammoIcon) { + vector ammoPos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42]; + HLSprite_Draw_RGBA(m_ammoIcon, ammoPos, g_hud_color, pSeatLocal->m_flAmmo2Alpha, true); + } + + if (m_iMode) { + DrawLaser(); + } + + if (m_bAmmoRequired == false) + return; + + ourOwner = (NSClientPlayer)GetOwner(); + + if (m_iClipSize > 0i) { + ourOwner.a_ammo1 = m_iClip; + HUD_DrawAmmo1(); + } + + ourOwner.a_ammo2 = ourOwner.GetReserveAmmo(m_primaryAmmoType); + HUD_DrawAmmo2(); + + if (m_secondaryAmmoType && m_primaryAmmoType != m_secondaryAmmoType) { + ourOwner.a_ammo3 = ourOwner.GetReserveAmmo(m_secondaryAmmoType); + HUD_DrawAmmo3(); + } +} + +void +HLWeapon::DrawLaser(void) +{ + NSClientPlayer ourOwner = (NSClientPlayer)GetOwner(); + float lerpValue; + vector laser_pos = g_vec_null; + vector jitter = [0.0f, 0.0f, 0.0f]; + + vector src = ourOwner.GetEyePos(); + traceline(src, src + (anglesToForward(ourOwner.v_angle) * 256), FALSE, ourOwner); + lerpValue = lerp(18,6, trace_fraction); + jitter[0] = (random(0,2) - 2) * (1 - trace_fraction); + jitter[1] = (random(0,2) - 2) * (1 - trace_fraction); + laser_pos = g_hudmins + (g_hudres / 2) + ([-lerpValue,-lerpValue] / 2); + + drawsubpic( + laser_pos + jitter, + [lerpValue,lerpValue], + g_laser_spr, + [0,0], + [1.0, 1.0], + [1,1,1], + 1.0f, + DRAWFLAG_ADDITIVE + ); +} +#endif diff --git a/src/shared/animations.h b/src/shared/animations.h index f19f157..ec1ee09 100644 --- a/src/shared/animations.h +++ b/src/shared/animations.h @@ -90,6 +90,3 @@ enum ANIM_CR_AIMBOW, ANIM_CR_SHOOTBOW }; - -void Animation_PlayerTop(player, float, float); -void Animation_PlayerBottom(player, float, float); diff --git a/src/shared/animations.qc b/src/shared/animations.qc index 4a2dcbb..99a2919 100644 --- a/src/shared/animations.qc +++ b/src/shared/animations.qc @@ -21,6 +21,10 @@ .float bonecontrol2; .float bonecontrol3; .float bonecontrol4; +.float frame2; +.float lerpfrac; +.float baselerpfrac; +.float baseframe2; void Animation_Print(string sWow) { #ifdef CLIENT @@ -31,7 +35,7 @@ void Animation_Print(string sWow) { } void -Animation_TimerUpdate(player pl, float ftime) +Animation_TimerUpdate(HLPlayer pl, float ftime) { makevectors([0, pl.v_angle[1], 0]); @@ -56,28 +60,28 @@ depending on what the player is doing ================= */ void -Animation_PlayerUpdate(player pl) +Animation_PlayerUpdate(HLPlayer pl) { pl.basebone = gettagindex(pl, "Bip01 Spine1"); if (pl.anim_top_delay <= 0.0f) { - pl.anim_top = Weapons_GetAim(pl, pl.activeweapon); + pl.anim_top = 0;//Weapons_GetAim(pl, pl.activeweapon); } if (vlen(pl.velocity) == 0) { - if (pl.flags & FL_CROUCHING) { + if (pl.IsCrouching()) { pl.anim_bottom = ANIM_CROUCHIDLE; } else { pl.anim_bottom = ANIM_IDLE; } } else if (vlen(pl.velocity) < 150) { - if (pl.flags & FL_CROUCHING) { + if (pl.IsCrouching()) { pl.anim_bottom = ANIM_CRAWL; } else { pl.anim_bottom = ANIM_WALK; } } else if (vlen(pl.velocity) > 150) { - if (pl.flags & FL_CROUCHING) { + if (pl.IsCrouching()) { pl.anim_bottom = ANIM_CRAWL; } else { pl.anim_bottom = ANIM_RUN; @@ -112,7 +116,7 @@ Animation_PlayerUpdate(player pl) } void -Animation_PlayerTop(player pl, float topanim, float timer) +Animation_PlayerTop(HLPlayer pl, float topanim, float timer) { pl.anim_top = topanim; pl.anim_top_time = 0.0f; @@ -120,7 +124,7 @@ Animation_PlayerTop(player pl, float topanim, float timer) } void -Animation_PlayerBottom(player pl, float botanim, float timer) +Animation_PlayerBottom(HLPlayer pl, float botanim, float timer) { pl.anim_bottom = botanim; } diff --git a/src/shared/fx_corpse.qc b/src/shared/fx_corpse.qc index 37abeb2..dc68e85 100644 --- a/src/shared/fx_corpse.qc +++ b/src/shared/fx_corpse.qc @@ -55,14 +55,14 @@ FX_Corpse_Update(void) } entity -FX_Corpse_Spawn(player pl, float anim) +FX_Corpse_Spawn(NSClientPlayer pl, float anim) { NSRenderableEntity body_next = (NSRenderableEntity)FX_Corpse_Next(); body_next.SetMovetype(MOVETYPE_BOUNCE); body_next.SetSolid(SOLID_CORPSE); body_next.SetModel(pl.GetModel()); - if (pl.flags & FL_CROUCHING) { + if (pl.IsCrouching()) { body_next.SetOrigin(pl.GetOrigin() + [0,0,32]); } else { body_next.SetOrigin(pl.GetOrigin()); diff --git a/src/shared/include.src b/src/shared/include.src index 520c655..b8aa65c 100644 --- a/src/shared/include.src +++ b/src/shared/include.src @@ -2,32 +2,15 @@ ../../../valve/src/shared/entities.h ../../../valve/src/shared/events.h ../../../valve/src/shared/flags.h + ../../../valve/src/shared/player.qc -../../../valve/src/shared/weapon_common.h -../../../valve/src/shared/animations.h ../../../valve/src/shared/animations.qc ../../../valve/src/shared/pmove.qc ../../../valve/src/shared/fx_blood.qc ../../../valve/src/shared/fx_gaussbeam.qc ../../../valve/src/shared/fx_corpse.qc - -../../../valve/src/shared/items.h -../../../valve/src/shared/weapons.h -../../../valve/src/shared/w_crossbow.qc -../../../valve/src/shared/w_crowbar.qc -../../../valve/src/shared/w_egon.qc -../../../valve/src/shared/w_gauss.qc -../../../valve/src/shared/w_glock.qc -../../../valve/src/shared/w_handgrenade.qc -../../../valve/src/shared/w_hornetgun.qc -../../../valve/src/shared/w_mp5.qc -../../../valve/src/shared/w_python.qc -../../../valve/src/shared/w_rpg.qc -../../../valve/src/shared/w_satchel.qc -../../../valve/src/shared/w_shotgun.qc -../../../valve/src/shared/w_snark.qc +../../../valve/src/shared/HLGaussBeam.qc +../../../valve/src/shared/HLWeapon.qc ../../../valve/src/shared/w_tripmine.qc -../../../valve/src/shared/weapons.qc -../../../valve/src/shared/weapon_common.qc #endlist diff --git a/src/shared/player.qc b/src/shared/player.qc index dfb3644..a72c7c5 100644 --- a/src/shared/player.qc +++ b/src/shared/player.qc @@ -14,24 +14,19 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include "animations.h" #include "skeleton.h" /* all custom SendFlags bits we can possibly send */ enumflags { PLAYER_TOPFRAME = PLAYER_CUSTOMFIELDSTART, - PLAYER_BOTTOMFRAME, - PLAYER_AMMO1, - PLAYER_AMMO2, - PLAYER_AMMO3, - PLAYER_UNUSED5, - PLAYER_UNUSED6, - PLAYER_UNUSED7 + PLAYER_BOTTOMFRAME }; -class player:NSClientPlayer +class HLPlayer:NSClientPlayer { - void(void) player; + void(void) HLPlayer; /* animation */ PREDICTED_INT(anim_top) @@ -40,34 +35,6 @@ class player:NSClientPlayer PREDICTED_INT(anim_bottom) PREDICTED_FLOAT(anim_bottom_time) - /* ammo 1 */ - PREDICTED_INT(glock_mag) - PREDICTED_INT(mp5_mag) - PREDICTED_INT(python_mag) - PREDICTED_INT(shotgun_mag) - PREDICTED_INT(crossbow_mag) - PREDICTED_INT(rpg_mag) - PREDICTED_INT(satchel_chg) - - /* ammo 2 */ - PREDICTED_INT(ammo_9mm) - PREDICTED_INT(ammo_357) - PREDICTED_INT(ammo_buckshot) - PREDICTED_INT(ammo_bolt) - PREDICTED_INT(ammo_rocket) - PREDICTED_INT(ammo_uranium) - PREDICTED_INT(ammo_handgrenade) - PREDICTED_INT(ammo_satchel) - PREDICTED_INT(ammo_tripmine) - PREDICTED_INT(ammo_snark) - PREDICTED_INT(ammo_hornet) - - /* ammo 3 */ - PREDICTED_INT(ammo_m203_grenade) - PREDICTED_INT(ammo_gauss_volume) - PREDICTED_INT(ammo_rpg_state) - PREDICTED_INT(mode_tempstate) - virtual void Physics_Jump(void); virtual void UpdatePlayerAnimation(float); @@ -85,43 +52,24 @@ class player:NSClientPlayer #endif }; +void Animation_PlayerTop(HLPlayer, float, float); +void Animation_PlayerBottom(HLPlayer, float, float); + void -player::player(void) +HLPlayer::HLPlayer(void) { anim_top = 0; anim_top_time = 0; anim_top_delay = 0; anim_bottom = 0; anim_bottom_time = 0; - glock_mag = 0; - mp5_mag = 0; - python_mag = 0; - shotgun_mag = 0; - crossbow_mag = 0; - rpg_mag = 0; - satchel_chg = 0; - ammo_9mm = 0; - ammo_357 = 0; - ammo_buckshot = 0; - ammo_bolt = 0; - ammo_rocket = 0; - ammo_uranium = 0; - ammo_handgrenade = 0; - ammo_satchel = 0; - ammo_tripmine = 0; - ammo_snark = 0; - ammo_hornet = 0; - ammo_m203_grenade = 0; - ammo_gauss_volume = 0; - ammo_rpg_state = 0; - mode_tempstate = 0; } -void Animation_PlayerUpdate(player); -void Animation_TimerUpdate(player, float); +void Animation_PlayerUpdate(HLPlayer); +void Animation_TimerUpdate(HLPlayer, float); void -player::UpdatePlayerAnimation(float timelength) +HLPlayer::UpdatePlayerAnimation(float timelength) { /* calculate our skeletal progression */ Animation_PlayerUpdate(this); @@ -135,7 +83,7 @@ void Camera_StrafeRoll(__inout vector camera_angle); void Shake_Update(NSClientPlayer); void -player::UpdateAliveCam(void) +HLPlayer::UpdateAliveCam(void) { vector cam_pos = GetEyePos(); Camera_RunPosBob(view_angles, cam_pos); @@ -164,10 +112,10 @@ player::UpdateAliveCam(void) } .string oldmodel; -string Weapons_GetPlayermodel(player, int); +//string Weapons_GetPlayermodel(NSClientPlayer, int); void -player::UpdatePlayerAttachments(bool visible) +HLPlayer::UpdatePlayerAttachments(bool visible) { /* draw the flashlight */ if (gflags & GF_FLASHLIGHT) { @@ -199,7 +147,7 @@ player::UpdatePlayerAttachments(bool visible) return; /* what's the current weapon model supposed to be anyway? */ - p_model.oldmodel = Weapons_GetPlayermodel(this, activeweapon); + p_model.oldmodel = 0;//Weapons_GetPlayermodel(this, activeweapon); /* we changed weapons, update skeletonindex */ if (p_model.model != p_model.oldmodel) { @@ -244,19 +192,18 @@ player::UpdatePlayerAttachments(bool visible) } } -void Weapons_AmmoUpdate(entity); -void HUD_AmmoNotify_Check(player pl); -void HUD_ItemNotify_Check(player pl); +void HUD_AmmoNotify_Check(NSClientPlayer pl); +void HUD_ItemNotify_Check(NSClientPlayer pl); /* ================= -player::ReceiveEntity +HLPlayer::ReceiveEntity ================= */ void -player::ReceiveEntity(float new, float flChanged) +HLPlayer::ReceiveEntity(float new, float flChanged) { /* the generic client attributes */ - NSClientPlayer::ReceiveEntity(new, flChanged); + super::ReceiveEntity(new, flChanged); /* animation */ READENTITY_BYTE(anim_top, PLAYER_TOPFRAME) @@ -265,34 +212,9 @@ player::ReceiveEntity(float new, float flChanged) READENTITY_BYTE(anim_bottom, PLAYER_BOTTOMFRAME) READENTITY_FLOAT(anim_bottom_time, PLAYER_BOTTOMFRAME) - READENTITY_BYTE(glock_mag, PLAYER_AMMO1) - READENTITY_BYTE(mp5_mag, PLAYER_AMMO1) - READENTITY_BYTE(python_mag, PLAYER_AMMO1) - READENTITY_BYTE(shotgun_mag, PLAYER_AMMO1) - READENTITY_BYTE(crossbow_mag, PLAYER_AMMO1) - READENTITY_BYTE(rpg_mag, PLAYER_AMMO1) - READENTITY_BYTE(satchel_chg, PLAYER_AMMO1) - - READENTITY_BYTE(ammo_9mm, PLAYER_AMMO2) - READENTITY_BYTE(ammo_357, PLAYER_AMMO2) - READENTITY_BYTE(ammo_buckshot, PLAYER_AMMO2) - READENTITY_BYTE(ammo_bolt, PLAYER_AMMO2) - READENTITY_BYTE(ammo_rocket, PLAYER_AMMO2) - READENTITY_BYTE(ammo_uranium, PLAYER_AMMO2) - READENTITY_BYTE(ammo_handgrenade, PLAYER_AMMO2) - READENTITY_BYTE(ammo_satchel, PLAYER_AMMO2) - READENTITY_BYTE(ammo_tripmine, PLAYER_AMMO2) - READENTITY_BYTE(ammo_snark, PLAYER_AMMO2) - READENTITY_BYTE(ammo_hornet, PLAYER_AMMO2) - - READENTITY_BYTE(ammo_m203_grenade, PLAYER_AMMO3) - READENTITY_BYTE(ammo_gauss_volume, PLAYER_AMMO3) - READENTITY_BYTE(ammo_rpg_state, PLAYER_AMMO3) - READENTITY_BYTE(mode_tempstate, PLAYER_AMMO3) - setorigin(this, origin); - /* these only concern the current player */ + /* these only concern the current HLPlayer */ CSQC_UpdateSeat(); if (this != pSeat->m_ePlayer) return; @@ -301,8 +223,7 @@ player::ReceiveEntity(float new, float flChanged) if (flChanged == UPDATE_ALL) PredictPreFrame(); - if (flChanged & PLAYER_AMMO1 || flChanged & PLAYER_AMMO2 || flChanged & PLAYER_AMMO3) { - Weapons_AmmoUpdate(this); + if (flChanged & PLAYER_AMMOTYPES ) { HUD_AmmoNotify_Check(this); } @@ -312,99 +233,48 @@ player::ReceiveEntity(float new, float flChanged) /* ================= -player::PredictPostFrame +HLPlayer::PredictPostFrame Save the last valid server values away in the _net variants of each field so we can roll them back later. ================= */ void -player::PredictPreFrame(void) +HLPlayer::PredictPreFrame(void) { /* the generic client attributes */ - NSClientPlayer::PredictPreFrame(); + super::PredictPreFrame(); SAVE_STATE(anim_top) SAVE_STATE(anim_top_delay) SAVE_STATE(anim_top_time) SAVE_STATE(anim_bottom) SAVE_STATE(anim_bottom_time) - - SAVE_STATE(glock_mag) - SAVE_STATE(mp5_mag) - SAVE_STATE(python_mag) - SAVE_STATE(shotgun_mag) - SAVE_STATE(crossbow_mag) - SAVE_STATE(rpg_mag) - SAVE_STATE(satchel_chg) - - SAVE_STATE(ammo_9mm) - SAVE_STATE(ammo_357) - SAVE_STATE(ammo_buckshot) - SAVE_STATE(ammo_bolt) - SAVE_STATE(ammo_rocket) - SAVE_STATE(ammo_uranium) - SAVE_STATE(ammo_handgrenade) - SAVE_STATE(ammo_satchel) - SAVE_STATE(ammo_tripmine) - SAVE_STATE(ammo_snark) - SAVE_STATE(ammo_hornet) - - SAVE_STATE(ammo_m203_grenade) - SAVE_STATE(ammo_gauss_volume) - SAVE_STATE(ammo_rpg_state) - SAVE_STATE(mode_tempstate) } /* ================= -player::PredictPostFrame +HLPlayer::PredictPostFrame Where we roll back our values to the ones last sent/verified by the server. ================= */ void -player::PredictPostFrame(void) +HLPlayer::PredictPostFrame(void) { /* the generic client attributes */ - NSClientPlayer::PredictPostFrame(); + super::PredictPostFrame(); ROLL_BACK(anim_top) ROLL_BACK(anim_top_delay) ROLL_BACK(anim_top_time) ROLL_BACK(anim_bottom) ROLL_BACK(anim_bottom_time) - - ROLL_BACK(glock_mag) - ROLL_BACK(mp5_mag) - ROLL_BACK(python_mag) - ROLL_BACK(shotgun_mag) - ROLL_BACK(crossbow_mag) - ROLL_BACK(rpg_mag) - ROLL_BACK(satchel_chg) - - ROLL_BACK(ammo_9mm) - ROLL_BACK(ammo_357) - ROLL_BACK(ammo_buckshot) - ROLL_BACK(ammo_m203_grenade) - ROLL_BACK(ammo_bolt) - ROLL_BACK(ammo_rocket) - ROLL_BACK(ammo_uranium) - ROLL_BACK(ammo_handgrenade) - ROLL_BACK(ammo_satchel) - ROLL_BACK(ammo_tripmine) - ROLL_BACK(ammo_snark) - ROLL_BACK(ammo_hornet) - - ROLL_BACK(ammo_m203_grenade) - ROLL_BACK(ammo_gauss_volume) - ROLL_BACK(ammo_rpg_state) - ROLL_BACK(mode_tempstate) } #else void -player::Save(float handle) +HLPlayer::Save(float handle) { super::Save(handle); @@ -413,38 +283,10 @@ player::Save(float handle) SaveFloat(handle, "anim_top_delay", anim_top_delay); SaveInt(handle, "anim_bottom", anim_bottom); SaveFloat(handle, "anim_bottom_time", anim_bottom_time); - - /* ammo 1 */ - SaveInt(handle, "glock_mag", glock_mag); - SaveInt(handle, "mp5_mag", mp5_mag); - SaveInt(handle, "python_mag", python_mag); - SaveInt(handle, "shotgun_mag", shotgun_mag); - SaveInt(handle, "crossbow_mag", crossbow_mag); - SaveInt(handle, "rpg_mag", rpg_mag); - SaveInt(handle, "satchel_chg", satchel_chg); - - /* ammo 2 */ - SaveInt(handle, "ammo_9mm", ammo_9mm); - SaveInt(handle, "ammo_357", ammo_357); - SaveInt(handle, "ammo_buckshot", ammo_buckshot); - SaveInt(handle, "ammo_bolt", ammo_bolt); - SaveInt(handle, "ammo_rocket", ammo_rocket); - SaveInt(handle, "ammo_uranium", ammo_uranium); - SaveInt(handle, "ammo_handgrenade", ammo_handgrenade); - SaveInt(handle, "ammo_satchel", ammo_satchel); - SaveInt(handle, "ammo_tripmine", ammo_tripmine); - SaveInt(handle, "ammo_snark", ammo_snark); - SaveInt(handle, "ammo_hornet", ammo_hornet); - - /* ammo 3 */ - SaveInt(handle, "ammo_m203_grenade", ammo_m203_grenade); - SaveInt(handle, "ammo_gauss_volume", ammo_gauss_volume); - SaveInt(handle, "ammo_rpg_state", ammo_rpg_state); - SaveInt(handle, "mode_tempstate", mode_tempstate); } void -player::Restore(string strKey, string strValue) +HLPlayer::Restore(string strKey, string strValue) { switch (strKey) { case "anim_top": @@ -462,82 +304,13 @@ player::Restore(string strKey, string strValue) case "anim_bottom_time": anim_bottom_time = ReadFloat(strValue); break; - /* AMMO 1 */ - case "glock_mag": - glock_mag = ReadInt(strValue); - break; - case "mp5_mag": - mp5_mag = ReadInt(strValue); - break; - case "python_mag": - python_mag = ReadInt(strValue); - break; - case "shotgun_mag": - shotgun_mag = ReadInt(strValue); - break; - case "crossbow_mag": - crossbow_mag = ReadInt(strValue); - break; - case "rpg_mag": - rpg_mag = ReadInt(strValue); - break; - case "satchel_chg": - satchel_chg = ReadInt(strValue); - break; - /* AMMO 2 */ - case "ammo_9mm": - ammo_9mm = ReadInt(strValue); - break; - case "ammo_357": - ammo_357 = ReadInt(strValue); - break; - case "ammo_buckshot": - ammo_buckshot = ReadInt(strValue); - break; - case "ammo_bolt": - ammo_bolt = ReadInt(strValue); - break; - case "ammo_rocket": - ammo_rocket = ReadInt(strValue); - break; - case "ammo_uranium": - ammo_uranium = ReadInt(strValue); - break; - case "ammo_handgrenade": - ammo_handgrenade = ReadInt(strValue); - break; - case "ammo_satchel": - ammo_satchel = ReadInt(strValue); - break; - case "ammo_tripmine": - ammo_tripmine = ReadInt(strValue); - break; - case "ammo_snark": - ammo_snark = ReadInt(strValue); - break; - case "ammo_hornet": - ammo_hornet = ReadInt(strValue); - break; - /* AMMO 3 */ - case "ammo_m203_grenade": - ammo_m203_grenade = ReadInt(strValue); - break; - case "ammo_gauss_volume": - ammo_gauss_volume = ReadInt(strValue); - break; - case "ammo_rpg_state": - ammo_rpg_state = ReadInt(strValue); - break; - case "mode_tempstate": - mode_tempstate = ReadInt(strValue); - break; default: super::Restore(strKey, strValue); } } void -player::EvaluateEntity(void) +HLPlayer::EvaluateEntity(void) { /* the generic client attributes */ NSClientPlayer::EvaluateEntity(); @@ -548,45 +321,21 @@ player::EvaluateEntity(void) EVALUATE_FIELD(anim_bottom, PLAYER_BOTTOMFRAME) EVALUATE_FIELD(anim_bottom_time, PLAYER_BOTTOMFRAME) - EVALUATE_FIELD(glock_mag, PLAYER_AMMO1) - EVALUATE_FIELD(mp5_mag, PLAYER_AMMO1) - EVALUATE_FIELD(python_mag, PLAYER_AMMO1) - EVALUATE_FIELD(shotgun_mag, PLAYER_AMMO1) - EVALUATE_FIELD(crossbow_mag, PLAYER_AMMO1) - EVALUATE_FIELD(rpg_mag, PLAYER_AMMO1) - EVALUATE_FIELD(satchel_chg, PLAYER_AMMO1) - - EVALUATE_FIELD(ammo_9mm, PLAYER_AMMO2) - EVALUATE_FIELD(ammo_357, PLAYER_AMMO2) - EVALUATE_FIELD(ammo_buckshot, PLAYER_AMMO2) - EVALUATE_FIELD(ammo_bolt, PLAYER_AMMO2) - EVALUATE_FIELD(ammo_rocket, PLAYER_AMMO2) - EVALUATE_FIELD(ammo_uranium, PLAYER_AMMO2) - EVALUATE_FIELD(ammo_handgrenade, PLAYER_AMMO2) - EVALUATE_FIELD(ammo_satchel, PLAYER_AMMO2) - EVALUATE_FIELD(ammo_tripmine, PLAYER_AMMO2) - EVALUATE_FIELD(ammo_snark, PLAYER_AMMO2) - EVALUATE_FIELD(ammo_hornet, PLAYER_AMMO2) - - EVALUATE_FIELD(ammo_m203_grenade, PLAYER_AMMO3) - EVALUATE_FIELD(ammo_gauss_volume, PLAYER_AMMO3) - EVALUATE_FIELD(ammo_rpg_state, PLAYER_AMMO3) - EVALUATE_FIELD(mode_tempstate, PLAYER_AMMO3) } /* ================= -player::SendEntity +HLPlayer::SendEntity ================= */ float -player::SendEntity(entity ePEnt, float flChanged) +HLPlayer::SendEntity(entity ePEnt, float flChanged) { /* just-in-case. */ - if (classname != "player") + if (IsPlayer() == false) return (0); - /* don't broadcast invisible players */ + /* don't broadcast invisible HLPlayers */ if (IsFakeSpectator() && ePEnt != this) return (0); if (!GetModelindex() && ePEnt != this) @@ -594,9 +343,6 @@ player::SendEntity(entity ePEnt, float flChanged) flChanged = OptimiseChangedFlags(ePEnt, flChanged); - WriteByte(MSG_ENTITY, ENT_PLAYER); - WriteFloat(MSG_ENTITY, flChanged); - /* the generic client attributes */ NSClientPlayer::SendEntity(ePEnt, flChanged); @@ -606,31 +352,6 @@ player::SendEntity(entity ePEnt, float flChanged) SENDENTITY_BYTE(anim_bottom, PLAYER_BOTTOMFRAME) SENDENTITY_FLOAT(anim_bottom_time, PLAYER_BOTTOMFRAME) - SENDENTITY_BYTE(glock_mag, PLAYER_AMMO1) - SENDENTITY_BYTE(mp5_mag, PLAYER_AMMO1) - SENDENTITY_BYTE(python_mag, PLAYER_AMMO1) - SENDENTITY_BYTE(shotgun_mag, PLAYER_AMMO1) - SENDENTITY_BYTE(crossbow_mag, PLAYER_AMMO1) - SENDENTITY_BYTE(rpg_mag, PLAYER_AMMO1) - SENDENTITY_BYTE(satchel_chg, PLAYER_AMMO1) - - SENDENTITY_BYTE(ammo_9mm, PLAYER_AMMO2) - SENDENTITY_BYTE(ammo_357, PLAYER_AMMO2) - SENDENTITY_BYTE(ammo_buckshot, PLAYER_AMMO2) - SENDENTITY_BYTE(ammo_bolt, PLAYER_AMMO2) - SENDENTITY_BYTE(ammo_rocket, PLAYER_AMMO2) - SENDENTITY_BYTE(ammo_uranium, PLAYER_AMMO2) - SENDENTITY_BYTE(ammo_handgrenade, PLAYER_AMMO2) - SENDENTITY_BYTE(ammo_satchel, PLAYER_AMMO2) - SENDENTITY_BYTE(ammo_tripmine, PLAYER_AMMO2) - SENDENTITY_BYTE(ammo_snark, PLAYER_AMMO2) - SENDENTITY_BYTE(ammo_hornet, PLAYER_AMMO2) - - SENDENTITY_BYTE(ammo_m203_grenade, PLAYER_AMMO3) - SENDENTITY_BYTE(ammo_gauss_volume, PLAYER_AMMO3) - SENDENTITY_BYTE(ammo_rpg_state, PLAYER_AMMO3) - SENDENTITY_BYTE(mode_tempstate, PLAYER_AMMO3) - return (1); } #endif diff --git a/src/shared/pmove.qc b/src/shared/pmove.qc index fc12046..21596d2 100644 --- a/src/shared/pmove.qc +++ b/src/shared/pmove.qc @@ -23,15 +23,20 @@ #define PMOVE_AIRACCELERATE 10 #define PMOVE_WATERACCELERATE 10 #define PMOVE_ACCELERATE 10 -#define PMOVE_MAXSPEED 270 -#define PMOVE_STEP_WALKSPEED 135 -#define PMOVE_STEP_RUNSPEED 220 -#define PHY_VIEWPOS [0,0,28] -#define PHY_VIEWPOS_CROUCHED [0,0,12] +#define PMOVE_STEP_WALKSPEED 270 +#define PMOVE_STEP_CROUCHSPEED 90 +#define PMOVE_BOXCENTER true +#define PMOVE_NORMAL_HEIGHT 72 +#define PMOVE_NORMAL_VIEWHEIGHT 64 +#define PMOVE_CROUCH_HEIGHT 36 +#define PMOVE_CROUCH_VIEWHEIGHT 30 +/* disable prone, run and lean */ +#define PMOVE_STEP_RUNSPEED 0 +#define PMOVE_PRONE_HEIGHT 0 void -player::Physics_Jump(void) +HLPlayer::Physics_Jump(void) { if (waterlevel >= 2) { if (watertype == CONTENT_WATER) { @@ -43,7 +48,7 @@ player::Physics_Jump(void) } } else { /* Half-Life: Longjump module */ - if (flags & FL_CROUCHING && g_items & 0x00008000i) { + if (IsCrouching() && HasItem("item_longjump")) { makevectors([0, v_angle[1], 0]); velocity = v_forward * 512; velocity[2] += 100; diff --git a/src/shared/w_crossbow.qc b/src/shared/w_crossbow.qc index 56829a5..12474dd 100644 --- a/src/shared/w_crossbow.qc +++ b/src/shared/w_crossbow.qc @@ -48,7 +48,7 @@ w_crossbow_precache(void) } void -w_crossbow_updateammo(player pl) +w_crossbow_updateammo(NSClientPlayer pl) { Weapons_UpdateAmmo(pl, pl.crossbow_mag, pl.ammo_bolt, -1); } @@ -60,7 +60,7 @@ w_crossbow_wmodel(void) } string -w_crossbow_pmodel(player pl) +w_crossbow_pmodel(NSClientPlayer pl) { return "models/p_crossbow.mdl"; } @@ -72,7 +72,7 @@ w_crossbow_deathmsg(void) } int -w_crossbow_pickup(player pl, int new, int startammo) +w_crossbow_pickup(NSClientPlayer pl, int new, int startammo) { #ifdef SERVER int addAmmo = (startammo == -1) ? 5 : startammo; @@ -94,7 +94,7 @@ w_crossbow_pickup(player pl, int new, int startammo) } void -w_crossbow_draw(player pl) +w_crossbow_draw(NSClientPlayer pl) { Weapons_SetModel("models/v_crossbow.mdl"); @@ -105,13 +105,13 @@ w_crossbow_draw(player pl) } void -w_crossbow_holster(player pl) +w_crossbow_holster(NSClientPlayer pl) { Weapons_ViewAnimation(pl, CROSSBOW_HOLSTER1); } void -w_crossbow_primary(player pl) +w_crossbow_primary(NSClientPlayer pl) { if (pl.w_attack_next > 0.0) return; @@ -182,7 +182,7 @@ w_crossbow_primary(player pl) Weapons_ViewAnimation(pl, CROSSBOW_FIRE3); } - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTBOW, 0.25f); else Animation_PlayerTop(pl, ANIM_SHOOTBOW, 0.25f); @@ -307,7 +307,7 @@ w_crossbow_crosshair(player pl) float w_crossbow_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMBOW : ANIM_AIMBOW; + return pl.IsCrouching() ? ANIM_CR_AIMBOW : ANIM_AIMBOW; } void diff --git a/src/shared/w_crowbar.qc b/src/shared/w_crowbar.qc index c52a42c..453f77c 100644 --- a/src/shared/w_crowbar.qc +++ b/src/shared/w_crowbar.qc @@ -28,7 +28,7 @@ enum }; void -w_crowbar_precache(void) +HLCrowbar::Precache(void) { #ifdef SERVER Sound_Precache("weapon_crowbar.hit"); @@ -65,20 +65,20 @@ w_crowbar_deathmsg(void) } void -w_crowbar_draw(player pl) +HLCrowbar::Draw(player pl) { Weapons_SetModel("models/v_crowbar.mdl"); Weapons_ViewAnimation(pl, CBAR_DRAW); } void -w_crowbar_holster(player pl) +HLCrowbar::Holster(player pl) { Weapons_ViewAnimation(pl, CBAR_HOLSTER); } void -w_crowbar_primary(player pl) +HLCrowbar::Primary(player pl) { int anim = 0; vector src; @@ -115,7 +115,7 @@ w_crowbar_primary(player pl) Weapons_ViewAnimation(pl, trace_fraction >= 1 ? CBAR_ATTACK3MISS:CBAR_ATTACK3HIT); } - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTCROWBAR, 0.41f); else Animation_PlayerTop(pl, ANIM_SHOOTCROWBAR, 0.5f); @@ -145,7 +145,7 @@ w_crowbar_primary(player pl) } void -w_crowbar_release(player pl) +HLCrowbar::Release(player pl) { if (pl.w_idle_next) { return; @@ -156,13 +156,13 @@ w_crowbar_release(player pl) } float -w_crowbar_aimanim(player pl) +HLCrowbar::PlayerAnim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.IsCrouching() ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; } void -w_crowbar_hudpic(player pl, int selected, vector pos, float a) +HLCrowbar::WeaponIcon(player pl, int selected, vector pos, float a) { #ifdef CLIENT if (selected) { @@ -192,12 +192,13 @@ w_crowbar_hudpic(player pl, int selected, vector pos, float a) } int -w_crowbar_isempty(player pl) +HLCrowbar::IsEmpty(player pl) { return 0; } -weapontype_t w_crowbar_type(player pl) +weapontype_t +HLCrowbar::Type(player pl) { return WPNTYPE_CLOSE; } diff --git a/src/shared/w_egon.qc b/src/shared/w_egon.qc index d5a2352..f1f8d75 100644 --- a/src/shared/w_egon.qc +++ b/src/shared/w_egon.qc @@ -272,7 +272,7 @@ void w_egon_crosshair(player pl) float w_egon_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMEGON : ANIM_AIMEGON; + return pl.IsCrouching() ? ANIM_CR_AIMEGON : ANIM_AIMEGON; } void w_egon_hudpic(player pl, int selected, vector pos, float a) diff --git a/src/shared/w_gauss.qc b/src/shared/w_gauss.qc index f8c00a9..15543d4 100644 --- a/src/shared/w_gauss.qc +++ b/src/shared/w_gauss.qc @@ -182,7 +182,7 @@ void w_gauss_primary(player pl) pl.ammo_uranium -= 2; - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTGAUSS, 0.43f); else Animation_PlayerTop(pl, ANIM_SHOOTGAUSS, 0.43f); @@ -224,7 +224,7 @@ void w_gauss_release(player pl) } else if (pl.mode_tempstate == GAUSSTATE_FULL) { Weapons_ViewAnimation(pl, GAUSS_FIRE1); - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTGAUSS, 0.43f); else Animation_PlayerTop(pl, ANIM_SHOOTGAUSS, 0.43f); @@ -382,7 +382,7 @@ void w_gauss_crosshair(player pl) float w_gauss_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMGAUSS : ANIM_AIMGAUSS; + return pl.IsCrouching() ? ANIM_CR_AIMGAUSS : ANIM_AIMGAUSS; } void w_gauss_hudpic(player pl, int selected, vector pos, float a) diff --git a/src/shared/w_glock.qc b/src/shared/w_glock.qc index c5a2b1b..2da2cf1 100644 --- a/src/shared/w_glock.qc +++ b/src/shared/w_glock.qc @@ -178,7 +178,7 @@ w_glock_primary(player pl) Weapons_ViewAnimation(pl, GLOCK_SHOOT_EMPTY); } - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOT1HAND, 0.2f); else Animation_PlayerTop(pl, ANIM_SHOOT1HAND, 0.2f); @@ -222,7 +222,7 @@ w_glock_secondary(player pl) Weapons_ViewAnimation(pl, GLOCK_SHOOT_EMPTY); } - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOT1HAND, 0.2f); else Animation_PlayerTop(pl, ANIM_SHOOT1HAND, 0.2f); @@ -302,7 +302,7 @@ w_glock_release(player pl) float w_glock_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIM1HAND : ANIM_AIM1HAND; + return pl.IsCrouching() ? ANIM_CR_AIM1HAND : ANIM_AIM1HAND; } void diff --git a/src/shared/w_handgrenade.qc b/src/shared/w_handgrenade.qc index 92f1c51..eff41e4 100644 --- a/src/shared/w_handgrenade.qc +++ b/src/shared/w_handgrenade.qc @@ -162,7 +162,7 @@ void w_handgrenade_release(player pl) pl.w_attack_next = 1.0f; pl.w_idle_next = 0.5f; - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTCROWBAR, 0.41f); else Animation_PlayerTop(pl, ANIM_SHOOTCROWBAR, 0.5f); @@ -191,7 +191,7 @@ void w_handgrenade_release(player pl) float w_handgrenade_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.IsCrouching() ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; } void diff --git a/src/shared/w_hornetgun.qc b/src/shared/w_hornetgun.qc index 3caf506..4228475 100644 --- a/src/shared/w_hornetgun.qc +++ b/src/shared/w_hornetgun.qc @@ -173,7 +173,7 @@ w_hornetgun_primary(player pl) pl.ammo_hornet--; Weapons_ViewAnimation(pl, HORNETGUN_SHOOT); - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTHIVE, 0.43f); else Animation_PlayerTop(pl, ANIM_SHOOTHIVE, 0.43f); @@ -203,7 +203,7 @@ w_hornetgun_secondary(player pl) pl.ammo_hornet--; Weapons_ViewAnimation(pl, HORNETGUN_SHOOT); - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTHIVE, 0.43f); else Animation_PlayerTop(pl, ANIM_SHOOTHIVE, 0.43f); @@ -239,7 +239,7 @@ w_hornetgun_crosshair(player pl) float w_hornetgun_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMHIVE : ANIM_AIMHIVE; + return pl.IsCrouching() ? ANIM_CR_AIMHIVE : ANIM_AIMHIVE; } void diff --git a/src/shared/w_mp5.qc b/src/shared/w_mp5.qc deleted file mode 100644 index ada8998..0000000 --- a/src/shared/w_mp5.qc +++ /dev/null @@ -1,418 +0,0 @@ -/* - * Copyright (c) 2016-2021 Marco Cawthorne - * - * 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. - */ - -enum -{ - MP5_IDLE1, - MP5_IDLE2, - MP5_GRENADE, - MP5_RELOAD, - MP5_DRAW, -#ifdef GEARBOX - MP5_DEPLOY, /* not sure what this is about */ -#endif - MP5_FIRE1, - MP5_FIRE2, - MP5_FIRE3 -}; - -#ifdef CLIENT -void w_mp5_ejectshell(void) -{ - static void w_mp5_ejectshell_death(void) { - remove(self); - } - static void w_mp5_ejectshell_touch(void) { - if (other == world) - Sound_Play(self, CHAN_BODY, "modelevent_shell.land"); - } - entity eShell = spawn(); - setmodel(eShell, "models/shell.mdl"); - eShell.solid = SOLID_BBOX; - eShell.movetype = MOVETYPE_BOUNCE; - eShell.drawmask = MASK_ENGINE; - eShell.angles = [pSeat->m_eViewModel.angles[0], pSeat->m_eViewModel.angles[1], 0]; - eShell.velocity = pSeat->m_vecPredictedVelocity; - - float r = random(0.0, 50.0); - makevectors(pSeat->m_eViewModel.angles); - eShell.velocity += (v_forward * 0); - eShell.velocity += (v_right * 45); - eShell.velocity += (v_up * (145 + r)); - eShell.touch = w_mp5_ejectshell_touch; - - eShell.avelocity = [0,45,900]; - eShell.think = w_mp5_ejectshell_death; - eShell.nextthink = time + 2.5f; - setsize(eShell, [0,0,0], [0,0,0]); - setorigin(eShell, pSeat->m_eViewModel.origin + (v_forward * 30) + (v_right * 8) + (v_up * -15)); -} -#endif - -void -w_mp5_precache(void) -{ -#ifdef SERVER - Sound_Precache("weapon_mp5.shoot"); - Sound_Precache("weapon_mp5.gl"); - Sound_Precache("weapon_mp5.empty"); - precache_model("models/w_9mmar.mdl"); - precache_model("models/grenade.mdl"); -#else - precache_model("models/v_9mmar.mdl"); - precache_model("models/p_9mmar.mdl"); - Sound_Precache("modelevent_shell.land"); -#endif -} - -int -w_mp5_pickup(player pl, int new, int startammo) -{ -#ifdef SERVER -#ifdef GEARBOX - int addAmmo = (startammo == -1) ? 50 : startammo; -#else - int addAmmo = (startammo == -1) ? 25 : startammo; -#endif - - if (new) { - pl.mp5_mag = addAmmo; - return (1); - } - - if (pl.ammo_9mm < MAX_A_9MM) { - pl.ammo_9mm = bound(0, pl.ammo_9mm + addAmmo, MAX_A_9MM); - } else { - if (!new) - return (0); - } -#endif - return (1); -} - -void -w_mp5_updateammo(player pl) -{ - Weapons_UpdateAmmo(pl, pl.mp5_mag, pl.ammo_9mm, pl.ammo_m203_grenade); -} - -string -w_mp5_wmodel(void) -{ - return "models/w_9mmar.mdl"; -} - -string -w_mp5_pmodel(player pl) -{ - return "models/p_9mmar.mdl"; -} - -string -w_mp5_deathmsg(void) -{ - return ""; -} - -void -w_mp5_draw(player pl) -{ - Weapons_SetModel("models/v_9mmar.mdl"); - Weapons_ViewAnimation(pl, MP5_DRAW); -} - -void -w_mp5_holster(player pl) -{ - Weapons_ViewAnimation(pl, MP5_DRAW); -} - -void -w_mp5_primary(player pl) -{ - if (pl.w_attack_next > 0.0f) - return; - if (pl.gflags & GF_SEMI_TOGGLED) - return; - - /* Ammo check */ - bool out_of_ammo = (pl.mp5_mag <= 0i) ? true : false; - if (out_of_ammo || (pl.WaterLevel() >= WATERLEVEL_SUBMERGED)) { -#ifdef SERVER - Sound_Play(pl, CHAN_AUTO, "weapon_mp5.empty"); -#endif - pl.gflags |= GF_SEMI_TOGGLED; - return; - } - - pl.mp5_mag--; - - /* Actual firing */ - int r = floor(pseudorandom() * 3.0f); - switch (r) { - case 1: - Weapons_ViewAnimation(pl, MP5_FIRE1); - break; - case 2: - Weapons_ViewAnimation(pl, MP5_FIRE2); - break; - default: - Weapons_ViewAnimation(pl, MP5_FIRE3); - break; - } - - Weapons_ViewPunchAngle(pl, [-2,0,0]); - -#ifdef CLIENT - View_SetMuzzleflash(MUZZLE_RIFLE); - View_AddEvent(w_mp5_ejectshell, 0.0f); -#else - /* singleplayer is more accurate */ - if (cvar("sv_playerslots") == 1) { - TraceAttack_FireBulletsWithDecal(1, Weapons_GetCameraPos(pl), Skill_GetValue("plr_9mmAR_bullet", 5), [0.025,0.025], WEAPON_MP5, "Impact.BigShot"); - } else { - TraceAttack_FireBulletsWithDecal(1, Weapons_GetCameraPos(pl), Skill_GetValue("plr_9mmAR_bullet", 5), [0.05,0.05], WEAPON_MP5, "Impact.BigShot"); - } - - Sound_Play(pl, CHAN_WEAPON, "weapon_mp5.shoot"); -#endif - - if (pl.flags & FL_CROUCHING) - Animation_PlayerTop(pl, ANIM_CR_SHOOTMP5, 0.1f); - else - Animation_PlayerTop(pl, ANIM_SHOOTMP5, 0.1f); - - pl.w_attack_next = 0.085f; - pl.w_idle_next = 10.0f; -} - -void -w_mp5_secondary(player pl) -{ - if (pl.w_attack_next > 0.0f) - return; - if (pl.gflags & GF_SEMI_TOGGLED) - return; - - /* Ammo check */ - bool out_of_ammo = (pl.ammo_m203_grenade <= 0i) ? true : false; - if (out_of_ammo || pl.WaterLevel() >= WATERLEVEL_SUBMERGED) { -#ifdef SERVER - Sound_Play(pl, CHAN_AUTO, "weapon_mp5.empty"); -#endif - pl.gflags |= GF_SEMI_TOGGLED; - return; - } - - pl.ammo_m203_grenade--; - -#ifdef SERVER - NSProjectile_SpawnDef("projectile_ARgrenade", pl); - Sound_Play(pl, CHAN_WEAPON, "weapon_mp5.gl"); -#endif - - Weapons_ViewPunchAngle(pl, [-10.0f, 0.0f, 0.0f]); - Weapons_ViewAnimation(pl, MP5_GRENADE); - - if (pl.flags & FL_CROUCHING) - Animation_PlayerTop(pl, ANIM_CR_SHOOTMP5, 0.45f); - else - Animation_PlayerTop(pl, ANIM_SHOOTMP5, 0.45f); - - pl.w_attack_next = 1.0f; - pl.w_idle_next = 10.0f; -} - -void -w_mp5_reload(player pl) -{ - if (pl.w_attack_next) { - return; - } - - /* Ammo check */ - if (pl.mp5_mag >= 50) { - return; - } - if (pl.ammo_9mm <= 0) { - return; - } - - Weapons_ViewAnimation(pl, MP5_RELOAD); - -#ifdef SERVER - static void w_mp5_reload_done(void) { - player pl = (player)self; - Weapons_ReloadWeapon(pl, player::mp5_mag, player::ammo_9mm, 50); - } - - pl.think = w_mp5_reload_done; - pl.nextthink = time + 1.4f; -#endif - - pl.w_attack_next = 1.5f; - pl.w_idle_next = 10.0f; -} - -void -w_mp5_release(player pl) -{ - - /* auto-reload if need be */ - if (pl.w_attack_next <= 0.0) - if (pl.mp5_mag == 0 && pl.ammo_9mm > 0) { - Weapons_Reload(pl); - return; - } - if (pl.w_idle_next > 0.0) { - return; - } - - int r = floor(pseudorandom() * 3.0f); - if (r == 1) { - Weapons_ViewAnimation(pl, MP5_IDLE1); - } else { - Weapons_ViewAnimation(pl, MP5_IDLE2); - } - - pl.w_idle_next = 15.0f; -} - -void -w_mp5_crosshair(player pl) -{ -#ifdef CLIENT - vector aicon_pos; - - Cross_DrawSub(g_cross_spr, [24,24], [0,48/128], [0.1875, 0.1875]); - - HUD_DrawAmmo1(); - HUD_DrawAmmo2(); - HUD_DrawAmmo3(); - - aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42]; - drawsubpic( - aicon_pos, - [24,24], - g_hud7_spr, - [0,72/128], - [24/256, 24/128], - g_hud_color, - pSeatLocal->m_flAmmo2Alpha, - DRAWFLAG_ADDITIVE - ); - - aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 74]; - drawsubpic( - aicon_pos, - [24,24], - g_hud7_spr, - [48/256,72/128], - [24/256, 24/128], - g_hud_color, - pSeatLocal->m_flAmmo3Alpha, - DRAWFLAG_ADDITIVE - ); -#endif -} - -float -w_mp5_aimanim(player pl) -{ - return pl.flags & ANIM_CR_AIMMP5 ? ANIM_CR_AIMCROWBAR : ANIM_AIMMP5; -} - -void -w_mp5_hudpic(player pl, int selected, vector pos, float a) -{ -#ifdef CLIENT - vector hud_col; - - if (pl.mp5_mag == 0 && pl.ammo_9mm == 0 && pl.ammo_m203_grenade == 0) - hud_col = [1,0,0]; - else - hud_col = g_hud_color; - - if (selected) { - drawsubpic( - pos, - [170,45], - g_hud4_spr, - [0,135/256], - [170/256,45/256], - hud_col, - a, - DRAWFLAG_ADDITIVE - ); - } else { - drawsubpic( - pos, - [170,45], - g_hud1_spr, - [0,135/256], - [170/256,45/256], - hud_col, - a, - DRAWFLAG_ADDITIVE - ); - } - - HUD_DrawAmmoBar(pos, pl.ammo_9mm, MAX_A_9MM, a); - HUD_DrawAmmoBar(pos + [25, 0], pl.ammo_m203_grenade, MAX_A_M203_GRENADE, a); -#endif -} - -int -w_mp5_isempty(player pl) -{ - - if (pl.mp5_mag <= 0 && pl.ammo_9mm <= 0 && pl.ammo_m203_grenade <= 0) - return 1; - - return 0; -} - -weapontype_t -w_mp5_type(player pl) -{ - return WPNTYPE_RANGED; -} - -weapon_t w_mp5 = -{ - .name = "9mmAR", - .id = ITEM_MP5, - .slot = 2, - .slot_pos = 0, - .weight = 15, - .draw = w_mp5_draw, - .holster = w_mp5_holster, - .primary = w_mp5_primary, - .secondary = w_mp5_secondary, - .reload = w_mp5_reload, - .release = w_mp5_release, - .postdraw = w_mp5_crosshair, - .precache = w_mp5_precache, - .pickup = w_mp5_pickup, - .updateammo = w_mp5_updateammo, - .wmodel = w_mp5_wmodel, - .pmodel = w_mp5_pmodel, - .deathmsg = w_mp5_deathmsg, - .aimanim = w_mp5_aimanim, - .isempty = w_mp5_isempty, - .type = w_mp5_type, - .hudpic = w_mp5_hudpic -}; \ No newline at end of file diff --git a/src/shared/w_python.qc b/src/shared/w_python.qc index c8479a2..383599a 100644 --- a/src/shared/w_python.qc +++ b/src/shared/w_python.qc @@ -136,7 +136,7 @@ w_python_primary(player pl) Weapons_ViewPunchAngle(pl, [-10,0,0]); Weapons_ViewAnimation(pl, PYTHON_FIRE1); - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTPYTHON, 0.43f); else Animation_PlayerTop(pl, ANIM_SHOOTPYTHON, 0.43f); @@ -274,7 +274,7 @@ w_python_crosshair(player pl) float w_python_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMPYTHON : ANIM_AIMPYTHON; + return pl.IsCrouching() ? ANIM_CR_AIMPYTHON : ANIM_AIMPYTHON; } void diff --git a/src/shared/w_rpg.qc b/src/shared/w_rpg.qc index eacddc7..ee390b1 100644 --- a/src/shared/w_rpg.qc +++ b/src/shared/w_rpg.qc @@ -128,7 +128,7 @@ void w_rpg_primary(player pl) Weapons_ViewAnimation(pl, RPG_FIRE2); Weapons_ViewPunchAngle(pl, [-10,0,0]); - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTRPG, 0.43f); else Animation_PlayerTop(pl, ANIM_SHOOTRPG, 0.43f); @@ -214,7 +214,7 @@ void w_rpg_secondary(player pl) float w_rpg_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMRPG : ANIM_AIMRPG; + return pl.IsCrouching() ? ANIM_CR_AIMRPG : ANIM_AIMRPG; } void w_rpg_hudpic(player pl, int selected, vector pos, float a) @@ -245,19 +245,19 @@ void w_rpg_hud(player pl) /* crosshair/laser */ if (pl.ammo_rpg_state == 1) { - float lerp; + float lerpValue; vector jitter = [0.0f, 0.0f, 0.0f]; Weapons_MakeVectors(pl); vector src = pl.origin + pl.view_ofs; traceline(src, src + (v_forward * 256), FALSE, pl); - lerp = Math_Lerp(18,6, trace_fraction); + lerpValue = lerp(18,6, trace_fraction); jitter[0] = (random(0,2) - 2) * (1 - trace_fraction); jitter[1] = (random(0,2) - 2) * (1 - trace_fraction); - laser_pos = g_hudmins + (g_hudres / 2) + ([-lerp,-lerp] / 2); + laser_pos = g_hudmins + (g_hudres / 2) + ([-lerpValue,-lerpValue] / 2); drawsubpic( laser_pos + jitter, - [lerp,lerp], + [lerpValue,lerpValue], g_laser_spr, [0,0], [1.0, 1.0], diff --git a/src/shared/w_satchel.qc b/src/shared/w_satchel.qc index 1f71d62..d187bf1 100644 --- a/src/shared/w_satchel.qc +++ b/src/shared/w_satchel.qc @@ -143,7 +143,7 @@ w_satchel_primary(player pl) pl.ammo_satchel--; pl.mode_tempstate = 1; /* mark us as having deployed something */ - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTSQUEAK, 0.41f); else Animation_PlayerTop(pl, ANIM_SHOOTSQUEAK, 0.5f); @@ -192,7 +192,7 @@ w_satchel_secondary(player pl) NSProjectile_SpawnDef("projectile_satchel", pl); #endif - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTSQUEAK, 0.41f); else Animation_PlayerTop(pl, ANIM_SHOOTSQUEAK, 0.5f); @@ -238,7 +238,7 @@ w_satchel_release(player pl) float w_satchel_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMSQUEAK : ANIM_AIMSQUEAK; + return pl.IsCrouching() ? ANIM_CR_AIMSQUEAK : ANIM_AIMSQUEAK; } void diff --git a/src/shared/w_shotgun.qc b/src/shared/w_shotgun.qc index 17d9604..33ea27b 100644 --- a/src/shared/w_shotgun.qc +++ b/src/shared/w_shotgun.qc @@ -219,7 +219,7 @@ w_shotgun_primary(player pl) Weapons_ViewAnimation(pl, SHOTGUN_FIRE1); Weapons_ViewPunchAngle(pl, [-5,0,0]); - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTSHOTGUN, 0.41f); else Animation_PlayerTop(pl, ANIM_SHOOTSHOTGUN, 0.5f); @@ -272,7 +272,7 @@ w_shotgun_secondary(player pl) Weapons_ViewAnimation(pl, SHOTGUN_FIRE2); Weapons_ViewPunchAngle(pl, [-10,0,0]); - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTSHOTGUN, 0.41f); else Animation_PlayerTop(pl, ANIM_SHOOTSHOTGUN, 0.5f); @@ -383,7 +383,7 @@ w_shotgun_crosshair(player pl) float w_shotgun_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMSHOTGUN : ANIM_AIMSHOTGUN; + return pl.IsCrouching() ? ANIM_CR_AIMSHOTGUN : ANIM_AIMSHOTGUN; } void diff --git a/src/shared/w_snark.qc b/src/shared/w_snark.qc index 5265ed2..c5d82b3 100644 --- a/src/shared/w_snark.qc +++ b/src/shared/w_snark.qc @@ -194,7 +194,7 @@ void w_snark_primary(player pl) /* Audio-Visual Bit */ Weapons_ViewAnimation(pl, SNARK_THROW); - if (pl.flags & FL_CROUCHING) + if (pl.IsCrouching()) Animation_PlayerTop(pl, ANIM_CR_SHOOTSQUEAK, 0.41f); else Animation_PlayerTop(pl, ANIM_SHOOTSQUEAK, 0.5f); @@ -284,7 +284,7 @@ string w_snark_deathmsg(void) float w_snark_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMSQUEAK : ANIM_AIMSQUEAK; + return pl.IsCrouching() ? ANIM_CR_AIMSQUEAK : ANIM_AIMSQUEAK; } void w_snark_hud(player pl) diff --git a/src/shared/w_tripmine.qc b/src/shared/w_tripmine.qc index 80b0c77..4706b23 100644 --- a/src/shared/w_tripmine.qc +++ b/src/shared/w_tripmine.qc @@ -32,95 +32,58 @@ enum * Because not being able to place it around levels would be boring. * Some maps, such as subtransit and a few singleplayer chapters have this. */ -#ifdef SERVER -class monster_tripmine:NSMonster +class HLTripmine:NSSurfacePropEntity { - vector m_vecEndPos; - void(void) monster_tripmine; + void HLTripmine(void); - virtual float(entity, float) SendEntity; - virtual void(int) Trip; - virtual void(void) Damaged; - virtual void(void) Ready; - virtual void(void) Respawn; +#ifdef SERVER + virtual void Respawn(void); + virtual void Spawned(void); + virtual void Ready(void); + virtual void Pain(entity, entity, int, vector, int); + virtual void Death(entity, entity, int, vector, int); + virtual float SendEntity(entity, float); +#endif + +#ifdef CLIENT + virtual float predraw(void); + virtual void ReceiveEntity(float, float); +#endif + +private: + + vector m_vecEndPos; + +#ifdef CLIENT + int m_iActive; +#endif }; -float -monster_tripmine::SendEntity(entity pvsent, float flags) +void +HLTripmine::HLTripmine(void) { - WriteByte(MSG_ENTITY, ENT_TRIPMINE); - WriteCoord(MSG_ENTITY, origin[0]); - WriteCoord(MSG_ENTITY, origin[1]); - WriteCoord(MSG_ENTITY, origin[2]); - WriteCoord(MSG_ENTITY, angles[0]); - WriteCoord(MSG_ENTITY, angles[1]); - WriteCoord(MSG_ENTITY, angles[2]); - WriteCoord(MSG_ENTITY, m_vecEndPos[0]); - WriteCoord(MSG_ENTITY, m_vecEndPos[1]); - WriteCoord(MSG_ENTITY, m_vecEndPos[2]); - WriteByte(MSG_ENTITY, health); - return (1); +#ifdef CLIENT + solid = SOLID_BBOX; + movetype = MOVETYPE_NONE; + drawmask = MASK_ENGINE; + frame = TRIPMINE_WORLD; + m_iActive = FALSE; +#endif +} + +#ifdef SERVER +void +HLTripmine::Respawn(void) +{ + super::Respawn(); + RestoreAngles(); } void -monster_tripmine::Trip(int walkthrough) +HLTripmine::Spawned(void) { - vector explosionPos = GetOrigin(); - float explosionDamage = Skill_GetValue("plr_tripmine", 150); - float explosionRadius = explosionDamage * 2.5f; + super::Spawned(); - if (!walkthrough) { - real_owner = g_dmg_eAttacker; - } - - /* This is to prevent infinite loops in Damage_Radius */ - SetPainCallback(__NULL__); - SetDeathCallback(__NULL__); - SetTakedamage(DAMAGE_NO); - - pointparticles(particleeffectnum("fx_explosion.main"), GetOrigin(), [0,0,0], 1); - Damage_Radius(explosionPos, real_owner, explosionDamage, explosionRadius, true, WEAPON_TRIPMINE); - StartSoundDef("fx.explosion", CHAN_VOICE, true); - Destroy(); -} - -void -monster_tripmine::Damaged(void) -{ - Trip(0); -} - -void -monster_tripmine::Ready(void) -{ - traceline(origin, origin + GetForward() * 2048, FALSE, this); - - /* first time we're marked as ready, we play a sound and set the distance */ - if (CanBeDamaged() == false) { - /* Laser calibrated to N units! */ - m_vecEndPos = trace_endpos; - SetHealth(1); - SetTakedamage(DAMAGE_YES); - StartSoundDef("weapon_tripmine.activate", CHAN_WEAPON, true); - SetSolid(SOLID_BBOX); - SetPainCallback(Damaged); - SetDeathCallback(Damaged); - ForceNetworkUpdate(); - } - - /* laser shorter than when calibrated, explode! */ - if (trace_endpos != m_vecEndPos) { - Trip(1); - return; - } - - /* run this method again next frame */ - ScheduleThink(Ready, 0.0f); -} - -void -monster_tripmine::Respawn(void) -{ SetTakedamage(DAMAGE_NO); SetSolid(SOLID_NOT); SetMovetype(MOVETYPE_NONE); @@ -135,276 +98,103 @@ monster_tripmine::Respawn(void) } void -monster_tripmine::monster_tripmine(void) +HLTripmine::Death(entity inflictor, entity attacker, int damage, vector dir, int location) { - Respawn(); -} -#else -class csitem_tripmine -{ - int m_iActive; - vector m_vecEndPos; + vector explosionPos = GetOrigin(); + float explosionDamage = Skill_GetValue("plr_tripmine", 150); + float explosionRadius = explosionDamage * 2.5f; - void(void) csitem_tripmine; - virtual float(void) predraw; -}; + /* This is to prevent infinite loops in Damage_Radius */ + SetTakedamage(DAMAGE_NO); -float csitem_tripmine::predraw(void) -{ - if (m_iActive) { - trailparticles(BEAM_TRIPMINE, this, origin, m_vecEndPos); - } + pointparticles(particleeffectnum("fx_explosion.main"), GetOrigin(), [0,0,0], 1); - addentity(this); - return PREDRAW_NEXT; + radiusDamage(explosionPos, explosionRadius, 0i, (int)explosionDamage, attacker); + StartSoundDef("fx.explosion", CHAN_VOICE, true); + Destroy(); } void -csitem_tripmine::csitem_tripmine(void) +HLTripmine::Pain(entity inflictor, entity attacker, int damage, vector dir, int location) { - solid = SOLID_BBOX; - movetype = MOVETYPE_NONE; - drawmask = MASK_ENGINE; - frame = TRIPMINE_WORLD; - m_iActive = FALSE; -} - -void w_tripmine_parse(void) -{ - csitem_tripmine tm = (csitem_tripmine)self; - spawnfunc_csitem_tripmine(); - - tm.origin[0] = readcoord(); - tm.origin[1] = readcoord(); - tm.origin[2] = readcoord(); - tm.angles[0] = readcoord(); - tm.angles[1] = readcoord(); - tm.angles[2] = readcoord(); - tm.m_vecEndPos[0] = readcoord(); - tm.m_vecEndPos[1] = readcoord(); - tm.m_vecEndPos[2] = readcoord(); - tm.m_iActive = readbyte(); - setmodel(tm, "models/v_tripmine.mdl"); - - setcustomskin(tm, "", "geomset 0 2\ngeomset 1 2\n"); - setorigin(tm, tm.origin); - setsize(tm, [-8,-8,-8], [8,8,8]); -} -#endif - -/* The WEAPON_TRIPMINE code - * - * Here is where the actual 'weapon' logic happens that the player itself - * runs. It obviously won't work without MONSTER_TRIPMINE */ - -void w_tripmine_precache(void) -{ -#ifdef SERVER - Sound_Precache("weapon_tripmine.deploy"); - Sound_Precache("weapon_tripmine.charge"); - Sound_Precache("weapon_tripmine.activate"); - precache_model("models/v_tripmine.mdl"); -#else - precache_model("models/p_tripmine.mdl"); - precache_model("models/v_tripmine.mdl"); -#endif -} - -void w_tripmine_updateammo(player pl) -{ - Weapons_UpdateAmmo(pl, -1, pl.ammo_tripmine, -1); -} - -string w_tripmine_wmodel(void) -{ - return "models/v_tripmine.mdl"; -} - -string w_tripmine_pmodel(player pl) -{ - return "models/p_tripmine.mdl"; -} - -string w_tripmine_deathmsg(void) -{ - return ""; -} - -int w_tripmine_pickup(player pl, int new, int startammo) -{ -#ifdef SERVER - int addAmmo = (startammo == -1) ? 1 : startammo; - - if (pl.ammo_tripmine < MAX_A_TRIPMINE) { - pl.ammo_tripmine = bound(0, pl.ammo_tripmine + addAmmo, MAX_A_TRIPMINE); - } else { - if (!new) - return (0); - } -#endif - return (1); -} - -void w_tripmine_draw(player pl) -{ - Weapons_SetModel("models/v_tripmine.mdl"); - Weapons_ViewAnimation(pl, TRIPMINE_DRAW); -} - -void w_tripmine_holster(player pl) -{ - + Death(trace_ent, attacker, 0, g_vec_null, 0); } void -w_tripmine_primary(player pl) +HLTripmine::Ready(void) { - vector src; + traceline(origin, origin + GetForward() * 2048, FALSE, this); - if (pl.w_attack_next > 0.0) { + /* first time we're marked as ready, we play a sound and set the distance */ + if (takedamage == DAMAGE_NO) { + /* Laser calibrated to N units! */ + m_vecEndPos = trace_endpos; + SetHealth(1); + SetTakedamage(DAMAGE_YES); + StartSoundDef("weapon_tripmine.activate", CHAN_WEAPON, true); + SetSolid(SOLID_BBOX); + ForceNetworkUpdate(); + } + + /* laser shorter than when calibrated, explode! */ + if (trace_endpos != m_vecEndPos) { + Death(trace_ent, real_owner, 0, g_vec_null, 0); return; } - if (pl.ammo_tripmine <= 0) { - return; - } - - src = Weapons_GetCameraPos(pl); - Weapons_MakeVectors(pl); - traceline(src, src + v_forward * 64, FALSE, pl); - - if (trace_fraction >= 1.0) { - return; - } - - pl.ammo_tripmine--; - - Weapons_ViewAnimation(pl, TRIPMINE_FIRE2); - - if (pl.flags & FL_CROUCHING) - Animation_PlayerTop(pl, ANIM_CR_SHOOTTRIPMINE, 0.41f); - else - Animation_PlayerTop(pl, ANIM_SHOOTTRIPMINE, 0.5f); - -#ifdef SERVER - vector ang = vectoangles(trace_plane_normal); - monster_tripmine mine = spawn(monster_tripmine, real_owner: pl, angles: ang, spawnflags: MSF_MULTIPLAYER); - mine.health = 0; - mine.SetOrigin(trace_endpos + (trace_plane_normal * 8)); - - Sound_Play(pl, CHAN_WEAPON, "weapon_tripmine.deploy"); - Sound_Play(mine, CHAN_WEAPON, "weapon_tripmine.charge"); -#endif - - pl.a_ammo3 = 1; - pl.w_attack_next = - pl.w_idle_next = 0.5f; -} - -void -w_tripmine_release(player pl) -{ - if (pl.w_idle_next > 0.0) { - return; - } - - if (pl.a_ammo3 == 1) { - Weapons_ViewAnimation(pl, TRIPMINE_DRAW); -#ifdef SERVER - if (pl.ammo_tripmine <= 0) { - Weapons_RemoveItem(pl, WEAPON_TRIPMINE); - } -#endif - pl.a_ammo3 = 0; - pl.w_attack_next = 0.5f; - pl.w_idle_next = 3.0f; - return; - } - - int r = (float)input_sequence % 3.0f; - switch (r) { - case 1: - Weapons_ViewAnimation(pl, TRIPMINE_IDLE1); - pl.w_idle_next = 3.0f; - break; - case 2: - Weapons_ViewAnimation(pl, TRIPMINE_IDLE2); - pl.w_idle_next = 2.0f; - break; - default: - Weapons_ViewAnimation(pl, TRIPMINE_FIDGET); - pl.w_idle_next = 3.34f; - break; - } + /* run this method again next frame */ + ScheduleThink(Ready, 0.0f); } float -w_tripmine_aimanim(player pl) +HLTripmine::SendEntity(entity ePEnt, float flChanged) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIMTRIPMINE : ANIM_AIMTRIPMINE; + WriteByte(MSG_ENTITY, ENT_TRIPMINE); + WriteFloat(MSG_ENTITY, flChanged); + WriteCoord(MSG_ENTITY, origin[0]); + WriteCoord(MSG_ENTITY, origin[1]); + WriteCoord(MSG_ENTITY, origin[2]); + WriteCoord(MSG_ENTITY, angles[0]); + WriteCoord(MSG_ENTITY, angles[1]); + WriteCoord(MSG_ENTITY, angles[2]); + WriteCoord(MSG_ENTITY, m_vecEndPos[0]); + WriteCoord(MSG_ENTITY, m_vecEndPos[1]); + WriteCoord(MSG_ENTITY, m_vecEndPos[2]); + WriteByte(MSG_ENTITY, health); + return (1); } - -void -w_tripmine_hud(player pl) -{ -#ifdef CLIENT - HUD_DrawAmmo2(); - vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42]; - drawsubpic(aicon_pos, [24,24], g_hud7_spr, [120/256,96/128], [24/256, 24/128], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE); #endif + +#ifdef CLIENT +void +HLTripmine::ReceiveEntity(float flNew, float flChanged) +{ + this.origin[0] = readcoord(); + this.origin[1] = readcoord(); + this.origin[2] = readcoord(); + this.angles[0] = readcoord(); + this.angles[1] = readcoord(); + this.angles[2] = readcoord(); + this.m_vecEndPos[0] = readcoord(); + this.m_vecEndPos[1] = readcoord(); + this.m_vecEndPos[2] = readcoord(); + this.m_iActive = readbyte(); + + setmodel(this, "models/v_tripmine.mdl"); + + setcustomskin(this, "", "geomset 0 2\ngeomset 1 2\n"); + SetSize([-8,-8,-8], [8,8,8]); + Relink(); } -void -w_tripmine_hudpic(player pl, int selected, vector pos, float a) +float +HLTripmine::predraw(void) { -#ifdef CLIENT - if (selected) { - drawsubpic(pos, [170,45], g_hud6_spr, [0,90/256], [170/256,45/256], g_hud_color, a, DRAWFLAG_ADDITIVE); - } else { - drawsubpic(pos, [170,45], g_hud3_spr, [0,90/256], [170/256,45/256], g_hud_color, a, DRAWFLAG_ADDITIVE); + if (m_iActive) { + trailparticles(BEAM_TRIPMINE, this, GetOrigin(), m_vecEndPos); } - HUD_DrawAmmoBar(pos, pl.ammo_tripmine, MAX_A_TRIPMINE, a); + addentity(this); + return (PREDRAW_NEXT); +} #endif -} - -int -w_tripmine_isempty(player pl) -{ - if (pl.ammo_tripmine <= 0) - return 1; - - return 0; -} - -weapontype_t -w_tripmine_type(player pl) -{ - return WPNTYPE_CLOSE; -} - -weapon_t w_tripmine = -{ - .name = "tripmine", - .id = ITEM_TRIPMINE, - .slot = 4, - .slot_pos = 2, - .weight = -10, - .draw = w_tripmine_draw, - .holster = w_tripmine_holster, - .primary = w_tripmine_primary, - .secondary = __NULL__, - .reload = __NULL__, - .release = w_tripmine_release, - .postdraw = w_tripmine_hud, - .precache = w_tripmine_precache, - .pickup = w_tripmine_pickup, - .updateammo = w_tripmine_updateammo, - .wmodel = w_tripmine_wmodel, - .pmodel = w_tripmine_pmodel, - .deathmsg = w_tripmine_deathmsg, - .aimanim = w_tripmine_aimanim, - .isempty = w_tripmine_isempty, - .type = w_tripmine_type, - .hudpic = w_tripmine_hudpic -}; \ No newline at end of file diff --git a/src/shared/weapon_common.h b/src/shared/weapon_common.h deleted file mode 100644 index 1aac488..0000000 --- a/src/shared/weapon_common.h +++ /dev/null @@ -1,99 +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. -*/ - -#ifndef NEW_INVENTORY -/* for AI identification purposes */ -typedef enum -{ - WPNTYPE_INVALID, /* no logic */ - WPNTYPE_RANGED, /* will want to keep their distance mostly */ - WPNTYPE_THROW, /* has to keep some distance, but not too far */ - WPNTYPE_CLOSE, /* have to get really close */ - WPNTYPE_FULLAUTO, /* for things that need to be held down */ - WPNTYPE_SEMI /* semi automatic */ -} weapontype_t; - -typedef struct -{ - string name; - int id; /* bitflag id */ - int slot; - int slot_pos; - int allow_drop; - int weight; /* required for bestweapon */ - void(void) precache; - string() wmodel; - string() deathmsg; - - /* player specific */ - string(player) pmodel; - float(player) aimanim; - weapontype_t(player) type; /* required for bot-AI */ - void(player) draw; - void(player) holster; - void(player) primary; - void(player) secondary; - void(player) reload; - void(player) release; - int(player, int, int) pickup; - void(player) updateammo; - - void(player, int) predraw; /* predraw... */ - void(player) postdraw; /* postdraw... */ - - int(player) isempty; /* kinda handy */ - void(player, int, vector, float) hudpic; -} weapon_t; - -void Weapons_Holster(player pl); -void Weapons_Primary(player pl); -void Weapons_Secondary(player pl); -void Weapons_Reload(player pl); -void Weapons_Release(player pl); -void Weapons_PreDraw(player pl, int); - -float Weapons_GetAim(player, int); -int Weapons_IsEmpty(player, int); -void Weapons_DrawCrosshair(player pl); -void Weapons_MakeVectors(player pl); -vector Weapons_GetCameraPos(player pl); -void Weapons_ViewAnimation(player pl, int); -void Weapons_ViewPunchAngle(player pl, vector); -int Weapons_IsPresent(player, int); -void Weapons_UpdateAmmo(player, int, int, int); -int Weapons_GetAnimation(player pl); -void Weapons_EnableModel(void); -void Weapons_DisableModel(void); -weapontype_t Weapons_GetType(player, int); - -void Weapons_SetLeftModel(string); -void Weapons_SetRightModel(string); - -void Weapons_SetRightGeomset(string); -void Weapons_SetLeftGeomset(string); - -/* compat */ -void Weapons_SetGeomset(string); -void Weapons_SetModel(string); - -void Weapons_Sound(entity, float, string); - -#ifdef CLIENT -string Weapons_GetPlayermodel(player, int); -void Weapons_HUDPic(player, int, int, vector, float); -#endif -#else -#endif \ No newline at end of file diff --git a/src/shared/weapon_common.qc b/src/shared/weapon_common.qc deleted file mode 100644 index 36ad05e..0000000 --- a/src/shared/weapon_common.qc +++ /dev/null @@ -1,480 +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. -*/ - -#ifndef NEW_INVENTORY -var int g_weapon_weights[g_weapons.length]; - -#ifdef CLIENT -var int g_weapon_order[g_weapons.length]; -#endif - -void -Weapons_Init(void) -{ - /* in the future we'll have no internal weapon table, then this will fill - * one up... */ - /*searchhandle sh; - filestream fh; - string line; - sh = search_begin("scripts/weapon_*.txt", TRUE, TRUE); - for (int i = 0; i < search_getsize(sh); i++) { - fh = fopen(search_getfilename(sh, i), FILE_READ); - if (fh < 0) { - continue; - } - - while ((line = fgets(fh))) { - int w = tokenize(line); - switch (argv(0)) { - case "name": - break; - case "slot": - break; - case "slot_pos": - break; - } - } - fclose(fh); - }*/ - - for (int i = 0; i < g_weapons.length; i++) - if (g_weapons[i].precache != __NULL__) - g_weapons[i].precache(); - - /* check our weapon weights */ - int max = 0; - for (int i = 0; i < g_weapons.length; i++) - if (g_weapons[i].weight > max) - max = g_weapons[i].weight; - - /* don't bother building the list if we've got no weights */ - if (max <= 0) - return; - - /* position in the weight array */ - int w = 0; - - /* loop through all weights */ - for (int b = 0; b <= max; b++) { - /* loop through all weapons */ - for (int i = 0; i < g_weapons.length; i++) { - /* if we've found a valid weight, add the weapon to the list */ - if (g_weapons[i].weight == b) { - g_weapon_weights[w] = i; - w++; - } - } - } - -#if 0 - for (int i = 0; i < g_weapons.length; i++) - print(sprintf("Weapon-Weight order: %s, %i\n", g_weapons[g_weapon_weights[i]].name, i)); -#endif - -#ifdef CLIENT - /* build our slot-order table */ - int st = 0; - - int max_slots = 0; - for (int i = 0; i < g_weapons.length; i++) - if (g_weapons[i].slot > max_slots) - max_slots = g_weapons[i].slot; - int max_pos = 0; - for (int i = 0; i < g_weapons.length; i++) - if (g_weapons[i].slot_pos > max_pos) - max_pos = g_weapons[i].slot_pos; - - /* loop through all slots */ - for (int s = 0; s <= max_slots; s++) { - /* loop through all positions */ - for (int p = 0; p < max_pos; p++) { - /* loop through all the weapons */ - for (int i = 0; i < g_weapons.length; i++) { - if (g_weapons[i].slot == s && g_weapons[i].slot_pos == p) { - g_weapon_order[st] = i; - st++; - } - } - } - } -#if 0 - for (int i = 0; i < g_weapons.length; i++) - print(sprintf("Weapon-List order: %s, %i\n", g_weapons[g_weapon_order[i]].name, i)); -#endif -#endif -} - -void -Weapons_SetLeftModel(string mdl) -{ -#ifdef CLIENT - setmodel(pSeat->m_eViewModelL, mdl); - setsize(pSeat->m_eViewModelL, [0,0,0], [0,0,0]); - pSeat->m_eViewModelL.effects |= EF_NOSHADOW; -#endif -} -void -Weapons_SetRightModel(string mdl) -{ -#ifdef CLIENT - setmodel(pSeat->m_eViewModel, mdl); - setsize(pSeat->m_eViewModel, [0,0,0], [0,0,0]); - pSeat->m_eViewModel.effects |= EF_NOSHADOW; -#endif -} - -void -Weapons_SetModel(string mdl) -{ - Weapons_SetRightModel(mdl); - Weapons_SetLeftModel(""); -} - -void -Weapons_SetRightGeomset(string set) -{ -#ifdef CLIENT - setcustomskin(pSeat->m_eViewModel, "", set); -#endif -} -void -Weapons_SetLeftGeomset(string set) -{ -#ifdef CLIENT - setcustomskin(pSeat->m_eViewModelL, "", set); -#endif -} - -void -Weapons_SetGeomset(string set) -{ - Weapons_SetRightGeomset(set); -} - -void -Weapons_Draw(player pl) -{ - int i = pl.activeweapon; - - /* In case the previous weapon hid the model */ - Weapons_EnableModel(); - -#ifdef CLIENT - View_SetMuzzleflash(0); -#endif - - pl.w_attack_next = 0.5f; - pl.w_idle_next = 2.5f; - pl.viewzoom = 1.0f; - pl.weapontime = 0.0f; - - /* we're meant to respawn when we're dead, don't unset! */ - if (pl.health > 0) { - pl.think = __NULL__; - pl.nextthink = 0.0f; - } - - /* make sure this is all wiped */ - pl.a_ammo1 = pl.a_ammo2 = pl.a_ammo3 = 0; - - if (g_weapons[i].draw != __NULL__) - g_weapons[i].draw(pl); - - if (g_weapons[i].updateammo != __NULL__) - g_weapons[i].updateammo(pl); - - pl.gflags |= GF_SEMI_TOGGLED; -} - -void -Weapons_Holster(player pl) -{ - int i = pl.activeweapon; - - if (g_weapons[i].holster != __NULL__) - g_weapons[i].holster(pl); -} - -void -Weapons_Primary(player pl) -{ - int i = pl.activeweapon; - - if (pl.gflags & GF_SEMI_TOGGLED) - return; - - if (g_weapons[i].primary != __NULL__) - g_weapons[i].primary(pl); - - if (g_weapons[i].updateammo != __NULL__) - g_weapons[i].updateammo(pl); -} - -void -Weapons_AmmoUpdate(entity target) -{ - player pl = (player)target; - int i = pl.activeweapon; - - if (g_weapons[i].updateammo != __NULL__) - g_weapons[i].updateammo(pl); - -} - -void -Weapons_Secondary(player pl) -{ - int i = pl.activeweapon; - - if (g_weapons[i].secondary != __NULL__) - g_weapons[i].secondary(pl); - - if (g_weapons[i].updateammo != __NULL__) - g_weapons[i].updateammo(pl); -} - -void -Weapons_Reload(player pl) -{ - int i = pl.activeweapon; - - if (g_weapons[i].reload != __NULL__) - g_weapons[i].reload(pl); - - if (g_weapons[i].updateammo != __NULL__) - g_weapons[i].updateammo(pl); -} - -void -Weapons_Release(player pl) -{ - int i = pl.activeweapon; - - if (g_weapons[i].release != __NULL__) - g_weapons[i].release(pl); - - pl.gflags &= ~GF_SEMI_TOGGLED; -} - -void -Weapons_PreDraw(player pl, int thirdperson) -{ - int i = pl.activeweapon; - - if (g_weapons[i].predraw != __NULL__) - g_weapons[i].predraw(pl, thirdperson); -} - -int -Weapons_IsEmpty(player pl, int w) -{ - int r = 0; - - entity oself = self; - self = pl; - - if (g_weapons[w].isempty != __NULL__) - r = g_weapons[w].isempty(pl); - - self = oself; - - return (r); -} - - -weapontype_t -Weapons_GetType(player pl, int w) -{ - weapontype_t r = WPNTYPE_INVALID; - - entity oself = self; - self = pl; - - if (g_weapons[w].type != __NULL__) - r = g_weapons[w].type(pl); - - self = oself; - - return (r); -} - -void -Weapons_DrawCrosshair(player pl) -{ - int i = pl.activeweapon; - - if (g_weapons[i].postdraw != __NULL__) - g_weapons[i].postdraw(pl); -} - -string -Weapons_GetWorldmodel(int id) -{ - if (g_weapons[id].wmodel != __NULL__) - return g_weapons[id].wmodel(); - - return ""; -} - -string -Weapons_GetPlayermodel(player pl, int id) -{ - if (g_weapons[id].pmodel != __NULL__) - return g_weapons[id].pmodel(pl); - - return ""; -} - -string -Weapons_GetDeathmessage(int id) -{ - if (g_weapons[id].deathmsg != __NULL__) - return g_weapons[id].deathmsg(); - - return ""; -} - -float -Weapons_GetAim(player pl, int id) -{ - if (g_weapons[id].aimanim != __NULL__) - return g_weapons[id].aimanim(pl); - - return (0); -} - -#ifdef CLIENT -void -Weapons_HUDPic(player pl, int id, int s, vector pos, float a) -{ - if (g_weapons[id].hudpic != __NULL__) - g_weapons[id].hudpic(pl, s, pos, a); -} -#endif - -void -Weapons_MakeVectors(player pl) -{ -#ifdef SERVER - makevectors(pl.v_angle); -#else - makevectors(view_angles); -#endif -} - -vector -Weapons_GetCameraPos(player pl) -{ -#ifdef SERVER - return (pl.origin + pl.view_ofs); -#else - return getproperty(VF_ORIGIN); -#endif -} - -void -Weapons_ViewAnimation(player pl, int i) -{ - pl.weaponframe = i; - pl.weapontime = 0.0f; -} - -#ifdef CLIENT -int View_GetAnimation(void); -#endif - -int -Weapons_GetAnimation(player pl) -{ - return pl.weaponframe; -} - -void -Weapons_ViewPunchAngle(player pl, vector add) -{ - pl.punchangle += add; -} - -int -Weapons_IsPresent(player pl, int w) -{ - if (pl.g_items & g_weapons[w].id) { - return (1); - } else { - return (0); - } -} - -void -Weapons_EnableModel(void) -{ -#ifdef CLIENT - View_EnableViewmodel(); -#endif -} - -void -Weapons_DisableModel(void) -{ -#ifdef CLIENT - View_DisableViewmodel(); -#endif -} - -/* -================= -Weapons_UpdateAmmo - -Sets .a_ammoX fields and clamps them so they can be networked as a single byte. -================= -*/ -void -Weapons_UpdateAmmo(player pl, int a1, int a2, int a3) -{ - /* no change */ - if (a1 == -1) - a1 = pl.a_ammo1; - if (a2 == -1) - a2 = pl.a_ammo2; - if (a3 == -1) - a3 = pl.a_ammo3; - - /* networked as bytes, since we don't need more. Clamp to avoid errors */ - pl.a_ammo1 = a1; - pl.a_ammo2 = a2; - pl.a_ammo3 = a3; -} - -void -Weapons_Sound(entity pl, float channel, string snd) -{ -#if 0 -#ifdef SERVER - float prev = pl.dimension_see; - pl.dimension_see=0; - Sound_Play(pl, channel, snd); - pl.dimension_see = prev; -#else - /* client side == immediately */ - Sound_Play(pl, channel, snd); -#endif -#else - #ifdef SERVER - Sound_Play(pl, channel, snd); - #endif -#endif -} -#endif \ No newline at end of file diff --git a/zpak001.pk3dir/PAK_NAME b/zpak001.pk3dir/PAK_NAME new file mode 100644 index 0000000..80a6ddd --- /dev/null +++ b/zpak001.pk3dir/PAK_NAME @@ -0,0 +1 @@ +package_valve.pk3 diff --git a/zpak001.pk3dir/cfg/skill.cfg b/zpak001.pk3dir/cfg/skill.cfg index 6b6a5d2..a41adf7 100644 --- a/zpak001.pk3dir/cfg/skill.cfg +++ b/zpak001.pk3dir/cfg/skill.cfg @@ -196,12 +196,9 @@ set sk_plr_buckshot3 "5" set sk_plr_crowbar1 "10" set sk_plr_crowbar2 "10" set sk_plr_crowbar3 "10" -set sk_plr_egon_narrow1 "6" -set sk_plr_egon_narrow2 "6" -set sk_plr_egon_narrow3 "6" -set sk_plr_egon_wide1 "14" -set sk_plr_egon_wide2 "14" -set sk_plr_egon_wide3 "14" +set sk_plr_egon1 "6" +set sk_plr_egon2 "6" +set sk_plr_egon3 "6" set sk_plr_gauss1 "20" set sk_plr_gauss2 "20" set sk_plr_gauss3 "20" diff --git a/zpak001.pk3dir/csprogs.dat b/zpak001.pk3dir/csprogs.dat new file mode 100644 index 0000000..c66d691 Binary files /dev/null and b/zpak001.pk3dir/csprogs.dat differ diff --git a/zpak001.pk3dir/csprogs.lno b/zpak001.pk3dir/csprogs.lno new file mode 100644 index 0000000..ec8d95c Binary files /dev/null and b/zpak001.pk3dir/csprogs.lno differ diff --git a/zpak001.pk3dir/cvar_defaults.cfg b/zpak001.pk3dir/cvar_defaults.cfg new file mode 100644 index 0000000..f9e75c1 --- /dev/null +++ b/zpak001.pk3dir/cvar_defaults.cfg @@ -0,0 +1,163 @@ +set ai_debugAlerts "0" // Show prints when AI gets alerted to a position. +set ai_debugLogic "0" // Show prints when AI makes decisions regarding thinking. +set ai_debugNav "0" // Show prints when AI makes decisions regarding navigation. +set ai_debugScripts "0" // Show prints when AI interacts with scripted sequences. +set ai_runSpeed "320" // Default run speed chosen by AI characters, in units per second. +set ai_walkSpeed "150" // Default walk speed chosen by AI characters, in units per second. + +set bot_aimless +set bot_backspeed +set bot_crouch +set bot_debug +set bot_developer +set bot_dont_shoot +set bot_enable +set bot_fastChat +set bot_forwardspeed +set bot_minClients +set bot_noChat +set bot_pause +set bot_prefix +set bot_prone +set bot_sidespeed +set bot_skill +set bot_walk + +set cg_chatEnabled +set cg_damageShake +set cg_hudAspect +set cg_muzzleDLight +set cg_muzzleDLightColor +set cg_viewZSmoothingMax +set cg_viewZSmoothingMin +set cg_viewZSmoothingTime +set cg_viewmodelFlip +set cg_viewmodelFov +set cg_viewmodelLag +set cg_viewmodelOffset +set cg_viewmodelPass +set cg_viewmodelScale + +set chatplug_filter + +set cl_backspeed +set cl_decals +set cl_forwardspeed +set cl_musicstyle +set cl_sidespeed + +set con_color + +set dev_cornerspeed +set dev_loddistance +set dev_rotspeed +set dev_skyscale + +set dsp_soundscapes "1" + +set g_developer "0" // Show debug messages from the game-logic. +set g_developerTimestamps "0" +set g_gravity "800" // Global gravity setting. + +set in_zoomSensitivity "1.0" // Input sensitivity multiplier for when you're zoomed in. + +set logging_enabled "0" // Enable server-side logging for game specific events. + +set menu_helptext_size "11" +set menu_intro "1" +set menu_steambg "0" +set menu_updating "0" + +set motdfile "motd.txt" + +set mp_allowvote "1" +set mp_decals "128" +set mp_flashlight "1" +set mp_td_dmgToKick "300" +set mp_td_dmgToWarn "200" + +set nav_linksize "256" +set nav_radius "32" + +set phys_developer "0" // Shows debug prints regarding physics operations when set. +set phys_impactforcescale "100" +set phys_pushscale "1" + +set pm_accelerate "10" +set pm_airaccelerate "10" +set pm_airstepsize "0" +set pm_boxcenter "1" +set pm_boxwidth "32" +set pm_crouchheight "36" +set pm_crouchspeed "90" +set pm_crouchviewheight "30" +set pm_edgefriction "1" +set pm_friction "4" +set pm_gravity "800" +set pm_jumpheight "265" +set pm_maxviewpitch "89" +set pm_minviewpitch "-89" +set pm_noclipaccelerate "5" +set pm_noclipspeed "500" +set pm_normalheight "72" +set pm_normalviewheight "64" +set pm_nospeedcap "0" +set pm_proneheight "0" +set pm_pronespeed "40.5" +set pm_proneviewheight "16" +set pm_runspeed "0" +set pm_stairSmoothing "1" +set pm_stamina "24" +set pm_staminarate "0.75" +set pm_staminathreshold "4" +set pm_stepsize "18" +set pm_stopspeed "100" +set pm_thirdPerson "0" +set pm_walkspeed "270" +set pm_wateraccelerate "10" +set pm_waterjumpheight "350" + +set r_autoscale "1" // When set, will ensure the game is at 640x480 type scaling. +set r_drawdecals "1" // Shows decal entities managed by the game when set. +set r_pixelscale "1" // ??? +set r_renderEntityInfo "0" +set r_showDlights "0" +set r_showPhysicsInfo "0" +set r_skipGlows "0" +set r_skipLensFlares "0" +set r_skipWorld "0" + +set rm_unlit_additive "1" // Render entities with the 'additive' rendermode fullbright. +set rm_unlit_texture "1" // Render entities with the 'texture' rendermode fullbright. + +set rope_debug "0" // Shows primitive debug rendering of a rope when set. +set rope_fast "1" // Don't perform expensive calculations on the rope when set. +set rope_maxsegments "-1" // Limit rope segments. -1 means no limit. +set rope_sag "2" // Rope sagging multiplier. +set rope_swing "2" // Rope swinging multiplier. + +set s_developer "0" // Show debug prints related to the sound system. + +set sp_decals "128" + +set sv_friendlyFire "0" // Team-inflicted damage is possible when set. +set sv_levelexec "1" // Will search and execute `/maps/currentmap.cfg` when set. +set sv_plugins "1" // Enable the use of server-side plugins when set. + +set vehicle_developer "0" // Shows vehicle related debug prints when set. + +set vgui_color "255 170 0" // Default primary color for VGUI widgets. + +set vid_brightness "0" // Controls display brightness. +set vid_gamma "1" // Controls gamma level. +set vid_desktopgamma "0" +set vid_hardwaregamma "2" + +set violence_ablood "1" // Enable alien blood. +set violence_agibs "1" // Enable alien gibs. +set violence_hblood "1" // Enable human blood. +set violence_hgibs "1" // Enable human giblets. + +set xr_roomScale "1.0" // XR: Room scale multiplier. +set xr_testInputs "0" // XR: Enable fake inputs, to debug the VR camera and weapon inputs. +set xr_viewHeight "-48" // XR: Default view-height offset. diff --git a/zpak001.pk3dir/def/ammo.def b/zpak001.pk3dir/def/ammo.def new file mode 100644 index 0000000..d6398dd --- /dev/null +++ b/zpak001.pk3dir/def/ammo.def @@ -0,0 +1,59 @@ +#include "ammo/base.def" +#include "ammo/buckshot.def" +#include "ammo/357.def" +#include "ammo/9mmAR.def" +#include "ammo/9mmbox.def" +#include "ammo/rpgclip.def" +#include "ammo/ARgrenades.def" +#include "ammo/9mmclip.def" +#include "ammo/crossbow.def" +#include "ammo/gaussclip.def" + +// these have to be defined by the game. +entityDef ammo_types { + "ammo_none" "0" + "ammo_9mm" "1" + "ammo_357" "2" + "ammo_buckshot" "3" + "ammo_bolt" "4" + "ammo_rocket" "5" + "ammo_uranium" "6" + "ammo_handgrenade" "7" + "ammo_satchel" "8" + "ammo_tripmine" "9" + "ammo_snark" "10" + "ammo_hornet" "11" + "ammo_m203_grenade" "12" +} + +entityDef ammo_names { + "ammo_none" "None" + "ammo_9mm" "9mm Bullets" + "ammo_357" ".357 Bullets" + "ammo_buckshot" "Buckshot Shells" + "ammo_bolt" "Bolts" + "ammo_rocket" "Rockets" + "ammo_uranium" "Uranium" + "ammo_handgrenade" "Hand Grenades" + "ammo_satchel" "Satchel Charge" + "ammo_tripmine" "Tripmines" + "ammo_snark" "Squeak Grenades" + "ammo_hornet" "Hornets" + "ammo_m203_grenade" "M203 Grenades" +} + +entityDef ammo_max { + "ammo_none" "0" + "ammo_9mm" "250" + "ammo_357" "36" + "ammo_buckshot" "125" + "ammo_bolt" "50" + "ammo_rocket" "5" + "ammo_uranium" "100" + "ammo_handgrenade" "10" + "ammo_satchel" "5" + "ammo_tripmine" "10" + "ammo_snark" "10" + "ammo_hornet" "8" + "ammo_m203_grenade" "10" +} diff --git a/zpak001.pk3dir/def/ammo/357.def b/zpak001.pk3dir/def/ammo/357.def new file mode 100644 index 0000000..fdd6e23 --- /dev/null +++ b/zpak001.pk3dir/def/ammo/357.def @@ -0,0 +1,6 @@ +entityDef ammo_357 +{ + "inherit" "ammo_base" + "model" "models/w_357ammobox.mdl" + "inv_ammo_357" "6" +} diff --git a/zpak001.pk3dir/def/ammo/9mmAR.def b/zpak001.pk3dir/def/ammo/9mmAR.def new file mode 100644 index 0000000..1dd4ba8 --- /dev/null +++ b/zpak001.pk3dir/def/ammo/9mmAR.def @@ -0,0 +1,6 @@ +entityDef ammo_9mmAR +{ + "inherit" "ammo_base" + "model" "models/w_9mmarclip.mdl" + "inv_ammo_9mm" "50" +} diff --git a/zpak001.pk3dir/def/ammo/9mmbox.def b/zpak001.pk3dir/def/ammo/9mmbox.def new file mode 100644 index 0000000..4bcd800 --- /dev/null +++ b/zpak001.pk3dir/def/ammo/9mmbox.def @@ -0,0 +1,6 @@ +entityDef ammo_9mmbox +{ + "inherit" "ammo_base" + "model" "models/w_chainammo.mdl" + "inv_ammo_9mm" "200" +} diff --git a/zpak001.pk3dir/def/ammo/9mmclip.def b/zpak001.pk3dir/def/ammo/9mmclip.def new file mode 100644 index 0000000..3ef643f --- /dev/null +++ b/zpak001.pk3dir/def/ammo/9mmclip.def @@ -0,0 +1,6 @@ +entityDef ammo_9mmclip +{ + "inherit" "ammo_base" + "model" "models/w_9mmclip.mdl" + "inv_ammo_9mm" "17" +} diff --git a/zpak001.pk3dir/def/ammo/ARgrenades.def b/zpak001.pk3dir/def/ammo/ARgrenades.def new file mode 100644 index 0000000..77acecd --- /dev/null +++ b/zpak001.pk3dir/def/ammo/ARgrenades.def @@ -0,0 +1,6 @@ +entityDef ammo_ARgrenades +{ + "inherit" "ammo_base" + "model" "models/w_argrenade.mdl" + "inv_ammo_m203_grenade" "2" +} diff --git a/zpak001.pk3dir/def/ammo/base.def b/zpak001.pk3dir/def/ammo/base.def new file mode 100644 index 0000000..2ecc301 --- /dev/null +++ b/zpak001.pk3dir/def/ammo/base.def @@ -0,0 +1,8 @@ +entityDef ammo_base +{ + "spawnclass" "NSItem" + "snd_acquire" "ammo.pickup" + "snd_respawn" "ammo.respawn" + "mins" "-16 -16 0" + "maxs" "16 16 16" +} diff --git a/zpak001.pk3dir/def/ammo/buckshot.def b/zpak001.pk3dir/def/ammo/buckshot.def new file mode 100644 index 0000000..070bd1b --- /dev/null +++ b/zpak001.pk3dir/def/ammo/buckshot.def @@ -0,0 +1,6 @@ +entityDef ammo_buckshot +{ + "inherit" "ammo_base" + "model" "models/w_shotbox.mdl" + "inv_ammo_buckshot" "12" +} diff --git a/zpak001.pk3dir/def/ammo/crossbow.def b/zpak001.pk3dir/def/ammo/crossbow.def new file mode 100644 index 0000000..e61623b --- /dev/null +++ b/zpak001.pk3dir/def/ammo/crossbow.def @@ -0,0 +1,6 @@ +entityDef ammo_crossbow +{ + "inherit" "ammo_base" + "model" "models/w_crossbow_clip.mdl" + "inv_ammo_bolt" "5" +} diff --git a/zpak001.pk3dir/def/ammo/gaussclip.def b/zpak001.pk3dir/def/ammo/gaussclip.def new file mode 100644 index 0000000..b41960e --- /dev/null +++ b/zpak001.pk3dir/def/ammo/gaussclip.def @@ -0,0 +1,6 @@ +entityDef ammo_gaussclip +{ + "inherit" "ammo_base" + "model" "models/w_gaussammo.mdl" + "inv_ammo_uranium" "20" +} diff --git a/zpak001.pk3dir/def/ammo/rpgclip.def b/zpak001.pk3dir/def/ammo/rpgclip.def new file mode 100644 index 0000000..10b61cf --- /dev/null +++ b/zpak001.pk3dir/def/ammo/rpgclip.def @@ -0,0 +1,6 @@ +entityDef ammo_rpgclip +{ + "inherit" "ammo_base" + "model" "models/w_rpgammo.mdl" + "inv_ammo_uranium" "1" +} diff --git a/zpak001.pk3dir/def/items.def b/zpak001.pk3dir/def/items.def new file mode 100644 index 0000000..1e1c95e --- /dev/null +++ b/zpak001.pk3dir/def/items.def @@ -0,0 +1,33 @@ +entityDef item_battery +{ + "spawnclass" "NSItem" + "model" "models/w_battery.mdl" + "mins" "-16 -16 0" + "maxs" "16 16 16" + "snd_acquire" "item.battery" + "snd_respawn" "item.respawn" + "inv_armor" "skill:battery" + "requires" "item_suit" +} + +entityDef item_healthkit +{ + "spawnclass" "NSItem" + "model" "models/w_medkit.mdl" + "mins" "-16 -16 0" + "maxs" "16 16 16" + "snd_acquire" "item.healthkit" + "snd_respawn" "item.respawn" + "inv_health" "skill:healthkit" +} + +entityDef item_suit +{ + "spawnclass" "NSItem" + "model" "models/w_suit.mdl" + "mins" "-16 -16 0" + "maxs" "16 16 16" + "snd_acquire" "item.suit" + "snd_respawn" "item.respawn" + "inv_carry" "1" +} diff --git a/zpak001.pk3dir/def/monsters.def b/zpak001.pk3dir/def/monsters.def index 06582bf..608b0c4 100644 --- a/zpak001.pk3dir/def/monsters.def +++ b/zpak001.pk3dir/def/monsters.def @@ -1,35 +1,36 @@ -include "monsters/alien_controller.def" -include "monsters/alien_grunt.def" -include "monsters/alien_slave.def" -include "monsters/apache.def" -include "monsters/babycrab.def" -include "monsters/barnacle.def" -include "monsters/barney.def" -include "monsters/barney_dead.def" -include "monsters/bigmomma.def" -include "monsters/bloater.def" -include "monsters/bullchicken.def" -include "monsters/cockroach.def" -include "monsters/flyer_flock.def" -include "monsters/gargantua.def" -include "monsters/gman.def" -include "monsters/headcrab.def" -include "monsters/hevsuit_dead.def" -include "monsters/hgrunt_dead.def" -include "monsters/houndeye.def" -include "monsters/human_assassin.def" -include "monsters/human_grunt.def" -include "monsters/ichthyosaur.def" -include "monsters/leech.def" -include "monsters/miniturret.def" -include "monsters/nihilanth.def" -include "monsters/osprey.def" -include "monsters/rat.def" -include "monsters/scientist.def" -include "monsters/scientist_dead.def" -include "monsters/sentry.def" -include "monsters/sitting_scientist.def" -include "monsters/skeleton_dead.def" -include "monsters/tentacle.def" -include "monsters/turret.def" -include "monsters/zombie.def" +#include "monsters/alien_controller.def" +#include "monsters/alien_grunt.def" +#include "monsters/alien_slave.def" +#include "monsters/apache.def" +#include "monsters/babycrab.def" +#include "monsters/barnacle.def" +#include "monsters/barney.def" +#include "monsters/barney_dead.def" +#include "monsters/bigmomma.def" +#include "monsters/bloater.def" +#include "monsters/bullchicken.def" +#include "monsters/cockroach.def" +#include "monsters/flyer_flock.def" +#include "monsters/gargantua.def" +#include "monsters/gman.def" +#include "monsters/headcrab.def" +#include "monsters/hevsuit_dead.def" +#include "monsters/hgrunt_dead.def" +#include "monsters/houndeye.def" +#include "monsters/human_assassin.def" +#include "monsters/human_grunt.def" +#include "monsters/ichthyosaur.def" +#include "monsters/leech.def" +#include "monsters/miniturret.def" +#include "monsters/nihilanth.def" +#include "monsters/osprey.def" +#include "monsters/rat.def" +#include "monsters/scientist.def" +#include "monsters/scientist_dead.def" +#include "monsters/sentry.def" +#include "monsters/sitting_scientist.def" +#include "monsters/skeleton_dead.def" +#include "monsters/tentacle.def" +#include "monsters/tripmine.def" +#include "monsters/turret.def" +#include "monsters/zombie.def" diff --git a/zpak001.pk3dir/def/monsters/miniturret.def b/zpak001.pk3dir/def/monsters/miniturret.def index 654f90b..126cb9d 100644 --- a/zpak001.pk3dir/def/monsters/miniturret.def +++ b/zpak001.pk3dir/def/monsters/miniturret.def @@ -1,15 +1,15 @@ entityDef monster_miniturret { "spawnclass" "NSTalkMonster" - "model" "models/miniturret.mdl" - "netname" "Mini-Turret" - "health" "skill:miniturret_health" - "mins" "-16 -16 0" - "maxs" "16 16 16" + "model" "models/miniturret.mdl" + "netname" "Mini-Turret" + "health" "skill:miniturret_health" + "mins" "-16 -16 0" + "maxs" "16 16 16" "eye_height" "64" - "team" "2" - "propdata" "actor_robot" + "team" "2" + "propdata" "actor_robot" "speed_walk" "0" - "speed_run" "0" -} \ No newline at end of file + "speed_run" "0" +} diff --git a/zpak001.pk3dir/def/monsters/scientist.def b/zpak001.pk3dir/def/monsters/scientist.def index a794cae..2091db2 100644 --- a/zpak001.pk3dir/def/monsters/scientist.def +++ b/zpak001.pk3dir/def/monsters/scientist.def @@ -45,7 +45,6 @@ entityDef monster_scientist "talk_deny_follow" "!SC_POK" // Body Types - when "body" equals "0" { "pitch" "105" "netname" "Walter" diff --git a/zpak001.pk3dir/def/monsters/snark.def b/zpak001.pk3dir/def/monsters/snark.def new file mode 100644 index 0000000..9949426 --- /dev/null +++ b/zpak001.pk3dir/def/monsters/snark.def @@ -0,0 +1,30 @@ +entityDef monster_snark +{ + "spawnclass" "NSMonster" + "model" "models/w_squeak.mdl" + "netname" "Snark" + "health" "skill:snark_health" + "mins" "-16 -16 0" + "maxs" "16 16 72" + "eye_height" "12" + "team" "2" + "propdata" "actor_alien" + "speed_walk" "32" + "speed_run" "72" + + "attack_ranged_range" "180" // needs launch attack + + "snd_idle" "monster_snark.idle" + "snd_pain" "monster_snark.pain" + "snd_death" "monster_snark.death" + "leap_damage" "skill:snark_dmg_bite" + + events { + jump "AddVelocity" "512 0 250" + jump "StartSoundDef" "monster_snark.attack" + jump_variation1 "AddVelocity" "512 0 350" + jump_variation1 "StartSoundDef" "monster_snark.attack" + jump_variation2 "AddVelocity" "512 0 350" + jump_variation2 "StartSoundDef" "monster_snark.attack" + } +} \ No newline at end of file diff --git a/zpak001.pk3dir/def/monsters/tripmine.def b/zpak001.pk3dir/def/monsters/tripmine.def new file mode 100644 index 0000000..8b096cd --- /dev/null +++ b/zpak001.pk3dir/def/monsters/tripmine.def @@ -0,0 +1,5 @@ +entityDef monster_tripmine +{ + "spawnclass" "HLTripmine" + "snd_activate" "weapon_tripmine.activate" +} \ No newline at end of file diff --git a/zpak001.pk3dir/def/player.def b/zpak001.pk3dir/def/player.def new file mode 100644 index 0000000..377bfce --- /dev/null +++ b/zpak001.pk3dir/def/player.def @@ -0,0 +1,4 @@ +entityDef player +{ + "spawnclass" "HLPlayer" +} diff --git a/zpak001.pk3dir/def/projectiles.def b/zpak001.pk3dir/def/projectiles.def new file mode 100644 index 0000000..ffd1b6f --- /dev/null +++ b/zpak001.pk3dir/def/projectiles.def @@ -0,0 +1,15 @@ +entityDef projectile_bullet_base +{ + "spawnclass" "NSProjectile" + "is_bullet" "1" + "decal_impact" "Impact.BigShot" + "detonate_on_world" "1" +} + +entityDef projectile_egonbeam +{ + "spawnclass" "NSProjectile" + "is_bullet" "1" + "damage" "skill:plr_egon" + "detonate_on_world" "0" +} diff --git a/zpak001.pk3dir/def/spawns.def b/zpak001.pk3dir/def/spawns.def new file mode 100644 index 0000000..e859ca3 --- /dev/null +++ b/zpak001.pk3dir/def/spawns.def @@ -0,0 +1,26 @@ +entityDef info_player_start +{ + "editor_mins" "-16 -16 -36" + "editor_maxs" "16 16 36" + "editor_description" "Singleplayer Spawn Point" + "editor_color" "1 0 0" + "spawnclass" "NSSpawnPoint" +} + +entityDef info_player_deathmatch +{ + "editor_mins" "-16 -16 -36" + "editor_maxs" "16 16 36" + "editor_description" "Deathmatch Spawn Point" + "editor_color" "1 0 0" + "spawnclass" "NSSpawnPoint" +} + +entityDef info_player_coop +{ + "editor_mins" "-16 -16 -36" + "editor_maxs" "16 16 36" + "editor_description" "Cooperative Spawn Point" + "editor_color" "1 0 0" + "spawnclass" "NSSpawnPoint" +} diff --git a/zpak001.pk3dir/def/weapons.def b/zpak001.pk3dir/def/weapons.def index 65414d4..66412ef 100644 --- a/zpak001.pk3dir/def/weapons.def +++ b/zpak001.pk3dir/def/weapons.def @@ -1,14 +1,14 @@ -include "weapons/357.def" -include "weapons/9mmAR.def" -include "weapons/9mmhandgun.def" -include "weapons/crossbow.def" -include "weapons/crowbar.def" -include "weapons/egon.def" -include "weapons/gauss.def" -include "weapons/handgrenade.def" -include "weapons/hornetgun.def" -include "weapons/rpg.def" -include "weapons/satchel.def" -include "weapons/shotgun.def" -include "weapons/snark.def" -include "weapons/tripmine.def" +#include "weapons/357.def" +#include "weapons/9mmAR.def" +#include "weapons/9mmhandgun.def" +#include "weapons/crossbow.def" +#include "weapons/crowbar.def" +#include "weapons/egon.def" +#include "weapons/gauss.def" +#include "weapons/handgrenade.def" +#include "weapons/hornetgun.def" +#include "weapons/rpg.def" +#include "weapons/satchel.def" +#include "weapons/shotgun.def" +#include "weapons/snark.def" +#include "weapons/tripmine.def" diff --git a/zpak001.pk3dir/def/weapons/357.def b/zpak001.pk3dir/def/weapons/357.def index c33a202..de7aa8d 100644 --- a/zpak001.pk3dir/def/weapons/357.def +++ b/zpak001.pk3dir/def/weapons/357.def @@ -1,19 +1,56 @@ entityDef weapon_357 { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" ".367 Revolver" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_357.mdl" - "inv_item" "$WEAPON_PYTHON" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" ".357 Revolver" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_357.mdl" + "model_view" "models/v_357.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + // weapon specific + "def_fireInfo" "fireInfo_357" + "inv_name" ".357 Revolver" + "clipSize" "6" + + "actFire" "2" + "actHolster" "4" + "actReload" "3" + "actDraw" "5" + "actIdle" "0,1,6,7" + + "snd_fire" "weapon_357.shoot" + "snd_empty" "weapon_357.empty" + "snd_reload" "weapon_357.reload" + + // HLWeapon specific + "hudSlot" "1" + "hudSlotPos" "1" + "weight" "15" } entityDef weapon_python { "spawnclass" "weapon_357" -} \ No newline at end of file +} + +entityDef projectile_357 +{ + "inherit" "projectile_bullet_base" + "damage" "skill:plr_357_bullet" +} + +entityDef fireInfo_357 +{ + "def_onFire" "projectile_357" + "ammoType" "ammo_357" + "ammoRequired" "1" + "ammoPerShot" "1" + "fireRate" ".75" + "punchAngle" "-10 0 0" + "model_flash" "sprites/muzzleflash2.spr" +} diff --git a/zpak001.pk3dir/def/weapons/9mmAR.def b/zpak001.pk3dir/def/weapons/9mmAR.def index 8605a2b..a89977a 100644 --- a/zpak001.pk3dir/def/weapons/9mmAR.def +++ b/zpak001.pk3dir/def/weapons/9mmAR.def @@ -1,21 +1,67 @@ entityDef weapon_9mmAR { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "9mm AR" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_9mmAR.mdl" - "inv_item" "$WEAPON_MP5" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "9mm AR" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_9mmAR.mdl" + "model_view" "models/v_9mmAR.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + // NSWeapon specific + "def_fireInfo" "fireInfo_9mmAR" + "def_altFireInfo" "fireInfo_ARGrenade" + "inv_name" "9mm AR" + "clipSize" "50" + "clipSizeDefault" "25" + + "actFire" "5,6,7" + "actHolster" "4" + "actReload" "3" + "actDraw" "4" + "actIdle" "0,1" + + "snd_fire" "weapon_mp5.shoot" + "snd_empty" "weapon_mp5.empty" + + // HLWeapon specific + "hudSlot" "2" + "hudSlotPos" "0" + "weight" "15" } -entityDef weapon_mp5 +entityDef projectile_9mmAR { - "spawnclass" "weapon_9mmAR" + "inherit" "projectile_bullet_base" + "damage" "skill:plr_9mmAR_bullet" + "spread" "0.025 0.025" +} + +entityDef fireInfo_9mmAR +{ + "def_onFire" "projectile_9mmAR" + "ammoType" "ammo_9mm" + "ammoRequired" "1" + "ammoPerShot" "1" + "fireRate" "0.085" + "punchAngle" "-2 0 0" + "model_flash" "sprites/muzzleflash1.spr" +} + +entityDef fireInfo_ARGrenade +{ + "def_onFire" "projectile_ARgrenade" + "ammoType" "ammo_m203_grenade" + "ammoRequired" "1" + "ammoPerShot" "1" + "fireRate" "1" + "punchAngle" "-10 0 0" + "snd_fire" "weapon_mp5.gl" + "actFire" "2" } entityDef projectile_ARgrenade @@ -33,23 +79,47 @@ entityDef projectile_ARgrenade "detonate_on_death" "1" "detonate_on_world" "1" "detonate_on_actor" "1" - "snd_explode" "fx.explosion" + "snd_explode" "fx.explosion" "model_detonate" "fx_explosion.main" "decal_detonate" "ExplosionScorch" "smoke_fly" "weapon_9mmAR.nadetrail" - "def_damage" "damage_ARgrneadeDirect" - "def_splash_damage" "damage_ARgrneadeSplash" + "def_damage" "damage_ARgrenadeDirect" + "def_splash_damage" "damage_ARgrenadeSplash" } - -entityDef damage_ARgrneadeDirect +entityDef damage_ARgrenadeDirect { "damage" "50" } -entityDef damage_ARgrneadeSplash +entityDef damage_ARgrenadeSplash { "damage" "skill:plr_9mmAR_grenade" "radius" "160" -} \ No newline at end of file +} + +// multiplayer version +entityDef projectile_9mmAR_mp +{ + "inherit" "projectile_bullet_base" + "damage" "skill:plr_9mmAR_bullet" + "spread" "0.5 0.5" +} + +entityDef fireInfo_9mmAR_mp +{ + "def_onFire" "projectile_9mmAR_mp" + "ammoType" "ammo_9mm" + "ammoRequired" "1" + "ammoPerShot" "1" + "fireRate" "0.085" + "punchAngle" "-2 0 0" + "model_flash" "sprites/muzzleflash1.spr" +} + +entityDef weapon_9mmAR_mp +{ + "inherit" "weapon_9mmAR" + "def_fireInfo" "fireInfo_9mmAR_mp" +} diff --git a/zpak001.pk3dir/def/weapons/9mmhandgun.def b/zpak001.pk3dir/def/weapons/9mmhandgun.def index 5eb9c27..be2c02f 100644 --- a/zpak001.pk3dir/def/weapons/9mmhandgun.def +++ b/zpak001.pk3dir/def/weapons/9mmhandgun.def @@ -1,19 +1,71 @@ entityDef weapon_9mmhandgun { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "9mm Handgun" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_9mmhandgun.mdl" - "inv_item" "$WEAPON_GLOCK" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "9mm Handgun" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_9mmhandgun.mdl" + "model_view" "models/v_9mmhandgun.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + // weapon specific + "def_fireInfo" "fireInfo_glock" + "def_altFireInfo" "fireInfo_altGlock" + "inv_name" "9mm Handgun" + "clipSize" "17" + "ammoType" "ammo_9mm" + "ammoRequired" "1" + "ammoPerShot" "1" + "punchAngle" "-2 0 0" + + "actFire" "3" + "actAltFire" "3" + "actFireLast" "4" + "actAltFireLast" "4" + "actHolster" "8" + "actReload" "6" + "actReloadEmpty" "5" + "actDraw" "7" + "actIdle" "0,1,2" + + "snd_fire" "weapon_glock.fire" + "snd_altfire" "weapon_glock.fire" + "snd_empty" "weapon_glock.empty" + + // HLWeapon specific + "hudSlot" "1" + "hudSlotPos" "0" + "weight" "10" } -entityDef weapon_glock +entityDef projectile_glock { - "spawnclass" "weapon_9mmhandgun" -} \ No newline at end of file + "inherit" "projectile_bullet_base" + "damage" "skill:plr_9mm_bullet" + "spread" "0.01 0.01" +} + +entityDef projectile_glock_fast +{ + "inherit" "projectile_bullet_base" + "damage" "skill:plr_9mm_bullet" + "spread" "0.1 0.1" +} + +entityDef fireInfo_glock +{ + "def_onFire" "projectile_glock" + "fireRate" ".3" + "model_flash" "sprites/muzzleflash2.spr" +} + +entityDef fireInfo_altGlock +{ + "def_onFire" "projectile_glock_fast" + "fireRate" ".2" + "model_flash" "sprites/muzzleflash2.spr" +} diff --git a/zpak001.pk3dir/def/weapons/crossbow.def b/zpak001.pk3dir/def/weapons/crossbow.def index ffa7bab..8cabd68 100644 --- a/zpak001.pk3dir/def/weapons/crossbow.def +++ b/zpak001.pk3dir/def/weapons/crossbow.def @@ -1,16 +1,57 @@ entityDef weapon_crossbow { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "Crossbow" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_crossbow.mdl" - "inv_item" "$WEAPON_CROSSBOW" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "Crossbow" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_crossbow.mdl" + "model_view" "models/v_crossbow.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + // weapon specific + "def_fireInfo" "fireInfo_crossbow" + "inv_name" "Crossbow" + "clipSize" "5" + + "actFire" "4" + "actFireLast" "6" + "actHolster" "10" + "actHolsterEmpty" "11" + "actReload" "7" + "actDraw" "8" + "actDrawEmpty" "9" + "actIdle" "0,2" + "actIdleEmpty" "1,3" + + "snd_fire" "weapon_crossbow.fire" + "snd_empty" "weapon_crossbow.empty" + "snd_reload" "weapon_crossbow.reload" + + // HLWeapon specific + "hudSlot" "2" + "hudSlotPos" "2" + "weight" "10" + "zoomFov" "18" +} + +entityDef fireInfo_crossbow +{ + "def_onFire" "projectile_arrow" + "ammoType" "ammo_bolt" + "ammoRequired" "1" + "ammoPerShot" "1" + "fireRate" "1.0" + "punchAngle" "-2 0 0" +} + +entityDef debris_arrow +{ + "spawnclass" "NSProjectile" + "model" "models/crossbow_bolt.mdl" } entityDef projectile_arrow @@ -21,13 +62,17 @@ entityDef projectile_arrow "angular_velocity" "0 0 20" "mins" "0 0 0" "maxs" "0 0 0" - "def_damage" "damage_arrowDirect" + "def_damage" "damage_arrowDirect" "model_detonate" "fx_spark.main" - "snd_explode" "fx.spark" + "snd_explode" "fx.spark" "detonate_on_fuse" "0" "detonate_on_death" "1" "detonate_on_world" "1" "detonate_on_actor" "1" + "projectile_debris" "debris_arrow" + "debris_count" "1" + "debris_stick" "1" + "debris_offset" "-16 0 0" } entityDef damage_arrowDirect @@ -39,10 +84,10 @@ entityDef projectile_arrowExplosive { "inherit" "projectile_arrow" "smoke_fly" "weapon_crossbow.trail" - "def_damage" "" - "def_splash_damage" "damage_arrowSplash" + "def_damage" "" + "def_splash_damage" "damage_arrowSplash" "model_detonate" "fx_explosion.main" - "snd_explode" "fx.explosion" + "snd_explode" "fx.explosion" "decal_detonate" "ExplosionScorch" } @@ -50,4 +95,4 @@ entityDef damage_arrowSplash { "damage" "skill:plr_xbow_bolt_monster" "radius" "125" -} \ No newline at end of file +} diff --git a/zpak001.pk3dir/def/weapons/crowbar.def b/zpak001.pk3dir/def/weapons/crowbar.def index faab1d3..c6f5a69 100644 --- a/zpak001.pk3dir/def/weapons/crowbar.def +++ b/zpak001.pk3dir/def/weapons/crowbar.def @@ -1,14 +1,52 @@ entityDef weapon_crowbar { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "Crowbar" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_crowbar.mdl" - "inv_item" "$WEAPON_CROWBAR" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" -} \ No newline at end of file + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "Crowbar" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_crowbar.mdl" + "model_view" "models/v_crowbar.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + // weapon specific + "def_melee" "damage_crowbar" + "melee_distance" "32" + "inv_name" "Crowbar" + "clipSize" "6" + "ammoType" "" + "ammoRequired" "0" + "clipSize" "0" + "silent_fire" "1" + + "meleeRateMiss" "0.5" + "meleeRateHit" "0.25" + + "actIdle" "0" + "actDraw" "1" + "actHolster" "2" + "actMeleeMiss" "4,5,7" + "actMeleeHit" "3,6,8" + + // HLWeapon specific + "hudSlot" "0" + "hudSlotPos" "0" + "weight" "0" + "crosshair" "none" + "ammoIcon" "none" +} + +entityDef damage_crowbar +{ + "damage" "skill:plr_crowbar" +// "kickDir" "-1 0 0" +// "knockback" "20" +// "push" "20000" + "gib" "1" + + "snd_hit" "weapon_crowbar.hit" + "snd_miss" "weapon_crowbar.miss" +} diff --git a/zpak001.pk3dir/def/weapons/egon.def b/zpak001.pk3dir/def/weapons/egon.def index 847877f..2b3e567 100644 --- a/zpak001.pk3dir/def/weapons/egon.def +++ b/zpak001.pk3dir/def/weapons/egon.def @@ -1,14 +1,39 @@ +// gives 20 ammo entityDef weapon_egon { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "Gluon Gun" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_egon.mdl" - "inv_item" "$WEAPON_EGON" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" -} \ No newline at end of file + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "Gluon Gun" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_egon.mdl" + "model_view" "models/v_egon.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + "def_onFire" "projectile_egonbeam" + + "inv_ammo_uranium" "20" + "ammoType" "ammo_uranium" + "ammoRequired" "1" + "actIdle" "0,1" + "actDraw" "9" + "actFire" "7,8" + "actFireLoop" "7,8" + "actHolster" "10" + "fireRate" "0.2" + + "snd_fire" "weapon_egon.fire" + "snd_fire_loop" "weapon_egon.fire_loop" + "fx_trail" "weapon_egon.trail" + "fx_trail_world" "weapon_egon.trail_world" + + "joint_view_trail" "Gauss" + "joint_world_trail" "Gauss" + + // HLWeapon specific + "hudSlot" "3" + "hudSlotPos" "2" + "weight" "15" +} diff --git a/zpak001.pk3dir/def/weapons/gauss.def b/zpak001.pk3dir/def/weapons/gauss.def index 9b945e3..d21a89c 100644 --- a/zpak001.pk3dir/def/weapons/gauss.def +++ b/zpak001.pk3dir/def/weapons/gauss.def @@ -1,14 +1,66 @@ entityDef weapon_gauss { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "Tau Cannon" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_gauss.mdl" - "inv_item" "$WEAPON_GAUSS" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" -} \ No newline at end of file + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "Tau Cannon" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_gauss.mdl" + "model_view" "models/v_gauss.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + // weapon specific + "def_fireInfo" "fireInfo_gauss" + "def_altFireInfo" "fireInfo_gausscharge" + "inv_ammo_uranium" "20" + "ammoType" "ammo_uranium" + "ammoRequired" "1" + "actIdle" "0,1,2" + "actDraw" "8" + "actHolster" "7" + "actLoop" "4" + "powerAmmo" "1" + "snd_fire" "weapon_gauss.fire" + + // HLWeapon specific + "hudSlot" "3" + "hudSlotPos" "1" + "weight" "20" +} + +entityDef projectile_gauss +{ + "spawnclass" "HLGaussBeam" +} + + +entityDef projectile_gausscharge +{ + "spawnclass" "HLGaussBeam" + "charged" "1" +} + +entityDef fireInfo_gauss +{ + "def_onFire" "projectile_gauss" + "ammoPerShot" "2" + "fireRate" ".2" + "punchAngle" "-2 0 0" + "actFire" "5,6" + "model_flash" "sprites/muzzleflash2.spr" +} + +entityDef fireInfo_gausscharge +{ + "def_onRelease" "projectile_gausscharge" + "ammoPerShot" "5" + "fireRate" "2" + "punchAngle" "-2 0 0" + "model_flash" "sprites/muzzleflash2.spr" + "primed_fuse" "5" + "actRelease" "5,6" + "actFire" "3" +} diff --git a/zpak001.pk3dir/def/weapons/handgrenade.def b/zpak001.pk3dir/def/weapons/handgrenade.def index c6d86c1..3023346 100644 --- a/zpak001.pk3dir/def/weapons/handgrenade.def +++ b/zpak001.pk3dir/def/weapons/handgrenade.def @@ -1,16 +1,41 @@ + entityDef weapon_handgrenade { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "Hand Grenade" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_grenade.mdl" - "inv_item" "$WEAPON_HANDGRENADE" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "Hand Grenade" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_grenade.mdl" + "model_view" "models/v_grenade.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + "inv_name" "Hand Grenade" + "inv_weapon" "weapon_handgrenade" + "inv_ammo_handgrenade" "5" + "def_onRelease" "projectile_handgrenade" + "def_explode_inhand" "env_handgrenade_explodeinhand" + "def_damage_inhand" "damage_handgrenadeSplash" + "ammoType" "ammo_handgrenade" + "ammoRequired" "1" + "silent_fire" "1" + "primed_fuse" "4" + "removeOnEmpty" "1" + + "actIdle" "0,1" + "actDraw" "7" + "actHolster" "6" + "actFire" "2" + "actRelease" "3,4,5" + + // HLWeapon specific + "hudSlot" "4" + "hudSlotPos" "0" + "weight" "5" + "crosshair" "none" } entityDef projectile_handgrenade @@ -22,13 +47,14 @@ entityDef projectile_handgrenade "detonate_on_fuse" "1" "bounce" "1" "angular_velocity" "-350 0 0" + "velocity" "300 0 40" "model_detonate" "fx_explosion.main" - "snd_explode" "fx.explosion" + "snd_explode" "fx.explosion" "snd_bounce" "weapon_handgrenade.bounce" "decal_detonate" "ExplosionScorch" - "def_damage" "damage_handgrenadeDirect" - "def_splash_damage" "damage_handgrenadeSplash" + "def_damage" "damage_handgrenadeDirect" + "def_splash_damage" "damage_handgrenadeSplash" } entityDef damage_handgrenadeDirect @@ -40,4 +66,10 @@ entityDef damage_handgrenadeSplash { "damage" "skill:plr_hand_grenade" "radius" "250" -} \ No newline at end of file +} + +entityDef env_handgrenade_explodeinhand +{ + "spawnclass" "idAnimatedEntity" + "model" "grenadeExplosion.prt" +} diff --git a/zpak001.pk3dir/def/weapons/hornetgun.def b/zpak001.pk3dir/def/weapons/hornetgun.def index 395392e..5177c2a 100644 --- a/zpak001.pk3dir/def/weapons/hornetgun.def +++ b/zpak001.pk3dir/def/weapons/hornetgun.def @@ -1,14 +1,47 @@ entityDef weapon_hornetgun { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "Hornet Gun" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_hgun.mdl" - "inv_item" "$WEAPON_HORNETGUN" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" -} \ No newline at end of file + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "Hornet Gun" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_hgun.mdl" + "model_view" "models/v_hgun.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + // weapon specific + "def_fireInfo" "fireInfo_hornetgun" + "inv_name" "Hornet Gun" + "inv_ammo_hornet" "8" + + "actFire" "5" + "actHolster" "3" + "actDraw" "4" + "actIdle" "0,1,2" + + "snd_fire" "weapon_hornetgun.fire" + + // HLWeapon specific + "hudSlot" "3" + "hudSlotPos" "3" + "weight" "10" +} + +entityDef projectile_hornet +{ + "spawnclass" "NSProjectile" + "damage" "10" +} + +entityDef fireInfo_hornetgun +{ + "def_onFire" "projectile_hornet" + "ammoType" "ammo_hornet" + "ammoRequired" "1" + "ammoPerShot" "1" + "fireRate" "1.0" + "punchAngle" "-1 0 0" +} diff --git a/zpak001.pk3dir/def/weapons/rpg.def b/zpak001.pk3dir/def/weapons/rpg.def index 9bb11a8..67529da 100644 --- a/zpak001.pk3dir/def/weapons/rpg.def +++ b/zpak001.pk3dir/def/weapons/rpg.def @@ -1,16 +1,40 @@ entityDef weapon_rpg { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "Rocket Launcher" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_rpg.mdl" - "inv_item" "$WEAPON_RPG" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "Rocket Launcher" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_rpg.mdl" + "model_view" "models/v_rpg.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + "def_fireInfo" "fireInfo_rpg" + "def_altFireInfo" "fireInfo_rpg_homing" + "ammoType" "ammo_rocket" + "clipSize" "1" + "ammoRequired" "1" + "ammoPerShot" "1" + "inv_ammo_rocket" "1" + "fireRate" "2.5" + + "actIdle" "0,1" + "actIdleEmpty" "8,9" + "actHolster" "4" + "actHolsterEmpty" "6" + "actDraw" "5" + "actDrawEmpty" "7" + "actFire" "3" + "actReload" "2" + + // HLWeapon specific + "hudSlot" "3" + "hudSlotPos" "0" + "weight" "20" + "altLaser" "1" } entityDef projectile_rocket @@ -18,8 +42,8 @@ entityDef projectile_rocket "spawnclass" "NSProjectile" "model" "models/rpgrocket.mdl" - "def_damage" "damage_rocketDirect" - "def_splash_damage" "damage_rocketSplash" + "def_damage" "damage_rocketDirect" + "def_splash_damage" "damage_rocketSplash" "health" "0" "velocity" "250" @@ -39,15 +63,15 @@ entityDef projectile_rocket "smoke_fly" "weapon_rpg.trail" "decal_detonate" "ExplosionScorch" "model_detonate" "fx_explosion.main" - "light_color" "1 0.8 0.4" - "light_radius" "160" - "light_offset" "0 0 0" - - "explode_light_color" "2 1.6 0.8" - "explode_light_radius" "320" - "explode_light_fadetime" "0.5" + "light_color" "1 0.8 0.4" + "light_radius" "160" + "light_offset" "0 0 0" - "snd_explode" "fx.explosion" + "explode_light_color" "2 1.6 0.8" + "explode_light_radius" "320" + "explode_light_fadetime" "0.5" + + "snd_explode" "fx.explosion" } entityDef projectile_rocket_homing @@ -66,4 +90,14 @@ entityDef damage_rocketSplash { "damage" "skill:plr_rpg" "radius" "250" -} \ No newline at end of file +} + +entityDef fireInfo_rpg +{ + "def_onFire" "projectile_rocket" +} + +entityDef fireInfo_rpg_homing +{ + "def_onFire" "projectile_rocket_homing" +} diff --git a/zpak001.pk3dir/def/weapons/satchel.def b/zpak001.pk3dir/def/weapons/satchel.def index 6ea80ff..9aa356d 100644 --- a/zpak001.pk3dir/def/weapons/satchel.def +++ b/zpak001.pk3dir/def/weapons/satchel.def @@ -1,16 +1,34 @@ entityDef weapon_satchel { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "Satchel" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_satchel.mdl" - "inv_item" "$WEAPON_SATCHEL" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "Satchel" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_satchel.mdl" + "model_view" "models/v_satchel.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + "ammoType" "ammo_satchel" + "inv_ammo_satchel" "1" + "ammoRequired" "1" + "def_onFire" "projectile_satchel" + "detonateOnFire" "projectile_satchel" + "fireRate" "1.0" + "removeOnEmpty" "1" + + "actIdle" "0,1" + "actDraw" "2" + "actFire" "3" + + // HLWeapon specific + "hudSlot" "4" + "hudSlotPos" "1" + "weight" "-20" + "crosshair" "none" } entityDef projectile_satchel @@ -28,9 +46,9 @@ entityDef projectile_satchel "snd_bounce" "weapon_satchel.bounce" "inherit_velocity" "1" - "def_splash_damage" "damage_satchelExplosion" + "def_splash_damage" "damage_satchelExplosion" "model_detonate" "fx_explosion.main" - "snd_explode" "fx.explosion" + "snd_explode" "fx.explosion" "decal_detonate" "ExplosionScorch" } @@ -39,4 +57,4 @@ entityDef damage_satchelExplosion { "damage" "skill:plr_satchel" "radius" "375" -} \ No newline at end of file +} diff --git a/zpak001.pk3dir/def/weapons/shotgun.def b/zpak001.pk3dir/def/weapons/shotgun.def index 511e938..fd73ee4 100644 --- a/zpak001.pk3dir/def/weapons/shotgun.def +++ b/zpak001.pk3dir/def/weapons/shotgun.def @@ -1,14 +1,116 @@ entityDef weapon_shotgun { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "Shotgun" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_shotgun.mdl" - "inv_item" "$WEAPON_SHOTGUN" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" -} \ No newline at end of file + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "Shotgun" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_shotgun.mdl" + "model_view" "models/v_shotgun.mdl" + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + // weapon specific + "def_fireInfo" "fireInfo_shotgun" + "def_altFireInfo" "fireInfo_altShotgun" + "inv_name" "Shotgun" + "clipSize" "8" + "inv_ammo_buckshot" "4" + "ammoType" "ammo_buckshot" + "ammoRequired" "1" + + "actFire" "1" + "actHolster" "7" + "actReloadStart" "5" + "actReload" "3" + "actReloadEnd" "4" + "actDraw" "6" + "actIdle" "0,8,9" + + "snd_fire" "weapon_shotgun.single" + "snd_empty" "weapon_shotgun.empty" + + "snd_reload" "weapon_shotgun.reload" + "snd_reload_end" "weapon_shotgun.cock" + + // HLWeapon specific + "hudSlot" "2" + "hudSlotPos" "1" + "weight" "15" +} + +entityDef projectile_shotgun +{ + "inherit" "projectile_bullet_base" + "damage" "skill:plr_buckshot" + "hitscans" "12" + "spread" "0.08716 0.08716" +} + +entityDef projectile_shotgun_alt +{ + "inherit" "projectile_bullet_base" + "damage" "skill:plr_buckshot" + "hitscans" "24" + "spread" "0.08716 0.08716" +} + +entityDef fireInfo_shotgun +{ + "def_onFire" "projectile_shotgun" + "ammoPerShot" "1" + "fireRate" "0.75" + "model_flash" "sprites/muzzleflash2.spr" +} + +entityDef fireInfo_altShotgun +{ + "def_onFire" "projectile_shotgun_alt" + "ammoPerShot" "2" + "fireRate" "1.5" + "actFire" "2" + "snd_fire" "weapon_shotgun.double" + "model_flash" "sprites/muzzleflash2.spr" +} + +// multiplayer version +entityDef projectile_shotgun_mp +{ + "inherit" "projectile_bullet_base" + "damage" "skill:plr_buckshot" + "hitscans" "12" + "spread" "0.08716 0.04362" +} + +entityDef projectile_shotgun_alt_mp +{ + "inherit" "projectile_bullet_base" + "damage" "skill:plr_buckshot" + "hitscans" "24" + "spread" "0.17365 0.04362" +} + +entityDef fireInfo_shotgun_mp +{ + "def_onFire" "projectile_shotgun_mp" + "ammoPerShot" "1" + "fireRate" "1.25" + "model_flash" "sprites/muzzleflash2.spr" +} + +entityDef fireInfo_altShotgun_mp +{ + "def_onFire" "projectile_shotgun_alt_mp" + "ammoPerShot" "2" + "fireRate" "1.5" + "model_flash" "sprites/muzzleflash2.spr" +} + +entityDef weapon_shotgun_mp +{ + "inherit" "weapon_shotgun" + "def_fireInfo" "fireInfo_shotgun_mp" + "def_altFireInfo" "fireInfo_altShotgun_mp" +} diff --git a/zpak001.pk3dir/def/weapons/snark.def b/zpak001.pk3dir/def/weapons/snark.def index d98082d..cf2fdf8 100644 --- a/zpak001.pk3dir/def/weapons/snark.def +++ b/zpak001.pk3dir/def/weapons/snark.def @@ -1,15 +1,41 @@ entityDef weapon_snark { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "Snark" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/w_sqknest.mdl" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "Snark" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/w_sqknest.mdl" + "model_view" "models/v_squeak.mdl" "frame" "1" - "inv_item" "$WEAPON_SNARK" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" -} \ No newline at end of file + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + + "inv_name" "Snark" + "inv_weapon" "weapon_snark" + "inv_ammo_snark" "5" + "def_onFire" "projectile_snark" + "ammoType" "ammo_snark" + "ammoRequired" "1" + "silent_fire" "1" + "primed_fuse" "4" + + "actIdle" "0,1,2" + "actDraw" "4" + "actHolster" "3" + "actThrow" "5" + "removeOnEmpty" "1" + + // HLWeapon specific + "hudSlot" "4" + "hudSlotPos" "3" + "weight" "5" + "crosshair" "none" +} + +entityDef projectile_snark +{ + "spawnclass" "monster_snark" +} diff --git a/zpak001.pk3dir/def/weapons/tripmine.def b/zpak001.pk3dir/def/weapons/tripmine.def index b13bf48..c0df4da 100644 --- a/zpak001.pk3dir/def/weapons/tripmine.def +++ b/zpak001.pk3dir/def/weapons/tripmine.def @@ -1,17 +1,33 @@ entityDef weapon_tripmine { - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_usage" "Tripmine" - "editor_rotatable" "1" - - "spawnclass" "NSItem" - "model" "models/v_tripmine.mdl" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_usage" "Tripmine" + "editor_rotatable" "1" + + "spawnclass" "HLWeapon" + "model" "models/v_tripmine.mdl" + "model_view" "models/v_tripmine.mdl" "body0" "2" "body1" "2" "frame" "8" - "inv_item" "$WEAPON_TRIPMINE" - "snd_acquire" "weapon.pickup" - "snd_respawn" "item.respawn" -} \ No newline at end of file + "snd_acquire" "weapon.pickup" + "snd_respawn" "item.respawn" + "def_plant" "monster_tripmine" + + "inv_ammo_tripmine" "1" + "ammoType" "ammo_tripmine" + "ammoRequired" "1" + "actIdle" "0,1,4" + "actFire" "2,3" + "actDraw" "6" + "actHolster" "5" + "removeOnEmpty" "1" + + // HLWeapon specific + "hudSlot" "4" + "hudSlotPos" "2" + "weight" "-10" + "crosshair" "none" +} diff --git a/zpak001.pk3dir/default.cfg b/zpak001.pk3dir/default.cfg index 760d7a6..ef99285 100644 --- a/zpak001.pk3dir/default.cfg +++ b/zpak001.pk3dir/default.cfg @@ -1,54 +1,50 @@ -// Generic Binds -bind "ESC" "togglemenu" -bind "w" "+forward" -bind "s" "+back" -bind "a" "+moveleft" -bind "d" "+moveright" -bind "SPACE" "+jump" -bind "CTRL" "+duck" -bind "SHIFT" "+speed" -bind "0" "slot10" -bind "1" "slot1" -bind "2" "slot2" -bind "3" "slot3" -bind "4" "slot4" -bind "5" "slot5" -bind "6" "slot6" -bind "7" "slot7" -bind "8" "slot8" -bind "9" "slot9" -bind "UPARROW" "+forward" -bind "DOWNARROW" "+back" -bind "LEFTARROW" "+left" -bind "RIGHTARROW" "+right" -bind "MOUSE1" "+attack" -bind "MOUSE2" "+attack2" -bind "MWHEELDOWN" "invnext" -bind "MWHEELUP" "invprev" -bind "r" "+reload" -bind "e" "+use" -bind "TAB" "+showscores" -bind "y" "messagemode" -bind "u" "messagemode2" -bind "t" "impulse 201" -bind "f" "impulse 100" -bind "f1" "vote yes" -bind "f2" "vote no" - -// Game Variables -seta "hostname" "FreeHL Server" -seta "maxplayers" "8" - -// 2D/HUD Variables -seta "con_color" "255 150 0" -seta "vgui_color" "255 170 0" -seta "cross_color" "0 255 0" - -// disable some nuclide niceties -seta cg_muzzleDLight 0 - -// video settings -seta gl_overbright 0 -seta gl_ldr 1 -seta r_lightmap_format rgb8 -seta rate 30000 // some HL configs set this to 2500 by default! +unbindall +bind CTRL "+duck" +bind DOWNARROW "+back" +bind ESCAPE "togglemenu" +bind F1 "vote yes" +bind F2 "vote no" +bind LEFTARROW "+left" +bind MOUSE1 "+attack" +bind MOUSE2 "+attack2" +bind MWHEELDOWN "invnext" +bind MWHEELUP "invprev" +bind RIGHTARROW "+right" +bind SHIFT "+speed" +bind SPACE "+jump" +bind TAB "+showscores" +bind UPARROW "+forward" +bind 0 "slot10" +bind 1 "slot1" +bind 2 "slot2" +bind 3 "slot3" +bind 4 "slot4" +bind 5 "slot5" +bind 6 "slot6" +bind 7 "slot7" +bind 8 "slot8" +bind 9 "slot9" +bind ` "toggleconsole" +bind a "+moveleft" +bind d "+moveright" +bind e "+use" +bind f "impulse 100" +bind r "+reload" +bind s "+back" +bind t "impulse 201" +bind u "messagemode2" +bind w "+forward" +bind y "messagemode" +bind ~ "toggleconsole" +seta cg_muzzleDLight "0" +seta con_color "255 150 0" +seta cross_color "0 255 0" +seta gl_ldr "1 " +seta gl_overbright "0 " +seta hostname "FreeHL Server" +seta maxplayers "8" +seta r_lightmap_format "rgb8 " +seta rate "30000" +seta vgui_color "255 170 0" + +exec cvar_defaults.cfg \ No newline at end of file diff --git a/zpak001.pk3dir/efx/gs_big1.efx b/zpak001.pk3dir/efx/gs_big1.efx new file mode 100644 index 0000000..58e10b8 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_big1.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "0.500000" +gain "0.316200" +gain_hf "0.398100" +gain_lf "1.000000" +decay_time "1.490000" +decay_hf_ratio "0.670000" +decay_lf_ratio "1.000000" +reflection_gain "0.073000" +reflection_delay "0.007000" +reflection_pan "0 0 0" +late_reverb_gain "0.142700" +late_reverb_delay "0.011000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_big2.efx b/zpak001.pk3dir/efx/gs_big2.efx new file mode 100644 index 0000000..5395d3c --- /dev/null +++ b/zpak001.pk3dir/efx/gs_big2.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "0.780000" +gain "0.316200" +gain_hf "0.707900" +gain_lf "0.891300" +decay_time "1.790000" +decay_hf_ratio "1.120000" +decay_lf_ratio "0.910000" +reflection_gain "0.281800" +reflection_delay "0.046000" +reflection_pan "0 0 0" +late_reverb_gain "0.199500" +late_reverb_delay "0.028000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.200000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_big3.efx b/zpak001.pk3dir/efx/gs_big3.efx new file mode 100644 index 0000000..99361b3 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_big3.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "1.000000" +gain "0.316200" +gain_hf "0.562300" +gain_lf "1.000000" +decay_time "3.920000" +decay_hf_ratio "0.700000" +decay_lf_ratio "1.000000" +reflection_gain "0.242700" +reflection_delay "0.020000" +reflection_pan "0 0 0" +late_reverb_gain "0.997700" +late_reverb_delay "0.029000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_bright_l.efx b/zpak001.pk3dir/efx/gs_bright_l.efx new file mode 100644 index 0000000..889ec45 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_bright_l.efx @@ -0,0 +1,23 @@ +density "0.364500" +diffusion "0.560000" +gain "0.316200" +gain_hf "0.794300" +gain_lf "0.707900" +decay_time "1.790000" +decay_hf_ratio "0.380000" +decay_lf_ratio "0.210000" +reflection_gain "0.501200" +reflection_delay "0.002000" +reflection_pan "0 0 0" +late_reverb_gain "1.258900" +late_reverb_delay "0.006000" +late_reverb_pan "0 0 0" +echo_time "0.202000" +echo_depth "0.050000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.988600" +hf_reference "13046.000000" +lf_reference "163.300003" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_bright_m.efx b/zpak001.pk3dir/efx/gs_bright_m.efx new file mode 100644 index 0000000..1dfb46f --- /dev/null +++ b/zpak001.pk3dir/efx/gs_bright_m.efx @@ -0,0 +1,23 @@ +density "0.976600" +diffusion "1.000000" +gain "0.316200" +gain_hf "0.001000" +gain_lf "1.000000" +decay_time "0.500000" +decay_hf_ratio "0.100000" +decay_lf_ratio "1.000000" +reflection_gain "0.205100" +reflection_delay "0.003000" +reflection_pan "0 0 0" +late_reverb_gain "0.280500" +late_reverb_delay "0.004000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_bright_s.efx b/zpak001.pk3dir/efx/gs_bright_s.efx new file mode 100644 index 0000000..28207e2 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_bright_s.efx @@ -0,0 +1,23 @@ +density "0.171500" +diffusion "1.000000" +gain "0.316200" +gain_hf "0.001000" +gain_lf "1.000000" +decay_time "0.170000" +decay_hf_ratio "0.100000" +decay_lf_ratio "1.000000" +reflection_gain "0.250000" +reflection_delay "0.001000" +reflection_pan "0 0 0" +late_reverb_gain "1.269100" +late_reverb_delay "0.002000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_cavern_l.efx b/zpak001.pk3dir/efx/gs_cavern_l.efx new file mode 100644 index 0000000..8e2841b --- /dev/null +++ b/zpak001.pk3dir/efx/gs_cavern_l.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "1.000000" +gain "0.316200" +gain_hf "1.000000" +gain_lf "1.000000" +decay_time "2.910000" +decay_hf_ratio "1.300000" +decay_lf_ratio "1.000000" +reflection_gain "0.500000" +reflection_delay "0.015000" +reflection_pan "0 0 0" +late_reverb_gain "0.706300" +late_reverb_delay "0.022000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "0" diff --git a/zpak001.pk3dir/efx/gs_cavern_m.efx b/zpak001.pk3dir/efx/gs_cavern_m.efx new file mode 100644 index 0000000..8e2841b --- /dev/null +++ b/zpak001.pk3dir/efx/gs_cavern_m.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "1.000000" +gain "0.316200" +gain_hf "1.000000" +gain_lf "1.000000" +decay_time "2.910000" +decay_hf_ratio "1.300000" +decay_lf_ratio "1.000000" +reflection_gain "0.500000" +reflection_delay "0.015000" +reflection_pan "0 0 0" +late_reverb_gain "0.706300" +late_reverb_delay "0.022000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "0" diff --git a/zpak001.pk3dir/efx/gs_cavern_s.efx b/zpak001.pk3dir/efx/gs_cavern_s.efx new file mode 100644 index 0000000..8e2841b --- /dev/null +++ b/zpak001.pk3dir/efx/gs_cavern_s.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "1.000000" +gain "0.316200" +gain_hf "1.000000" +gain_lf "1.000000" +decay_time "2.910000" +decay_hf_ratio "1.300000" +decay_lf_ratio "1.000000" +reflection_gain "0.500000" +reflection_delay "0.015000" +reflection_pan "0 0 0" +late_reverb_gain "0.706300" +late_reverb_delay "0.022000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "0" diff --git a/zpak001.pk3dir/efx/gs_chamber_l.efx b/zpak001.pk3dir/efx/gs_chamber_l.efx new file mode 100644 index 0000000..6bbaca9 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_chamber_l.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "1.000000" +gain "0.316200" +gain_hf "0.447700" +gain_lf "1.000000" +decay_time "7.240000" +decay_hf_ratio "0.330000" +decay_lf_ratio "1.000000" +reflection_gain "0.261200" +reflection_delay "0.020000" +reflection_pan "0 0 0" +late_reverb_gain "1.018600" +late_reverb_delay "0.030000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_chamber_m.efx b/zpak001.pk3dir/efx/gs_chamber_m.efx new file mode 100644 index 0000000..99361b3 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_chamber_m.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "1.000000" +gain "0.316200" +gain_hf "0.562300" +gain_lf "1.000000" +decay_time "3.920000" +decay_hf_ratio "0.700000" +decay_lf_ratio "1.000000" +reflection_gain "0.242700" +reflection_delay "0.020000" +reflection_pan "0 0 0" +late_reverb_gain "0.997700" +late_reverb_delay "0.029000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_chamber_s.efx b/zpak001.pk3dir/efx/gs_chamber_s.efx new file mode 100644 index 0000000..bdd733f --- /dev/null +++ b/zpak001.pk3dir/efx/gs_chamber_s.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "1.000000" +gain "0.316200" +gain_hf "0.578100" +gain_lf "1.000000" +decay_time "4.320000" +decay_hf_ratio "0.590000" +decay_lf_ratio "1.000000" +reflection_gain "0.403200" +reflection_delay "0.020000" +reflection_pan "0 0 0" +late_reverb_gain "0.717000" +late_reverb_delay "0.030000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_concrete_l.efx b/zpak001.pk3dir/efx/gs_concrete_l.efx new file mode 100644 index 0000000..f64f702 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_concrete_l.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "1.000000" +gain "0.316200" +gain_hf "0.316200" +gain_lf "1.000000" +decay_time "1.490000" +decay_hf_ratio "0.830000" +decay_lf_ratio "1.000000" +reflection_gain "0.000000" +reflection_delay "0.061000" +reflection_pan "0 0 0" +late_reverb_gain "1.778300" +late_reverb_delay "0.025000" +late_reverb_pan "0 0 0" +echo_time "0.125000" +echo_depth "0.700000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_concrete_m.efx b/zpak001.pk3dir/efx/gs_concrete_m.efx new file mode 100644 index 0000000..840e736 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_concrete_m.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "1.000000" +gain "0.316200" +gain_hf "1.000000" +gain_lf "1.000000" +decay_time "1.650000" +decay_hf_ratio "1.500000" +decay_lf_ratio "1.000000" +reflection_gain "0.208200" +reflection_delay "0.008000" +reflection_pan "0 0 0" +late_reverb_gain "0.265200" +late_reverb_delay "0.012000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "0" diff --git a/zpak001.pk3dir/efx/gs_concrete_s.efx b/zpak001.pk3dir/efx/gs_concrete_s.efx new file mode 100644 index 0000000..1a5eab6 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_concrete_s.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "1.000000" +gain "0.316200" +gain_hf "0.761200" +gain_lf "1.000000" +decay_time "2.700000" +decay_hf_ratio "0.790000" +decay_lf_ratio "1.000000" +reflection_gain "0.247200" +reflection_delay "0.013000" +reflection_pan "0 0 0" +late_reverb_gain "1.575800" +late_reverb_delay "0.020000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_generic.efx b/zpak001.pk3dir/efx/gs_generic.efx new file mode 100644 index 0000000..e69de29 diff --git a/zpak001.pk3dir/efx/gs_metal_l.efx b/zpak001.pk3dir/efx/gs_metal_l.efx new file mode 100644 index 0000000..8eb998a --- /dev/null +++ b/zpak001.pk3dir/efx/gs_metal_l.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "0.740000" +gain "0.316200" +gain_hf "0.707900" +gain_lf "0.891300" +decay_time "3.010000" +decay_hf_ratio "1.230000" +decay_lf_ratio "0.910000" +reflection_gain "0.707900" +reflection_delay "0.046000" +reflection_pan "0 0 0" +late_reverb_gain "1.258900" +late_reverb_delay "0.028000" +late_reverb_pan "0 0 0" +echo_time "0.125000" +echo_depth "0.210000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_metal_m.efx b/zpak001.pk3dir/efx/gs_metal_m.efx new file mode 100644 index 0000000..54e0a93 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_metal_m.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "0.700000" +gain "0.316200" +gain_hf "0.447700" +gain_lf "1.000000" +decay_time "1.510000" +decay_hf_ratio "1.250000" +decay_lf_ratio "1.140000" +reflection_gain "0.891300" +reflection_delay "0.020000" +reflection_pan "0 0 0" +late_reverb_gain "1.412500" +late_reverb_delay "0.030000" +late_reverb_pan "0 0 0" +echo_time "0.179000" +echo_depth "0.150000" +modulation_time "0.895000" +modulation_depth "0.190000" +air_absorbtion_hf "0.992000" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "0" diff --git a/zpak001.pk3dir/efx/gs_metal_s.efx b/zpak001.pk3dir/efx/gs_metal_s.efx new file mode 100644 index 0000000..54e0a93 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_metal_s.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "0.700000" +gain "0.316200" +gain_hf "0.447700" +gain_lf "1.000000" +decay_time "1.510000" +decay_hf_ratio "1.250000" +decay_lf_ratio "1.140000" +reflection_gain "0.891300" +reflection_delay "0.020000" +reflection_pan "0 0 0" +late_reverb_gain "1.412500" +late_reverb_delay "0.030000" +late_reverb_pan "0 0 0" +echo_time "0.179000" +echo_depth "0.150000" +modulation_time "0.895000" +modulation_depth "0.190000" +air_absorbtion_hf "0.992000" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "0" diff --git a/zpak001.pk3dir/efx/gs_tunnel_l.efx b/zpak001.pk3dir/efx/gs_tunnel_l.efx new file mode 100644 index 0000000..6190c37 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_tunnel_l.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "0.820000" +gain "0.316200" +gain_hf "0.446700" +gain_lf "0.891300" +decay_time "3.570000" +decay_hf_ratio "1.120000" +decay_lf_ratio "0.910000" +reflection_gain "0.398100" +reflection_delay "0.059000" +reflection_pan "0 0 0" +late_reverb_gain "0.891300" +late_reverb_delay "0.037000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.140000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.992000" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_tunnel_m.efx b/zpak001.pk3dir/efx/gs_tunnel_m.efx new file mode 100644 index 0000000..cdec16a --- /dev/null +++ b/zpak001.pk3dir/efx/gs_tunnel_m.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "0.300000" +gain "0.316200" +gain_hf "0.732800" +gain_lf "1.000000" +decay_time "1.490000" +decay_hf_ratio "0.860000" +decay_lf_ratio "1.000000" +reflection_gain "0.250000" +reflection_delay "0.007000" +reflection_pan "0 0 0" +late_reverb_gain "0.995400" +late_reverb_delay "0.011000" +late_reverb_pan "0 0 0" +echo_time "0.125000" +echo_depth "0.950000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_tunnel_s.efx b/zpak001.pk3dir/efx/gs_tunnel_s.efx new file mode 100644 index 0000000..e01cf71 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_tunnel_s.efx @@ -0,0 +1,23 @@ +density "1.000000" +diffusion "0.690000" +gain "0.316200" +gain_hf "0.794300" +gain_lf "0.891300" +decay_time "3.280000" +decay_hf_ratio "1.170000" +decay_lf_ratio "0.910000" +reflection_gain "0.446700" +reflection_delay "0.044000" +reflection_pan "0 0 0" +late_reverb_gain "0.281800" +late_reverb_delay "0.024000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.200000" +modulation_time "0.250000" +modulation_depth "0.000000" +air_absorbtion_hf "0.996600" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_water1.efx b/zpak001.pk3dir/efx/gs_water1.efx new file mode 100644 index 0000000..d91c613 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_water1.efx @@ -0,0 +1,23 @@ +density "0.25" +diffusion "1.000000" +gain "0.316200" +gain_hf "0.010000" +gain_lf "1.000000" +decay_time "1.490000" +decay_hf_ratio "0.100000" +decay_lf_ratio "1.000000" +reflection_gain "0.596300" +reflection_delay "0.007000" +reflection_pan "0 0 0" +late_reverb_gain "7.079500" +late_reverb_delay "0.011000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "1.180000" +modulation_depth "0.348000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_water2.efx b/zpak001.pk3dir/efx/gs_water2.efx new file mode 100644 index 0000000..95bfa65 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_water2.efx @@ -0,0 +1,23 @@ +density "0.5" +diffusion "1.000000" +gain "0.316200" +gain_hf "0.010000" +gain_lf "1.000000" +decay_time "1.490000" +decay_hf_ratio "0.100000" +decay_lf_ratio "1.000000" +reflection_gain "0.596300" +reflection_delay "0.007000" +reflection_pan "0 0 0" +late_reverb_gain "7.079500" +late_reverb_delay "0.011000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "1.180000" +modulation_depth "0.348000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_water3.efx b/zpak001.pk3dir/efx/gs_water3.efx new file mode 100644 index 0000000..cfe3ae0 --- /dev/null +++ b/zpak001.pk3dir/efx/gs_water3.efx @@ -0,0 +1,23 @@ +density "1.0" +diffusion "1.000000" +gain "0.316200" +gain_hf "0.010000" +gain_lf "1.000000" +decay_time "1.490000" +decay_hf_ratio "0.100000" +decay_lf_ratio "1.000000" +reflection_gain "0.596300" +reflection_delay "0.007000" +reflection_pan "0 0 0" +late_reverb_gain "7.079500" +late_reverb_delay "0.011000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "1.180000" +modulation_depth "0.348000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "1" diff --git a/zpak001.pk3dir/efx/gs_weirdo1.efx b/zpak001.pk3dir/efx/gs_weirdo1.efx new file mode 100644 index 0000000..63c677e --- /dev/null +++ b/zpak001.pk3dir/efx/gs_weirdo1.efx @@ -0,0 +1,23 @@ +density "0.364500" +diffusion "0.600000" +gain "0.316200" +gain_hf "0.631000" +gain_lf "1.000000" +decay_time "17.230000" +decay_hf_ratio "0.560000" +decay_lf_ratio "1.000000" +reflection_gain "0.139200" +reflection_delay "0.020000" +reflection_pan "0 0 0" +late_reverb_gain "0.493700" +late_reverb_delay "0.030000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "1.000000" +modulation_time "0.810000" +modulation_depth "0.310000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "0" diff --git a/zpak001.pk3dir/efx/gs_weirdo2.efx b/zpak001.pk3dir/efx/gs_weirdo2.efx new file mode 100644 index 0000000..ddda80c --- /dev/null +++ b/zpak001.pk3dir/efx/gs_weirdo2.efx @@ -0,0 +1,23 @@ +density "0.428700" +diffusion "0.500000" +gain "0.316200" +gain_hf "1.000000" +gain_lf "1.000000" +decay_time "8.390000" +decay_hf_ratio "1.390000" +decay_lf_ratio "1.000000" +reflection_gain "0.876000" +reflection_delay "0.002000" +reflection_pan "0 0 0" +late_reverb_gain "3.108100" +late_reverb_delay "0.030000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "0.250000" +modulation_depth "1.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "0" diff --git a/zpak001.pk3dir/efx/gs_weirdo3.efx b/zpak001.pk3dir/efx/gs_weirdo3.efx new file mode 100644 index 0000000..a704d6e --- /dev/null +++ b/zpak001.pk3dir/efx/gs_weirdo3.efx @@ -0,0 +1,23 @@ +density "0.062500" +diffusion "0.500000" +gain "0.316200" +gain_hf "0.840400" +gain_lf "1.000000" +decay_time "7.560000" +decay_hf_ratio "0.910000" +decay_lf_ratio "1.000000" +reflection_gain "0.486400" +reflection_delay "0.020000" +reflection_pan "0 0 0" +late_reverb_gain "2.437800" +late_reverb_delay "0.030000" +late_reverb_pan "0 0 0" +echo_time "0.250000" +echo_depth "0.000000" +modulation_time "4.000000" +modulation_depth "1.000000" +air_absorbtion_hf "0.994300" +hf_reference "5000.000000" +lf_reference "250.000000" +room_rolloff_factor "0.000000" +decay_limit "0" diff --git a/zpak001.pk3dir/eukara.cfg b/zpak001.pk3dir/eukara.cfg new file mode 100644 index 0000000..42f5c41 --- /dev/null +++ b/zpak001.pk3dir/eukara.cfg @@ -0,0 +1,84 @@ +unbindall +bind TAB "+showscores" +bind ESCAPE "togglemenu" +bind SPACE "+gostand" +bind CTRL "+duck" +bind MOUSE1 "+attack" +bind MOUSE2 "+attack2" +bind MWHEELDOWN "invnext" +bind MWHEELUP "invprev" +bind SHIFT "+sprint" +bind F1 "toggle r_speeds 0 2" +bind F2 "toggle show_fps 0 2" +bind F3 "toggle r_netgraph 0 1" +bind F4 "toggle r_showfields 0 1" +bind F5 "toggle r_showshaders 0 1" +bind F6 "toggle r_skipDiffuse" +bind F7 "toggle r_skipNormal" +bind F8 "toggle r_skipSpecular" +bind F9 "toggle r_skipLightmap" +bind F10 "toggle r_skipEnvmap" +bind F11 "toggle r_skipDetail" +bind F12 "toggle r_skipFullbright" +bind ` "toggleconsole" +bind a "+moveleft" +bind c "gocrouch" +bind d "+moveright" +bind e "+leanright" +bind f "+use" +bind n "vote no" +bind p "testPointLight" +bind q "+leanleft" +bind r "+reload" +bind s "+back" +bind t "messagemode" +bind u "messagemode2" +bind v "impulse 100" +bind w "+forward" +bind x "goprone" +bind y "vote yes" +bind z "toggle sv_gamespeed 0.5 1" +seta brightness "0" +seta cl_chatmode "2" +seta con_stayhidden "0" +seta con_textfont "fonts/Share-TechMono.otf?col=1,1,1" +seta con_textsize "14" +seta con_timestamps "0" +seta contrast "1" +seta fov "90" +seta gamma "1" +seta gl_conback "gfx/devcon" +seta gl_ldr "0" +seta gl_lerpimages "0" +seta gl_nohwblend "1" +seta gl_overbright "2" +seta gl_specular "1" +seta name "^6e^5u^4k^2a^1r^2a" +seta r_autoscale "0" +seta r_clear "1" +seta r_clearcolour "0.1 0.2 0.231" +seta r_lightmap_format "rgb9e5" +seta r_shadow_realtime_dlight "1" +seta r_shadow_realtime_world "1" +seta r_shadow_realtime_world_lightmaps "0.5" +seta r_shadows "0" +seta rate "30000" +seta s_al_use_reverb "1" +seta s_bits "16" +seta s_volume "0.5" +seta scr_conalpha "0.5" +seta scr_conspeed "1000" +seta scr_fov_mode "4" +seta sensitivity "2.5" +seta vid_conautoscale "0" +seta vid_conwidth "640" +seta vid_conheight "480" +seta vid_desktopgamma "0" +seta vid_fullscreen "0" +seta vid_hardwaregamma "2" +seta vid_height "864" +seta vid_preservegamma "0" +seta vid_renderer "gl" +seta vid_srgb "1" +seta vid_vsync "0" +seta vid_width "1152" diff --git a/zpak001.pk3dir/fonts/OFL.txt b/zpak001.pk3dir/fonts/OFL.txt new file mode 100644 index 0000000..19602f9 --- /dev/null +++ b/zpak001.pk3dir/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2016 The Saira Project Authors (omnibus.type@gmail.com), with reserved font name "Saira". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/zpak001.pk3dir/fonts/README.txt b/zpak001.pk3dir/fonts/README.txt new file mode 100644 index 0000000..c79b7e9 --- /dev/null +++ b/zpak001.pk3dir/fonts/README.txt @@ -0,0 +1,81 @@ +Roboto Condensed Variable Font +============================== + +This download contains Roboto Condensed as both variable fonts and static fonts. + +Roboto Condensed is a variable font with this axis: + wght + +This means all the styles are contained in these files: + RobotoCondensed-VariableFont_wght.ttf + RobotoCondensed-Italic-VariableFont_wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Roboto Condensed: + static/RobotoCondensed-Thin.ttf + static/RobotoCondensed-ExtraLight.ttf + static/RobotoCondensed-Light.ttf + static/RobotoCondensed-Regular.ttf + static/RobotoCondensed-Medium.ttf + static/RobotoCondensed-SemiBold.ttf + static/RobotoCondensed-Bold.ttf + static/RobotoCondensed-ExtraBold.ttf + static/RobotoCondensed-Black.ttf + static/RobotoCondensed-ThinItalic.ttf + static/RobotoCondensed-ExtraLightItalic.ttf + static/RobotoCondensed-LightItalic.ttf + static/RobotoCondensed-Italic.ttf + static/RobotoCondensed-MediumItalic.ttf + static/RobotoCondensed-SemiBoldItalic.ttf + static/RobotoCondensed-BoldItalic.ttf + static/RobotoCondensed-ExtraBoldItalic.ttf + static/RobotoCondensed-BlackItalic.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/zpak001.pk3dir/fonts/RobotoCondensed-Italic-VariableFont_wght.ttf b/zpak001.pk3dir/fonts/RobotoCondensed-Italic-VariableFont_wght.ttf new file mode 100644 index 0000000..52748d6 Binary files /dev/null and b/zpak001.pk3dir/fonts/RobotoCondensed-Italic-VariableFont_wght.ttf differ diff --git a/zpak001.pk3dir/fonts/RobotoCondensed-Medium.ttf b/zpak001.pk3dir/fonts/RobotoCondensed-Medium.ttf new file mode 100644 index 0000000..4dfbac9 Binary files /dev/null and b/zpak001.pk3dir/fonts/RobotoCondensed-Medium.ttf differ diff --git a/zpak001.pk3dir/fonts/RobotoCondensed-Regular.ttf b/zpak001.pk3dir/fonts/RobotoCondensed-Regular.ttf new file mode 100644 index 0000000..74f029c Binary files /dev/null and b/zpak001.pk3dir/fonts/RobotoCondensed-Regular.ttf differ diff --git a/zpak001.pk3dir/fonts/RobotoCondensed-VariableFont_wght.ttf b/zpak001.pk3dir/fonts/RobotoCondensed-VariableFont_wght.ttf new file mode 100644 index 0000000..a5f645b Binary files /dev/null and b/zpak001.pk3dir/fonts/RobotoCondensed-VariableFont_wght.ttf differ diff --git a/zpak001.pk3dir/fonts/Roboto_Condensed.zip b/zpak001.pk3dir/fonts/Roboto_Condensed.zip new file mode 100644 index 0000000..e8c5372 Binary files /dev/null and b/zpak001.pk3dir/fonts/Roboto_Condensed.zip differ diff --git a/zpak001.pk3dir/fonts/SairaCondensed-Black.ttf b/zpak001.pk3dir/fonts/SairaCondensed-Black.ttf new file mode 100644 index 0000000..21d0c17 Binary files /dev/null and b/zpak001.pk3dir/fonts/SairaCondensed-Black.ttf differ diff --git a/zpak001.pk3dir/fonts/SairaCondensed-Bold.ttf b/zpak001.pk3dir/fonts/SairaCondensed-Bold.ttf new file mode 100644 index 0000000..ab6365e Binary files /dev/null and b/zpak001.pk3dir/fonts/SairaCondensed-Bold.ttf differ diff --git a/zpak001.pk3dir/fonts/SairaCondensed-ExtraBold.ttf b/zpak001.pk3dir/fonts/SairaCondensed-ExtraBold.ttf new file mode 100644 index 0000000..c252dd1 Binary files /dev/null and b/zpak001.pk3dir/fonts/SairaCondensed-ExtraBold.ttf differ diff --git a/zpak001.pk3dir/fonts/SairaCondensed-ExtraLight.ttf b/zpak001.pk3dir/fonts/SairaCondensed-ExtraLight.ttf new file mode 100644 index 0000000..9b4954d Binary files /dev/null and b/zpak001.pk3dir/fonts/SairaCondensed-ExtraLight.ttf differ diff --git a/zpak001.pk3dir/fonts/SairaCondensed-Light.ttf b/zpak001.pk3dir/fonts/SairaCondensed-Light.ttf new file mode 100644 index 0000000..1f4c93a Binary files /dev/null and b/zpak001.pk3dir/fonts/SairaCondensed-Light.ttf differ diff --git a/zpak001.pk3dir/fonts/SairaCondensed-Medium.ttf b/zpak001.pk3dir/fonts/SairaCondensed-Medium.ttf new file mode 100644 index 0000000..17d1dcd Binary files /dev/null and b/zpak001.pk3dir/fonts/SairaCondensed-Medium.ttf differ diff --git a/zpak001.pk3dir/fonts/SairaCondensed-Regular.ttf b/zpak001.pk3dir/fonts/SairaCondensed-Regular.ttf new file mode 100644 index 0000000..4bf8386 Binary files /dev/null and b/zpak001.pk3dir/fonts/SairaCondensed-Regular.ttf differ diff --git a/zpak001.pk3dir/fonts/SairaCondensed-SemiBold.ttf b/zpak001.pk3dir/fonts/SairaCondensed-SemiBold.ttf new file mode 100644 index 0000000..1ad5a05 Binary files /dev/null and b/zpak001.pk3dir/fonts/SairaCondensed-SemiBold.ttf differ diff --git a/zpak001.pk3dir/fonts/SairaCondensed-Thin.ttf b/zpak001.pk3dir/fonts/SairaCondensed-Thin.ttf new file mode 100644 index 0000000..579049b Binary files /dev/null and b/zpak001.pk3dir/fonts/SairaCondensed-Thin.ttf differ diff --git a/zpak001.pk3dir/fonts/Saira_Condensed.zip b/zpak001.pk3dir/fonts/Saira_Condensed.zip new file mode 100644 index 0000000..4b419c4 Binary files /dev/null and b/zpak001.pk3dir/fonts/Saira_Condensed.zip differ diff --git a/zpak001.pk3dir/fonts/Share-TechMono.otf b/zpak001.pk3dir/fonts/Share-TechMono.otf new file mode 100644 index 0000000..59bc4a6 Binary files /dev/null and b/zpak001.pk3dir/fonts/Share-TechMono.otf differ diff --git a/zpak001.pk3dir/fonts/Share-TechMono.ttf b/zpak001.pk3dir/fonts/Share-TechMono.ttf new file mode 100644 index 0000000..a52e26a Binary files /dev/null and b/zpak001.pk3dir/fonts/Share-TechMono.ttf differ diff --git a/zpak001.pk3dir/fonts/Unispace Bd It.otf b/zpak001.pk3dir/fonts/Unispace Bd It.otf new file mode 100644 index 0000000..4747c41 Binary files /dev/null and b/zpak001.pk3dir/fonts/Unispace Bd It.otf differ diff --git a/zpak001.pk3dir/fonts/Unispace Bd.otf b/zpak001.pk3dir/fonts/Unispace Bd.otf new file mode 100644 index 0000000..6aa6e57 Binary files /dev/null and b/zpak001.pk3dir/fonts/Unispace Bd.otf differ diff --git a/zpak001.pk3dir/fonts/Unispace It.otf b/zpak001.pk3dir/fonts/Unispace It.otf new file mode 100644 index 0000000..ce0fa17 Binary files /dev/null and b/zpak001.pk3dir/fonts/Unispace It.otf differ diff --git a/zpak001.pk3dir/fonts/Unispace Rg.otf b/zpak001.pk3dir/fonts/Unispace Rg.otf new file mode 100644 index 0000000..f7c0fec Binary files /dev/null and b/zpak001.pk3dir/fonts/Unispace Rg.otf differ diff --git a/zpak001.pk3dir/fonts/arial-condensed-bold-regular.zip b/zpak001.pk3dir/fonts/arial-condensed-bold-regular.zip new file mode 100644 index 0000000..16b40db Binary files /dev/null and b/zpak001.pk3dir/fonts/arial-condensed-bold-regular.zip differ diff --git a/zpak001.pk3dir/fonts/arial_condensed_bold.ttf b/zpak001.pk3dir/fonts/arial_condensed_bold.ttf new file mode 100644 index 0000000..a24a044 Binary files /dev/null and b/zpak001.pk3dir/fonts/arial_condensed_bold.ttf differ diff --git a/zpak001.pk3dir/fonts/hg/HGSoeiKakugothicUB Ultra-Bold.ttf b/zpak001.pk3dir/fonts/hg/HGSoeiKakugothicUB Ultra-Bold.ttf new file mode 100644 index 0000000..9117b15 Binary files /dev/null and b/zpak001.pk3dir/fonts/hg/HGSoeiKakugothicUB Ultra-Bold.ttf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Bold.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Bold.otf new file mode 100644 index 0000000..80ecce9 Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Bold.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-BoldItalic.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-BoldItalic.otf new file mode 100644 index 0000000..ae922e8 Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-BoldItalic.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-ExtraLight.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-ExtraLight.otf new file mode 100644 index 0000000..5a07fa7 Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-ExtraLight.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-ExtraLightItalic.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-ExtraLightItalic.otf new file mode 100644 index 0000000..47c33ec Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-ExtraLightItalic.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Italic.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Italic.otf new file mode 100644 index 0000000..02a4ab4 Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Italic.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Light.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Light.otf new file mode 100644 index 0000000..56a2665 Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Light.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-LightItalic.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-LightItalic.otf new file mode 100644 index 0000000..1774fbf Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-LightItalic.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Medium.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Medium.otf new file mode 100644 index 0000000..9f6f929 Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Medium.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-MediumItalic.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-MediumItalic.otf new file mode 100644 index 0000000..69982c8 Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-MediumItalic.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Regular.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Regular.otf new file mode 100644 index 0000000..1a6171c Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Regular.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-SemiBold.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-SemiBold.otf new file mode 100644 index 0000000..6f66d9c Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-SemiBold.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-SemiBoldItalic.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-SemiBoldItalic.otf new file mode 100644 index 0000000..7f34475 Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-SemiBoldItalic.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Text.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Text.otf new file mode 100644 index 0000000..a2b392b Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Text.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-TextItalic.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-TextItalic.otf new file mode 100644 index 0000000..921a887 Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-TextItalic.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Thin.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Thin.otf new file mode 100644 index 0000000..89946b2 Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-Thin.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-ThinItalic.otf b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-ThinItalic.otf new file mode 100644 index 0000000..56b861e Binary files /dev/null and b/zpak001.pk3dir/fonts/ibm/IBMPlexSansCondensed-ThinItalic.otf differ diff --git a/zpak001.pk3dir/fonts/ibm/LICENSE.txt b/zpak001.pk3dir/fonts/ibm/LICENSE.txt new file mode 100644 index 0000000..c35c4c6 --- /dev/null +++ b/zpak001.pk3dir/fonts/ibm/LICENSE.txt @@ -0,0 +1,93 @@ +Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/zpak001.pk3dir/fonts/menu_header.font b/zpak001.pk3dir/fonts/menu_header.font new file mode 100644 index 0000000..b97ba0d --- /dev/null +++ b/zpak001.pk3dir/fonts/menu_header.font @@ -0,0 +1,3 @@ +rendersize "21 16" +path fonts/nimbus/NimbusSanL-Bol.otf +size 16 \ No newline at end of file diff --git a/zpak001.pk3dir/fonts/menu_label.font b/zpak001.pk3dir/fonts/menu_label.font new file mode 100644 index 0000000..e3489dc --- /dev/null +++ b/zpak001.pk3dir/fonts/menu_label.font @@ -0,0 +1,2 @@ +rendersize "10 11 12 14" +path fonts/nimbus/NimbusSanL-Reg.otf \ No newline at end of file diff --git a/zpak001.pk3dir/fonts/menu_label_bold.font b/zpak001.pk3dir/fonts/menu_label_bold.font new file mode 100644 index 0000000..10c8bfc --- /dev/null +++ b/zpak001.pk3dir/fonts/menu_label_bold.font @@ -0,0 +1,2 @@ +rendersize "14 12" +path fonts/nimbus/NimbusSanL-Bol.otf \ No newline at end of file diff --git a/zpak001.pk3dir/fonts/menu_main.font b/zpak001.pk3dir/fonts/menu_main.font new file mode 100644 index 0000000..d61aca9 --- /dev/null +++ b/zpak001.pk3dir/fonts/menu_main.font @@ -0,0 +1,3 @@ +rendersize "14 11 12" +path fonts/nimbus/NimbusSanL-Reg.otf +size 12 \ No newline at end of file diff --git a/zpak001.pk3dir/fonts/nimbus/NimbusSanL-Bol.otf b/zpak001.pk3dir/fonts/nimbus/NimbusSanL-Bol.otf new file mode 100644 index 0000000..2c70081 Binary files /dev/null and b/zpak001.pk3dir/fonts/nimbus/NimbusSanL-Bol.otf differ diff --git a/zpak001.pk3dir/fonts/nimbus/NimbusSanL-BolIta.otf b/zpak001.pk3dir/fonts/nimbus/NimbusSanL-BolIta.otf new file mode 100644 index 0000000..3867a30 Binary files /dev/null and b/zpak001.pk3dir/fonts/nimbus/NimbusSanL-BolIta.otf differ diff --git a/zpak001.pk3dir/fonts/nimbus/NimbusSanL-Reg.otf b/zpak001.pk3dir/fonts/nimbus/NimbusSanL-Reg.otf new file mode 100644 index 0000000..9cedff5 Binary files /dev/null and b/zpak001.pk3dir/fonts/nimbus/NimbusSanL-Reg.otf differ diff --git a/zpak001.pk3dir/fonts/nimbus/NimbusSanL-RegIta.otf b/zpak001.pk3dir/fonts/nimbus/NimbusSanL-RegIta.otf new file mode 100644 index 0000000..eca1672 Binary files /dev/null and b/zpak001.pk3dir/fonts/nimbus/NimbusSanL-RegIta.otf differ diff --git a/zpak001.pk3dir/fonts/nimbus/NumbusSanL.txt b/zpak001.pk3dir/fonts/nimbus/NumbusSanL.txt new file mode 100644 index 0000000..6db9098 --- /dev/null +++ b/zpak001.pk3dir/fonts/nimbus/NumbusSanL.txt @@ -0,0 +1,340 @@ +GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. \ No newline at end of file diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-Black.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-Black.ttf new file mode 100644 index 0000000..d1586a8 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-Black.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-BlackItalic.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-BlackItalic.ttf new file mode 100644 index 0000000..5b1a3b7 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-BlackItalic.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-Bold.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-Bold.ttf new file mode 100644 index 0000000..647c3e3 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-Bold.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-BoldItalic.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-BoldItalic.ttf new file mode 100644 index 0000000..852e599 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-BoldItalic.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraBold.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraBold.ttf new file mode 100644 index 0000000..17db86e Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraBold.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraBoldItalic.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraBoldItalic.ttf new file mode 100644 index 0000000..0e70c65 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraBoldItalic.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraLight.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraLight.ttf new file mode 100644 index 0000000..96cbc95 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraLight.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraLightItalic.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraLightItalic.ttf new file mode 100644 index 0000000..13b4316 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-ExtraLightItalic.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-Italic.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-Italic.ttf new file mode 100644 index 0000000..d507564 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-Italic.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-Light.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-Light.ttf new file mode 100644 index 0000000..1d963ad Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-Light.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-LightItalic.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-LightItalic.ttf new file mode 100644 index 0000000..bbe91f5 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-LightItalic.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-Medium.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-Medium.ttf new file mode 100644 index 0000000..4dfbac9 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-Medium.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-MediumItalic.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-MediumItalic.ttf new file mode 100644 index 0000000..707606e Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-MediumItalic.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-SemiBold.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-SemiBold.ttf new file mode 100644 index 0000000..d936493 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-SemiBold.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-SemiBoldItalic.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-SemiBoldItalic.ttf new file mode 100644 index 0000000..f698ac1 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-SemiBoldItalic.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-Thin.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-Thin.ttf new file mode 100644 index 0000000..74f3c18 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-Thin.ttf differ diff --git a/zpak001.pk3dir/fonts/static/RobotoCondensed-ThinItalic.ttf b/zpak001.pk3dir/fonts/static/RobotoCondensed-ThinItalic.ttf new file mode 100644 index 0000000..1938663 Binary files /dev/null and b/zpak001.pk3dir/fonts/static/RobotoCondensed-ThinItalic.ttf differ diff --git a/zpak001.pk3dir/gfx/blue_default.png b/zpak001.pk3dir/gfx/blue_default.png new file mode 100755 index 0000000..0812e53 Binary files /dev/null and b/zpak001.pk3dir/gfx/blue_default.png differ diff --git a/zpak001.pk3dir/gfx/console1.tga b/zpak001.pk3dir/gfx/console1.tga new file mode 100644 index 0000000..9147bdd Binary files /dev/null and b/zpak001.pk3dir/gfx/console1.tga differ diff --git a/zpak001.pk3dir/gfx/console2.tga b/zpak001.pk3dir/gfx/console2.tga new file mode 100644 index 0000000..289e403 Binary files /dev/null and b/zpak001.pk3dir/gfx/console2.tga differ diff --git a/zpak001.pk3dir/gfx/devcon.mat b/zpak001.pk3dir/gfx/devcon.mat new file mode 100644 index 0000000..8e1b56c --- /dev/null +++ b/zpak001.pk3dir/gfx/devcon.mat @@ -0,0 +1,17 @@ + { + nopicmip + nocompress + + { + rgbGen const (0 1 1) + map gfx/console2.tga + } + + { + rgbGen const (0 1 1) + map gfx/console1.tga + tcMod scroll 0.01 0.02 + tcMod scale 8 4 + blendFunc add + } +} diff --git a/zpak001.pk3dir/glsl/default2d.glsl b/zpak001.pk3dir/glsl/default2d.glsl new file mode 100644 index 0000000..c6a9f7d --- /dev/null +++ b/zpak001.pk3dir/glsl/default2d.glsl @@ -0,0 +1,29 @@ +!!ver 100-450 +!!samps 1 + +varying vec2 tc; +varying vec4 vc; + +#ifdef VERTEX_SHADER +attribute vec2 v_texcoord; +attribute vec4 v_colour; +void main () +{ + tc = v_texcoord; + vc = v_colour; + gl_Position = ftetransform(); +} +#endif + +#ifdef FRAGMENT_SHADER +void main () +{ + vec4 f = vc; +#ifdef PREMUL + f.rgb *= f.a; +#endif + f *= texture2D(s_t0, tc); + + gl_FragColor = f; +} +#endif diff --git a/zpak001.pk3dir/glsl/defaultadditivesprite.glsl b/zpak001.pk3dir/glsl/defaultadditivesprite.glsl new file mode 100644 index 0000000..a809bfb --- /dev/null +++ b/zpak001.pk3dir/glsl/defaultadditivesprite.glsl @@ -0,0 +1,27 @@ +!!permu FOG +!!samps 1 + +#include "sys/fog.h" +#ifdef VERTEX_SHADER +attribute vec2 v_texcoord; +attribute vec4 v_colour; +varying vec2 tc; +varying vec4 vc; +void main () +{ + tc = v_texcoord; + vc = v_colour; + gl_Position = ftetransform(); +} +#endif + +#ifdef FRAGMENT_SHADER +varying vec2 tc; +varying vec4 vc; +uniform vec4 e_colourident; +void main () +{ + vec4 diffuse_f = texture2D(s_t0, tc); + gl_FragColor = fog4additive(diffuse_f * vc * e_colourident); +} +#endif diff --git a/zpak001.pk3dir/glsl/defaultfill.glsl b/zpak001.pk3dir/glsl/defaultfill.glsl new file mode 100644 index 0000000..af3793f --- /dev/null +++ b/zpak001.pk3dir/glsl/defaultfill.glsl @@ -0,0 +1,20 @@ +!!ver 100-450 + +#ifdef VERTEX_SHADER +attribute vec4 v_colour; +varying vec4 vc; + +void main () +{ + vc = v_colour; + gl_Position = ftetransform(); +} +#endif + +#ifdef FRAGMENT_SHADER +varying vec4 vc; +void main () +{ + gl_FragColor = vc; +} +#endif diff --git a/zpak001.pk3dir/glsl/defaultskin.glsl b/zpak001.pk3dir/glsl/defaultskin.glsl new file mode 100644 index 0000000..b2b1f5e --- /dev/null +++ b/zpak001.pk3dir/glsl/defaultskin.glsl @@ -0,0 +1,339 @@ +!!ver 130 +!!permu FRAMEBLEND +!!permu SKELETAL +!!permu UPPERLOWER +!!permu FOG +!!samps diffuse reflectcube upper lower +!!cvardf gl_affinemodels=0 +!!cvardf gl_ldr=1 +!!cvardf gl_halflambert=1 +!!cvardf gl_mono=0 +!!cvardf gl_kdither=0 +!!cvardf gl_stipplealpha=0 + +!!permu FAKESHADOWS +!!cvardf r_glsl_pcf +!!samps =FAKESHADOWS shadowmap + +!!cvardf r_skipDiffuse + +#include "sys/defs.h" +#include "sys/fog.h" + +#if gl_affinemodels == 1 + #define affine noperspective +#else + #define affine +#endif + +#ifdef REFLECTCUBE +varying vec3 eyevector; +varying mat3 invsurface; +#endif + +#ifdef FAKESHADOWS + varying vec4 vtexprojcoord; +#endif + +affine varying vec2 tex_c; +varying vec3 light; + +#ifdef VERTEX_SHADER + #include "sys/skeletal.h" + + float lambert( vec3 normal, vec3 dir ) { + return dot( normal, dir ); + } + float halflambert( vec3 normal, vec3 dir ) { + return ( dot( normal, dir ) * 0.5 ) + 0.5; + } + +#ifdef CHROME + /* Rotate Light Vector */ + vec3 rlv(vec3 axis, vec3 origin, vec3 lightpoint) + { + vec3 offs; + vec3 result; + offs[0] = lightpoint[0] - origin[0]; + offs[1] = lightpoint[1] - origin[1]; + offs[2] = lightpoint[2] - origin[2]; + result[0] = dot(offs[0], axis[0]); + result[1] = dot(offs[1], axis[1]); + result[2] = dot(offs[2], axis[2]); + return result; + } +#endif + + vec3 VectorIRotate( vec3 inPos, mat3x4 xform ) + { + vec3 outPos; + outPos.x = inPos.x*xform[0][0] + inPos.y*xform[1][0] + inPos.z*xform[2][0]; + outPos.y = inPos.x*xform[0][1] + inPos.y*xform[1][1] + inPos.z*xform[2][1]; + outPos.z = inPos.x*xform[0][2] + inPos.y*xform[1][2] + inPos.z*xform[2][2]; + return outPos; + } + + vec3 VectorTransform( vec3 inPos, mat3x4 xform ) + { + vec3 outPos; + outPos.x = dot( inPos, xform[0].xyz ) + xform[0][3]; + outPos.y = dot( inPos, xform[1].xyz ) + xform[1][3]; + outPos.z = dot( inPos, xform[2].xyz ) + xform[2][3]; + return outPos; + } + + void main () + { + vec3 n, s, t, w; + gl_Position = skeletaltransform_wnst(w,n,s,t); + tex_c = v_texcoord; + + #if gl_halflambert==1 + light = e_light_ambient + (e_light_mul * halflambert(n, e_light_dir)); + #else + light = e_light_ambient + (e_light_mul * lambert(n, e_light_dir)); + #endif + + light *= e_lmscale.r; + + if (gl_ldr == 1.0) { + if (light.r > 1.5) + light.r = 1.5; + if (light.g > 1.5) + light.g = 1.5; + if (light.b > 1.5) + light.b = 1.5; + + light.rgb * 0.5; + light.rgb = floor(light.rgb * vec3(32,64,32))/vec3(32,64,32); + light.rgb * 2.0; + light.rgb *= 0.75; + } + +#ifdef CHROME + #ifndef SKELETAL + vec3 rorg = rlv(vec3(0,0,0), w, e_light_dir); + vec3 viewc = normalize(rorg - w); + float d = dot(n, viewc); + vec3 reflected; + reflected.x = n.x * 2.0 * d - viewc.x; + reflected.y = n.y * 2.0 * d - viewc.y; + reflected.z = n.z * 2.0 * d - viewc.z; + tex_c.x = 0.5 + reflected.y * 0.5; + tex_c.y = 0.5 - reflected.z * 0.5; + #else + /* code contributed by Slartibarty */ + vec3 tmp = e_eyepos * -1.0f; + + int boneid = int(v_bone.r); + tmp.x += m_bones_mat3x4[boneid][0][3]; + tmp.y += m_bones_mat3x4[boneid][1][3]; + tmp.z += m_bones_mat3x4[boneid][2][3]; + + tmp = normalize( tmp ); + vec3 chromeUp = normalize( cross( tmp, vec3( m_modelview[0][0], m_modelview[1][0], m_modelview[2][0] ) ) ); + vec3 chromeRight = normalize( cross( chromeUp, tmp ) ); + + chromeUp = VectorIRotate( chromeUp, m_bones_mat3x4[boneid] ); + chromeRight = VectorIRotate( chromeRight, m_bones_mat3x4[boneid] ); + + float na; + + // calc s coord + na = dot( v_normal, chromeRight ); + tex_c.x = ( na + 1.0 ) * 0.5; + + // calc t coord + na = dot( v_normal, chromeUp ); + tex_c.y = ( na + 1.0 ) * 0.5; + #endif +#endif + +#ifdef REFLECTCUBE + invsurface[0] = v_svector; + invsurface[1] = v_tvector; + invsurface[2] = v_normal; + vec3 eyeminusvertex = e_eyepos - v_position.xyz; + eyevector.x = dot( eyeminusvertex, v_svector.xyz ); + eyevector.y = dot( eyeminusvertex, v_tvector.xyz ); + eyevector.z = dot( eyeminusvertex, v_normal.xyz ); +#endif + } +#endif + + +#ifdef FRAGMENT_SHADER + #include "sys/pcf.h" + + vec4 kernel_dither(sampler2D targ, vec2 texc) + { + int x = int(mod(gl_FragCoord.x, 2.0)); + int y = int(mod(gl_FragCoord.y, 2.0)); + int index = x + y * 2; + vec2 coord_ofs; + vec2 size; + + size.x = 1.0 / textureSize(targ, 0).x; + size.y = 1.0 / textureSize(targ, 0).y; + + if (index == 0) + coord_ofs = vec2(0.25, 0.0); + else if (index == 1) + coord_ofs = vec2(0.50, 0.75); + else if (index == 2) + coord_ofs = vec2(0.75, 0.50); + else if (index == 3) + coord_ofs = vec2(0.00, 0.25); + + return texture2D(targ, texc + coord_ofs * size); + } + + vec3 hsv2rgb(float h, float s, float v) + { + int i; + float f,p,q,t; + vec3 col = vec3(0,0,0); + + h = max(0.0, min(360.0, h)); + s = max(0.0, min(100.0, s)); + v = max(0.0, min(100.0, v)); + + s /= 100; + v /= 100; + + if (s == 0) { + col.x= col.y = col.z = int(v*255); + return col / 255.0; + } + + h /= 60; + i = int(floor(h)); + f = h - i; + p = v * (1 - s); + q = v * (1 - s * f); + t = v * (1 - s * (1 - f)); + + switch (i) { + case 0: + col[0] = int(255*v); + col[1] = int(255*t); + col[2] = int(255*p); + break; + case 1: + col[0] = int(255*q); + col[1] = int(255*v); + col[2] = int(255*p); + break; + case 2: + col[0] = int(255*p); + col[1] = int(255*v); + col[2] = int(255*t); + break; + case 3: + col[0] = int(255*p); + col[1] = int(255*q); + col[2] = int(255*v); + break; + case 4: + col[0] = int(255*t); + col[1] = int(255*p); + col[2] = int(255*v); + break; + default: + col[0] = int(255*v); + col[1] = int(255*p); + col[2] = int(255*q); + } + return col / 255.0; + } + + void main () + { + vec4 diffuse_f; + +#if r_skipDiffuse==1 + diffuse_f = vec4(1.0, 1.0, 1.0, 1.0); +#else + #if gl_kdither==1 + diffuse_f = kernel_dither(s_diffuse, tex_c); + #else + diffuse_f = texture2D(s_diffuse, tex_c); + #endif +#endif + + #ifdef UPPER + vec4 uc = texture2D(s_upper, tex_c); + + if (e_colourident.z == 2.0) { + vec3 topcolor = hsv2rgb(e_colourident.x * 360, 100, 100); + diffuse_f.rgb += uc.rgb*topcolor*uc.a; + } else { + diffuse_f.rgb += uc.rgb*e_uppercolour*uc.a; + } + #endif + + #ifdef LOWER + vec4 lc = texture2D(s_lower, tex_c); + + if (e_colourident.z == 2.0) { + vec3 bottomcolor = hsv2rgb(e_colourident.y * 360, 100, 100); + diffuse_f.rgb += lc.rgb*bottomcolor*lc.a; + } else { + diffuse_f.rgb += lc.rgb*e_lowercolour*lc.a; + } + #endif + + diffuse_f.rgb *= light; + +#ifdef REFLECTCUBE + vec3 cube_c; + vec4 out_f = vec4( 1.0, 1.0, 1.0, 1.0 ); + + cube_c = reflect( normalize( -eyevector ), vec3( 0, 0, 1 ) ); + cube_c = cube_c.x * invsurface[0] + cube_c.y * invsurface[1] + cube_c.z * invsurface[2]; + cube_c = ( m_model * vec4( cube_c.xyz, 0.0 ) ).xyz; + out_f.rgb = mix( textureCube( s_reflectcube, cube_c ).rgb, diffuse_f.rgb, diffuse_f.a ); + diffuse_f = out_f; +#endif + + if (e_colourident.z != 2.0) { + diffuse_f *= e_colourident; + } + + #if gl_stipplealpha==1 + float alpha = e_colourident.a; + int x = int(mod(gl_FragCoord.x, 2.0)); + int y = int(mod(gl_FragCoord.y, 2.0)); + + if (alpha <= 0.0) { + discard; + } else if (alpha <= 0.25) { + diffuse_f.a = 1.0; + if (x + y == 2) + discard; + if (x + y == 1) + discard; + } else if (alpha <= 0.5) { + diffuse_f.a = 1.0; + if (x + y == 2) + discard; + if (x + y == 0) + discard; + } else if (alpha < 1.0) { + diffuse_f.a = 1.0; + if (x + y == 2) + discard; + } + #endif + + #if gl_mono==1 + float bw = (diffuse_f.r + diffuse_f.g + diffuse_f.b) / 3.0; + diffuse_f.rgb = vec3(bw, bw, bw); + #endif + + #ifdef FAKESHADOWS + diffuse_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord); + #endif + gl_FragColor = fog4(diffuse_f); + } +#endif diff --git a/zpak001.pk3dir/glsl/defaultskybox.glsl b/zpak001.pk3dir/glsl/defaultskybox.glsl new file mode 100644 index 0000000..144e75a --- /dev/null +++ b/zpak001.pk3dir/glsl/defaultskybox.glsl @@ -0,0 +1,30 @@ +!!ver 130 +!!permu FOG +!!samps reflectcube +!!cvardf gl_mono=0 + +#include "sys/defs.h" +#include "sys/fog.h" + +varying vec3 pos; +#ifdef VERTEX_SHADER +void main () +{ + pos = v_position.xyz - e_eyepos; + pos.y = -pos.y; + gl_Position = ftetransform(); +} +#endif +#ifdef FRAGMENT_SHADER +void main () +{ + vec4 skybox = textureCube(s_reflectcube, pos); + + if (gl_mono == 1.0) { + float bw = (skybox.r + skybox.g + skybox.b) / 3.0; + skybox.rgb = vec3(bw, bw, bw) * 1.5; + } + + gl_FragColor = vec4(fog3(skybox.rgb), 1.0); +} +#endif diff --git a/zpak001.pk3dir/glsl/defaultsprite.glsl b/zpak001.pk3dir/glsl/defaultsprite.glsl new file mode 100644 index 0000000..2ee2270 --- /dev/null +++ b/zpak001.pk3dir/glsl/defaultsprite.glsl @@ -0,0 +1,74 @@ +!!ver 130 +!!permu FOG +!!samps 1 +!!cvardf gl_mono=0 +!!cvardf gl_kdither=0 + +#include "sys/fog.h" +#ifdef VERTEX_SHADER +attribute vec2 v_texcoord; +attribute vec4 v_colour; +varying vec2 tc; +varying vec4 vc; +void main () +{ + tc = v_texcoord; + vc = v_colour; + gl_Position = ftetransform(); +} +#endif + +#ifdef FRAGMENT_SHADER +varying vec2 tc; +varying vec4 vc; +uniform vec4 e_colourident; +uniform vec4 e_vlscale; + + vec4 kernel_dither(sampler2D targ, vec2 texc) + { + int x = int(mod(gl_FragCoord.x, 2.0)); + int y = int(mod(gl_FragCoord.y, 2.0)); + int index = x + y * 2; + vec2 coord_ofs; + vec2 size; + + size.x = 1.0 / textureSize(targ, 0).x; + size.y = 1.0 / textureSize(targ, 0).y; + + if (index == 0) + coord_ofs = vec2(0.25, 0.0); + else if (index == 1) + coord_ofs = vec2(0.50, 0.75); + else if (index == 2) + coord_ofs = vec2(0.75, 0.50); + else if (index == 3) + coord_ofs = vec2(0.00, 0.25); + + return texture2D(targ, texc + coord_ofs * size); + } + + void main () + { + vec4 col; + + #if gl_kdither==1 + col = texture2D(s_t0, tc); + #else + col = texture2D(s_t0, tc); + #endif + + #ifdef MASK + if (col.a < float(MASK)) + discard; + #endif + + col = fog4blend(col * vc * e_colourident * e_vlscale); + + #if gl_mono==1 + float bw = (col.r + col.g + col.b) / 3.0; + col.rgb = vec3(bw, bw, bw) * 1.5; + #endif + + gl_FragColor = col; + } +#endif diff --git a/zpak001.pk3dir/glsl/defaultwall.glsl b/zpak001.pk3dir/glsl/defaultwall.glsl new file mode 100644 index 0000000..f3beb2f --- /dev/null +++ b/zpak001.pk3dir/glsl/defaultwall.glsl @@ -0,0 +1,225 @@ +!!ver 130 +!!permu LIGHTSTYLED +!!permu FOG +!!samps diffuse reflectcube normalmap + +!!permu FAKESHADOWS +!!cvardf r_glsl_pcf +!!samps =FAKESHADOWS shadowmap + +!!samps lightmap +!!samps =LIGHTSTYLED lightmap1 lightmap2 lightmap3 +!!cvardf gl_mono +!!cvardf gl_kdither +!!cvardf gl_stipplealpha +!!cvardf gl_ldr + +!!cvardf r_skipDiffuse +!!cvardf r_skipLightmap + +#include "sys/defs.h" +#include "sys/fog.h" + +varying vec2 tex_c; + +varying vec2 lm0; +#ifdef LIGHTSTYLED +varying vec2 lm1, lm2, lm3; +#endif + +#ifdef REFLECTCUBE +varying vec3 eyevector; +varying mat3 invsurface; +#endif + +#ifdef FAKESHADOWS + varying vec4 vtexprojcoord; +#endif + +#ifdef VERTEX_SHADER + void lightmapped_init(void) + { + lm0 = v_lmcoord; + #ifdef LIGHTSTYLED + lm1 = v_lmcoord2; + lm2 = v_lmcoord3; + lm3 = v_lmcoord4; + #endif + } + + void main () + { + lightmapped_init(); + tex_c = v_texcoord; + gl_Position = ftetransform(); + + /* HACK: func_conveyor needs us to scroll this surface! */ + if (e_glowmod.g == 0.5) + tex_c[0] += (e_time * (e_glowmod.b * 1024.0)) * -0.01; + +#ifdef REFLECTCUBE + invsurface[0] = v_svector; + invsurface[1] = v_tvector; + invsurface[2] = v_normal; + vec3 eyeminusvertex = e_eyepos - v_position.xyz; + eyevector.x = dot( eyeminusvertex, v_svector.xyz ); + eyevector.y = dot( eyeminusvertex, v_tvector.xyz ); + eyevector.z = dot( eyeminusvertex, v_normal.xyz ); +#endif + } +#endif + +#ifdef FRAGMENT_SHADER + #include "sys/pcf.h" + +#if r_skipLightmap==0 + vec3 lightmap_fragment(void) + { + vec3 lightmaps; + +#ifdef LIGHTSTYLED + lightmaps = texture2D(s_lightmap0, lm0).rgb * e_lmscale[0].rgb; + lightmaps += texture2D(s_lightmap1, lm1).rgb * e_lmscale[1].rgb; + lightmaps += texture2D(s_lightmap2, lm2).rgb * e_lmscale[2].rgb; + lightmaps += texture2D(s_lightmap3, lm3).rgb * e_lmscale[3].rgb; +#else + lightmaps = texture2D(s_lightmap, lm0).rgb * e_lmscale.rgb; +#endif + if (gl_ldr == 1.0) { + + if (lightmaps.r > 1.5) + lightmaps.r = 1.5; + if (lightmaps.g > 1.5) + lightmaps.g = 1.5; + if (lightmaps.b > 1.5) + lightmaps.b = 1.5; + + lightmaps.rgb * 0.5; + lightmaps.rgb = floor(lightmaps.rgb * vec3(32,64,32))/vec3(32,64,32); + lightmaps.rgb * 2.0; + } + + return lightmaps; + } +#else + vec3 lightmap_fragment(void) + { + return vec3(1.0,1.0,1.0); + } +#endif + + vec4 kernel_dither(sampler2D targ, vec2 texc) + { + int x = int(mod(gl_FragCoord.x, 2.0)); + int y = int(mod(gl_FragCoord.y, 2.0)); + int index = x + y * 2; + vec2 coord_ofs; + vec2 size; + + size.x = 1.0 / textureSize(targ, 0).x; + size.y = 1.0 / textureSize(targ, 0).y; + + if (index == 0) + coord_ofs = vec2(0.25, 0.0); + else if (index == 1) + coord_ofs = vec2(0.50, 0.75); + else if (index == 2) + coord_ofs = vec2(0.75, 0.50); + else if (index == 3) + coord_ofs = vec2(0.00, 0.25); + + return texture2D(targ, texc + coord_ofs * size); + } + + void main ( void ) + { + vec4 diffuse_f; + +#if r_skipDiffuse==1 + diffuse_f = vec4(1.0,1.0,1.0,1.0); +#else + #if gl_kdither==1 + diffuse_f = kernel_dither(s_diffuse, tex_c); + #else + diffuse_f = texture2D(s_diffuse, tex_c); + #endif +#endif + +/* get the alphatesting out of the way first */ +#ifdef MASK + /* HACK: terrible hack, CSQC sets this to mark surface as an entity + only entities are alphatested - ever */ + if (e_glowmod.r == 0.5) + if (diffuse_f.a < 0.6) { + discard; + } +#endif + /* lighting */ + //diffuse_f.rgb = vec3(1,1,1); + diffuse_f.rgb *= lightmap_fragment(); + +#ifdef REFLECTCUBE + #ifdef BUMP + #ifndef FLATTENNORM + vec3 normal_f = normalize(texture2D(s_normalmap, tex_c).rgb - 0.5); + #else + // For very flat surfaces and gentle surface distortions, the 8-bit precision per channel in the normalmap + // can be insufficient. This is a hack to instead have very wobbly normalmaps that make use of the 8 bits + // and then scale the wobblyness back once in the floating-point domain. + vec3 normal_f = texture2D(s_normalmap, tex_c).rgb - 0.5; + normal_f.x *= 0.0625; + normal_f.y *= 0.0625; + normal_f = normalize(normal_f); + #endif + #else + vec3 normal_f = vec3(0, 0, 1); + #endif + vec3 cube_c; + + cube_c = reflect( normalize(-eyevector), normal_f); + cube_c = cube_c.x * invsurface[0] + cube_c.y * invsurface[1] + cube_c.z * invsurface[2]; + cube_c = ( m_model * vec4(cube_c.xyz, 0.0)).xyz; + diffuse_f.rgb = mix( textureCube(s_reflectcube, cube_c ).rgb, diffuse_f.rgb, diffuse_f.a); +#endif + + diffuse_f *= e_colourident; + + #if gl_stipplealpha==1 + float alpha = e_colourident.a; + int x = int(mod(gl_FragCoord.x, 2.0)); + int y = int(mod(gl_FragCoord.y, 2.0)); + + if (alpha <= 0.0) { + discard; + } else if (alpha <= 0.25) { + diffuse_f.a = 1.0; + if (x + y == 2) + discard; + if (x + y == 1) + discard; + } else if (alpha <= 0.5) { + diffuse_f.a = 1.0; + if (x + y == 2) + discard; + if (x + y == 0) + discard; + } else if (alpha < 1.0) { + diffuse_f.a = 1.0; + if (x + y == 2) + discard; + } + #endif + + #if gl_mono==1 + float bw = (diffuse_f.r + diffuse_f.g + diffuse_f.b) / 3.0; + diffuse_f.rgb = vec3(bw, bw, bw); + #endif + + #ifdef FAKESHADOWS + diffuse_f.rgb *= ShadowmapFilter(s_shadowmap, vtexprojcoord); + #endif + + gl_FragColor = fog4(diffuse_f); + + } +#endif diff --git a/zpak001.pk3dir/glsl/defaultwarp.glsl b/zpak001.pk3dir/glsl/defaultwarp.glsl new file mode 100644 index 0000000..0770d24 --- /dev/null +++ b/zpak001.pk3dir/glsl/defaultwarp.glsl @@ -0,0 +1,146 @@ +!!ver 100 450 +!!permu FOG +!!samps diffuse lightmap +!!cvardf gl_mono=0 +!!cvardf gl_stipplealpha=0 +!!cvardf r_waterRipples=0 + +#include "sys/defs.h" +#include "sys/fog.h" + +varying vec2 tc; + +#ifdef LIT +varying vec2 lm0; +#endif + +#ifdef VERTEX_SHADER + void main () + { + tc = v_texcoord.st; + #ifdef FLOW + tc.s += e_time * -0.5; + #endif + #ifdef LIT + lm0 = v_lmcoord; + #endif + gl_Position = ftetransform(); + } +#endif + +#ifdef FRAGMENT_SHADER +#ifndef ALPHA + #define USEALPHA 1.0 +#else + #define USEALPHA float(ALPHA) +#endif + + + +// Hash functions shamefully stolen from: +// https://www.shadertoy.com/view/4djSRW +#define HASHSCALE1 .1031 +#define HASHSCALE3 vec3(.1031, .1030, .0973) + +float hash12(vec2 p) +{ + vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1); + p3 += dot(p3, p3.yzx + 19.19); + return fract((p3.x + p3.y) * p3.z); +} + +vec2 hash22(vec2 p) +{ + vec3 p3 = fract(vec3(p.xyx) * HASHSCALE3); + p3 += dot(p3, p3.yzx+19.19); + return fract((p3.xx+p3.yz)*p3.zy); + +} + + void main () + { + vec2 ntc; + ntc.s = tc.s + sin(tc.t+ e_time)*0.125; + ntc.t = tc.t + sin(tc.s+ e_time)*0.125; + vec4 diffuse_f = texture2D(s_diffuse, ntc); + + diffuse_f *= e_colourident; + + // awful stipple alpha code + #if gl_stipplealpha==1 + float alpha = USEALPHA * e_colourident.a; + int x = int(mod(gl_FragCoord.x, 2.0)); + int y = int(mod(gl_FragCoord.y, 2.0)); + + if (alpha <= 0.0) { + discard; + } else if (alpha <= 0.25) { + diffuse_f.a = 1.0; + if (x + y == 2) + discard; + if (x + y == 1) + discard; + } else if (alpha <= 0.5) { + diffuse_f.a = 1.0; + if (x + y == 2) + discard; + if (x + y == 0) + discard; + } else if (alpha < 1.0) { + diffuse_f.a = 1.0; + if (x + y == 2) + discard; + } + #else + #ifdef LIT + + #define MAX_RADIUS 2 + + #if r_waterRipples ==1 + float resolution = 5.0f; + float riptime = e_time; + vec2 uv = tc.xy * resolution; + vec2 p0 = floor(uv); + vec2 circles = vec2(0.); + for (int j = -MAX_RADIUS; j <= MAX_RADIUS; ++j) { + for (int i = -MAX_RADIUS; i <= MAX_RADIUS; ++i) { + vec2 pi = p0 + vec2(i, j); + #if DOUBLE_HASH + vec2 hsh = hash22(pi); + #else + vec2 hsh = pi; + #endif + vec2 p = pi + hash22(hsh); + + float t = fract(0.3* riptime + hash12(hsh)); + vec2 v = p - uv; + float d = length(v) - (float(MAX_RADIUS) + 1.)*t; + + float h = 1e-3; + float d1 = d - h; + float d2 = d + h; + float p1 = sin(31.*d1) * smoothstep(-0.6, -0.3, d1) * smoothstep(0., -0.3, d1); + float p2 = sin(31.*d2) * smoothstep(-0.6, -0.3, d2) * smoothstep(0., -0.3, d2); + circles += .05 * normalize(v) * ((p2 - p1) / (2. * h) * (1. - t) * (1. - t)); + } + } + circles /= float((MAX_RADIUS*2+1)*(MAX_RADIUS*2+1)); + + float intensity = mix(0.01, 0.15, smoothstep(0.1, 0.6, abs(fract(0.05* riptime + 0.5)*2.-1.))); + vec3 n = vec3(circles, sqrt(1. - dot(circles, circles))); + + diffuse_f = texture2D(s_diffuse, tc + n.yz); + #endif + //diffuse_f.rgb += pow(clamp(dot(n, normalize(vec3(1., 0.7, 0.5))), 0., 1.), 6.); + diffuse_f.rgb *= (texture2D(s_lightmap, lm0) * e_lmscale).rgb; + #endif + #endif + + #if gl_mono==1 + float bw = (diffuse_f.r + diffuse_f.g + diffuse_f.b) / 3.0; + diffuse_f.rgb = vec3(bw, bw, bw); + #endif + + gl_FragColor = fog4(diffuse_f); + } +#endif diff --git a/zpak001.pk3dir/menu.dat.default.po b/zpak001.pk3dir/menu.dat.default.po new file mode 100644 index 0000000..b282cf6 --- /dev/null +++ b/zpak001.pk3dir/menu.dat.default.po @@ -0,0 +1,1693 @@ +# ENGLISH LOCALISATION FILE. + +msgid "IDS_LANGUAGE" +msgstr "English" + +msgid "IDS_BORDERLESS_REGFAIL" +msgstr "Could not register %s edit control class." + +msgid "IDS_CHAT_IGNORE_MISLINKED" +msgstr "Ignoring mislinked chat room" + +msgid "IDS_CHAT_IGNORE_UNLINKED" +msgstr "Ignoring unlinked chat room" + +msgid "IDS_CREATE_MAPSCHANGED" +msgstr "The number of maps in the map directory changed." + +msgid "IDS_CREATE_LIBLISTBAD" +msgstr "The file 'liblist.gam' in the game directory was malformed." + +msgid "IDS_SOCKET_CONNECTIONFAILURE" +msgstr "Your network connection may have failed, continuing anway..." + +msgid "IDS_PLAYERINFO_NOMEM" +msgstr "Could not allocate memory for player information instance." + +msgid "IDS_CHAT_NOCONNECTION" +msgstr "Could not create chat server connection." + +msgid "IDS_CHAT_NOSTREAM" +msgstr "Could not create chat server data stream." + +msgid "IDS_CHAT_NOSELECT" +msgstr "Could not prepare chat server client for connection." + +msgid "IDS_CONTROLS_DELETE_LINKED" +msgstr "Deletion of linked key action item." + +msgid "IDS_CONTROLS_KBLIST_EMPTY" +msgstr "Keyboard bindings file 'kb_act.lst' is empty." + +msgid "IDS_CONTROLS_KBLIST_PARSEERROR" +msgstr "Error parsing bindings file 'kb_act.lst'." + +msgid "IDS_CONTROLS_KBKEYS_EMPTY" +msgstr "Keyboard bindings file 'kb_keys.lst' is empty." + +msgid "IDS_CONTROLS_KBKEYS_PARSEERROR" +msgstr "Error parsing file 'kb_keys.lst'." + +msgid "IDS_CONTROLS_KBKEYS_OVERFLOW" +msgstr "Too many actions in file 'kb_keys.lst'." + +msgid "IDS_PROFILE_COLOR" +msgstr "Colors" + +msgid "IDS_MAIN_NOCAPS" +msgstr "Could not query graphics device capabilities." + +msgid "IDS_MAIN_INSUFFICIENTCAPS" +msgstr "Your graphics card does not support a necessary raster operation." + +msgid "IDS_MAIN_REGWNDCLSFAIL" +msgstr "Could not register %s's window class." + +msgid "IDS_MAIN_INSUFFICIENTSOCKETS" +msgstr "Insufficient number of network sockets, networking may not operate correctly." + +msgid "IDS_MAIN_MEMMAPFAILURE" +msgstr "Memory-mapped file i/o initialization failed." + +msgid "IDS_PROFILE_NOMEM" +msgstr "Couldn't allocate memory for player profile, exiting." + +msgid "IDS_BTN_STRANGESIZE" +msgstr "Button face bitmap graphics file sizes appear invalid." + +msgid "IDS_MAIN_NOUSERMSGS" +msgstr "Could not register user messages." + +msgid "IDS_MAIN_NOFILEMAPPING" +msgstr "Could not create file mapping to engine." + +msgid "IDS_MAIN_NOMEMMAPCONNECT" +msgstr "Could not connect to server '%s'." + +msgid "IDS_MSG_OVERFLOW" +msgstr "SZ_GetSpace overflow without m_bAllowOverflow set" + +msgid "IDS_MSG_REQTOOBIG" +msgstr "SZ_GetSpace requested length is greater than available buffer size." + +msgid "IDS_MULTI_NOROOMSTATIC" +msgstr "Could not allocate room static text control." + +msgid "IDS_MULTI_NOROOMTAB" +msgstr "Could not allocate room tab control." + +msgid "IDS_MULTI_NOCHATWINDOW" +msgstr "Could not allocate chat display window control." + +msgid "IDS_MULTI_NOCHATINPUT" +msgstr "Could not allocate chat text input control." + +msgid "IDS_MULTI_NOUSERLIST" +msgstr "Could not allocate chat user list control." + +msgid "IDS_MULTI_NOSERVERLIST" +msgstr "Could not allocate server browser list control." + +msgid "IDS_MULTI_NOSELECTION" +msgstr "No servers selected." + +msgid "IDS_MULTI_NOARCHIVE" +msgstr "%s could not open the server list archive file: '%s'." + +msgid "IDS_CHAT_USER_NOMEM" +msgstr "Could not allocate space for new chat rrom user." + +msgid "IDS_MULTI_SERVER_NOMEM" +msgstr "Could not allocate space for a new server." + +msgid "IDS_MULTI_MASTER_BADLISTFILE" +msgstr "Could not open master server list file." + +msgid "IDS_MULTI_NODIALOG" +msgstr "SetDialog with no dialog!" + +msgid "IDS_PROFILE_REQUIRED" +msgstr "You must create or select a player profile to continue." + +msgid "IDS_ODCOMBO_REGFAIL" +msgstr "Could not register %s combobox class." + +msgid "IDS_ODEDIT_REGFAIL" +msgstr "Could not register %s edit control class." + +msgid "IDS_ODLIST_REGFAIL" +msgstr "Could not register %s list control class." + +msgid "IDS_ODSCROLL_REGFAIL" +msgstr "Could not register %s scrollbar class." + +msgid "IDS_ODSLIDER_REGFAIL" +msgstr "Could not register %s slider class." + +msgid "IDS_ODTAB_REGFAIL" +msgstr "Could not register %s tab control class." + +msgid "IDS_PROFILE_NICKREMOVEFAIL" +msgstr "Could not remove chat nicknames." + +msgid "IDS_PROFILE_NOPROFILE" +msgstr "No chosen profile." + +msgid "IDS_QUICK_NOSERVERS" +msgstr "Could not locate any active %s servers with available slots." + +msgid "IDS_QUICK_NOACTIVE" +msgstr "Could not connect to any active %s servers." + +msgid "IDS_README_NOMEM" +msgstr "Could not allocate buffer for readme: %i bytes" + +msgid "IDS_ROOM_BADNAME" +msgstr "The room name was invalid." + +msgid "IDS_SINGLE_NOSELECTION" +msgstr "You must select a save game slot from the available slots." + +msgid "IDS_SINGLE_CANTSAVE" +msgstr "You must be playing in a single player game to save." + +msgid "IDS_ODLISTBOX_REGFAIL" +msgstr "Could not register %s list box class." + +msgid "IDS_DIB_OPENFAIL" +msgstr "Could not open bitmap file '%s'." + +msgid "IDS_MCI_OPENFAIL" +msgstr "Could not open MCI file for playback: %s" + +msgid "IDS_MCI_GETIDFAIL" +msgstr "Could not get MCI Device ID for MCI device" + +msgid "IDS_MCI_WINDOWFAIL" +msgstr "Could not set up MCI window for playback of MCI device: %s" + +msgid "IDS_MCI_PUTFAIL" +msgstr "Could not display MCI playback of MCI device in window: %s" + +msgid "IDS_MCI_SEEKFAIL" +msgstr "Could not seek to start of MCI data: %s" + +msgid "IDS_MCI_BREAKFAIL" +msgstr "Could not set break key on MCI data: %s" + +msgid "IDS_MCI_PLAYFAIL" +msgstr "Could not start playback of MCI data: %s" + +msgid "IDS_MCI_STOPFAIL" +msgstr "Could not stop playback of MCI data: %s" + +msgid "IDS_MCI_CLOSEFAIL" +msgstr "Could not close MCI data: %s" + +msgid "IDS_CONTROLS_RESTOREFAIL" +msgstr "Could not restore default bindings for player." + +msgid "IDS_SND_BADNAME" +msgstr "Invalid sound name" + +msgid "IDS_PROFILE_ALLOCFAIL" +msgstr "Could not allocate space for key binding" + +msgid "IDS_AUDIO_NOPROFILE" +msgstr "Can't change audio settings without a current player profile." + +msgid "IDS_VIDEO_NOPROFILE" +msgstr "Can't change video settings without a current player profile." + +msgid "IDS_CONTROLS_KEYHELP" +msgstr "Use your mouse or the arrow keys to select an item. Double-click or press Enter to change an item. Press Delete to clear an item." + +msgid "IDS_ENDDEMO_URL" +msgstr "http://www.frag-net.com/" + +msgid "IDS_ORDER_URL" +msgstr "http://www.frag-net.com/" + +msgid "IDS_LOADSAVE_HINT" +msgstr "During play, you can quickly save your game by pressing %s. Load this game again by pressing %s." + +msgid "IDS_LAUNCHER_BUTTONSIZE" +msgstr "156 26" + +msgid "IDS_MEM_INSUFFICIENT" +msgstr "Your system reported only %.2fK of physical memory, %s requires at least 16MB." + +msgid "IDS_MEM_ALLOCFAIL" +msgstr "%s was unable to allocate %.2fK of memory." + +msgid "IDS_EVENT_CREATEFAIL" +msgstr "%s was unable to create a system object." + +msgid "IDS_OSVER_FAIL" +msgstr "%s was unable to retreive system information." + +msgid "IDS_OSVER_OUTDATED" +msgstr "%s requires Windows/95 or Windows/NT and above." + +msgid "IDS_OSVER_NTSP3" +msgstr "%s requires Service Pack 3 or above" + +msgid "IDS_OSVER_16BIT" +msgstr "%s requires 16 bit color. Please change your desktop settings to HiColor. Sometimes this is called" + +msgid "IDS_BINDING_ACTIONHEADING" +msgstr "Action" + +msgid "IDS_BINDING_PRIMARYHEADING" +msgstr "Key / button" + +msgid "IDS_BINDING_ALTERNATEHEADING" +msgstr "Alternate" + +msgid "IDS_BINDING_PROMPT" +msgstr "Press a key or button." + +msgid "IDS_URL_BROWSERFAIL" +msgstr "%s was unable to display the web page '%s', please make sure you have a web browser installed and that the association for opening .htm files is valid." + +msgid "IDS_SAVELOAD_TIMECOL" +msgstr "Time" + +msgid "IDS_SAVELOAD_GAMECOL" +msgstr "Game" + +msgid "IDS_SAVELOAD_ELAPSEDCOL" +msgstr "Elapsed Time" + +msgid "IDS_SERVER_GAMESERVER" +msgstr "Game" + +msgid "IDS_SERVER_SPEED" +msgstr "Net Spd" + +msgid "IDS_SERVER_MAP" +msgstr "Map" + +msgid "IDS_SERVER_PLAYERS" +msgstr "Players/Max" + +msgid "IDS_SERVER_GAME" +msgstr "Game Type" + +msgid "IDS_SERVER_NETWORK" +msgstr "Network" + +msgid "IDS_QUERY_STARTING" +msgstr "Starting..." + +msgid "IDS_QUERY_COMPLETED" +msgstr "%s completed." + +msgid "IDS_SERVER_REMOVE" +msgstr "Permanently remove %i servers from list?" + +msgid "IDS_SERVER_CONNECT" +msgstr "Initiating connection to %s..." + +msgid "IDS_SERVER_LANTAG" +msgstr "Lan" + +msgid "IDS_SERVER_INTERNETTAG" +msgstr "Internet" + +msgid "IDS_SERVER_MENU_CONNECT" +msgstr "Connect" + +msgid "IDS_SERVER_MENU_PLAYERINFO" +msgstr "Show player and rule information" + +msgid "IDS_SERVER_MENU_RULEINFO" +msgstr "Show rule information" + +msgid "IDS_SERVER_MENU_FILTER" +msgstr "Filter server" + +msgid "IDS_SERVER_MENU_ADDTOFAVORITE" +msgstr "Add to favorites" + +msgid "IDS_SERVER_MENU_REMOVEFROMFAV" +msgstr "Remove from favorites" + +msgid "IDS_SERVER_MENU_REMOVE" +msgstr "Permanently remove server" + +msgid "IDS_SERVER_MENU_NOPLAYERINFO" +msgstr "No player information available" + +msgid "IDS_SERVER_MENU_NOLANPLAYERINFO" +msgstr "Player information is not available for Lan games" + +msgid "IDS_SAVELOAD_QUICKLISTTEXT" +msgstr "[quick] %s" + +msgid "IDS_SAVELOAD_AUTOLISTITEM" +msgstr "[autosave] %s" + +msgid "IDS_PLAYERINFO_NUMBER" +msgstr "#" + +msgid "IDS_PLAYERINFO_NAME" +msgstr "Player Name" + +msgid "IDS_PLAYERINFO_KILLS" +msgstr "Kills" + +msgid "IDS_PLAYERINFO_TIME" +msgstr "Time" + +msgid "IDS_PLAYERINFO_SUIT" +msgstr "HEV Suit" + +msgid "IDS_QUICK_REQUEST" +msgstr "Requesting list of servers..., %.2f seconds left" + +msgid "IDS_QUICK_GOTLIST" +msgstr "List received..." + +msgid "IDS_QUICK_CONTACTING" +msgstr "Contacting servers..." + +msgid "IDS_QUICK_COMPLETEDSERVER" +msgstr "%s completed." + +msgid "IDS_SAVE_NEWCOMMENT" +msgstr "New Saved Game" + +msgid "IDS_SAVE_NEWTIME" +msgstr "New" + +msgid "IDS_SAVE_NEWFILETIME" +msgstr "Current" + +msgid "IDS_DDRAW_FAILEINIT" +msgstr "Direct Draw Init Failed (%08lx):%sn" + +msgid "IDS_DDRAW_DX4FAIL" +msgstr "Direct Draw 4 Init Failed (%08lx):%sn" + +msgid "IDS_VIDEO_MODECOL" +msgstr "Display mode" + +msgid "IDS_ROOM_NAMECOL" +msgstr "Name" + +msgid "IDS_ROOM_PEOPLECOL" +msgstr "People" + +msgid "IDS_ROOM_SERVERSCOL" +msgstr "Servers" + +msgid "IDS_DDRAW_REQUIRED" +msgstr "%s requires DirectDraw" + +msgid "IDS_DLL_LOADFAIL" +msgstr "Failed to load Engine DLL." + +msgid "IDS_CMDLINE_VTOPTS" +msgstr "-vt requires one of software, gl, or d3d." + +msgid "IDS_SAVE_NUMCHANGED" +msgstr "Number of saved games changed?" + +msgid "IDS_BINDINGS_ALLOCFAIL" +msgstr "Unable to allocate space for binding" + +msgid "IDS_GAMMA_LOADFAIL" +msgstr "Unable to locate the gamma image 'gamma.bmp'." + +msgid "IDS_DDRAW_RESTOREMODEFAIL" +msgstr "Unable to restore DirectDraw video mode." + +msgid "IDS_AUDIO_VOLUME" +msgstr "Game sound volume" + +msgid "IDS_AUDIO_SUITVOL" +msgstr "HEV suit volume" + +msgid "IDS_AUDIO_USECD" +msgstr "Play CD music." + +msgid "IDS_AUDIO_HIGHQUALITY" +msgstr "High quality sound" + +msgid "IDS_CFG_VIDHELP" +msgstr "Change screen size, video mode, gamma, and glare reduction." + +msgid "IDS_CFG_AUDIOHELP" +msgstr "Change sound volume and quality." + +msgid "IDS_CFG_CONTROLHELP" +msgstr "Change keyboard, mouse, and joystick settings." + +msgid "IDS_CFG_RETURNTOMAIN" +msgstr "Go back to the Main Menu." + +msgid "IDS_CREATEROOM_TITLE" +msgstr "Create Private Room" + +msgid "IDS_CREATEROOM_ROOMNAME" +msgstr "Room Name" + +msgid "IDS_CREATEROOM_ROOMTOPIC" +msgstr "Room Topic" + +msgid "IDS_CREATESERVER_NAME" +msgstr "Server Name:" + +msgid "IDS_CREATESERVER_MAP" +msgstr "Map:" + +msgid "IDS_CREATESERVER_ROOM" +msgstr "Associated Room:" + +msgid "IDS_CREATESERVER_GAMETYPE" +msgstr "Type of Game:" + +msgid "IDS_CREATESERVER_MAXPLAYERS" +msgstr "Max. Players:" + +msgid "IDS_FILTER_TITLE" +msgstr "Filter the list of %s games" + +msgid "IDS_FILTER_HEADING" +msgstr "Show only servers which:" + +msgid "IDS_FILTER_RESPONDING" +msgstr "are responding" + +msgid "IDS_FILTER_RESPONSETIME" +msgstr "responded more quickly than" + +msgid "IDS_FILTER_NOTFULL" +msgstr "are not full" + +msgid "IDS_FILTER_NOTEMPTY" +msgstr "have people currently playing" + +msgid "IDS_FILTER_ONFAVORITES" +msgstr "are in my 'favorites' list" + +msgid "IDS_FILTER_INCHATROOM" +msgstr "are associated with the selected chat room" + +msgid "IDS_FINDPLAYER_PLAYER" +msgstr "Player to find:" + +msgid "IDS_OPTS_CROSSHAIR" +msgstr "Crosshair" + +msgid "IDS_OPTS_REVERSE" +msgstr "Reverse mouse" + +msgid "IDS_OPTS_MLOOK" +msgstr "Mouse look" + +msgid "IDS_OPTS_LOOKSPRING" +msgstr "Look spring" + +msgid "IDS_OPTS_LOOKSTRAFE" +msgstr "Look strafe" + +msgid "IDS_OPTS_MFILTER" +msgstr "Mouse filter" + +msgid "IDS_OPTS_JOYSTICK" +msgstr "Joystick" + +msgid "IDS_OPTS_CROSSHAIRHELP" +msgstr "Enable the weapon aiming crosshair." + +msgid "IDS_OPTS_REVERSEHELP" +msgstr "Reverse mouse up/down axis." + +msgid "IDS_OPTS_MLOOKHELP" +msgstr "Use the mouse to look around instead of using the mouse to move." + +msgid "IDS_OPTS_LOOKSPRINGHELP" +msgstr "Causes the screen to \"spring\" back to looking straight ahead when you move forward." + +msgid "IDS_OPTS_LOOKSTRAFEHELP" +msgstr "In combination with your mouse look modifier, causes left-right movements to strafe instead of turn." + +msgid "IDS_OPTS_MFILTERHELP" +msgstr "Average mouse inputs over the last two frames to smooth out movements." + +msgid "IDS_OPTS_JOYSTICKHELP" +msgstr "Enable the joystick." + +msgid "IDS_OPTS_SENSITIVITYHELP" +msgstr "Mouse sensitivity." + +msgid "IDS_LOADSAVE_LOADHELP" +msgstr "Load a previously saved game" + +msgid "IDS_LOADSAVE_SAVEHELP" +msgstr "Save current game." + +msgid "IDS_LOADSAVE_RETURN" +msgstr "Go back to the Main Menu." + +msgid "IDS_MAIN_RETURNHELP" +msgstr "Return to game." + +msgid "IDS_MAIN_NEWGAMEHELP" +msgstr "Start a new game." + +msgid "IDS_MAIN_TRAININGHELP" +msgstr "Learn how to play %s." + +msgid "IDS_MAIN_LOADHELP" +msgstr "Load a previously saved game." + +msgid "IDS_MAIN_LOADSAVEHELP" +msgstr "Load a saved game, save the current game." + +msgid "IDS_MAIN_CONFIGUREHELP" +msgstr "Change game settings, configure controls." + +msgid "IDS_MAIN_READMEHELP" +msgstr "View the Readme.txt file." + +msgid "IDS_MAIN_ORDERHELP" +msgstr "Order the full version of %s." + +msgid "IDS_MAIN_QUITHELP" +msgstr "Quit playing %s." + +msgid "IDS_MAIN_QUICKHELP" +msgstr "Connect to the fastest, active Internet game server found." + +msgid "IDS_MAIN_MULTIPLAYERHELP" +msgstr "Search for %s servers, chat with other players, configure character." + +msgid "IDS_CHAT_PROMPT" +msgstr "Type Message:" + +msgid "IDS_NEWGAME_EASYHELP" +msgstr "Play %s on the 'easy' skill setting." + +msgid "IDS_NEWGAME_MEDIUMHELP" +msgstr "Play %s on the 'medium' skill setting." + +msgid "IDS_NEWGAME_DIFFICULTHELP" +msgstr "Play %s on the 'difficult' skill setting." + +msgid "IDS_NEWGAME_RETURNHELP" +msgstr "Go back to the Main Menu." + +msgid "IDS_NEWPROFILE_TITLE" +msgstr "Select Player" + +msgid "IDS_NEWPROFILE_NAME" +msgstr "Name:" + +msgid "IDS_NEWPROFILE_PASSWORD" +msgstr "Password:" + +msgid "IDS_NEWPROFILE_REMEMBER" +msgstr "remember password" + +msgid "IDS_PROFILE_MODEL" +msgstr "Player Model" + +msgid "IDS_PROFILE_NICKNAME" +msgstr "Player Name" + +msgid "IDS_PROFILE_SELECT" +msgstr "Player profile:" + +msgid "IDS_PROFILE_PROCEEDHELP" +msgstr "Chat with users and browse for servers." + +msgid "IDS_PROFILE_RETURNHELP" +msgstr "Go back to the Main Menu." + +msgid "IDS_VIDEO_SCREENSIZE" +msgstr "Screen size" + +msgid "IDS_VIDEO_GAMMA" +msgstr "Gamma" + +msgid "IDS_VIDEO_GLARE" +msgstr "Glare reduction" + +msgid "IDS_VIDEO_GAMMAHELP" +msgstr "Gamma: Adjusts %s's color balance to best suit your monitor. Move the slider until you can just make out the figure standing in shadow on the right side of the sample image." + +msgid "IDS_VIDEO_GLAREHELP" +msgstr "Glare Reduction: Adjusts darker colors to reduce the effect of glare on your monitor." + +msgid "IDS_VIDMODE_WINDOWED" +msgstr "Run in a window" + +msgid "IDS_VIDMODE_MOUSE" +msgstr "Use mouse" + +msgid "IDS_VIDMODE_GLLISTHEADER" +msgstr "OpenGL Driver" + +msgid "IDS_VIDMODE_D3DHEADER" +msgstr "D3D Device" + +msgid "IDS_VIDSELECT_OPTIONSHELP" +msgstr "Set video options such as screen size, gamma, and glare reduction." + +msgid "IDS_VIDSELECT_MODESHELP" +msgstr "Set video modes and configure 3D accelerators." + +msgid "IDS_VIDSELECT_RETURNHELP" +msgstr "Go back to the previous menu." + +msgid "IDS_SERVERS_REFRESH" +msgstr "Refreshing servers..." + +msgid "IDS_PROGRESS_START" +msgstr "Start" + +msgid "IDS_QUICK_CONTACT" +msgstr "Contacting servers..." + +msgid "IDS_QUICK_REQUESTLIST" +msgstr "Requesting list of servers..." + +msgid "IDS_README_NOFILE" +msgstr "Could not find readme.txt" + +msgid "IDS_STATUS_CONNECTING" +msgstr "Connecting to server '%s'" + +msgid "IDS_STATUS_CONNECTIONESTABLISHED" +msgstr "Connection established to %s, switching to game" + +msgid "IDS_STATUS_SKIPSERVER" +msgstr "Skipping..." + +msgid "IDS_STATUS_ELPASEDTIME" +msgstr "%sn%3.1f Seconds Elapsed" + +msgid "IDS_TRAINING_EXITCURRENT" +msgstr "Entering the Hazard Course will exit any current game, OK to exit?" + +msgid "IDS_MAIN_QUITPROMPTINGAME" +msgstr "Quit %s without saving current game?" + +msgid "IDS_MAIN_QUITPROMPT" +msgstr "Are you sure you want to quit?" + +msgid "IDS_CONTROLS_CANCELPROMPT" +msgstr "Exit without saving changes?" + +msgid "IDS_LOAD_LOADPROMPT" +msgstr "Loading a game will exit any current game, OK to exit?" + +msgid "IDS_LOADSAVE_DELETEPROMPT" +msgstr "Delete selected game?" + +msgid "IDS_NEWGAME_NEWPROMPT" +msgstr "Starting a new game will exit any current game, OK to exit?" + +msgid "IDS_NICKNAME_ADD" +msgstr "Enter a name:" + +msgid "IDS_PROFILE_CANCELPROMPT" +msgstr "Save changes made to profile?" + +msgid "IDS_SAVE_INGAMEPROMPT" +msgstr "Can't save, you are not currently playing a game." + +msgid "IDS_SAVE_OVERWRITE" +msgstr "Are you sure you want to overwrite this saved game?" + +msgid "IDS_VIDEO_BADSETTINGS" +msgstr "Your video settings do not appear to be valid, use these settings anyway?" + +msgid "IDS_AUDIO_A3D" +msgstr "Enable A3D hardware support" + +msgid "IDS_BTN_DONE" +msgstr "Done" + +msgid "IDS_BTN_CONTROLS" +msgstr "Controls" + +msgid "IDS_BTN_AUDIO" +msgstr "Audio" + +msgid "IDS_BTN_VIDEO" +msgstr "Video" + +msgid "IDS_BTN_CANCEL" +msgstr "Cancel" + +msgid "IDS_BTN_CREATE" +msgstr "Create room" + +msgid "IDS_BTN_FILTER" +msgstr "Filter" + +msgid "IDS_BTN_FIND" +msgstr "Search" + +msgid "IDS_BTN_RETURN" +msgstr "Return" + +msgid "IDS_BTN_NEWGAME" +msgstr "New game" + +msgid "IDS_BTN_TRAINING" +msgstr "Hazard course" + +msgid "IDS_BTN_CONFIGURE" +msgstr "Configure" + +msgid "IDS_BTN_LOADSAVE" +msgstr "Save/load game" + +msgid "IDS_BTN_LOAD" +msgstr "Load game" + +msgid "IDS_BTN_MULTIPLAYER" +msgstr "Multiplayer" + +msgid "IDS_BTN_README" +msgstr "View readme" + +msgid "IDS_BTN_ORDER" +msgstr "Order" + +msgid "IDS_BTN_QUIT" +msgstr "Quit" + +msgid "IDS_BTN_ADVANCED" +msgstr "Advanced controls" + +msgid "IDS_BTN_REVERT" +msgstr "Cancel" + +msgid "IDS_BTN_RESTORE" +msgstr "Use defaults" + +msgid "IDS_BTN_DELETE" +msgstr "Delete" + +msgid "IDS_BTN_SAVE" +msgstr "Save game" + +msgid "IDS_BTN_LOGIN" +msgstr "Login" + +msgid "IDS_BTN_CONNECT" +msgstr "Connect" + +msgid "IDS_BTN_CREATESV" +msgstr "Create game" + +msgid "IDS_BTN_REFRESH" +msgstr "Refresh" + +msgid "IDS_BTN_ROOM" +msgstr "List rooms" + +msgid "IDS_BTN_EASY" +msgstr "Easy" + +msgid "IDS_BTN_MEDIUM" +msgstr "Medium" + +msgid "IDS_BTN_HARD" +msgstr "Difficult" + +msgid "IDS_BTN_YES" +msgstr "Yes" + +msgid "IDS_BTN_NO" +msgstr "No" + +msgid "IDS_BTN_OK" +msgstr "Ok" + +msgid "IDS_BTN_OPTIONS" +msgstr "Video options" + +msgid "IDS_BTN_MODES" +msgstr "Video modes" + +msgid "IDS_BTN_QUICK" +msgstr "Quick start" + +msgid "IDS_PROFILE_LOGO" +msgstr "Spraypaint Image" + +msgid "IDS_BTN_BROWSE" +msgstr "Internet games" + +msgid "IDS_MULTI_BROWSEHELP" +msgstr "View a list of %s game servers and join the one of your choice." + +msgid "IDS_BTN_CHAT" +msgstr "Chat rooms" + +msgid "IDS_MULTI_CHATHELP" +msgstr "Talk online with other %s players." + +msgid "IDS_BTN_LAN" +msgstr "Lan game" + +msgid "IDS_MULTI_LANHELP" +msgstr "Set up a %s game on a local area network." + +msgid "IDS_BTN_CUSTOMIZE" +msgstr "Customize" + +msgid "IDS_MULTI_CUSTOMIZEHELP" +msgstr "Choose your player name, and select visual options for your character." + +msgid "IDS_CREATEROOM_ROOMPASSWORD" +msgstr "Room Password (optional)" + +msgid "IDS_PLAYERINFO_RULENAME" +msgstr "Server Rule" + +msgid "IDS_PLAYERINFO_RULEVALUE" +msgstr "Value" + +msgid "IDS_BTN_SEARCH" +msgstr "Search for Game" + +msgid "IDS_BTN_CHATMODE" +msgstr "Chat" + +msgid "IDS_BTN_LISTMODE" +msgstr "Internet games" + +msgid "IDS_BTN_EXIT" +msgstr "Exit" + +msgid "IDS_SERVER_MANUALADD" +msgstr "Add a server by manually by IP address..." + +msgid "IDS_SERVER_REQUESTNEWLIST" +msgstr "Request updated server list." + +msgid "IDS_PLAYERINFO_SERVERNAME" +msgstr "Server hostname:" + +msgid "IDS_PLAYERINFO_SERVERIP" +msgstr "Server IP address:" + +msgid "IDS_PLAYERINFO_SERVERPING" +msgstr "Server 'ping' time:" + +msgid "IDS_PROFILE_FACE" +msgstr "Player Face" + +msgid "IDS_PROFILE_SKIN" +msgstr "Player Skin" + +msgid "IDS_BTN_JOIN" +msgstr "Join Game" + +msgid "IDS_BTN_FINDGAME" +msgstr "Find Game" + +msgid "IDS_BTN_START" +msgstr "Start Game" + +msgid "IDS_PROFILE_LOGOCOLOR" +msgstr "Color" + +msgid "IDS_MULTI_RESUMEHELP" +msgstr "Return to your current muli-player game." + +msgid "IDS_MULTI_DISCONNECTHELP" +msgstr "Disconnect yourself from the game server." + +msgid "IDS_BTN_RESUME" +msgstr "Resume" + +msgid "IDS_BTN_DISCONNECT" +msgstr "Disconnect" + +msgid "IDS_BTN_ADDSERVER" +msgstr "Add server" + +msgid "IDS_BTN_UPDATE" +msgstr "Update" + +msgid "IDS_BTN_INFO" +msgstr "View game info" + +msgid "IDS_QUICKSTART_TITLE" +msgstr "Quick multiplayer" + +msgid "IDS_BTN_LISTROOMS" +msgstr "List rooms" + +msgid "IDS_BTN_GORE" +msgstr "Content control" + +msgid "IDS_BTN_AUTOPATCH" +msgstr "Update %s." + +msgid "IDS_CONFIGURE_GOREHELP" +msgstr "Disable visuals inappropriate for younger players and multiplayer." + +msgid "IDS_CONFIGURE_AUTOPATCHHELP" +msgstr "Download updates for %s." + +msgid "IDS_CHAT_NOSERVERS" +msgstr "Could not locate any Frag-Net servers." + +msgid "IDS_CHAT_NOPROFILE" +msgstr "Couldn't locate player profile" + +msgid "IDS_INIT_DX6REQUIRED" +msgstr "%s requires DirectX version 6 or above. Please install DirectX 6 and restart the game." + +msgid "IDS_FNET_VALIDATIONFAIL" +msgstr "Validation refused." + +msgid "IDS_FNET_VALIDATIONFAIL2" +msgstr "Validation refused." + +msgid "IDS_FNET_AUTHOUTOFORDER" +msgstr "Authentication out of order (1)." + +msgid "IDS_FNET_AUTHPROBLEM" +msgstr "Authentication problem (2)" + +msgid "IDS_FNET_ENCRYPTBAD" +msgstr "Error creating message (1)." + +msgid "IDS_FNET_BADPUBLICKEY" +msgstr "Invalid signal from authentication server (1)." + +msgid "IDS_FNET_AUTHNOMEM" +msgstr "Insufficient memory to receive authentication response." + +msgid "IDS_CD_NEEDCDKEY" +msgstr "You must type in a valid CD Key to play %s" + +msgid "IDS_CD_BADKEY" +msgstr "The CD Key you typed was invalid, please try again" + +msgid "IDS_CD_BADKEYTYPED" +msgstr "Your CD Key is invalid, please reenter the CD key" + +msgid "IDS_MD5_HASHFAIL" +msgstr "Could not validate %s" + +msgid "IDS_MAIN_REGISTERMSGFAIL" +msgstr "Couldn't register %s user message" + +msgid "IDS_CDCHECK_PROMPT" +msgstr "Please Insert the %s CD" + +msgid "IDS_SETTINGS_SERVERTYPEINVALID" +msgstr "Bogus list type in %s" + +msgid "IDS_TOKEN_EXPECTLEFTBRACE" +msgstr "Expecting { in %s" + +msgid "IDS_TOKEN_EXPECTRIGHTBRACE" +msgstr "Expecting } in %s" + +msgid "IDS_MULTI_ADDIPUNRESOLVABLE" +msgstr "That IP address could not be resolved." + +msgid "IDS_CHATCTRL_NOMEM" +msgstr "Couldn't allocate space for user name" + +msgid "IDS_CHATCTRL_NOTEXTMEM" +msgstr "Couldn't allocate space for chat text" + +msgid "IDS_CHATCTRL_WINREGFAIL" +msgstr "Couldn't register chat edit control" + +msgid "IDS_PROFILE_DEFAULTMISSING" +msgstr "Could not find default keybinding file %s" + +msgid "IDS_QUICK_NOMASTER" +msgstr "Unable to retrieve server list, check that your internet connection is active" + +msgid "IDS_QUICK_USINGPREVIOUSLIST" +msgstr "Unable to reach master, using previous list..." + +msgid "IDS_CHAT_NOROOMLIST" +msgstr "Could not obtain room list" + +msgid "IDS_SAVELOAD_NUMBEROFGAMESCHANGED" +msgstr "Number of saved games changed?" + +msgid "IDS_MAIN_EXITMULTIPLAYERPROMPT" +msgstr "Entering the multiplayer system will terminate your current single player game, OK to exit without saving?" + +msgid "IDS_CD_ENTERPROMPT" +msgstr "Please type in the CD Key displayed on the %s CD case" + +msgid "IDS_MULTISELECT_EXITGAMEPROMPT" +msgstr "Exiting the multiplayer system will terminate your current multiplayer game, OK to exit?" + +msgid "IDS_MULTI_ADDSERVERPROMPT" +msgstr "Enter server Internet address (e.g., 209.255.10.255:27015)" + +msgid "IDS_ROOM_NEEDPASS" +msgstr "Enter room password:" + +msgid "IDS_SAVE_CANTSAVE" +msgstr "Can't save, you are not currently playing a game." + +msgid "IDS_SAVE_OVERWRITEPROMPT" +msgstr "Are you sure you want to overwrite this saved game?" + +msgid "IDS_SAVE_DELETEPROMPT" +msgstr "Delete selected game?" + +msgid "IDS_AUTH_INUSE" +msgstr "Account in use" + +msgid "IDS_AUTH_BADACCOUNT" +msgstr "Invalid account" + +msgid "IDS_AUTH_BADREQ" +msgstr "Invalid server request" + +msgid "IDS_AUTH_BADCERTIFICATE" +msgstr "Invalid client certificate" + +msgid "IDS_AUTH_BADEXE" +msgstr "Invalid client value" + +msgid "IDS_AUTH_BADCERTIFICATE2" +msgstr "Invalid client certificate" + +msgid "IDS_AUTH_BADLOOKUP" +msgstr "Invalid client lookup value" + +msgid "IDS_AUTH_BADBITS" +msgstr "Invalid client authentication value" + +msgid "IDS_AUTH_CORRUPT" +msgstr "Corrupt executable" + +msgid "IDS_AUTH_INVALIDACCOUNT" +msgstr "Unknown account error" + +msgid "IDS_CHAT_STATUSUNCONNECTED" +msgstr "Unconnected." + +msgid "IDS_CHAT_FNETCONNECT" +msgstr "Attempting connection..." + +msgid "IDS_CHAT_USERENTER" +msgstr "%s entered..." + +msgid "IDS_CHAT_USERLEFT" +msgstr "%s left..." + +msgid "IDS_ENG_STARTING" +msgstr "Starting engine..." + +msgid "IDS_SERVERS_SEARCHING" +msgstr "Searching for servers..." + +msgid "IDS_SERVERS_LISTREC" +msgstr "Got Server List..." + +msgid "IDS_SERVERS_CONNECTING" +msgstr "Connecting to servers..." + +msgid "IDS_SERVERS_REQUESTINFO" +msgstr "Requesting server information" + +msgid "IDS_ROOM_CREATENOTICE" +msgstr "Creating room '%s', please wait" + +msgid "IDS_ROOM_CREATEPROMPTTITLE" +msgstr "Creating room" + +msgid "IDS_SAVE_TIMEHEADING" +msgstr "Time" + +msgid "IDS_SAVE_GAMEHEADING" +msgstr "Game" + +msgid "IDS_SAVE_ELAPSEDHEADING" +msgstr "Elapsed Time" + +msgid "IDS_SAVE_NEWCAPTION" +msgstr "New Saved Game" + +msgid "IDS_SAVE_NEWGAMETXT" +msgstr "New" + +msgid "IDS_SAVE_FILETIME" +msgstr "Current" + +msgid "IDS_STATUS_CONNECTINGNOTIME" +msgstr "Connecting to server '%s'...nn%s" + +msgid "IDS_MULTI_CHATROOMCAPTION" +msgstr "Room:" + +msgid "IDS_GORE_CHECKBOX" +msgstr "Activate content control" + +msgid "IDS_GORE_HELP" +msgstr "Check this box and enter password to disable visuals inappropriate for younger players and multiplayer. Anyone wishing to change this setting will need to use this password." + +msgid "IDS_GORE_PWPROMPT1" +msgstr "Enter password:" + +msgid "IDS_GORE_PWPROMPT2" +msgstr "Enter again to confirm:" + +msgid "IDS_GORE_PWMISMATCHED" +msgstr "The passwords you entered did not match, please try again." + +msgid "IDS_GORE_BADPW" +msgstr "Incorrect password" + +msgid "IDS_BTN_ADVANCEDSVR" +msgstr "Advanced options" + +msgid "IDS_OPTS_AUTOAIM" +msgstr "Autoaim" + +msgid "IDS_OPTS_AUTOAIMHELP" +msgstr "Allow %s to help you aim at enemies." + +msgid "IDS_BTN_PREVIEWS" +msgstr "Previews" + +msgid "IDS_MAIN_PREVIEWSHELP" +msgstr "Discover new stuff on Frag-Net." + +msgid "IDS_SECONDS_LEFT" +msgstr "%i seconds left..." + +msgid "IDS_MEDIA_PREVIEWURL" +msgstr "http://www.frag-net.com/" + +msgid "IDS_ADVANCEDSVR_PAGE" +msgstr "Page %i of %i" + +msgid "IDS_EMPTY" +msgstr "" + +msgid "IDS_MULTI_TYPE" +msgstr "Internet Connection Speed" + +msgid "IDS_MULTI_LAN" +msgstr "LAN - T1 > 1M" + +msgid "IDS_MULTI_ISDN" +msgstr "ISDN - 112K" + +msgid "IDS_MODEM56K" +msgstr "Modem - 56K" + +msgid "IDS_MODEM28K" +msgstr "Modem - 28.8K" + +msgid "IDS_OPTS_HIMODELS" +msgstr "High quality models (for fast computers)" + +msgid "IDS_OPTS_HIMODELSHELP" +msgstr "" + +msgid "IDS_CHAT_SOCKETERROR" +msgstr "Chat connection problem, retrying connection..." + +msgid "IDS_CHAT_RECONNECTFAIL" +msgstr "Reconnection to chat failed, please verify that you are connected to the internet and try again." + +msgid "IDS_CHAT_RECONNECTSUCCESS" +msgstr "Reconnected..." + +msgid "IDS_CHAT_JOINFAILED" +msgstr "Could not join room '%s'. Click 'List rooms' to select a different room." + +msgid "IDS_BTN_FNET" +msgstr "Visit FRAG-NET.COM" + +msgid "IDS_FNET_URL" +msgstr "www.frag-net.com" + +msgid "IDS_AUDIO_CDHINT" +msgstr "FLAC and other lossless formats are handled via FFMPEG." + +msgid "IDS_PREVIOUS" +msgstr "Previous" + +msgid "IDS_NEXT" +msgstr "Next" + +msgid "IDS_MODEM33K" +msgstr "Modem - 33.6K" + +msgid "IDS_MODEM14K" +msgstr "Modem - 14.4K" + +msgid "IDS_ROOM_PERMANENT" +msgstr "Permanent rooms" + +msgid "IDS_ROOM_USER" +msgstr "User-created rooms" + +msgid "IDS_MULTI_DONEHELP" +msgstr "Go back to the Main Menu." + +msgid "IDS_MULTI_FNETHELP" +msgstr "Go to the Frag-Net." + +msgid "IDS_AUDIO_EAX" +msgstr "Enable EAX hardware support" + +msgid "IDS_GL_NOMODE" +msgstr "The selected OpenGL mode is not supported by your video card." + +msgid "IDS_D3D_NOMODE" +msgstr "The selected D3D mode is not supported by your video card." + +msgid "IDS_VID_NOMODE" +msgstr "The selected video mode is not available." + +msgid "IDS_VID_RESELECT" +msgstr "Please select a different video mode." + +msgid "IDS_VID_INITFAIL" +msgstr "The video subsystem could not be initialized." + +msgid "IDS_NET_FNETCONNFAIL" +msgstr "Could not connect to the Frag-Net server. Please check your internet connection." + +msgid "IDS_NET_CORRUPT" +msgstr "Your %s executable is out of date. %s will now update to the current version." + +msgid "IDS_CDKEY_BAD" +msgstr "Your %s CD Key is invalid." + +msgid "IDS_MULTI_REFRESH" +msgstr "Requesting server information" + +msgid "IDS_CHAT_NOROOM" +msgstr "Not connected" + +msgid "IDS_RUN_PATCH" +msgstr "Check the Internet for updates?" + +msgid "IDS_FNET_AUTHFAILURE" +msgstr "Unable to authenticate with Frag-Net servers." + +msgid "IDS_FNET_LOGIN" +msgstr "Logging on to Frag-Net" + +msgid "IDS_LOGO_SIZEMISMATCH" +msgstr "Custom logos must have the same width and height." + +msgid "IDS_LOGO_OVERSIZED" +msgstr "Custom logos can be no larger than 64 x 64 pixels." + +msgid "IDS_LOGO_POWEROF2" +msgstr "Custom logo width and height must be 2, 4, 8, 16, 32, ro 64." + +msgid "IDS_MODEM_CUSTOM" +msgstr "Custom" + +msgid "IDS_MODEM_RATE" +msgstr "Enter data transfer rate (100 - 9999)" + +msgid "IDS_REGISTRY_UPDATE" +msgstr "Updating registry settings for %s. You will need to reconfigure your settings." + +msgid "IDS_CHAT_JOIN" +msgstr "Trying to join %s" + +msgid "IDS_CHAT_FLOOD" +msgstr "Too much text, please wait." + +msgid "IDS_CHAT_SEARCH" +msgstr "Searching for user %s..." + +msgid "IDS_CHAT_NOINFO" +msgstr "Directory server did not return any user information." + +msgid "IDS_CHAT_NOFIND" +msgstr "Couldn't find user %s" + +msgid "IDS_CHAT_FIND" +msgstr "Found %s in %s" + +msgid "IDS_CHAT_NOAUTH" +msgstr "Could not obtain authentication information" + +msgid "IDS_CHAT_NODIR" +msgstr "Server did not return any directory information." + +msgid "IDS_CHAT_NOSUCHROOM" +msgstr "Could not find room %s" + +msgid "IDS_CHAT_ROOMFULL" +msgstr "Can't join %s..., room has too many users (%i), try again later" + +msgid "IDS_CREATESV_NOADVANCED" +msgstr "No advanced options available" + +msgid "IDS_FNET_CDINUSE" +msgstr "Your %s CD Key is currently in use. Please try again later." + +msgid "IDS_CHAT_JOINHINT" +msgstr "Type /join [roomname] to join another chat room." + +msgid "IDS_FNET_BANNED" +msgstr "Your CD key cannot be used on the Frag-Net system." + +msgid "IDS_CONTENT_NOMULTIPLAYER" +msgstr "Content control configuration - on" + +msgid "IDS_PATCH_ERROR" +msgstr "%s AutoPatch Error" + +msgid "IDS_PATCH_NOUTIL" +msgstr "Utilites are not properly installed. Please reinstall from the CD." + +msgid "IDS_PATCH_FAIL" +msgstr "Could Not Run the AutoPatch Program" + +msgid "IDS_PATCH_BADINSTALL" +msgstr "%s is not properly Installed" + +msgid "IDS_CONNECT_FAILURE" +msgstr "Could not connect to game server\nReason: %s" + +msgid "IDS_MULTI_NEEDPASSWORD" +msgstr "Password required, please enter a password to try connecting again." + +msgid "IDS_VID_HINT" +msgstr "640 x 480 is recommended as the most reliable OpenGL mode. Other modes are hardware dependent and may not be available on your card. If you have a 3D card that incorporates the Voodoo, Voodoo 2, or Banshee chipsets, select the 3DFX Mini Driver as your OpenGL Driver." + +msgid "IDS_MULTI_LOGODISCONNECT" +msgstr "Changing your logo will terminate your current multiplayer game, OK to exit?" + +msgid "IDS_3D_WARNING" +msgstr "For 3D support, %s requires the current versions of device drivers on your system. The 3D Info link will help you ensure you have the correct drivers." + +msgid "IDS_3DSITE_URL" +msgstr "" + +msgid "IDS_FNET_MODIFIED" +msgstr "Your %s executable has been modified. Please check your system for viruses and then re-install %s." + +msgid "IDS_ADVANCEDMP_OFFSETS" +msgstr "0" + +msgid "IDS_AUDIO_OFFSET" +msgstr "0 0 0 0" + +msgid "IDS_CONFIGURE_OFFSET" +msgstr "0 0" + +msgid "IDS_CREATEROOM_OFFSET" +msgstr "0" + +msgid "IDS_CREATESERVER_OFFSET" +msgstr "0" + +msgid "IDS_GAMEOPTIONS_OFFSET" +msgstr "0 0 0 0" + +msgid "IDS_MAIN_OFFSET" +msgstr "0" + +msgid "IDS_KEYBOARD_OFFSET" +msgstr "0" + +msgid "IDS_LAN_OFFSET" +msgstr "110 50 75 80 70" + +msgid "IDS_LOAD_OFFSET" +msgstr "0 0" + +msgid "IDS_NETGAMEDLG_OFFSET" +msgstr "0 0 0" + +msgid "IDS_NEWGAMEDLG_OFFSET" +msgstr "0" + +msgid "IDS_PLAYERINFODLG_OFFSET" +msgstr "0" + +msgid "IDS_PLAYERPROFILEDLG_OFFSET" +msgstr "0 0" + +msgid "IDS_PROMPT_OFFSET" +msgstr "0 0" + +msgid "IDS_ROOM_OFFSET" +msgstr "0" + +msgid "IDS_VIDEODLG_OFFSET" +msgstr "0" + +msgid "IDS_VIDEOMODEDLG_OFFSET" +msgstr "0 0" + +msgid "IDS_VIDSELECTDLG_OFFSET" +msgstr "0 0" + +msgid "IDS_UPDATERREGISTRYINSTALLDIR" +msgstr "NUCLIDE" + +msgid "IDS_SPANISH" +msgstr "0" + +msgid "IDS_FRENCH" +msgstr "0" + +msgid "IDS_OPTS_JLOOKHELP" +msgstr "Use the joystick to look around instead of using the joystick to move." + +msgid "IDS_OPTS_JLOOK" +msgstr "Joystick look" + +msgid "IDS_GERMAN" +msgstr "0" + +msgid "IDS_CONNECT_PROTOCOLBAD" +msgstr "You cannot connect to a server which is operating under a different protocol version." + +msgid "IDS_SERVER_MENU_QUICK" +msgstr "Sort list using best server estimate" + +msgid "IDS_DECAL_LIMIT" +msgstr "Maximum number of decals in multiplayer." + +msgid "IDS_SPRITE_SKIP" +msgstr "Draw faster software sprites" + +msgid "IDS_MODEL_NAME" +msgstr "Player Model: %s" + +msgid "IDS_FILTER_BYGAME" +msgstr "are running game " + +msgid "IDS_BTN_SETINFO" +msgstr "Advanced options" + +msgid "IDS_MODLIST_TYPE" +msgstr "Type" + +msgid "IDS_MODLIST_NAME" +msgstr "Name" + +msgid "IDS_MODLIST_VERSION" +msgstr "Version" + +msgid "IDS_MODLIST_SIZE" +msgstr "Size" + +msgid "IDS_MODLIST_RATING" +msgstr "Rating" + +msgid "IDS_MODLIST_INSTALLED" +msgstr "Installed" + +msgid "IDS_MODLIST_SERVERS" +msgstr "Servers" + +msgid "IDS_MODLIST_PLAYERS" +msgstr "Players" + +msgid "IDS_MOD_DOWNLOADING" +msgstr "Downloading '%s'" + +msgid "IDS_MOD_DLSIZEMB" +msgstr "Total download size for game %s\n%.2fmb" + +msgid "IDS_MOD_DLSIZEKB" +msgstr "Total download size for game %s\n%.0fkb" + +msgid "IDS_MOD_DLSTATUS" +msgstr "Downloading %s from\n%s\nFile: %s\n%.0f%%" + +msgid "IDS_MOD_TIME" +msgstr "%.1f seconds" + +msgid "IDS_MOD_CONNECT" +msgstr "Connecting to %s" + +msgid "IDS_MOD_GETTINGSIZE" +msgstr "Getting download size" + +msgid "IDS_MOD_DLSTATUSSHORT" +msgstr "Downloading %s from\n%s" + +msgid "IDS_MOD_NOFILES" +msgstr "Nothing to download" + +msgid "IDS_MOD_NOLIBLIST" +msgstr "Could not find liblist.gam file on remote host\nDouble check that %s is a valid custom game site" + +msgid "IDS_INTERNET_CURRENTTOTALS" +msgstr "%i servers (%i players online)" + +msgid "IDS_SERVER_REFRESH" +msgstr "Refresh selected server" + +msgid "IDS_CONNECT_NEEDMOD" +msgstr "You cannot connect to a server running custom game %s until you install the custom game" + +msgid "IDS_MOD_REMOTEOPENFAIL" +msgstr "Could not open %s on remote machine" + +msgid "IDS_MOD_LOCALOPENFAIL" +msgstr "Could not open %s on local machine" + +msgid "IDS_BTN_CUSTOMGAME" +msgstr "Custom game" + +msgid "IDS_MAIN_CUSTOMHELP" +msgstr "Select a custom game, search the Internet for custom games" + +msgid "IDS_BTN_ACTIVATE" +msgstr "Activate" + +msgid "IDS_BTN_INSTALL" +msgstr "Install" + +msgid "IDS_BTN_DETAILS" +msgstr "Details" + +msgid "IDS_BTN_VISIT" +msgstr "Visit web site" + +msgid "IDS_BTN_REFRESHMODS" +msgstr "Refresh list" + +msgid "IDS_BTN_DEACTIVATE" +msgstr "Deactivate" + +msgid "IDS_MOD_INFO" +msgstr "Info:" + +msgid "IDS_YES" +msgstr "Yes" + +msgid "IDS_NO" +msgstr "No" + +msgid "IDS_UPDATE" +msgstr "Update" + +msgid "IDS_MODREQ_TITLE" +msgstr "Requesting custom game info" + +msgid "IDS_DOWNLOAD_WARNING" +msgstr "You are about to download a custom game. Downloading a custom game for %s has the same issues and risks as downloading any program from the Internet. They could contain viruses, have bugs that will crash your system causing you to lose unsaved work, or could perform operations that might harm your computer.\mYou can disable this warning by checking the \"Don't show this warning again\" checkbox at the bottom of this form." + +msgid "IDS_WARN_CHECKPROMPT" +msgstr "Don't show this warning again" + +msgid "IDS_MOD_VERSION" +msgstr "Custom game '%s' has a new version available, are you sure you want to select it before installing the updated version?" + +msgid "IDS_MOD_REINSTALL" +msgstr "Custom game %s is already installed, are you sure you want to re-install?" + +msgid "IDS_WARN_TITLE" +msgstr "Custom game download" + +msgid "IDS_MOD_ENGINEVERSION" +msgstr "Custom game '%s' was created for a different version of %s than the current version you have installed. Are you sure you want to select it before installing the updated version?" + +msgid "IDS_MOD_CONNVERSION" +msgstr "You cannot connect to a server running version %i of custom game '%s' until you upgrade to that version. Your current version is %i" + +msgid "IDS_CONNVERSION" +msgstr "You are attempting to connect to a server running game '%s' for %s version %s. Your current version of %s is %s. Continue anyway?" + +msgid "IDS_MOD_NOTINSTALLED" +msgstr "Can't activate custom game '%s', you must install the custom game first." + +msgid "IDS_REFRESH_SERVERS" +msgstr "%i servers remaining" + +msgid "IDS_DEDICATED" +msgstr "Dedicated server (faster, but you can't join the server from this machine)." + +msgid "IDS_MOD_MODVERSION" +msgstr "You are attempting to connect to a server running version %i of the game '%s', but you only have version %i installed. Continue anyway?" + +msgid "IDS_CONN_FULL" +msgstr "Can't connect to %s, server is full." + +msgid "IDS_MOD_UNZIP" +msgstr "Do you want to uncompress the files for game '%s'?" + +msgid "IDS_FAVSVRS_CORRUPT" +msgstr "The server data file favsvrs.dat appears to be corrupt.\n\nYou can request a new list of servers by pressing the Update button.\n\nDo you want to remove the corrupt file (you will have to re-enter your 'favorites' if you remove the file)?" + +msgid "UPDATE_DISABLED" +msgstr "Disabled" + +msgid "UPDATE_ENABLED" +msgstr "Enabled" + +msgid "UPDATE_CORRUPT" +msgstr "Corrupt" + +msgid "UPDATE_NOTINSTALLED" +msgstr "Not installed" + +msgid "UPDATE_PENDING_INSTALL" +msgstr "Install (pending)" + +msgid "UPDATE_PENDING_REINSTALL" +msgstr "Reinstall (pending)" + +msgid "UPDATE_PENDING_UNINSTALL" +msgstr "Uninstall (pending)" + +msgid "UPDATE_PENDING_AUTOINSTALL" +msgstr "Auto-install (pending)" + +msgid "UPDATE_PENDING_DISABLE" +msgstr "Disable (pending)" + +msgid "UPDATE_PENDING_RETAIN" +msgstr "Retain (pending)" + +msgid "PING_ICE" +msgstr "Unavailable (ICE)" + +msgid "PING_ICE_S" +msgstr "ICE" + +msgid "PING_IN_MS" +msgstr "%d ms." \ No newline at end of file diff --git a/zpak001.pk3dir/particles/weapon_egon.cfg b/zpak001.pk3dir/particles/weapon_egon.cfg index 9230c3e..eff78e8 100644 --- a/zpak001.pk3dir/particles/weapon_egon.cfg +++ b/zpak001.pk3dir/particles/weapon_egon.cfg @@ -1,4 +1,4 @@ -r_part beam +r_part trail { texture "classicparticle" tcoords 0 0 16 16 32 @@ -12,7 +12,7 @@ r_part beam blend adda rgbf 0.5 0.5 1.0 } -r_part +beam +r_part +trail { texture "particles/fteparticlefont.tga" tcoords 97 97 191 191 256 @@ -26,7 +26,7 @@ r_part +beam type beam } -r_part trail +r_part trail_old { texture "classicparticle" tcoords 0 0 16 16 32 @@ -41,3 +41,17 @@ r_part trail rgbf 0.1 0.1 0.5 die 0.1 } + + +r_part trail_world +{ + lighttime 1 + lightradius 350 + lightradiusfade 300 + lightrgb 1.0 0.5 0.4 + lightrgbfade 0.36 0.19 0.19 + count 0 0 2 + spawnorg 0 32 + orgadd 32 + model "sprites/xspark1.spr" framestart=0 framecount=11 framerate=20 additive scalemin=1.0 scalemax=1.0 +} diff --git a/zpak001.pk3dir/scripts/achievements.txt b/zpak001.pk3dir/scripts/achievements.txt new file mode 100644 index 0000000..23a6747 --- /dev/null +++ b/zpak001.pk3dir/scripts/achievements.txt @@ -0,0 +1,9 @@ +#define ACHIEVEMENT_01 1 + +achievement achievement01 +{ + "name" "Test Achievement" + "description" "This is a test achievement." + "id" "ACHIEVEMENT_01" + "mtr_icon" "missing" +} diff --git a/zpak001.pk3dir/scripts/drawdebug.shader b/zpak001.pk3dir/scripts/drawdebug.shader new file mode 100644 index 0000000..5280d3e --- /dev/null +++ b/zpak001.pk3dir/scripts/drawdebug.shader @@ -0,0 +1,22 @@ +debugcone +{ + cull none + + { + rgbGen vertex + alphaGen vertex + blendFunc blend + } +} + +// the engine in Half-Life appears to hard-code hiding `TRIGGER` +trigger +{ + surfaceParm nodraw +} + +// ... and `AAATRIGGER` +aaatrigger +{ + surfaceParm nodraw +} diff --git a/zpak001.pk3dir/scripts/drawportal.shader b/zpak001.pk3dir/scripts/drawportal.shader new file mode 100644 index 0000000..3452b49 --- /dev/null +++ b/zpak001.pk3dir/scripts/drawportal.shader @@ -0,0 +1,15 @@ +//used on the front face of the portal entities. +warpzone +{ + sort portal + surfaceparm nomarks + surfaceparm nodlight +} + +//used on side+back faces, just to hide them. +nodraw +{ + surfaceparm nomarks + surfaceparm nodlight + surfaceparm nodraw +} \ No newline at end of file diff --git a/zpak001.pk3dir/scripts/maptweaks.txt b/zpak001.pk3dir/scripts/maptweaks.txt new file mode 100644 index 0000000..ca928f5 --- /dev/null +++ b/zpak001.pk3dir/scripts/maptweaks.txt @@ -0,0 +1,30 @@ +mutliplayer +{ + when-cvar deathmatch equals 1 + replace weapon_crowbar weapon_crowbar_mp + replace weapon_357 weapon_357_mp + replace weapon_python weapon_python_mp + replace weapon_9mmAR weapon_9mmAR_mp + replace weapon_mp5 weapon_mp5_mp + replace weapon_crossbow weapon_crossbow_mp + replace weapon_egon weapon_egon_mp + replace weapon_gauss weapon_gauss_mp + replace weapon_handgrenade weapon_handgrenade_mp + replace weapon_hornetgun weapon_hornetgun_mp + replace weapon_rpg weapon_rpg_mp + replace weapon_satchel weapon_satchel_mp + replace weapon_shotgun weapon_shotgun_mp + replace weapon_snark weapon_snark_mp + replace weapon_tripmine weapon_tripmine_mp +} + +deprecated +{ + replace weapon_python weapon_357 + replace weapon_mp5 weapon_9mmAR + replace weapon_glock weapon_9mmhandgun + replace ammo_mp5clip ammo_9mmAR + replace ammo_9mmARclip ammo_9mmAR + replace ammo_glockclip ammo_9mmclip + replace ammo_mp5grenades ammo_ARgrenades +} diff --git a/zpak001.pk3dir/sound/items_valve.sndshd b/zpak001.pk3dir/sound/items_valve.sndshd index bccd32c..a993d65 100644 --- a/zpak001.pk3dir/sound/items_valve.sndshd +++ b/zpak001.pk3dir/sound/items_valve.sndshd @@ -18,6 +18,11 @@ item.healthkit sample items/smallmedkit1.wav } +item.suit +{ + sample fvox/bell.wav +} + item.respawn { sample items/suitchargeok1.wav diff --git a/zpak001.pk3dir/sound/weapons_valve.sndshd b/zpak001.pk3dir/sound/weapons_valve.sndshd index 6467321..6e76980 100644 --- a/zpak001.pk3dir/sound/weapons_valve.sndshd +++ b/zpak001.pk3dir/sound/weapons_valve.sndshd @@ -25,6 +25,7 @@ weapon_crossbow.fire alerts sample weapons/xbow_fire1.wav } + weapon_crossbow.empty { sample weapons/357_cock1.wav @@ -244,3 +245,14 @@ weapon_egon.empty sample weapons/357_cock1.wav } +weapon_egon.fire +{ + sample weapons/egon_windup2.wav +} + +weapon_egon.fire_loop +{ + sample weapons/egon_run3.wav +} + +