Untitled diff

Created Diff never expires
11 removals
180 lines
22 additions
191 lines
/*
/*
specfix.u 9.41 Kb (9636 byte)
specfix.u 9.78 Kb (10017 byte)
26 ‎january ‎2006 ‎y., ‏‎3:06:38
9 ‎december ‎2000 ‎y., ‏‎16:48:56
CRC32: B3DB93D0
CRC32: 89BF9DA3
MD5: 30C1D03DF171869CC073114C65549917
MD5: 3DCAFC88D82861FD16E735DE7EC9A772
SHA-1: 3D1A5720AA992ABB6C1523255F670FE64DFC038F
SHA-1: A543880F09072D66D3A633F79E924212D4E1DC26
*/
*/


// ============================================================
// ============================================================
// specfix-1.specitem: enables behindview on default, removes viewtargets belt and resets "rolled" views
// specfix-1.specitem: enables behindview on default, removes viewtargets belt and resets "rolled" views
// interpolates missing viewrotation updates
// interpolates missing viewrotation updates
// by =NUB=garfield with great help from Mongo
// by =NUB=garfield with great help from Mongo
// ============================================================
// ============================================================


class specitem expands UMenuModMenuItem;
class specitem expands UMenuModMenuItem;


var specticker mytick;
var specticker mytick;
var float lastchecked;
var float lastchecked;
var inventory inv;
var inventory inv;
var playerpawn p, sp;
var playerpawn p, sp;
var levelinfo elvl;
var levelinfo elvl;
var ut_shieldbelteffect belt;
var ut_shieldbelteffect belt;
var weapon w;
var weapon w;


// prediction stuff
// prediction stuff
var float timepassed, totaltime, predictiontime;
var float timepassed, totaltime, predictiontime;
var rotator lastrotation, realtargetrotation;
var rotator lastrotation, realtargetrotation;
var int updatetimes, pitchdiff, yawdiff, tmppitch, tmpyaw;
var int updatetimes, pitchdiff, yawdiff, tmppitch, tmpyaw;
var float pitchrate, yawrate;
var float pitchrate, yawrate;




function setup()
function setup()
{
{
super.setup();
super.setup();
elvl = menuitem.owner.getentrylevel();
elvl = menuitem.owner.getentrylevel();
}
}




function execute()
function execute()
{
{
menuitem.bchecked=!menuitem.bchecked;
menuitem.bchecked=!menuitem.bchecked;
if (menuitem.bchecked)
if (menuitem.bchecked)
{
{
if (mytick == none)
if (mytick == none)
{
{
mytick = elvl.spawn(class'specticker');
mytick = elvl.spawn(class'specticker');
mytick.spectick=self;
mytick.spectick=self;
menuitem.owner.GetPlayerOwner().UpdateURL("OverrideClass", "Botpack.CHSpectator", True);
menuitem.owner.GetPlayerOwner().UpdateURL("OverrideClass", "Botpack.CHSpectator", True);
}
}
}
}
else
else
{
{
foreach elvl.allactors(class'specticker', mytick)
foreach elvl.allactors(class'specticker', mytick)
{
{
mytick.spectick=none;
mytick.spectick=none;
mytick.destroy();
mytick.destroy();
}
}
menuitem.owner.GetPlayerOwner().UpdateURL("OverrideClass", "", True);
menuitem.owner.GetPlayerOwner().UpdateURL("OverrideClass", "", True);
}
}
}
}




function setbasicstuff()
function setbasicstuff()
{
{
if (p != none)
if (p != none)
{
{
p.viewrotation.roll=0;
p.viewrotation.roll=0;
sp.targetviewrotation.roll=0;
sp.targetviewrotation.roll=0;
p.weapon.bhideweapon = true;
p.weapon.bhidden = true;
sp.bbehindview=false;
sp.bbehindview=false;
};
};
}
}


function weaponreset()
{
foreach sp.allactors(class'weapon', w)
{
if ( (w.owner != p) && (w.owner != none) )
{
w.bhidden = false;
}
};
}


function beltstuff()
function beltstuff()
{
{
foreach sp.allactors(class'ut_shieldbelteffect', belt)
foreach sp.allactors(class'ut_shieldbelteffect', belt)
{
{
if (belt.owner == p)
if (belt.owner == p)
{
{
belt.bhidden = true;
belt.bhidden = true;
}
}
else
else
{
{
if (belt.owner.style != STY_Translucent)
if (belt.owner.style != STY_Translucent)
{
{
belt.bhidden = false;
belt.bhidden = false;
};
};
}
}
};
};
}
}


function gotupdated()
function gotupdated()
{
{
totaltime += timepassed;
totaltime += timepassed;
updatetimes++;
updatetimes++;
predictiontime = totaltime/updatetimes;
predictiontime = totaltime/updatetimes;
realtargetrotation = sp.targetviewrotation;
realtargetrotation = sp.targetviewrotation;
sp.targetviewrotation = lastrotation;
sp.targetviewrotation = lastrotation;
lastrotation = realtargetrotation;
lastrotation = realtargetrotation;
//log("udt"@timepassed);
//log("udt"@timepassed);
//log("upd"@realtargetrotation);
//log("upd"@realtargetrotation);
pitchdiff = (realtargetrotation.pitch - sp.targetviewrotation.pitch);
pitchdiff = (realtargetrotation.pitch - sp.targetviewrotation.pitch);
yawdiff = (realtargetrotation.yaw - sp.targetviewrotation.yaw);
yawdiff = (realtargetrotation.yaw - sp.targetviewrotation.yaw);
normdiff(pitchdiff);
normdiff(pitchdiff);
normdiff(yawdiff);
normdiff(yawdiff);
pitchrate = pitchdiff/(predictiontime);
pitchrate = pitchdiff/(predictiontime);
yawrate = yawdiff/(predictiontime);
yawrate = yawdiff/(predictiontime);
//log("unr"@pitchrate@", "@yawrate);
//log("unr"@pitchrate@", "@yawrate);
timepassed = 0;
timepassed = 0;
}
}


