X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Flib%2Fwarpzone%2Fclient.qc;h=7f8b0cdc837258a7bb5547d984afbcd960430baa;hp=44ae46fb14b08bcb0a63137a359c551e4b23491c;hb=991de5e6922cd3c283de56c3249624f0f1bfe767;hpb=eac60648c4017e495060dd3ba9e50ac4bad5000a diff --git a/qcsrc/lib/warpzone/client.qc b/qcsrc/lib/warpzone/client.qc index 44ae46fb14..7f8b0cdc83 100644 --- a/qcsrc/lib/warpzone/client.qc +++ b/qcsrc/lib/warpzone/client.qc @@ -25,9 +25,11 @@ void WarpZone_Fade_PreDraw(entity this) this.drawmask = MASK_NORMAL; } -void WarpZone_Touch (entity this); +void WarpZone_Touch(entity this, entity toucher); NET_HANDLE(ENT_CLIENT_WARPZONE, bool isnew) { + if(!warpzone_warpzones_exist) + cvar_settemp("r_water", "1"); // HACK for DarkPlaces: always enable reflections when a map has warpzones warpzone_warpzones_exist = 1; if (!this.enemy) { @@ -35,36 +37,25 @@ NET_HANDLE(ENT_CLIENT_WARPZONE, bool isnew) } this.classname = "trigger_warpzone"; + if(isnew) + IL_PUSH(g_warpzones, this); + int f = ReadByte(); this.warpzone_isboxy = (f & 1); if(f & 4) { - this.origin_x = ReadCoord(); - this.origin_y = ReadCoord(); - this.origin_z = ReadCoord(); + this.origin = ReadVector(); } else this.origin = '0 0 0'; this.modelindex = ReadShort(); - this.mins_x = ReadCoord(); - this.mins_y = ReadCoord(); - this.mins_z = ReadCoord(); - this.maxs_x = ReadCoord(); - this.maxs_y = ReadCoord(); - this.maxs_z = ReadCoord(); + this.mins = ReadVector(); + this.maxs = ReadVector(); this.scale = ReadByte() / 16; - this.enemy.oldorigin_x = ReadCoord(); - this.enemy.oldorigin_y = ReadCoord(); - this.enemy.oldorigin_z = ReadCoord(); - this.enemy.avelocity_x = ReadCoord(); - this.enemy.avelocity_y = ReadCoord(); - this.enemy.avelocity_z = ReadCoord(); - this.oldorigin_x = ReadCoord(); - this.oldorigin_y = ReadCoord(); - this.oldorigin_z = ReadCoord(); - this.avelocity_x = ReadCoord(); - this.avelocity_y = ReadCoord(); - this.avelocity_z = ReadCoord(); + this.enemy.oldorigin = ReadVector(); + this.enemy.avelocity = ReadVector(); + this.oldorigin = ReadVector(); + this.avelocity = ReadVector(); if(f & 2) { @@ -89,38 +80,30 @@ NET_HANDLE(ENT_CLIENT_WARPZONE, bool isnew) // engine currently wants this setpredraw(this, WarpZone_Fade_PreDraw); - //this.move_touch = WarpZone_Touch; + //settouch(this, WarpZone_Touch); return true; } NET_HANDLE(ENT_CLIENT_WARPZONE_CAMERA, bool isnew) { + if(!warpzone_cameras_exist) + cvar_settemp("r_water", "1"); // HACK for DarkPlaces: always enable reflections when a map has cameras warpzone_cameras_exist = 1; this.classname = "func_warpzone_camera"; int f = ReadByte(); if(f & 4) { - this.origin_x = ReadCoord(); - this.origin_y = ReadCoord(); - this.origin_z = ReadCoord(); + this.origin = ReadVector(); } else this.origin = '0 0 0'; this.modelindex = ReadShort(); - this.mins_x = ReadCoord(); - this.mins_y = ReadCoord(); - this.mins_z = ReadCoord(); - this.maxs_x = ReadCoord(); - this.maxs_y = ReadCoord(); - this.maxs_z = ReadCoord(); + this.mins = ReadVector(); + this.maxs = ReadVector(); this.scale = ReadByte() / 16; - this.oldorigin_x = ReadCoord(); - this.oldorigin_y = ReadCoord(); - this.oldorigin_z = ReadCoord(); - this.avelocity_x = ReadCoord(); - this.avelocity_y = ReadCoord(); - this.avelocity_z = ReadCoord(); + this.oldorigin = ReadVector(); + this.avelocity = ReadVector(); if(f & 2) { @@ -154,10 +137,7 @@ void CL_RotateMoves(vector ang) = #638; NET_HANDLE(ENT_CLIENT_WARPZONE_TELEPORTED, bool isnew) { this.classname = "warpzone_teleported"; - vector v; - v.x = ReadCoord(); - v.y = ReadCoord(); - v.z = ReadCoord(); + vector v = ReadVector(); return = true; if (!isnew) return; this.warpzone_transform = v; @@ -256,21 +236,35 @@ void WarpZone_FixView() WarpZone_View_Outside(); #ifndef KEEP_ROLL + float rick; + float f; static float rollkill; - if (STAT(HEALTH) <= 0 && STAT(HEALTH) != -666 && STAT(HEALTH) != -2342) + if (STAT(HEALTH) > 0 || STAT(HEALTH) == -666 || STAT(HEALTH) == -2342) + { + f = 0; + // reset roll when passing through a warpzone that change player's roll angle + if(autocvar_cl_rollkillspeed) + f = max(0, (1 - frametime * autocvar_cl_rollkillspeed)); + if(rollkill) + rollkill = 0; + } + else { + f = 1; + // roll the view when killed (v_deathtilt) if(autocvar_cl_rollkillspeed) { rollkill += frametime * autocvar_cl_rollkillspeed; - rollkill = min(1, rollkill); + f = min(1, rollkill); } - float rick; - rick = getproperty(VF_CL_VIEWANGLES_Z) * rollkill; - setproperty(VF_CL_VIEWANGLES_Z, rick); - ang.z *= rollkill; + else if(rollkill) + rollkill = 0; } - else if(rollkill) - rollkill = 0; + + rick = getproperty(VF_CL_VIEWANGLES_Z); + rick *= f; + setproperty(VF_CL_VIEWANGLES_Z, rick); + ang.z *= f; #endif setproperty(VF_ORIGIN, org);