Assassin's Creed Odyssey v1.3.0/v1.5.1 +21 (table Update18.3)

Upload your cheat tables here (No requests)
User avatar
SunBeam
Administration
Administration
Posts: 4704
Joined: Sun Feb 04, 2018 7:16 pm
Reputation: 4287

Re: Assassin's Creed Odyssey +16 (table Update11)

Post by SunBeam »

lordkain wrote:
Wed Oct 17, 2018 1:30 pm
SunBeam wrote:
Wed Oct 17, 2018 8:22 am
Hey @Sunbeam, I've been using your script for fearlessrevolution. It was working fine till yesterday. There was some kind of "soft patch" yesterday, they added some stuff, even though the game version didn't change. (It is still 1.03).
I tried to use fearlessrevolution yesterday, and every time I injected it, it caused some graphical glitches in the game. It wasn't happening before. Do you know anything about it?
No glitches on my end. Might have to do with your recently updated GFX driver.

How to use this cheat table?
  1. Install Cheat Engine
  2. Double-click the .CT file in order to open it.
  3. Click the PC icon in Cheat Engine in order to select the game process.
  4. Keep the list.
  5. Activate the trainer options by checking boxes or setting values from 0 to 1

Neal
Noobzor
Noobzor
Posts: 14
Joined: Sun Jun 24, 2018 12:13 pm
Reputation: 0

Re: Assassin's Creed Odyssey +16 (table Update11)

Post by Neal »

Been using the teleport for a bit and it seems to work really well. Works best when picking a landmark/sync point. No problems at all when picking spots close to you. If you, for example, select a mountain top across the map though you might get stuck, fall through the map or something. So yeah, seems to be working just fine.

User avatar
Send
Table Makers
Table Makers
Posts: 331
Joined: Fri Feb 02, 2018 5:58 pm
Reputation: 191

Re: Assassin's Creed Odyssey +16 (table Update11)

Post by Send »

@SunBeam, gibs da cheats pls. u god n shiet.

-- Sincerely, Google.



Great work, Cielos and Sun. Lol, still using the avatar I animated, haha.

Z28Scott
Noobzor
Noobzor
Posts: 5
Joined: Thu Aug 24, 2017 12:55 am
Reputation: 19

Re: Assassin's Creed Odyssey +14 (table Update9)

Post by Z28Scott »

Here is version 3 of the damage/armor multipliers. You can now set multipliers for:
  • Warrior Damage
    • Primary weapon
    • Secondary weapon
  • Assassin Damage
  • Hunter Damage
  • Armor
It is best to activate the scripts in the main menu, then the values will apply as soon as your game is loaded. If activating in game, you will need to re-equip a piece of equipment to trigger a recalculation. All defaults are for 1.5x, but can be changed in the table, or edited in the script to make a new default.

Edit: Compatible with version 1.0.6
Attachments
ACOdysseyDamage3.CT
(15.42 KiB) Downloaded 781 times
Last edited by Z28Scott on Fri Nov 02, 2018 1:47 am, edited 2 times in total.

leseho
Expert Cheater
Expert Cheater
Posts: 82
Joined: Mon Aug 21, 2017 1:37 am
Reputation: 1

Re: Assassin's Creed Odyssey +14 (table Update9)

Post by leseho »

Z28Scott wrote:
Thu Oct 18, 2018 1:52 am
Here is version 3 of the damage/armor multipliers. You can now set multipliers for:
  • Warrior Damage
    • Primary weapon
    • Secondary weapon
  • Assassin Damage
  • Hunter Damage
  • Armor
