diff --git a/README.md b/README.md index 9760ff3..eac62b1 100644 --- a/README.md +++ b/README.md @@ -44,14 +44,19 @@ Here's the quick and dirty instructions for those unfamilar: ``` $ git clone https://code.idtech.space/vera/nuclide Nuclide-SDK $ cd Nuclide-SDK -$ ./build_engine.sh # (only required if you don't have an up-to-date FTEQW & FTEQCC in your PATH) + +# (only required if you don't have an up-to-date FTEQW & FTEQCC in your PATH) +$ make update +$ make fteqw + +# build the menu (from valve/) then our own game-logic: $ git clone https://code.idtech.space/fn/valve valve $ git clone https://code.idtech.space/fn/cstrike cstrike -$ SKIP_UPDATE=1 SKIP_RADIANT=1 ./build_game.sh valve -$ SKIP_UPDATE=1 SKIP_RADIANT=1 ./build_game.sh cstrike +$ make game GAME=valve +$ make game GAME=cstrike ``` -You can also issue `make` inside `valve/src/` and `cstrike/src`, but it won't build an `entities.def` file for use in Radiant (level editor family). +You can also issue `make` inside `valve/src/` and `cstrike/src`, but it won't generate some additional helper files. ** !! You need to also provide data-files !! ** diff --git a/src/client/game_event.qc b/src/client/game_event.qc index c30d962..ac516cb 100644 --- a/src/client/game_event.qc +++ b/src/client/game_event.qc @@ -59,15 +59,6 @@ switch (fHeader) { case EV_VIEWMODEL: View_PlayAnimation(readbyte()); break; - case EV_WEAPON_PICKUP: - int w = readbyte(); - - if (autocvar_cl_autoweaponswitch == 1) { - sendevent("PlayerSwitchWeapon", "i", w); - } - - HUD_WeaponPickupNotify(w); - break; case EV_RADIOMSG: Radio_PlayMessage(readbyte()); break; diff --git a/src/client/hud.qc b/src/client/hud.qc index 0a285d9..7950595 100644 --- a/src/client/hud.qc +++ b/src/client/hud.qc @@ -116,12 +116,12 @@ HUD_DrawNums(float fNumber, vector vecPos, float fAlpha, vector vColor) /* timer */ void -HUD_DrawTimer(int NSClientSpectator) +HUD_DrawTimer(int ncSpectator) { int iMinutes, iSeconds, iTens, iUnits; vector time_pos; - if (NSClientSpectator) { + if (ncSpectator) { time_pos = g_hudmins + [(g_hudres[0] / 2) - 62, 16]; } else { time_pos = g_hudmins + [(g_hudres[0] / 2) - 62, g_hudres[1] - 42]; diff --git a/src/client/hud_ammonotify.qc b/src/client/hud_ammonotify.qc index 6e3f43b..330aa19 100644 --- a/src/client/hud_ammonotify.qc +++ b/src/client/hud_ammonotify.qc @@ -99,7 +99,7 @@ HUD_AmmoNotify_Insert(int type, int count) /* called whenever we should check for pickup updates */ void -HUD_AmmoNotify_Check(NSClientPlayer pl) +HUD_AmmoNotify_Check(ncPlayer pl) { #if 0 HUD_AmmoNotify_Insert(0, pl.ammo_50ae - pl.ammo_50ae_net); @@ -119,6 +119,6 @@ HUD_AmmoNotify_Check(NSClientPlayer pl) } void -HUD_ItemNotify_Check(NSClientPlayer pl) +HUD_ItemNotify_Check(ncPlayer pl) { } \ No newline at end of file diff --git a/src/client/progs.src b/src/client/progs.src index 73a5c38..0331690 100644 --- a/src/client/progs.src +++ b/src/client/progs.src @@ -1,6 +1,7 @@ #pragma target fte_5768 //#pragma flag enable assumeint #pragma progs_dat "../../csprogs.dat" +#pragma forcecrc 54730 #define CSQC #define CLIENT diff --git a/src/client/radar.qc b/src/client/radar.qc index dccac6d..74357f6 100644 --- a/src/client/radar.qc +++ b/src/client/radar.qc @@ -17,14 +17,14 @@ #define CSRADAR_DISTANCE 1024 var string g_cs_radar; -var NSRadar g_csRadar; +var ncRadar g_csRadar; void Radar_Init(void) { g_cs_radar = spriteframe("sprites/radar640.spr", 0, 0.0f); - g_csRadar = NSRadar::InitEmpty(); + g_csRadar = ncRadar::InitEmpty(); } void diff --git a/src/client/vgui_buymenu.qc b/src/client/vgui_buymenu.qc index dcd7b16..04cfe5e 100644 --- a/src/client/vgui_buymenu.qc +++ b/src/client/vgui_buymenu.qc @@ -14,10 +14,10 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -static VGUIWindow winBuyMenu; -static VGUILabel lblCategoryDescr; +static vguiWindow winBuyMenu; +static vguiLabel lblCategoryDescr; -class CSBuyMenuButton:VGUIButton +class CSBuyMenuButton:vguiButton { void CSBuyMenuButton(void); @@ -110,9 +110,9 @@ VGUI_BuyMenu(void) static CSBuyMenuButton btnPrimAmmo; static CSBuyMenuButton btnSecAmmo; static CSBuyMenuButton btnEquipment; - static VGUIButton btnCancel; - static VGUILabel lblSelectTeam; - static VGUIFrame frmBuyInfo; + static vguiButton btnCancel; + static vguiLabel lblSelectTeam; + static vguiFrame frmBuyInfo; static void VGUI_BuyMenu_Cancel(void) { winBuyMenu.Hide(); @@ -122,21 +122,21 @@ VGUI_BuyMenu(void) vector btnpos = [40,80]; initialized = TRUE; - winBuyMenu = spawn(VGUIWindow); + winBuyMenu = spawn(vguiWindow); winBuyMenu.SetSize('640 480'); - winBuyMenu.SetStyleMask(VGUIWindowBorderless | VGUIWindowFullscreen); + winBuyMenu.SetStyleMask(vguiWindowBorderless | vguiWindowFullscreen); - lblSelectTeam = spawn(VGUILabel); + lblSelectTeam = spawn(vguiLabel); lblSelectTeam.SetTitle(Titles_GetTextBody("Title_select_category_of_purchase")); lblSelectTeam.SetTextSize(19); lblSelectTeam.SetPos([40, 38]); lblSelectTeam.SetSize('400 24'); - frmBuyInfo = spawn(VGUIFrame); + frmBuyInfo = spawn(vguiFrame); frmBuyInfo.SetPos('176 80'); frmBuyInfo.SetSize('200 100'); - lblCategoryDescr = spawn(VGUILabel); + lblCategoryDescr = spawn(vguiLabel); lblCategoryDescr.SetTitle(""); lblCategoryDescr.SetPos('185 90'); lblCategoryDescr.SetSize('375 250'); diff --git a/src/client/vgui_buypages.qc b/src/client/vgui_buypages.qc index d3a0dbd..31507a5 100644 --- a/src/client/vgui_buypages.qc +++ b/src/client/vgui_buypages.qc @@ -14,10 +14,10 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -static VGUIWindow winBuyMenuPage; -static VGUILabel lblBuyItemDescr; -static VGUILabel lblBuyItemTitle; -static VGUIPic imgBuyItemPic; +static vguiWindow winBuyMenuPage; +static vguiLabel lblBuyItemDescr; +static vguiLabel lblBuyItemTitle; +static vguiPic imgBuyItemPic; /* these id's are for the button tags only */ typedef enum @@ -104,7 +104,7 @@ const buyItems_t g_buyItemList [] = { string g_butItemDescr[29]; -class CSBuyItemButton:VGUIButton +class CSBuyItemButton:vguiButton { void CSBuyItemButton(void); @@ -150,9 +150,9 @@ void VGUI_BuyMenu_Page(int buyPage) { static int initialized; - static VGUIButton btnCancel; - static VGUIFrame frmBuyInfo; - static VGUILabel lblBuyScreenTitle; + static vguiButton btnCancel; + static vguiFrame frmBuyInfo; + static vguiLabel lblBuyScreenTitle; static CSBuyItemButton btnBuyItem1; static CSBuyItemButton btnBuyItem2; @@ -176,29 +176,29 @@ VGUI_BuyMenu_Page(int buyPage) vector btnpos = [40,80]; initialized = TRUE; - winBuyMenuPage = spawn(VGUIWindow); + winBuyMenuPage = spawn(vguiWindow); winBuyMenuPage.SetSize([640,480]); - winBuyMenuPage.SetStyleMask(VGUIWindowBorderless | VGUIWindowFullscreen); + winBuyMenuPage.SetStyleMask(vguiWindowBorderless | vguiWindowFullscreen); - lblBuyScreenTitle = spawn(VGUILabel); + lblBuyScreenTitle = spawn(vguiLabel); lblBuyScreenTitle.SetTitle(Titles_GetTextBody("Title_select_category_of_purchase")); lblBuyScreenTitle.SetTextSize(19); lblBuyScreenTitle.SetPos([40, 38]); lblBuyScreenTitle.SetSize('400 24'); - frmBuyInfo = spawn(VGUIFrame); + frmBuyInfo = spawn(vguiFrame); frmBuyInfo.SetPos('176 80'); frmBuyInfo.SetSize('424 312'); - lblBuyItemDescr = spawn(VGUILabel); + lblBuyItemDescr = spawn(vguiLabel); lblBuyItemDescr.SetTitle(""); lblBuyItemDescr.SetPos('185 190'); lblBuyItemDescr.SetSize('408 250'); - imgBuyItemPic = spawn(VGUIPic); + imgBuyItemPic = spawn(vguiPic); imgBuyItemPic.SetPos([260, 130]); - lblBuyItemTitle = spawn(VGUILabel); + lblBuyItemTitle = spawn(vguiLabel); lblBuyItemTitle.SetPos([185, 96]); lblBuyItemTitle.SetTextSize(19); lblBuyItemTitle.SetSize([390, 24]); @@ -257,7 +257,7 @@ VGUI_BuyMenu_Page(int buyPage) btnBuyItem9.SetKeyEquivalent("9"); btnBuyItem9.SetFunc(VGUI_BuyMenu_Pistols_Cancel); - btnCancel = spawn(VGUIButton); + btnCancel = spawn(vguiButton); btnCancel.SetTitle(Titles_GetTextBody("Menu_Cancel")); btnCancel.SetPos('40 368'); btnCancel.SetSize('124 24'); diff --git a/src/client/vgui_changeclass_ct.qc b/src/client/vgui_changeclass_ct.qc index f471a6b..affd1c8 100644 --- a/src/client/vgui_changeclass_ct.qc +++ b/src/client/vgui_changeclass_ct.qc @@ -31,13 +31,13 @@ CSClassCT_Init(void) g_classDescrAuto = textfile_to_string("classes/autoselect.txt"); } -static VGUIWindow winClassSelectionCT; -static VGUIPic imgClassPreview; -static VGUILabel lblClassTitle; -static VGUILabel lblClassDescription; -static VGUILabel lblClassCounter; +static vguiWindow winClassSelectionCT; +static vguiPic imgClassPreview; +static vguiLabel lblClassTitle; +static vguiLabel lblClassDescription; +static vguiLabel lblClassCounter; -class CSClassButtonCT:VGUIButton +class CSClassButtonCT:vguiButton { void CSClassButtonCT(void); @@ -115,8 +115,8 @@ void VGUI_ChooseClassCT(void) { static int initialized; - static VGUILabel lblSelectClass; - static VGUIFrame frmClassInfo; + static vguiLabel lblSelectClass; + static vguiFrame frmClassInfo; static CSClassButtonCT btnSeal; static CSClassButtonCT btnGSG9; static CSClassButtonCT btnSAS; @@ -129,33 +129,33 @@ VGUI_ChooseClassCT(void) CSClassCT_Init(); - winClassSelectionCT = spawn(VGUIWindow); + winClassSelectionCT = spawn(vguiWindow); winClassSelectionCT.SetSize([640, 480]); - winClassSelectionCT.SetStyleMask(VGUIWindowBorderless | VGUIWindowFullscreen); + winClassSelectionCT.SetStyleMask(vguiWindowBorderless | vguiWindowFullscreen); - lblSelectClass = spawn(VGUILabel); + lblSelectClass = spawn(vguiLabel); lblSelectClass.SetTitle(Titles_GetTextBody("Title_ct_model_selection")); lblSelectClass.SetTextSize(19); lblSelectClass.SetPos([40, 38]); lblSelectClass.SetSize([400, 24]); - frmClassInfo = spawn(VGUIFrame); + frmClassInfo = spawn(vguiFrame); frmClassInfo.SetPos([176, 80]); frmClassInfo.SetSize([424, 312]); - imgClassPreview = spawn(VGUIPic); + imgClassPreview = spawn(vguiPic); imgClassPreview.SetPos([190, 90]); - lblClassTitle = spawn(VGUILabel); + lblClassTitle = spawn(vguiLabel); lblClassTitle.SetPos([338, 90]); lblClassTitle.SetTextSize(19); lblClassTitle.SetSize([320, 24]); - lblClassCounter = spawn(VGUILabel); + lblClassCounter = spawn(vguiLabel); lblClassCounter.SetPos([338, 90 + 32]); lblClassCounter.SetSize([320, 18]); - lblClassDescription = spawn(VGUILabel); + lblClassDescription = spawn(vguiLabel); lblClassDescription.SetPos([338, 90 + 32 + 32]); lblClassDescription.SetSize([250, 240]); diff --git a/src/client/vgui_changeclass_t.qc b/src/client/vgui_changeclass_t.qc index e08a9d8..d0acd13 100644 --- a/src/client/vgui_changeclass_t.qc +++ b/src/client/vgui_changeclass_t.qc @@ -32,13 +32,13 @@ CSClassT_Init(void) g_classDescrAuto = textfile_to_string("classes/autoselect.txt"); } -static VGUIWindow winClassSelection; -static VGUIPic imgClassPreview; -static VGUILabel lblClassTitle; -static VGUILabel lblClassDescription; -static VGUILabel lblClassCounter; +static vguiWindow winClassSelection; +static vguiPic imgClassPreview; +static vguiLabel lblClassTitle; +static vguiLabel lblClassDescription; +static vguiLabel lblClassCounter; -class CSClassButtonT:VGUIButton +class CSClassButtonT:vguiButton { void CSClassButtonT(void); @@ -116,8 +116,8 @@ void VGUI_ChooseClassT(void) { static int initialized; - static VGUILabel lblSelectClass; - static VGUIFrame frmClassInfo; + static vguiLabel lblSelectClass; + static vguiFrame frmClassInfo; static CSClassButtonT btnPhoenix; static CSClassButtonT btnLeet; static CSClassButtonT btnArctic; @@ -130,33 +130,33 @@ VGUI_ChooseClassT(void) CSClassT_Init(); - winClassSelection = spawn(VGUIWindow); + winClassSelection = spawn(vguiWindow); winClassSelection.SetSize([640, 480]); - winClassSelection.SetStyleMask(VGUIWindowBorderless | VGUIWindowFullscreen); + winClassSelection.SetStyleMask(vguiWindowBorderless | vguiWindowFullscreen); - lblSelectClass = spawn(VGUILabel); + lblSelectClass = spawn(vguiLabel); lblSelectClass.SetTitle(Titles_GetTextBody("Title_terrorist_model_selection")); lblSelectClass.SetTextSize(19); lblSelectClass.SetPos([40, 38]); lblSelectClass.SetSize([400, 24]); - frmClassInfo = spawn(VGUIFrame); + frmClassInfo = spawn(vguiFrame); frmClassInfo.SetPos([176, 80]); frmClassInfo.SetSize([424, 312]); - imgClassPreview = spawn(VGUIPic); + imgClassPreview = spawn(vguiPic); imgClassPreview.SetPos([190, 90]); - lblClassTitle = spawn(VGUILabel); + lblClassTitle = spawn(vguiLabel); lblClassTitle.SetPos([338, 90]); lblClassTitle.SetTextSize(19); lblClassTitle.SetSize([320, 24]); - lblClassCounter = spawn(VGUILabel); + lblClassCounter = spawn(vguiLabel); lblClassCounter.SetPos([338, 90 + 32]); lblClassCounter.SetSize([320, 18]); - lblClassDescription = spawn(VGUILabel); + lblClassDescription = spawn(vguiLabel); lblClassDescription.SetPos([338, 90 + 32 + 32]); lblClassDescription.SetSize([250, 240]); diff --git a/src/client/vgui_chooseteam.qc b/src/client/vgui_chooseteam.qc index b8b6541..43eb2b7 100644 --- a/src/client/vgui_chooseteam.qc +++ b/src/client/vgui_chooseteam.qc @@ -14,7 +14,7 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -static VGUIWindow winChooseTeam; +static vguiWindow winChooseTeam; string VGUI_ChooseTeam_MapInfo(void) @@ -63,14 +63,14 @@ void VGUI_ChooseTeam(void) { static int initialized; - static VGUIButton btnJoinT; - static VGUIButton btnJoinCT; - static VGUIButton btnAutoAssign; - static VGUIButton btnGoSpectator; - static VGUIFrame frmMapInfo; - static VGUILabel lblSelectTeam; - static VGUILabel lblMapName; - static VGUILabel lblMapInfo; + static vguiButton btnJoinT; + static vguiButton btnJoinCT; + static vguiButton btnAutoAssign; + static vguiButton btnGoSpectator; + static vguiFrame frmMapInfo; + static vguiLabel lblSelectTeam; + static vguiLabel lblMapName; + static vguiLabel lblMapInfo; static void VGUI_ChooseTeam_CT(void) { localcmd("cmd joinTeam 2\n"); @@ -97,53 +97,53 @@ VGUI_ChooseTeam(void) vector btnpos = [40,80]; initialized = TRUE; - winChooseTeam = spawn(VGUIWindow); + winChooseTeam = spawn(vguiWindow); winChooseTeam.SetSize('640 480'); - winChooseTeam.SetStyleMask(VGUIWindowBorderless | VGUIWindowFullscreen); + winChooseTeam.SetStyleMask(vguiWindowBorderless | vguiWindowFullscreen); - lblSelectTeam = spawn(VGUILabel); + lblSelectTeam = spawn(vguiLabel); lblSelectTeam.SetTitle("Select Your Team"); lblSelectTeam.SetTextSize(19); lblSelectTeam.SetPos([40, 38]); lblSelectTeam.SetSize('400 24'); - frmMapInfo = spawn(VGUIFrame); + frmMapInfo = spawn(vguiFrame); frmMapInfo.SetPos('176 80'); frmMapInfo.SetSize('424 312'); - lblMapName = spawn(VGUILabel); + lblMapName = spawn(vguiLabel); lblMapName.SetTitle(mapname); lblMapName.SetTextSize(19); lblMapName.SetPos('194 105'); lblMapName.SetSize('250 312'); - lblMapInfo = spawn(VGUILabel); + lblMapInfo = spawn(vguiLabel); lblMapInfo.SetTitle(VGUI_ChooseTeam_MapInfo()); lblMapInfo.SetPos('194 129'); lblMapInfo.SetSize('375 250'); - btnJoinT = spawn(VGUIButton); + btnJoinT = spawn(vguiButton); btnJoinT.SetTitle("Terrorist Forces"); btnJoinT.SetPos('40 80'); btnJoinT.SetSize('124 24'); btnJoinT.SetKeyEquivalent("1"); btnJoinT.SetFunc(VGUI_ChooseTeam_T); - btnJoinCT = spawn(VGUIButton); + btnJoinCT = spawn(vguiButton); btnJoinCT.SetTitle("CT Forces"); btnJoinCT.SetPos('40 112'); btnJoinCT.SetSize('124 24'); btnJoinCT.SetKeyEquivalent("2"); btnJoinCT.SetFunc(VGUI_ChooseTeam_CT); - btnAutoAssign = spawn(VGUIButton); + btnAutoAssign = spawn(vguiButton); btnAutoAssign.SetTitle("Auto Assign"); btnAutoAssign.SetPos('40 208'); btnAutoAssign.SetSize('124 24'); btnAutoAssign.SetKeyEquivalent("5"); btnAutoAssign.SetFunc(VGUI_ChooseTeam_Auto); - btnGoSpectator = spawn(VGUIButton); + btnGoSpectator = spawn(vguiButton); btnGoSpectator.SetTitle("Spectate"); btnGoSpectator.SetPos('40 272'); btnGoSpectator.SetSize('124 24'); diff --git a/src/client/vgui_motd.qc b/src/client/vgui_motd.qc index 2293217..c8b9634 100644 --- a/src/client/vgui_motd.qc +++ b/src/client/vgui_motd.qc @@ -18,11 +18,11 @@ void VGUI_ShowMOTD(void) { static int initialized; - static VGUIButton winMotdClose; - static VGUIWindow winMotd; - static VGUILabel winMotdHostname; - static VGUILabel winMotdBody; - static VGUIFrame frmWindow; + static vguiButton winMotdClose; + static vguiWindow winMotd; + static vguiLabel winMotdHostname; + static vguiLabel winMotdBody; + static vguiFrame frmWindow; static void VGUI_ShowMOTD_Close(void) { @@ -35,27 +35,27 @@ VGUI_ShowMOTD(void) if (!initialized) { initialized = TRUE; - winMotd = spawn(VGUIWindow); + winMotd = spawn(vguiWindow); winMotd.SetTitle("Message Of The Day"); - winMotd.SetStyleMask(VGUIWindowBorderless | VGUIWindowFullscreen); + winMotd.SetStyleMask(vguiWindowBorderless | vguiWindowFullscreen); winMotd.SetSize('424 312'); - frmWindow = spawn(VGUIFrame); + frmWindow = spawn(vguiFrame); frmWindow.SetPos('0 0'); frmWindow.SetSize('424 312'); - winMotdClose = spawn(VGUIButton); + winMotdClose = spawn(vguiButton); winMotdClose.SetTitle("OK"); winMotdClose.SetPos([16, 266]); winMotdClose.SetSize([160, 30]); winMotdClose.SetFunc(VGUI_ShowMOTD_Close); - winMotdHostname = spawn(VGUILabel); + winMotdHostname = spawn(vguiLabel); winMotdHostname.SetTitle(serverkey("hostname")); winMotdHostname.SetTextSize(19); winMotdHostname.SetPos([16, 20]); - winMotdBody = spawn(VGUILabel); + winMotdBody = spawn(vguiLabel); winMotdBody.SetTitle(MOTD_GetTextBody()); winMotdBody.SetPos([16, 48]); winMotdBody.SetSize([392, 210]); diff --git a/src/client/vgui_spectator.qc b/src/client/vgui_spectator.qc index e77ac54..e5e17ed 100644 --- a/src/client/vgui_spectator.qc +++ b/src/client/vgui_spectator.qc @@ -18,7 +18,7 @@ #define SPEC_FG_COL [0.561,0.561,0.212] class -CSSpectateHUD:VGUIWidget +CSSpectateHUD:vguiWidget { void CSSpectateHUD(void); @@ -39,7 +39,7 @@ CSSpectateHUD::Draw(void) float flSep; string strText; int iMinutes, iSeconds; - NSClientSpectator spec = (NSClientSpectator)pSeat->m_ePlayer; + ncSpectator spec = (ncSpectator)pSeat->m_ePlayer; float moneyValue = getplayerkeyfloat(player_localnum, "*money"); /* parts on top and bottom */ diff --git a/src/progs.src b/src/progs.src index 2c2a868..f3e407d 100755 --- a/src/progs.src +++ b/src/progs.src @@ -1,2 +1,3 @@ #pragma sourcefile client/progs.src #pragma sourcefile server/progs.src +#pragma sourcefile rules/counterstrike.qc diff --git a/src/rules/Makefile b/src/rules/Makefile index ed59d91..fb8d994 100644 --- a/src/rules/Makefile +++ b/src/rules/Makefile @@ -2,4 +2,5 @@ QCC=fteqcc all: mkdir -pv ../../zpak001.pk3dir/progs/ + $(QCC) deathmatch.qc $(QCC) counterstrike.qc diff --git a/src/rules/counterstrike.qc b/src/rules/counterstrike.qc index 48f75a6..7abe00d 100644 --- a/src/rules/counterstrike.qc +++ b/src/rules/counterstrike.qc @@ -32,6 +32,16 @@ typedef enum STATE_OVER = 5i } csGameState_t; +string g_csGameStateName[] = +{ + "STATE_INACTIVE", + "STATE_COMMENCING", + "STATE_FREEZE", + "STATE_ACTIVE", + "STATE_END", + "STATE_OVER" +}; + var csGameState_t g_csGameState; var float g_cs_gametime; var int g_csSwapTeamRoundCounter; @@ -117,6 +127,12 @@ GameState(void) return (g_csGameState); } +string +GameStateName(void) +{ + return (g_csGameStateName[g_csGameState]); +} + float GameTime(void) { @@ -461,7 +477,7 @@ Round_TimerUpdate(void) /* our continously running down timer */ g_cs_gametime = bound(0.0f, g_cs_gametime - frametime, g_cs_gametime); - //printf("%f\n", g_cs_gametime); + //printf("%f %S\n", GameTime(), GameStateName()); /* if the round is over or the game is done with... */ if (GameState() == STATE_COMMENCING || GameState() == STATE_END) { @@ -814,6 +830,7 @@ CodeCallback_FrameStart(void) serverinfo.SetInteger("cs_roundsplayed", 0i); return; } + /* should only ever run when players are actually present. */ Round_TimerUpdate(); @@ -912,17 +929,17 @@ CodeCallback_MaxItemPerSlot(int weaponSlot) } void -CodeCallback_PlayerSpawn(void) +CodeCallback_PlayerSpawn(entity playerEntity) { /* first course of action is to kick players into spectator cam */ - CS_GoSpectator(self); + CS_GoSpectator(playerEntity); } void -CodeCallback_PlayerDisconnect(void) +CodeCallback_PlayerDisconnect(entity playerEntity) { /* if they leave, timeout, get kicked (or banned), we gotta know! */ - CS_PlayerRemovedFromGame(self); + CS_PlayerRemovedFromGame(playerEntity); } void @@ -932,18 +949,18 @@ CodeCallback_PlayerDamage(entity inflictor, entity attacker) } void -CodeCallback_PlayerKilled(entity inflictor, entity attacker, string weapon) +CodeCallback_PlayerKilled(entity playerEntity, entity inflictor, entity attacker, string weapon) { - combat.Obituary(self.netname, attacker.netname, weapon, ""); + combat.Obituary(playerEntity.netname, attacker.netname, weapon, ""); /* death-counter */ - self.deaths++; + playerEntity.deaths++; /* update player scores */ if (ents.isPlayer(attacker)) { - if (self == attacker) { + if (playerEntity == attacker) { attacker.frags--; - } else if (self.team == attacker.team) { + } else if (playerEntity.team == attacker.team) { attacker.frags--; Money_AddMoney(attacker, cvars.GetInteger("fcs_penalty_teamkill")); } else { @@ -953,29 +970,29 @@ CodeCallback_PlayerKilled(entity inflictor, entity attacker, string weapon) } /* scoreboard death icon */ - if (ents.isPlayer(self)) { - userinfo.SetString(self, "*icon1", "d_skull"); - userinfo.SetString(self, "*icon1_r", "1"); - userinfo.SetString(self, "*icon1_g", "0"); - userinfo.SetString(self, "*icon1_b", "0"); + if (ents.isPlayer(playerEntity)) { + userinfo.SetString(playerEntity, "*icon1", "d_skull"); + userinfo.SetString(playerEntity, "*icon1_r", "1"); + userinfo.SetString(playerEntity, "*icon1_g", "0"); + userinfo.SetString(playerEntity, "*icon1_b", "0"); /* turn into a fake spec */ - ents.Input(self, "Spectate", "", world); + ents.Input(playerEntity, "Spectate", "", world); } - CS_PlayerRemovedFromGame(self); + CS_PlayerRemovedFromGame(playerEntity); } bool -CodeCallback_CallRequestTeam(int teamNum) +CodeCallback_CallRequestTeam(entity playerEntity, int teamNum) { /* can't switch teams while alive. */ - if (ents.isAlive(self) == true) { + if (ents.isAlive(playerEntity) == true) { return (false); } /* can't switch teams while we're a VIP */ - if (IsVIP(self) == true) { + if (IsVIP(playerEntity) == true) { return (false); } @@ -986,13 +1003,13 @@ CodeCallback_CallRequestTeam(int teamNum) switch (teamNum) { case TEAM_T: - ents.Input(self, "SetTeam", "1", self); + ents.Input(playerEntity, "SetTeam", "1", playerEntity); break; case TEAM_CT: - ents.Input(self, "SetTeam", "2", self); + ents.Input(playerEntity, "SetTeam", "2", playerEntity); break; default: - CS_GoSpectator(self); + CS_GoSpectator(playerEntity); return (true); } @@ -1000,57 +1017,57 @@ CodeCallback_CallRequestTeam(int teamNum) } bool -CodeCallback_ClientCommand(string command) +CodeCallback_ClientCommand(entity playerEntity, string command) { float commandArgs = tokenize(command); switch (argv(0)) { /* class selection */ case "terror": - SetTClass(self, 1); - CodeCallback_CallRequestTeam(TEAM_T); - CS_RequestSpawn(self); + SetTClass(playerEntity, 1); + CodeCallback_CallRequestTeam(playerEntity, TEAM_T); + CS_RequestSpawn(playerEntity); break; case "leet": - SetTClass(self, 2); - CodeCallback_CallRequestTeam(TEAM_T); - CS_RequestSpawn(self); + SetTClass(playerEntity, 2); + CodeCallback_CallRequestTeam(playerEntity, TEAM_T); + CS_RequestSpawn(playerEntity); break; case "arctic": - SetTClass(self, 3); - CodeCallback_CallRequestTeam(TEAM_T); - CS_RequestSpawn(self); + SetTClass(playerEntity, 3); + CodeCallback_CallRequestTeam(playerEntity, TEAM_T); + CS_RequestSpawn(playerEntity); break; case "guerilla": - SetTClass(self, 4); - CodeCallback_CallRequestTeam(TEAM_T); - CS_RequestSpawn(self); + SetTClass(playerEntity, 4); + CodeCallback_CallRequestTeam(playerEntity, TEAM_T); + CS_RequestSpawn(playerEntity); break; case "urban": - SetCTClass(self, 1); - CodeCallback_CallRequestTeam(TEAM_CT); - CS_RequestSpawn(self); + SetCTClass(playerEntity, 1); + CodeCallback_CallRequestTeam(playerEntity, TEAM_CT); + CS_RequestSpawn(playerEntity); break; case "gsg9": - SetCTClass(self, 2); - CodeCallback_CallRequestTeam(TEAM_CT); - CS_RequestSpawn(self); + SetCTClass(playerEntity, 2); + CodeCallback_CallRequestTeam(playerEntity, TEAM_CT); + CS_RequestSpawn(playerEntity); break; case "sas": - SetCTClass(self, 3); - CodeCallback_CallRequestTeam(TEAM_CT); - CS_RequestSpawn(self); + SetCTClass(playerEntity, 3); + CodeCallback_CallRequestTeam(playerEntity, TEAM_CT); + CS_RequestSpawn(playerEntity); break; case "gign": - SetCTClass(self, 4); - CodeCallback_CallRequestTeam(TEAM_CT); - CS_RequestSpawn(self); + SetCTClass(playerEntity, 4); + CodeCallback_CallRequestTeam(playerEntity, TEAM_CT); + CS_RequestSpawn(playerEntity); break; case "buy": - Money_Purchase(self, argv(1)); + Money_Purchase(playerEntity, argv(1)); break; case "buyammo": - Money_PurchaseAmmoForSlot(self, stoi(argv(1))); + Money_PurchaseAmmoForSlot(playerEntity, stoi(argv(1))); break; default: return (false); @@ -1060,13 +1077,13 @@ CodeCallback_ClientCommand(string command) } bool -CodeCallback_ImpulseCommand(float impulseNum) +CodeCallback_ImpulseCommand(entity playerEntity, float impulseNum) { switch (impulseNum) { /* this is how Half-Life triggers the flashlight. `impulse 100`. */ case 100: if (AllowFlashlight() == true) { - ents.Input(self, "UseItem", "item_suit", self); + ents.Input(playerEntity, "UseItem", "item_suit", playerEntity); } break; default: diff --git a/src/rules/deathmatch.qc b/src/rules/deathmatch.qc new file mode 100644 index 0000000..30dbda3 --- /dev/null +++ b/src/rules/deathmatch.qc @@ -0,0 +1,171 @@ +/* + * 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. + */ + +#pragma PROGS_DAT "../../zpak001.pk3dir/progs/deathmatch.dat" + +#include "../../../src/server/api.h" + +bool +IsTeamplay(void) +{ + return cvars.GetBool("mp_teamplay"); +} + +bool +AllowFlashlight(void) +{ + return cvars.GetBool("mp_flashlight"); +} + +void +CodeCallback_StartGameType(void) +{ + motd.LoadDefault(); + + if (IsTeamplay() == true) { + teams.SetUp(1, "Terrorist", [153, 204, 255], true); + teams.SetSpawnPoint(1, "info_player_deathmatch"); + teams.SetUp(2, "Counter-Terrorist", [255, 63, 63], true); + teams.SetSpawnPoint(2, "info_player_deathmatch"); + } else { + game.SetSpawnPoint("info_player_deathmatch"); + } +} + +void +HLDM_PlayerSpawn(entity playerEntity) +{ + string playerModel; + + ents.ChangeToClass(playerEntity, "player_csdm"); + + if (IsTeamplay() == true) { + float teamCount = 2; + float playerTeam = playerEntity.team; + string teamModel; + + /* not part of a team? pick one of the ones we have */ + /* TODO: this should sort us into the lowest team */ + if (playerTeam == 0) { + playerTeam = 1 + floor(random(0, teamCount)); /* teams start at 1 after all */ + ents.Input(playerEntity, "SetTeam", ftos(playerTeam), playerEntity); + } + + teamModel = argv(playerTeam - 1); + playerModel = sprintf("models/player/%s/%s.mdl", teamModel, teamModel); + } else { + /* interpret the 'model' InfoKey */ + playerModel = userinfo.GetString(playerEntity, "model"); + + if (playerModel != "") { + playerModel = sprintf("models/player/%s/%s.mdl", playerModel, playerModel); + } + } + + /* fallback is always models/player.mdl for Half-Life */ + if (playerModel == "" || exists.InVFS(playerModel) == false) { + playerModel = "models/player.mdl"; + } + + playerEntity.modelindex = getmodelindex(playerModel); /* keep OG size */ + game.TeleportToSpawn(playerEntity); +} + +void +CodeCallback_PlayerSpawn(entity playerEntity) +{ + if (IsTeamplay() == false) { + HLDM_PlayerSpawn(playerEntity); + } else { + ents.ChangeToClass(playerEntity, "spectator"); + game.TeleportToSpawn(playerEntity); + } +} + + +void +CodeCallback_PlayerDisconnect(entity playerEntity) +{ + +} + +bool +CodeCallback_PlayerRequestRespawn(entity playerEntity) +{ + CodeCallback_PlayerSpawn(playerEntity); + return (true); +} + +void +CodeCallback_PlayerDamage(entity playerEntity, entity inflictor, entity attacker) +{ + +} + +bool +CodeCallback_CallRequestTeam(entity playerEntity, int teamNum) +{ + ents.Input(playerEntity, "SetTeam", itos(teamNum), playerEntity); + ents.Input(playerEntity, "Damage", "1000", playerEntity); + return (true); +} + +void +CodeCallback_PlayerKilled(entity playerEntity, entity inflictor, entity attacker, string weapon) +{ + combat.Obituary(playerEntity.netname, attacker.netname, weapon, ""); + + /* death-counter */ + playerEntity.deaths++; + + /* update score-counter */ + if (ents.isPlayer(attacker)) { + if (playerEntity == attacker) { + attacker.frags--; + } else { + attacker.frags++; + } + } +} + +bool +CodeCallback_ClientCommand(entity playerEntity, string command) +{ + float commandArgs = tokenize(command); + + switch (argv(0)) { + default: + return (false); + } + + return (true); +} + +bool +CodeCallback_ImpulseCommand(entity playerEntity, float impulseNum) +{ + switch (impulseNum) { + case 100: + if (AllowFlashlight() == true) { + ents.Input(playerEntity, "UseItem", "item_suit", playerEntity); + } + break; + default: + return (false); + } + + return (true); +} diff --git a/src/server/armoury_entity.qc b/src/server/armoury_entity.qc index b78e63e..dc835ca 100644 --- a/src/server/armoury_entity.qc +++ b/src/server/armoury_entity.qc @@ -97,7 +97,7 @@ string g_cstrike_armourymodels[19] = { "models/w_smokegrenade.mdl" }; -class armoury_entity:NSRenderableEntity +class armoury_entity:ncRenderableEntity { int m_iCount; int m_iLeft; diff --git a/src/server/func_bomb_target.qc b/src/server/func_bomb_target.qc index 31fd733..ee91f88 100644 --- a/src/server/func_bomb_target.qc +++ b/src/server/func_bomb_target.qc @@ -28,7 +28,7 @@ Once the bomb explodes inside this volume, it'll trigger its targets. */ class -func_bomb_target:NSBrushTrigger +func_bomb_target:ncBrushTrigger { void(void) func_bomb_target; diff --git a/src/server/func_buyzone.qc b/src/server/func_buyzone.qc index d161a80..964fcfb 100644 --- a/src/server/func_buyzone.qc +++ b/src/server/func_buyzone.qc @@ -41,7 +41,7 @@ Choices for 'team' include: */ class -func_buyzone:NSBrushTrigger +func_buyzone:ncBrushTrigger { void(void) func_buyzone; diff --git a/src/server/func_escapezone.qc b/src/server/func_escapezone.qc index 0851885..6e8aba7 100644 --- a/src/server/func_escapezone.qc +++ b/src/server/func_escapezone.qc @@ -27,7 +27,7 @@ Used in the Escape mode (es_* maps). */ class -func_escapezone:NSBrushTrigger +func_escapezone:ncBrushTrigger { void func_escapezone(void); diff --git a/src/server/func_hostage_rescue.qc b/src/server/func_hostage_rescue.qc index dca820d..fe7cec1 100644 --- a/src/server/func_hostage_rescue.qc +++ b/src/server/func_hostage_rescue.qc @@ -29,7 +29,7 @@ zones will be placed in Counter-Terrorist player spawn nodes automatically. */ class -func_hostage_rescue:NSBrushTrigger +func_hostage_rescue:ncBrushTrigger { void(void) func_hostage_rescue; diff --git a/src/server/func_vip_safetyzone.qc b/src/server/func_vip_safetyzone.qc index dab8218..a31bacb 100644 --- a/src/server/func_vip_safetyzone.qc +++ b/src/server/func_vip_safetyzone.qc @@ -26,7 +26,7 @@ VIP safety zone. Used in the assassination mode (as_* maps). */ -class func_vip_safetyzone:NSBrushTrigger +class func_vip_safetyzone:ncBrushTrigger { void func_vip_safetyzone(void); diff --git a/src/server/hostage_entity.qc b/src/server/hostage_entity.qc index 7ac4af0..6273474 100644 --- a/src/server/hostage_entity.qc +++ b/src/server/hostage_entity.qc @@ -79,15 +79,15 @@ enum HOSA_DEADTABLE3 }; -class CSHostage:NSTalkMonster +class CSHostage:ncTalkMonster { bool m_bUsedOnce; void CSHostage(void); virtual void OnPlayerUse(void); - virtual void Pain(entity, entity, int, vector, int); - virtual void Death(entity, entity, int, vector, int); + virtual void Pain(entity, entity, int, vector, vector, int); + virtual void Death(entity, entity, int, vector, vector, int); }; @@ -123,19 +123,19 @@ CSHostage::OnPlayerUse(void) m_bUsedOnce = true; } - NSTalkMonster::OnPlayerUse(); + ncTalkMonster::OnPlayerUse(); } void -CSHostage::Pain(entity inflictor, entity attacker, int damageDealt, vector dir, int location) +CSHostage::Pain(entity inflictor, entity attacker, int damageDealt, vector dir, vector absImpactPos, int hitBody) { - super::Pain(inflictor, attacker, damageDealt, dir, location); + super::Pain(inflictor, attacker, damageDealt, dir, absImpactPos, hitBody); if (IsAlive() == false) { return; } - switch (location) { + switch (hitBody) { case BODY_HEAD: case BODY_DEFAULT: case BODY_CHEST: @@ -165,12 +165,12 @@ CSHostage::Pain(entity inflictor, entity attacker, int damageDealt, vector dir, } void -CSHostage::Death(entity inflictor, entity attacker, int damageDealt, vector dir, int location) +CSHostage::Death(entity inflictor, entity attacker, int damageDealt, vector dir, vector absImpactPos, int hitBody) { WarnAllies(); if (IsAlive() == true) { - switch (location) { + switch (hitBody) { case BODY_HEAD: SetFrame(HOSA_DIE_HEADSHOT); break; @@ -191,6 +191,6 @@ CSHostage::Death(entity inflictor, entity attacker, int damageDealt, vector dir, SetHealth(0); /* now mark our state as 'dead' */ - super::Death(inflictor, attacker, damageDealt, dir, location); + super::Death(inflictor, attacker, damageDealt, dir, absImpactPos, hitBody); SetSolid(SOLID_NOT); } diff --git a/src/server/info_buyzone.qc b/src/server/info_buyzone.qc index dc20fc4..6232d57 100644 --- a/src/server/info_buyzone.qc +++ b/src/server/info_buyzone.qc @@ -26,7 +26,7 @@ See func_buyzone for more information. */ class -info_buyzone:NSPointTrigger +info_buyzone:ncPointTrigger { void info_buyzone(void); diff --git a/src/server/info_hostage_rescue.qc b/src/server/info_hostage_rescue.qc index 2232972..64cb7ee 100644 --- a/src/server/info_hostage_rescue.qc +++ b/src/server/info_hostage_rescue.qc @@ -29,7 +29,7 @@ If neither a info_hostage_rescue or a func_hostage_rescue is placed, zones will be placed in Counter-Terrorist player spawn nodes automatically. */ -class info_hostage_rescue:NSPointTrigger +class info_hostage_rescue:ncPointTrigger { void(void) info_hostage_rescue; @@ -62,7 +62,7 @@ info_hostage_rescue::Touch(entity eToucher) return; } - NSTalkMonster hosty = (NSTalkMonster)other; + ncTalkMonster hosty = (ncTalkMonster)other; if (hosty.GetSolid() == SOLID_NOT) { return; diff --git a/src/server/info_map_parameters.qc b/src/server/info_map_parameters.qc index 71452bf..27924fa 100644 --- a/src/server/info_map_parameters.qc +++ b/src/server/info_map_parameters.qc @@ -41,7 +41,7 @@ typedef enum } imp_buyrules_t; class -info_map_parameters:NSEntity +info_map_parameters:ncEntity { float m_flBombRadius; imp_buyrules_t m_buyRules; diff --git a/src/server/progs.src b/src/server/progs.src index 568142d..6da7e8a 100644 --- a/src/server/progs.src +++ b/src/server/progs.src @@ -1,6 +1,7 @@ #pragma target fte_5768 //#pragma flag enable assumeint #pragma progs_dat "../../progs.dat" +#pragma forcecrc 54730 #define QWSSQC #define SERVER diff --git a/src/server/server.qc b/src/server/server.qc index c1daa49..4baff6f 100644 --- a/src/server/server.qc +++ b/src/server/server.qc @@ -14,20 +14,6 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -void -Game_InitRules(void) -{ - if (cvar("sv_playerslots") == 1 || cvar("coop") == 1) { - g_grMode = NSGameRules::InitFromProgs("progs/singleplayer.dat"); - } else { - if (cvar("fcs_deathmatch") == 1) { - g_grMode = NSGameRules::InitFromProgs("progs/deathmatch.dat"); - } else { - g_grMode = NSGameRules::InitFromProgs("progs/counterstrike.dat"); - } - } -} - void Game_Worldspawn(void) { @@ -42,6 +28,4 @@ Game_Worldspawn(void) Sound_Precache("player.headshotarmor"); Sound_Precache("Player.FlashLightOff"); Sound_Precache("Player.FlashLightOn"); - - FX_Corpse_Init(); } diff --git a/src/shared/CSProjectile.h b/src/shared/CSProjectile.h index eb3d2b8..e5bd3fa 100644 --- a/src/shared/CSProjectile.h +++ b/src/shared/CSProjectile.h @@ -15,12 +15,13 @@ */ class -CSProjectile:NSProjectile +CSProjectile:ncProjectile { public: void CSProjectile(void); #ifdef SERVER + virtual void HasExploded(void); nonvirtual void SetRangeModifier(float); nonvirtual void SetPenetrationMaxThickness(float); nonvirtual void SetPenetrationPower(int); diff --git a/src/shared/CSProjectile.qc b/src/shared/CSProjectile.qc index 463f1e2..5fba891 100644 --- a/src/shared/CSProjectile.qc +++ b/src/shared/CSProjectile.qc @@ -21,6 +21,21 @@ CSProjectile::CSProjectile(void) } #ifdef SERVER +void +CSProjectile::HasExploded(void) +{ + float flashTime = GetSpawnFloat("flashTime"); + float smokeTime = GetSpawnFloat("smokeTime"); + + if (flashTime > 0.0f) { + FX_Flashbang(GetOrigin()); + } + + if (smokeTime > 0.0f) { + FX_Smokenade(GetOrigin()); + } +} + void CSProjectile::SetRangeModifier(float rangeModifier) { @@ -143,7 +158,7 @@ CSProjectile::_FireSingle(vector vecPos, vector vecAngles, float flDamage, float if (trace_ent.takedamage != DAMAGE_NO && trace_ent.iBleeds) { Sound_Play(trace_ent, CHAN_BODY, "damage_bullet.hit"); - NSClientPlayer pl = (NSClientPlayer)trace_ent; + ncPlayer pl = (ncPlayer)trace_ent; /* modify the damage based on the location */ switch (trace_surface_id) { case BODY_HEAD: @@ -183,7 +198,7 @@ CSProjectile::_FireSingle(vector vecPos, vector vecAngles, float flDamage, float if (trace_ent != m_eMultiTarget) { trace_endpos = endPos; _ApplyDamage(); - m_eMultiTarget = (NSSurfacePropEntity)trace_ent; + m_eMultiTarget = (ncSurfacePropEntity)trace_ent; m_iMultiValue = flDamage; } else { m_iMultiValue += flDamage; @@ -214,7 +229,7 @@ CSProjectile::_FireSingle(vector vecPos, vector vecAngles, float flDamage, float } CSProjectile -CSProjectile_SpawnDef(string entityDef, NSEntity theOwner, float rangeMod, int power, vector spread) +CSProjectile_SpawnDef(string entityDef, ncEntity theOwner, float rangeMod, int power, vector spread) { entity oldself = self; diff --git a/src/shared/CSWeapon.qc b/src/shared/CSWeapon.qc index df5c8c2..99c8f49 100644 --- a/src/shared/CSWeapon.qc +++ b/src/shared/CSWeapon.qc @@ -29,21 +29,11 @@ public: virtual void UpdateGUI(void); #endif + virtual bool CanFire(void); virtual void Draw(void); - virtual void SecondaryAttack(void); virtual void Release(void); virtual void FiredWeaponAttack(string); virtual void SwitchedToWeapon(void); - -#ifdef CLIENT -private: - int m_iHudSlot; - int m_iHudSlotPos; - - string m_ammoIcon; - string m_crossHair; - NSWeapon m_nextWeapon; -#endif }; void @@ -52,44 +42,36 @@ CSWeapon::CSWeapon(void) } +bool +CSWeapon::CanFire(void) +{ + bool returnValue = super::CanFire(); + + if (returnValue == true) { + if (!owner.gflags & GF_BOMBZONE && GetSpawnBool("onlyInBombZone")) { + returnValue = false; + } + } + + return (returnValue); +} + void CSWeapon::SwitchedToWeapon(void) { Cstrike_ShotReset((CSPlayer)owner); } -void -CSWeapon::SecondaryAttack(void) -{ - if (GetDefBool("altSilences") == true) { - if (CanFire() == false) { - return; - } - - float silAnimation = 0; - float silTime; - - m_iMode = 1 - m_iMode; - - if (m_iMode) - silAnimation = GetDefAct("actAddSil"); - else - silAnimation = GetDefAct("actDetachSil"); - - SetWeaponFrame(silAnimation); - silTime = frameduration(m_viewModel, silAnimation); - SetAttackNext(silTime); - SetIdleNext(silTime + 1.0f); - return; - } - - super::SecondaryAttack(); -} - void CSWeapon::FiredWeaponAttack(string defName) { CSPlayer ourOwner = (CSPlayer)owner; + + if (GetSubDefBool(defName, "csWeaponMode") == false) { + super::FiredWeaponAttack(defName); + return; + } + int numProjectiles = GetSubDefInt(defName, "numProjectiles"); string traceInfo = GetSubDefString(defName, "def_onFire"); float flAccuracyDivisor = GetSubDefFloat(defName,"accuracyDivisor"); @@ -213,4 +195,4 @@ CSWeapon::UpdateGUI(void) HUD_DrawAmmo3(); } } -#endif \ No newline at end of file +#endif diff --git a/src/shared/fx_flashbang.qc b/src/shared/fx_flashbang.qc index c2b843c..6e5e0ff 100644 --- a/src/shared/fx_flashbang.qc +++ b/src/shared/fx_flashbang.qc @@ -46,10 +46,10 @@ FX_Flashbang(vector org) /* send the blinding env_fade event */ WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET); WriteByte(MSG_MULTICAST, EV_FADE); - WriteFloat(MSG_MULTICAST, 1.0f); - WriteFloat(MSG_MULTICAST, 1.0f); - WriteFloat(MSG_MULTICAST, 1.0f); - WriteFloat(MSG_MULTICAST, 1.0f); + WriteByte(MSG_MULTICAST, 255); + WriteByte(MSG_MULTICAST, 255); + WriteByte(MSG_MULTICAST, 255); + WriteByte(MSG_MULTICAST, 255); WriteFloat(MSG_MULTICAST, blindness); WriteFloat(MSG_MULTICAST, fade); WriteByte(MSG_MULTICAST, EVF_FADEDROM); @@ -57,4 +57,4 @@ FX_Flashbang(vector org) multicast([0,0,0], MULTICAST_ONE_R); } } -#endif +#endif diff --git a/src/shared/fx_impact.qc b/src/shared/fx_impact.qc index 750dff5..dc17388 100644 --- a/src/shared/fx_impact.qc +++ b/src/shared/fx_impact.qc @@ -52,7 +52,7 @@ FX_Impact_Init(void) void Wallpuff_Travel(void) { - NSEntity sprite = (NSEntity)self; + ncEntity sprite = (ncEntity)self; vector newpos; sprite.origin = sprite.origin_net; diff --git a/src/shared/include.src b/src/shared/include.src index e75fbb9..0dc5e6d 100644 --- a/src/shared/include.src +++ b/src/shared/include.src @@ -7,7 +7,6 @@ ../../../cstrike/src/shared/animations.qc ../../../cstrike/src/shared/item_c4bomb.h ../../../valve/src/shared/fx_blood.qc -../../../valve/src/shared/fx_corpse.qc ../../../cstrike/src/shared/fx_flashbang.qc ../../../cstrike/src/shared/fx_smokenade.qc ../../../cstrike/src/shared/item_c4bomb.qc diff --git a/src/shared/item_c4bomb.qc b/src/shared/item_c4bomb.qc index 4e2d053..1fc0e0f 100644 --- a/src/shared/item_c4bomb.qc +++ b/src/shared/item_c4bomb.qc @@ -14,7 +14,7 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -class CSBombEntity:NSRenderableEntity +class CSBombEntity:ncRenderableEntity { public: void CSBombEntity(void); @@ -135,7 +135,7 @@ CSBombEntity::Logic(void) /* if our time has passed, explode */ if (m_flExplodeTime < time) { float bestDist = 9999.0f; - NSEntity bestTarget = __NULL__; + ncEntity bestTarget = __NULL__; g_grMode.Input(m_eUser, "BombExploded", ""); combat.RadiusDamage(origin, -g_cstrike_bombradius, 0i, 500i, real_owner, ""); @@ -149,7 +149,7 @@ CSBombEntity::Logic(void) if (dist < bestDist) { bestDist = dist; - bestTarget = (NSEntity)e; + bestTarget = (ncEntity)e; } } diff --git a/src/shared/player.h b/src/shared/player.h index 915a3d5..66d4219 100644 --- a/src/shared/player.h +++ b/src/shared/player.h @@ -15,13 +15,13 @@ */ /** @brief Get entity by class name and index **/ -NSEntity +ncEntity GetEntityByNameAndIndex(string name, int index) { int curIndex = 0; for (entity a = world; (a = find(a, ::classname, name));) { if (curIndex == index) { - return (NSEntity)a; + return (ncEntity)a; } ++curIndex; } @@ -36,21 +36,21 @@ GetEntityByNameAndIndex(string name, int index) * When there are for example 2 bombsites (g_cs_bombzones == 2) then valid * indexes would be 0 and 1. * */ -NSEntity +ncEntity GetBombsiteByIndex(int index) { return GetEntityByNameAndIndex("func_bomb_target", index); } /** @brief Get Escape Zone entity by index **/ -NSEntity +ncEntity GetEscapeZoneByIndex(int index) { return GetEntityByNameAndIndex("func_escapezone", index); } /** @brief Get VIP Safety Zone entity by index **/ -NSEntity +ncEntity GetVIPSafetyZoneByIndex(int index) { return GetEntityByNameAndIndex("func_vip_safetyzone", index); @@ -77,10 +77,11 @@ CSPlayer:HLPlayer PREDICTED_INT(cs_hor_rec_sign) PREDICTED_FLOAT(cs_rec_reverse_chance) - virtual void(float) Physics_Fall; - virtual void(void) Physics_Jump; + virtual void Physics_Fall(float); + virtual void Physics_Jump(void); + virtual void Physics_InputPreMove(void); - virtual void(void) Physics_InputPostMove; + virtual void Physics_InputPostMove(void); #ifdef CLIENT int playertype; @@ -171,9 +172,23 @@ CSPlayer::CSPlayer(void) #endif } -float punchangle_recovery(float punchangle) { +void +CSPlayer::Physics_InputPreMove(void) +{ + super::Physics_InputPreMove(); + + + gflags &= ~GF_BUYZONE; + gflags &= ~GF_RESCUEZONE; + gflags &= ~GF_BOMBZONE; +} + +float +punchangle_recovery(float punchangle) +{ return 0.05 * (-0.2 * pow(1.2, fabs(punchangle)) + 4); } + void CSPlayer::Physics_InputPostMove(void) { @@ -181,14 +196,15 @@ CSPlayer::Physics_InputPostMove(void) float punch; /* timers, these are predicted and shared across client and server */ w_attack_next = max(0, w_attack_next - input_timelength); + w_reload_next = max(0, w_reload_next - input_timelength); w_idle_next = max(0, w_idle_next - input_timelength); weapontime += input_timelength; punch = max(0, 1.0f - (input_timelength * 4)); if (punchangle[0] < 0) { punchangle[0] += punchangle_recovery(punchangle[0]); } - punchangle[1] *= .98; - punchangle[2] *= .99; + punchangle[1] *= punch; + punchangle[2] *= punch; /* player animation code */ UpdatePlayerAnimation(input_timelength); @@ -217,7 +233,7 @@ CSPlayer::ReceiveEntity void CSPlayer::ReceiveEntity(float flIsNew, float flChanged) { - NSClientPlayer::ReceiveEntity(flIsNew, flChanged); + ncPlayer::ReceiveEntity(flIsNew, flChanged); /* animation */ READENTITY_BYTE(anim_top, PLAYER_TOPFRAME) @@ -326,8 +342,8 @@ CSPlayer::Bot_RunToConfront(void) void CSPlayer::Bot_RunToBomb(void) { - NSEntity e = __NULL__; - e = (NSEntity)find(e, ::model, "models/w_c4.mdl"); + ncEntity e = __NULL__; + e = (ncEntity)find(e, ::model, "models/w_c4.mdl"); if (e) { RouteToPosition(e.WorldSpaceCenter()); @@ -339,7 +355,7 @@ CSPlayer::Bot_RunToBomb(void) void CSPlayer::Bot_RunToBombsite(int bombsiteIndex) { - NSEntity e = GetBombsiteByIndex(bombsiteIndex); + ncEntity e = GetBombsiteByIndex(bombsiteIndex); RouteToPosition(e.WorldSpaceCenter()); ChatSayTeam(strcat("Going to run to Bomb Site ", itos(bombsiteIndex), "!")); } @@ -355,7 +371,7 @@ CSPlayer::Bot_RunToRandomBombsite(void) void CSPlayer::Bot_RunToEscapeZone(int index) { - NSEntity e = GetEscapeZoneByIndex(index); + ncEntity e = GetEscapeZoneByIndex(index); RouteToPosition(e.WorldSpaceCenter()); ChatSayTeam(strcat("Going to run to Escape Zone ", itos(index), "!")); } @@ -371,7 +387,7 @@ CSPlayer::Bot_RunToRandomEscapeZone(void) void CSPlayer::Bot_RunToVIPSafetyZone(int index) { - NSEntity e = GetVIPSafetyZoneByIndex(index); + ncEntity e = GetVIPSafetyZoneByIndex(index); RouteToPosition(e.WorldSpaceCenter()); ChatSayTeam(strcat("Going to run to VIP Safety Zone ", itos(index), "!")); } @@ -386,9 +402,9 @@ CSPlayer::Bot_RunToRandomVIPSafetyZone(void) void CSPlayer::Bot_RunToHostages(void) { - NSEntity e = __NULL__; + ncEntity e = __NULL__; - e = (NSEntity)find(e, ::classname, "hostage_entity"); + e = (ncEntity)find(e, ::classname, "hostage_entity"); RouteToPosition(e.origin); ChatSayTeam("Going to run to the hostages!"); @@ -514,7 +530,7 @@ CSPlayer::Bot_CreateObjective(void) } else { /* T-bot: check if the bomb has been dropped */ - NSEntity e = (NSEntity)find(world, ::model, "models/w_backpack.mdl"); + ncEntity e = (ncEntity)find(world, ::model, "models/w_backpack.mdl"); if (e != __NULL__) { /* The bomb backpack has been dropped */ @@ -741,7 +757,7 @@ CSPlayer::SendEntity(entity ePEnt, float flChanged) flChanged = OptimiseChangedFlags(ePEnt, flChanged); - NSClientPlayer::SendEntity(ePEnt, flChanged); + ncPlayer::SendEntity(ePEnt, flChanged); SENDENTITY_BYTE(anim_top, PLAYER_TOPFRAME) SENDENTITY_FLOAT(anim_top_time, PLAYER_TOPFRAME) @@ -776,7 +792,7 @@ CSPlayer::Physics_Fall(float impactspeed) float impactDamage = (impactspeed - 580) * (100 / (1024 - 580)) * 0.75f; /* this is kinda ugly, but worth the price */ - NSDict damageDecl = spawn(NSDict); + ncDict damageDecl = spawn(ncDict); damageDecl.AddKey("damage", ftos((int)impactDamage)); Damage(this, this, damageDecl, 1.0, g_vec_null, origin); remove(damageDecl); diff --git a/zpak001.pk3dir/cfg/skill_cstrike.cfg b/zpak001.pk3dir/cfg/skill_cstrike.cfg index 988ac89..bfb665b 100644 --- a/zpak001.pk3dir/cfg/skill_cstrike.cfg +++ b/zpak001.pk3dir/cfg/skill_cstrike.cfg @@ -185,3 +185,18 @@ set sk_plr_awp_dmg3 115 set sk_plr_m249_dmg1 35 set sk_plr_m249_dmg2 35 set sk_plr_m249_dmg3 35 + +// hegrenade: splash damage +set sk_plr_hegrenade_dmg1 100 +set sk_plr_hegrenade_dmg2 100 +set sk_plr_hegrenade_dmg3 100 + +// hegrenade: splash radius +set sk_plr_hegrenade_radius1 100 +set sk_plr_hegrenade_radius2 100 +set sk_plr_hegrenade_radius3 100 + +// hegrenade: direct damage +set sk_plr_hegrenade_directdmg1 15 +set sk_plr_hegrenade_directdmg2 15 +set sk_plr_hegrenade_directdmg3 15 diff --git a/zpak001.pk3dir/cfg/skill_manifest.cfg b/zpak001.pk3dir/cfg/skill_manifest.cfg index 5ed9b95..5133fd0 100644 --- a/zpak001.pk3dir/cfg/skill_manifest.cfg +++ b/zpak001.pk3dir/cfg/skill_manifest.cfg @@ -1,2 +1 @@ -exec "skill.cfg" -exec "skill_cstrike.cfg" \ No newline at end of file +exec "skill_cstrike.cfg" diff --git a/zpak001.pk3dir/csprogs.dat.de.po b/zpak001.pk3dir/csprogs.dat.de.po index 0a7ba45..d12fba6 100755 --- a/zpak001.pk3dir/csprogs.dat.de.po +++ b/zpak001.pk3dir/csprogs.dat.de.po @@ -1,22 +1,3 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-21 15:30+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - msgid "VGUI_TITLE_MOTD" msgstr "Nachricht des Tages" diff --git a/zpak001.pk3dir/decls/def/ammo.def b/zpak001.pk3dir/decls/def/ammo.def index 3286acd..ccbe549 100644 --- a/zpak001.pk3dir/decls/def/ammo.def +++ b/zpak001.pk3dir/decls/def/ammo.def @@ -15,6 +15,7 @@ entityDef ammo_types { "ammo_hegrenade" "11" "ammo_smokegrenade" "12" "ammo_flashbang" "13" + "ammo_c4" "14" } entityDef ammo_names { @@ -23,15 +24,16 @@ entityDef ammo_names { "ammo_357sig" ".357 SIG" "ammo_45acp" ".45 ACP" "ammo_50ae" ".50 Action Express" - "ammo_556nato" "5.56×45mm NATO" - "ammo_556natobox" "5.56×45mm NATO BOX" - "ammo_57mm" "FN 5.7×28mm" - "ammo_762nato" "7.62×51mm NATO" - "ammo_9mm" "9×19mm Parabellum" + "ammo_556nato" "5.56x45mm NATO" + "ammo_556natobox" "5.56x45mm NATO BOX" + "ammo_57mm" "FN 5.7x28mm" + "ammo_762nato" "7.62x51mm NATO" + "ammo_9mm" "9x19mm Parabellum" "ammo_buckshot" "Buckshot" "ammo_hegrenade" "HE Grenade" "ammo_smokegrenade" "Smoke Grenade" "ammo_flashbang" "Flashbang" + "ammo_c4" "C4" } entityDef ammo_max { @@ -49,12 +51,12 @@ entityDef ammo_max { "ammo_hegrenade" "1" "ammo_smokegrenade" "1" "ammo_flashbang" "2" + "ammo_c4" "1" } // these don't exist as pickups in the game, but // might be helpful nonetheless for level designers - #include "ammo/base.def" #include "ammo/556natobox.def" #include "ammo/338magnum.def" diff --git a/zpak001.pk3dir/decls/def/hostage.def b/zpak001.pk3dir/decls/def/hostage.def index 5d92a55..83e7036 100644 --- a/zpak001.pk3dir/decls/def/hostage.def +++ b/zpak001.pk3dir/decls/def/hostage.def @@ -1,16 +1,16 @@ entityDef hostage_entity { - "spawnclass" "CSHostage" - "model" "models/hostage.mdl" + "spawnclass" "CSHostage" + "model" "models/hostage.mdl" "netname" "Hostage" "health" "skill:hostage_health" - "mins" "-16 -16 0" - "maxs" "16 16 72" - "eye_height" "64" - "team" "0" + "mins" "-16 -16 0" + "maxs" "16 16 72" + "eye_height" "64" + "team" "0" "propdata" "actor_human" "follow_on_use" "1" "speed_walk" "64" - "speed_run" "364" + "speed_run" "364" } diff --git a/zpak001.pk3dir/decls/def/items/defuse.def b/zpak001.pk3dir/decls/def/items/defuse.def index 705eb4c..c058a3e 100644 --- a/zpak001.pk3dir/decls/def/items/defuse.def +++ b/zpak001.pk3dir/decls/def/items/defuse.def @@ -1,6 +1,6 @@ entityDef item_defuse { - "spawnclass" "NSItem" + "spawnclass" "ncItem" "model" "models/w_thighpack.mdl" "mins" "-16 -16 0" "maxs" "16 16 16" diff --git a/zpak001.pk3dir/decls/def/items/kevlar.def b/zpak001.pk3dir/decls/def/items/kevlar.def index dc7f513..c34b3ce 100644 --- a/zpak001.pk3dir/decls/def/items/kevlar.def +++ b/zpak001.pk3dir/decls/def/items/kevlar.def @@ -1,7 +1,7 @@ // actually armor entityDef item_kevlar { - "spawnclass" "NSItem" + "spawnclass" "ncItem" "model" "models/w_kevlar.mdl" "mins" "-16 -16 0" "maxs" "16 16 16" diff --git a/zpak001.pk3dir/decls/def/items/kevlar_helmet.def b/zpak001.pk3dir/decls/def/items/kevlar_helmet.def index 65b21ee..f7920f8 100644 --- a/zpak001.pk3dir/decls/def/items/kevlar_helmet.def +++ b/zpak001.pk3dir/decls/def/items/kevlar_helmet.def @@ -1,7 +1,7 @@ // other equipment entityDef item_kevlar_helmet { - "spawnclass" "NSItem" + "spawnclass" "ncItem" "model" "models/w_kevlar.mdl" "mins" "-16 -16 0" "maxs" "16 16 16" diff --git a/zpak001.pk3dir/decls/def/items/nightvision.def b/zpak001.pk3dir/decls/def/items/nightvision.def index e1380dc..dafb66a 100644 --- a/zpak001.pk3dir/decls/def/items/nightvision.def +++ b/zpak001.pk3dir/decls/def/items/nightvision.def @@ -1,6 +1,6 @@ entityDef item_nightvision { - "spawnclass" "NSItem" + "spawnclass" "ncItem" "model" "models/w_backpack.mdl" "mins" "-16 -16 0" "maxs" "16 16 16" diff --git a/zpak001.pk3dir/decls/def/items/suit.def b/zpak001.pk3dir/decls/def/items/suit.def index 95854b9..2e3e961 100644 --- a/zpak001.pk3dir/decls/def/items/suit.def +++ b/zpak001.pk3dir/decls/def/items/suit.def @@ -1,7 +1,7 @@ // used in the training mission, HUD etc. entityDef item_suit { - "spawnclass" "NSItem" + "spawnclass" "ncItem" "model" "models/w_kevlar.mdl" "mins" "-16 -16 0" "maxs" "16 16 16" diff --git a/zpak001.pk3dir/decls/def/player.def b/zpak001.pk3dir/decls/def/player.def index d7e33a4..9ef64f8 100644 --- a/zpak001.pk3dir/decls/def/player.def +++ b/zpak001.pk3dir/decls/def/player.def @@ -1,6 +1,21 @@ entityDef player { "spawnclass" "CSPlayer" + + "snd_stepladderLeft" "step_ladder.left" + "snd_stepladderRight" "step_ladder.right" + "snd_fall" "Player.FallDamage" + "snd_landHard" "Player.LightFall" + "snd_death" "Player.Death" + "snd_airGaspLight" "Player.GaspLight" + "snd_pain" "Player.Pain" + "snd_airGaspHeavy" "Player.GaspHeavy" + "snd_waterExit" "Player.WaterExit" + "snd_waterEnter" "Player.WaterEnter" + "snd_useDeny" "Player.DenyWeaponSelection" + "snd_useSuccess" "Player.WeaponSelected" + "snd_waterWade" "Player.Wade" + "snd_waterSwim" "Player.Swim" } entityDef player_mp @@ -79,3 +94,13 @@ entityDef player_vip "team" "2" "weapon" "weapon_knife,weapon_usp" } + +entityDef player_csdm +{ + "inherit" "player_mp" + "ammo_45acp" "24" + "current_weapon" "1" + "item" "item_suit" + "model" "models/player/vip/vip.mdl" + "weapon" "weapon_knife,weapon_usp" +} diff --git a/zpak001.pk3dir/decls/def/projectiles.def b/zpak001.pk3dir/decls/def/projectiles.def index 6d8bc9c..291374e 100644 --- a/zpak001.pk3dir/decls/def/projectiles.def +++ b/zpak001.pk3dir/decls/def/projectiles.def @@ -8,7 +8,7 @@ entityDef projectile_bullet_base entityDef projectile_bullet_shotgun { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" "is_bullet" "1" "decal_impact" "Impact.BigShot" "detonate_on_world" "1" diff --git a/zpak001.pk3dir/decls/def/spawns.def b/zpak001.pk3dir/decls/def/spawns.def index 787c20a..06a9c51 100644 --- a/zpak001.pk3dir/decls/def/spawns.def +++ b/zpak001.pk3dir/decls/def/spawns.def @@ -3,8 +3,8 @@ 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" + "editor_color" "1 0 0" + "spawnclass" "ncSpawnPoint" } entityDef info_player_deathmatch @@ -12,8 +12,8 @@ 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" + "editor_color" "1 0 0" + "spawnclass" "ncSpawnPoint" } entityDef info_player_coop @@ -21,6 +21,6 @@ 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" + "editor_color" "1 0 0" + "spawnclass" "ncSpawnPoint" } diff --git a/zpak001.pk3dir/decls/def/weapons.def b/zpak001.pk3dir/decls/def/weapons.def index 94b0011..41567a9 100644 --- a/zpak001.pk3dir/decls/def/weapons.def +++ b/zpak001.pk3dir/decls/def/weapons.def @@ -1,3 +1,4 @@ +#include "weapons/csbase.def" #include "weapons/ak47.def" #include "weapons/aug.def" #include "weapons/awp.def" @@ -25,50 +26,3 @@ #include "weapons/ump45.def" #include "weapons/usp.def" #include "weapons/xm1014.def" - -entityDef CSBaseMelee -{ - "spawnclass" "CSWeapon" - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_rotatable" "1" - - "snd_acquire" "Player.PickupWeapon" -} - -entityDef CSBasePistol -{ - "spawnclass" "CSWeapon" - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_rotatable" "1" - - "semiAuto" "1" - "snd_acquire" "Player.PickupWeapon" - "snd_empty" "Default.ClipEmpty_Pistol" -} - -entityDef CSBaseRifle -{ - "spawnclass" "CSWeapon" - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_rotatable" "1" - - "snd_acquire" "Player.PickupWeapon" - "snd_empty" "Default.ClipEmpty_Rifle" -} - -entityDef CSBaseShotgun -{ - "spawnclass" "CSWeapon" - "editor_color" ".3 .3 1" - "editor_mins" "-16 -16 -16" - "editor_maxs" "16 16 16" - "editor_rotatable" "1" - - "snd_acquire" "Player.PickupWeapon" -} diff --git a/zpak001.pk3dir/decls/def/weapons/c4.def b/zpak001.pk3dir/decls/def/weapons/c4.def index 79407b9..68f7682 100644 --- a/zpak001.pk3dir/decls/def/weapons/c4.def +++ b/zpak001.pk3dir/decls/def/weapons/c4.def @@ -11,16 +11,19 @@ entityDef weapon_c4 "model_view" "models/v_c4.mdl" "snd_acquire" "weapon.pickup" "snd_respawn" "item.respawn" + "ammoRequired" "1" - "def_plant" "item_c4" + "def_fireInfo" "fireInfo_c4Plant" "inv_name" "C4 Bomb Weapon" - "clipSize" "1" + "ammoType" "ammo_c4" + "inv_ammo_c4" "1" "trigger_delay" "3" // takes three seconds to charge "act_fire" "2" + "act_fireFailed" "0" "act_draw" "1" "act_idle" "0" - "actDelay" "3" + "act_delay" "3" "snd_fire" "C4.PlantSound" @@ -30,4 +33,23 @@ entityDef weapon_c4 "hudSlotPos" "0" "weight" "0" "team" "1" // Terrorists only! + "onlyInBombZone" "1" + "removeOnEmpty" "1" +} + +entityDef fireInfo_c4Plant +{ + "def_onFire" "projectile_c4bomb" + "testDistance" "-64" + "chargeTime" "3" +} + +entityDef projectile_c4bomb +{ + "spawnclass" "ncAttack" + "def_plant" "item_c4" + "plant" "1" + "plantOnGround" "1" + "plantDistance" "64" + "plantOffset" "8" } diff --git a/zpak001.pk3dir/decls/def/weapons/csbase.def b/zpak001.pk3dir/decls/def/weapons/csbase.def new file mode 100644 index 0000000..39bd774 --- /dev/null +++ b/zpak001.pk3dir/decls/def/weapons/csbase.def @@ -0,0 +1,52 @@ +entityDef CSBaseMelee +{ + "spawnclass" "CSWeapon" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_rotatable" "1" + + "snd_acquire" "Player.PickupWeapon" +} + +entityDef CSBasePistol +{ + "spawnclass" "CSWeapon" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_rotatable" "1" + + "semiAuto" "1" + "snd_acquire" "Player.PickupWeapon" + "snd_empty" "Default.ClipEmpty_Pistol" + "csWeaponMode" "1" + "model_flash" "sprites/muzzleflash1.spr" +} + +entityDef CSBaseRifle +{ + "spawnclass" "CSWeapon" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_rotatable" "1" + + "snd_acquire" "Player.PickupWeapon" + "snd_empty" "Default.ClipEmpty_Rifle" + "csWeaponMode" "1" + "model_flash" "sprites/muzzleflash3.spr" +} + +entityDef CSBaseShotgun +{ + "spawnclass" "CSWeapon" + "editor_color" ".3 .3 1" + "editor_mins" "-16 -16 -16" + "editor_maxs" "16 16 16" + "editor_rotatable" "1" + + "snd_acquire" "Player.PickupWeapon" + "csWeaponMode" "1" + "model_flash" "sprites/muzzleflash4.spr" +} diff --git a/zpak001.pk3dir/decls/def/weapons/flashbang.def b/zpak001.pk3dir/decls/def/weapons/flashbang.def index ffe5e05..35efe33 100644 --- a/zpak001.pk3dir/decls/def/weapons/flashbang.def +++ b/zpak001.pk3dir/decls/def/weapons/flashbang.def @@ -12,17 +12,22 @@ entityDef weapon_flashbang "snd_acquire" "weapon.pickup" "snd_respawn" "item.respawn" - "def_onFire" "projectile_flashgrenade" + //"def_onFire" "projectile_flashgrenade" + "def_onRelease" "projectile_flashgrenade" "inv_name" "Flashbang" "ammoType" "ammo_flashbang" "ammoRequired" "1" + "inv_ammo_flashbang" "1" + "silent_fire" "1" "primed_fuse" "4" - - "act_idle" "0" - "act_draw" "3" - "actPull" "1" - "actThrow" "2" + "act_idle" "0" + "act_draw" "3" + "act_delay" "1" + "act_fire" "2" + "chargeTime" "2" + "removeOnEmpty" "1" + "drawAfterRelease" "1" "hudSlot" "3" "hudSlotPos" "1" @@ -35,8 +40,10 @@ entityDef projectile_flashgrenade "frame" "1" "fuse" "4" "detonate_on_fuse" "1" + "thrown" "1" "bounce" "1" "angular_velocity" "-350 0 0" + "velocity" "300 0 40" "snd_explode" "Flashbang.Explode" "snd_bounce" "Flashbang.Bounce" diff --git a/zpak001.pk3dir/decls/def/weapons/glock18.def b/zpak001.pk3dir/decls/def/weapons/glock18.def index fd86448..afe1815 100644 --- a/zpak001.pk3dir/decls/def/weapons/glock18.def +++ b/zpak001.pk3dir/decls/def/weapons/glock18.def @@ -17,7 +17,7 @@ entityDef weapon_glock18 "act_fireLast" "6" "act_holster" "9" "act_reload" "7,12" - "act_draw" "9,11" + "act_draw" "8,11" "act_idle" "0,1,2" "snd_fire" "Weapon_Glock.Single" diff --git a/zpak001.pk3dir/decls/def/weapons/hegrenade.def b/zpak001.pk3dir/decls/def/weapons/hegrenade.def index 3332e5b..595cccd 100644 --- a/zpak001.pk3dir/decls/def/weapons/hegrenade.def +++ b/zpak001.pk3dir/decls/def/weapons/hegrenade.def @@ -10,35 +10,37 @@ entityDef weapon_hegrenade "inv_name" "HE Grenade" "inv_ammo_hegrenade" "5" "def_onFire" "projectile_handgrenade" - "def_explode_inhand" "env_handgrenade_explodeinhand" - "def_damage_inhand" "damage_handgrenadeSplash" + "def_onRelease" "projectile_handgrenade" "ammoType" "ammo_hegrenade" "ammoRequired" "1" "silent_fire" "1" - "primed_fuse" "4" "act_idle" "0" "act_draw" "3" - "actPull" "1" - "actThrow" "2" + "act_delay" "1" + "act_release" "2" // HLWeapon specific "hudSlot" "3" "hudSlotPos" "0" + "chargeTime" "2" + "removeOnEmpty" "1" + "drawAfterRelease" "1" } entityDef projectile_handgrenade { - "spawnclass" "NSProjectile" - "model" "models/w_grenade.mdl" + "spawnclass" "ncProjectile" + "model" "models/w_hegrenade.mdl" "frame" "1" "fuse" "4" "detonate_on_fuse" "1" + "thrown" "1" "bounce" "1" "angular_velocity" "-350 0 0" "model_detonate" "fx_explosion.main" "snd_explode" "fx.explosion" - "snd_bounce" "weapon_handgrenade.bounce" + "snd_bounce" "weapon_hegrenade.bounce" "decal_detonate" "ExplosionScorch" "def_damage" "damage_handgrenadeDirect" @@ -47,17 +49,12 @@ entityDef projectile_handgrenade entityDef damage_handgrenadeDirect { - "damage" "1" + "damage" "skill:plr_hegrenade_directdmg" } entityDef damage_handgrenadeSplash { - "damage" "skill:plr_hand_grenade" - "radius" "250" -} - -entityDef env_handgrenade_explodeinhand -{ - "spawnclass" "idAnimatedEntity" - "model" "grenadeExplosion.prt" + "damage" "skill:plr_hegrenade_dmg" + "radius" "skill:plr_hegrenade_radius" + "push" "7500" } diff --git a/zpak001.pk3dir/decls/def/weapons/knife.def b/zpak001.pk3dir/decls/def/weapons/knife.def index 058dcdd..94fe7fe 100644 --- a/zpak001.pk3dir/decls/def/weapons/knife.def +++ b/zpak001.pk3dir/decls/def/weapons/knife.def @@ -1,5 +1,6 @@ entityDef weapon_knife { + "spawnclass" "CSWeapon" "inherit" "CSBaseMelee" "editor_usage" "Knife Weapon" @@ -11,7 +12,6 @@ entityDef weapon_knife "testDistance" "-48" "inv_name" "Knife Weapon" "ammoRequired" "0" - "clipSize" "0" "silent_fire" "1" "failRate" "0.7" @@ -30,9 +30,20 @@ entityDef weapon_knife entityDef projectile_knife { - "spawnclass" "NSProjectile" + "spawnclass" "ncProjectile" + "damage" "skill:plr_knife_dmg" + "is_bullet" "1" + "decal_impact" "Impact.Shot" + "detonate_on_world" "1" + "range" "skill:plr_knife_altdmg" +} + +entityDef projectile_altKnife +{ + "spawnclass" "ncProjectile" "damage" "skill:plr_knife" "is_bullet" "1" "decal_impact" "Impact.Shot" "detonate_on_world" "1" + "range" "skill:plr_knife_altrange" } diff --git a/zpak001.pk3dir/decls/def/weapons/smokegrenade.def b/zpak001.pk3dir/decls/def/weapons/smokegrenade.def index 9da5809..a23ff57 100644 --- a/zpak001.pk3dir/decls/def/weapons/smokegrenade.def +++ b/zpak001.pk3dir/decls/def/weapons/smokegrenade.def @@ -12,17 +12,19 @@ entityDef weapon_smokegrenade "snd_acquire" "weapon.pickup" "snd_respawn" "item.respawn" - "def_onFire" "projectile_smokegrenade" + "def_onFire" "projectile_smokegrenade" + "def_onRelease" "projectile_smokegrenade" "inv_name" "smokegrenade" - "clipSize" "50" - "clipSizeDefault" "25" - "act_fire" "5,6,7" - "actAltFire" "2" - "act_holster" "4" - "act_reload" "3" - "act_draw" "4" - "act_idle" "0,1" + "silent_fire" "1" + "primed_fuse" "4" + "act_idle" "0" + "act_draw" "3" + "act_delay" "1" + "act_fire" "2" + "chargeTime" "2" + "removeOnEmpty" "1" + "drawAfterRelease" "1" "snd_fire" "weapon_smokegrenade.shoot" "snd_altfire" "weapon_smokegrenade.gl" diff --git a/zpak001.pk3dir/decls/def/weapons/xm1014.def b/zpak001.pk3dir/decls/def/weapons/xm1014.def index 6864e4b..a0b4f9a 100644 --- a/zpak001.pk3dir/decls/def/weapons/xm1014.def +++ b/zpak001.pk3dir/decls/def/weapons/xm1014.def @@ -7,7 +7,7 @@ entityDef weapon_xm1014 "model_view" "models/v_xm1014.mdl" "inv_name" "Benneli XM1014 Weapon" - "def_fireInfo" "fireInfo_xm1014" + "def_fireInfo" "fireInfo_xm1014" "clipSize" "7" "ammoType" "ammo_buckshot" diff --git a/zpak001.pk3dir/default_cstrike.cfg b/zpak001.pk3dir/default_cstrike.cfg index b00627c..e50a93a 100644 --- a/zpak001.pk3dir/default_cstrike.cfg +++ b/zpak001.pk3dir/default_cstrike.cfg @@ -25,6 +25,7 @@ set fcs_autoreload "0" set con_color "255 150 0" set vgui_color "255 170 0" set cross_color "0 255 0" +set r_menutint "0.22 0.278 0.40" // physics differences from valve/ set pm_accelerate "4" diff --git a/zpak001.pk3dir/icon.tga b/zpak001.pk3dir/icon.tga new file mode 100644 index 0000000..e7c3ff6 Binary files /dev/null and b/zpak001.pk3dir/icon.tga differ diff --git a/zpak001.pk3dir/default.cfg b/zpak001.pk3dir/quake.rc similarity index 84% rename from zpak001.pk3dir/default.cfg rename to zpak001.pk3dir/quake.rc index b344a6d..daf0189 100644 --- a/zpak001.pk3dir/default.cfg +++ b/zpak001.pk3dir/quake.rc @@ -1,5 +1,6 @@ exec default_controls.cfg exec default_cvar.cfg exec default_video.cfg +exec default_valve.cfg exec default_cstrike.cfg exec default_aliases.cfg