Grimrukh / soulstruct

Python tools for inspecting and modifying FromSoft games (mainly Dark Souls 1).
145 stars 16 forks source link

linux compatibility #26

Open astrale-sharp opened 8 months ago

astrale-sharp commented 8 months ago

Howdy!

This should be enough to make it posix compatible! this should also work for your blender port if you used soulstruct directly in it.

https://github.com/Grimrukh/soulstruct/blob/8ab7c7035ebf7af995b1d443e7d74bec447dedaa/soulstruct/utilities/kernel32.py#L10

The real problem is this line

astrale-sharp commented 8 months ago

I'm getting much farther by replacing ctypes by zugbruecke.ctypes

However it crashes because it can't find image which is indeed not on my computer? :thinking: i also just checked my files and unpacked for modding dark souls so that shouldn't be the problem

astrale-sharp commented 8 months ago

Using the last version of UnpackDarkSouls for modding seems to have fixed that, I'm running a few test before updating this PR but I'm optimistic

astrale-sharp commented 8 months ago

wine9.0 fails on the latest UnpackDarkSoulsForModding.exe version for me: here's what I did

clone https://github.com/HotPocketRemix/UnpackDarkSoulsForModding put the .py files in my DATA directory (PTDE) install pip2 pip2 install colorama numpy run python -m unpack_dark_souls_for_modding

astrale-sharp commented 8 months ago

Now after a hopefully correct unpacking, starting the gui I get this error image

With a full log

ERROR :: soulstruct-gui/soulstruct_gui/base/window.py ::  271 :: Fatal internal error encountered. Aborting startup.
Traceback (most recent call last):
  File "soulstruct-gui/soulstruct_gui/base/window.py", line 258, in __init__
    self.project = self.PROJECT_CLASS(project_path, with_window=self, game_root=game_root)
  File "soulstruct-gui/soulstruct_gui/base/core.py", line 131, in __init__
    success = self.create_new_project(with_window=with_window, game_root=game_root)
  File "soulstruct-gui/soulstruct_gui/base/core.py", line 943, in create_new_project
    save_func()
  File "soulstruct-gui/soulstruct_gui/base/core.py", line 498, in save_Params
    params.write_json_directory(
  File "soulstruct-gui/soulstruct/base/params/gameparambnd.py", line 248, in write_json_directory
    json_stem = self.PARAM_NICKNAMES[param_stem]
KeyError: 'N:\\FRPG\\data\\INTERROOT_win32\\param\\GameParam\\EquipParamWeapon'

so.. time to investigate!

astrale-sharp commented 8 months ago

printing self.PARAM_NICKNAMES in this context yield a dictionary like structure containing something that resembles our problematic key

{
   # ...
    'EquipParamWeapon': 'Weapons',
   # ...
}

My first guess would be that os splitting of paths is confusing python because it's receiving windows path separators but the splitting function used on linux system doesn't strip them correctly

astrale-sharp commented 8 months ago

I hacked above using .split("\")[-1]

Now it crashes on soulstruct.utilities.binary.BinaryFieldValueError: Field '_signature' read value b'EVD\x00' is not an asserted value: (b'EVD',)

starting to feel in over my head

astrale-sharp commented 8 months ago

Before that here are the warnings I'm getting


WARNING :: base/events/emevd/core.py ::  365 :: m13_02_00_00: Missing 'Object | Character | Region' entity ID: 1322600
*
WARNING :: base/game_types/game_enums_manager.py ::  249 :: Ignoring game enum type `Boxes` in module '/home/astrale/Bureau/moddingDS/enums/m11_00_00_00_enums.py`, as its type does not match any of the `VALID_GAME_TYPES` specified for this `GameEnumsManager`.
*
WARNING :: base/events/emevd/core.py ::  365 :: m11_00_00_00: Missing 'Any' entity ID: 1101703
*
WARNING :: base/events/emevd/core.py ::  365 :: m11_00_00_00: Missing 'Object | Character | Region' entity ID: 1102080
*
  ERROR :: soulstruct_gui/__main__.py ::  260 :: Error occurred in soulstruct.__main__: 'LightBank'

the * means they are repeated a lot with other values