function normdiff(out int diff)
function normdiff(out int diff)
{
{
//log("nnorm"@diff);
//log("nnorm"@diff);
if (diff > 32767) {diff -= 65536;};
if (diff > 32767) {diff -= 65536;};
if (diff < -32767) {diff += 65536;};
if (diff < -32767) {diff += 65536;};
//log("normed"@diff);
//log("normed"@diff);
}
}


function renorm(out int a)
function renorm(out int a)
{
{
a = a&65535;
a = a&65535;
}
}


function setnewrate(float deltatime)
function setnewrate(float deltatime)
{
{
pitchdiff = (realtargetrotation.pitch - sp.targetviewrotation.pitch);
pitchdiff = (realtargetrotation.pitch - sp.targetviewrotation.pitch);
yawdiff = (realtargetrotation.yaw - sp.targetviewrotation.yaw);
yawdiff = (realtargetrotation.yaw - sp.targetviewrotation.yaw);
normdiff(pitchdiff);
normdiff(pitchdiff);
normdiff(yawdiff);
normdiff(yawdiff);
pitchrate = 2*pitchdiff/(predictiontime+deltatime);
pitchrate = 2*pitchdiff/(predictiontime+deltatime);
yawrate = 2*yawdiff/(predictiontime+deltatime);
yawrate = 2*yawdiff/(predictiontime+deltatime);
//log("rtrp"@realtargetrotation.pitch@"tvrp"@sp.targetviewrotation.pitch)@"rtry"@realtargetrotation.yaw@"tvry"@sp.targetviewrotation.yaw);
//log("rtrp"@realtargetrotation.pitch@"tvrp"@sp.targetviewrotation.pitch)@"rtry"@realtargetrotation.yaw@"tvry"@sp.targetviewrotation.yaw);
//log("diff"@pitchdiff@", "@yawdiff);
//log("diff"@pitchdiff@", "@yawdiff);
//log("nr"@pitchrate@", "@yawrate);
//log("nr"@pitchrate@", "@yawrate);
}
}




function setrot(float deltatime)
function setrot(float deltatime)
{
{
sp.targetviewrotation.pitch = sp.targetviewrotation.pitch + deltatime * pitchrate;
sp.targetviewrotation.pitch = sp.targetviewrotation.pitch + deltatime * pitchrate;
sp.targetviewrotation.yaw = sp.targetviewrotation.yaw + deltatime * yawrate;
sp.targetviewrotation.yaw = sp.targetviewrotation.yaw + deltatime * yawrate;
renorm(sp.targetviewrotation.pitch);
renorm(sp.targetviewrotation.pitch);
renorm(sp.targetviewrotation.yaw);
renorm(sp.targetviewrotation.yaw);
//log("inc"@(deltatime * pitchrate)@", "@(deltatime * yawrate));
//log("inc"@(deltatime * pitchrate)@", "@(deltatime * yawrate));
//log("nud"@(realtargetrotation.pitch - sp.targetviewrotation.pitch)@", "@(realtargetrotation.yaw - sp.targetviewrotation.yaw));
//log("nud"@(realtargetrotation.pitch - sp.targetviewrotation.pitch)@", "@(realtargetrotation.yaw - sp.targetviewrotation.yaw));
}
}




function tick(float deltatime)
function tick(float deltatime)
{
{
setbasicstuff();
setbasicstuff();
sp=menuitem.owner.getplayerowner();
sp=menuitem.owner.getplayerowner();
p=playerpawn(sp.viewtarget);
p=playerpawn(sp.viewtarget);
if ( (sp.playerreplicationinfo.bisspectator) && (p != none) )
if ( (sp.playerreplicationinfo.bisspectator) && (p != none) )
{
{
timepassed += deltatime;
timepassed += deltatime;
//log("if"@lastrotation.pitch@"!"@sp.targetviewrotation.pitch@"+"@lastrotation.yaw@"!"@sp.targetviewrotation.yaw);
//log("if"@lastrotation.pitch@"!"@sp.targetviewrotation.pitch@"+"@lastrotation.yaw@"!"@sp.targetviewrotation.yaw);
if ( (lastrotation.pitch != sp.targetviewrotation.pitch) || (lastrotation.yaw != sp.targetviewrotation.yaw) )
if ( (lastrotation.pitch != sp.targetviewrotation.pitch) || (lastrotation.yaw != sp.targetviewrotation.yaw) )
{
{
gotupdated();
gotupdated();
}
}
setrot(deltatime);
setrot(deltatime);
setnewrate(deltatime);
setnewrate(deltatime);
lastrotation = sp.targetviewrotation;
lastrotation = sp.targetviewrotation;
if (elvl.timeseconds>lastchecked+0.25)
if (elvl.timeseconds>lastchecked+0.25)
{
{
lastchecked=elvl.timeseconds;
lastchecked=elvl.timeseconds;
beltstuff();
beltstuff();
weaponreset();
}
}
};
};
}
}






defaultproperties
defaultproperties
{
{
}
}