Larian Banner: Baldur's Gate Patch 9
Previous Thread
Next Thread
Print Thread
Page 33 of 33 1 2 31 32 33
Joined: Mar 2018
W
stranger
Offline
stranger
W
Joined: Mar 2018
How can I swap 1st and 2nd player data by editing global.lsx or with memory editor?
I tried to just swap character nodes, but after that they couldn't use their equipment because they were using wrong attributes (not shown in UI nor mem edit)

Joined: Mar 2018
A
stranger
Offline
stranger
A
Joined: Mar 2018
Each item has
Code
attribute id="owner" 
and
Code
 attribute id="inventory" 
attributes. The former determines the ownership of the item, and the latter determines which the inventory the item is in. You have to find out the owner Id and inventory id, and swap them.

Joined: Dec 2014
F
stranger
Offline
stranger
F
Joined: Dec 2014
hey is there a tool to change/add stats/skills points? my d os ee version is 2.0 and something more, ty


so stresing looking for a way to cheat four like 2 days

Last edited by ffffffffffffk; 24/04/18 08:12 PM.
Joined: Mar 2003
Location: Canada
Support
Offline
Support
Joined: Mar 2003
Location: Canada

Other than the EE save editor, you can use CheatEngine (as mentioned above) to add/change skill and talent points, etc.

For the install you would either need to uncheck some extra 'offers', or install it while offline. There is also a no-install rar file on the downloads page. If you don't already have an archive manager that can handle rar files, try the freeware 7-Zip.

