Re: [Request] Symphony of War: The Nephilim Saga
Posted: Mon Jun 13, 2022 9:49 am
i have tried many ways but still failed, cant figure out how to change stats T_T
Community Cheat Tables of Cheat Engine
https://fearlessrevolution.com/
Code: Select all
id (memory),id (save),name
1,0,HP
3,6,Morale
5,7,STR
7,8,Armor
9,9,MAG
11,10,LDR
13,11,SKL
15,12,Reputation
Interesting find... would it be possible to write up a simple instruction how to search for the stats with CE, for us less-savy peeps?variante wrote: ↑Mon Jun 13, 2022 10:47 amStats are stored in id-value pairs where id tells which stat, and value says how much. Stat bonuses for a character are stored in a dynamic array, meaning the number of entries depends on how many bonuses have been applied. The ids are stored differently in save (in @param_plus field above the character name) than in memory. As far as I know, the ids are as follows:Not sure how values are encoded in the save. Also, stats are capped at 255, HP at 999.stat ids
Code: Select all
id (memory),id (save),name 1,0,HP 3,6,Morale 5,7,STR 7,8,Armor 9,9,MAG 11,10,LDR 13,11,SKL 15,12,Reputation
big stats
Thanks for the hints, i hate rpgmaker lolvariante wrote: ↑Mon Jun 13, 2022 10:47 amStats are stored in id-value pairs where id tells which stat, and value says how much. Stat bonuses for a character are stored in a dynamic array, meaning the number of entries depends on how many bonuses have been applied. The ids are stored differently in save (in @param_plus field above the character name) than in memory. As far as I know, the ids are as follows:Not sure how values are encoded in the save. Also, stats are capped at 255, HP at 999.stat ids
Code: Select all
id (memory),id (save),name 1,0,HP 3,6,Morale 5,7,STR 7,8,Armor 9,9,MAG 11,10,LDR 13,11,SKL 15,12,Reputation
big stats
^^ Can you share the save file that has been adjusted to 999 HP - 255 stats ^^ thank youvariante wrote: ↑Mon Jun 13, 2022 10:47 amStats are stored in id-value pairs where id tells which stat, and value says how much. Stat bonuses for a character are stored in a dynamic array, meaning the number of entries depends on how many bonuses have been applied. The ids are stored differently in save (in @param_plus field above the character name) than in memory. As far as I know, the ids are as follows:Not sure how values are encoded in the save. Also, stats are capped at 255, HP at 999.stat ids
Code: Select all
id (memory),id (save),name 1,0,HP 3,6,Morale 5,7,STR 7,8,Armor 9,9,MAG 11,10,LDR 13,11,SKL 15,12,Reputation
big stats
Save games are in \AppData\Roaming\NephilimTheRedFear wrote: ↑Tue Jun 14, 2022 2:31 amHow do I find the saves? When I check the savedata folder the only thing in there is "steam_autocloud.vdf"
When I tried to drag that into saveeditor online it didn't work
See @rinnioveraci post in page 2Nilaru wrote: ↑Tue Jun 14, 2022 2:55 amSave games are in \AppData\Roaming\NephilimTheRedFear wrote: ↑Tue Jun 14, 2022 2:31 amHow do I find the saves? When I check the savedata folder the only thing in there is "steam_autocloud.vdf"
When I tried to drag that into saveeditor online it didn't work
I tried saveeditonline and it says the file is not supported
latios507 wrote: ↑Sun Jun 12, 2022 5:42 amI'm sorry but how do you add this code into CE? That is indeed helpful since we don't have to add the *2+1 to our valuesnos4r2 wrote: ↑Sun Jun 12, 2022 4:37 amI think you can use this to add rpgm game value type so you can search directly for rpgm game no need to do calculation anymore
i want to give credit but i just can't remember who post it but i'm pretty sure i got it from this forum one of the mod? or admin post it here ( add mine age ago so can't really remember ) i edit mine and copy all of the code and repost here
Code: Select all
alloc(TypeName,256) alloc(ByteSize,4) alloc(PreferedAlignment, 4) alloc(ConvertRoutine,1024) alloc(ConvertBackRoutine,1024) TypeName: db 'RPG VX type',0 ByteSize: dd 4 PreferedAlignment: dd 1 //The convert routine should hold a routine that converts the data to an nteger (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: [32-bit] push ebp mov ebp,esp push ecx mov ecx,[ebp+8] [/32-bit] //at this point ecx contains the address where the bytes are stored //put the bytes into the eax register mov eax,[ecx] //second fun fact, addressing with 32-bit registers doesn't work in 64-bit, it becomes a 64-bit automatically (most of the time) shr eax,1 //shift right by 1 bit (divide by 2) //and now exit the routine [64-bit] ret [/64-bit] [32-bit] 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: [32-bit] push ebp mov ebp,esp push edx //save the registers push ecx mov edx,[ebp+0c] mov ecx,[ebp+08] [/32-bit] //at this point edx contains the address to write the value to //and ecx contains the value push eax push edx mov edx,[edx] //edx now contains the original value and edx,1 //only save the first bit mov eax,ecx //eax gets the user input value shl eax,1 //shift left by 1 bit (multiply by 2) or eax,edx //add the bits of the original value pop edx mov [edx],eax //write the new value into the old value pop eax [64-bit] //everything is back to what it was, so exit ret [/64-bit] [32-bit] //cleanup first pop ecx pop edx pop ebp ret 8 [/32-bit]
Thanks for sharing!
Edited:
Oh nvm, I figured it out. For those who are curious/lost just like me:
1) Start Symphony of War & CE, then select the process
2) Right Click on the 'Value Type' on the Right side of CE (just below the Scan Type)
3) Select 'Define new custom type (Auto Assembler)'
4) Paste the code above
5) ???
6) Profit. The Value type will display 'RPG VX Type' if you have done it correctly.
Hi do you know how to find stat values like in variante's post? I'm clueless at this point. Also, can you find and edit an item with only 1 quantity? Thanks.latios507 wrote: ↑Tue Jun 14, 2022 11:13 amI figured out how to change the tech tree point! You can't modify it directly though, but you can change the Faction Points ("FP") high enough so that you can earn tech tree points.
FP still uses the *2+1 formula but if you want to make your life simple, just add this code so that your Value Type is RPGVX & you don't have to key in the *2+1 formula. Refer to the prior post below
At this point, you can only get tech points through FPs. FPs ARE CUMULATIVE.Spoiler
latios507 wrote: ↑Sun Jun 12, 2022 5:42 amI'm sorry but how do you add this code into CE? That is indeed helpful since we don't have to add the *2+1 to our valuesnos4r2 wrote: ↑Sun Jun 12, 2022 4:37 amI think you can use this to add rpgm game value type so you can search directly for rpgm game no need to do calculation anymore
i want to give credit but i just can't remember who post it but i'm pretty sure i got it from this forum one of the mod? or admin post it here ( add mine age ago so can't really remember ) i edit mine and copy all of the code and repost here
Code: Select all
alloc(TypeName,256) alloc(ByteSize,4) alloc(PreferedAlignment, 4) alloc(ConvertRoutine,1024) alloc(ConvertBackRoutine,1024) TypeName: db 'RPG VX type',0 ByteSize: dd 4 PreferedAlignment: dd 1 //The convert routine should hold a routine that converts the data to an nteger (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: [32-bit] push ebp mov ebp,esp push ecx mov ecx,[ebp+8] [/32-bit] //at this point ecx contains the address where the bytes are stored //put the bytes into the eax register mov eax,[ecx] //second fun fact, addressing with 32-bit registers doesn't work in 64-bit, it becomes a 64-bit automatically (most of the time) shr eax,1 //shift right by 1 bit (divide by 2) //and now exit the routine [64-bit] ret [/64-bit] [32-bit] 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: [32-bit] push ebp mov ebp,esp push edx //save the registers push ecx mov edx,[ebp+0c] mov ecx,[ebp+08] [/32-bit] //at this point edx contains the address to write the value to //and ecx contains the value push eax push edx mov edx,[edx] //edx now contains the original value and edx,1 //only save the first bit mov eax,ecx //eax gets the user input value shl eax,1 //shift left by 1 bit (multiply by 2) or eax,edx //add the bits of the original value pop edx mov [edx],eax //write the new value into the old value pop eax [64-bit] //everything is back to what it was, so exit ret [/64-bit] [32-bit] //cleanup first pop ecx pop edx pop ebp ret 8 [/32-bit]
Thanks for sharing!
Edited:
Oh nvm, I figured it out. For those who are curious/lost just like me:
1) Start Symphony of War & CE, then select the process
2) Right Click on the 'Value Type' on the Right side of CE (just below the Scan Type)
3) Select 'Define new custom type (Auto Assembler)'
4) Paste the code above
5) ???
6) Profit. The Value type will display 'RPG VX Type' if you have done it correctly.
In other words, if you see for e.g. 57/250, it's NOT actually 57 points. It could be 157 (e.g. if you accumulated 100 FP before, you have to add it to your current value).
TL;DR Math.
It's a pain in the ass but this is what I did to scan the FP. To make your life simpler/easier, you should do it when you have a few conversation events so it's easier to make it work:
[*] Select Value type: RPG VX Type or you can use the 4 Bytes but you need to input *2+1
I'm using RPG VX Type as the value type to make the illustrations below simpler.
1) CE; Select Scan Type: Unknown Initial Value & Hit First Scan
2) In the game; go to supports > Conversation > Do the conversation events that you have. Once the event has ended, input how many FP points you earned during the event.
3) To do so, select Scan Type: Increased value by ... and input the FP points you earned (e.g. 5).
4) Hit Enter. Rinse and repeat with your other events until you can narrow down to just a single address or you're smart enough to guess the address from a list of addresses. I leave that to your judgement.
5) Once you figured out the address, just change it to a higher value & hit enter. Just open any menu (e.g. Marketplace) & exit to see the changes. See the Appendix section below
6) For the changes to take effect, you need to make the game 'think' that you have earned FP legitimately. You can either do any one of it:
- Start another conversation (if you have any spare ones) ~ the easiest
- Start an Arena Mission, try to Force surrender some enemy squad & finish it
- Start & finish another Chapter/Story Mission
Appendix sectionI think it's possible to do it during Chapter missions too, where you get FP from seizing towns/structures but it's a bit pain in the ass to do so because you have to memorize how many FPs you earned then right click in-game > Organize to check the value.Spoiler
Here's an example how it works since FP is a cumulative value. Notice that I have accumulated 3000 FP points previously (as shown in cheat engine), but the in-game is only showing 103 points. So I technically have 3103 FP (3000 FP previously accumulated + 103 FP shown on screen):
Now let's say I want to change my in-game FP to 178 points, an increment of 78 points... so that means I have to key-in 3178 in the cheat Engine. and voila! it works
Now, make the game 'think' that you earned FP legitimately. Here's the end result;
Hopefully it helps other users & potential table makers. You can also edit item quantity in your inventory, it also uses *2+1 or like I said before, make your life easier by setting up that RPG VX Value type code. I really hope someone can make a proper table for this gem of a game. I'm just a newbie CE user, so this is as far as I can go since I'm not familiar on how to do the scanning so you can get the permanent address.
Nope, no idea how to use it. You need minimum 2 quantity to edit/find their addresses provided you know what is the address pattern. This usually requires you to find & edit another item beforehand.owlet12345 wrote: ↑Tue Jun 14, 2022 12:29 pmHi do you know how to find stat values like in variante's post? I'm clueless at this point. Also, can you find and edit an item with only 1 quantity? Thanks.