From: Rudolf Polzer Date: Thu, 18 Nov 2010 06:20:06 +0000 (+0100) Subject: Merge remote branch 'origin/fruitiex/fruit_vs_tzork-balance' X-Git-Tag: xonotic-v0.1.0preview~122^2~3 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=a7791fa9daed4ce0f7fd73811eeb49e50094b2c7;hp=472f639e84920c82603935ca708207e4729f0a34 Merge remote branch 'origin/fruitiex/fruit_vs_tzork-balance' --- diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 593bd77bf8..d7e3f2a957 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -356,7 +356,7 @@ seta sv_precacheitems 0 set sv_spectator_speed_multiplier 1.5 seta sv_spectate 1 "if set to 1, new clients are allowed to spectate or observe the game, if set to 0 joining clients spawn as players immediately (no spectating)" seta sv_defaultcharacter 0 "master switch, if set to 1 the further configuration for replacing all player models, skins and colors is taken from the sv_defaultplayermodel, sv_defaultplayerskin and sv_defaultplayercolors variables" -seta sv_defaultplayermodel "models/player/nexus.zym" "default model selection, only works if sv_defaultcharacter is set to 1" +seta sv_defaultplayermodel "models/player/erebus.iqm" "default model selection, only works if sv_defaultcharacter is set to 1" seta sv_defaultplayerskin 0 "each model has 1 or more skins (combination of model and skin = character), set which skin of the model you wish the default character to have, only works if sv_defaultcharacter is set to 1" seta sv_defaultplayermodel_red "" "\"\" means see sv_defaultplayermodel" seta sv_defaultplayerskin_red 0 @@ -487,8 +487,7 @@ set g_minstagib_extralives 2 "how many extra lives you will get per powerup" set g_minstagib_ammo_start 10 "starting ammo" set g_minstagib_ammo_drop 5 "how much ammo you'll get for weapons or cells" set g_minstagib_invis_alpha 0.15 -set g_minstagib_speed_jumpheight 1.8 "jump height multiplier that applies while you carry the invincibility powerup" -set g_minstagib_speed_moverate 1.25 "speed-multiplier that applies while you carry the invincibility powerup" +set g_minstagib_speed_highspeed 1.5 "speed-multiplier that applies while you carry the invincibility powerup" set g_vampire 0 "set to 1 to enable the vampire mode, where the damage done to your opponent gets added to your own health" set g_weaponarena "0" "put in a list of weapons to enable a weapon arena mode, or try \"all\" or \"most\"" set g_weaponarena_random "0" "if set to a number, only that weapon count is given on every spawn (randomly)" @@ -714,12 +713,9 @@ set g_balance_rune_regen_combo_limitmod 1 set g_balance_rune_speed_atkrate 0.66 set g_balance_curse_slow_atkrate 1.5 set g_balance_rune_speed_combo_atkrate 1.2 -set g_balance_rune_speed_moverate 1.25 -set g_balance_curse_slow_moverate 0.8 -set g_balance_rune_speed_combo_moverate 0.9 -set g_balance_rune_speed_jumpheight 1.4 -set g_balance_curse_slow_jumpheight 1.0 -set g_balance_rune_speed_combo_jumpheight 1.0 +set g_balance_rune_speed_highspeed 1.5 +set g_balance_curse_slow_highspeed 0.6 +set g_balance_rune_speed_combo_highspeed 0.9 // domination set g_domination 0 "Domination: capture and hold control points to gain points" @@ -759,10 +755,10 @@ set g_ca_warmup 10 "how long the players will have time to run around the map be // 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 @@ -815,7 +811,7 @@ set g_nexball_basketball_delay_hold 20 "time before a player who ca set g_nexball_basketball_delay_hold_forteam 60 "time before a ball reset when a team holds the ball for too long" set g_nexball_basketball_teamsteal 1 "1 to allow players to steal from teammates, 0 to disallow" -set g_nexball_basketball_carrier_speed 0.9 "speed multiplier for the ballcarrier" +set g_nexball_basketball_carrier_highspeed 0.8 "speed multiplier for the ballcarrier" set g_nexball_meter_period 1 "time to make a full cycle on the power meter" set g_nexball_basketball_meter 1 "use the power meter for basketball" @@ -1125,13 +1121,13 @@ alias singleplayer_continue "set scmenu_campaign_goto -1" alias singleplayer_levellist "set scmenu_campaign_dump 1; togglemenu; wait; togglemenu" // Green's fullbright skins -alias cl_fbskin_green "playermodel models/player/nexus.zym; playerskin 6; color 3 3" -alias cl_fbskin_red "playermodel models/player/nexus.zym; playerskin 6; color 4 4" -alias cl_fbskin_orange "playermodel models/player/nexus.zym; playerskin 6; color 14 14" -alias cl_fbskin_off "playermodel models/player/nexus.zym; playerskin 0" -alias sv_fbskin_green "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/nexus.zym; sv_defaultplayerskin 6; sv_defaultplayercolors 51" -alias sv_fbskin_red "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/nexus.zym; sv_defaultplayerskin 6; sv_defaultplayercolors 68" -alias sv_fbskin_orange "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/nexus.zym; sv_defaultplayerskin 6; sv_defaultplayercolors 238" +alias cl_fbskin_green "playermodel models/player/erebus.iqm; playerskin 1; color 3 3" +alias cl_fbskin_red "playermodel models/player/erebus.iqm; playerskin 1; color 4 4" +alias cl_fbskin_orange "playermodel models/player/erebus.iqm; playerskin 1; color 14 14" +alias cl_fbskin_off "playermodel models/player/erebus.iqm; playerskin 0" +alias sv_fbskin_green "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/erebus.iqm; sv_defaultplayerskin 1; sv_defaultplayercolors 51" +alias sv_fbskin_red "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/erebus.iqm; sv_defaultplayerskin 1; sv_defaultplayercolors 68" +alias sv_fbskin_orange "g_fullbrightplayers 1; sv_defaultcharacter 1; sv_defaultplayermodel models/player/erebus.iqm; sv_defaultplayerskin 1; sv_defaultplayercolors 238" alias sv_fbskin_off "g_fullbrightplayers 0; sv_defaultcharacter 0; sv_defaultplayerskin 0; sv_defaultplayercolors \"\"" seta sv_servermodelsonly 1 diff --git a/models/player/erebus.iqm_0.skin b/models/player/erebus.iqm_0.skin new file mode 100644 index 0000000000..81c4f3bae7 --- /dev/null +++ b/models/player/erebus.iqm_0.skin @@ -0,0 +1,2 @@ +erebus,erebus +erebus.001,shadowhead diff --git a/models/player/erebus.iqm_1.skin b/models/player/erebus.iqm_1.skin new file mode 100644 index 0000000000..4597ceff1e --- /dev/null +++ b/models/player/erebus.iqm_1.skin @@ -0,0 +1,2 @@ +erebus,erebusfullbright +erebus.001,shadowhead diff --git a/models/player/erebus.iqm_1.sounds b/models/player/erebus.iqm_1.sounds new file mode 100644 index 0000000000..a97a073b95 --- /dev/null +++ b/models/player/erebus.iqm_1.sounds @@ -0,0 +1,32 @@ +//TAG: soldier +//affirmative sound/player/carni-lycan/player/affirmative 0 +attack sound/player/soldier/coms/attack 0 +//attacking sound/player/carni-lycan/player/attacking 0 +attackinfive sound/player/soldier/coms/attackinfive 0 +coverme sound/player/soldier/coms/coverme 0 +defend sound/player/soldier/coms/defend 0 +//defending sound/player/carni-lycan/player/defending 0 +//droppedflag sound/player/carni-lycan/player/droppedflag 0 +flagcarriertakingdamage sound/player/soldier/coms/flagcarriertakingdamage 0 +freelance sound/player/soldier/coms/freelance 2 +getflag sound/player/soldier/coms/getflag 0 +incoming sound/player/soldier/coms/incoming 0 +meet sound/player/soldier/coms/meet 0 +needhelp sound/player/soldier/coms/needhelp 2 +//negative sound/player/carni-lycan/player/negative 0 +//onmyway sound/player/carni-lycan/player/onmyway 0 +//roaming sound/player/carni-lycan/player/roaming 0 +//seenenemy sound/player/carni-lycan/player/seenenemy 0 +seenflag sound/player/soldier/coms/seenflag 0 +taunt sound/player/soldier/coms/taunt 3 +teamshoot sound/player/soldier/coms/teamshoot 3 +death sound/player/soldier/player/death 3 +drown sound/player/soldier/player/drown 0 +fall sound/player/soldier/player/fall 0 +falling sound/player/soldier/player/falling 0 +gasp sound/player/soldier/player/gasp 0 +jump sound/player/soldier/player/jump 0 +pain25 sound/player/soldier/player/pain25 0 +pain50 sound/player/soldier/player/pain50 0 +pain75 sound/player/soldier/player/pain75 0 +pain100 sound/player/soldier/player/pain100 0 diff --git a/models/player/erebus.iqm_1.txt b/models/player/erebus.iqm_1.txt new file mode 100644 index 0000000000..7b8389b40f --- /dev/null +++ b/models/player/erebus.iqm_1.txt @@ -0,0 +1,7 @@ +name Glowing Erebus +species human +sex Male +weight 106 +age 26 + +Heavyweight Xonotic Solider with LEDs diff --git a/models/player/erebus_lod1.iqm_0.skin b/models/player/erebus_lod1.iqm_0.skin new file mode 100644 index 0000000000..81c4f3bae7 --- /dev/null +++ b/models/player/erebus_lod1.iqm_0.skin @@ -0,0 +1,2 @@ +erebus,erebus +erebus.001,shadowhead diff --git a/models/player/erebus_lod1.iqm_1.skin b/models/player/erebus_lod1.iqm_1.skin new file mode 100644 index 0000000000..4597ceff1e --- /dev/null +++ b/models/player/erebus_lod1.iqm_1.skin @@ -0,0 +1,2 @@ +erebus,erebusfullbright +erebus.001,shadowhead diff --git a/models/player/erebus_lod2.iqm_0.skin b/models/player/erebus_lod2.iqm_0.skin new file mode 100644 index 0000000000..81c4f3bae7 --- /dev/null +++ b/models/player/erebus_lod2.iqm_0.skin @@ -0,0 +1,2 @@ +erebus,erebus +erebus.001,shadowhead diff --git a/models/player/erebus_lod2.iqm_1.skin b/models/player/erebus_lod2.iqm_1.skin new file mode 100644 index 0000000000..4597ceff1e --- /dev/null +++ b/models/player/erebus_lod2.iqm_1.skin @@ -0,0 +1,2 @@ +erebus,erebusfullbright +erebus.001,shadowhead diff --git a/qcsrc/client/csqc_constants.qc b/qcsrc/client/csqc_constants.qc index 2b2e674c60..93051cc4d1 100644 --- a/qcsrc/client/csqc_constants.qc +++ b/qcsrc/client/csqc_constants.qc @@ -63,7 +63,6 @@ const float STAT_MOVEVARS_TIMESCALE = 241; const float STAT_FRAGLIMIT = 235; const float STAT_TIMELIMIT = 236; const float STAT_MOVEVARS_GRAVITY = 242; -const float STAT_MOVEVARS_MAXSPEED = 244; // Sound Constants //const float CHAN_AUTO = 0; diff --git a/qcsrc/common/constants.qh b/qcsrc/common/constants.qh index b1ccf1e31b..87484cd8f3 100644 --- a/qcsrc/common/constants.qh +++ b/qcsrc/common/constants.qh @@ -317,6 +317,7 @@ const float STAT_NEX_CHARGEPOOL = 52; // see DP source, quakedef.h const float STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW = 222; const float STAT_MOVEVARS_AIRSTRAFEACCEL_QW = 223; +const float STAT_MOVEVARS_MAXSPEED = 244; const float STAT_MOVEVARS_AIRACCEL_QW = 254; const float CTF_STATE_ATTACK = 1; diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 8ef5faa9d3..3d06f58718 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -599,6 +599,7 @@ void PutObserverInServer (void) } DropAllRunes(self); + MUTATOR_CALLHOOK(MakePlayerObserver); Portal_ClearAll(self); @@ -713,8 +714,6 @@ void PutObserverInServer (void) } else self.frags = FRAGS_SPECTATOR; - - MUTATOR_CALLHOOK(MakePlayerObserver); } float RestrictSkin(float s) diff --git a/qcsrc/server/cl_physics.qc b/qcsrc/server/cl_physics.qc index efc9118ea8..e9d1932302 100644 --- a/qcsrc/server/cl_physics.qc +++ b/qcsrc/server/cl_physics.qc @@ -130,26 +130,6 @@ void PlayerJump (void) if(self.health <= g_bloodloss) return; - if(g_runematch) - { - if(self.runes & RUNE_SPEED) - { - if(self.runes & CURSE_SLOW) - mjumpheight = mjumpheight * cvar("g_balance_rune_speed_combo_jumpheight"); - else - mjumpheight = mjumpheight * cvar("g_balance_rune_speed_jumpheight"); - } - else if(self.runes & CURSE_SLOW) - { - mjumpheight = mjumpheight * cvar("g_balance_curse_slow_jumpheight"); - } - } - - if(g_minstagib && (self.items & IT_INVINCIBLE)) - { - mjumpheight = mjumpheight * cvar("g_minstagib_speed_jumpheight"); - } - // sv_jumpspeedcap_min/sv_jumpspeedcap_max act as baseline // velocity bounds. Final velocity is bound between (jumpheight * // min + jumpheight) and (jumpheight * max + jumpheight); @@ -270,8 +250,8 @@ void RaceCarPhysics() vector angles_save, rigvel; angles_save = self.angles; - accel = bound(-1, self.movement_x / sv_maxspeed, 1); - steer = bound(-1, self.movement_y / sv_maxspeed, 1); + accel = bound(-1, self.movement_x / self.stat_sv_maxspeed, 1); + steer = bound(-1, self.movement_y / self.stat_sv_maxspeed, 1); if(g_bugrigs_reverse_speeding) { @@ -625,19 +605,19 @@ void PM_AirAccelerate(vector wishdir, float wishspeed) if(wishspeed > curspeed * 1.01) { - wishspeed = min(wishspeed, curspeed + sv_warsowbunny_airforwardaccel * sv_maxspeed * frametime); + wishspeed = min(wishspeed, curspeed + sv_warsowbunny_airforwardaccel * self.stat_sv_maxspeed * frametime); } else { - f = max(0, (sv_warsowbunny_topspeed - curspeed) / (sv_warsowbunny_topspeed - sv_maxspeed)); - wishspeed = max(curspeed, sv_maxspeed) + sv_warsowbunny_accel * f * sv_maxspeed * frametime; + f = max(0, (sv_warsowbunny_topspeed - curspeed) / (sv_warsowbunny_topspeed - self.stat_sv_maxspeed)); + wishspeed = max(curspeed, self.stat_sv_maxspeed) + sv_warsowbunny_accel * f * self.stat_sv_maxspeed * frametime; } wishvel = wishdir * wishspeed; acceldir = wishvel - curvel; addspeed = vlen(acceldir); acceldir = normalize(acceldir); - accelspeed = min(addspeed, sv_warsowbunny_turnaccel * sv_maxspeed * frametime); + accelspeed = min(addspeed, sv_warsowbunny_turnaccel * self.stat_sv_maxspeed * frametime); if(sv_warsowbunny_backtosideratio < 1) { @@ -707,13 +687,35 @@ void SV_PlayerPhysics() float not_allowed_to_move; string c; + maxspd_mod = 1; + if(g_minstagib && (self.items & IT_INVINCIBLE)) + maxspd_mod *= cvar("g_minstagib_speed_highspeed"); + if(g_nexball && self.ballcarried) + maxspd_mod *= cvar("g_nexball_basketball_carrier_highspeed"); + if(g_runematch) + { + if(self.runes & RUNE_SPEED) + { + if(self.runes & CURSE_SLOW) + maxspd_mod *= cvar("g_balance_rune_speed_combo_highspeed"); + else + maxspd_mod *= cvar("g_balance_rune_speed_highspeed"); + } + else if(self.runes & CURSE_SLOW) + { + maxspd_mod *= cvar("g_balance_curse_slow_highspeed"); + } + } + maxspd_mod *= autocvar_g_movement_highspeed; + // fix physics stats for g_movement_highspeed - self.stat_sv_airaccel_qw = AdjustAirAccelQW(sv_airaccel_qw, autocvar_g_movement_highspeed); + self.stat_sv_airaccel_qw = AdjustAirAccelQW(sv_airaccel_qw, maxspd_mod); if(sv_airstrafeaccel_qw) - self.stat_sv_airstrafeaccel_qw = AdjustAirAccelQW(sv_airstrafeaccel_qw, autocvar_g_movement_highspeed); + self.stat_sv_airstrafeaccel_qw = AdjustAirAccelQW(sv_airstrafeaccel_qw, maxspd_mod); else self.stat_sv_airstrafeaccel_qw = 0; - self.stat_sv_airspeedlimit_nonqw = sv_airspeedlimit_nonqw * autocvar_g_movement_highspeed; + self.stat_sv_airspeedlimit_nonqw = sv_airspeedlimit_nonqw * maxspd_mod; + self.stat_sv_maxspeed = sv_maxspeed * maxspd_mod; // also slow walking if(self.PlayerPhysplug) if(self.PlayerPhysplug()) @@ -846,31 +848,6 @@ void SV_PlayerPhysics() maxspd_mod = 1; - if(g_runematch) - { - if(self.runes & RUNE_SPEED) - { - if(self.runes & CURSE_SLOW) - maxspd_mod = maxspd_mod * cvar("g_balance_rune_speed_combo_moverate"); - else - maxspd_mod = maxspd_mod * cvar("g_balance_rune_speed_moverate"); - } - else if(self.runes & CURSE_SLOW) - { - maxspd_mod = maxspd_mod * cvar("g_balance_curse_slow_moverate"); - } - } - - if(g_minstagib && (self.items & IT_INVINCIBLE)) - { - maxspd_mod = cvar("g_minstagib_speed_moverate"); - } - - if(g_nexball && self.ballcarried) - { - maxspd_mod = cvar("g_nexball_basketball_carrier_speed"); - } - swampspd_mod = 1; if(self.in_swamp) { swampspd_mod = self.swamp_slowdown; //cvar("g_balance_swamp_moverate"); @@ -899,7 +876,7 @@ void SV_PlayerPhysics() maxspd_mod = self.spectatorspeed; } - spd = max(sv_maxspeed, sv_maxairspeed) * maxspd_mod * swampspd_mod; + spd = max(self.stat_sv_maxspeed, sv_maxairspeed) * maxspd_mod * swampspd_mod; if(self.speed != spd) { self.speed = spd; @@ -995,8 +972,8 @@ void SV_PlayerPhysics() // acceleration wishdir = normalize(wishvel); wishspeed = vlen(wishvel); - if (wishspeed > sv_maxspeed*maxspd_mod) - wishspeed = sv_maxspeed*maxspd_mod; + if (wishspeed > self.stat_sv_maxspeed*maxspd_mod) + wishspeed = self.stat_sv_maxspeed*maxspd_mod; if (time >= self.teleport_time) PM_Accelerate(wishdir, wishspeed, wishspeed, sv_accelerate*maxspd_mod, 1, 0, 0); } @@ -1013,8 +990,8 @@ void SV_PlayerPhysics() wishdir = normalize(wishvel); wishspeed = vlen(wishvel); - if (wishspeed > sv_maxspeed*maxspd_mod) - wishspeed = sv_maxspeed*maxspd_mod; + if (wishspeed > self.stat_sv_maxspeed*maxspd_mod) + wishspeed = self.stat_sv_maxspeed*maxspd_mod; wishspeed = wishspeed * 0.7; // water friction @@ -1059,8 +1036,8 @@ void SV_PlayerPhysics() // acceleration wishdir = normalize(wishvel); wishspeed = vlen(wishvel); - if (wishspeed > sv_maxspeed*maxspd_mod) - wishspeed = sv_maxspeed*maxspd_mod; + if (wishspeed > self.stat_sv_maxspeed*maxspd_mod) + wishspeed = self.stat_sv_maxspeed*maxspd_mod; if (time >= self.teleport_time) { // water acceleration @@ -1219,8 +1196,8 @@ void SV_PlayerPhysics() // acceleration wishdir = normalize(wishvel); wishspeed = vlen(wishvel); - if (wishspeed > sv_maxspeed*maxspd_mod) - wishspeed = sv_maxspeed*maxspd_mod; + if (wishspeed > self.stat_sv_maxspeed*maxspd_mod) + wishspeed = self.stat_sv_maxspeed*maxspd_mod; if (self.crouch) wishspeed = wishspeed * 0.5; if (time >= self.teleport_time) @@ -1249,8 +1226,8 @@ void SV_PlayerPhysics() // acceleration wishdir = normalize(wishvel); wishspeed = wishspeed0 = vlen(wishvel); - if (wishspeed0 > sv_maxspeed*maxspd_mod) - wishspeed0 = sv_maxspeed*maxspd_mod; + if (wishspeed0 > self.stat_sv_maxspeed*maxspd_mod) + wishspeed0 = self.stat_sv_maxspeed*maxspd_mod; if (wishspeed > maxairspd) wishspeed = maxairspd; if (self.crouch) diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index bec782f009..b99f27544a 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -531,6 +531,7 @@ float game_starttime; //point in time when the countdown is over .float stat_sv_airaccel_qw; .float stat_sv_airstrafeaccel_qw; .float stat_sv_airspeedlimit_nonqw; +.float stat_sv_maxspeed; void W_Porto_Remove (entity p); diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 9e9907e13a..b2029ae70a 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -817,6 +817,7 @@ void spawnfunc_worldspawn (void) } // g_movementspeed hack addstat(STAT_MOVEVARS_AIRSPEEDLIMIT_NONQW, AS_FLOAT, stat_sv_airspeedlimit_nonqw); + addstat(STAT_MOVEVARS_MAXSPEED, AS_FLOAT, stat_sv_maxspeed); addstat(STAT_MOVEVARS_AIRACCEL_QW, AS_FLOAT, stat_sv_airaccel_qw); addstat(STAT_MOVEVARS_AIRSTRAFEACCEL_QW, AS_FLOAT, stat_sv_airstrafeaccel_qw); diff --git a/qcsrc/server/sv_main.qc b/qcsrc/server/sv_main.qc index 5b8ca7ff86..8a73e6799a 100644 --- a/qcsrc/server/sv_main.qc +++ b/qcsrc/server/sv_main.qc @@ -199,6 +199,8 @@ void StartFrame (void) 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) diff --git a/textures/erebusfullbright.tga b/textures/erebusfullbright.tga new file mode 100644 index 0000000000..5a470f6d64 Binary files /dev/null and b/textures/erebusfullbright.tga differ diff --git a/textures/erebusfullbright_gloss.tga b/textures/erebusfullbright_gloss.tga new file mode 100644 index 0000000000..992af7530e Binary files /dev/null and b/textures/erebusfullbright_gloss.tga differ diff --git a/textures/erebusfullbright_glow.tga b/textures/erebusfullbright_glow.tga new file mode 100644 index 0000000000..a91959d366 Binary files /dev/null and b/textures/erebusfullbright_glow.tga differ diff --git a/textures/erebusfullbright_norm.tga b/textures/erebusfullbright_norm.tga new file mode 100644 index 0000000000..007228b7e9 Binary files /dev/null and b/textures/erebusfullbright_norm.tga differ diff --git a/textures/erebusfullbright_shirt.tga b/textures/erebusfullbright_shirt.tga new file mode 100644 index 0000000000..364bae2d9a Binary files /dev/null and b/textures/erebusfullbright_shirt.tga differ