set g_balance_electro_secondary_health 5
set g_balance_electro_secondary_damageforcescale 4
set g_balance_electro_secondary_count 1
+set g_balance_electro_secondary_bouncefactor 0.5
+set g_balance_electro_secondary_bouncestop 0.075
set g_balance_electro_combo_damage 80
set g_balance_electro_combo_edgedamage 0
set g_balance_electro_combo_force 200
set g_balance_electro_secondary_health 10
set g_balance_electro_secondary_damageforcescale 4
set g_balance_electro_secondary_count 3
+set g_balance_electro_secondary_bouncefactor 0.5
+set g_balance_electro_secondary_bouncestop 0.075
set g_balance_electro_combo_damage 70
set g_balance_electro_combo_edgedamage 0
set g_balance_electro_combo_force 200
set g_balance_electro_secondary_health 5
set g_balance_electro_secondary_damageforcescale 4
set g_balance_electro_secondary_count 1
+set g_balance_electro_secondary_bouncefactor 0.5
+set g_balance_electro_secondary_bouncestop 0.075
set g_balance_electro_combo_damage 80
set g_balance_electro_combo_edgedamage 0
set g_balance_electro_combo_force 200
set g_balance_electro_secondary_health 5
set g_balance_electro_secondary_damageforcescale 4
set g_balance_electro_secondary_count 3
+set g_balance_electro_secondary_bouncefactor 0.5
+set g_balance_electro_secondary_bouncestop 0.075
set g_balance_electro_combo_damage 50
set g_balance_electro_combo_edgedamage 0
set g_balance_electro_combo_force 200
set g_balance_electro_secondary_health 10
set g_balance_electro_secondary_damageforcescale 2
set g_balance_electro_secondary_count 3
+set g_balance_electro_secondary_bouncefactor 0.5
+set g_balance_electro_secondary_bouncestop 0.075
set g_balance_electro_combo_damage 80
set g_balance_electro_combo_edgedamage 10
set g_balance_electro_combo_force 150
set g_balance_electro_secondary_health 10
set g_balance_electro_secondary_damageforcescale 4
set g_balance_electro_secondary_count 3
+set g_balance_electro_secondary_bouncefactor 0.5
+set g_balance_electro_secondary_bouncestop 0.075
set g_balance_electro_combo_damage 40
set g_balance_electro_combo_edgedamage 0
set g_balance_electro_combo_force 80
set g_balance_electro_secondary_health 10
set g_balance_electro_secondary_damageforcescale 2
set g_balance_electro_secondary_count 3
+set g_balance_electro_secondary_bouncefactor 0.5
+set g_balance_electro_secondary_bouncestop 0.075
set g_balance_electro_combo_damage 80
set g_balance_electro_combo_edgedamage 10
// onslaught
set g_onslaught 0 "Onslaught: take control points towards the enemy generator and then destroy it"
-set g_onslaught_gen_health 5000
+set g_onslaught_gen_health 2500
set g_onslaught_cp_health 1000
set g_onslaught_cp_buildhealth 100
-set g_onslaught_cp_buildtime 10
+set g_onslaught_cp_buildtime 5
set g_onslaught_cp_regen 20
// assault
sprite item-shield "Shield" ff00ff 000000 0.5 ff00ff ffff00 0.5
sprite item-fuelregen "Fuel regen" ff8000 000000 0.5 ff8000 ffff00 0.5
sprite item-jetpack "Jet Pack" 808080 000000 0.5 808080 ffff00 0.5
+
+sprite freezetag_frozen "Frozen!" 40e6ff 000000 0.0 # bright cyan
g_weaponswitchdelay = ReadByte() / 255.0;
- g_balance_grenadelauncher_secondary_bouncefactor = ReadCoord();
- g_balance_grenadelauncher_secondary_bouncestop = ReadCoord();
+ g_balance_grenadelauncher_bouncefactor = ReadCoord();
+ g_balance_grenadelauncher_bouncestop = ReadCoord();
+ g_balance_electro_secondary_bouncefactor = ReadCoord();
+ g_balance_electro_secondary_bouncestop = ReadCoord();
nex_scope = !ReadByte();
campingrifle_scope = !ReadByte();
.float ping, ping_packetloss, ping_movementloss;
-float g_balance_grenadelauncher_secondary_bouncefactor;
-float g_balance_grenadelauncher_secondary_bouncestop;
+float g_balance_grenadelauncher_bouncefactor;
+float g_balance_grenadelauncher_bouncestop;
+float g_balance_electro_secondary_bouncefactor;
+float g_balance_electro_secondary_bouncestop;
self.maxs = '0 0 -4';
self.move_movetype = MOVETYPE_BOUNCE;
self.move_touch = SUB_Null;
+ self.move_bounce_factor = g_balance_electro_secondary_bouncefactor;
+ self.move_bounce_stopspeed = g_balance_electro_secondary_bouncestop;
break;
case PROJECTILE_ROCKET:
loopsound(self, CHAN_PROJECTILE, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM);
self.maxs = '3 3 3';
self.move_movetype = MOVETYPE_BOUNCE;
self.move_touch = SUB_Null;
- self.move_bounce_factor = g_balance_grenadelauncher_secondary_bouncefactor;
- self.move_bounce_stopspeed = g_balance_grenadelauncher_secondary_bouncestop;
+ self.move_bounce_factor = g_balance_grenadelauncher_bouncefactor;
+ self.move_bounce_stopspeed = g_balance_grenadelauncher_bouncestop;
break;
case PROJECTILE_MINE:
self.mins = '-4 -4 -4';
else if (g == GAME_RACE) return "rc";
else if (g == GAME_NEXBALL) return "nexball";
else if (g == GAME_CTS) return "cts";
+ else if (g == GAME_KEEPAWAY) return "ka";
return "dm";
}
float n;
me.TR(me);
- n = 7;
+ n = 6;
me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_dm", "DM"));
e0 = e;
me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_lms", "LMS"));
if(e.checked) e0 = NULL;
me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_arena", "Arena"));
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_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;
me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_cts", "Race CTS"));
me.typeLMSLabel = e;
me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Arena"));
me.typeArenaLabel = e;
- me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Rune"));
- me.typeRuneLabel = e;
- me.TR(me);
- me.TDempty(me, 0.2);
me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Domination"));
me.typeDominationLabel = e;
+ me.TR(me);
+ me.TDempty(me, 0.2);
me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Key Hunt"));
me.typeKeyHuntLabel = e;
me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "CTF"));
me.typeCALabel = e;
me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Assault"));
me.typeAssaultLabel = e;
- me.TR(me);
- me.TDempty(me, 0.2);
me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Onslaught"));
me.typeOnslaughtLabel = e;
+ me.TR(me);
+ me.TDempty(me, 0.2);
me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Race"));
me.typeRaceLabel = e;
me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "CTS"));
// ctf_playerchanged();
}
+.float ebouncefactor, ebouncestop; // electro's values
+// TODO do we need all these fields, or should we stop autodetecting runtime
+// changes and just have a console command to update this?
float ClientInit_SendEntity(entity to, float sf)
{
WriteByte(MSG_ENTITY, ENT_CLIENT_INIT);
WriteByte(MSG_ENTITY, self.cnt * 255.0); // g_balance_weaponswitchdelay
WriteCoord(MSG_ENTITY, self.bouncefactor); // g_balance_grenadelauncher_bouncefactor
WriteCoord(MSG_ENTITY, self.bouncestop); // g_balance_grenadelauncher_bouncestop
+ WriteCoord(MSG_ENTITY, self.ebouncefactor); // g_balance_grenadelauncher_bouncefactor
+ WriteCoord(MSG_ENTITY, self.ebouncestop); // g_balance_grenadelauncher_bouncestop
WriteByte(MSG_ENTITY, cvar("g_balance_nex_secondary")); // client has to know if it should zoom or not
WriteByte(MSG_ENTITY, cvar("g_balance_campingrifle_secondary")); // client has to know if it should zoom or not
WriteByte(MSG_ENTITY, serverflags); // client has to know if it should zoom or not
self.bouncestop = cvar("g_balance_grenadelauncher_bouncestop");
self.SendFlags |= 1;
}
+ if(self.ebouncefactor != cvar("g_balance_electro_secondary_bouncefactor"))
+ {
+ self.ebouncefactor = cvar("g_balance_electro_secondary_bouncefactor");
+ self.SendFlags |= 1;
+ }
+ if(self.ebouncestop != cvar("g_balance_electro_secondary_bouncestop"))
+ {
+ self.ebouncestop = cvar("g_balance_electro_secondary_bouncestop");
+ self.SendFlags |= 1;
+ }
}
void ClientInit_Spawn()
sv_airspeedlimit_nonqw = cvar("sv_airspeedlimit_nonqw");
teamplay = cvar ("teamplay");
sys_frametime = cvar("sys_ticrate") * cvar("slowmo");
+ if(sys_frametime <= 0)
+ sys_frametime = 1.0 / 60.0; // somewhat safe fallback
sv_doublejump = cvar("sv_doublejump");
if (timeoutStatus == 1) // just before the timeout (when timeoutStatus will be 2)
n = n / cvar("g_balance_crylink_secondary_shots");
RadiusDamage (e, e.realowner, cvar("g_balance_crylink_secondary_joinexplode_damage") * n,
cvar("g_balance_crylink_secondary_joinexplode_edgedamage") * n,
- cvar("g_balance_crylink_secondary_joinexplode_radius") * n, world,
+ cvar("g_balance_crylink_secondary_joinexplode_radius") * n, e.realowner,
cvar("g_balance_crylink_secondary_joinexplode_force") * n, e.projectiledeathtype, other);
pointparticles(particleeffectnum("crylink_joinexplode"), self.origin, '0 0 0', n);
n = n / cvar("g_balance_crylink_primary_shots");
RadiusDamage (e, e.realowner, cvar("g_balance_crylink_primary_joinexplode_damage") * n,
cvar("g_balance_crylink_primary_joinexplode_edgedamage") * n,
- cvar("g_balance_crylink_primary_joinexplode_radius") * n, world,
+ cvar("g_balance_crylink_primary_joinexplode_radius") * n, e.realowner,
cvar("g_balance_crylink_primary_joinexplode_force") * n, e.projectiledeathtype, other);
pointparticles(particleeffectnum("crylink_joinexplode"), self.origin, '0 0 0', n);
proj.event_damage = W_Plasma_Damage;
proj.flags = FL_PROJECTILE;
- //proj.bouncefactor = cvar("g_balance_electro_secondary_bouncefactor");
- //proj.bouncestop = cvar("g_balance_electro_secondary_bouncestop");
+ proj.bouncefactor = cvar("g_balance_electro_secondary_bouncefactor");
+ proj.bouncestop = cvar("g_balance_electro_secondary_bouncestop");
#if 0
entity p2;
--- /dev/null
+models/ice/ice
+{
+ dpnoshadow
+ dpreflectcube cubemaps/default/sky
+ {
+ map models/ice/ice.tga
+ blendfunc add
+ rgbgen vertex
+ }
+}