 |
Cheat Engine The Official Site of Cheat Engine
|
| View previous topic :: View next topic |
| Author |
Message |
MidiGuyDP How do I cheat?
Reputation: 0
Joined: 05 Aug 2019 Posts: 4
|
Posted: Mon Aug 05, 2019 6:10 pm Post subject: Using Cheat Engine to view Top 5 positions (It's Possible!!) |
|
|
Hi there! Name's MidiGuyDP. How's it going?
I've come here with a... probably rather unique question. Before I get to it, I wanna go over what I'd like to do.
So I've got the game called Re-Volt on the PC, and I enjoy doing scenario races by grabbing custom cars made by the community, and having them represent other characters/people, in this case, Super Mario Bros characters
So this is all good. However, I want to take it a step further, and add a top 4 style interface to the left that keeps track of the position of the top 4 racers, think of the interface in Mario Kart 64. (See attached picture for example)
So that's the gist.
I've recently installed cheat engine, thinking I could use it's lua related features to perhaps Draw this information to the game screen (I've done it on SMBX), but I don't think that's do able.
What I have managed to do, is find the information that tells me this:
-The name of the racer
-The position of the racer
Here's some code that I've put together figured out so far (Basic compared to most stuff I've seen)
| Code: | P1Name = readString(0x00B53458)
P1Pos = readInteger(0x00B533A8)
P2Name = readString(0x00B58700)
P2Pos = readInteger(0x00B58650)
P3Name = readString(0x00B5D9A8)
P3Pos = readInteger(0x00B5D8F8)
P4Name = readString(0x00B62C50)
P4Pos = readInteger(0x00B62BA0)
if P1Pos == 0 then
print("1st: " .. P1Name)
end
if P2Pos == 0 then
print("1st: " .. P2Name)
end
if P3Pos == 0 then
print("1st: " .. P3Name)
end
if P4Pos == 0 then
print("1st: " .. P4Name)
end |
So figured I could use this information with lua to run "If" commands to check "If" this character is in "1st" than "Draw this Image", or in this example's case, print text
Though currently, I'm quite unsure of how to go forward, or if it's actually possible to simply use this information to simply create a way to keep track of a top 4 positions info that constantly changes.
I thought, perhaps I could use the form feature in CE to somehow make the code print or draw the wanted data to it, then perhaps grab them with OBS and record the video.
So... my question is, would this be possible using CE? If anyone could help, that would be great!
| Description: |
|
| Filesize: |
653.25 KB |
| Viewed: |
5707 Time(s) |

|
Last edited by MidiGuyDP on Wed Aug 07, 2019 6:11 pm; edited 1 time in total |
|
| Back to top |
|
 |
Csimbi I post too much
Reputation: 97
Joined: 14 Jul 2007 Posts: 3327
|
Posted: Tue Aug 06, 2019 7:05 am Post subject: |
|
|
CE can surely find the values you'd need and with LUA you can sort out the top 4 and feed the final data 'somewhere'.
My hunch is, you will need to tap into DirectX (or similar) to actually draw onto the canvas and put the data fed by the LUA script.
Never done it, just a hunch.
So, my logic would be: Use CE to find values, fetch, sort and format with LUA, and feed to your own engine that draws to the canvas.
Good luck!
You might want to make a tutorial out of it, I'm sure plenty of people would be interested.
PS.
I loved Re-Volt, too back in the days
|
|
| Back to top |
|
 |
MidiGuyDP How do I cheat?
Reputation: 0
Joined: 05 Aug 2019 Posts: 4
|
Posted: Wed Aug 07, 2019 2:56 am Post subject: |
|
|
Welp, thanks to the thread called:
"Basic Animation Uisng CE GUI and Lua Script" by Corroder
I was able to pretty much achieve what I wanted to do.
Here's some videos of it in action (On a youtube channel called MidiGuyDPGamer):
(1st demonstration, TOP 5 Positions on a separate window on the side)
/watch?v=COwMb8PNZKU
Name: [Re-Volt] 16-Car Mario Themed Race (TOP 5 Positions on Side)
(2nd demo, TOP 5 integrated into game screen OBS recording)
/watch?v=WU8xxY3yVs8
Name: [Re-Volt] 16-Car Mario Themed Race (TOP 5 Positions on game)
(Load youtube(dot)com and add those links to it, or search for those specific video titles. Can't post Urls atm so this is the best way I can share, I attached a preview screen though)
So yeah, the Basic Animation thread had what I needed, it provided me with info on how to create the canvas I needed to put the position images. Then with that I just needed to find a way to use the "IF" command with the Name & Position data to tell it when to display what, and made a nice looking interface in the process. ^^
The second video has OBS using window display 5 times with the appropriate cropping to display the TOP 5 positions on an overlay that I custom made for that scene on OBS to record the gameplay. They're not on the game screen it'self, but it's as close as I've gotten to doing so.
Check out the vids and let me know what you guys think. I think it turned out pretty good!
Though if anyone knows of a way to draw the data right on to the game screen itself, let me know!
| Description: |
|
| Filesize: |
605.69 KB |
| Viewed: |
5647 Time(s) |

|
|
|
| Back to top |
|
 |
mindoff Advanced Cheater
Reputation: 0
Joined: 12 Jun 2016 Posts: 96
|
Posted: Wed Aug 07, 2019 4:55 am Post subject: |
|
|
Looking nice,how did you draw the custom image to screen with Lua?
Could you share some keyword or maybe code to show how you did it?
Want to draw a custom hud myself,got no idea.
|
|
| Back to top |
|
 |
MidiGuyDP How do I cheat?
Reputation: 0
Joined: 05 Aug 2019 Posts: 4
|
Posted: Wed Aug 07, 2019 7:00 pm Post subject: |
|
|
I actually didn't draw it directly to the screen.
I used the CE Animation made by Corroder as a template to allow me to use the data to create another window that contained the changing positions.
I then used OBS to screengrab the gameplay, and the new generated window with the changing top 5 positions. Allowing me to overlay it onto the gameplay (On the OBS screen)
This is the Code I put together using the Animation as a Template:
| Code: | f = createForm()
f.setSize(230,930)
f.Position = 'poScreenCenter'
f.Caption = 'CRDR - Basic Animation Concept'
pnl = createPanel(f)
pnl.setSize(230,880)
pnl.setPosition(0,0)
bgrImg = createImage(pnl)
bgrImg.setSize(230,880)
bgrImg.setPosition(0,0)
bgrImg.Align = 'alClient'
bgrImg.Picture.loadFromStream(findTableFile('MainBGRender.png').Stream)
bgrImg.Stretch = true
p1 = createImage(pnl)
p1.setSize(150,150)
p1.stretch = true
p1.setPosition(60,25)
p2 = createImage(pnl)
p2.setSize(150,150)
p2.stretch = true
p2.setPosition(60,195)
p3 = createImage(pnl)
p3.setSize(150,150)
p3.stretch = true
p3.setPosition(60,365)
p4 = createImage(pnl)
p4.setSize(150,150)
p4.stretch = true
p4.setPosition(60,535)
p5 = createImage(pnl)
p5.setSize(150,150)
p5.stretch = true
p5.setPosition(60,705)
sonic = createImage(pnl)
sonic.setSize(200,200)
sonic.stretch = true
sonic.setPosition(-100,-13)
rat = createImage(pnl)
rat.setSize(100,100)
rat.stretch = true
rat.setPosition(5,50)
btn = createToggleBox(f)
btn.setSize(100,50)
btn.setPosition(10,880)
btn.caption = 'Start'
label1 = createLabel(f)
label1.Left = 627
label1.Top = 890
label1.Caption = '< Increase Speed'
label2 = createLabel(f)
label2.Left = 700
label2.Top = 890
label2.Caption = 'Decrease Speed >'
trb = createTrackBar(f)
trb.setSize(370,50)
trb.Top = 880
trb.Left = 520
trb.Max = 500
trb.Min = 0
trb.Position = 500
trb.SelStart = 0
trb.ScalePos = 'trTop'
---------------------------------------------------------SONIC
function hack1()
sndfile=findTableFile('CHICK.XM')
if (checkbox_getState(btn) == 1) then
if xmplayer_isPlaying() == true then
xmplayer_resume()
else
xmplayer_playXM(sndfile)
end
t.enabled = true
t2.enabled = true
btn.caption = 'Stop'
else
xmplayer_pause()
t.enabled = false
t2.enabled = false
btn.caption = 'Start'
end
end
function t_tick()
Mode = "POS"
P1Name = readString(0x00B53458)
P1NamePng = (P1Name .. Mode .. ".png")
P1Pos = readInteger(0x00B533A8)
P2Name = readString(0x00B58700)
P2NamePng = (P2Name .. Mode .. ".png")
P2Pos = readInteger(0x00B58650)
P3Name = readString(0x00B5D9A8)
P3NamePng = (P3Name .. Mode .. ".png")
P3Pos = readInteger(0x00B5D8F8)
P4Name = readString(0x00B62C50)
P4NamePng = (P4Name .. Mode .. ".png")
P4Pos = readInteger(0x00B62BA0)
P5Name = readString(0x00B67EF8)
P5NamePng = (P5Name .. Mode .. ".png")
P5Pos = readInteger(0x00B67E48)
P6Name = readString(0x00B6D1A0)
P6NamePng = (P6Name .. Mode .. ".png")
P6Pos = readInteger(0x00B6D0F0)
P7Name = readString(0x00B72448)
P7NamePng = (P7Name .. Mode .. ".png")
P7Pos = readInteger(0x00B72398)
P8Name = readString(0x00B776F0)
P8NamePng = (P8Name .. Mode .. ".png")
P8Pos = readInteger(0x00B77640)
P9Name = readString(0x00B7C998)
P9NamePng = (P9Name .. Mode .. ".png")
P9Pos = readInteger(0x00B7C8E8)
P10Name = readString(0x00B81C40)
P10NamePng = (P10Name .. Mode .. ".png")
P10Pos = readInteger(0x00B81B90)
P11Name = readString(0x00B86EE8)
P11NamePng = (P11Name .. Mode .. ".png")
P11Pos = readInteger(0x00B86E38)
P12Name = readString(0x00B8C190)
P12NamePng = (P12Name .. Mode .. ".png")
P12Pos = readInteger(0x00B8C0E0)
P13Name = readString(0x00B91438)
P13NamePng = (P13Name .. Mode .. ".png")
P13Pos = readInteger(0x00B91388)
P14Name = readString(0x00B966E0)
P14NamePng = (P14Name .. Mode .. ".png")
P14Pos = readInteger(0x00B96630)
P15Name = readString(0x00B9B988)
P15NamePng = (P15Name .. Mode .. ".png")
P15Pos = readInteger(0x00B9B8D8)
P16Name = readString(0x00BA0C30)
P16NamePng = (P16Name .. Mode .. ".png")
P16Pos = readInteger(0x00BA0B80)
if P1Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P1NamePng).Stream)
end
if P2Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P2NamePng).Stream)
end
if P3Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P3NamePng).Stream)
end
if P4Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P4NamePng).Stream)
end
if P5Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P5NamePng).Stream)
end
if P6Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P6NamePng).Stream)
end
if P7Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P7NamePng).Stream)
end
if P8Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P8NamePng).Stream)
end
if P9Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P9NamePng).Stream)
end
if P10Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P10NamePng).Stream)
end
if P11Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P11NamePng).Stream)
end
if P12Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P12NamePng).Stream)
end
if P13Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P13NamePng).Stream)
end
if P14Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P14NamePng).Stream)
end
if P15Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P15NamePng).Stream)
end
if P16Pos == 0 then
p1.Picture.loadFromStream(findTableFile(P16NamePng).Stream)
end
if P1Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P1NamePng).Stream)
end
if P2Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P2NamePng).Stream)
end
if P3Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P3NamePng).Stream)
end
if P4Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P4NamePng).Stream)
end
if P5Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P5NamePng).Stream)
end
if P6Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P6NamePng).Stream)
end
if P7Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P7NamePng).Stream)
end
if P8Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P8NamePng).Stream)
end
if P9Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P9NamePng).Stream)
end
if P10Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P10NamePng).Stream)
end
if P11Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P11NamePng).Stream)
end
if P12Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P12NamePng).Stream)
end
if P13Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P13NamePng).Stream)
end
if P14Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P14NamePng).Stream)
end
if P15Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P15NamePng).Stream)
end
if P16Pos == 1 then
p2.Picture.loadFromStream(findTableFile(P16NamePng).Stream)
end
if P1Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P1NamePng).Stream)
end
if P2Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P2NamePng).Stream)
end
if P3Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P3NamePng).Stream)
end
if P4Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P4NamePng).Stream)
end
if P5Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P5NamePng).Stream)
end
if P6Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P6NamePng).Stream)
end
if P7Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P7NamePng).Stream)
end
if P8Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P8NamePng).Stream)
end
if P9Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P9NamePng).Stream)
end
if P10Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P10NamePng).Stream)
end
if P11Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P11NamePng).Stream)
end
if P12Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P12NamePng).Stream)
end
if P13Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P13NamePng).Stream)
end
if P14Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P14NamePng).Stream)
end
if P15Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P15NamePng).Stream)
end
if P16Pos == 2 then
p3.Picture.loadFromStream(findTableFile(P16NamePng).Stream)
end
if P1Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P1NamePng).Stream)
end
if P2Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P2NamePng).Stream)
end
if P3Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P3NamePng).Stream)
end
if P4Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P4NamePng).Stream)
end
if P5Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P5NamePng).Stream)
end
if P6Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P6NamePng).Stream)
end
if P7Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P7NamePng).Stream)
end
if P8Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P8NamePng).Stream)
end
if P9Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P9NamePng).Stream)
end
if P10Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P10NamePng).Stream)
end
if P11Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P11NamePng).Stream)
end
if P12Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P12NamePng).Stream)
end
if P13Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P13NamePng).Stream)
end
if P14Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P14NamePng).Stream)
end
if P15Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P15NamePng).Stream)
end
if P16Pos == 3 then
p4.Picture.loadFromStream(findTableFile(P16NamePng).Stream)
end
if P1Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P1NamePng).Stream)
end
if P2Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P2NamePng).Stream)
end
if P3Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P3NamePng).Stream)
end
if P4Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P4NamePng).Stream)
end
if P5Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P5NamePng).Stream)
end
if P6Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P6NamePng).Stream)
end
if P7Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P7NamePng).Stream)
end
if P8Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P8NamePng).Stream)
end
if P9Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P9NamePng).Stream)
end
if P10Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P10NamePng).Stream)
end
if P11Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P11NamePng).Stream)
end
if P12Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P12NamePng).Stream)
end
if P13Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P13NamePng).Stream)
end
if P14Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P14NamePng).Stream)
end
if P15Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P15NamePng).Stream)
end
if P16Pos == 4 then
p5.Picture.loadFromStream(findTableFile(P16NamePng).Stream)
end
end
t = createTimer()
t.interval = 200
t.enabled = false
t.onTimer = t_tick
-------------------------------------------------------------RAT
t2 = createTimer()
t2.interval = 100
t2.enabled = false
t2.onTimer = t_tick2
--============================================---
function trbChange(sender)
r = trb.position
t.interval = r
t2.interval = r
end
function exit()
xmplayer_stop()
closeCE()
return caFree
end
f.show()
btn.onChange = hack1
trb.onChange = trbChange
f.onClose = exit |
This creates a window along with a nice overlay graphic I put together (MainBGRender.png, have a look in the attachments for it) along with a button labeled "Start" to click on whenever you're ready to start running the positions tracker.
I've uploaded a CT file to wetransfer (Since I can't attach it since it's too big), so go to the site called wetransfer(got)com, then add this to it:
/downloads/2b42473402deffc28a108b686900cb0920190808004531/7a113b
It contains a bunch of premade avatars & the code, and the MainRenderBG (Seen in attachments), to enable you to make it work
So this design works for Re-Volt, Specificly RVGL Build 17.0327a. (Not sure if it would work for any other versions, since I don't know if adresses were moved around in updates)
So how it works is this, the avatar GFX (150 x 150) filename, are directly linked to the car's names+POS.png, in other words like this example:
Car Name: Mario
Avatar Filename: MarioPOS.png
So you have to make sure that the GFX that you import into your CE Table has to have that exact naming, or you will get errors.
Also, another thing, As far as I can see, I cannot seem to put spaces in the filenames, so the car's names also cannot have any spaces.
So alright, I shall sum this all up in steps to make it easier to follow:
1.Download the CT File
2.Open Cheat Engine and load the CT file
3.Run Re-Volt (While making sure you have cars installed that have the same names as the .png files in the CT
4.Link the Re-Volt process to CE
5.Ready up a race
6.Load up the lua script Cheat Table and Execute script
7.A new window with the top 5 positions should appear, with the button "Start" at the bottom
8.Start up your race
9.Click on the "Start" button on the TOP 5 window
10.And if all the cars present have GFX loaded into the CT file that have thier names identical to the png files, and have NO spaces in their names (Eg: Car: Mario GFX: MarioPOS.png), you're good to go!
Alrighty... phew... that took forever to set up. If you have any questions, let me know!
| Description: |
|
| Filesize: |
82.71 KB |
| Viewed: |
5603 Time(s) |

|
|
|
| Back to top |
|
 |
Csimbi I post too much
Reputation: 97
Joined: 14 Jul 2007 Posts: 3327
|
Posted: Thu Aug 08, 2019 10:53 am Post subject: |
|
|
I watched that second video.
Wow, nice job, congrats!
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|