[nexuiz-commits] r6590 - in trunk: Docs data/qcsrc/client data/qcsrc/common data/qcsrc/server data/scripts
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sat Apr 25 16:57:38 EDT 2009
Author: mrbougo
Date: 2009-04-25 16:57:37 -0400 (Sat, 25 Apr 2009)
New Revision: 6590
Modified:
trunk/Docs/mapping.txt
trunk/data/qcsrc/client/sbar.qc
trunk/data/qcsrc/common/mapinfo.qc
trunk/data/qcsrc/server/g_triggers.qc
trunk/data/qcsrc/server/nexball.qc
trunk/data/qcsrc/server/scores_rules.qc
trunk/data/qcsrc/server/teamplay.qc
trunk/data/scripts/entities.def
Log:
Nexball changes:
- HUD blending changed for more visibility
- Scoring and goal entities partially re-made, supports more than 2 teams
- Entities renamed to make sense
Modified: trunk/Docs/mapping.txt
===================================================================
--- trunk/Docs/mapping.txt 2009-04-25 19:46:47 UTC (rev 6589)
+++ trunk/Docs/mapping.txt 2009-04-25 20:57:37 UTC (rev 6590)
@@ -366,13 +366,17 @@
=VI. Nexball=
=============
-There are three required entities: ball_redgoal, ball_bluegoal, and one of ball_basketball
-or ball_football. Pay extra attention to the goals, as their names can be somewhat counter-
-intuitive: ball_redgoal will give a point to the red team when scored in, NOT to the blue team!
+There are three required entities: nexball_redgoal, nexball_bluegoal, and one of nexball_basketball
+or nexball_football. There are also optional nexball_yellowgoal and nexball_pinkgoal entities (don't
+add a pink goal when there is no yellow goal on the map, it will crash)
-There are also two other goal-like triggers, ball_fault and ball_bound, the first giving a point to
-the opposing team when the ball hits it, the second simply returning it. You can spawn the ball inside
-a goal-like trigger, this can be useful for basketball maps with separate teams and a common ball spawn.
+Goals are made just like any other regular triggers. You can use multiple brushes for one trigger,
+but avoid this if possible.
+
+There are also two other goal-like entities, nexball_fault and nexball_bound, the first taking a point
+from the team that hits the trigger with the ball, the second simply returning it. You can spawn the
+ball inside a goal-like trigger, this can be useful for basketball maps with separate teams and a
+common ball spawn.
The different keys for the entities are documented in entities.def.
The ball is affected by trigger_impulse, but not by trigger_push or teleporters.
Modified: trunk/data/qcsrc/client/sbar.qc
===================================================================
--- trunk/data/qcsrc/client/sbar.qc 2009-04-25 19:46:47 UTC (rev 6589)
+++ trunk/data/qcsrc/client/sbar.qc 2009-04-25 20:57:37 UTC (rev 6590)
@@ -2201,8 +2201,8 @@
#define NBPB_BRGB '1 1 1'
#define NBPB_BALPH 1 //alpha
#define NBPB_BFLAG DRAWFLAG_NORMAL
-#define NBPB_IALPH 0.8
-#define NBPB_IFLAG DRAWFLAG_ADDITIVE
+#define NBPB_IALPH 0.4
+#define NBPB_IFLAG DRAWFLAG_NORMAL
#define NBPB_IRGB '0.7 0.1 0'
void CSQC_nb_hud(void)
Modified: trunk/data/qcsrc/common/mapinfo.qc
===================================================================
--- trunk/data/qcsrc/common/mapinfo.qc 2009-04-25 19:46:47 UTC (rev 6589)
+++ trunk/data/qcsrc/common/mapinfo.qc 2009-04-25 20:57:37 UTC (rev 6590)
@@ -399,7 +399,7 @@
MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_ASSAULT;
else if(v == "onslaught_generator")
MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_ONSLAUGHT;
- else if(v == "ball_bluegoal")
+ else if(substring(v, 0, 8) == "nexball_" || substring(v, 0, 4) == "ball")
MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_NEXBALL;
else if(v == "info_player_team1")
++spawnpoints;
Modified: trunk/data/qcsrc/server/g_triggers.qc
===================================================================
--- trunk/data/qcsrc/server/g_triggers.qc 2009-04-25 19:46:47 UTC (rev 6589)
+++ trunk/data/qcsrc/server/g_triggers.qc 2009-04-25 20:57:37 UTC (rev 6590)
@@ -1101,8 +1101,8 @@
if (other.classname != "plasma_prim")
if (other.classname != "plasma_chain")
if (other.classname != "droppedweapon")
- if (other.classname != "ball_basketball")
- if (other.classname != "ball_football")
+ if (other.classname != "nexball_basketball")
+ if (other.classname != "nexball_football")
return;
if (other.deadflag && other.iscreature)
@@ -1152,8 +1152,8 @@
if (other.classname != "plasma_prim")
if (other.classname != "plasma_chain")
if (other.classname != "droppedweapon")
- if (other.classname != "ball_basketball")
- if (other.classname != "ball_football")
+ if (other.classname != "nexball_basketball")
+ if (other.classname != "nexball_football")
return;
if (other.deadflag && other.iscreature)
@@ -1191,8 +1191,8 @@
if (other.classname != "plasma_prim")
if (other.classname != "plasma_chain")
if (other.classname != "droppedweapon")
- if (other.classname != "ball_basketball")
- if (other.classname != "ball_football")
+ if (other.classname != "nexball_basketball")
+ if (other.classname != "nexball_football")
return;
if (other.deadflag && other.iscreature)
Modified: trunk/data/qcsrc/server/nexball.qc
===================================================================
--- trunk/data/qcsrc/server/nexball.qc 2009-04-25 19:46:47 UTC (rev 6589)
+++ trunk/data/qcsrc/server/nexball.qc 2009-04-25 20:57:37 UTC (rev 6590)
@@ -5,7 +5,12 @@
#define BALL_ATTACHORG '3 0 16'
#define BALL_FOOT 1
#define BALL_BASKET 2
+//spawnflags
#define GOAL_TOUCHPLAYER 1
+//goal types
+#define GOAL_FAULT -1
+#define GOAL_OUT -2
+
#define CVTOV(s) s = cvar( #s )
float g_nexball_football_boost_forward;
@@ -21,6 +26,7 @@
.float teamtime;
+void nb_delayedinit();
void nb_init() // Called early (worldspawn stage)
{
CVTOV(g_nexball_meter_period); //sent with the client init entity
@@ -34,6 +40,8 @@
CVTOV(g_nexball_football_boost_up); //200
CVTOV(g_nexball_delay_idle); //10
CVTOV(g_nexball_football_physics); //0
+
+ InitializeEntity(world, nb_delayedinit, INITPRIO_GAMETYPE);
}
void ResetBall();
@@ -138,9 +146,9 @@
if (gameover) return;
self.flags &~= FL_ONGROUND;
self.movetype = MOVETYPE_BOUNCE;
- if (self.classname == "ball_basketball")
+ if (self.classname == "nexball_basketball")
self.touch = basketball_touch;
- else if (self.classname == "ball_football")
+ else if (self.classname == "nexball_football")
self.touch = football_touch;
self.cnt = 0;
self.think = ResetBall;
@@ -235,7 +243,7 @@
if (self.team != other.team)
self.teamtime = time + g_nexball_basketball_delay_hold_forteam;
- self.owner = self.pusher = other;
+ self.owner = self.pusher = other; //"owner" is set to the player carrying, "pusher" to the last player who touched it
self.team = other.team;
other.ballcarried = self;
other.effects = other.effects | g_nexball_basketball_effects_default;
@@ -260,115 +268,113 @@
}
}
-void ReturnTouch (void)
+void GoalTouch (void)
{
- string othername;
- entity tempother;
- tempother = other;
+ entity ball;
+ float isclient, pscore;
+ string pname;
if (gameover) return;
- if ((self.spawnflags & GOAL_TOUCHPLAYER) && tempother.ballcarried)
- tempother = tempother.ballcarried; // Can't drop here yet because of EXACTTRIGGER
- if (tempother.classname != "ball_basketball")
- if (tempother.classname != "ball_football")
+ if ((self.spawnflags & GOAL_TOUCHPLAYER) && other.ballcarried)
+ ball = other.ballcarried;
+ else
+ ball = other;
+ if (ball.classname != "nexball_basketball")
+ if (ball.classname != "nexball_football")
return;
- if (tempother.cnt)
+ if ((!ball.pusher && self.team != GOAL_OUT) || ball.cnt)
return;
EXACTTRIGGER_TOUCH;
- other = tempother;
- if (other.owner)
+
+ if((isclient = ball.pusher.flags & FL_CLIENT))
+ pname = ball.pusher.netname;
+ else
+ pname = "Someone (?)";
+
+ if (ball.team == self.team) //owngoal (regular goals)
{
- othername = other.owner.netname;
- DropBall(other, other.owner.origin, '0 0 0');
+ LogNB("owngoal", ball.pusher);
+ bprint("Boo! ", pname, "^7 scored a goal against his own team!\n");
+ pscore = -1;
+ } else if (self.team == GOAL_FAULT) {
+ LogNB("fault", ball.pusher);
+ bprint(ColoredTeamName(ball.team), " loses a point due to ", pname, "^7's silliness.\n");
+ pscore = -1;
+ } else if (self.team == GOAL_OUT) {
+ LogNB("out", ball.pusher);
+ if ((self.spawnflags & GOAL_TOUCHPLAYER) && ball.owner)
+ bprint(pname, "^7 went out of bounds.\n");
+ else
+ bprint("The ball was returned.\n");
+ pscore = 0;
+ } else { //score
+ LogNB(strcat("goal:", ftos(self.team)), ball.pusher);
+ bprint("Goaaaaal! ", pname, "^7 scored a point for the ", ColoredTeamName(ball.team), ".\n");
+ pscore = 1;
}
- else
- othername = "The ball";
- LogNB("out", other.pusher);
- if (self.spawnflags & GOAL_TOUCHPLAYER)
- bprint(othername, "^7 went out of bounds.\n");
- else
- bprint("The ball was returned.\n");
- sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NONE);
+ sound (ball, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NONE);
- other.cnt = 1;
- other.think = ResetBall;
- if (other.classname == "ball_basketball")
- other.touch = football_touch;
- other.nextthink = time + 1.5;
+ if(ball.team && pscore)
+ TeamScore_AddToTeam(ball.team, ST_NEXBALL_GOALS, pscore);
+ if (isclient && pscore > 0)
+ PlayerScore_Add(ball.pusher, SP_NEXBALL_GOALS, pscore);
+ else if (isclient && pscore < 0)
+ PlayerScore_Add(ball.pusher, SP_NEXBALL_FAULTS, pscore);
+
+ if (ball.owner) // Happens on spawnflag GOAL_TOUCHPLAYER
+ DropBall(ball, ball.owner.origin, ball.owner.velocity);
+ ball.cnt = 1;
+ ball.think = ResetBall;
+ if (ball.classname == "nexball_basketball")
+ ball.touch = football_touch; // better than SUB_Null: football control until the ball gets reset
+ ball.nextthink = time + cvar("g_nexball_delay_goal") * (self.team != GOAL_OUT);
}
-void GoalTouch (void)
+//=======================//
+// team ents //
+//=======================//
+void spawnfunc_nexball_team (void)
{
- string othername;
- entity tempother;
- float isclient;
- tempother = other; // EXACTTRIGGER uses "other"
+ if(!g_nexball) { remove(self); return; }
+ self.team = self.cnt + 1;
+}
- if (gameover) return;
- if ((self.spawnflags & GOAL_TOUCHPLAYER) && tempother.ballcarried)
- tempother = tempother.ballcarried; // Can't drop here yet because of EXACTTRIGGER
- if (tempother.classname != "ball_basketball")
- if (tempother.classname != "ball_football")
- return;
- if (!tempother.pusher || tempother.cnt)
- return;
- EXACTTRIGGER_TOUCH;
- other = tempother;
+void nb_spawnteam (string teamname, float teamcolor)
+{
+ dprint("^2spawned team ", teamname, "\n");
+ local entity e;
+ e = spawn();
+ e.classname = "nexball_team";
+ e.netname = teamname;
+ e.cnt = teamcolor;
+ e.team = e.cnt + 1;
+};
- isclient = other.pusher.flags & FL_CLIENT;
-
- if (isclient)
- othername = other.pusher.netname;
- else
- othername = "Someone (?)";
-
- if (self.classname == "ball_fault") { // FIXME?: this is ugly
- if (other.team == COLOR_TEAM1) self.team = COLOR_TEAM2;
- else if (other.team == COLOR_TEAM2) self.team = COLOR_TEAM1;
- else self.team = FALSE;
-
- if (isclient)
- PlayerScore_Add(other.pusher, SP_NEXBALL_OWNGOALS, 1);
- if (self.team)
+void nb_spawnteams (void)
+{
+ float t_r, t_b, t_y, t_p;
+ entity e;
+ for(e = world; (e = find(e, classname, "nexball_goal")); )
+ {
+ switch(e.team)
{
- bprint(ColoredTeamName(self.team), " gets awarded 1 point for ", othername, "^7's silliness.\n");
- LogNB("fault-score", other.pusher);
+ case COLOR_TEAM1: if(!t_r) { nb_spawnteam ("Red", e.team-1) ; t_r = 1; } break;
+ case COLOR_TEAM2: if(!t_b) { nb_spawnteam ("Blue", e.team-1) ; t_b = 1; } break;
+ case COLOR_TEAM3: if(!t_y) { nb_spawnteam ("Yellow", e.team-1); t_y = 1; } break;
+ case COLOR_TEAM4: if(!t_p) { nb_spawnteam ("Pink", e.team-1) ; t_p = 1; } break;
}
- else
- {
- bprint("The ball was reset.\n");
- LogNB("fault-reset", other.pusher);
- }
- } else if (other.team == self.team) { // the goal's .team is set to the team it gives points to
- if (isclient)
- PlayerScore_Add(other.pusher, SP_NEXBALL_GOALS, 1);
- bprint("Goaaaaal! ", othername, "^7 scored a point for the ", ColoredTeamName(self.team), ".\n");
- LogNB("goal", other.pusher);
- } else if (other.team) {
- if (isclient)
- PlayerScore_Add(other.pusher, SP_NEXBALL_OWNGOALS, 1);
- bprint("Boo! ", othername, "^7 scored a point for the opposing ", ColoredTeamName(self.team), ".\n");
- LogNB("owngoal", other.pusher);
- } else {
- bprint(othername, "^7 scored a point for the ", ColoredTeamName(self.team), ".\n"); //Should not happen
- LogNB("goal-noteam", other.pusher);
}
- sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NONE);
+}
- if (self.team)
- TeamScore_AddToTeam(self.team, ST_NEXBALL_GOALS, 1);
-
- if (other.owner) // Happens on spawnflag GOAL_TOUCHPLAYER
- DropBall(other, other.owner.origin, other.owner.velocity);
- other.cnt = 1;
- other.think = ResetBall;
- if (other.classname == "ball_basketball")
- other.touch = football_touch; // better than SUB_Null: football control until the ball gets reset
- other.nextthink = time + cvar("g_nexball_delay_goal");
+void nb_delayedinit (void)
+{
+ if (find(world, classname, "nexball_team") == world)
+ nb_spawnteams();
}
+
//=======================//
// spawnfuncs //
//=======================//
@@ -392,7 +398,7 @@
self.effects = self.effects | EF_LOWPRECISION;
- if (cvar(strcat("g_nex", self.classname, "_trail")))
+ if (cvar(strcat("g_", self.classname, "_trail"))) //nexball_basketball :p
{
self.glow_color = cvar("g_nexball_trail_color");
self.glow_trail = TRUE;
@@ -420,8 +426,9 @@
self.nextthink = game_starttime + cvar("g_nexball_delay_start");
}
-void spawnfunc_ball_basketball (void)
+void spawnfunc_nexball_basketball (void)
{
+ self.classname = "nexball_basketball";
if(!balls & BALL_BASKET)
{
CVTOV(g_nexball_basketball_effects_default);
@@ -433,73 +440,79 @@
if (!self.effects)
self.effects = g_nexball_basketball_effects_default;
self.solid = SOLID_TRIGGER;
-
balls |= BALL_BASKET;
-
SpawnBall();
}
-void spawnfunc_ball_football (void)
+void spawnfunc_nexball_football (void)
{
+ self.classname = "nexball_football";
self.solid = SOLID_TRIGGER;
-
balls |= BALL_FOOT;
-
SpawnBall();
}
-void spawnfunc_ball (void)
+void SpawnGoal (void)
{
- self.classname = "ball_football";
- spawnfunc_ball_football();
-}
-
-// The "red goal" is defended by blue team. A ball in there counts as a point for red.
-void spawnfunc_ball_redgoal (void)
-{
if(!g_nexball) { remove(self); return; }
- //COLOR_TEAM1 is red
EXACTTRIGGER_INIT;
- self.team = COLOR_TEAM1;
+ self.classname = "nexball_goal";
if (!self.noise)
- self.noise = "ctf/redcapture.wav";
+ self.noise = "ctf/respawn.wav";
precache_sound(self.noise);
self.touch = GoalTouch;
}
-//Same comment.
-void spawnfunc_ball_bluegoal (void)
+void spawnfunc_nexball_redgoal (void)
{
- if(!g_nexball) { remove(self); return; }
- EXACTTRIGGER_INIT;
+ self.team = COLOR_TEAM1;
+ SpawnGoal();
+}
+void spawnfunc_nexball_bluegoal (void)
+{
self.team = COLOR_TEAM2;
- if (!self.noise)
- self.noise = "ctf/bluecapture.wav";
- precache_sound(self.noise);
- self.touch = GoalTouch;
+ SpawnGoal();
}
+void spawnfunc_nexball_yellowgoal (void)
+{
+ self.team = COLOR_TEAM3;
+ SpawnGoal();
+}
+void spawnfunc_nexball_pinkgoal (void)
+{
+ self.team = COLOR_TEAM4;
+ SpawnGoal();
+}
-void spawnfunc_ball_fault (void)
+void spawnfunc_nexball_fault (void)
{
- if(!g_nexball) { remove(self); return; }
- EXACTTRIGGER_INIT;
+ self.team = GOAL_FAULT;
if (!self.noise)
self.noise = "misc/typehit.wav";
- precache_sound(self.noise);
- self.touch = GoalTouch;
+ SpawnGoal();
}
-void spawnfunc_ball_bound (void)
+void spawnfunc_nexball_out (void)
{
- if(!g_nexball) { remove(self); return; }
- EXACTTRIGGER_INIT;
+ self.team = GOAL_OUT;
if (!self.noise)
self.noise = "misc/typehit.wav";
- precache_sound(self.noise);
- self.touch = ReturnTouch;
+ SpawnGoal();
}
+//
+//Spawnfuncs preserved for compatibility
+//
+void spawnfunc_ball (void) { spawnfunc_nexball_football(); }
+void spawnfunc_ball_football (void) { spawnfunc_nexball_football(); }
+void spawnfunc_ball_basketball (void) { spawnfunc_nexball_basketball(); }
+// The "red goal" is defended by blue team. A ball in there counts as a point for red.
+void spawnfunc_ball_redgoal (void) { spawnfunc_nexball_bluegoal(); } // I blame Revenant
+void spawnfunc_ball_bluegoal (void) { spawnfunc_nexball_redgoal(); } // but he didn't mean to cause trouble :p
+void spawnfunc_ball_fault (void) { spawnfunc_nexball_fault(); }
+void spawnfunc_ball_bound (void) { spawnfunc_nexball_out(); }
+
//=======================//
// Weapon code //
//=======================//
Modified: trunk/data/qcsrc/server/scores_rules.qc
===================================================================
--- trunk/data/qcsrc/server/scores_rules.qc 2009-04-25 19:46:47 UTC (rev 6589)
+++ trunk/data/qcsrc/server/scores_rules.qc 2009-04-25 20:57:37 UTC (rev 6590)
@@ -176,12 +176,12 @@
// Nexball stuff
#define ST_NEXBALL_GOALS 1
#define SP_NEXBALL_GOALS 4
-#define SP_NEXBALL_OWNGOALS 5
+#define SP_NEXBALL_FAULTS 5
void ScoreRules_nexball()
{
ScoreRules_basics(2, 0, 0, TRUE);
- ScoreInfo_SetLabel_TeamScore ( ST_NEXBALL_GOALS, "goals", SFL_SORT_PRIO_PRIMARY);
- ScoreInfo_SetLabel_PlayerScore( SP_NEXBALL_GOALS, "goals", SFL_SORT_PRIO_PRIMARY);
- ScoreInfo_SetLabel_PlayerScore(SP_NEXBALL_OWNGOALS, "owngoals", SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER);
+ ScoreInfo_SetLabel_TeamScore( ST_NEXBALL_GOALS, "goals", SFL_SORT_PRIO_PRIMARY);
+ ScoreInfo_SetLabel_PlayerScore( SP_NEXBALL_GOALS, "goals", SFL_SORT_PRIO_PRIMARY);
+ ScoreInfo_SetLabel_PlayerScore(SP_NEXBALL_FAULTS, "faults", SFL_SORT_PRIO_SECONDARY | SFL_LOWER_IS_BETTER);
ScoreRules_basics_end();
}
Modified: trunk/data/qcsrc/server/teamplay.qc
===================================================================
--- trunk/data/qcsrc/server/teamplay.qc 2009-04-25 19:46:47 UTC (rev 6589)
+++ trunk/data/qcsrc/server/teamplay.qc 2009-04-25 20:57:37 UTC (rev 6590)
@@ -330,8 +330,8 @@
game = GAME_NEXBALL;
gamemode_name = "Nexball";
fraglimit_override = cvar("g_nexball_goallimit");
+ ActivateTeamplay();
nb_init();
- ActivateTeamplay();
ScoreRules_nexball();
}
@@ -573,9 +573,11 @@
teament_name = "ctf_team";
else if(g_tdm)
teament_name = "tdm_team";
- else if(g_assault || g_nexball)
+ else if(g_nexball)
+ teament_name = "nexball_team";
+ else if(g_assault)
{
- c1 = c2 = 0; // Assault and nexball always have 2 teams
+ c1 = c2 = 0; // Assault always has 2 teams
return;
}
else
Modified: trunk/data/scripts/entities.def
===================================================================
--- trunk/data/scripts/entities.def 2009-04-25 19:46:47 UTC (rev 6589)
+++ trunk/data/scripts/entities.def 2009-04-25 20:57:37 UTC (rev 6590)
@@ -1550,23 +1550,40 @@
targetname: name that identifies this entity so it can be triggered
*/
-/*QUAKED ball_redgoal (1 0 0) ?
-"Red" goal. Defended by blue team, the red team tries to put the ball in there.
+/*QUAKED nexball_redgoal (1 0 0) ?
+Red goal. Defended by the red team.
-------- KEYS --------
noise: sound played when a point is scored
-------- SPAWNFLAGS --------
GOAL_TOUCHPLAYER: The trigger also affects ball-carrying players (the ball is then auto-dropped)
*/
-/*QUAKED ball_bluegoal (0 0 1) ?
-"Blue" goal. Defended by red team, the blue team tries to put the ball in there.
+/*QUAKED nexball_bluegoal (0 0 1) ?
+Blue goal. Defended by the blue team.
-------- KEYS --------
noise: sound played when a point is scored
-------- SPAWNFLAGS --------
GOAL_TOUCHPLAYER: The trigger also affects ball-carrying players (the ball is then auto-dropped)
*/
-/*QUAKED ball_fault (0.6 0.1 0) ?
+/*QUAKED nexball_yellowgoal (1 1 0) ?
+Yellow goal. Defended by the yellow team. Needs both red and blue goals on the map to work.
+-------- KEYS --------
+noise: sound played when a point is scored
+-------- SPAWNFLAGS --------
+GOAL_TOUCHPLAYER: The trigger also affects ball-carrying players (the ball is then auto-dropped)
+*/
+
+/*QUAKED nexball_bluegoal (1 0 1) ?
+Pink goal. Defended by the pink team. Needs red, blue and pink goals on the map to work.
+-------- KEYS --------
+noise: sound played when a point is scored
+-------- SPAWNFLAGS --------
+GOAL_TOUCHPLAYER: The trigger also affects ball-carrying players (the ball is then auto-dropped)
+*/
+
+
+/*QUAKED nexball_fault (0.6 0.1 0) ?
This acts as a goal that always gives points to the opposing team.
-------- KEYS --------
noise: sound played when a point is scored
@@ -1574,7 +1591,7 @@
GOAL_TOUCHPLAYER: The trigger also affects ball-carrying players (the ball is then auto-dropped)
*/
-/*QUAKED ball_bound (0.1 0.6 0) ?
+/*QUAKED nexball_out (0.1 0.6 0) ?
When the ball touches this, it is returned.
-------- KEYS --------
noise: sound played when a point is scored
@@ -1582,7 +1599,7 @@
GOAL_TOUCHPLAYER: The trigger also affects ball-carrying players (the ball is then auto-dropped)
*/
-/*QUAKED ball_football (.9 .9 .9) (-16 -16 -16) (16 16 16)
+/*QUAKED nexball_football (.9 .9 .9) (-16 -16 -16) (16 16 16)
The soccer type Nexball.
-------- KEYS --------
model: set this if you want to use your own model
@@ -1591,7 +1608,7 @@
noise1: played when the ball is dropped on the map
*/
-/*QUAKED ball_basketball (.5 .2 0) (-16 -16 -16) (16 16 16)
+/*QUAKED nexball_basketball (.5 .2 0) (-16 -16 -16) (16 16 16)
The basket ball type Nexball.
-------- KEYS --------
model: set this if you want to use your own model
More information about the nexuiz-commits
mailing list