Assassin's Creed on 3440x1440 [21:9]

Black bars removal for 21:9 for cutscenes and other scenes.

A section for guides, manuals, and walkthroughs on how to use Cheat Engine functions and advanced features.


Post Reply
User avatar
J1327
Donor
Donor
Novice Hacker
Novice Hacker
Posts: 29
Joined: Mon Jul 25, 2022 5:00 pm
Answers: 0
Location: Baltic States
x 41

Assassin's Creed on 3440x1440 [21:9]

Post by J1327 »

As I go with an assassin's creed series on 1440p I might add more aOb to patches...

Assassin's Creed 1
SKIPPED, -

Note: these scripts and/or aOb strings are based on steam store app. Yet you still need have Ubisoft launcher to launch these games... (…)

Also it seems steam overlay doesn't work correctly* with first few assassin's creed games.. : [Workaround]



Assassin's Creed 2

, - Had to take a look into memory... because existing patch online were different than steam version.

Short version:

  1. open process "AssassinsCreedIIGame.exe" and find array of bytes of "AssassinsCreedIIGame.exe" "30 40 CD CC CC 3D 33 33 33 3F"
  2. Change first two bytes into "20 4F"
  3. DONE

OR

Longer version:

  1. Open process "AssassinsCreedIIGame.exe
  2. At memory scan options chose "AssassinsCreedIIGame.exe"
  3. Set value type to "array of byte"
  4. Enter search value "30 40 CD CC CC 3D 33 33 33 3F"
  5. (! important) MARK Gray writable/executable/CopyOnWrite
  6. Click First Scan
  7. Should appear one address
  8. right click on green address
  9. chose Change value of selected address
  10. Input box appear, change value to "20 4F CD CC CC 3D 33 33 33 3F" and click ok
  11. DONE


Assasin's Creed (2) Brotherhood

,- .. online existing patch made all game strings broken <- that was weird... had to look into..

  1. Create an empty assembly script and paste this code then add to cheat table address list.

Code: Select all

[ENABLE]
globalalloc(SAVEBYTES,8,$process)

ACBSP.exe+16AE1A0:
nop 8

SAVEBYTES:
readmem(ACBSP.exe+16AE1A0,8)

[DISABLE]
ACBSP.exe+16AE1A0:
readmem(SAVEBYTES,8)

func dump



Assasin's Creed (2) Revelations

  1. method identical to to brotherhood.

Code: Select all

[ENABLE]
globalalloc(SAVEBYTES,1,$process) //0x100000
aobscanmodule(INJECT,ACRSP.exe,52 0F 14 C2 0F 14 D9 0F 14 C3 0F 29 45 E0 F3) // should be unique

SAVEBYTES:
readmem(INJECT+E,8)


label(RESTORE_POINT)
registersymbol(RESTORE_POINT)
INJECT+E:
RESTORE_POINT:
nop 8

[DISABLE]
//check reassemble() and STRUCT
RESTORE_POINT:
readmem(SAVEBYTES,8)

{
// ORIGINAL CODE - INJECTION POINT: ACRSP.exe+1796412

ACRSP.exe+17963F7: 8B 50 24                 - mov edx,[eax+24]
ACRSP.exe+17963FA: FF D2                    - call edx
ACRSP.exe+17963FC: 0F 57 C0                 - xorps xmm0,xmm0
ACRSP.exe+17963FF: 8B 4E 0C                 - mov ecx,[esi+0C]
ACRSP.exe+1796402: 0F 28 C8                 - movaps xmm1,xmm0
ACRSP.exe+1796405: 0F 28 D0                 - movaps xmm2,xmm0
ACRSP.exe+1796408: 0F 28 D8                 - movaps xmm3,xmm0
ACRSP.exe+179640B: 8D 55 F0                 - lea edx,[ebp-10]
ACRSP.exe+179640E: 52                       - push edx
ACRSP.exe+179640F: 8D 55 E0                 - lea edx,[ebp-20]
// ---------- INJECTING HERE ----------
ACRSP.exe+1796412: 52                       - push edx <-- start searching AOB String from push
// ---------- DONE INJECTING  ----------
ACRSP.exe+1796413: 0F 14 C2                 - unpcklps xmm0,xmm2
ACRSP.exe+1796416: 0F 14 D9                 - unpcklps xmm3,xmm1
ACRSP.exe+1796419: 0F 14 C3                 - unpcklps xmm0,xmm3
ACRSP.exe+179641C: 0F 29 45 E0              - movaps [ebp-20],xmm0
ACRSP.exe+1796420: F3 0F 10 05 44 50 F6 02  - movss xmm0,[ACRSP.exe+2175044] <-- nop, this address {1.0}
ACRSP.exe+1796428: 0F 28 C8                 - movaps xmm1,xmm0
ACRSP.exe+179642B: 0F 28 D8                 - movaps xmm3,xmm0
ACRSP.exe+179642E: 0F 28 D0                 - movaps xmm2,xmm0
ACRSP.exe+1796431: 0F 14 D9                 - unpcklps xmm3,xmm1
ACRSP.exe+1796434: 0F 14 C2                 - unpcklps xmm0,xmm2
}



Assassin's Creed Chronicles CHINA

.. probably will work on all "Assassin's Creed Chronicles",series

  1. Select first process
  2. Open lua engine (go to memory viewer --> Tools --> Lua Engine)
  3. Paste code to lua engine for Assassin's Creed Chronicles * down below and press "Execute"

Code: Select all

bytes = 4
bytestochange = '4C 8E E3 3F"'
changebytesto = {0xB8,0x1E,0x15,0x40}
print_text = 0
address = AOBScanUnique(bytestochange)
if address==nil
   then
       if(print_text==1) then print('AOB STRING NOT FOUND') end
       return
   else
       while (address~=nil)
       do
       address = AOBScanUnique(bytestochange)
       if address==nil then
                           if(print_text==1)then print('AOB STRING CHANGED')end
                           else
                           if(print_text==1)then printf("%x",address)end
       end
       if(print_text==1) then print(readBytes(address,bytes)) end
       writeBytes(address,changebytesto)
       if(print_text==1) then print(readBytes(address,bytes)) end
       end
end

Notes : If you want find health value, then it is in float (form). 1 Health bar == 2 float value.
As well if you lose all your health bars and you re-spawn again, then address health going to reset, ("player base" changes upon death which changes health address location (note this applies when searching player raw values)).
showcase UW Patch



Assassin's Creed 3 Remastered

  1. Method same as revelations or brotherhood . Paste assembly code and add it to address list.

Code: Select all

[ENABLE]
aobscanmodule(Ultrawide_patch_AOB,ACIII.exe,48 83 EC 18 4C 8B 54 24 40) // should be unique
alloc(newmem,64,Ultrawide_patch_AOB)
label(code return)
{
RCX==
+9d4 = screen width
+9d8 = screen height
..
+14=
..
}
newmem:
mov [rcx+c8],#6 // default locks at 2
code:
  sub rsp,18
  mov r10,[rsp+40]
  jmp return
Ultrawide_patch_AOB:
  jmp newmem
  nop 4
return:
registersymbol(Ultrawide_patch_AOB)
//..
aobscanmodule(patch2,ACIII.exe,89 90 C8 00 00 00 C3) // should be unique
registersymbol(patch2)
patch2:
ret
//...
aobscanmodule(patch3,ACIII.exe,89 81 C8 00 00 00 F3 0F)
patch3:
movss [rcx+000000D8],xmm1
ret
[DISABLE]
Ultrawide_patch_AOB:
  db 48 83 EC 18 4C 8B 54 24 40
unregistersymbol(Ultrawide_patch_AOB)
dealloc(newmem)
//..
patch2:
mov [rax+000000C8],edx
ret
unregistersymbol(patch2)
//...
patch3:
mov [rcx+000000C8],eax
movss [rcx+000000D8],xmm1
ret
unregistersymbol(patch3)
func dump



Assassin's Creed III Liberation Remastered

  1. Method same as III Remastered. Paste assembly code and add it to address list.

Code: Select all

//...
{
#0 -- perfect centred, with bars removed 21:9
#2 -- black bars (default)
#4 -- makes a bit wider, blackbars still visable on 21:9 (16:10? patch)
#6 -- black bars not visible, but hud shifted off the screen
}
define(Patch,#0)
[ENABLE]
aobscanmodule(UltraWidePatch_AOB,ACLiberation.exe,8B 80 C4 00 00 00 89 02) // should be unique
alloc(newmem,$1,UltraWidePatch_AOB)
label(code)
label(return)
newmem:
{$try}
mov eax,Patch
jmp return
code:
{$except}
mov eax,[rax+000000C4]
jmp return

UltraWidePatch_AOB:
  jmp newmem
  nop
return:
registersymbol(UltraWidePatch_AOB)
[DISABLE]
UltraWidePatch_AOB:
db 8B 80 C4 00 00 00
unregistersymbol(UltraWidePatch_AOB)
dealloc(newmem)
func dump



In overall you get

from:

Image

to:

Image



23-03-17: Added ultra wide 21:9 patch for AC3 Lib ...
23-03-13: Added Assassin's Creed III Remastered assembly stretch script. i didn't find black bar visibility opcode or at least any related address. probably is hidden somewhere between xmm registers... Stretch and lock script. Note that you Might lose some performance using this. Main menu could look weird/off. That is normal, in-game looks fine.
23-03-12: Quick tweak at Chronicles : China script. Reduced default float value. Added additional info.
23-03-10: Changed ACRSP.exe to $process (Desmond side-story loads from another ACXXX.exe) // Added AC Chronicles China CElua script (...)
23-03-08: added patch for Revelations...
23-11-16: reviewed.

🙃
Ṯ̸͋͠H̷̻́Ē̵̦̇R̴̛̠̞̾E̷̥̗̎̾ ̷̩̽̂Ì̵̱S̵̲͘ ̷̝̝̽͆S̵̯̒T̷̩͈̃͑Î̶̯̟Ļ̴̬̈L̴̘̱̏̒ ̵̨̟̈́͠T̵͓͎͐I̶̥͈̽M̷̡̛͒E̶͙͗


Post Reply