Love how the free spot is “no conclave update” lol
It depends entirely on the company you work for. Even then, I wouldn’t exactly describe the work as “chill”
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”?
Win11 doesn’t let you past setup if you dont have an internet connection.
Try forge, it has AI you can play against if your friends don’t wanna play.
Here’s an absolute banger build I cooked up:
Basically spin around the tileset vacuuming up as many enemies as you can. After the tornado ends, cast Sickening Pulse immediately. Funny business ensues.
It actually does pretty well in steel path missions, but it does almost no damage to high armour units, even with 10 corrosive stacks. Also completely useless against Overguard units, since for some reason Elemental Sandstorm doesn’t seem to apply to them.
Thanks for your input! The other commenters pointed out that I can use Godot’s is_instance_valid()
function to check if the bullet’s owner exists before attempting to call anything on it, so will be reworking the system to use #2 + that.
Definitely sounds like the way to go the more I think about it. Thanks!
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!
Just tried this out in one of my projects, here’s what happened:
do something
works without a problem.do something else
never goes off.foo()
again any number of times and do something
will still go off.Having it waiting in the background didn’t seem to have much of a performance impact. I started 5000+ of them and foo()
only took up ~0.6% frametime with the rest of my game running alongside it.
You cant really compare like that, learning is an input and regurgitating is an output.
Humans learn and regurgitate much the same as an AI learns and regurgitates.
A human can only output things based on input it’s received in the past. Try imagining a new color. Any color you could possibly come up with is just some combination of colors that already exist. By painting with purple are you not “regurgitating” the work of red and blue?
You need to delete all cookies for lemmy.world in your browser, then log in again.
Don’t know if this will achieve what you want, but I selfhost ChangeDetection.io to check if webpages have been updated, then subscribe to changedetection’s RSS feed with FreshRSS.
Yeah it’s no replacement for “site:reddit.com”, but it could be due to there not being that much content on Lemmy at the moment.
When searching for single words (I tested with “jellyfin” and “dnd”) I can find results no problem, but the more specific queries that I would previously do with reddit (eg. “dnd point buy”) turn up nothing useful.
You can use a search query to include only results with Lemmy’s footer, which is consistent across all Lemmy instances. I made a post about it here: https://lemmy.world/post/342365
StallordD’s “What We Know Warframe Lore” series is a must-watch for lore enjoyers.
Mods have said the subreddit will be made read-only when the Kullervo update drops (June 21st-ish I think?)
Definitely not. Most of the platinum on those sites is stolen from hacked accounts / credit cards. In the case of the former the platinum will be traced back to you and your warframe account can be banned. Not trade-banned, banned-banned. In the case of the latter, the platinum will be removed from your account once the card owner gets their bank to chargeback.
Source: My brother got banned for this.
Note that the attacker needs to already have access to your Microsoft 365 account to do any of this. Fuck copilot and all, but this isn’t something they couldn’t achieve before.