It is best to activate the scripts in the main menu, then the values will apply as soon as your game is loaded. If activating in game, you will need to re-equip a piece of equipment to trigger a recalculation. All defaults are for 1.5x, but can be changed in the table, or edited in the script to make a new default.
cocotoon wrote:
Wed Oct 17, 2018 12:35 pm
I think it's amazing what you do. I'm learning to use the tables but I'm not that good ...
In your opinion, is it possible to change the value of health so that it becomes the default value of the game?
As far as I know, no edited stats will persist in save games. Typically, games with stats that aren't directly player upgradable won't store them in save files, and just calculate them in-game when needed. It is likely only storing your XP/skills/equipment/etc and deriving stats from that. Of course Origins had infinitely upgradable mastery skills, but they are now only 3 levels.
SunBeam wrote:
Sat Oct 13, 2018 9:07 am
@Z28Scott: Everything is right under your nose ;) Just back-trace out of that function you're hooking for Weapon Damage :P Then dive in and study the code. Will post snippets along the way. You can easily work with the PlayerStatsManager parameters, rather than using the item's stats ;) This covers the base parameters for health, armor, typed-damage, etc. - - I'll explain along the way.
This sounds interesting. I traced out of the function call I am using and looked around a bit. Debugging can be difficult though, when working with intermediate calculations rather than the final values. Any thoughts on what to do with the PlayerStatsManager?


It is amazing! I waited and was waiting. Thank you for your hard work. Thank you very much.

reicou
Noobzor
Noobzor
Posts: 12
Joined: Wed Nov 01, 2017 9:17 am
Reputation: 0

Re: Assassin's Creed Odyssey +14 (table Update9)

Post by reicou »

Z28Scott wrote:
Thu Oct 18, 2018 1:52 am
Here is version 3 of the damage/armor multipliers. You can now set multipliers for:
  • Warrior Damage
    • Primary weapon
    • Secondary weapon
  • Assassin Damage
  • Hunter Damage
  • Armor
It is best to activate the scripts in the main menu, then the values will apply as soon as your game is loaded. If activating in game, you will need to re-equip a piece of equipment to trigger a recalculation. All defaults are for 1.5x, but can be changed in the table, or edited in the script to make a new default.
cocotoon wrote:
Wed Oct 17, 2018 12:35 pm
I think it's amazing what you do. I'm learning to use the tables but I'm not that good ...
In your opinion, is it possible to change the value of health so that it becomes the default value of the game?
As far as I know, no edited stats will persist in save games. Typically, games with stats that aren't directly player upgradable won't store them in save files, and just calculate them in-game when needed. It is likely only storing your XP/skills/equipment/etc and deriving stats from that. Of course Origins had infinitely upgradable mastery skills, but they are now only 3 levels.
SunBeam wrote:
Sat Oct 13, 2018 9:07 am
@Z28Scott: Everything is right under your nose ;) Just back-trace out of that function you're hooking for Weapon Damage :P Then dive in and study the code. Will post snippets along the way. You can easily work with the PlayerStatsManager parameters, rather than using the item's stats ;) This covers the base parameters for health, armor, typed-damage, etc. - - I'll explain along the way.
This sounds interesting. I traced out of the function call I am using and looked around a bit. Debugging can be difficult though, when working with intermediate calculations rather than the final values. Any thoughts on what to do with the PlayerStatsManager?
Again, thank you so much. Now, this is the only cheat I use in the game. I could not enjoy the game without it. Great job. :) :)

cocotoon
Cheater
Cheater
Posts: 46
Joined: Sat Oct 06, 2018 11:58 am
Reputation: 0

Re: Assassin's Creed Odyssey +14 (table Update9)

Post by cocotoon »

Z28Scott wrote:
Thu Oct 18, 2018 1:52 am
Here is version 3 of the damage/armor multipliers. You can now set multipliers for:
  • Warrior Damage
    • Primary weapon
    • Secondary weapon
  • Assassin Damage
  • Hunter Damage
  • Armor
It is best to activate the scripts in the main menu, then the values will apply as soon as your game is loaded. If activating in game, you will need to re-equip a piece of equipment to trigger a recalculation. All defaults are for 1.5x, but can be changed in the table, or edited in the script to make a new default.
cocotoon wrote:
Wed Oct 17, 2018 12:35 pm
I think it's amazing what you do. I'm learning to use the tables but I'm not that good ...
In your opinion, is it possible to change the value of health so that it becomes the default value of the game?
As far as I know, no edited stats will persist in save games. Typically, games with stats that aren't directly player upgradable won't store them in save files, and just calculate them in-game when needed. It is likely only storing your XP/skills/equipment/etc and deriving stats from that. Of course Origins had infinitely upgradable mastery skills, but they are now only 3 levels.
SunBeam wrote:
Sat Oct 13, 2018 9:07 am
@Z28Scott: Everything is right under your nose ;) Just back-trace out of that function you're hooking for Weapon Damage :P Then dive in and study the code. Will post snippets along the way. You can easily work with the PlayerStatsManager parameters, rather than using the item's stats ;) This covers the base parameters for health, armor, typed-damage, etc. - - I'll explain along the way.
This sounds interesting. I traced out of the function call I am using and looked around a bit. Debugging can be difficult though, when working with intermediate calculations rather than the final values. Any thoughts on what to do with the PlayerStatsManager?
Thank you so much...
Yes it's a pity that the system of origins is not the same on odyssey. Thank you very much for your work. 😉

john_101891
Noobzor
Noobzor
Posts: 14
Joined: Sun Oct 14, 2018 8:07 pm
Reputation: 1

Re: Assassin's Creed Odyssey +16 (table Update11)

Post by john_101891 »

Is there any way to edit skills on armor??

dirtydanisreal
Expert Cheater
Expert Cheater
Posts: 74
Joined: Tue May 09, 2017 4:29 am
Reputation: 5

Re: Assassin's Creed Odyssey +16 (table Update11)

Post by dirtydanisreal »

Any body found a way to add animus fragments for upgrading the spear?

User avatar
SunBeam
Administration
Administration
Posts: 4704
Joined: Sun Feb 04, 2018 7:16 pm
Reputation: 4287

Re: Assassin's Creed Odyssey +16 (table Update11)

Post by SunBeam »

^ They are removed by the game. Please do your due diligence and read the posts on the other pages: viewtopic.php?p=64423#p64423.

User avatar
Cielos
RCE Fanatics
RCE Fanatics
Posts: 833
Joined: Fri Mar 03, 2017 4:35 am
Reputation: 1787

Re: Assassin's Creed Odyssey +16 (table Update11.1)

Post by Cielos »

@all
my friend file a crash report when undead for pet is on. it should be fixed now:
Update11.1
- updated undead (actually the enable script). changed the pet fetching process, should be more stable now.
- updated one-hit-kill mod key. the damage bar visual of bow aiming would be updated as well when the mod key is pressed.
- added link to Z28Scott's damage multipliers table (see top of the post).
if you have problem using pet undead as well, you should re-download right away.

hummus
Cheater
Cheater
Posts: 30
Joined: Mon Oct 16, 2017 8:43 am
Reputation: 11

Re: Assassin's Creed Odyssey +16 (table Update11.1)

Post by hummus »

Cielos wrote:
Thu Oct 18, 2018 6:13 pm
@all
my friend file a crash report when undead for pet is on. it should be fixed now:
Update11.1
- updated undead (actually the enable script). changed the pet fetching process, should be more stable now.
- updated one-hit-kill mod key. the damage bar visual of bow aiming would be updated as well when the mod key is pressed.
- added link to Z28Scott's damage multipliers table (see top of the post).
if you have problem using pet undead as well, you should re-download right away.
Game crashing now with enable only :(

User avatar
Cielos
RCE Fanatics
RCE Fanatics
Posts: 833
Joined: Fri Mar 03, 2017 4:35 am
Reputation: 1787

Re: Assassin's Creed Odyssey +16 (table Update11.1)

Post by Cielos »

^
ha, thanks for the report. I'll have a look. in the mean time, you can use back the previous version.

EDIT:
I've tried enable the script in-game, no crash.
the newly added injection point is in 14bytes, so that's not the problem either.
any more details you can share?
EDIT2:
it's quite late here, I'll play some more to test later and/or wait for my friend further reports.
so, until I can recreate the crash, see if you can describe it in more details, or just use back the old version.

hummus
Cheater
Cheater
Posts: 30
Joined: Mon Oct 16, 2017 8:43 am
Reputation: 11

Re: Assassin's Creed Odyssey +16 (table Update11.1)

Post by hummus »

Cielos wrote:
Thu Oct 18, 2018 6:24 pm
^
ha, thanks for the report. I'll have a look. in the mean time, you can use back the previous version.

EDIT:
I've tried enable the script in-game, no crash.
the newly added injection point is in 14bytes, so that's not the problem either.
any more details you can share?
EDIT2:
it's quite late here, I'll play some more to test later and/or wait for my friend further reports.
so, until I can recreate the crash, see if you can describe it in more details, or just use back the old version.
Thanks, I'm using the old version for now.
Will test again later.

User avatar
SunBeam
Administration
Administration
Posts: 4704
Joined: Sun Feb 04, 2018 7:16 pm
Reputation: 4287

Re: Assassin's Creed Odyssey +16 (table Update11.1)

Post by SunBeam »

@Cielos:

Well, well.. my last debugging session aimed to determine how the game calculates or fetches CSrvPlayerFightAdrenalin. As you may have noticed, the Adrenaline doesn't have an on-access instruction constantly ticking it. Bar is accessed/written to when you actually use it; or trigger an update event, so to say. So.. what I tried at first was to break on each member-function till the next block of functions. In most of today's games you have the first 2 quad-pointers (offset 0x0 and 0x8) as the constructor/destructor in the class; so it's easy to spot by checking the function's code if you've crossed the block's boundary to another block.

Here's how to debug it:

Code: Select all

function _readInteger( Input )
  -- thanks, Pox!
  local Value = readInteger( Input )
  if Value < 0x80000000 then return Value
  else return Value - 0x100000000 end
end

function GetName( input )
  local addr = readQword( input )
  addr = addr + 0x38 -- GetName; 0x30 for ACS; 0x38 for ACO
  addr = readQword( addr )
  if readBytes( addr, 1 ) == 0xE9 then
    addr = addr + _readInteger( addr + 0x1 ) + 0x5
  end
  addr = addr + _readInteger( addr + 0x3 ) + 0x7
  addr = readQword( addr )
  print( string.format( "IStruct:  0x%X", input ) )
  print( string.format( "IName:    0x%X", addr ) )
  local str = readString( readQword( addr + 0x18 ) )
  print( string.format( "ObjStr:   %s", str ) )
  addr = readInteger( addr + 0x24 )
  print( string.format( "ObjHash:  0x%X", addr ) )
end

GetName( 0xyour_pointer )
We'll use the helper I wrote above. And feed it the pointer to CSrvPlayerFightAdrenalin, which we can get from this location:

Code: Select all

ACOdyssey.exe+21D5C15 - 89 BB 78020000        - mov [rbx+00000278],edi
To get RBX, just use an Ability (I'm using Bull Rush for this example). And this will happen:

Image

Now if I feed that RBX to the script in Lua, I get this:

Image

And if we check that pointer in Memory View, bottom part:

Image

Offset 0x0 contains the pointer to member-functions, which, when checking the memory of, shows this table of quads (function addresses):

Image

So, now, if I check the first function in top part, I see this:

Image

That's the class constructor/destructor, if I recall. Then at offset 0x38 we have - what I call as - GetName. The reason I named it like that is this:

Image

That offset parkour logic leads to a name in structures that are normalized; at times you may need to offset the pointer a bit more (which the engine does quite weird) to get to that member-functions list. Bottom-line: the base pointer isn't always acquired directly; there's offsetting involved, but you can trace that out. See example below:

Code: Select all

GetCSrvPlayerFightStamina:
sub rsp,28
mov rcx,[pCharacterAI]
test rcx,rcx
je short @f
  mov rcx,[rcx+40]
  mov [rsp+20],rbx
  mov rbx,[ACOdyssey.exe+56F2990]
  mov rax,[rcx]
  call qword ptr [rax+A0]
  movzx ecx,byte ptr [rbx+49]
  mov rbx,[rsp+20]
  mov rax,[rax]
  mov rcx,[rax+rcx*8]
  test rcx,rcx
  je short @f
    mov rax,rcx
    add rax,-0F8 // see this offset? well, that's why :P
    add rsp,28
    ret
@@:
xor eax,rax
add rsp,28
ret
Similarly, the function at offset 0x40 I named GetHash; because it does this:

Image

With that out of the way, now time to find the length of this vtable. I started looking manually for functions like the one I showed above, at 0x0, and landed here:

Image

So, if 0x180 is another GetName, then it means we've crossed the boundary to another block of member-functions. GetName is the function at offset 0x38 in the block, thus 0x180-0x38 = 0x148. This is where the new block of member-functions would start:

Image

Now I know the CSrvPlayerFightAdrenalin's block of member-functions is 0x140 big. That gives us 0x140/8 = 0x28 = 40 functions. Out of which, most you'll see lead to "XOR EAX,EAX/RET" :)

What I did next was to break on almost all functions I found useful in this block; just to see if and when does the game break/uses them. But I applied a different logic: why not check-up on a GetName or GetHash function when you move from game to main menu and main menu to game world. Just to see what's going on, trying to determine how Anvil allocates it and where I might find it.

When moving from main menu to game world, I got these breaking:

Image

So, member-function at offset 0x60. Then I got several hits on GetName and GetHash, but didn't find useful in the analysis.

Back to this function at offset 0x60; with CE frozen, do a Ctrl+G and type in [rsp] / Enter. You'll land here; scroll a bit:

Image

I got intrigued by this piece of code:

Code: Select all

ACOdyssey.exe+EF917AD - 8B B7 94010000        - mov esi,[rdi+00000194]
ACOdyssey.exe+EF917B3 - 48 8B 9F 8C010000     - mov rbx,[rdi+0000018C]
ACOdyssey.exe+EF917BA - C1 EE 11              - shr esi,11 { 17 }
ACOdyssey.exe+EF917BD - C1 E6 03              - shl esi,03 { 3 }
ACOdyssey.exe+EF917C0 - 48 01 DE              - add rsi,rbx
ACOdyssey.exe+EF917C3 - 48 39 F3              - cmp rbx,rsi
ACOdyssey.exe+EF917C6 - 74 17                 - je ACOdyssey.exe+EF917DF
What this does is to fetch the base pointer to another vtable; then uses esi to calculate table size and computes the right or bottom boundary of the table. Of course I now got curious who RDI is and what this table contains:

Image

Nice; CharacterAI. I already have a method to fetch this in my Cheat Handler ;) Let's take a look at the table:

Image

- offset 0x194 contains this value: 00240012
- offset 0x18C contains this pointer: 000000092D918830

Doing the math gives this: shl( shr 00240012,11 ), 3 == 0x90. So table we look at is this one:

Image

As you can see, it contains several pointers :) I wonder what we can use to inspect them :P The Lua helper. Doing this I got the following:

- 0x0: CSrvPlayerNPCAwareness
- 0x8: CSrvNavigation
- 0x10: CSrvFightLogic
- 0x18: CSrvAnimatedAction
- 0x20: CSrvKillStreak
- 0x28: CSrvPlayerFightAdrenalin
..
..
- 0x88: CSrvMeditation

So our CSrvPlayerFightAdrenalin can be retrieved with the help of CharacterAI ;) Offsets 0x18C and 0x194 contain the start vtable pointer and size; we can then write a loop that iterates the pointers from start till end of table, looking for the one whose GetHash is 0x377E5659. This hash is also stored in memory, so you don't need to actually call-in member-function 0x40. See this:

Code: Select all

  print( string.format( "IStruct:  0x%X", input ) )
  print( string.format( "IName:    0x%X", addr ) )
  local str = readString( readQword( addr + 0x18 ) )
  print( string.format( "ObjStr:   %s", str ) )
  addr = readInteger( addr + 0x24 )
  print( string.format( "ObjHash:  0x%X", addr ) )
