]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Update code slightly (Compiles now!), go with "keepaway" instead of "ka" whenever...
authorunknown <samual@xonotic.org>
Tue, 16 Nov 2010 07:25:28 +0000 (02:25 -0500)
committerunknown <samual@xonotic.org>
Tue, 16 Nov 2010 07:25:28 +0000 (02:25 -0500)
qcsrc/common/mapinfo.qc
qcsrc/menu/xonotic/dialog_multiplayer_create.c
qcsrc/server/defs.qh
qcsrc/server/g_world.qc
qcsrc/server/mutators/gamemode_keepaway.qc
qcsrc/server/mutators/mutators.qh
qcsrc/server/progs.src
qcsrc/server/scores_rules.qc
qcsrc/server/teamplay.qc

index 95301c95c027612dcd92421492a197ade6a4c72b..863862c8788089a3b25749bc78ca08c2772d7c81 100644 (file)
@@ -469,7 +469,7 @@ void _MapInfo_Map_ApplyGametype(string s, float pWantedType, float pThisType, fl
                sa = car(s);
                if(sa != "")
                        cvar_set("fraglimit", sa);
-               s = cdr(s)
+               s = cdr(s);
        }
 
        // rc = timelimit timelimit_qualification laps laps_teamplay
@@ -1147,7 +1147,7 @@ float MapInfo_CurrentGametype()
                return MAPINFO_TYPE_NEXBALL;
        else if(cvar("g_cts"))
                return MAPINFO_TYPE_CTS;
-       else if(cvar("g_ka"))
+       else if(cvar("g_keepaway"))
                return MAPINFO_TYPE_KEEPAWAY;
        else
                return MAPINFO_TYPE_DEATHMATCH;
@@ -1190,7 +1190,7 @@ string MapInfo_GetGameTypeCvar(float t)
                case MAPINFO_TYPE_RACE:                         return "g_race";
                case MAPINFO_TYPE_NEXBALL:              return "g_nexball";
                case MAPINFO_TYPE_CTS:                  return "g_cts";
-               case MAPINFO_TYPE_KEEPAWAY:             return "g_ka";
+               case MAPINFO_TYPE_KEEPAWAY:             return "g_keepaway";
                default: return "";
        }
 }
@@ -1212,7 +1212,7 @@ void MapInfo_SwitchGameType(float t)
        cvar_set("g_race",       (t == MAPINFO_TYPE_RACE)            ? "1" : "0");
        cvar_set("g_nexball",    (t == MAPINFO_TYPE_NEXBALL)         ? "1" : "0");
        cvar_set("g_cts",        (t == MAPINFO_TYPE_CTS)             ? "1" : "0");
-       cvar_set("g_ka",            (t == MAPINFO_TYPE_KEEPAWAY)          ? "1" : "0");
+       cvar_set("g_keepaway",   (t == MAPINFO_TYPE_KEEPAWAY)        ? "1" : "0");
 }
 
 void MapInfo_LoadMap(string s)
index ad810068b50638af9d10d8f27944171458e8c51e..81e0969dc089006c7af01d7b6bc3f4f9be7a49bc 100644 (file)
@@ -41,7 +41,7 @@ void XonoticServerCreateTab_fill(entity me)
                        if(e.checked) e0 = NULL;
                me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_runematch", "Runematch"));
                        if(e.checked) e0 = NULL;
-               me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_ka", "Keepaway"));
+               me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_keepaway", "Keepaway"));
                        if(e.checked) e0 = NULL;
                me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_race", "Race"));
                        if(e.checked) e0 = NULL;
index 83b3b7fdf6381d1d1581a930606f06ce056aa192..bb278ce2bd1fe5fb3ecb47ace8294aa368d777fb 100644 (file)
@@ -17,7 +17,7 @@ float require_spawnfunc_prefix; // if this float exists, only functions with spa
 
 float ctf_score_value(string parameter);
 
-float g_dm, g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_ca, g_lms, g_runematch, g_race, g_nexball, g_cts, g_ka;
+float g_dm, g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_ca, g_lms, g_runematch, g_race, g_nexball, g_cts, g_keepaway;
 float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_midair, g_minstagib, g_pinata, g_norecoil, g_minstagib_invis_alpha, g_bloodloss;
 float g_warmup_limit;
 float g_warmup_allguns;
