Gothic 3 Table

Upload your cheat tables here (No requests)
Post Reply
User avatar
SilverRabbit90
Table Makers
Table Makers
Posts: 214
Joined: Fri Jan 15, 2021 12:01 am
Reputation: 191

Gothic 3 Table

Post by SilverRabbit90 »

Here is my Table for Gothic 3


Spoiler
Image
.

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

moonity
Noobzor
Noobzor
Posts: 8
Joined: Sun Jul 08, 2018 11:20 am
Reputation: 1

Re: Gothic 3 Table

Post by moonity »

Nice one. You should also start deleting all the created dissect data structures before releasing tables (Memory View - CTRL+D - File - Delete Structures) since they are being saved inside your .ct file, the difference in file size is immerse
Screenshot 1
Image
As for your table, some of the compares appear to be unstable with Parallel Universe patch. And yeah, that's a clever way to compare, I actually tried to make the game return the right address all the time instead of having to compare but to no avail. Any way, here's the problem with some of the pointers:
Screenshot 2
Image
UPD:
I just tried looking at RSP's E4 offset and it doesn't seem to ever return these values? How did you even find these values :ph34r:

UPD 2:
I guess you've done RSP comparison while your code was already placed in allocated newmem? That's really clever. Any way, I adjusted some comparisons inside your "get stats" code and it seems to work just fine w/ Parallel Universe patch and Update Pack (beta) for community patch installed. Thanks for your hard work! :roll:

Code: Select all

{ Game   : Gothic3.exe
  Version: 
  Date   : 2022-08-27
  Author : SilverRabbit

  This script does blah blah blah
}

[ENABLE]

aobscan(SetAllStatsToA,8B 41 14 03 41 10) // should be unique
alloc(newmem,$1000)

//alloc(allStats,4)

//allStats:
//dd (int)100

label(code)
label(return)
label(seeStrenght seeHuntingSkill seeKnowledge seeSmithing seeThieving seeAlchemy seeLifeEnergy seeEndurance seeMana seePtrBlades seePtrImpact seePtrMissiles seePtrFire seePtrIce seePtrEnergy)
registersymbol(seeStrenght seeHuntingSkill seeKnowledge seeSmithing seeThieving seeAlchemy seeLifeEnergy seeEndurance seeMana seePtrBlades seePtrImpact seePtrMissiles seePtrFire seePtrIce seePtrEnergy)

newmem:
{
RSP
Strenght
off 4 my 4177526240
off 8 my 4169479848
off 3C my 4045421676
off 54 my 4045421676
off 5C my 4177526240
off 64 my 4169479848
off 68 my 4169479848
off 70 my 4177526240
off 7C my 4169479848
off 84 my 4169479848
off 98 my 4045421676
off E4 my 212
off EC my 232
off F4 my 212
off FC my 232
}

cmp [rsp+E4],(int)212
jne Hunting

mov [seeStrenght],ecx

Hunting:

cmp [rsp+E4],(int)235
jne Knowledge

mov [seeHuntingSkill],ecx

Knowledge:

cmp [rsp+E4],(int)258
jne Smithing

mov [seeKnowledge],ecx

Smithing:

cmp [rsp+E4],(int)281
jne Thieving

mov [seeSmithing],ecx

Thieving:

cmp [rsp+E4],(int)304
jne Alchemy

mov [seeThieving],ecx

Alchemy:

cmp [rsp+E4],(int)327
jne LifeEnergy

mov [seeAlchemy],ecx

LifeEnergy:

cmp [rsp+E4],(int)350
jne Endurance

mov [seeLifeEnergy],ecx

Endurance:

cmp [rsp+E4],(int)373
jne Mana

mov [seeEndurance],ecx

Mana:

cmp [rsp+E4],(int)396
jne PtrBlades

mov [seeMana],ecx

PtrBlades:

cmp [rsp+E4],(int)481
jne PtrImpact

mov [seePtrBlades],ecx

PtrImpact:

cmp [rsp+E4],(int)504
jne PtrMissiles

mov [seePtrImpact],ecx

PtrMissiles:

cmp [rsp+E4],(int)527
jne PtrFire

mov [seePtrMissiles],ecx

PtrFire:

cmp [rsp+E4],(int)550
jne PtrIce

mov [seePtrFire],ecx

PtrIce:

cmp [rsp+E4],(int)573
jne PtrEnergy

mov [seePtrIce],ecx

PtrEnergy:

cmp [rsp+E4],(int)596
jne code

mov [seePtrEnergy],ecx

//mov eax,[allStats]

code:
//mov [ecx+14],(int)999
//mov  [ecx+14],eax
//mov  [ecx+10],eax
  mov eax,[ecx+14]
  add eax,[ecx+10]
  jmp return

  seeStrenght:
  dd (int)0

  seeHuntingSkill:
  dd (int)0

  seeKnowledge:
  dd (int)0

  seeSmithing:
  dd (int)0

  seeThieving:
  dd (int)0

  seeAlchemy:
  dd (int)0

  seeLifeEnergy:
  dd (int)0

  seeEndurance:
  dd (int)0

  seeMana:
  dd (int)0

  seePtrBlades:
  dd (int)0

  seePtrImpact:
  dd (int)0

  seePtrMissiles:
  dd (int)0

  seePtrFire:
  dd (int)0

  seePtrIce:
  dd (int)0

  seePtrEnergy:
  dd (int)0

SetAllStatsToA:
  jmp newmem
  nop
return:
registersymbol(SetAllStatsToA)

[DISABLE]

SetAllStatsToA:
  db 8B 41 14 03 41 10

unregistersymbol(*)
dealloc(*)

{
// ORIGINAL CODE - INJECTION POINT: 03720031

0371FFFF:                       - ?? 
03720000: 81 7E 48 01 00 00 80  - cmp [esi+48],80000001
03720007: 75 28                 - jne 03720031
03720009: 0F 1F 40 00           - nop dword ptr [eax+00]
0372000D: 89 0D 3C 00 72 03     - mov [seeHp],ecx
03720013: 89 0D 40 00 72 03     - mov [seeMaxHp],ecx
03720019: 89 0D 44 00 72 03     - mov [seeEndurance],ecx
0372001F: 89 0D 48 00 72 03     - mov [seeMaxEndurance],ecx
03720025: 89 0D 4C 00 72 03     - mov [seeMana],ecx
0372002B: 89 0D 50 00 72 03     - mov [seeMaxMana],ecx
// ---------- INJECTING HERE ----------
03720031: 8B 41 14              - mov eax,[ecx+14]
// ---------- DONE INJECTING  ----------
03720034: 03 41 10              - add eax,[ecx+10]
03720037: E9 4A 38 D2 FD        - jmp Game.gCAttribute::GetValue+6
seeHp: 50                    - push eax
0372003D: F8                    - clc 
0372003E: CB                    - ret 
0372003F: D7                    - xlatb 
seeMaxHp: 50                    - push eax
03720041: F8                    - clc 
03720042: CB                    - ret 
03720043: D7                    - xlatb 
}
Also, protection values show your initial value so it doesn't count your armor's nor spells protection. Editing it will add up to your current protection value

Post Reply

Who is online

Users browsing this forum: admantx, Google [Bot], Google Adsense [Bot], jonaaa