diff --git a/src/client/game_event.qc b/src/client/game_event.qc new file mode 100644 index 0000000..0e222c6 --- /dev/null +++ b/src/client/game_event.qc @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2016-2022 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. + */ + +int +ClientGame_EventParse(float fHeader) +{ + switch (fHeader) { + case EV_TFC_VOXMSG: + Vox_Parse(); + break; + case EV_OBITUARY: + Obituary_Parse(); + break; + case EV_SPARK: + vector vSparkPos, vSparkAngle; + vSparkPos[0] = readcoord(); + vSparkPos[1] = readcoord(); + vSparkPos[2] = readcoord(); + vSparkAngle[0] = readcoord(); + vSparkAngle[1] = readcoord(); + vSparkAngle[2] = readcoord(); + FX_Spark(vSparkPos, vSparkAngle); + break; + case EV_GIBHUMAN: + vector vGibPos; + vGibPos[0] = readcoord(); + vGibPos[1] = readcoord(); + vGibPos[2] = readcoord(); + vector vDir; + vDir[0] = readcoord(); + vDir[1] = readcoord(); + vDir[2] = readcoord(); + float flForce = readfloat(); + FX_GibHuman(vGibPos, vDir, flForce); + break; + case EV_BLOOD: + vector vBloodPos; + vector vBloodColor; + + vBloodPos[0] = readcoord(); + vBloodPos[1] = readcoord(); + vBloodPos[2] = readcoord(); + + vBloodColor[0] = readbyte() / 255; + vBloodColor[1] = readbyte() / 255; + vBloodColor[2] = readbyte() / 255; + + FX_Blood(vBloodPos, vBloodColor); + break; + case EV_EXPLOSION: + vector vExploPos; + + vExploPos[0] = readcoord(); + vExploPos[1] = readcoord(); + vExploPos[2] = readcoord(); + + FX_Explosion(vExploPos); + break; + case EV_MODELGIB: + vector vecPos; + vecPos[0] = readcoord(); + vecPos[1] = readcoord(); + vecPos[2] = readcoord(); + + vector vSize; + vSize[0] = readcoord(); + vSize[1] = readcoord(); + vSize[2] = readcoord(); + + float fStyle = readbyte(); + int count = readbyte(); + FX_BreakModel(count, vecPos, vSize, [0,0,0], fStyle); + break; + case EV_IMPACT: + int iType; + vector vOrigin, vNormal; + + iType = (int)readbyte(); + vOrigin[0] = readcoord(); + vOrigin[1] = readcoord(); + vOrigin[2] = readcoord(); + + vNormal[0] = readcoord(); + vNormal[1] = readcoord(); + vNormal[2] = readcoord(); + + FX_Impact(iType, vOrigin, vNormal); + break; + case EV_CHAT: + float fSender = readbyte(); + float fTeam = readbyte(); + string sMessage = readstring(); + + CSQC_Parse_Print(sprintf("%s: %s", getplayerkeyvalue(fSender, "name"), sMessage), PRINT_CHAT); + break; + case EV_CHAT_TEAM: + float fSender2 = readbyte(); + float fTeam2 = readbyte(); + string sMessage2 = readstring(); + + CSQC_Parse_Print(sprintf("[TEAM] %s: %s", getplayerkeyvalue(fSender2, "name"), sMessage2), PRINT_CHAT); + break; + 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; + default: + return (0); + } + + return (1); +} diff --git a/src/client/progs.src b/src/client/progs.src index 132ecc1..b6cc890 100644 --- a/src/client/progs.src +++ b/src/client/progs.src @@ -18,6 +18,8 @@ ../../../src/gs-entbase/shared.src ../shared/include.src +vox.qc + ../../../valve/src/client/damage.qc ../../../base/src/client/draw.qc init.qc @@ -25,7 +27,7 @@ init.qc ../../../valve/src/client/player.qc entities.qc ../../../valve/src/client/cmds.qc -../../../valve/src/client/game_event.qc +game_event.qc ../../../valve/src/client/camera.qc ../../../valve/src/client/viewmodel.qc ../../../valve/src/client/view.qc diff --git a/src/client/vox.qc b/src/client/vox.qc new file mode 100644 index 0000000..24f4c18 --- /dev/null +++ b/src/client/vox.qc @@ -0,0 +1,48 @@ +/* + * 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 + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +class +TFCVox:NSTalkMonster +{ + void(void) TFCVox; + virtual void(string) SentenceSample; +}; + +TFCVox g_vox; + +void +TFCVox::SentenceSample(string sample) +{ + sound(this, CHAN_VOICE, sample, 1.0, ATTN_NONE, 100, SOUNDFLAG_FOLLOW | SOUNDFLAG_NOSPACIALISE); +} + +void +TFCVox::TFCVox(void) +{ +} + +void +Vox_Parse(void) +{ + string msg = readstring(); + + if (!g_vox) + g_vox = spawn(TFCVox); + + print(msg); + print("\n"); + g_vox.Sentence(msg); +} diff --git a/src/server/vox.qc b/src/server/vox.qc index a3091aa..f4fe737 100644 --- a/src/server/vox.qc +++ b/src/server/vox.qc @@ -1,11 +1,34 @@ +/* + * Copyright (c) 2022 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. +*/ + void Vox_Sentence_Broadcast(string msg) { - + WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET); + WriteByte(MSG_MULTICAST, EV_TFC_VOXMSG); + WriteString(MSG_MULTICAST, msg); + multicast([0,0,0], MULTICAST_ALL_R); } void Vox_Sentence_Single(entity targ, string msg) { - + WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET); + WriteByte(MSG_MULTICAST, EV_TFC_VOXMSG); + WriteString(MSG_MULTICAST, msg); + msg_entity = targ; + multicast([0,0,0], MULTICAST_ONE_R); } diff --git a/src/shared/events.h b/src/shared/events.h new file mode 100644 index 0000000..5b40918 --- /dev/null +++ b/src/shared/events.h @@ -0,0 +1,20 @@ +/* + * 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 + * 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 +{ + EV_TFC_VOXMSG = EV_SEPARATOR +}; diff --git a/src/shared/include.src b/src/shared/include.src index 3aaf10c..32358ad 100644 --- a/src/shared/include.src +++ b/src/shared/include.src @@ -4,7 +4,7 @@ items.h weapons.h ../../../valve/src/shared/flags.h -../../../valve/src/shared/events.h +events.h player.qc ../../../base/src/shared/weapon_common.h ../../../valve/src/shared/animations.h @@ -13,7 +13,6 @@ player.qc ../../../valve/src/shared/pmove_water.qc ../../../valve/src/shared/fx_blood.qc -../../../valve/src/shared/fx_gaussbeam.qc ../../../valve/src/shared/fx_breakmodel.qc ../../../valve/src/shared/fx_explosion.qc ../../../valve/src/shared/fx_gibhuman.qc