580
"-- XYZ --"
800000
1
1420
"True X"
008000
Float
142106A68
50
30
128
D0
1422
"True Y"
008000
Float
142106A68
54
30
128
D0
1421
"True Z"
008000
Float
142106A68
58
30
128
D0
429
"-- X --"
0000FF
1
1356
"X Previous Jump"
Float
"MirrorsEdgeCatalyst.exe"+023DA028
0
20
40
20
20
577
"X Checkpoint"
Float
142548128
170
158
38
28
70
835
"X Waypoint"
Float
1425789B0
2270
128
70
428
"-- Y --"
0000FF
1
1200
"Y Previous Jump"
Float
"MirrorsEdgeCatalyst.exe"+023DA028
4
20
40
20
20
579
"Y Checkpoint"
Float
142548128
174
158
38
28
70
836
"Y Waypoint"
Float
1425789B0
2274
128
70
430
"-- Z --"
0000FF
1
1357
"Z Previous Jump"
Float
"MirrorsEdgeCatalyst.exe"+023DA028
8
20
40
20
20
578
"Z Checkpoint"
Float
142548128
178
158
38
28
70
827
"Z Waypoint"
Float
1425789B0
2278
128
70
1232
"-- ASSETS --"
800000
1
1210
"Walking"
1
008000
8 Bytes
141AA9900
1212
"Walk Setting"
1
0000FF
8 Bytes
141A3F5E0
1311
"AboveMaximumSpeedDecelerationFactor (10)"
Float
1423BD908
1C4C
380
408
1309
"BackwardFriction (6)"
Float
1423BD908
1C44
380
408
1312
"DirectionalChangeFactor (7)"
Float
1423BD908
1C50
380
408
1310
"StrafeFriction (5)"
Float
1423BD908
1C48
380
408
1313
"TurnDecelerationFactor (20)"
Float
1423BD908
1C54
380
408
1315
"ForwardFriction (4)"
Float
1423BD908
1C40
380
408
790
"MaximumSpeed (7.2)"
Float
1423BD908
1C5C
380
408
1818
"-- CLASSES --"
800000
1
1416
"GameTimeSettings"
008000
1
825
"TimeScale"
Float
142142A68
48
Set Value
1
0
Set Value
0.1
1
Set Value
0.025
2
826
"Timescale"
Float
142142A68
48
542
"-- MISCELLANEOUS --"
800000
1
1439
"yaw2"
Float
142106A68
4c
30
128
d0
1438
"yaw1"
Float
142106A68
44
30
128
d0
RayleighCoefficientX
MirrorsEdgeCatalyst.exe+471D67C
2B
0F
28
59
30
0F
28
4A
30
F3
0F
11
6D
18
Sky Entry
MirrorsEdgeCatalyst.exe+3704AB9
86
40
1B
00
00
48
83
7E
58
00
0F
84
BB
00
00
missionindex
MirrorsEdgeCatalyst.exe+39DA8DD
3B
04
D3
74
10
8B
40
18
48
83
C4
18
C3
Code :mov rcx,CT_MirrorsEdge.dll+2A490
MirrorsEdgeCatalyst.exe+35C72EE
00
00
48
8B
03
48
B9
90
A4
61
7E
F9
7F
00
00
FF
E1
90
89
45
RayleighCoefficientX
MirrorsEdgeCatalyst.exe+471D67C
2B
0F
28
59
30
0F
28
4A
30
F3
0F
11
6D
18
Sky Entry
MirrorsEdgeCatalyst.exe+3704AB9
86
40
1B
00
00
48
83
7E
58
00
0F
84
BB
00
00
missionindex
MirrorsEdgeCatalyst.exe+39DA8DD
3B
04
D3
74
10
8B
40
18
48
83
C4
18
C3
Code :mov rcx,CT_MirrorsEdge.dll+2A490
MirrorsEdgeCatalyst.exe+35C72EE
00
00
48
8B
03
48
B9
90
A4
61
7E
F9
7F
00
00
FF
E1
90
89
45
rayleighX
14471D67C
_fogEntry
00650010
INJECT
143704AB9
_skyEntry
00190000
_mission
2B010000
mission
1439DA8DD
addressList = getAddressList()
teleportationNexus = {}
loadStored = 0
noclip = 0
currentPosFix = {}
path = os.getenv("APPDATA") .. '\\MEC_TPMK\\TPMK_config.txt'
frictionFactor = {}
gradualSpeed = 0
autoTurnOff=createTimer()
autoTurnOff.Interval=30000
autoTurnOff.OnTimer=function(autoTurnOff)
CloseCE()
end
local checkForAttach=createTimer()
checkForAttach.Interval=1000
checkForAttach.OnTimer=function(checkForAttach)
if getOpenedProcessID() == 0 then
openProcess("MirrorsEdgeCatalyst.exe")
else
checkForAttach.Enabled = False
autoTurnOff.Enabled = False
print("TPMK hooked onto MEC!")
mecID=getOpenedProcessID()
local checkForClosed=createTimer()
checkForClosed.Interval=3000
checkForClosed.OnTimer=function(checkForClosed)
if readInteger("kernel32.dll") == nil and getOpenedProcessID() ~= 0 then
CloseCE()
end
end
end
end
function getFrictionCoefficients()
for n=19, 25 do
frictionFactor[n-18] = addressList[n].Value
end
timescale = addressList[28].Value
end
function tpMode()
loadStored = 1
beep()
if teleportationNexus[1] == nil then
saveCurrentLocation()
end
end
function chkMode()
loadStored=0
beep()
end
autoNoclipDelay=createTimer()
autoNoclipDelay.Interval=30000
autoTurnOff.OnTimer=function(autoTurnOff)
CloseCE()
end
function noclipMode()
if noclip == 0 then
noclip = 1
for n=0, 2 do
currentPosFix[n+1] = addressList[n+1].Value
end
else
noclip = 0
gradualSpeed = 0
for n=0, 2 do
addressList[n+1].Active=false
end
end
beep()
end
--The following code block has to be optimised... although i have no idea how lolz
function loadLocation()
if mecID == getForegroundProcess() then
getFrictionCoefficients()
if loadStored == 0 then
writeFloat(addressList[9].CurrentAddress, addressList[10].Value-3)
keyUp(0x57)
for n=19, 24 do
writeFloat(addressList[n].CurrentAddress, 2000)
end
writeFloat(addressList[28].CurrentAddress, 0)
writeFloat(addressList[25].CurrentAddress, 0)
for n=0, 2 do
writeFloat(addressList[n+1].CurrentAddress, addressList[4*n+6].Value)
end
sleep(100/3)
writeFloat(addressList[28].CurrentAddress, timescale)
sleep(100/3)
for n=19, 25 do
writeFloat(addressList[n].CurrentAddress, frictionFactor[n-18])
end
if tonumber(addressList[1].Value) > 10000 then print("CRITICAL MASS! GOING INTO ORBIT!!!") end
end
if loadStored == 1 then
writeFloat(addressList[9].CurrentAddress, teleportationNexus[2]-3)
for n=19, 24 do
writeFloat(addressList[n].CurrentAddress, 2000)
end
writeFloat(addressList[28].CurrentAddress, 0)
writeFloat(addressList[25].CurrentAddress, 0)
for n=0, 2 do
writeFloat(addressList[n+1].CurrentAddress, teleportationNexus[n+1])
end
sleep(100/3)
writeFloat(addressList[28].CurrentAddress, timescale)
sleep(100/3)
for n=19, 25 do
writeFloat(addressList[n].CurrentAddress, frictionFactor[n-18])
end
end
end
end
function saveCurrentLocation()
if mecID == getForegroundProcess() then
for n=0, 2 do
teleportationNexus[n+1] = addressList[n+1].Value
end
end
end
noclipStableHeight=createTimer()
noclipStableHeight.Interval=(25/3)
noclipStableHeight.OnTimer=function(heightFix)
if noclip == 1 then
writeFloat(addressList[9].CurrentAddress, -1000)
for n=0, 2 do
addressList[n+1].Value = currentPosFix[n+1]
end
if isKeyPressed(0x57) == true then
noclipGradualSpeed()
if tonumber(addressList[32].Value) < 0 then
currentPosFix[3] = currentPosFix[3] - math.sin( 2 * math.asin( addressList[31].Value * -1 )) * speed
currentPosFix[1] = currentPosFix[1] - math.cos( 2 * math.acos( addressList[32].Value * -1 )) * speed
else
currentPosFix[3] = currentPosFix[3] - math.sin( 2 * math.asin( addressList[31].Value )) * speed
currentPosFix[1] = currentPosFix[1] - math.cos( 2 * math.acos( addressList[32].Value )) * speed
end
end
if isKeyPressed(0x53) == true then
noclipGradualSpeed()
if tonumber(addressList[32].Value) < 0 then
currentPosFix[3] = currentPosFix[3] + math.sin( 2 * math.asin( addressList[31].Value * -1 )) * speed
currentPosFix[1] = currentPosFix[1] + math.cos( 2 * math.acos( addressList[32].Value * -1 )) * speed
else
currentPosFix[3] = currentPosFix[3] + math.sin( 2 * math.asin( addressList[31].Value )) * speed
currentPosFix[1] = currentPosFix[1] + math.cos( 2 * math.acos( addressList[32].Value )) * speed
end
end
if isKeyPressed(0x44) == true then
noclipGradualSpeed()
if tonumber(addressList[32].Value) < 0 then
currentPosFix[1] = currentPosFix[1] + math.sin( 2 * math.asin( addressList[31].Value * -1 )) * speed
currentPosFix[3] = currentPosFix[3] - math.cos( 2 * math.acos( addressList[32].Value * -1 )) * speed
else
currentPosFix[1] = currentPosFix[1] + math.sin( 2 * math.asin( addressList[31].Value )) * speed
currentPosFix[3] = currentPosFix[3] - math.cos( 2 * math.acos( addressList[32].Value )) * speed
end
end
if isKeyPressed(0x41) == true then
noclipGradualSpeed()
if tonumber(addressList[32].Value) < 0 then
currentPosFix[1] = currentPosFix[1] - math.sin( 2 * math.asin( addressList[31].Value * -1 )) * speed
currentPosFix[3] = currentPosFix[3] + math.cos( 2 * math.acos( addressList[32].Value * -1 )) * speed
else
currentPosFix[1] = currentPosFix[1] - math.sin( 2 * math.asin( addressList[31].Value )) * speed
currentPosFix[3] = currentPosFix[3] + math.cos( 2 * math.acos( addressList[32].Value )) * speed
end
end
if isKeyPressed(0x20) == true then
noclipGradualSpeed()
currentPosFix[2] = currentPosFix[2] + speed
end
if isKeyPressed(0xA0) == true then
noclipGradualSpeed()
currentPosFix[2] = currentPosFix[2] - speed
end
end
if gradualSpeed > 0 then
if isKeyPressed(0x57) == false then
if isKeyPressed(0x53) == false then
if isKeyPressed(0x44) == false then
if isKeyPressed(0x41) == false then
if isKeyPressed(0x20) == false then
if isKeyPressed(0xA0) == false then
gradualSpeed = gradualSpeed - 1/30
end
end
end
end
end
end
end
end
function noclipGradualSpeed()
gradualSpeed = gradualSpeed + 1/120
speed = ( 2^ ( gradualSpeed - (( 2 * ( gradualSpeed - 6 )) / 5 ) - 2 * ( math.abs( gradualSpeed - 6 )) / 5 ) + 1 ) / 25
end
local file = io.open(path, "r")
if file ~= nil then
file:seek("set", 449)
tpkey=file:read("*l")
savekey=file:read("*l")
chkMD=file:read("*l")
tpMD=file:read("*l")
noclipMD=file:read("*l")
else
tpkey=0x5A
savekey=0x58
chkMD=0x70
tpMD=0x71
noclipMD=0x74
print("If you want to configure your hotkeys, create a folder structure at\n\"%APPDATA%\\MEC_TPMK\\TPMK_config.txt\" \nThe file you can download from:\nhttps://docs.google.com/document/d/1cG1J64asQNp9VBBYboIN4Xk2KEL5vnCUOPp4lLfpuyI/view?usp=sharing\nUsing default hotkeys: Z(teleport), X(save location), F1(checkpoint mode), F2(location mode), F5(noclip toggle)\n")
end
print("TPMK has started! Will hook to the game the next time MEC is running\n(Upon exiting the game, TPMK will close!)\nPress F12 to quit(text box will disappear)")
function trainerQuit()
closeCE()
end
tp=createHotkey("loadLocation", tpkey)
tp.DelayBetweenActivate = (100/3)
save=createHotkey("saveCurrentLocation", savekey)
modeCheckpoint=createHotkey("chkMode", chkMD)
modeTeleport=createHotkey("tpMode", tpMD)
modeNoclip=createHotkey("noclipMode", noclipMD)
modeNoclip.DelayBetweenActivate=500
quit=createHotkey("trainerQuit", 0x7B)