index bdadbdccc22f3e056755e0cda9607950b4e8bcda..cb9b6cc1cbe464848fed8f11610fe65fa69f6142 100644 (file)
@@ -329,7 +329,7 @@ void cvar_changes_init()
                BADCVAR("g_runematch");
                BADCVAR("g_tdm");
                BADCVAR("g_nexball");
-               BADCVAR("g_ka");
+               BADCVAR("g_keepaway");
                BADCVAR("teamplay");
 
                // long
index eb1bc4bb002511795d5ccd85dca21c1e1f1242a3..607705384b610f23850b5a0205043a2f29cd60cf 100644 (file)
@@ -1,4 +1,22 @@
+void ka_SpawnBall(void);
+void ka_TouchEvent(entity);
+void ka_RespawnBall(void);
+
 void ka_Initialize()
+{
+       if(!g_keepaway)
+               return;
+               
+       precache_sound("keepaway/pickedup.wav");
+       precache_sound("keepaway/dropped.wav");
+       
+       entity e;
+       e = spawn();
+       e.think = ka_SpawnBall;
+       e.nextthink = time;
+}
+
+void ka_SpawnBall()
 {
        if(!g_keepaway) { 
                remove(self); 
@@ -18,17 +36,17 @@ void ka_Initialize()
        self.effects = self.effects | EF_FULLBRIGHT;
        self.movetype = MOVETYPE_BOUNCE;
        self.touch = ka_TouchEvent;
-       self.think = ka_SpawnBall;
+       self.think = ka_RespawnBall;
        self.nextthink = time;
        self.flags = FL_ITEM;
-       self.reset = ka_Reset;
+       //self.reset = ka_Reset;
        self.owner = world;
        
        // todo: Waypoints and radar
        //WaypointSprite_AttachCarrier();
 }
 
-void ka_SpawnBall()
+void ka_RespawnBall()
 {
        if(MoveToRandomMapLocation(self, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, 10, 1024, 256))
        {
@@ -38,13 +56,13 @@ void ka_SpawnBall()
                self.angles = '0 0 0';
                self.solid = SOLID_TRIGGER;
                //self.touch = ka_TouchEvent;
-               self.think = ka_SpawnBall;
+               self.think = ka_RespawnBall;
                self.nextthink = time + cvar("g_keepawayball_respawntime");
        }
        else
        {
                // sorry, can't spawn, better luck next frame
-               self.think = ka_SpawnBall;
+               self.think = ka_RespawnBall;
                self.nextthink = time;
        }
 }
@@ -80,9 +98,9 @@ void ka_TouchEvent(entity plyr)
        self.nextthink = 0;
 
        self.glow_color = cvar("g_keepawayball_trail_color");
-       self.glowtrail = TRUE;
+       self.glow_trail = TRUE;
        plyr.effects |= 8;
-       plyr.alpha = 0.6
+       plyr.alpha = 0.6;
 
        bprint(other.netname, "^7 has picked up the ball!\n");
        WriteByte(MSG_BROADCAST, SVC_CENTERPRINT);
@@ -94,6 +112,43 @@ void ka_TouchEvent(entity plyr)
        // todo: Waypoints and radar
 }
 
