• 14 Posts
  • 24 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”?





  • Epic, I generated a film summary for fun:

    Spoiler Warning (Assassin Ninja Cows 2)

    “Assassin Ninja Cows 2” is an action-comedy film starring Seth Green as the lead character, alongside a herd of cow-ninjas. The story revolves around a group of dairy cows who have been trained in the art of ninjitsu by their master, Sensei Moo. In this sequel, the cows face their most dangerous mission yet, as they must protect their farm from a ruthless group of assassins known as the Black Udder.

    The plot follows the cow-ninjas as they work together to outsmart the Black Udder, utilizing their stealth, agility, and teamwork to create a series of elaborate and hilarious schemes. The cow-ninjas must use their unique skills to defend their home and fellow farm animals.

    As the story unfolds, Seth Green’s character, a witty and resourceful city cow, takes on a leadership role, employing his intelligence and quick thinking to guide the cow-ninjas through various obstacles and challenges. Along the way, the audience is treated to a blend of action-packed fight scenes, slapstick humor, and heartwarming moments of camaraderie among the farm animals.

    In the end, the cow-ninjas successfully defeat the Black Udder and save their farm from destruction, proving that teamwork and determination can overcome even the most formidable foes. “Assassin Ninja Cows 2” is a lighthearted, family-friendly film that combines humor and action to create an entertaining and engaging experience for all ages.