Updates:
Update9.4
- changed Time of Day to Time of Day - Outdoor.
- added pointers to Time of Day - Indoor. remember to create a Custom Type for this pointer base on the info at the end of this post.
- updated Enable script, Align Sun Position with Time of Day would align Sun Position correctly when setting the Time of Day - Outdoor between 0 am to 5 am now. (it would assign a negative value to the sun position if the time of day is set between 0 to 5 before this update.)
Update9.3
- I just realized it's possible the Custom Type won't be saved into the table. the Custom Type is attached in this post just in case.
Update9.2:
- changed Hidden Time of Day to Time of Day
- created a custom type (Time of Day (Bound by Flame)) for the Time of Day
- updated the Enable script, Time of Day and Sun Position should always show the correct values now. (before this update, they won't show the correct values, for example, in chapter 1 village.)
- updated Stop Time of Day script, it locks only the Time of Day now, and won't affect the Sun Position anymore. to lock the Sub Position with this update, you have to activate both this script and Align Sun Position with Time of Day script together.
- updated the descriptions of the affected scripts and pointers to the changes.
Update9.1:
- (sigh..) updated the Align Sun Position with Time of Day script. it would crash the game if you activated this script before you load a save game or start a new game. now fixed.
Update9:
- updated the description of the time of day, as they were WRONG....
- added pointer to Sun Position.
- added 2 scripts: Align Sun Position with Time of Day and Stop Time of Day
Update8:
- added pointers to time of day.
Update7
- added Interrupt with Every Attack and Max Weight Multiplier
Update6
- added Instant Charge
- added pointers found by from666to777
Update5
- added TONS of character stats pointers. check Table Extra for what stats are NOT covered.
Update4.1
- changed(or corrected) an offset of a cmp inside the Inf. Item script, Gold won't decrease when shopping now.
- changed the script name from Inf. Item to Inf. Gold / Items
Update4
- added Easy Kill.
Update3.1
- uploaded a wrong table! fixed.
Update3
- updated the Enable and Undead scripts, Undead works on the companions now, and the pointer to Vulcan's HP should shows up even when your sword is sheathed.
- added some more pointers based on the info from this thread in the request page.
Update2
- added some more pointers
- added Inf. MP
Update1
- Inf. Items would set the current usable items' quantity to 1 upon use, now fixed.
///
Scripts:
Undead
- HP still drops but Vulcan and the companions won't be killed.
Easy Kill
- you need to activate Undead first if you want to activate this script.
- when activated, you should be able to kill enemies with 1 hit (may need 2 sometimes).
- not thoroughly tested, not sure what would happened, for example, when used on boss. so, be cautious. (setting up hotkeys for easier activation/deactivation is advised)
Inf. MP
- Mana won't decreased at all
Instant Charge
- for Circular attack and Assault.
Interrupt with Every Attack
- all attacks, either two-handed weapons, daggers, crossbow or magic, should interrupt the enemies on hit.
Inf. Gold / Items
- Gold won't decrease when shopping.
- Components won't decrease when crafting.
- Usable Items stop decreasing when they reaches 1.
Max Weight Multiplier
- as the weight pointers either recalculate as you walk around, or get rest on loading game, using this script is a more stable way to increase your max Weight.
- default multiplier: x4
Align Sun Position with Time of Day
- with this script activated, changing the Time of Day - Outdoor would update the Sun Position automatically.
- as expected, won't have any effect when in-door.
Stop Time of Day
- lock the time of day
- you have to activate Align Sun Position with Time of Day together in order to lock the sun position as well.
///
Pointers (not all the pointers in the table are shown below):
max Weight and max Weight Buff
- it seems the first one is being recalculate regularly, so changing the Buff value should be a better idea. still, any buff you added would be reset on savegame loaded.
Skill Points used and Feat Points used
- the values are the total points you used, as the current skill points/feat points are calculated from these. basically you just lock these 2 at zero and you would have infinite usage of the points.
Gold
- would show the correct value when you're inside the menu.
- if you're not sure, check if ref_name (under the Gold address) is showing "item_gold".
Time of Day - Outdoor
- values: 0 to 24.
- it shows a random number when you're indoor.
- it uses the custom type Time of Day (Bound by Flame). if you can't find it in the table, check the Notes in the end of this post.
Time of Day - Indoor
- values: 0 to 24.
- it shows "??" or a random number when you're outdoor.
- it uses the custom type Time of Day - Indoor (Bound by Flame). if you can't find it in the table, check the Notes in the end of this post.
Actual Time of Day
- for reference only, as it is being recalculated constantly.
- you should edit the Time of Day - Outdoor or Time of Day - Indoor instead.
Sun Position
- (Time of Day - Outdoor - 6) x2.5
- it has its own timer, it won't be updated automatically by changing the Time of Day - Outdoor.
- use the Align Sun Position with Time of Day to have the Sun Position updated automatically according to the Time of Day - Outdoor.
finally, almost all the pointers to the character stats, check Table Extra for a list of stats that are NOT covered.
///
Notes:
- the pointers to Skill Points used and Feat Points used are based on the info BDHtP shared.
- the pointers to HP Regen (Outdoor), MP Regen (Outdoor), and max Weight Buff are found by from666to777
- if the Time of Day - Outdoor values are different from the Actual Time of Day, use the aa script below to create a new custom type (Auto Assembler), and make sure the value type of Time of Day - Outdoor is set to Time of Day (Bound by Flame).
Code:
alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)
alloc(TypeName,256)
alloc(ByteSize,4)
alloc(UsesFloat,1)
label(Read32)
TypeName:
db 'Time of Day (Bound by Flame)',0
ByteSize:
dd 4
UsesFloat:
db 1 //Change to 1 if this custom type should be treated as a float
//The convert routine should hold a routine that converts the data to an integer (in eax)
//function declared as: stdcall int ConvertRoutine(unsigned char *input);
//Note: Keep in mind that this routine can be called by multiple threads at the same time.
ConvertRoutine:
//jmp dllname.functionname
[64-bit]
//or manual:
//parameters: (64-bit)
//rcx=address of input
mov eax,[rcx] //eax now contains the bytes 'input' pointed to
ret
[/64-bit]
[32-bit]
//jmp dllname.functionname
//or manual:
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=input
//example:
mov eax,[ebp+8] //place the address that contains the bytes into eax
//mov eax,[eax] //place the bytes into eax so it's handled as a normal 4 byte value
push eax
fld dword ptr [eax]
mov dword ptr [ebp+8],(float)6
fadd dword ptr [ebp+8]
mov dword ptr [ebp+8],(float)24
fcom dword ptr [ebp+8]
fnstsw ax
test ah,1
jne Read32
fsub dword ptr [ebp+8]
Read32:
pop eax
fstp dword ptr [ebp+8]
push ecx
mov ecx,[ebp+8]
mov [ebp+8],eax
mov eax,ecx
pop ecx
pop ebp
ret 4
[/32-bit]
//The convert back routine should hold a routine that converts the given integer back to a row of bytes (e.g when the user wats to write a new value)
//function declared as: stdcall void ConvertBackRoutine(int i, unsigned char *output);
ConvertBackRoutine:
//jmp dllname.functionname
//or manual:
[64-bit]
//parameters: (64-bit)
//ecx=input
//rdx=address of output
//example:
mov [rdx],ecx //place the integer the 4 bytes pointed to by rdx
ret
[/64-bit]
[32-bit]
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=input
//[ebp+c]=address of output
//example:
push eax
push ebx
mov eax,[ebp+8] //load the value into eax
mov ebx,[ebp+c] //load the address into ebx
fld dword ptr [ebp+8]
mov dword ptr [ebp+8],(float)6
fsub dword ptr [ebp+8]
fstp dword ptr [ebp+8]
mov eax,[ebp+8]
mov [ebx],eax //write the value into the address
pop ebx
pop eax
pop ebp
ret 8
[/32-bit]
- if the Time of Day - Indoor values are different from the Actual Time of Day, use the aa script below to create a new custom type (Auto Assembler), and make sure the value type of Time of Day - Indoor is set to Time of Day - Indoor (Bound by Flame).
Code:
alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)
alloc(TypeName,256)
alloc(ByteSize,4)
alloc(UsesFloat,1)
label(Read32)
TypeName:
db 'Time of Day - Indoor (Bound by Flame)',0
ByteSize:
dd 4
UsesFloat:
db 1 //Change to 1 if this custom type should be treated as a float
//The convert routine should hold a routine that converts the data to an integer (in eax)
//function declared as: stdcall int ConvertRoutine(unsigned char *input);
//Note: Keep in mind that this routine can be called by multiple threads at the same time.
ConvertRoutine:
//jmp dllname.functionname
[64-bit]
//or manual:
//parameters: (64-bit)
//rcx=address of input
mov eax,[rcx] //eax now contains the bytes 'input' pointed to
ret
[/64-bit]
[32-bit]
//jmp dllname.functionname
//or manual:
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=input
//example:
mov eax,[ebp+8] //place the address that contains the bytes into eax
//mov eax,[eax] //place the bytes into eax so it's handled as a normal 4 byte value
push eax
fld dword ptr [eax]
mov dword ptr [ebp+8],(float)8
fmul dword ptr [ebp+8]
mov dword ptr [ebp+8],(float)15
fdiv dword ptr [ebp+8]
mov dword ptr [ebp+8],(float)6
fadd dword ptr [ebp+8]
mov dword ptr [ebp+8],(float)24
fcom dword ptr [ebp+8]
fnstsw ax
test ah,1
jne Read32
fsub dword ptr [ebp+8]
Read32:
pop eax
fstp dword ptr [ebp+8]
push ecx
mov ecx,[ebp+8]
mov [ebp+8],eax
mov eax,ecx
pop ecx
pop ebp
ret 4
[/32-bit]
//The convert back routine should hold a routine that converts the given integer back to a row of bytes (e.g when the user wats to write a new value)
//function declared as: stdcall void ConvertBackRoutine(int i, unsigned char *output);
ConvertBackRoutine:
//jmp dllname.functionname
//or manual:
[64-bit]
//parameters: (64-bit)
//ecx=input
//rdx=address of output
//example:
mov [rdx],ecx //place the integer the 4 bytes pointed to by rdx
ret
[/64-bit]
[32-bit]
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=input
//[ebp+c]=address of output
//example:
push eax
push ebx
mov eax,[ebp+8] //load the value into eax
mov ebx,[ebp+c] //load the address into ebx
fld dword ptr [ebp+8]
mov dword ptr [ebp+8],(float)6
fsub dword ptr [ebp+8]
mov dword ptr [ebp+8],(float)8
fld dword ptr [ebp+8]
mov dword ptr [ebp+8],(float)15
fdiv dword ptr [ebp+8]
fstp dword ptr [ebp+8]
fdiv dword ptr [ebp+8]
fstp dword ptr [ebp+8]
mov eax,[ebp+8]
mov [ebx],eax //write the value into the address
pop ebx
pop eax
pop ebp
ret 8
[/32-bit]
How to use this cheat table?
- Install Cheat Engine
- Double-click the .CT file in order to open it.
- Click the PC icon in Cheat Engine in order to select the game process.
- Keep the list.
- Activate the trainer options by checking boxes or setting values from 0 to 1