[Completed] Alien: Isolation Collection

Ask about cheats/tables for single player games here
Post Reply
User avatar
VampTY
Table Makers
Table Makers
Posts: 809
Joined: Tue Mar 05, 2019 10:52 am
Reputation: 1047

[Completed] Alien: Isolation Collection

Post by VampTY »

Game Name:Alien: Isolation Collection on STEAM or Alien.Isolation.Collection-PROPHET
Game Engine:Cathode
Game Version:Latest version
Options Required:Survivor timer freeze/reset (either freeze or reset the timer)
Steam Website:[Link]

I'd really like to see this, before i'll finish the game on story! ;) cfemen! :oops:

COMPLETED by cfemen
_____________________________
Moving TABLE to -> viewtopic.php?t=11174&p=116396#p116396/
Last edited by VampTY on Thu Mar 25, 2021 4:27 am, edited 4 times in total.

User avatar
notpikachu
Table Makers
Table Makers
Posts: 311
Joined: Wed Apr 01, 2020 10:32 am
Reputation: 331

Re: Alien: Isolation Collection

Post by notpikachu »

Not sure if I need to chip in if cfemen is on it :D. Did some research and saw a few posts complaining about cheating in survivor mode (steam,reddit,etc). I guess the devs had enough and try do something like encrypting the survivor timer value. As I'm not a fan of horror/surprise game, I just do some quick check and backtracing and be done with it.
Just trying to verify if its working
Image
Assembly Code

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
  <CheatEntries>
    <CheatEntry>
      <ID>223</ID>
      <Description>"Nop My Time Please"</Description>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
aobscanmodule(zerotime,AI.exe,E8 EF 1A C5 FF) // should be unique
alloc(newmem,64)
label(zeroCopy)

newmem:
zeroCopy:
readmem(zerotime,5)
zerotime:
db 90 90 90 90 90
registersymbol(zerotime)
registersymbol(zeroCopy)

[DISABLE]
zerotime:
readmem(zeroCopy,5)
unregistersymbol(zerotime)
unregistersymbol(zeroCopy)
dealloc(newmem)
</AssemblerScript>
    </CheatEntry>
  </CheatEntries>
</CheatTable>
Pretty sure I saw some sort of check after the call or I might be wrong :? . In any case, feel free to use my code as well.

User avatar
VampTY
Table Makers
Table Makers
Posts: 809
Joined: Tue Mar 05, 2019 10:52 am
Reputation: 1047

Re: Alien: Isolation Collection

Post by VampTY »

Thank you notpikachu, i've just tested it now and is for the visual value, if i'll enable the cheat, your code will add 00:00:00 for the time elapsed, but if i'll disableit, it still counts, meaning with the values frozen it still counts up, even if on screen is 00:00:00.This is why i've asked for help,the score goes uploaded online and also the time, i guess, if this was integrated into the main story wouldn't be any problem, so i'm sceptic doing for registered values, for not getting a ban...therefore my cry for help!

I'll give it a go with your code, i'll finish something, to see how it goes, if i'll get a ban or not! :lol:
___________________________________________
Also can you do something with those values on the right, would be cool and thanks for you time!

[Link]

_________
Regarding online, ever since i modified the score online in "Middle-earth: Shadow of Mordor" with score/timer i was second in that list... :lol: and also in "Bioshock Infinite" score...and many, many games on top!So no more from now!Something that will freeze/reset the timer will be cool and those values, would be awesome!

Thank you for your time!

User avatar
cfemen
RCE Fanatics
RCE Fanatics
Posts: 871
Joined: Fri Feb 15, 2019 5:45 pm
Reputation: 1475

Re: Alien: Isolation Collection

Post by cfemen »

so okay i have the epic store version, but i dont think this a problem:

VampTY's script has only 1 AOB script (Detection) and its working.
notpikachu's script is scanning for a E8 (Call) and then a address, you didn't use wildcards so its not working coz of different address ^^
so i guess my scripts here with wildcard AOBs should work for all.

so okay my quick look:
i assumed that there is some global stuff that is used to calculate the time.
i've found a spot that shows the current map string.

Main Menu = "Production\Frontend"
New Game First Level = "Production\BSP_Torrens"
Challenge Mode Basement Level = "Production\DLC\ChallengeMap16"

below this string are 2 static doubles.
first static counts up if you are ingame, and gets a reset if you are in the main menu
second static counts up if you are in the pause menu or main menu

i've increased the first double and the time was going over 30 mins and the challenge failed, so this confirmed that this value is used to calculate all the stuff.

to find the global value use this script and then add [CodeCave] address as double type and you can access it.

Code: Select all

{$lua}
if syntaxcheck then return end