Here is a CheatEngine table I downloaded from this topic (broken link) when it was still available. It wasn't updated for the latest version of the game, but works for what I've tried with it (adjusting abilities and talents), in CheatEngine version 6.6 (haven't updated to 6.7 yet).

Start the game and load a save, open the table (I just extracted it into the CheatEngine install folder), click the 'Select a process to open' button at the top left (highlighted with a flashing box cycling between red and green), select EoCApp.exe (preceded by a hex number, ie 00001FD0-EoCApp.exe) and click the Open button and then Yes. In the bottom list, select Hero Pointers, then go through Hero 1 to 4 to identify the right character. There is an 'Upgrade Points' section where you can add attribute, ability and talent points, and sections for each of those where you can remove/adjust values. Double click the value to change, and when you are done, switch back to the game to save/load (some things take effect immediately, character changes require a save/load to get them to show up in-game).

If you can not select the boxes at the bottom in CheatEngine, exit the program and the game and start over. That happened to me a couple times. There may be an easier fix, but I haven't used CheatEngine enough to bother trying anything else.

Raze #645394 25/04/18 05:40 PM
Joined: Dec 2014
F
stranger
Offline
stranger
F
Joined: Dec 2014
Originally Posted by Raze

Other than the EE save editor, you can use CheatEngine (as mentioned above) to add/change skill and talent points, etc.

For the install you would either need to uncheck some extra 'offers', or install it while offline. There is also a no-install rar file on the downloads page. If you don't already have an archive manager that can handle rar files, try the freeware 7-Zip.

Here is a CheatEngine table I downloaded from this topic (broken link) when it was still available. It wasn't updated for the latest version of the game, but works for what I've tried with it (adjusting abilities and talents), in CheatEngine version 6.6 (haven't updated to 6.7 yet).

Start the game and load a save, open the table (I just extracted it into the CheatEngine install folder), click the 'Select a process to open' button at the top left (highlighted with a flashing box cycling between red and green), select EoCApp.exe (preceded by a hex number, ie 00001FD0-EoCApp.exe) and click the Open button and then Yes. In the bottom list, select Hero Pointers, then go through Hero 1 to 4 to identify the right character. There is an 'Upgrade Points' section where you can add attribute, ability and talent points, and sections for each of those where you can remove/adjust values. Double click the value to change, and when you are done, switch back to the game to save/load (some things take effect immediately, character changes require a save/load to get them to show up in-game).

If you can not select the boxes at the bottom in CheatEngine, exit the program and the game and start over. That happened to me a couple times. There may be an easier fix, but I haven't used CheatEngine enough to bother trying anything else.

hi and ty, but i cant, i did all you said but when i click upgrade points > base adress and then any of them (attribute, ability, talents) windows make a sound and dont let me mark/click them and i cant change the value
and the value is set ?? and if i tru to change it is set in red and when i accept is back to ??

sorry for my english

Joined: Jun 2018
T
stranger
Offline
stranger
T
Joined: Jun 2018
I can't for the life of me get this to work. I launch the editor and put the paths to the files but when I click load nothing happens. Any idea on how to fix this? I just want to respec instead of starting over.

Joined: Mar 2003
Location: Canada
Support
Offline
Support
Joined: Mar 2003
Location: Canada

You're playing D:OS Classic?
After running MooseEdit and entering the paths, do you get a list of saves in the box just below that? (should list the profile name and save name for each entry)
You need to select a specific save in the list (which should show the screenshot preview and information to the right) before clicking on the Load button on the bottom.

Joined: Nov 2018
V
stranger
Offline
stranger
V
Joined: Nov 2018
divinity ee version editor plz

Joined: May 2019
stranger
Offline
stranger
Joined: May 2019
Hi, I'm a big fan of the game and would like to say thanks for supporting Linux!

I don't know if this thread is still alive but I'm currently trying to write a basic level editor for DOS-EE Linux.

I'm getting stuck on Crc32 errors, making me think maybe the linux version of the game uses a different Crc32 implementation?

I started by trying to port: https://github.com/tmxkn1/D-OS-Save-Editor

which relies on: https://github.com/Norbyte/lslib

Instead of porting lslib I simply ripped out the bits needed to support D-OS-Save-Editor for now. Some of the C++ is windows specific, specifically crc32.cpp so I re-wrote it in C#. You can see my port here: https://gist.github.com/SamAmco/5b1f319f0ff9f58875b27707550c4220

My C++ skills aren't amazing so I suppose it's possible I got something slightly wrong but right now I'm getting the following error:


[i]Unhandled Exception:
System.AggregateException: One or more errors occurred. (CRC check failed on file 'Globals.lsf', archive is possibly corrupted. Expected F657840E, got CDE7075C) ---> System.IO.InvalidDataException: CRC check failed on file 'Globals.lsf', archive is possibly corrupted. Expected F657840E, got CDE7075C
at LSLib.LS.PackagedFileInfo.MakeStream () [0x000f6] in <227448a98e43416eb2ab52cf6538eb7e>:0
at LSLib.LS.Packager.UncompressPackage (System.String packagePath, System.String outputPath) [0x000f6] in <227448a98e43416eb2ab52cf6538eb7e>:0
at D_OS_Save_Editor.Savegame.UnpackSavegameAsync (System.IProgress`1[T] progress, System.Boolean metaOnly) [0x000b2] in <d2cd6ce312a0468782052565a30df527>:0
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.Wait (System.Int32 millisecondsTimeout, System.Threading.CancellationToken cancellationToken) <0x7fc51a233b60 + 0x000bc> in <e5dad02f71314095bddb65a504a4b77d>:0
at System.Threading.Tasks.Task.Wait () <0x7fc51a233ab0 + 0x0000c> in <e5dad02f71314095bddb65a504a4b77d>:0
at DivinityLinuxSaveEditor.MainClass.Main (System.String[] args) [0x00026] in <d2cd6ce312a0468782052565a30df527>:0
---> (Inner Exception #0) System.IO.InvalidDataException: CRC check failed on file 'Globals.lsf', archive is possibly corrupted. Expected F657840E, got CDE7075C
at LSLib.LS.PackagedFileInfo.MakeStream () [0x000f6] in <227448a98e43416eb2ab52cf6538eb7e>:0
at LSLib.LS.Packager.UncompressPackage (System.String packagePath, System.String outputPath) [0x000f6] in <227448a98e43416eb2ab52cf6538eb7e>:0
at D_OS_Save_Editor.Savegame.UnpackSavegameAsync (System.IProgress`1[T] progress, System.Boolean metaOnly) [0x000b2] in <d2cd6ce312a0468782052565a30df527>:0 <---[/i]


Can anyone provide me any insight on this? I would skip the CRC altogether but presumably I'll need to be able to create a valid CRC to convert back to LSF/LSV again after editing the LSX?

Perhaps I'm on the wrong lines completely? I could try porting MooseEdit instead? I don't know if the source is up to date and works for EE though?

Last edited by SamAmco; 29/05/19 05:20 PM. Reason: Further questions
Joined: Apr 2013
N
addict
Offline
addict
N
Joined: Apr 2013
Hi,

Working with binaries this way in C# is tricky because of the runtime's tendency to treat literals as int32 (among others) and the different casting/type promotion rules in C++ and C#, so it's better to just use an existing library that's known to work rather than directly convert C++ bit-magic to C#. The CRC implementation is standard CRC-32 with standard polynomials, so any existing CRC32 lib will work. The reason my version is hand-rolled C++ is because all of the pure-C# CRC implementations I've tested were significantly slower, and the checksum calculation sometimes took ~40% of the total unpacking time.

This one would be a safe pure-C# choice:
https://github.com/damieng/DamienGK...G.Library/Security/Cryptography/Crc32.cs

The .LSB/.LSF files don't contain checksums, but the package itself (.PAK/.LSV) does.

Last edited by Norbyte; 29/05/19 05:27 PM.
Joined: May 2019
stranger
Offline
stranger
Joined: May 2019
Thanks for the quick reply Norbyte. Super useful, thanks. I tried this before but I just realised I was using 0 as a seed. It works with the default seed. Whoops.

I will continue with my porting and update here when i have something working.

Joined: May 2019
stranger
Offline
stranger
Joined: May 2019
Hi Norbyte,

I noticed you're using a native library for framed lz4 and a .net implementation for non-framed. I'm guessing that's because you're using this .NET implemenation: https://github.com/MiloszKrajewski/lz4net

at the bottom it talks about how it's not compatible with original lz4..? is that why you have native code for this? I had a go and I couldn't get the .NET implementation working in place of your compiled code.

I can compile the lz4 library fine, but marshalling/unmarshalling byte arrays of variable length between C# and C++ without C++/CLI i'm finding confusing and difficult.

Any suggestions here?

Last edited by SamAmco; 01/06/19 01:50 PM.
Joined: May 2019
stranger
Offline
stranger
Joined: May 2019
You know what actually I think I managed to get it working with the k4os lz4 nuget package. The trouble I'm having now is that when I call PackageWriter.Write it opens a stream to the lsv file and then iterates all the files in the directory (including the lsv file) and throws an error because it can't open a stream to the lsv when one is already open (at info.MakeStream() in WriteFile. Perhaps I'm trying to package the wrong sub-directory?

Joined: Apr 2013
N
addict
Offline
addict
N
Joined: Apr 2013
Hi,

1) Yeah, you can use any LZ4 library as long as it is compatible with LZ4F (many of the .NET libs uses its own framing that is not compatible with LZ4F). At that time lz4net was the first one I found that actually worked properly, so I went with it.

2) Well, don't repack the dir itself, I should probably add a warning about that :P
Just create a subfolder or another folder somewhere else and extract the package into that. Otherwise, you'll be recursively repacking the same file.
Most compressors simply create a temp package file and use that as destination path for the compression, then rename the temp to the final path after it was finished to avoid overwriting the original file if something goes wrong.

Joined: May 2019
stranger
Offline
stranger
Joined: May 2019
Excellent, thanks for the advice. I managed to get lsv's decompressing and re-compressing on linux now smile .. The whole reason I got into this is because I wanted to fix my save game which i screwed up. I've mostly done that now, although I found I could change the number of points I had in anything but I had trouble changing the number of talents my character has (I wanted to remove one that I got in error.) It seems like there's more than one variable keeping track of the number of talents each character has perhaps? Idk. I will upload my code to github soon and post a link here though (it's very basic, command line, no UI). Thanks for all your help.