+MUTATOR_HOOKFUNCTION(ka_RemovePlayer)
+{
+       entity ball;
+       ball = self.ballcarried;
+
+       setattachment(ball, world, "");
+       ball.movetype = MOVETYPE_BOUNCE;
+       ball.solid = SOLID_TRIGGER;
+       ball.wait = time + 1;
+       ball.ctf_droptime = time;
+       ball.think = ka_SpawnBall;
+       ball.nextthink = time + cvar("g_keepawayball_respawntime");
+       ball.touch = ka_TouchEvent;
+       self.effects = EF_LOWPRECISION;
+       self.alpha = 1.0;
+       ball.alpha = 1.0;
+       setorigin(ball, self.origin + '0 0 10');
+       ball.velocity = '0 0 200' + '0 100 0'*crandom() + '100 0 0'*crandom();
+       
+       bprint(self.netname, "^7 has dropped the ball!\n");
+       WriteByte(MSG_BROADCAST, SVC_CENTERPRINT);
+       WriteString(MSG_BROADCAST, strcat("\n\n", self.netname, "^7 has dropped the ball!\n"));
+       sound(other, CHAN_AUTO, "keepaway/dropped.wav", VOL_BASE, ATTN_NORM);   
+       
+       PlayerScore_Add(self, SP_KEEPAWAY_DROPS, 1);
+       
+       // todo
+       //WaypointSprite_AttachCarrier("ka-ball", ball);
+       //WaypointSprite_Kill(plyr.waypointsprite_attachedforcarrier);
+       
+       ball.owner.ballcarried = world;
+       ball.owner = world;
+
+       return 1;
+}
+
+/*
 void ka_DropEvent(entity plyr, entity ball)
 {      
        setattachment(ball, world, "");
@@ -125,7 +180,7 @@ void ka_DropEvent(entity plyr, entity ball)
        ball.owner = world;
 }
 
-/*
+
 void ka_CheckWinner()
 {
 
@@ -186,59 +241,6 @@ MUTATOR_HOOKFUNCTION(ka_PlayerDies)
 
 MUTATOR_HOOKFUNCTION(tag_RemovePlayer)
 {
-       if(self.tag_playernum == -1)
-               return 0; // nothing to remove
-
-       float i, j;
-       /*for (i = self.tag_playernum; i < tag_players_count; ++i)
-       {
-               tag_players[i] = tag_players[i+1];
-               tag_players[i].tag_playernum = tag_players[i].tag_playernum - 1;
-       }
-       */
-
-       tag_players[self.tag_playernum] = world;
-       tag_players_count = tag_players_count - 1;
-
-       // if other players have our color, randomize their color
-       entity e, random_player;
-       float temp_tag_players_count;
-       temp_tag_players_count = tag_players_count;
-
-       if(!next_round) // ... but ONLY if next_round isn't set. We don't care about the colors if the round has already ended
-       for(i = 0; i < temp_tag_players_count; ++i) // check other players...
-       {
-               e = tag_players[i];
-               if(e == world) // empty slot, skip to next
-               {
-                       if(temp_tag_players_count < TAGCOLOR_MAX - 1) // just in case
-                               ++temp_tag_players_count;
-                       continue;
-               }
-
-               if(e.tagcolor == self.tagcolor_original) // and see if they have our original tag color
-               {
-                       for(j = 0; j < 100; ++j) // try 100 times to find a color that isn't the same as our color. If this fails we are either damn unlucky, or there are really only players left of our color
-                       {
-                               random_player = tag_players[floor(random() * (TAGCOLOR_MAX - 1))];
-
-                               if(random_player == world) // hit empty slot, try again
-                                       continue;
-
-                               if(random_player.tagcolor != self.tagcolor_original) // break if we found another color
-                               {
-                                       break;
-                               }
-                       }
-                       e.tagcolor = random_player.tagcolor;
-                       setcolor(e, 16 * e.tagcolor + e.tagcolor);
-               }
-       }
-
-       self.tag_playernum = -1;
-
-       if(tag_players_count > 1 && time > warmup)
-               tag_CheckWinner();
 
        return 1;
 }
@@ -257,11 +259,11 @@ MUTATOR_HOOKFUNCTION(tag_PlayerPreThink)
 */
 
 
-MUTATOR_DEFINITION(gamemode_ka)
+MUTATOR_DEFINITION(gamemode_keepaway)
 {
        MUTATOR_HOOK(MakePlayerObserver, ka_RemovePlayer, CBC_ORDER_ANY);
        MUTATOR_HOOK(ClientDisconnect, ka_RemovePlayer, CBC_ORDER_ANY);
-       MUTATOR_HOOK(PlayerDies, ka_PlayerDies, CBC_ORDER_ANY);
+       //MUTATOR_HOOK(PlayerDies, ka_PlayerDies, CBC_ORDER_ANY);
        //MUTATOR_HOOK(PlayerSpawn, ka_PlayerSpawn, CBC_ORDER_ANY);
        //MUTATOR_HOOK(GiveFragsForKill, ka_GiveFragsForKill, CBC_ORDER_FIRST);
        //MUTATOR_HOOK(PlayerPreThink, ka_PlayerPreThink, CBC_ORDER_FIRST);
@@ -270,13 +272,13 @@ MUTATOR_DEFINITION(gamemode_ka)
        {
                if(time > 1) // game loads at time 1
                        error("This is a game type and it cannot be added at runtime.");
-               g_ka = 1;
+               g_keepaway = 1;
                ka_Initialize();
        }
 
        MUTATOR_ONREMOVE
        {
-               g_ka = 0;
+               g_keepaway = 0;
                error("This is a game type and it cannot be removed at runtime.");
        }
 
index 542014e8691275dfe11870f8d97118036f5f846e..d0cf0f7213372eea4d7e6560b5fe81f8b95b6246 100644 (file)
@@ -1,4 +1,5 @@
 MUTATOR_DECLARATION(gamemode_keyhunt);
+MUTATOR_DECLARATION(gamemode_keepaway);
 
 MUTATOR_DECLARATION(mutator_nix);
 MUTATOR_DECLARATION(mutator_dodging);
index c2718d4e8642d69e006bc84400a4ff442d235b39..93f9bf56d92c1bf20b79beb88a0767cb7634bdc8 100644 (file)
@@ -177,6 +177,7 @@ cheats.qc
 
 mutators/base.qc
 mutators/gamemode_keyhunt.qc
+mutators/gamemode_keepaway.qc
 mutators/mutator_nix.qc
 mutators/mutator_dodging.qc
 mutators/mutator_rocketflying.qc
index 4db1b4493af571ec3b12f504347a6461a41beba1..dcfad174d0d233868863e3f3b4e700eeea21408a 100644 (file)
@@ -187,3 +187,18 @@ void ScoreRules_nexball(float teams)
        ScoreInfo_SetLabel_PlayerScore(SP_NEXBALL_FAULTS, "faults", SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER);
        ScoreRules_basics_end();
 }
+
+// Keep Away stuff
+#define SP_KEEPAWAY_PICKUPS 4
+#define SP_KEEPAWAY_CARRIERKILLS 5
+#define SP_KEEPAWAY_DROPS 6
+#define SP_KEEPAWAY_SCORE 7
+void ScoreRules_keepaway()
+{
+       ScoreRules_basics(0, SFL_SORT_PRIO_PRIMARY, 0, FALSE);
+       ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_SCORE,                "score",        SFL_SORT_PRIO_PRIMARY);
+       ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_PICKUPS,      "pickups",  0);
+       ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_CARRIERKILLS, "bckills",  0);
+       ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_DROPS,        "drops",    SFL_LOWER_IS_BETTER);
+       ScoreRules_basics_end();
+}
index 88485d8ee21c6990276fc8161970fcf86def9f98..7e73bc142f93c76f9ea3a3e1263a9c9c859631b8 100644 (file)
@@ -101,7 +101,7 @@ void WriteGameCvars()
        cvar_set("g_race", ftos(g_race));
        cvar_set("g_nexball", ftos(g_nexball));
        cvar_set("g_cts", ftos(g_cts));
-       cvar_set("g_ka", ftos(g_ka));
+       cvar_set("g_keepaway", ftos(g_keepaway));
 }
 
 void ReadGameCvars()
@@ -128,7 +128,7 @@ void ReadGameCvars()
                found += (g_race = (!found && (prev != GAME_RACE) && cvar("g_race")));
                found += (g_nexball = (!found && (prev != GAME_NEXBALL) && cvar("g_nexball")));
                found += (g_cts = (!found && (prev != GAME_CTS) && cvar("g_cts")));
-               found += (g_ka = (!found && (prev != GAME_KEEPAWAY) && cvar("g_ka")));
+               found += (g_keepaway = (!found && (prev != GAME_KEEPAWAY) && cvar("g_keepaway")));
 
                if(found)
                        break;
@@ -375,11 +375,11 @@ void InitGameplayMode()
                have_team_spawns = -1; // request team spawns
        }
 
-       if(g_ka)
+       if(g_keepaway)
        {
                game = GAME_KEEPAWAY;
                gamemode_name = "Keepaway";
-               MUTATOR_ADD(gamemode_ka);
+               MUTATOR_ADD(gamemode_keepaway);
        }
 
        if(teams_matter)