• 13 Posts
  • 23 Comments
Joined 1 year ago
cake
Cake day: June 6th, 2023

help-circle


  • I think you’ve just pointed me in the direction of a solution…

    The comment you’re referring to seems to be this one:

    mv Launcher Launcherbak
    ln -s bin Launcher
    ln -s ./bin/bg3_dx11.exe ./bin/LariLauncher.exe
    cp ./Launcherbak/*.dll ./bin
    

    creating a symlink to trick steam into thinking it’s running the launcher when it actually runs the game. BUT … my SSD is formatted as exFAT, which doesn’t support symlinks, so I can’t do this.

    So I’m guessing proton is trying to create a symlink at pfx/dosdevices/c when it installs .NET, but fails, which is also probably why everyone else seems to have a breezy time with it. Not sure why my other games haven’t run into this though… maybe they haven’t needed to install anything there?

    I will report back after reformatting my entire SSD lol


  • I think you’ve just pointed me in the direction of a solution…

    I tried to create a symlink “c:” pointing to …/drive_c, but I couldn’t. “Operation not permitted” I then got ptsd flashbacks to the last time this happened - turns out it was because my SSD is formatted as exFAT, which doesn’t support symlinks.

    I’m guessing proton is trying to create this symlink when it installs .NET, but fails, which is probably why everyone else seems to have a breezy time with it. Not sure why my other games haven’t run into this though… maybe they haven’t needed to install anything there?

    I will report back after reformatting my entire SSD lol




  • Still the same error unfortunately.

    Interestingly though, when I try to install .NET manually via protontricks-launch -v --appid 1086940 /home/user/Downloads/windowsdesktop-runtime-6.0.35-win-x64.exe I get the following error:

    /media/user/T7/Main/Games/SteamInstalled/steamapps/compatdata/1086940/pfx/dosdevices/c:/windows: No such file or directory
    

    Going down that tree I see the entire path is there except for “/c” at the end. I manually added a “c” folder, but then I get stuck at this error:

    protontricks (ERROR): Active compatibility tool was found, but it's not a Proton installation supported by Protontricks.
    Proton installation could not be found!
    

    I know my proton installation works because all my other games use it fine. Proton is on a different drive than BG3, could that cause issues?




  • I see!

    I installed protontricks and read through the usage instructions

    I’ve done protontricks-launch --appid 1086940 /home/user/Downloads/windowsdesktop-runtime-6.0.35-win-x64.exe

    but it looks like it’s stuck?

    pressure-vessel-locale-gen: Missing locale en_US.UTF-8
    pressure-vessel-locale-gen: Generating locale en_AU.UTF-8...
    pressure-vessel-locale-gen: Generated locale en_AU.UTF-8 successfully
    pressure-vessel-locale-gen: Generating locale en_US.UTF-8...
    pressure-vessel-locale-gen: Generated locale en_US.UTF-8 successfully
    pressure-vessel-adverb[101880]: W: Container startup will be faster if missing locales are created at OS level
    0084:err:file:init_redirects /media/user/T7/Main/Games/SteamInstalled/steamapps/compatdata/1086940/pfx/dosdevices/c:/windows: No such file or directory
    

    Thank you for pointing me in the right direction, I’ve never used protontricks before

    Edit: using protontricks 1086940 dotnetdesktop7 seems to get past that point, but then I get another error

    protontricks (ERROR): Active compatibility tool was found, but it's not a Proton installation supported by Protontricks.
    Proton installation could not be found!
    

    my proton is installed in a different steam library than BG3, could this cause issues?












  • I patched together some version of this using nested dictionaries:

    var abilities: Dictionary = {
    	AbilityData.Trigger.BEFORE_ATTACK : {},
    	AbilityData.Trigger.ON_ATTACK : {},
    	AbilityData.Trigger.ON_HIT : {},
    	AbilityData.Trigger.ON_KILL : {},
    	AbilityData.Trigger.ON_DEATH : {},
    	AbilityData.Trigger.ON_JUMP : {},
    	AbilityData.Trigger.PASSIVE : {}
    }
    

    with each value being another key:value pair of { "ability_id": <ability-node> } so I can keep a reference to the Ability node and use dictionary functions like .has() to check if a character has a specific ability:

    func has_ability(ability_data: AbilityData) -> bool:
    	if abilities[ability_data.trigger_type].has(ability_data.id):
    		return true
    	return false
    

    Then when a trigger fires, it calls this (I omitted the return code):

    // Activates all abilities with the specified trigger type. Returns an array containing each ability that was activated this way.
    //trigger_type is an enum
    //data is just a resource containing things like position, target, ability owner, etc
    func trigger(trigger_type: AbilityData.Trigger, data: AbilityActivationData) -> Array[Ability]:
    	var abilities_to_activate: Dictionary = abilities.get(trigger_type)
    	
    	// Loops through the list of Ability nodes.
    	for ability in abilities_to_activate.values():
    		ability.activate(data)
    		abilities_activated.append(ability)
    

    This seems to work, but it still gives me that tickling sensation that it could be a little cleaner.


  • I think I understand…

    Instead of the player iterating through and calling all of its abilities, the ability just connects directly to whichever signal it needs on the player?

    My current setup is to add each Ability as a node to the player, so right now it follows the “call down, signal up” adage that I hear everyone say. What would be a good way to implment the other way? I assume I should rework my current setup otherwise it’d be “signal down, signal up”?






  • The longer I’m using the signal chain the more I’m wanting to rework it to just be a reference lol. Good point with checking if the instance is valid, if any other errors come up I could just patch around them in a similar fashion.

    That said, you can probably simplify your signal code if you connected the bullet killed_enemy signal directly to the player’s on-hit handler. It seems like the weapon on-kill handler is redundant?

    Ah I see what you mean, killed_enemy(enemy-object) signals directly to the player which can then pass that enemy to it’s abilities if needed. You’re correct that the weapon signal is mostly redundant, it was just the easiest node to connect to the bullet’s signals, as it’s responsible for spawning them.

    I think I’ll change the whole system to just use a reference. Thanks for your input!