Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


Using Cheat Engine to view Top 5 positions (It's Possible!!)

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine
View previous topic :: View next topic  
Author Message
MidiGuyDP
How do I cheat?
Reputation: 0

Joined: 05 Aug 2019
Posts: 4

PostPosted: Mon Aug 05, 2019 6:10 pm    Post subject: Using Cheat Engine to view Top 5 positions (It's Possible!!) Reply with quote

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! Very Happy



Pic with P.png
 Description:
 Filesize:  653.25 KB
 Viewed:  5706 Time(s)

Pic with P.png




Last edited by MidiGuyDP on Wed Aug 07, 2019 6:11 pm; edited 1 time in total
Back to top
View user's profile Send private message
Csimbi
I post too much
Reputation: 97

Joined: 14 Jul 2007
Posts: 3327

PostPosted: Tue Aug 06, 2019 7:05 am    Post subject: Reply with quote

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 Wink
Back to top
View user's profile Send private message
MidiGuyDP
How do I cheat?
Reputation: 0

Joined: 05 Aug 2019
Posts: 4

PostPosted: Wed Aug 07, 2019 2:56 am    Post subject: Reply with quote

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. Very Happy


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! Very Happy


Though if anyone knows of a way to draw the data right on to the game screen itself, let me know! Smile



Video Preview small.png
 Description:
 Filesize:  605.69 KB
 Viewed:  5646 Time(s)

Video Preview small.png


Back to top
View user's profile Send private message
mindoff
Advanced Cheater
Reputation: 0

Joined: 12 Jun 2016
Posts: 96

PostPosted: Wed Aug 07, 2019 4:55 am    Post subject: Reply with quote

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
View user's profile Send private message
MidiGuyDP
How do I cheat?
Reputation: 0

Joined: 05 Aug 2019
Posts: 4

PostPosted: Wed Aug 07, 2019 7:00 pm    Post subject: Reply with quote

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! Very Happy

Alrighty... phew... that took forever to set up. If you have any questions, let me know!



MainBGRender.png
 Description:
 Filesize:  82.71 KB
 Viewed:  5602 Time(s)

MainBGRender.png


Back to top
View user's profile Send private message
Csimbi
I post too much
Reputation: 97

Joined: 14 Jul 2007
Posts: 3327

PostPosted: Thu Aug 08, 2019 10:53 am    Post subject: Reply with quote

I watched that second video.
Wow, nice job, congrats!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites