void WarpZone_Read(float isnew) { if not(self.enemy) { self.enemy = spawn(); self.enemy.classname = "warpzone_from"; } self.classname = "trigger_warpzone"; self.origin_x = ReadCoord(); self.origin_y = ReadCoord(); self.origin_z = ReadCoord(); self.modelindex = ReadShort(); self.mins_x = ReadCoord(); self.mins_y = ReadCoord(); self.mins_z = ReadCoord(); self.maxs_x = ReadCoord(); self.maxs_y = ReadCoord(); self.maxs_z = ReadCoord(); self.enemy.oldorigin_x = ReadCoord(); self.enemy.oldorigin_y = ReadCoord(); self.enemy.oldorigin_z = ReadCoord(); self.enemy.avelocity_x = ReadCoord(); self.enemy.avelocity_y = ReadCoord(); self.enemy.avelocity_z = ReadCoord(); self.oldorigin_x = ReadCoord(); self.oldorigin_y = ReadCoord(); self.oldorigin_z = ReadCoord(); self.avelocity_x = ReadCoord(); self.avelocity_y = ReadCoord(); self.avelocity_z = ReadCoord(); // common stuff WarpZone_SetUp(self, self.enemy.oldorigin, self.enemy.avelocity, self.oldorigin, self.avelocity); // engine currently wants this self.avelocity = AnglesTransform_TurnDirectionFR(self.avelocity); self.flags = FL_CAMERA; self.drawmask = MASK_NORMAL; // link me //setmodel(self, self.model); setorigin(self, self.origin); setsize(self, self.mins, self.maxs); } float warpzone_saved; vector warpzone_saved_origin; vector warpzone_saved_angles; void WarpZone_FixView() { float pd; entity e; warpzone_saved = 0; warpzone_saved_origin = warpzone_fixview_origin; warpzone_saved_angles = warpzone_fixview_angles; e = WarpZone_Find(warpzone_fixview_origin, warpzone_fixview_origin); if(e) { warpzone_saved = 1; warpzone_fixview_origin = WarpZone_TransformOrigin(e, warpzone_fixview_origin); warpzone_fixview_angles = WarpZone_TransformVAngles(e, warpzone_fixview_angles); } // if we are near any warpzone planes - MOVE AWAY (work around nearclip) float nearclip = 2; e = WarpZone_Find(warpzone_fixview_origin - '1 1 1' * nearclip, warpzone_fixview_origin + '1 1 1' * nearclip); if(e) { pd = WarpZone_PlaneDist(e, warpzone_fixview_origin); if(pd >= 0 && pd < nearclip) { warpzone_saved = 1; warpzone_fixview_origin = warpzone_fixview_origin + e.warpzone_forward * (nearclip - pd); } } if(warpzone_saved) { R_SetView(VF_ORIGIN, warpzone_fixview_origin); R_SetView(VF_ANGLES, warpzone_fixview_angles); } } void WarpZone_UnFixView() { if(warpzone_saved) { warpzone_fixview_origin = warpzone_saved_origin; warpzone_fixview_angles = warpzone_saved_angles; R_SetView(VF_ORIGIN, warpzone_fixview_origin); R_SetView(VF_ANGLES, warpzone_fixview_angles); } }