Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- memory.usememorydomain("System Bus")
- AddrXBig = 0xFFA5;
- AddrXSmall = 0xFFA6;
- AddrXSub = 0xFFA7;
- AddrXSpd = 0xFFD2; --big endian 16
- AddrYBig = 0xFFA8;
- AddrYSmall = 0xFFA9;
- AddrYSub = 0xFFAA;
- AddrYSpd = 0xFFD4; --big endian 16
- AddrZBig = 0xFFAB;
- AddrZSmall = 0xFFAC;
- AddrZSub = 0xFFAD;
- AddrZSpd = 0xFFD6; --big endian 16
- --C134,135,136 are the 3 digits of the timer
- AddrFrameTimer = 0xC137;
- PrevX = 0
- XDiff = 0
- PrevY = 0
- YDiff = 0
- PrevZ = 0
- ZDiff = 0
- PrevFrameTimer = -1
- PrevFrame = -1
- XPosTable = {}
- YPosTable = {}
- XColor = "white"
- XDiffColor = "white"
- XSpdColor = "white"
- --gui.defaultPixelFont("gens")
- gui.defaultPixelFont("fceux")
- while true do
- emu.frameadvance();
- --Position
- XSmall=memory.readbyte(AddrXSmall);
- XBig=memory.readbyte(AddrXBig);
- X=XBig*256+XSmall;
- XSub=memory.readbyte(AddrXSub);
- X = (X + (XSub/256))
- XDiff = X - PrevX;
- PrevX = X;
- --in this game vertical travel is what needs to be compared, generally
- --[[if (XPosTable[emu.framecount()] == null or XPosTable[emu.framecount()] == X) then
- XPosTable[emu.framecount()] = X;
- XColor = "white";
- elseif (XPosTable[emu.framecount()] < X) then
- XPosTable[emu.framecount()] = X;
- XColor = "green";
- else
- XColor = "red";
- end]]
- --[[if XDiff>1.5 then
- XDiffColor = "green"
- elseif XDiff<1.5 then
- XDiffColor = "red"
- else
- XDiffColor = "white"
- end]]
- YSmall=memory.readbyte(AddrYSmall);
- YBig=memory.readbyte(AddrYBig);
- Y=YBig*256+YSmall;
- YSub=memory.readbyte(AddrYSub);
- Y = (Y + (YSub/256))
- YDiff = Y - PrevY;
- PrevY = Y;
- if (YPosTable[emu.framecount()] == null or YPosTable[emu.framecount()] == Y) then
- YPosTable[emu.framecount()] = Y;
- YColor = "white";
- elseif (YPosTable[emu.framecount()] > Y) then
- YPosTable[emu.framecount()] = Y;
- YColor = "green";
- else
- YColor = "red";
- end
- -- negative 2 pixels per frame is the target speed
- if YDiff<-2 then
- YDiffColor = "green"
- elseif YDiff>-2 then
- YDiffColor = "red"
- else
- YDiffColor = "white"
- end
- ZSmall=memory.readbyte(AddrZSmall);
- ZBig=memory.readbyte(AddrZBig);
- Z=ZBig*256+ZSmall;
- ZSub=memory.readbyte(AddrZSub);
- Z = (Z + (ZSub/256))
- ZDiff = Z - PrevZ;
- PrevZ = Z;
- --the speed variables are not proving useful/accurate compared to diff
- --Speed
- --XSpd=memory.read_s16_be(AddrXSpd)/256;
- --YSpd=memory.read_s16_be(AddrYSpd)/256;
- --ZSpd=memory.read_s16_be(AddrZSpd)/256;
- gui.pixelText(3, 2, string.format("% 9.3f",X),XColor)
- --gui.pixelText(10, 18, string.format("% 9.3f",XSpd),XSpdColor)
- gui.pixelText(3, 11, string.format("% 9.3f",XDiff),XDiffColor)
- gui.pixelText(58, 2, string.format("% 9.3f",Y),YColor)
- --gui.pixelText(65, 18, string.format("% 9.3f",YSpd))
- gui.pixelText(58, 11, string.format("% 9.3f",YDiff),YDiffColor)
- gui.pixelText(113, 2, string.format("% 7.3f",Z))
- --gui.pixelText(120, 18, string.format("% 9.3f",ZSpd))
- gui.pixelText(113, 11, string.format("% 7.3f",ZDiff))
- --Determine Lag
- FrameTimer = memory.readbyte(AddrFrameTimer);
- if (FrameTimer == PrevFrameTimer and PrevFrame ~= emu.framecount()) then
- --Check if all our diffs are 0, but positions are not
- if (XDiff == 0 and YDiff == 0 and ZDiff == 0 and (X ~= 0 or Y ~= 0 or Z ~= 0)) then
- tastudio.setlag(emu.framecount(),true)
- end
- end
- PrevFrameTimer = FrameTimer
- PrevFrame = emu.framecount()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement