2160
"The Witness Freecam v1.1, IDK31freecam@gmail.com"
1
2162
"Edit > Settings > Hotkeys, set "keypoll" and "delay" to 10ms"
1
2161
"Attach to process: witness64_d3d11.exe"
1
2163
""
1
2157
">> CAMERA [PGDN]"
FF0000
Auto Assembler Script
[ENABLE]
alloc(_freecamON,4)
alloc(_tarX,4)
alloc(_tarY,4)
alloc(_tarZ,4)
alloc(_pitch,4)
alloc(_yaw,4)
alloc(_roll,4)
registersymbol(_freecamON)
registersymbol(_tarX)
registersymbol(_tarY)
registersymbol(_tarZ)
registersymbol(_pitch)
registersymbol(_yaw)
registersymbol(_roll)
//"witness64_d3d11.exe"+24594E
aobscanmodule(rotAOB,witness64_d3d11.exe,0F 11 05 4B 7B 3E 00)
alloc(newmem,$1000,rotAOB)
label(init)
label(code)
label(return)
newmem:
init:
cmp [_freecamON],0
je code
jmp return
code:
movups [witness64_d3d11.exe+62D4A0],xmm0 // quaternion rotation
jmp return
rotAOB:
jmp newmem
nop
nop
return:
registersymbol(rotAOB)
//"witness64_d3d11.exe"+2479DE
aobscanmodule(writeXYAOB,witness64_d3d11.exe,F2 0F 11 05 AA 5A 3E 00)
alloc(newmem2,$1000,writeXYAOB)
label(init2)
label(code2)
label(return2)
newmem2:
init2:
cmp [_freecamON],0
je code2
//movsd [witness64_d3d11.exe+62D490],xmm0 // X, Y
mov ecx,[rax+08]
movsd [witness64_d3d11.exe+62A58C],xmm0
//mov [witness64_d3d11.exe+62D498],ecx // Z
jmp return2
code2:
movsd [witness64_d3d11.exe+62D490],xmm0 // X, Y
mov ecx,[rax+08]
movsd [witness64_d3d11.exe+62A58C],xmm0
mov [witness64_d3d11.exe+62D498],ecx // Z
jmp return2
writeXYAOB:
jmp newmem2
db 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
return2:
registersymbol(writeXYAOB)
//"witness64_d3d11.exe"+2473B2
aobscanmodule(writeXY2AOB,witness64_d3d11.exe,F2 0F 11 05 D6 60 3E 00)
alloc(newmem3,$1000,writeXY2AOB)
label(init3)
label(code3)
label(return3)
newmem3:
init3:
cmp [_freecamON],0
je code3
//movsd [witness64_d3d11.exe+62D490],xmm0 // X, Y
mov ecx,[rax+08]
//mov [witness64_d3d11.exe+62D498],ecx // Z
jmp return3
code3:
movsd [witness64_d3d11.exe+62D490],xmm0 // X, Y
mov ecx,[rax+08]
mov [witness64_d3d11.exe+62D498],ecx // Z
jmp return3
writeXY2AOB:
jmp newmem3
db 90 90 90 90 90 90 90 90 90 90 90 90
return3:
registersymbol(writeXY2AOB)
//"witness64_d3d11.exe"+2D9D9E
aobscanmodule(playerAOB,witness64_d3d11.exe,F2 0F 10 40 24 F2 0F 11 45)
alloc(newmem4,$1000,playerAOB)
label(hidePlayer)
label(showPlayer)
label(code4)
label(return4)
newmem4:
hidePlayer:
cmp [_freecamON],0
je showPlayer
or byte ptr [rax+21],80
jmp code4
showPlayer:
and byte ptr [rax+21],7F
code4:
movsd xmm0,[rax+24] // player X, Y
jmp return4
playerAOB:
jmp newmem4
return4:
registersymbol(playerAOB)
{$lua}
if syntaxcheck then return end
local symbolCheckT = createTimer()
symbolCheckT.Interval = 1000
symbolCheckT.OnTimer = function(sender)
if readInteger("witness64_d3d11.exe") == nil then
sender.destroy()
return
end
-- destroy old stuff in case of crash
if checkCamKeys ~= nil then
checkCamKeys.destroy()
checkCamKeys = nil
end
if camHotkeys ~= nil then
for i,v in ipairs(camHotkeys) do v.destroy() end
camHotkeys = nil
end
-- end destroy
local camBase = getAddress("witness64_d3d11.exe")
if camBase == 0 then sender.destroy(); return end
-- CAMERA ADDRESSES
local camXAD = camBase + 0x62D490
local camYAD = camBase + 0x62D494
local camZAD = camBase + 0x62D498
local qwAD = camBase + 0x62D4AC
local qxAD = camBase + 0x62D4A4
local qyAD = camBase + 0x62D4A8
local qzAD = camBase + 0x62D4A0
local FOVAD = camBase + 0x61D8BC
local tarXAD = getAddress("_tarX")
local tarYAD = getAddress("_tarY")
local tarZAD = getAddress("_tarZ")
local pitchAD = getAddress("_pitch")
local yawAD = getAddress("_yaw")
local rollAD = getAddress("_roll")
local freecamAD = getAddress("_freecamON")
-- VARIABLES
local defaultTarDist = 10
local flySpeed = 0.1
local aimSpeed = math.pi/720
local rollSpeed = math.pi/720
local FOVSpeed = 0.2
local hellaFast = 100
local fastMult = 10
local slowDiv = 10
local pitchMax = 0.99*math.pi/2
local useZ = true
local defaultFOV = 59.51130676
local separation3D = 0.2
local prvFOV
local tmpX
local tmpY
local tmpZ
local tmpQW
local tmpQX
local tmpQY
local tmpQZ
local function freecamEnabled()
if readInteger(freecamAD) == 1 then return true end
return false
end
local function gameHasFocus()
if getOpenedProcessID() == getForegroundProcess() then return true end
return false
end
local function requiredConditions()
if freecamEnabled() and gameHasFocus() then return true end
return false
end
local function updateRotation()
local pitch = -0.5*readFloat(pitchAD)
local yaw = 0.5*readFloat(yawAD)
local roll = 0.5*readFloat(rollAD)
local sp = math.sin(pitch)
local cp = math.cos(pitch)
local sy = math.sin(yaw)
local cy = math.cos(yaw)
local sr = math.sin(roll)
local cr = math.cos(roll)
--quaternion rotation
local qw = cp*cy*cr + sp*sy*sr
local qx = sp*cy*cr + cp*sy*sr
local qy = cp*sy*cr - sp*cy*sr
local qz = cp*cy*sr - sp*sy*cr
writeFloat(qwAD, qw)
writeFloat(qxAD, qx)
writeFloat(qyAD, qy)
writeFloat(qzAD, qz)
end
local function getRotation()
local pitch = -math.atan(2*(tmpQW*tmpQX+tmpQY*tmpQZ)/(1-2*(tmpQX*tmpQX+tmpQY*tmpQY)))
local yaw = math.asin(2*(tmpQW*tmpQY-tmpQX*tmpQZ))
if math.abs(tmpQY) > math.abs(tmpQW) then yaw = math.pi - yaw end
local cp = math.cos(pitch)
local dX = defaultTarDist*math.sin(yaw)*cp
local dY = defaultTarDist*math.cos(yaw)*cp
local dZ = defaultTarDist*math.sin(pitch)
writeFloat(pitchAD,pitch)
writeFloat(yawAD,yaw)
writeFloat(rollAD,0)
writeFloat(tarXAD,tmpX+dY)
writeFloat(tarYAD,tmpY+dX)
writeFloat(tarZAD,tmpZ+dZ)
updateRotation()
end
local function toggleFreecam()
if not gameHasFocus() then return end
if freecamEnabled() then
for j=1,12,1 do camCheat[0].value[j] = readBytes(camCheat.addy[j],8,true) end
writeFloat(FOVAD, prvFOV)
writeInteger(freecamAD, 0)
else
prvFOV = readFloat(FOVAD)
tmpX = readFloat(camXAD)
tmpY = readFloat(camYAD)
tmpZ = readFloat(camZAD)
tmpQW = readFloat(qwAD)
tmpQX = readFloat(qxAD)
tmpQY = readFloat(qyAD)
tmpQZ = readFloat(qzAD)
writeInteger(freecamAD, 1)
getRotation()
end
end
if camCheat == nil then
camCheat = {}
camCheat.addy = {camXAD; camYAD; camZAD; qwAD; qxAD; qyAD; qzAD; tarXAD; tarYAD; tarZAD; rollAD; FOVAD}
for i=0,9,1 do
camCheat[i] = {value = {}}
local set = function(sender)
if not requiredConditions() then return end
camCheat.addy = {camXAD; camYAD; camZAD; qwAD; qxAD; qyAD; qzAD; tarXAD; tarYAD; tarZAD; rollAD; FOVAD}
for j=1,12,1 do camCheat[i].value[j] = readBytes(camCheat.addy[j],8,true) end
end
if i == 0 then set(nil) else
camCheat[i].setHotkey = createHotkey(set, _G["VK_" .. i], VK_MENU)
camCheat[i].setHotkey.DelayBetweenActivate = 1000
end
local get = function(sender)
if not gameHasFocus() or #camCheat[i].value ~= 12 then return end
if not freecamEnabled() then toggleFreecam() end
camCheat.addy = {camXAD; camYAD; camZAD; qwAD; qxAD; qyAD; qzAD; tarXAD; tarYAD; tarZAD; rollAD; FOVAD}
for j=1,12,1 do
if i ~= 0 then camCheat[0].value[j] = readBytes(camCheat.addy[j],8,true) end
writeBytes(camCheat.addy[j], camCheat[i].value[j])
end
end
camCheat[i].getHotkey = createHotkey(get, _G["VK_" .. i])
camCheat[i].getHotkey.DelayBetweenActivate = 1000
end
else camCheat.addy = {camXAD; camYAD; camZAD; qwAD; qxAD; qyAD; qzAD; tarXAD; tarYAD; tarZAD; rollAD; FOVAD}
end
-- MOVEMENT SPEED MODIFIERS
local flySpeedOrig = flySpeed
local aimSpeedOrig = aimSpeed
local rollSpeedOrig = rollSpeed
local FOVSpeedOrig = FOVSpeed
local hellaFastModeEnabled = false
local fastModeEnabled = false
local slowModeEnabled = false
local didReset = true
local didSlow = false
local didFast = false
local didHellaFast = false
checkCamKeys = createTimer()
checkCamKeys.setInterval(100)
checkCamKeys.onTimer = function()
if not gameHasFocus() then return end
if isKeyPressed(VK_T) and not isKeyPressed(VK_MENU) then
if not didHellaFast then
flySpeed = flySpeedOrig*hellaFast
aimSpeed = aimSpeedOrig*fastMult
rollSpeed = rollSpeedOrig*fastMult
FOVSpeed = FOVSpeedOrig*fastMult
didReset = false
didHellaFast = true
end
elseif isKeyPressed(VK_F) and not isKeyPressed(VK_MENU) then
if not didFast then
flySpeed = flySpeedOrig*fastMult
aimSpeed = aimSpeedOrig*fastMult
rollSpeed = rollSpeedOrig*fastMult
FOVSpeed = FOVSpeedOrig*fastMult
didReset = false
didFast = true
end
elseif isKeyPressed(VK_C) and not isKeyPressed(VK_MENU) then
if not didSlow then
flySpeed = flySpeedOrig/slowDiv
aimSpeed = aimSpeedOrig/slowDiv
rollSpeed = rollSpeedOrig/slowDiv
FOVSpeed = FOVSpeedOrig/slowDiv
didReset = false
didSlow = true
end
elseif not didReset then
flySpeed = flySpeedOrig
aimSpeed = aimSpeedOrig
rollSpeed = rollSpeedOrig
FOVSpeed = FOVSpeedOrig
didHellaFast = false
didFast = false
didSlow = false
didReset = true
hellaFastModeEnabled = false
fastModeEnabled = false
slowModeEnabled = false
end
end
-- MOVEMENT SPEED TOGGLES
local function resetSpeed()
flySpeed = flySpeedOrig
aimSpeed = aimSpeedOrig
rollSpeed = rollSpeedOrig
FOVSpeed = FOVSpeedOrig
hellaFastModeEnabled = false
fastModeEnabled = false
slowModeEnabled = false
end
local function goHellaFast()
if hellaFastModeEnabled then resetSpeed()
else
flySpeed = flySpeedOrig*hellaFast
aimSpeed = aimSpeedOrig*fastMult
rollSpeed = rollSpeedOrig*fastMult
FOVSpeed = FOVSpeedOrig*fastMult
hellaFastModeEnabled = true
fastModeEnabled = false
slowModeEnabled = false
end
end
local function goFast()
if fastModeEnabled then resetSpeed()
else
flySpeed = flySpeedOrig*fastMult
aimSpeed = aimSpeedOrig*fastMult
rollSpeed = rollSpeedOrig*fastMult
FOVSpeed = FOVSpeedOrig*fastMult
hellaFastModeEnabled = false
fastModeEnabled = true
slowModeEnabled = false
end
end
local function goSlow()
if slowModeEnabled then resetSpeed()
else
flySpeed = flySpeedOrig/slowDiv
aimSpeed = aimSpeedOrig/slowDiv
rollSpeed = rollSpeedOrig/slowDiv
FOVSpeed = FOVSpeedOrig/slowDiv
hellaFastModeEnabled = false
fastModeEnabled = false
slowModeEnabled = true
end
end
-- CAMERA FUNCTIONS
local function toggleUseZ()
if not requiredConditions() then return end
if useZ then useZ = false
else useZ = true
end
end
local function move(moveDir)
if not requiredConditions() then return end
local camX = readFloat(camXAD)
local camY = readFloat(camYAD)
local camZ = readFloat(camZAD)
local tarX = readFloat(tarXAD)
local tarY = readFloat(tarYAD)
local tarZ = readFloat(tarZAD)
local Xdiff = tarX-camX
local Ydiff = tarY-camY
local Zdiff
local hypXY = math.sqrt(Xdiff*Xdiff+Ydiff*Ydiff)
if moveDir == "up" then
writeFloat(camZAD, camZ+flySpeed)
writeFloat(tarZAD, tarZ+flySpeed)
return
elseif moveDir == "upCamOnly" then
camZ = camZ+flySpeed
writeFloat(camZAD, camZ)
Zdiff = tarZ-camZ
writeFloat(pitchAD,math.atan(Zdiff/hypXY))
updateRotation()
return
elseif moveDir == "down" then
writeFloat(camZAD, camZ-flySpeed)
writeFloat(tarZAD, tarZ-flySpeed)
return
elseif moveDir == "downCamOnly" then
camZ = camZ-flySpeed
writeFloat(camZAD, camZ)
Zdiff = tarZ-camZ
writeFloat(pitchAD,math.atan(Zdiff/hypXY))
updateRotation()
return
end
Zdiff = tarZ-camZ
local dX; local dY; local dZ
if moveDir == "right" or moveDir == "right3D" then
if moveDir == "right3D" then
dX = separation3D*Ydiff/hypXY
dY = separation3D*Xdiff/hypXY
else
dX = flySpeed*Ydiff/hypXY
dY = flySpeed*Xdiff/hypXY
end
if moveDir == "right3D" or useZ then
local roll = readFloat(rollAD)
local cosRoll = math.cos(roll)
dX = dX*cosRoll
dY = dY*cosRoll
if moveDir == "right3D" then
dZ = separation3D*math.sin(roll)
else
dZ = flySpeed*math.sin(roll)
end
writeFloat(tarZAD, tarZ-dZ)
writeFloat(camZAD, camZ-dZ)
end
writeFloat(tarXAD, tarX+dX)
writeFloat(tarYAD, tarY-dY)
writeFloat(camXAD, camX+dX)
writeFloat(camYAD, camY-dY)
return
elseif moveDir == "left" or moveDir == "left3D" then
if moveDir == "left3D" then
dX = separation3D*Ydiff/hypXY
dY = separation3D*Xdiff/hypXY
else
dX = flySpeed*Ydiff/hypXY
dY = flySpeed*Xdiff/hypXY
end
if moveDir == "left3D" or useZ then
local roll = readFloat(rollAD)
local cosRoll = math.cos(roll)
dX = dX*cosRoll
dY = dY*cosRoll
if moveDir == "left3D" then
dZ = separation3D*math.sin(roll)
else
dZ = flySpeed*math.sin(roll)
end
writeFloat(tarZAD, tarZ+dZ)
writeFloat(camZAD, camZ+dZ)
end
writeFloat(tarXAD, tarX-dX)
writeFloat(tarYAD, tarY+dY)
writeFloat(camXAD, camX-dX)
writeFloat(camYAD, camY+dY)
return
end
local hypZ = math.sqrt(Zdiff*Zdiff+hypXY*hypXY)
if useZ then
dX = flySpeed*Xdiff/hypZ
dY = flySpeed*Ydiff/hypZ
dZ = flySpeed*Zdiff/hypZ
if moveDir == "backward" then dZ = -dZ end
writeFloat(tarZAD, tarZ+dZ)
writeFloat(camZAD, camZ+dZ)
else
dX = flySpeed*Xdiff/hypXY
dY = flySpeed*Ydiff/hypXY
dZ = flySpeed*Zdiff/hypXY
end
if moveDir == "forward" then
writeFloat(tarXAD, tarX+dX)
writeFloat(tarYAD, tarY+dY)
writeFloat(camXAD, camX+dX)
writeFloat(camYAD, camY+dY)
elseif moveDir == "backward" then
writeFloat(tarXAD, tarX-dX)
writeFloat(tarYAD, tarY-dY)
writeFloat(camXAD, camX-dX)
writeFloat(camYAD, camY-dY)
else return
end
end
local function orbit(orbitDir)
if not requiredConditions() then return end
local exitFunction = false
local camX = readFloat(camXAD)
local camY = readFloat(camYAD)
local tarX = readFloat(tarXAD)
local tarY = readFloat(tarYAD)
local Xdiff = tarX-camX
local Ydiff = tarY-camY
local hypXY = math.sqrt(Xdiff*Xdiff+Ydiff*Ydiff)
local yaw
if orbitDir == "left" or orbitDir == "panRight" then
yaw = math.atan(Ydiff/Xdiff)-aimSpeed
elseif orbitDir == "right" or orbitDir == "panLeft" then
yaw = math.atan(Ydiff/Xdiff)+aimSpeed
else
local camZ = readFloat(camZAD)
local tarZ = readFloat(tarZAD)
local Zdiff = tarZ-camZ
local hypZ = math.sqrt(Zdiff*Zdiff+hypXY*hypXY)
local pitch
if orbitDir == "down" or orbitDir == "panUp" then
pitch = math.asin(Zdiff/hypZ)+aimSpeed
elseif orbitDir == "up" or orbitDir == "panDown" then
pitch = math.asin(Zdiff/hypZ)-aimSpeed
else return
end
if pitch>-pitchMax and pitch<pitchMax then
local R = hypZ*math.cos(pitch)/hypXY
local dX = Xdiff*R
local dY = Ydiff*R
local dZ = hypZ*math.sin(pitch)
if orbitDir == "panUp" or orbitDir == "panDown" then
writeFloat(tarXAD, camX+dX)
writeFloat(tarYAD, camY+dY)
writeFloat(tarZAD, camZ+dZ)
exitFunction = true
else
writeFloat(camXAD, tarX-dX)
writeFloat(camYAD, tarY-dY)
writeFloat(camZAD, tarZ-dZ)
exitFunction = true
end
end
exitFunction = true
end
if not exitFunction then
if Xdiff < 0 then yaw = yaw + math.pi end
local dX = hypXY*math.cos(yaw)
local dY = hypXY*math.sin(yaw)
if orbitDir == "panLeft" or orbitDir == "panRight" then
writeFloat(tarXAD, camX+dX)
writeFloat(tarYAD, camY+dY)
elseif orbitDir == "left" or orbitDir == "right" then
writeFloat(camXAD, tarX-dX)
writeFloat(camYAD, tarY-dY)
else return
end
end
camX = readFloat(camXAD)
camY = readFloat(camYAD)
camZ = readFloat(camZAD)
tarX = readFloat(tarXAD)
tarY = readFloat(tarYAD)
tarZ = readFloat(tarZAD)
Xdiff = tarX-camX
Ydiff = tarY-camY
Zdiff = tarZ-camZ
hypXY = math.sqrt(Xdiff*Xdiff+Ydiff*Ydiff)
pitch = math.atan(Zdiff/hypXY)
yaw = math.atan(Ydiff/Xdiff)
if Xdiff < 0 then yaw = yaw + math.pi end
writeFloat(pitchAD,pitch)
writeFloat(yawAD,yaw)
updateRotation()
end
local function dolly(dollyDir)
if not requiredConditions() then return end
local exitFunction = false
local camX = readFloat(camXAD)
local camY = readFloat(camYAD)
local camZ = readFloat(camZAD)
local tarX = readFloat(tarXAD)
local tarY = readFloat(tarYAD)
local tarZ = readFloat(tarZAD)
local Xdiff = tarX-camX
local Ydiff = tarY-camY
local Zdiff = tarZ-camZ
local hypXY = math.sqrt(Xdiff*Xdiff+Ydiff*Ydiff)
local hypZ = math.sqrt(Zdiff*Zdiff+hypXY*hypXY)
if dollyDir == "zoomReset" then
local FOV = readFloat(FOVAD) -- stored in degrees
local FOVr = math.pi*FOV/180 -- convert to radians
local objWidth = hypZ*2*math.tan(FOVr/2)
local FOV2 = prvFOV
local FOVr2 = math.pi*FOV2/180
local hypZ2 = objWidth/(2*math.tan(FOVr2/2))-hypZ
local dX = hypZ2*Xdiff/hypZ
local dY = hypZ2*Ydiff/hypZ
local dZ = hypZ2*Zdiff/hypZ
writeFloat(FOVAD, FOV2)
writeFloat(camXAD, camX-dX)
writeFloat(camYAD, camY-dY)
writeFloat(camZAD, camZ-dZ)
exitFunction = true
elseif dollyDir == "closer" then
if hypZ>=0.1 then
local dX = flySpeed*Xdiff/hypZ
local dY = flySpeed*Ydiff/hypZ
local dZ = flySpeed*Zdiff/hypZ
writeFloat(camXAD, camX+dX)
writeFloat(camYAD, camY+dY)
writeFloat(camZAD, camZ+dZ)
end
exitFunction = true
elseif dollyDir == "farther" then
local dX = flySpeed*Xdiff/hypZ
local dY = flySpeed*Ydiff/hypZ
local dZ = flySpeed*Zdiff/hypZ
writeFloat(camXAD, camX-dX)
writeFloat(camYAD, camY-dY)
writeFloat(camZAD, camZ-dZ)
exitFunction = true
end
if not exitFunction then
local FOV = readFloat(FOVAD) -- stored in degrees
local FOVr = math.pi*FOV/180 -- convert to radians
local dollySpeed = flySpeed*(1-FOV/180)^2
local objWidth = hypZ*2*math.tan(FOVr/2)
if dollyDir == "zoomIn" then
FOVr = 2*math.atan(objWidth/(2*(hypZ+dollySpeed)))
FOV = 180*FOVr/math.pi -- convert back to degrees
if FOV >=1.2 then
local dX = dollySpeed*Xdiff/hypZ
local dY = dollySpeed*Ydiff/hypZ
local dZ = dollySpeed*Zdiff/hypZ
writeFloat(FOVAD, FOV)
writeFloat(camXAD, camX-dX)
writeFloat(camYAD, camY-dY)
writeFloat(camZAD, camZ-dZ)
end
elseif dollyDir == "zoomOut" then
FOVr = 2*math.atan(objWidth/(2*(hypZ-dollySpeed)))
FOV = 180*FOVr/math.pi -- convert back to degrees
if FOV <= 169 then
local dX = dollySpeed*Xdiff/hypZ
local dY = dollySpeed*Ydiff/hypZ
local dZ = dollySpeed*Zdiff/hypZ
writeFloat(FOVAD, FOV)
writeFloat(camXAD, camX+dX)
writeFloat(camYAD, camY+dY)
writeFloat(camZAD, camZ+dZ)
end
else return
end
end
camX = readFloat(camXAD)
camY = readFloat(camYAD)
camZ = readFloat(camZAD)
tarX = readFloat(tarXAD)
tarY = readFloat(tarYAD)
tarZ = readFloat(tarZAD)
Xdiff = tarX-camX
Ydiff = tarY-camY
Zdiff = tarZ-camZ
hypXY = math.sqrt(Xdiff*Xdiff+Ydiff*Ydiff)
pitch = math.atan(Zdiff/hypXY)
yaw = math.atan(Ydiff/Xdiff)
if Xdiff < 0 then yaw = yaw + math.pi end
writeFloat(pitchAD,pitch)
writeFloat(yawAD,yaw)
updateRotation()
end
local function zoomIn()
if not requiredConditions() then return end
local FOV = readFloat(FOVAD)
writeFloat(FOVAD, FOV+FOVSpeed)
end
local function zoomOut()
if not requiredConditions() then return end
local FOV = readFloat(FOVAD)
writeFloat(FOVAD, FOV-FOVSpeed)
end
local function zoomPrev()
if not requiredConditions() then return end
writeFloat(FOVAD, prvFOV)
end
local function rollLeft()
if not requiredConditions() then return end
local roll = readFloat(rollAD)
writeFloat(rollAD, roll+rollSpeed)
updateRotation()
end
local function rollRight()
if not requiredConditions() then return end
local roll = readFloat(rollAD)
writeFloat(rollAD, roll-rollSpeed)
updateRotation()
end
local function rollReset()
if not requiredConditions() then return end
writeFloat(rollAD, 0)
updateRotation()
end
local function moveForward() move("forward") end
local function moveBackward() move("backward") end
local function moveLeft() move("left") end
local function moveLeft3D() move("left3D") end
local function moveRight() move("right") end
local function moveRight3D() move("right3D") end
local function moveUp() move("up") end
local function moveDown() move("down") end
local function moveUpCamOnly() move("upCamOnly") end
local function moveDownCamOnly() move("downCamOnly") end
local function panUp() orbit("panUp") end
local function panDown() orbit("panDown") end
local function panLeft() orbit("panLeft") end
local function panRight() orbit("panRight") end
local function orbitUp() orbit("up") end
local function orbitDown() orbit("down") end
local function orbitLeft() orbit("left") end
local function orbitRight() orbit("right") end
local function dollyCloser() dolly("closer") end
local function dollyFarther() dolly("farther") end
local function dollyZoomIn() dolly("zoomIn") end
local function dollyZoomOut() dolly("zoomOut") end
local function dollyZoomReset() dolly("zoomReset") end
-- CAMERA HOTKEYS
camHotkeys = {
createHotkey(restoreMenu, VK_CONTROL, VK_NEXT),
createHotkey(toggleFreecam, VK_NEXT),
createHotkey(toggleUseZ, VK_NUMPAD2),
createHotkey(goHellaFast, VK_MENU, VK_T),
createHotkey(goFast, VK_MENU, VK_F),
createHotkey(goSlow, VK_MENU, VK_C),
createHotkey(moveLeft3D, VK_MENU, VK_NUMPAD4),
createHotkey(moveRight3D, VK_MENU, VK_NUMPAD6),
createHotkey(moveForward, VK_NUMPAD8), --start small delay: index 9
createHotkey(moveBackward, VK_NUMPAD5),
createHotkey(moveLeft, VK_NUMPAD4),
createHotkey(moveRight, VK_NUMPAD6),
createHotkey(moveUp, VK_NUMPAD9),
createHotkey(moveDown, VK_NUMPAD7),
createHotkey(moveUpCamOnly, VK_NUMPAD3),
createHotkey(moveDownCamOnly, VK_NUMPAD1),
createHotkey(panUp, VK_ADD, VK_NUMPAD8),
createHotkey(panDown, VK_ADD, VK_NUMPAD5),
createHotkey(panLeft, VK_ADD, VK_NUMPAD4),
createHotkey(panRight, VK_ADD, VK_NUMPAD6),
createHotkey(rollLeft, VK_ADD, VK_NUMPAD3),
createHotkey(rollRight, VK_ADD, VK_NUMPAD1),
createHotkey(rollReset, VK_ADD, VK_NUMPAD2),
createHotkey(zoomIn, VK_ADD, VK_NUMPAD7),
createHotkey(zoomOut, VK_ADD, VK_NUMPAD9),
createHotkey(orbitUp, VK_RETURN, VK_NUMPAD5),
createHotkey(orbitDown, VK_RETURN, VK_NUMPAD8),
createHotkey(orbitLeft, VK_RETURN, VK_NUMPAD6),
createHotkey(orbitRight, VK_RETURN, VK_NUMPAD4),
createHotkey(dollyCloser, VK_RETURN, VK_NUMPAD9),
createHotkey(dollyFarther, VK_RETURN, VK_NUMPAD7),
createHotkey(dollyZoomIn, VK_RETURN, VK_NUMPAD3),
createHotkey(dollyZoomOut, VK_RETURN, VK_NUMPAD1),
createHotkey(dollyZoomReset, VK_RETURN, VK_NUMPAD2)
}
local smDelay = 9
for i=1,smDelay-1,1 do camHotkeys[i].DelayBetweenActivate = 1000 end
for i=smDelay,#camHotkeys,1 do camHotkeys[i].DelayBetweenActivate = 10 end
sender.destroy()
end
{$asm}
[DISABLE]
rotAOB:
db 0F 11 05 4B 7B 3E 00
unregistersymbol(rotAOB)
dealloc(newmem)
writeXYAOB:
db F2 0F 11 05 AA 5A 3E 00 8B 48 08 F2 0F 11 05 9B 2B 3E 00 89 0D A1 5A 3E 00
unregistersymbol(writeXYAOB)
dealloc(newmem2)
writeXY2AOB:
db F2 0F 11 05 D6 60 3E 00 8B 48 08 89 0D D5 60 3E 00
unregistersymbol(writeXY2AOB)
dealloc(newmem3)
playerAOB:
db F2 0F 10 40 24
unregistersymbol(playerAOB)
dealloc(newmem4)
{$lua}
--[[
if camCheat ~= nil then
for i=0,9,1 do
if i ~= 0 then camCheat[i].setHotkey.destroy() end
camCheat[i].getHotkey.destroy()
end
camCheat = nil
end
--]]
if checkCamKeys ~= nil then
checkCamKeys.destroy()
checkCamKeys = nil
end
if camHotkeys ~= nil then
for i,v in ipairs(camHotkeys) do v.destroy() end
camHotkeys = nil
end
Activate
34
0
13238
">> HOTKEYS"
0080FF
1
13295
"*** MOVEMENT ***"
0080FF
1
13249
"SPEED: Slow, fast, faster - C, F, T (+ALT to toggle)"
000000
1
13240
"FREECAM: On/off - Pagedown"
000000
1
13296
"FLY - No modifier"
0080FF
1
13290
"(Below, NUMPAD keys...)"
000000
1
13298
"MOVE: Forward, backward, left, right - 8, 5, 4, 6"
000000
1
13297
"FLY: Up, down - 9, 7 (cam only - 3, 1)"
000000
1
13303
"Height lock: On/off - 2"
000000
1
13499
"3D Capture: Step left, right - ALT+4, ALT+6"
000000
1
13292
"AIM - Hold down PLUS"
0080FF
1
13339
"(Below, NUMPAD keys...)"
000000
1
13244
"PAN: Up, down, left, right - 8, 5, 4, 6"
000000
1
13246
"ZOOM: In, out - 9, 7"
000000
1
13242
"TILT: Left, right - 1, 3 (reset: 2)"
000000
1
13558
"ROTATE - Hold down ENTER"
0080FF
1
13559
"(Below, NUMPAD keys...)"
000000
1
13560
"ROTATE: Up, down, left, right - 5, 8, 6, 4"
000000
1
13561
"MOVE: Forward, backward - 9, 7 (cam only)"
000000
1
13562
"DOLLY-ZOOM: In, out - 3, 1 (reset: 2)"
000000
1
13294
"*** SETTINGS ***"
0080FF
1
13341
"(Below, standard number keys...)"
000000
1
13250
"SAVE: Save current settings - ALT+[number 1 to 9]"
000000
1
13252
"LOAD: Load saved settings - [number 1 to 9]"
000000
1
13251
"UNDO: Load previous settings - 0 (zero)"
000000
1
2159
"Freecam on/off"
1:ON
0:-
4 Bytes
_freecamON
388
"FOV"
000000
Float
witness64_d3d11.exe+61D8BC
411
"Camera X"
000000
Float
witness64_d3d11.exe+62D490
414
"Camera Y"
000000
Float
witness64_d3d11.exe+62D494
413
"Camera Z"
000000
Float
witness64_d3d11.exe+62D498
13536
">> GAME SPEED [F5]"
FF0000
Auto Assembler Script
[ENABLE]
alloc(_timescale,4)
registersymbol(_timescale)
_timescale:
dd (float)1
//"witness64_d3d11.exe"+191DBE
aobscanmodule(timescaleAOB,witness64_d3d11.exe,73 24 F2 0F 10 15 10 C4 48 00)
alloc(newmem,$1000,timescaleAOB)
label(code)
label(return)
newmem:
code:
push rax
mov rax,[_timescale]
mov [rcx+1C8],rax
pop rax
movss xmm0,[_timescale]
jne witness64_d3d11.exe+191DE4
movsd xmm2,[witness64_d3d11.exe+61E1D8]
jmp return
timescaleAOB:
jmp newmem
nop
nop
nop
nop
nop
return:
registersymbol(timescaleAOB)
{$lua}
if syntaxcheck then return end
local symbolCheckT = createTimer()
symbolCheckT.Interval = 1000
symbolCheckT.OnTimer = function(sender)
if readInteger("witness64_d3d11.exe") == nil then
sender.destroy()
return
end
local slomoAD = getAddress("_timescale")
-- VARIABLES
local slow0 = 0.0
local slow1 = 0.01
local slow2 = 0.1
local slow3 = 0.5
local normal = 1
local fast1 = 5
local fast2 = 20
-- FUNCTIONS
local function requiredConditions()
if getOpenedProcessID() == getForegroundProcess() then return true end
return false
end
local function goSlow0()
if not requiredConditions() then return end
writeFloat(slomoAD, slow0)
end
local function goSlow1()
if not requiredConditions() then return end
writeFloat(slomoAD, slow1)
end
local function goSlow2()
if not requiredConditions() then return end
writeFloat(slomoAD, slow2)
end
local function goSlow3()
if not requiredConditions() then return end
writeFloat(slomoAD, slow3)
end
local function goNormal()
if not requiredConditions() then return end
writeFloat(slomoAD, normal)
end
local function goFast1()
if not requiredConditions() then return end
writeFloat(slomoAD, fast1)
end
local function goFast2()
if not requiredConditions() then return end
writeFloat(slomoAD, fast2)
end
-- CREATE HOTKEYS
slomoHotkeys = {
createHotkey(goSlow0, VK_F5),
createHotkey(goSlow1, VK_F6),
createHotkey(goSlow2, VK_F7),
createHotkey(goSlow3, VK_F8),
createHotkey(goNormal, VK_F9),
createHotkey(goFast1, VK_F10),
createHotkey(goFast2, VK_F11)
}
for i,v in ipairs(slomoHotkeys) do
v.DelayBetweenActivate = 1000
end
sender.destroy()
end
{$asm}
[DISABLE]
timescaleAOB:
db 73 24 F2 0F 10 15 10 C4 48 00
unregistersymbol(timescaleAOB)
dealloc(newmem)
{$lua}
if slomoHotkeys ~= nil then
for i,v in ipairs(slomoHotkeys) do v.destroy() end
slomoHotkeys = nil
end
Activate
116
0
13537
"Speed [F5-F11, def: F9]"
Float
_timescale
398
"Vignette on/off"
1:ON
0:-
008000
4 Bytes
witness64_d3d11.exe+61D8A0
2054
"Sun brightness (1.0)"
008000
Float
witness64_d3d11.exe+61B8F0