From 86c414ea5b6891310b419f85f0b6c497cf8f6666 Mon Sep 17 00:00:00 2001 From: LegendaryGuard Date: Mon, 15 Feb 2021 13:44:50 +0100 Subject: [PATCH] Added Team KeepAway gamemode from Mario/team_keepaway branch, Team KeepAway gamemode activated in the menu --- gamemodes-client.cfg | 3 +- gamemodes-server.cfg | 47 +- gfx/menu/luma/gametype_tka.tga | Bin 0 -> 65580 bytes gfx/menu/luminos/gametype_tka.tga | Bin 0 -> 65580 bytes gfx/menu/wickedx/gametype_tka.tga | Bin 0 -> 65580 bytes gfx/menu/xaw/gametype_tka.tga | Bin 0 -> 65580 bytes notifications.cfg | 1 + qcsrc/common/gamemodes/gamemode/_mod.inc | 1 + qcsrc/common/gamemodes/gamemode/_mod.qh | 1 + qcsrc/common/gamemodes/gamemode/tka/_mod.inc | 8 + qcsrc/common/gamemodes/gamemode/tka/_mod.qh | 8 + qcsrc/common/gamemodes/gamemode/tka/cl_tka.qc | 55 ++ qcsrc/common/gamemodes/gamemode/tka/cl_tka.qh | 3 + qcsrc/common/gamemodes/gamemode/tka/sv_tka.qc | 524 ++++++++++++++++++ qcsrc/common/gamemodes/gamemode/tka/sv_tka.qh | 45 ++ qcsrc/common/gamemodes/gamemode/tka/tka.qc | 1 + qcsrc/common/gamemodes/gamemode/tka/tka.qh | 59 ++ .../common/mutators/mutator/waypoints/all.inc | 5 + qcsrc/common/scores.qh | 4 + qcsrc/common/stats.qh | 1 + qcsrc/menu/xonotic/util.qc | 2 + qcsrc/server/world.qc | 5 + 22 files changed, 769 insertions(+), 4 deletions(-) create mode 100644 gfx/menu/luma/gametype_tka.tga create mode 100644 gfx/menu/luminos/gametype_tka.tga create mode 100644 gfx/menu/wickedx/gametype_tka.tga create mode 100644 gfx/menu/xaw/gametype_tka.tga create mode 100644 qcsrc/common/gamemodes/gamemode/tka/_mod.inc create mode 100644 qcsrc/common/gamemodes/gamemode/tka/_mod.qh create mode 100644 qcsrc/common/gamemodes/gamemode/tka/cl_tka.qc create mode 100644 qcsrc/common/gamemodes/gamemode/tka/cl_tka.qh create mode 100644 qcsrc/common/gamemodes/gamemode/tka/sv_tka.qc create mode 100644 qcsrc/common/gamemodes/gamemode/tka/sv_tka.qh create mode 100644 qcsrc/common/gamemodes/gamemode/tka/tka.qc create mode 100644 qcsrc/common/gamemodes/gamemode/tka/tka.qh diff --git a/gamemodes-client.cfg b/gamemodes-client.cfg index 49867e4cd..4bd648f67 100644 --- a/gamemodes-client.cfg +++ b/gamemodes-client.cfg @@ -32,7 +32,8 @@ alias cl_hook_gamestart_ka alias cl_hook_gamestart_ft alias cl_hook_gamestart_inv alias cl_hook_gamestart_duel -alias cl_hook_gamestart_surv //LegendGuard adds survival client hook from Mario/survival 15-02-2021 +alias cl_hook_gamestart_sv //LegendGuard adds survival client hook from Mario/survival 15-02-2021 +alias cl_hook_gamestart_tka //LegendGuard adds team keepaway client hook from Mario/team_keepaway 15-02-2021 alias cl_hook_gameend "rpn /cl_matchcount dup load 1 + =" // increase match count every time a game ends alias cl_hook_shutdown alias cl_hook_activeweapon diff --git a/gamemodes-server.cfg b/gamemodes-server.cfg index 310236039..4a39bfe49 100644 --- a/gamemodes-server.cfg +++ b/gamemodes-server.cfg @@ -59,7 +59,8 @@ alias sv_vote_gametype_hook_ons alias sv_vote_gametype_hook_rc alias sv_vote_gametype_hook_tdm alias sv_vote_gametype_hook_duel -alias sv_vote_gametype_hook_sv ////LegendGuard adds survival hook from Mario/survival 15-02-2021 +alias sv_vote_gametype_hook_sv //LegendGuard adds survival hook from Mario/survival 15-02-2021 +alias sv_hook_gamestart_tka //LegendGuard adds team keepaway hook from Mario/team_keepaway 15-02-2021 // Example preset to allow 1v1ctf to be used for the gametype voting screen. // Aliases can have max 31 chars so the gametype can have max 9 chars. @@ -210,13 +211,21 @@ set g_duel_respawn_delay_large_count 0 set g_duel_respawn_delay_max 0 set g_duel_respawn_waves 0 set g_duel_weapon_stay 0 -set g_sv_respawn_delay_small 0 ////LegendGuard adds survival cvars from Mario/survival 15-02-2021 +set g_sv_respawn_delay_small 0 //LegendGuard adds survival cvars from Mario/survival 15-02-2021 set g_sv_respawn_delay_small_count 0 set g_sv_respawn_delay_large 0 set g_sv_respawn_delay_large_count 0 set g_sv_respawn_delay_max 0 set g_sv_respawn_waves 0 set g_sv_weapon_stay 0 +set g_tka_respawn_delay_small 0 //LegendGuard adds team keepaway cvars from Mario/team_keepaway 15-02-2021 +set g_tka_respawn_delay_small_count 0 +set g_tka_respawn_delay_large 0 +set g_tka_respawn_delay_large_count 0 +set g_tka_respawn_delay_max 0 +set g_tka_respawn_waves 0 +set g_tka_weapon_stay 0 + // ========= @@ -576,4 +585,36 @@ set g_survival_hunter_count 0.25 "number of players who will become hunters, set set g_survival_punish_teamkill 1 "kill the player when they kill an ally" set g_survival_reward_survival 1 "give a point to all surviving players if the round timelimit is reached, in addition to the points given for kills" set g_survival_warmup 10 "how long the players will have time to run around the map before the round starts" -set g_survival_round_timelimit 180 "round time limit in seconds" \ No newline at end of file +set g_survival_round_timelimit 180 "round time limit in seconds" + +//LegendGuard adds tema keepaway cvars from Mario/team_keepaway 15-02-2021 +// =============== +// team keepaway +// =============== +set g_tka 0 "another game mode which focuses around a ball" +set g_tka_on_dm_maps 0 "when this is set, all DM and KA maps automatically support TKA" +set g_tka_teams 2 "how many teams are in team keepaway (set by mapinfo)" +set g_tka_team_spawns 0 "when 1, players spawn from the team spawnpoints of the map, if any" +set g_tka_teams_override 0 "how many teams are in team keepaway" +set g_tka_point_limit -1 "TKA point limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)" +set g_tka_point_leadlimit -1 "TKA point lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)" +set g_tka_score_team 1 "allow points to be awarded to teammates for any kill when the ball is in your team's possession" +set g_tka_score_bckill 1 "points for killing the ball barrier (Ball Carrier Kill)" +set g_tka_score_killac 1 "points for kills while holding the ball (Kill As Carrier)" +set g_tka_score_timeinterval 1 "amount of time it takes between intervals for timepoints to be added to the score" +set g_tka_score_timepoints 0 "points to add to score per timeinterval, 0 for no points" +set g_tka_ballcarrier_effects 8 "Add together the numbers you want: EF_ADDITIVE (32) / EF_NODEPTHTEST (8192) / EF_DIMLIGHT (8)" +set g_tka_ballcarrier_highspeed 1 "speed multiplier done to the person holding the ball (recommended when used with some mutators)" +set g_tka_ballcarrier_damage 1 "damage multiplier while holding the ball" +set g_tka_ballcarrier_force 1 "force multiplier while holding the ball" +set g_tka_ballcarrier_selfdamage 1 "self damage multiplier while holding the ball" +set g_tka_ballcarrier_selfforce 1 "self force multiplier while holding the ball" +set g_tka_noncarrier_warn 1 "warn players when they kill without holding the ball" +set g_tka_noncarrier_damage 1 "damage done to other players if both you and they don't have the ball" +set g_tka_noncarrier_force 1 "force done to other players if both you and they don't have the ball" +set g_tka_noncarrier_selfdamage 1 "self damage if you don't have the ball" +set g_tka_noncarrier_selfforce 1 "self force if you don't have the ball" +set g_tkaball_effects 0 "Add together the numbers you want: EF_ADDITIVE (32) / EF_NODEPTHTEST (8192) / EF_DIMLIGHT (8)" +set g_tkaball_trail_color 254 "particle trail color from player/ball" +set g_tkaball_damageforcescale 3 "Scale of force which is applied to the ball by weapons/explosions/etc" +set g_tkaball_respawntime 10 "if no one picks up the ball, how long to wait until the ball respawns" \ No newline at end of file diff --git a/gfx/menu/luma/gametype_tka.tga b/gfx/menu/luma/gametype_tka.tga new file mode 100644 index 0000000000000000000000000000000000000000..b61fc08676e0c777444a6035c19200a869750aa1 GIT binary patch literal 65580 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 L^<&1399Z`sB-x8x literal 0 HcmV?d00001 diff --git a/gfx/menu/luminos/gametype_tka.tga b/gfx/menu/luminos/gametype_tka.tga new file mode 100644 index 0000000000000000000000000000000000000000..b4adb185903aa8b3cc52a9a14f1c7eac8f54a05e GIT binary patch literal 65580 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 literal 0 HcmV?d00001 diff --git a/gfx/menu/xaw/gametype_tka.tga b/gfx/menu/xaw/gametype_tka.tga new file mode 100644 index 0000000000000000000000000000000000000000..d8e1ba5fdd38f6b9d273bdf719e2359a9101a933 GIT binary patch literal 65580 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 #include //LegendGuard adds _mod.inc from Mario/survival 15-02-2021 #include +#include //LegendGuard adds _mod.inc from Mario/team_keepaway 15-02-2021 \ No newline at end of file diff --git a/qcsrc/common/gamemodes/gamemode/_mod.qh b/qcsrc/common/gamemodes/gamemode/_mod.qh index 4aa6fa41b..91dd1c646 100644 --- a/qcsrc/common/gamemodes/gamemode/_mod.qh +++ b/qcsrc/common/gamemodes/gamemode/_mod.qh @@ -17,3 +17,4 @@ #include #include //LegendGuard adds _mod.qh from Mario/survival 15-02-2021 #include +#include //LegendGuard adds _mod.qh from Mario/team_keepaway 15-02-2021 \ No newline at end of file diff --git a/qcsrc/common/gamemodes/gamemode/tka/_mod.inc b/qcsrc/common/gamemodes/gamemode/tka/_mod.inc new file mode 100644 index 000000000..6a33efdcf --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/tka/_mod.inc @@ -0,0 +1,8 @@ +// generated file; do not modify +#include +#ifdef CSQC + #include +#endif +#ifdef SVQC + #include +#endif diff --git a/qcsrc/common/gamemodes/gamemode/tka/_mod.qh b/qcsrc/common/gamemodes/gamemode/tka/_mod.qh new file mode 100644 index 000000000..e35dee6a8 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/tka/_mod.qh @@ -0,0 +1,8 @@ +// generated file; do not modify +#include +#ifdef CSQC + #include +#endif +#ifdef SVQC + #include +#endif diff --git a/qcsrc/common/gamemodes/gamemode/tka/cl_tka.qc b/qcsrc/common/gamemodes/gamemode/tka/cl_tka.qc new file mode 100644 index 000000000..eda7c4ff8 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/tka/cl_tka.qc @@ -0,0 +1,55 @@ +#include "cl_tka.qh" + +#include +#include + +// Keepaway HUD mod icon +int tkaball_prevstatus; // last remembered status +float tkaball_statuschange_time; // time when the status changed + +// we don't need to reset for team keepaway since it immediately +// autocorrects prevstatus as to if the player has the ball or not + +void HUD_Mod_TeamKeepaway(vector pos, vector mySize) +{ + mod_active = 1; // team keepaway should always show the mod HUD + + float tkaball_alpha = blink(0.85, 0.15, 5); + + int stat_items = STAT(TKA_BALLSTATUS); + int tkaball = (stat_items & TKA_BALL_CARRYING); + + if(tkaball != tkaball_prevstatus) + { + tkaball_statuschange_time = time; + tkaball_prevstatus = tkaball; + } + + vector tkaball_pos, tkaball_size; + + if(mySize.x > mySize.y) { + tkaball_pos = pos + eX * 0.25 * mySize.x; + tkaball_size = vec2(0.5 * mySize.x, mySize.y); + } else { + tkaball_pos = pos + eY * 0.25 * mySize.y; + tkaball_size = vec2(mySize.x, 0.5 * mySize.y); + } + + float tkaball_statuschange_elapsedtime = time - tkaball_statuschange_time; + float f = bound(0, tkaball_statuschange_elapsedtime*2, 1); + + if(tkaball_prevstatus && f < 1) + drawpic_aspect_skin_expanding(tkaball_pos, "keepawayball_carrying", tkaball_size, '1 1 1', panel_fg_alpha * tkaball_alpha, DRAWFLAG_NORMAL, f); + + if(stat_items & TKA_BALL_CARRYING) // TODO: unique team based icon while carrying + drawpic_aspect_skin(pos, "keepawayball_carrying", vec2(mySize.x, mySize.y), '1 1 1', panel_fg_alpha * tkaball_alpha * f, DRAWFLAG_NORMAL); + else if(stat_items & TKA_BALL_TAKEN_RED) + drawpic_aspect_skin(pos, "tka_taken_red", vec2(mySize.x, mySize.y), '1 1 1', panel_fg_alpha * tkaball_alpha * f, DRAWFLAG_NORMAL); + else if(stat_items & TKA_BALL_TAKEN_RED) + drawpic_aspect_skin(pos, "tka_taken_blue", vec2(mySize.x, mySize.y), '1 1 1', panel_fg_alpha * tkaball_alpha * f, DRAWFLAG_NORMAL); + else if(stat_items & TKA_BALL_TAKEN_RED) + drawpic_aspect_skin(pos, "tka_taken_yellow", vec2(mySize.x, mySize.y), '1 1 1', panel_fg_alpha * tkaball_alpha * f, DRAWFLAG_NORMAL); + else if(stat_items & TKA_BALL_TAKEN_RED) + drawpic_aspect_skin(pos, "tka_taken_pink", vec2(mySize.x, mySize.y), '1 1 1', panel_fg_alpha * tkaball_alpha * f, DRAWFLAG_NORMAL); + +} diff --git a/qcsrc/common/gamemodes/gamemode/tka/cl_tka.qh b/qcsrc/common/gamemodes/gamemode/tka/cl_tka.qh new file mode 100644 index 000000000..d062456a9 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/tka/cl_tka.qh @@ -0,0 +1,3 @@ +#pragma once + +void HUD_Mod_TeamKeepaway(vector pos, vector mySize); diff --git a/qcsrc/common/gamemodes/gamemode/tka/sv_tka.qc b/qcsrc/common/gamemodes/gamemode/tka/sv_tka.qc new file mode 100644 index 000000000..8337cef67 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/tka/sv_tka.qc @@ -0,0 +1,524 @@ +#include "sv_tka.qh" + +#include + +.entity ballcarried; + +int autocvar_g_tka_ballcarrier_effects; +float autocvar_g_tka_ballcarrier_damage; +float autocvar_g_tka_ballcarrier_force; +float autocvar_g_tka_ballcarrier_highspeed; +float autocvar_g_tka_ballcarrier_selfdamage; +float autocvar_g_tka_ballcarrier_selfforce; +float autocvar_g_tka_noncarrier_damage; +float autocvar_g_tka_noncarrier_force; +float autocvar_g_tka_noncarrier_selfdamage; +float autocvar_g_tka_noncarrier_selfforce; +bool autocvar_g_tka_noncarrier_warn; +int autocvar_g_tka_score_bckill; +int autocvar_g_tka_score_killac; +bool autocvar_g_tka_score_team; +int autocvar_g_tka_score_timepoints; +float autocvar_g_tka_score_timeinterval; +float autocvar_g_tkaball_damageforcescale; +int autocvar_g_tkaball_effects; +float autocvar_g_tkaball_respawntime; +int autocvar_g_tkaball_trail_color; + +bool tka_ballcarrier_waypointsprite_visible_for_player(entity this, entity player, entity view) // runs on waypoints which are attached to ballcarriers, updates once per frame +{ + if(view.ballcarried) + if(IS_SPEC(player)) + return false; // we don't want spectators of the ballcarrier to see the attached waypoint on the top of their screen + + // TODO: Make the ballcarrier lack a waypointsprite whenever they have the invisibility powerup + + return true; +} + +void tka_EventLog(string mode, entity actor) // use an alias for easy changing and quick editing later +{ + if(autocvar_sv_eventlog) + GameLogEcho(strcat(":tka:", mode, ((actor != NULL) ? (strcat(":", ftos(actor.team), ":", ftos(actor.playerid))) : ""))); +} + +void tka_TouchEvent(entity this, entity toucher); +void tka_RespawnBall(entity this) // runs whenever the ball needs to be relocated +{ + if(game_stopped) return; + vector oldballorigin = this.origin; + + if(!MoveToRandomMapLocation(this, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, 10, 1024, 256)) + { + entity spot = SelectSpawnPoint(this, true); + setorigin(this, spot.origin); + this.angles = spot.angles; + } + + makevectors(this.angles); + set_movetype(this, MOVETYPE_BOUNCE); + this.velocity = '0 0 200'; + this.angles = '0 0 0'; + this.effects = autocvar_g_tkaball_effects; + settouch(this, tka_TouchEvent); + setthink(this, tka_RespawnBall); + this.nextthink = time + autocvar_g_tkaball_respawntime; + navigation_dynamicgoal_set(this, NULL); + + Send_Effect(EFFECT_ELECTRO_COMBO, oldballorigin, '0 0 0', 1); + Send_Effect(EFFECT_ELECTRO_COMBO, this.origin, '0 0 0', 1); + + WaypointSprite_Spawn(WP_KaBall, 0, 0, this, '0 0 64', NULL, this.team, this, waypointsprite_attachedforcarrier, false, RADARICON_FLAGCARRIER); + WaypointSprite_Ping(this.waypointsprite_attachedforcarrier); + + sound(this, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) +} + +void tka_TimeScoring(entity this) +{ + if(this.owner.ballcarried) + { // add points for holding the ball after a certain amount of time + if(autocvar_g_tka_score_timepoints) + GameRules_scoring_add_team(this.owner, SCORE, autocvar_g_tka_score_timepoints); + + GameRules_scoring_add(this.owner, TKA_BCTIME, (autocvar_g_tka_score_timeinterval / 1)); // interval is divided by 1 so that time always shows "seconds" + this.nextthink = time + autocvar_g_tka_score_timeinterval; + } +} + +void tka_TouchEvent(entity this, entity toucher) // runs any time that the ball comes in contact with something +{ + if (!this || game_stopped) + return; + + if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) + { // The ball fell off the map, respawn it since players can't get to it + tka_RespawnBall(this); + return; + } + if(IS_DEAD(toucher)) { return; } + if(STAT(FROZEN, toucher)) { return; } + if (!IS_PLAYER(toucher)) + { // The ball just touched an object, most likely the world + Send_Effect(EFFECT_BALL_SPARKS, this.origin, '0 0 0', 1); + sound(this, CH_TRIGGER, SND_KA_TOUCH, VOL_BASE, ATTEN_NORM); + return; + } + else if(this.wait > time) { return; } + + // attach the ball to the player + this.owner = toucher; + toucher.ballcarried = this; + GameRules_scoring_vip(toucher, true); + setattachment(this, toucher, ""); + setorigin(this, '0 0 0'); + + // make the ball invisible/unable to do anything/set up time scoring + this.velocity = '0 0 0'; + set_movetype(this, MOVETYPE_NONE); + this.effects |= EF_NODRAW; + settouch(this, func_null); + setthink(this, tka_TimeScoring); + this.nextthink = time + autocvar_g_tka_score_timeinterval; + this.takedamage = DAMAGE_NO; + navigation_dynamicgoal_unset(this); + + // apply effects to player + toucher.glow_color = autocvar_g_tkaball_trail_color; + toucher.glow_trail = true; + toucher.effects |= autocvar_g_tka_ballcarrier_effects; + + // messages and sounds + tka_EventLog("pickup", toucher); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_KEEPAWAY_PICKUP, toucher.netname); + Send_Notification(NOTIF_ALL_EXCEPT, toucher, MSG_CENTER, CENTER_KEEPAWAY_PICKUP, toucher.netname); + Send_Notification(NOTIF_ONE, toucher, MSG_CENTER, CENTER_KEEPAWAY_PICKUP_SELF); + sound(this.owner, CH_TRIGGER, SND_KA_PICKEDUP, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) + + // scoring + GameRules_scoring_add(toucher, TKA_PICKUPS, 1); + + // waypoints + WaypointSprite_AttachCarrier(WP_Null, toucher, RADARICON_FLAGCARRIER); + toucher.waypointsprite_attachedforcarrier.colormod = colormapPaletteColor(toucher.team - 1, 0); + toucher.waypointsprite_attachedforcarrier.waypointsprite_visible_for_player = tka_ballcarrier_waypointsprite_visible_for_player; + WaypointSprite_UpdateRule(toucher.waypointsprite_attachedforcarrier, toucher.team, SPRITERULE_TEAMPLAY); + if(toucher.team == NUM_TEAM_1) + WaypointSprite_UpdateSprites(toucher.waypointsprite_attachedforcarrier, WP_TkaBallCarrierRed, WP_KaBallCarrier, WP_TkaBallCarrierRed); + else if(toucher.team == NUM_TEAM_2) + WaypointSprite_UpdateSprites(toucher.waypointsprite_attachedforcarrier, WP_TkaBallCarrierBlue, WP_KaBallCarrier, WP_TkaBallCarrierBlue); + else if(toucher.team == NUM_TEAM_3) + WaypointSprite_UpdateSprites(toucher.waypointsprite_attachedforcarrier, WP_TkaBallCarrierYellow, WP_KaBallCarrier, WP_TkaBallCarrierYellow); + else if(toucher.team == NUM_TEAM_4) + WaypointSprite_UpdateSprites(toucher.waypointsprite_attachedforcarrier, WP_TkaBallCarrierPink, WP_KaBallCarrier, WP_TkaBallCarrierPink); + WaypointSprite_Ping(toucher.waypointsprite_attachedforcarrier); + WaypointSprite_Kill(this.waypointsprite_attachedforcarrier); +} + +void tka_PlayerReset(entity plyr) +{ + plyr.ballcarried = NULL; + GameRules_scoring_vip(plyr, false); + WaypointSprite_Kill(plyr.waypointsprite_attachedforcarrier); + + // reset the player effects + plyr.glow_trail = false; + plyr.effects &= ~autocvar_g_tka_ballcarrier_effects; +} + +void tka_DropEvent(entity plyr) // runs any time that a player is supposed to lose the ball +{ + entity ball; + ball = plyr.ballcarried; + + if(!ball) { return; } + + // reset the ball + setattachment(ball, NULL, ""); + set_movetype(ball, MOVETYPE_BOUNCE); + ball.wait = time + 1; + settouch(ball, tka_TouchEvent); + setthink(ball, tka_RespawnBall); + ball.nextthink = time + autocvar_g_tkaball_respawntime; + ball.takedamage = DAMAGE_YES; + ball.effects &= ~EF_NODRAW; + setorigin(ball, plyr.origin + '0 0 10'); + ball.velocity = '0 0 200' + '0 100 0'*crandom() + '100 0 0'*crandom(); + ball.owner = NULL; + navigation_dynamicgoal_set(ball, plyr); + + // messages and sounds + tka_EventLog("dropped", plyr); + Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_KEEPAWAY_DROPPED, plyr.netname); + Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_KEEPAWAY_DROPPED, plyr.netname); + sound(NULL, CH_TRIGGER, SND_KA_DROPPED, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) + + // waypoints + WaypointSprite_Spawn(WP_KaBall, 0, 0, ball, '0 0 64', NULL, ball.team, ball, waypointsprite_attachedforcarrier, false, RADARICON_FLAGCARRIER); + WaypointSprite_UpdateRule(ball.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT); + WaypointSprite_Ping(ball.waypointsprite_attachedforcarrier); + + tka_PlayerReset(plyr); +} + +.bool pushable; + +MODEL(TKA_BALL, "models/orbs/orbblue.md3"); + +void tka_RemoveBall() +{ + entity plyr = tka_ball.owner; + if (plyr) // it was attached + tka_PlayerReset(plyr); + else + WaypointSprite_DetachCarrier(tka_ball); + delete(tka_ball); + tka_ball = NULL; +} + +void tka_SpawnBall() +{ + entity e = new(keepawayball); + setmodel(e, MDL_TKA_BALL); + setsize(e, '-16 -16 -20', '16 16 20'); // 20 20 20 was too big, player is only 16 16 24... gotta cheat with the Z (20) axis so that the particle isn't cut off + e.damageforcescale = autocvar_g_tkaball_damageforcescale; + e.takedamage = DAMAGE_YES; + e.solid = SOLID_TRIGGER; + set_movetype(e, MOVETYPE_BOUNCE); + e.glow_color = autocvar_g_tkaball_trail_color; + e.glow_trail = true; + e.flags = FL_ITEM; + IL_PUSH(g_items, e); + e.pushable = true; + settouch(e, tka_TouchEvent); + e.owner = NULL; + tka_ball = e; + navigation_dynamicgoal_init(tka_ball, false); + + InitializeEntity(e, tka_RespawnBall, INITPRIO_SETLOCATION); // is this the right priority? Neh, I have no idea.. Well-- it works! So. +} + +void tka_Handler_CheckBall(entity this) +{ + if(time < game_starttime) + { + if (tka_ball) + tka_RemoveBall(); + } + else + { + if (!tka_ball) + tka_SpawnBall(); + } + + this.nextthink = time; +} + +void tka_DelayedInit(entity this) // run at the start of a match, initiates game mode +{ + tka_Handler = new(tka_Handler); + setthink(tka_Handler, tka_Handler_CheckBall); + tka_Handler.nextthink = time; +} + + +// ================ +// Bot player logic +// ================ + +void havocbot_goalrating_tkaball(entity this, float ratingscale, vector org) +{ + entity ball_owner = tka_ball.owner; + + if (ball_owner == this || SAME_TEAM(ball_owner, this)) // TODO: defend ball carrier? + return; + + if (ball_owner) + navigation_routerating(this, ball_owner, ratingscale, 2000); + else + navigation_routerating(this, tka_ball, ratingscale, 2000); +} + +void havocbot_role_tka_carrier(entity this) +{ + if (IS_DEAD(this)) + return; + + if (navigation_goalrating_timeout(this)) + { + navigation_goalrating_start(this); + havocbot_goalrating_items(this, 10000, this.origin, 10000); + havocbot_goalrating_enemyplayers(this, 10000, this.origin, 10000); + havocbot_goalrating_waypoints(this, 1, this.origin, 3000); + navigation_goalrating_end(this); + + navigation_goalrating_timeout_set(this); + } + + if (!this.ballcarried) + { + this.havocbot_role = havocbot_role_tka_collector; + navigation_goalrating_timeout_expire(this, 2); + } +} + +void havocbot_role_tka_collector(entity this) +{ + if (IS_DEAD(this)) + return; + + if (navigation_goalrating_timeout(this)) + { + navigation_goalrating_start(this); + havocbot_goalrating_items(this, 10000, this.origin, 10000); + havocbot_goalrating_enemyplayers(this, 500, this.origin, 10000); + havocbot_goalrating_tkaball(this, 8000, this.origin); + navigation_goalrating_end(this); + + navigation_goalrating_timeout_set(this); + } + + if (this.ballcarried) + { + this.havocbot_role = havocbot_role_tka_carrier; + navigation_goalrating_timeout_expire(this, 2); + } +} + + +// ============== +// Hook Functions +// ============== + +MUTATOR_HOOKFUNCTION(tka, PlayerDies) +{ + entity frag_attacker = M_ARGV(1, entity); + entity frag_target = M_ARGV(2, entity); + + if(frag_attacker != frag_target && IS_PLAYER(frag_attacker) && DIFF_TEAM(frag_attacker, frag_target)) + { + if(frag_target.ballcarried) { // add to amount of times killing carrier + GameRules_scoring_add(frag_attacker, TKA_CARRIERKILLS, 1); + if(autocvar_g_tka_score_bckill) // add bckills to the score + GameRules_scoring_add_team(frag_attacker, SCORE, autocvar_g_tka_score_bckill); + } + else if(!frag_attacker.ballcarried && !(autocvar_g_tka_score_team && SAME_TEAM(tka_ball.owner, frag_attacker))) + { + if(autocvar_g_tka_noncarrier_warn) + Send_Notification(NOTIF_ONE_ONLY, frag_attacker, MSG_CENTER, CENTER_KEEPAWAY_WARN); + } + + if(frag_attacker.ballcarried || (autocvar_g_tka_score_team && SAME_TEAM(tka_ball.owner, frag_attacker))) // add to amount of kills while ballcarrier (or if team scoring is enabled) + GameRules_scoring_add_team(frag_attacker, SCORE, autocvar_g_tka_score_killac); + } + + if(frag_target.ballcarried) { tka_DropEvent(frag_target); } // a player with the ball has died, drop it +} + +MUTATOR_HOOKFUNCTION(tka, GiveFragsForKill) +{ + M_ARGV(2, float) = 0; // no frags counted in keepaway + return true; // you deceptive little bugger ;3 This needs to be true in order for this function to even count. +} + +MUTATOR_HOOKFUNCTION(tka, Scores_CountFragsRemaining) +{ + // announce remaining frags, but only when timed scoring is off + return !autocvar_g_tka_score_timepoints; +} + +MUTATOR_HOOKFUNCTION(tka, PlayerPreThink) +{ + entity player = M_ARGV(0, entity); + + // clear the item used for the ball in keepaway + STAT(TKA_BALLSTATUS, player) &= ~(TKA_BALL_TAKEN_RED | TKA_BALL_TAKEN_BLUE | TKA_BALL_TAKEN_YELLOW | TKA_BALL_TAKEN_PINK | TKA_BALL_CARRYING | TKA_BALL_DROPPED); + + // if the player has the ball, make sure they have the item for it (Used for HUD primarily) + if(player.ballcarried) + STAT(TKA_BALLSTATUS, player) |= TKA_BALL_CARRYING; + + if(!tka_ball.owner) + STAT(TKA_BALLSTATUS, player) |= TKA_BALL_DROPPED; + else + { + // TODO: teamless carrier? + switch(tka_ball.owner.team) + { + case NUM_TEAM_1: STAT(TKA_BALLSTATUS, player) |= TKA_BALL_TAKEN_RED; break; + case NUM_TEAM_2: STAT(TKA_BALLSTATUS, player) |= TKA_BALL_TAKEN_BLUE; break; + case NUM_TEAM_3: STAT(TKA_BALLSTATUS, player) |= TKA_BALL_TAKEN_YELLOW; break; + case NUM_TEAM_4: STAT(TKA_BALLSTATUS, player) |= TKA_BALL_TAKEN_PINK; break; + } + } +} + +MUTATOR_HOOKFUNCTION(tka, PlayerUseKey) +{ + entity player = M_ARGV(0, entity); + + if(MUTATOR_RETURNVALUE == 0) + if(player.ballcarried) + { + tka_DropEvent(player); + return true; + } +} + +MUTATOR_HOOKFUNCTION(tka, Damage_Calculate) // for changing damage and force values that are applied to players in g_damage.qc +{ + entity frag_attacker = M_ARGV(1, entity); + entity frag_target = M_ARGV(2, entity); + float frag_damage = M_ARGV(4, float); + vector frag_force = M_ARGV(6, vector); + + if(frag_attacker.ballcarried) // if the attacker is a ballcarrier + { + if(frag_target == frag_attacker) // damage done to yourself + { + frag_damage *= autocvar_g_tka_ballcarrier_selfdamage; + frag_force *= autocvar_g_tka_ballcarrier_selfforce; + } + else // damage done to noncarriers + { + frag_damage *= autocvar_g_tka_ballcarrier_damage; + frag_force *= autocvar_g_tka_ballcarrier_force; + } + } + else if (IS_PLAYER(frag_attacker) && !frag_target.ballcarried) // if the target is a noncarrier + { + if(frag_target == frag_attacker) // damage done to yourself + { + frag_damage *= autocvar_g_tka_noncarrier_selfdamage; + frag_force *= autocvar_g_tka_noncarrier_selfforce; + } + else // damage done to other noncarriers + { + frag_damage *= autocvar_g_tka_noncarrier_damage; + frag_force *= autocvar_g_tka_noncarrier_force; + } + } + + M_ARGV(4, float) = frag_damage; + M_ARGV(6, vector) = frag_force; +} + +MUTATOR_HOOKFUNCTION(tka, ClientDisconnect) +{ + entity player = M_ARGV(0, entity); + + if(player.ballcarried) { tka_DropEvent(player); } // a player with the ball has left the match, drop it +} + +MUTATOR_HOOKFUNCTION(tka, MakePlayerObserver) +{ + entity player = M_ARGV(0, entity); + + if(player.ballcarried) { tka_DropEvent(player); } // a player with the ball has left the match, drop it +} + +MUTATOR_HOOKFUNCTION(tka, PlayerPowerups) +{ + entity player = M_ARGV(0, entity); + + // In the future this hook is supposed to allow me to do some extra stuff with waypointsprites and invisibility powerup + // So bare with me until I can fix a certain bug with tka_ballcarrier_waypointsprite_visible_for_player() + + player.effects &= ~autocvar_g_tka_ballcarrier_effects; + + if(player.ballcarried) + player.effects |= autocvar_g_tka_ballcarrier_effects; +} + + +MUTATOR_HOOKFUNCTION(tka, PlayerPhysics_UpdateStats) +{ + entity player = M_ARGV(0, entity); + // these automatically reset, no need to worry + + if(player.ballcarried) + STAT(MOVEVARS_HIGHSPEED, player) *= autocvar_g_tka_ballcarrier_highspeed; +} + +MUTATOR_HOOKFUNCTION(tka, BotShouldAttack) +{ + entity bot = M_ARGV(0, entity); + entity targ = M_ARGV(1, entity); + + // if neither player has ball then don't attack unless the ball is on the ground + if(!targ.ballcarried && !bot.ballcarried && tka_ball.owner && !(autocvar_g_tka_score_team && SAME_TEAM(tka_ball.owner, bot))) + return true; +} + +MUTATOR_HOOKFUNCTION(tka, HavocBot_ChooseRole) +{ + entity bot = M_ARGV(0, entity); + + if (bot.ballcarried) + bot.havocbot_role = havocbot_role_tka_carrier; + else + bot.havocbot_role = havocbot_role_tka_collector; + return true; +} + +MUTATOR_HOOKFUNCTION(tka, DropSpecialItems) +{ + entity frag_target = M_ARGV(0, entity); + + if(frag_target.ballcarried) + tka_DropEvent(frag_target); +} + +MUTATOR_HOOKFUNCTION(tka, SpectateCopy) +{ + entity spectatee = M_ARGV(0, entity); + entity client = M_ARGV(1, entity); + + STAT(TKA_BALLSTATUS, client) = STAT(TKA_BALLSTATUS, spectatee); +} + +MUTATOR_HOOKFUNCTION(tka, TeamBalance_CheckAllowedTeams, CBC_ORDER_EXCLUSIVE) +{ + M_ARGV(0, float) = tka_teams; + return true; +} diff --git a/qcsrc/common/gamemodes/gamemode/tka/sv_tka.qh b/qcsrc/common/gamemodes/gamemode/tka/sv_tka.qh new file mode 100644 index 000000000..7b7236f9f --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/tka/sv_tka.qh @@ -0,0 +1,45 @@ +#pragma once + +#include +int autocvar_g_tka_point_limit; +int autocvar_g_tka_point_leadlimit; +bool autocvar_g_tka_team_spawns; +void tka_DelayedInit(entity this); + +int tka_teams; +//int autocvar_g_tka_teams; +int autocvar_g_tka_teams_override; + +REGISTER_MUTATOR(tka, false) +{ + MUTATOR_STATIC(); + MUTATOR_ONADD + { + GameRules_teams(true); + GameRules_spawning_teams(autocvar_g_tka_team_spawns); + GameRules_limit_score(autocvar_g_tka_point_limit); + GameRules_limit_lead(autocvar_g_tka_point_leadlimit); + + tka_teams = autocvar_g_tka_teams_override; + if(tka_teams < 2) + tka_teams = cvar("g_tka_teams"); // read the cvar directly as it gets written earlier in the same frame + tka_teams = BITS(bound(2, tka_teams, 4)); + GameRules_scoring(tka_teams, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, { + field(SP_TKA_PICKUPS, "pickups", 0); + field(SP_TKA_CARRIERKILLS, "bckills", 0); + field(SP_TKA_BCTIME, "bctime", SFL_SORT_PRIO_SECONDARY); + }); + + InitializeEntity(NULL, tka_DelayedInit, INITPRIO_GAMETYPE); + } + return false; +} + + +entity tka_ball; +entity tka_Handler; + +void(entity this) havocbot_role_tka_carrier; +void(entity this) havocbot_role_tka_collector; + +void tka_DropEvent(entity plyr); diff --git a/qcsrc/common/gamemodes/gamemode/tka/tka.qc b/qcsrc/common/gamemodes/gamemode/tka/tka.qc new file mode 100644 index 000000000..e0e6033c0 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/tka/tka.qc @@ -0,0 +1 @@ +#include "tka.qh" diff --git a/qcsrc/common/gamemodes/gamemode/tka/tka.qh b/qcsrc/common/gamemodes/gamemode/tka/tka.qh new file mode 100644 index 000000000..e8682dba6 --- /dev/null +++ b/qcsrc/common/gamemodes/gamemode/tka/tka.qh @@ -0,0 +1,59 @@ +#pragma once + +#include +#include +#include +#if defined(CSQC) + #include +#endif + +CLASS(TeamKeepaway, Gametype) + INIT(TeamKeepaway) + { + this.gametype_init(this, _("Team Keepaway"),"tka","g_tka",GAMETYPE_FLAG_TEAMPLAY | GAMETYPE_FLAG_USEPOINTS,"","timelimit=15 pointlimit=50 teams=2 leadlimit=0",_("Keep the ball in your team's possession to get points for kills")); + } + METHOD(TeamKeepaway, m_parse_mapinfo, bool(string k, string v)) + { + if (!k) { + cvar_set("g_tka_teams", cvar_defstring("g_tka_teams")); + return true; + } + switch (k) { + case "teams": + cvar_set("g_tka_teams", v); + return true; + } + return false; + } + METHOD(TeamKeepaway, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter)) + { + if(spawnpoints >= 8 && diameter > 4096) + return true; + return false; + } + METHOD(TeamKeepaway, m_isForcedSupported, bool(Gametype this)) + { + if(cvar("g_tka_on_dm_maps")) + { + // if this is set, all DM and KA maps support TKA too + if(!(MapInfo_Map_supportedGametypes & this.m_flags) && ((MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH.m_flags) || (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_KEEPAWAY.m_flags))) + return true; // TODO: references another gametype (alternatively, we could check which gamemodes are always enabled and append this if any are supported) + } + return false; + } + METHOD(TeamKeepaway, m_setTeams, void(string sa)) + { + cvar_set("g_tka_teams", sa); + } +#ifdef CSQC + ATTRIB(TeamKeepaway, m_modicons, void(vector pos, vector mySize), HUD_Mod_TeamKeepaway); +#endif +ENDCLASS(TeamKeepaway) +REGISTER_GAMETYPE(TEAMKEEPAWAY, NEW(TeamKeepaway)); + +const int TKA_BALL_TAKEN_RED = 1; +const int TKA_BALL_TAKEN_BLUE = 2; +const int TKA_BALL_TAKEN_YELLOW = 3; +const int TKA_BALL_TAKEN_PINK = 4; +const int TKA_BALL_CARRYING = 8; +const int TKA_BALL_DROPPED = 12; diff --git a/qcsrc/common/mutators/mutator/waypoints/all.inc b/qcsrc/common/mutators/mutator/waypoints/all.inc index daa5af4d5..a2aad0e43 100644 --- a/qcsrc/common/mutators/mutator/waypoints/all.inc +++ b/qcsrc/common/mutators/mutator/waypoints/all.inc @@ -47,6 +47,11 @@ REGISTER_WAYPOINT(KeyCarrierPink, _("Key carrier"), "kh_pink_carrying", '0 1 1', REGISTER_WAYPOINT(KaBall, _("Ball"), "notify_ballpickedup", '0 1 1', 1); REGISTER_WAYPOINT(KaBallCarrier, _("Ball carrier"), "keepawayball_carrying", '1 0 0', 1); +//LegendGuard adds REGISTER_WAYPOINT from Mario/team_keepaway 15-02-2021 +REGISTER_WAYPOINT(TkaBallCarrierRed, _("Ball carrier"), "tka_taken_red", '0 1 1', 1); +REGISTER_WAYPOINT(TkaBallCarrierBlue, _("Ball carrier"), "tka_taken_blue", '0 1 1', 1); +REGISTER_WAYPOINT(TkaBallCarrierYellow, _("Ball carrier"), "tka_taken_yellow", '0 1 1', 1); +REGISTER_WAYPOINT(TkaBallCarrierPink, _("Ball carrier"), "tka_taken_pink", '0 1 1', 1); REGISTER_WAYPOINT(NbBall, _("Ball"), "", '0.91 0.85 0.62', 1); REGISTER_WAYPOINT(NbGoal, _("Goal"), "", '1 0.5 0', 1); diff --git a/qcsrc/common/scores.qh b/qcsrc/common/scores.qh index 09c6995b6..64608a0a7 100644 --- a/qcsrc/common/scores.qh +++ b/qcsrc/common/scores.qh @@ -110,6 +110,10 @@ REGISTER_SP(MEDAL_KILLSTREAK_15); REGISTER_SP(SV_SURVIVALS); //LegendGuard adds REGISTER_SP from Mario/survival 15-02-2021 REGISTER_SP(SV_HUNTS); + +REGISTER_SP(TKA_PICKUPS); //LegendGuard adds REGISTER_SP from Mario/team_keepaway 15-02-2021 +REGISTER_SP(TKA_BCTIME); +REGISTER_SP(TKA_CARRIERKILLS); #endif diff --git a/qcsrc/common/stats.qh b/qcsrc/common/stats.qh index 0d17414d0..a38d2d7c9 100644 --- a/qcsrc/common/stats.qh +++ b/qcsrc/common/stats.qh @@ -160,6 +160,7 @@ REGISTER_STAT(AMMUNITIONING_ORB, float) //LegendGuard registers new STAT 13-02-2 REGISTER_STAT(AMMUNITIONING_ORB_ALPHA, float) REGISTER_STAT(DARK_ORB, float) //LegendGuard registers new STAT 08-02-2021 REGISTER_STAT(DARK_ORB_ALPHA, float) +REGISTER_STAT(TKA_BALLSTATUS, int) //LegendGuard adds STAT from Mario/team_keepaway 15-02-2021 #ifdef SVQC float autocvar_sv_showfps = 5; diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index 3ea53be5e..67ee965d7 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -675,6 +675,7 @@ float updateCompression() GAMETYPE(MAPINFO_TYPE_CA) \ GAMETYPE(MAPINFO_TYPE_FREEZETAG) \ GAMETYPE(MAPINFO_TYPE_KEEPAWAY) \ + GAMETYPE(MAPINFO_TYPE_TEAMKEEPAWAY) \ GAMETYPE(MAPINFO_TYPE_KEYHUNT) \ GAMETYPE(MAPINFO_TYPE_LMS) \ GAMETYPE(MAPINFO_TYPE_DOMINATION) \ @@ -685,6 +686,7 @@ float updateCompression() /* GAMETYPE(MAPINFO_TYPE_INVASION) */ \ GAMETYPE(MAPINFO_TYPE_SURVIVAL) \ //LegendGuard adds GAMETYPE for menu from Mario/survival 15-02-2021 + //LegendGuard adds GAMETYPE for menu from Mario/team_keepaway 15-02-2021 /**/ // hidden gametypes come last so indexing always works correctly diff --git a/qcsrc/server/world.qc b/qcsrc/server/world.qc index d509eccf8..f46194fa4 100644 --- a/qcsrc/server/world.qc +++ b/qcsrc/server/world.qc @@ -301,6 +301,9 @@ void cvar_changes_init() BADCVAR("g_tdm"); BADCVAR("g_tdm_on_dm_maps"); BADCVAR("g_tdm_teams"); + BADCVAR("g_tka"); + BADCVAR("g_tka_on_dm_maps"); + BADCVAR("g_tka_teams"); BADCVAR("g_vip"); BADCVAR("leadlimit"); BADCVAR("nextmap"); @@ -310,6 +313,8 @@ void cvar_changes_init() BADCVAR("g_mapinfo_ignore_warnings"); BADCVAR("g_maplist_ignore_sizes"); BADCVAR("g_maplist_sizes_count_bots"); + //LegendGuard adds BADCVAR(g_*) from Mario/survival 15-02-2021 + //LegendGuard adds BADCVAR(g_*) from Mario/team_keepaway 15-02-2021 // long BADCVAR("hostname"); -- 2.39.2