made some simple scripts for How to Survive 2.
///
Updates:
Update6
- updated item ID list and some scripts (i.e., the 2 inf. building durability scripts and instant fine aim script), the table works on "Build: Oct 26 2016, 18:43:29" now.
Update5.1
- updated the item id dropdown list for the latest version.
Update5
- added instant fine aim.
- added inf. building durability .3
Update4.2
- updated inf. building durability. updated the condition check, and changed the lock method a little bit.
Update4.1
- updated inf. building durability. added a condition check, it should work on buildings only now.
Update4
- added inf. building durability.
Update3
- added no reload.
- fixed hot-key to "restore health to max" (shift-z), it won't set the xp with max health value).
Update2.5
- updated ignore crafting material to ignore crafting/upgrading material. it covers building crafting/upgrading now.
- added some Buildings' id to the [mouseover item] dropdown list.
Update2.4
- separate the create custom types script from enable. activate create custom types once before you activate enable.
Update2.3
- updated the enable script, the custom types would be registered when enable is activated. you may need to delete the 3 custom types you created, then restart CE first, before you can activate enable script again.
- reduced the text concerning the custom types in the post, as they are included in the table already. the custom types' source is still here though, just in case.
- thanks Zanzer for the tip.
Update2.2
- added pointer to xp.
Update2.1
- update the dropdown list for item id, should be completed now.
Update2
- added [mouseover item] script.
Update1
- added inf. item quantity and ignore crafting material.
///
Options:
create custom types
- prepare custom types for player health, xp, and item's quantity.
- activate this script once before activate enable script.
[stats related]:
inf. health
- health won't drop below the min health allowed specified.
- min health allowed can be changed via the table.
- default min health allowed: 1
inf. stamina
- attacking or running won't deplete stamina at all.
inf. hunger/thirst
- hunger and thirst % won't drop below the min hunger/thirst allowed specified.
- current hunger and current thirst can be edited after this script is activated.
- min hunger/thirst allowed can be changed via the table.
- default min hunger/thirst allowed: 0.5 (== 50%)
inf. building durability v1
- all building durabilities won't decrease at all.
- use either this or .3
inf. building durability v2
- all building durabilities won't drop below the min % allowed specified.
- min % allowed can be changed via the table.
- default min % allowed: 50%
- use either this or .2
[weapon/item related]:
instant fine aim
- always critical hit for bows/crossbows/firearms, no need to wait for the crosshair to focus.
no reload
- firearms' ammo clip won't drop below one when fire.
inf. item quantity
- quantity would still drop on consumption (using, crafting, transferring, firing weapons, etc.), but it won't reach zero.
ignore crafting/upgrading material
- allows you to craft any item/building and upgrade without any corresponding materials.
- item(s) being used to craft would still decrease in quantity until it reaches zero, if you still need the item(s) to be used to craft, you should activate inf. item quantity script as well.
[pointers]:
[mouseover item]
- fetch the item id and quantity of the item that the mouse is last pointed at.
- works only on "All" category of Player Inventory and Camp Inventory.
- proper usage: activate this script, back to the game, under "All" category in the Player Inventory or Camp Inventory, point your mouse to the item you want to edit with CE, then alt-tab back to CE WITHOUT moving the mouse, the 2 pointers should be filled with the correct info then.
- dropdown list is prepared for the id, the list should be completed. feel free to share the findings if you find something is missing from the list.
[player]
- xp, health, and max health of the player can be found here.
///
Notes:
- tested on "Build: Oct 26 2016, 18:43:29".
- these scripts are meant to be used in single-player only.
- read the scripts' description above first.
- hot-key available when "enable" is activated:
-- shift-z : restore health to max
- hot-key available when "inf. hunger/thirst" is activated:
-- shift-t : restore hunger and thirst to 100%
- player's health, xp, and item's quantity are encrypted, and the custom types are HTS2_Health, HTS2_EXP, and HTS2_Quantity respectively. they will be registered when enable script is activated, the source can be found below.
- custom type HTS2_Health:
Code:
alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)
alloc(TypeName,256)
alloc(ByteSize,4)
alloc(UsesFloat,1)
alloc(CallMethod,1)
TypeName:
db 'HTS2_Health',0
ByteSize:
dd 4
UsesFloat:
db 1 //Change to 1 if this custom type should be treated as a float
CallMethod:
db 1 //Remove or change to 0 for legacy call mechanism
//The convert routine should hold a routine that converts the data to an integer (in eax)
//function declared as: cdecl int ConvertRoutine(unsigned char *input, PTR_UINT address);
//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
//rdx=address
mov eax,[rcx] //eax now contains the bytes 'input' pointed to
xor eax,BABEEBAB //health encrypt key, refer to "[pointers] > [misc.] > health encrypt key"
ret
[/64-bit]
[32-bit]
//jmp dllname.functionname
//or manual:
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=address of input
//[ebp+c]=address
//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
pop ebp
ret
[/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: cdecl void ConvertBackRoutine(int i, PTR_UINT address, unsigned char *output);
ConvertBackRoutine:
//jmp dllname.functionname
//or manual:
[64-bit]
//parameters: (64-bit)
//ecx=input
//rdx=address
//r8=address of output
//example:
xor ecx,BABEEBAB //health encrypt key, refer to "[pointers] > [misc.] > health encrypt key"
mov [r8],ecx //place the integer at the 4 bytes pointed to by r8
ret
[/64-bit]
[32-bit]
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=input
//[ebp+c]=address
//[ebp+10]=address of output
//example:
push eax
push ebx
mov eax,[ebp+8] //load the value into eax
mov ebx,[ebp+10] //load the output address into ebx
mov [ebx],eax //write the value into the address
pop ebx
pop eax
pop ebp
ret
[/32-bit]
- custom type HTS2_Quantity:
Code:
alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)
alloc(TypeName,256)
alloc(ByteSize,4)
alloc(UsesFloat,1)
alloc(CallMethod,1)
TypeName:
db 'HTS2_Quantity',0
ByteSize:
dd 4
UsesFloat:
db 0 //Change to 1 if this custom type should be treated as a float
CallMethod:
db 1 //Remove or change to 0 for legacy call mechanism
//The convert routine should hold a routine that converts the data to an integer (in eax)
//function declared as: cdecl int ConvertRoutine(unsigned char *input, PTR_UINT address);
//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
//rdx=address
mov eax,[rcx] //eax now contains the bytes 'input' pointed to
xor eax,BABEEBAB //quantity encrypt key, refer to "[pointers] > [misc] > quantity encrypt key"
ret
[/64-bit]
[32-bit]
//jmp dllname.functionname
//or manual:
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=address of input
//[ebp+c]=address
//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
pop ebp
ret
[/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: cdecl void ConvertBackRoutine(int i, PTR_UINT address, unsigned char *output);
ConvertBackRoutine:
//jmp dllname.functionname
//or manual:
[64-bit]
//parameters: (64-bit)
//ecx=input
//rdx=address
//r8=address of output
//example:
xor ecx,BABEEBAB //quantity encrypt code, refer to "[pointers] > [misc.] quantity encrypt code"
mov [r8],ecx //place the integer at the 4 bytes pointed to by r8
ret
[/64-bit]
[32-bit]
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=input
//[ebp+c]=address
//[ebp+10]=address of output
//example:
push eax
push ebx
mov eax,[ebp+8] //load the value into eax
mov ebx,[ebp+10] //load the output address into ebx
mov [ebx],eax //write the value into the address
pop ebx
pop eax
pop ebp
ret
[/32-bit]
- for custom type HTS2_EXP, check darknovax's post.
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