Joined: Apr 2013
N
addict
Offline
addict
N
Joined: Apr 2013
Hi,

The talents are packed into a bitstring which is split into 3 32-bit integer values.

i.e. if you have talent nodes with values 1048584, 8650752 and 0:
You should convert these values into binary first to see which talent indices are set. In binary the node values are:
1048584 = 0000 0000 0001 0000 0000 0000 0000 1000
8650752 = 0000 0000 1000 0100 0000 0000 0000 0000
0 = 0000 0000 0000 0000 0000 0000 0000 0000

Now you have to count bits from the right to the left and write down the position of each bit that has a "1" in it.
In the first row, the 4th and 21st bits are 1; in the second row, the 19th and 24th bits are 1; in the third row, there are only "0" bits.
Now, add 32 to the position of each "1" value in the second row, and add 64 to the position of each "1" value in the third row.
The final values we have are:
4 (first row rightmost)
21 (first row left)
19+32=51 (second row right)
24+32=56 (second row left)

I'm not sure if my talent table is correct for D:OS 2, but 4 is "AttackOfOpportunity", 21 is "ResistDead", 51 is "WhatARush" and 56 is "Bully". (Note that the internal names for talents are different from the ones in the game UI, so there isn't always a 1:1 name match).

If you'd like to modify them, then do the same process in reverse, i.e. first look up the index of the talent you want to set/unset. Then find which row contains your talent index. Indices 1 to 32 are in the first row, 33-64 in the second, 65+ in the third. Then subtract 0/32/64 (first/second/third row) from the index, and start counting bits from the left. When you got to your talent index, set the corresponding bit to "1", then convert the binary value to decimal and overwrite the talent nodes in the LSX.

Regards,
N

Joined: May 2019
stranger
Offline
stranger
Joined: May 2019
I see, that makes a lot more sense. It just so happened my character had 3 talents so I assumed each integer was an ID for a specific talent. I assume you must work for Larian Studios? I don't know how anyone could possibly infer all of this information.

Joined: Apr 2013
N
addict
Offline
addict
N
Joined: Apr 2013
No, I'm not working at Larian, and apparently it is possible to infer all this smile

Joined: Aug 2019
stranger
Offline
stranger
Joined: Aug 2019
Originally Posted by SamAmco
I will upload my code to github soon and post a link here though (it's very basic, command line, no UI). Thanks for all your help.

I'm very interesting in your code, and a command line sound perfect.
Do you have a link to share yet? ;-)

Joined: Feb 2022
M
stranger
Offline
stranger
M
Joined: Feb 2022
I also am having the issue with MooseEdit where after putting in the correct paths for both Game Data and Player Profiles, nothing appears for me to load.

I know the PP path is correct because it shows fine in DOS Editor.

Any help?

Page 33 of 33 1 2 31 32 33

Link Copied to Clipboard
Powered by UBB.threads™ PHP Forum Software 7.7.5