function aobScanEx( aob )
--https://forum.cheatengine.org/viewtopic.php?t=577536  - thanks panraven!
  local p, a, n, s, e = nil or '*X*W', nil or fsmNotAligned, nil or '0', getAddress( process ) or 0x0, ( getAddress( process ) + getModuleSize( process ) ) or 0xffffffffffffffff
  local ms = pb and createMemScan( pb ) or createMemScan()
  local fl = createFoundList( ms )
  ms.firstScan( soExactValue, vtByteArray, nil, aob, nil, s, e, p, a, n, true, false, false, false )
  ms.waitTillDone()
  fl.initialize()
  local result = nil
  if fl ~= nil and fl.getCount() > 0 then
    result = createStringlist()
    for i = 1, fl.getCount() do result.add( fl.getAddress( i - 1 ) ) end
  end
  fl.destroy()
  ms.destroy()
  return result
end

function string.fromhex( s )
    return ( s:gsub( '..', function ( cc )
        return string.char( tonumber( cc, 16 ) )
    end ) )
end

function aobScanSmall( aob, s, e )
  local i = byteTableToString( readBytes( s, e, true ) ):find( string.fromhex( aob ), 1, true )
  if i == nil then i = 1 end
  return ( s + i - 1 )
end

[ENABLE]

--Cave Stuff to store and access the static value
  local qBase = getAddressSafe( process )
  local dOffset = 0x500
  qCaveAdd = qBase + dOffset
  fullAccess( qCaveAdd, 0x500)
  executeCodeEx( 0, nil, getAddressSafe( "RtlZeroMemory" ), qCaveAdd, 0x500 )
  unregisterSymbol( "CodeCave" )
  registerSymbol( "CodeCave", qCaveAdd, true )
--End Cave Stuff

--get movsd [mem],xmm1
--mem = global timer as double
  local aobGetGlobalTimer = "F2 0F 11 0D ** ** ** ** F2 0F 11 15 ** ** ** ** 66 0F "
  aobGetGlobalTimer = aobScanEx( aobGetGlobalTimer)

  if aobGetGlobalTimer == nil then showMessage("No AOB For Global Timer") error("") return end

  unregisterSymbol( "aobGlobalTimer" )
  registerSymbol( "aobGlobalTimer", aobGetGlobalTimer[0], true )

  local MovsdAddress = tonumber(aobGetGlobalTimer[0],16)

  local GlobalTimer = readInteger(MovsdAddress + 0x04 )
  writeQword(qCaveAdd, GlobalTimer)

[DISABLE]

local pCodeCave = getAddressSafe( "CodeCave" )
executeCodeEx( 0, nil, getAddressSafe( "RtlZeroMemory" ), pCodeCave, 0x500 )

unregisterSymbol( "aobGlobalTimer" )
if script is activ you can also use the aobGlobalTimer symbol to find the spot that shows the current map and the 2 doubles, or just scan for
F2 0F 11 0D ** ** ** ** F2 0F 11 15 ** ** ** ** 66 0F ( it will show 2 results with the same static double address, only one of them is used to execute)

okay (without surprise) lots of shit is reading from this global time value, i looked through some of them and found a spot that is reading from the static value if the timer start, and then subtracting from it and finally doing a compare, i killed the subtract and now the game won't trigger a gameover if the ingame timer is > 30 mins:

it will endless count up :)

Image

script for that:

Code: Select all

[ENABLE]
// ignores the gameover if the timer is > 30 mins
aobscanmodule(aobCheckTimerForGameOver,AI.exe,F2 0F 5C C2 66 0F 2F C8)

aobCheckTimerForGameOver:
  db 90 90 90 90
registersymbol(aobCheckTimerForGameOver)

[DISABLE]

aobCheckTimerForGameOver:
  db F2 0F 5C C2
unregistersymbol(aobCheckTimerForGameOver)
so okay then i looked for another read that is only accessed if the timer runs:

Code: Select all

// sets the timer to 10 secs
aobscanmodule(aobTimer,AI.exe,C0 F3 0F 5C 41 0C) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
label(somef)

newmem:

code:
  subss xmm0,[ecx+0C]
  movss xmm0,[somef]
  jmp return
somef:
dd (float)10
aobTimer+01:
  jmp newmem
return:
registersymbol(aobTimer)

[DISABLE]

aobTimer+01:
  db F3 0F 5C 41 0C

unregistersymbol(aobTimer)
dealloc(newmem)
this freezes the timer at 10 secs, i ended the level with it:

Image

now it shows always by best time (10 secs)

so okay now you know that there are different calculations based on the global time, one method that is reading that is only checking "is timer > 30 mins?" and another one that is used to count up for the endscreen.

//

btw game does not have settings to set it to english, so every screenshot text is german :lol:
if i start it with x64dbg and "-epiclocale=eng" then it does not connect to the leaderboard....
good job devs, is it so hard to make a ingame menu to change the language? im also wondering why they are using 32 bit :shock:

//


@VampTY i can't reply to your PM coz "Some users couldn’t be added as they have disabled private message receipt."

i'll disableit, it still counts, meaning with the values frozen it still counts up,
yep thats coz the counter gets calculated every frame from the global time variable, there is not much you can do about it except looking what is reading from it and change the calculation (like my 2 scripts)
if you freeze / decrease the global time then the game will fuck up.

(for testing purpose ) if you freeze the global time then the 3 timers on the top right corner will also freeze, so you can also find that caluclation if you do a "find out what accesses this address"

//

edit: okay looks like i got somekind of leadboard ban lol

Image

its now everything empty everytime i start the game :lol:

User avatar
VampTY
Table Makers
Table Makers
Posts: 809
Joined: Tue Mar 05, 2019 10:52 am
Reputation: 1047

Re: Alien: Isolation Collection

Post by VampTY »

Oh my god CFEMEN, tremendous work..but is not working in STEAM at all, those first two scripts can be enabled/disabled but they do nothing at all, only the third script hides the visual code for the timer countdown, it sets them to 10 seconds but it still count even if is frozen..so NOTHING WORKS from all three!

I guess is because is the updated version, this has all included, all dlc's and whatnot.... but you said my scripts work in EPIC version, i don't know what to say!

I'm looking in your scripts, something is not ok in steam with these array of bytes, no problem also with german! :D

---i'll be back :lol:

----------also with pm, the fuck i did, i'm so stupid, fuck me..

Steam version, the complete one, meaning "Alien: Isolation Collection" is in english, french, italian, german, spanish and all with full audio/subtitles..so i guess they gifted the old version to EPIC, i don't have an epic account...is good my scripts work in epic, i can't see why yours don't work in steam version.

EDIT: CAN YOU TEST THIS attachment?

I've searched the array you pasted , meaning F2 0F 11 0D ** ** ** ** F2 0F 11 15 ** ** ** ** 66 0F and found as you said a static value, but the timer when is frozen it freezes also the world itself, animations and whatnot..it does work but for all i mean, if you'll add like 30 as value will do that indeed, just don't freeze the value and play...for this version only this works, scripts don't work...i'll test more

Or perhaps there's a second value?

EDIT again
Just thinking, could it be possible to make a hotkey to always repeat the function, meaning if i'll assign to this static address a hotkey and add the value inside to like 40 or something whenever is pressed the hotkey..but something to repeat the steps, always repeating after 10 seconds for example, meaning after activating the hotkey, i won't have to always keep pressing that hotkey!? Does cheat engine has something like that,,,i guess today i have my stupid mood activated :lol: Nothing worked today, for me..well you made it better cfemen ..is so weird not writting your real name.

All the best!Big kiss for helping :oops:


///////////////////////
EDIT, again

So yesterday turned out to be a bad day afterall, as i've said before, nothing worked for me, today was much better, i even found my pink bra.. :lol:

Ok, so thank you again cfemen for me this is working, only this from you and is working like a charm, for the FINAL TIME:

Code: Select all

[ENABLE]
aobscanmodule(final_time,AI.exe,C0 F3 0F 5C 41 0C)
alloc(newmem,$100)
label(return)
label(value)
newmem:
  subss xmm0,[ecx+0C]
  movss xmm0,[value]
  jmp return
value:
dd (float)0
final_time+01:
  jmp newmem
return:
registersymbol(final_time)
[DISABLE]
final_time+01:
  db F3 0F 5C 41 0C
unregistersymbol(final_time)
dealloc(newmem)
Yesderday didn't worked, i don't know why it did that, but i'm glad now it works, at the end the FINAL TIME is 00:00:00 though i should add more than 0 in there , more like 60.Again it works, thank you again!

_______________________
Ok, i know it's fucking itching me, but i made a script for the FINAL SCORE and thinking why these players should be on number one instead of me, look below:

[Link]

I really hope i won't get a fucking ban!

--- This is what i'm talking, i'm always afraid of using/doing this stuff, but i'm stupid, i'm doing it anyway, fuck me! ;)

I'm thinking if i should share or just delete the script, since obviously i've added more values inside, oh man!

Thank you again, i said that before, but i said it with pleasure! :oops:
_________________________
Moving TABLE to -> viewtopic.php?t=11174&p=116396#p116396/

Post Reply

Who is online

Users browsing this forum: nodontplease