set g_balance_shotgun_secondary_melee_no_doubleslap 1
set g_balance_shotgun_secondary_melee_nonplayerdamage 40
set g_balance_shotgun_secondary_melee_multihit 1
-set g_balance_shotgun_secondary_damage 100
+set g_balance_shotgun_secondary_damage 70
set g_balance_shotgun_secondary_force 200
set g_balance_shotgun_secondary_refire 1.25
set g_balance_shotgun_secondary_animtime 1
set g_balance_crylink_primary_edgedamage 5
set g_balance_crylink_primary_force -55
set g_balance_crylink_primary_radius 80
-set g_balance_crylink_primary_speed 1800
-set g_balance_crylink_primary_spread 0.075
-set g_balance_crylink_primary_shots 7
+set g_balance_crylink_primary_speed 2000
+set g_balance_crylink_primary_spread 0.08
+set g_balance_crylink_primary_shots 6
set g_balance_crylink_primary_bounces 1
set g_balance_crylink_primary_refire 0.7
set g_balance_crylink_primary_animtime 0.3
set g_balance_crylink_primary_ammo 3
set g_balance_crylink_primary_bouncedamagefactor 0.5
-set g_balance_crylink_primary_joindelay 0
-set g_balance_crylink_primary_joinspread 0.4
+set g_balance_crylink_primary_joindelay 0.1
+set g_balance_crylink_primary_joinspread 0.2
set g_balance_crylink_primary_jointime 0
set g_balance_crylink_primary_joinexplode 1
set g_balance_crylink_primary_joinexplode_damage 0
set g_pinata 0 "if set to 1 you will not only drop your current weapon when you are killed, but you will drop all weapons that you possessed"
set g_weapon_stay 0 "if set to 1 or 2, weapons stay after they were picked up (1: weapons you don't have yet give you ammo of their type and they can not be dropped, 2: weapons don't give ammo, but instead players start with one pickup-load of ammo by default, 3: weapons give ammo, weapons only stay as ammo-less ghosts)"
set g_weapon_throwable 1 "if set to 1, weapons can be dropped"
-set g_powerup_superhealth 1 "if set to 0 the mega health powerup will not spawn on the map"
-set g_powerup_strength 1 "if set to 0 the strength powerup will not spawn on the map"
-set g_powerup_shield 1 "if set to 0 the shield (invincibility) powerup will not spawn on the map"
-set g_balance_powerup_timer 1 "if set to 0 the powerups dont wear off"
+set g_powerups -1 "if set to 0 the strength and shield (invincibility) will not spawn on the map, if 1 they will spawn in all game modes, -1 is game mode default"
set g_use_ammunition 1 "if set to 0 all weapons have unlimited ammunition"
-set g_pickup_items 1 "if set to 0 all items (health, armor, ammo, weapons...) are removed from the map"
+set g_pickup_items -1 "if set to 0 all items (health, armor, ammo, weapons...) are removed from the map, if 1 they are forced to spawn"
set g_minstagib 0 "enable minstagib"
set g_minstagib_extralives 2 "how many extra lives you will get per powerup"
set g_minstagib_ammo_start 10 "starting ammo"
set g_arena_maxspawned 2 "maximum number of players to spawn at once (the rest is spectating, waiting for their turn)"
set g_arena_roundbased 1 "if disabled, the next player will spawn as soon as someone dies"
set g_arena_warmup 5 "time, newly spawned players have to prepare themselves in round based matches"
-set g_arena_powerups 0 "enables powerups (superhealth, strength and shield), which are removed by default"
// ca
set g_ca 0 "Clan Arena: Played in rounds, once you're dead you're out! The team with survivors wins the round."
-// hagar trail
+// mortar trail
// smoke
// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_GRENADE"), from, to)
// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_GRENADE"), from, to)
-// mortar trail
+// hookbomb trail
// smoke
// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to)
// used in qcsrc/client/projectile.qc: trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), from, to)
velocitymultiplier 5
staincolor 0x808080 0x808080
staintex 16 24
+
+// hagar trail
+// smoke
+effect tr_hagar
+trailspacing 4
+type smoke
+color 0x101010 0x000000
+tex 0 8
+size 3 2
+bounce 1
+sizeincrease 10
+alpha 300 400 780
+originjitter 1 1 1
+velocityjitter 1 1 1
+velocitymultiplier -0.02
+//gravity -0.11
+// fire
+effect tr_hagar
+notunderwater
+trailspacing 4
+type static
+color 0xffdf72 0x811200
+tex 48 55
+size 5 2
+sizeincrease -15
+alpha 100 144 988
+airfriction 8
+velocityjitter 32 32 32
+velocitymultiplier -1.0
+// bubbles
+effect tr_hagar
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
"Project-Id-Version: Xonotic 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-09-02 07:51+0200\n"
-"Last-Translator: Rodrigo Mouton Laudin <ratogenesis@gmail.com>\n"
+"Author: Rodrigo Mouton Laudin <ratogenesis@gmail.com>\n"
+"Last-Translator: mand1nga <mand1nga@xonotic.org>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
case PROJECTILE_PORTO_RED: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_WIZSPIKE"); self.scale = 4; break;
case PROJECTILE_PORTO_BLUE: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_WIZSPIKE"); self.scale = 4; break;
case PROJECTILE_HOOKBOMB: setmodel(self, "models/grenademodel.md3");self.traileffect = particleeffectnum("TR_KNIGHTSPIKE"); break;
- case PROJECTILE_HAGAR: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("TR_GRENADE"); self.scale = 0.75; break;
- case PROJECTILE_HAGAR_BOUNCING: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("TR_GRENADE"); self.scale = 0.75; break;
+ case PROJECTILE_HAGAR: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("tr_hagar"); self.scale = 0.75; break;
+ case PROJECTILE_HAGAR_BOUNCING: setmodel(self, "models/hagarmissile.mdl");self.traileffect = particleeffectnum("tr_hagar"); self.scale = 0.75; break;
case PROJECTILE_FIREBALL: self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("fireball"); break; // particle effect is good enough
case PROJECTILE_FIREMINE: self.model = ""; self.modelindex = 0; self.traileffect = particleeffectnum("firemine"); break; // particle effect is good enough
case PROJECTILE_TAG: setmodel(self, "models/laser.mdl"); self.traileffect = particleeffectnum("TR_ROCKET"); break;
void() m_init;
void(float keynr, float ascii) m_keydown;
void() m_draw;
-void() m_toggle;
+void(float mode) m_toggle;
void() m_shutdown;
/////////////////////////////////////////////////////////
main.hideNotify(main);
}
-void m_toggle()
+void m_toggle(float mode)
{
if(Menu_Active)
+ {
+ if (mode == 1)
+ return;
m_hide();
+ }
else
+ {
+ if (mode == 0)
+ return;
m_display();
+ }
}
void m_shutdown()
s = strcat(s, ", ", _("Blood loss"));
if(cvar("g_jetpack"))
s = strcat(s, ", ", _("Jet pack"));
+ if(cvar("g_powerups") == 0)
+ s = strcat(s, ", ", _("No powerups"));
+ if(cvar("g_powerups") > 0)
+ s = strcat(s, ", ", _("Powerups"));
if(s == "")
return ZCTX(_("MUT^None"));
else
float autocvar_g_arena_maxspawned;
float autocvar_g_arena_point_leadlimit;
float autocvar_g_arena_point_limit;
-float autocvar_g_arena_powerups;
float autocvar_g_arena_roundbased;
float autocvar_g_arena_warmup;
float autocvar_g_assault;
float autocvar_g_balance_powerup_strength_selfdamage;
float autocvar_g_balance_powerup_strength_selfforce;
float autocvar_g_balance_powerup_strength_time;
-float autocvar_g_balance_powerup_timer;
float autocvar_g_balance_rocketlauncher_ammo;
float autocvar_g_balance_rocketlauncher_animtime;
float autocvar_g_balance_rocketlauncher_damage;
float autocvar_g_player_brightness;
float autocvar_g_playerclip_collisions;
string autocvar_g_playerstats_uri;
-float autocvar_g_powerup_shield;
-float autocvar_g_powerup_strength;
-float autocvar_g_powerup_superhealth;
+float autocvar_g_powerups;
float autocvar_g_projectiles_damage;
float autocvar_g_projectiles_newton_style;
float autocvar_g_projectiles_newton_style_2_maxfactor;
if (self.items & IT_INVINCIBLE)
{
play_countdown(self.invincible_finished, "misc/poweroff.wav");
- if (time > self.invincible_finished && autocvar_g_balance_powerup_timer)
+ if (time > self.invincible_finished)
{
self.items = self.items - (self.items & IT_INVINCIBLE);
sprint(self, "^3Speed has worn off\n");
{
play_countdown(self.strength_finished, "misc/poweroff.wav");
self.effects = self.effects | (EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT);
- if (time > self.strength_finished && autocvar_g_balance_powerup_timer)
+ if (time > self.strength_finished)
{
self.items = self.items - (self.items & IT_STRENGTH);
sprint(self, "^3Strength has worn off\n");
{
play_countdown(self.invincible_finished, "misc/poweroff.wav");
self.effects = self.effects | (EF_RED | EF_ADDITIVE | EF_FULLBRIGHT);
- if (time > self.invincible_finished && autocvar_g_balance_powerup_timer)
+ if (time > self.invincible_finished)
{
self.items = self.items - (self.items & IT_INVINCIBLE);
sprint(self, "^3Shield has worn off\n");
} else if(lockteams) {
sprint( self, "^7The game has already begun, you must wait until the next map to be able to join a team.\n");
} else if( argv(1) == "red" ) {
- if(self.team != COLOR_TEAM1 || self.deadflag != DEAD_NO)
- ClientKill_TeamChange(COLOR_TEAM1);
- else
+ if(self.team == COLOR_TEAM1 && self.deadflag == DEAD_NO)
sprint( self, "^7You already are on that team.\n");
- } else if( argv(1) == "blue" ) {
- if(self.team != COLOR_TEAM2 || self.deadflag != DEAD_NO)
- ClientKill_TeamChange(COLOR_TEAM2);
+ else if (self.wasplayer && autocvar_g_changeteam_banned)
+ sprint( self, "^1You cannot change team, forbidden by the server.\n");
else
+ ClientKill_TeamChange(COLOR_TEAM1);
+ } else if( argv(1) == "blue" ) {
+ if(self.team == COLOR_TEAM2 && self.deadflag == DEAD_NO)
sprint( self, "^7You already are on that team.\n");
- } else if( argv(1) == "yellow" ) {
- if(self.team != COLOR_TEAM3 || self.deadflag != DEAD_NO)
- ClientKill_TeamChange(COLOR_TEAM3);
+ else if (self.wasplayer && autocvar_g_changeteam_banned)
+ sprint( self, "^1You cannot change team, forbidden by the server.\n");
else
+ ClientKill_TeamChange(COLOR_TEAM2);
+ } else if( argv(1) == "yellow" ) {
+ if(self.team == COLOR_TEAM3 && self.deadflag == DEAD_NO)
sprint( self, "^7You already are on that team.\n");
- } else if( argv(1) == "pink" ) {
- if(self.team != COLOR_TEAM4 || self.deadflag != DEAD_NO)
- ClientKill_TeamChange(COLOR_TEAM4);
+ else if (self.wasplayer && autocvar_g_changeteam_banned)
+ sprint( self, "^1You cannot change team, forbidden by the server.\n");
else
+ ClientKill_TeamChange(COLOR_TEAM3);
+ } else if( argv(1) == "pink" ) {
+ if(self.team == COLOR_TEAM4 && self.deadflag == DEAD_NO)
sprint( self, "^7You already are on that team.\n");
+ else if (self.wasplayer && autocvar_g_changeteam_banned)
+ sprint( self, "^1You cannot change team, forbidden by the server.\n");
+ else
+ ClientKill_TeamChange(COLOR_TEAM4);
} else if( argv(1) == "auto" ) {
ClientKill_TeamChange(-1);
} else {
// :%s,//\([^ ]*\).*,BADCVAR("\1");,
// :%!sort
// yes, this does contain some redundant stuff, don't really care
+ BADCVAR("bot_config_file");
BADCVAR("bot_number");
BADCVAR("bot_prefix");
BADCVAR("bot_suffix");
- BADCVAR("bot_config_file");
BADCVAR("capturelimit_override");
BADCVAR("fraglimit_override");
BADCVAR("gametype");
BADCVAR("g_minstagib");
BADCVAR("g_mirrordamage");
BADCVAR("g_nexball_goallimit");
+ BADCVAR("g_powerups");
BADCVAR("g_runematch_point_limit");
BADCVAR("g_start_delay");
BADCVAR("g_warmup");
BADCVAR("skill");
BADCVAR("sv_adminnick");
BADCVAR("sv_autoscreenshot");
+ BADCVAR("sv_autotaunt");
BADCVAR("sv_curl_defaulturl");
BADCVAR("sv_defaultcharacter");
BADCVAR("sv_defaultplayercolors");
BADCVAR("sv_public");
BADCVAR("sv_ready_restart");
BADCVAR("sv_status_privacy");
+ BADCVAR("sv_taunt");
BADCVAR("sv_vote_call");
BADCVAR("sv_vote_commands");
BADCVAR("sv_vote_majority_factor");
BADCVAR("teamplay_mode");
BADCVAR("timelimit_override");
BADPREFIX("g_warmup_");
+ BADPREFIX("sv_ready_restart_");
if(autocvar_g_minstagib)
{
s = strcat(s, ":no_use_ammunition");
// initialiation stuff, not good in the mutator system
- if(!autocvar_g_pickup_items)
+ if(autocvar_g_pickup_items == 0)
s = strcat(s, ":no_pickup_items");
+ if(autocvar_g_pickup_items > 0)
+ s = strcat(s, ":pickup_items");
// initialiation stuff, not good in the mutator system
if(autocvar_g_weaponarena != "0")
if(autocvar_g_minstagib)
s = strcat(s, ":minstagib");
+ // TODO to mutator system
+ if(autocvar_g_powerups == 0)
+ s = strcat(s, ":no_powerups");
+ if(autocvar_g_powerups > 0)
+ s = strcat(s, ":powerups");
+
GameLogEcho(s);
GameLogEcho(":gameinfo:end");
}
+float have_pickup_item(void)
+{
+ // minstagib: only allow filtered items
+ if(g_minstagib)
+ if(self.classname != "minstagib")
+ return FALSE;
+
+ if(self.items == IT_STRENGTH || self.items == IT_INVINCIBLE)
+ {
+ if(autocvar_g_powerups > 0)
+ return TRUE;
+ if(autocvar_g_powerups == 0)
+ return FALSE;
+ if(g_lms)
+ return FALSE;
+ if(g_ca)
+ return FALSE;
+ if(g_arena)
+ return FALSE;
+ }
+ else
+ {
+ if(autocvar_g_pickup_items > 0)
+ return TRUE;
+ if(autocvar_g_pickup_items == 0)
+ return FALSE;
+ if(g_lms)
+ return FALSE;
+ if(g_ca)
+ return FALSE;
+ if(g_weaponarena)
+ if((self.weapons & WEPBIT_ALL) || (self.items & IT_AMMO))
+ return FALSE;
+ }
+ return TRUE;
+}
+
#define ITEM_RESPAWN_TICKS 10
#define ITEM_RESPAWNTIME(i) ((i).respawntime + crandom() * (i).respawntimejitter)
return;
}
+ if(!have_pickup_item())
+ {
+ startitem_failed = TRUE;
+ remove (self);
+ return;
+ }
+
self.reset = Item_Reset;
// it's a level item
if(self.spawnflags & 1)
self.is_item = TRUE;
}
- if(g_lms || g_ca)
- {
- startitem_failed = TRUE;
- remove(self);
- return;
- }
- else if (g_weaponarena && ((weaponid & WEPBIT_ALL) || (itemid & IT_AMMO)))
- {
- startitem_failed = TRUE;
- remove(self);
- return;
- }
- else if (g_minstagib)
- {
- // don't remove dropped items and powerups
- if (self.classname != "minstagib")
- {
- startitem_failed = TRUE;
- remove (self);
- return;
- }
- }
- else if (!autocvar_g_pickup_items && itemid != IT_STRENGTH && itemid != IT_INVINCIBLE && itemid != IT_HEALTH)
- {
- startitem_failed = TRUE;
- remove (self);
- return;
- }
-
weaponsInMap |= weaponid;
precache_model (itemmodel);
}
void spawnfunc_item_health_mega (void) {
- if(!autocvar_g_powerup_superhealth)
- return;
-
- if((g_arena || g_ca) && !autocvar_g_arena_powerups)
- return;
-
if(g_minstagib) {
minstagib_items(IT_NAILS);
} else {
void spawnfunc_item_health100() { spawnfunc_item_health_mega(); }
void spawnfunc_item_strength (void) {
- if(!autocvar_g_powerup_strength)
- return;
-
- if((g_arena || g_ca) && !autocvar_g_arena_powerups)
- return;
-
if(g_minstagib) {
minstagib_items(IT_STRENGTH);
} else {
}
void spawnfunc_item_invincible (void) {
- if(!autocvar_g_powerup_shield)
- return;
-
- if((g_arena || g_ca) && !autocvar_g_arena_powerups)
- return;
-
if(g_minstagib) {
minstagib_items(IT_INVINCIBLE);
} else {
modifications = strcat(modifications, ", Blood loss");
if(g_jetpack)
modifications = strcat(modifications, ", Jet pack");
+ if(autocvar_g_powerups == 0)
+ modifications = strcat(modifications, ", No powerups");
+ if(autocvar_g_powerups > 0)
+ modifications = strcat(modifications, ", Powerups");
modifications = substring(modifications, 2, strlen(modifications) - 2);
string versionmessage;
// as a GENERAL rule:
// if you have the invisibility powerup, sprites ALWAYS are restricted to your team
// but only apply this to real players, not to spectators
- if(g_minstagib && (self.owner.items & IT_STRENGTH) && (e == other))
+ if(g_minstagib && (self.owner.flags & FL_CLIENT) && (self.owner.items & IT_STRENGTH) && (e == other))
{
if(!WaypointSprite_isteammate(self.owner, e))
return FALSE;