Here's how you'd do it with Lua, based on current 1.0.3 (I will use raw address calling):

Code: Select all

function lshift(x, by)
  return x * 2 ^ by
end

function rshift(x, by)
  return math.floor(x / 2 ^ by)
end

local GameProcess = "ACOdyssey.exe" -- our game
local GameModule = getAddress( GameProcess ) -- get ModuleBase
print( string.format( "ModuleBase: 0x%X", GameModule ) )
local GetWorld = GameModule + 0x183DA50 -- this function retrieves a static, World
--print( string.format( "0x%X", GetWorld ) )
local World = executeCode( GetWorld ) -- fetch it
print( string.format( "World: 0x%X", World ) )
local Entity = readQword( World + 0x90 ) -- read Entity from World
print( string.format( "Entity: 0x%X", Entity ) )
local GetBhvAssassin = GameModule + 0x13DEBC0
local BhvAssassin = executeCode( GetBhvAssassin, Entity ) -- get BhvAssassin using Entity
print( string.format( "BhvAssassin: 0x%X", BhvAssassin ) )
local CharacterAI = readQword( BhvAssassin + 0x28 ) -- read CharacterAI
print( string.format( "CharacterAI: 0x%X", CharacterAI ) )
print( "" )

-- time to have the fun I mentioned above

local TableStart = readQword( CharacterAI + 0x18C )
print( string.format( "TableStart: 0x%X", TableStart ) )
local TableIntSize = readInteger( CharacterAI + 0x194 )
--print( string.format( "0x%X", TableIntSize ) )
local TableSize = lshift( rshift( TableIntSize, 0x11 ), 0x3 )
print( string.format( "TableSize: 0x%X", TableSize ) )
local TableEnd = TableStart + TableSize
print( string.format( "TableStart: 0x%X", TableEnd ) )
print( "" )

local i = 0x0
local j = 0x0

for i = TableStart,TableEnd-8,8 do
  local p = readQword( i )
  --print( string.format( "0x%X: 0x%X", j, p ) )
  -- read pointer to member-functions
  local MainPointer = readQword( p )
  --print( string.format( "0x%X", MainPointer ) )
  -- get functions at 0x38 and 0x40
  local GetName = readQword( MainPointer + 0x38 )
  --print( string.format( "0x%X", GetName ) )
  local GetHash = readQword( MainPointer + 0x40 )
  --print( string.format( "0x%X", GetHash ) )
  -- get hash via executing the function
  local HashA = executeCode( GetHash )
  --print( string.format( "0x%X", HashA ) )
  -- run GetName then obtain the string from the result
  local fName = executeCode( GetName )
  --print( string.format( "0x%X", fName ) )
  -- get hash via reading it from Name
  local HashB = readInteger( fName + 0x24 )
  --print( string.format( "0x%X", HashB ) )
  Name = readString( readQword( fName + 0x18 ), 6000 )
  --print( Name )
  print( string.format( "0x%X - - | IStruct: 0x%X | IName: 0x%X | ObjStr: %s | ObjHash: 0x%X", j, p, fName, Name, HashB  ) )
  -- increase iterator
  j = j + 0x8
end
Result:

Image

Image

If you wanna use this, you'll need a thread to call these up or simply push/pop registers in and out in your hooks.

BR,
Sun

P.S.: Ooops, I did it again :D

Post Reply

Who is online

Users browsing this forum: AhrefsBot, AmazonBot, Axeen, Bing [Bot], bluemoon27112, daskinny, DosDeosos, drakenotes, Google Adsense [Bot], Inferna, l2ayz, mus6677, poo pu, romilius, SemrushBot, XxDarkus101Xx, YamiNoZero, yoyotv323