In game development, when reworking character abilities, developers can implement immediate execution of specific ability types (like armor abilities) at combat start by iterating through all items on the player's board, filtering for items with the desired keyword, and adding those abilities to the execution queue. This approach ensures that defensive capabilities are established before enemy attacks, making characters like Brittle Bones (with only 1 health) more viable. The implementation requires careful handling of ability execution pipelines, tracking systems for scaling abilities, and ensuring that artifact-added abilities are properly integrated with the game's tracking mechanisms.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
Reworking Everyone's Favorite Character - Live Game Development
Added:[music] [music] [music] [music] Heat. Heat.
[music] >> [music] >> Oh my god.
>> [music] [music] [music] [music] >> I like that. [music] [music] Heat. Heat.
[music] [music] Heat. Heat.
[music] [music] >> [music] >> Heat.
Heat. [music] >> [music] [bell] [music] [music] [music] [music] [music] [music] [music] [music] >> Heat. Heat. N. [music] >> [music] [music] [music] [music] [bell] [music] [music] >> Hello everybody. Welcome back to the stream. Is everything good? I feel like I'm missing something.
I think everything's all right. So, today we're going to be doing some fun stuff.
up on the docket here is to rework brittle bones because he's still a little bit awkward in terms of his abilities and his artifacts. I mean, so yeah, we're going to be reworking Brittle Bones. Hopefully that doesn't take too long. I already have some ideas for it and then we'll just be continuing on with, you know, fixing up whatever needs to be fixed because the play test is coming up soon. So, I don't know if I should reveal the the date yet. Maybe I'll re maybe I'll shadow drop it. But anyway, it's coming up very soon. So, if you're interested in Alamortis wish list it, please. We are going to do one final play test before the publicly available demo build. So, if you want to take part in this last play test, you could subscribe on Patreon. Subscribing at either tier will get you access to the play test for uh get you access to the play test early for about a week and then the play test will be available to everyone for free.
So again, you don't need to um be a Patreon subscriber to the try to play to try the play test. You just get early access.
Um, I also have my Udemy courses which are great to support me and also great for you to learn how to build build games in GDAU. But also I just released a new YouTube video/patreon early access video that's available to Patreon members and uh YouTube members, but it will be live for everyone tomorrow at 9 Eastern. So anyway, that's everything that's going on. But yeah, the main focus is let's work towards the Alabortis play test.
And honestly, the build that I have now is probably good enough to launch the play test. So, I'm a little bit ahead of schedule because we're still a little bit couple of days out from the uh from the play test launch date. So, I'm going to be spending the rest of that time just really polishing everything up and doing some balancing and testing and all that stuff. And hopefully hopefully this will be the best version of the game yet. I think it is. I think it is. I think everything's working very nicely. And yeah.
Anyway, so we want to do rework brill bones. But before I do that, hello malicious rabbit. Welcome.
Hello, Arion. Wow. Thank you, Shirley.
My my husband, a wonderful video game developer. Thank you. Well, that's definitely going to buy some McDonald's.
[laughter] Thank you. Thank you.
Wow. Yeah.
My wife is too good to me.
Uh, what are you doing to my boy Brittle Bones? We're making him stronger and more interesting. And maybe we will give those brittle bones a little snap. Get a room. [laughter] Hello, Ninja Link. Good morning [music] with the snail cats.
Okay, so Brittle Bones.
One of the problems with Brittle Bones is that his artifacts just suck. So, one of the things that I want to do is I want to see if I This is possible.
More calcium.
Um, I want to see if this is possible.
But what I want to do, I think this would be interesting.
Um, any item with an armor ability. So, there's there's a couple of ways of formulating this. So, the initial thought I had yesterday is any any item which has an armor ability will be triggered immediately on combat start.
So, you just get like a free execution at the start of any ability that applies armor.
And again, like the problem with Brittle Bones is like if I want his gimmick to be that he has one health. Um that means that, you know, he has to be able to build up armor before the enemy can go, right? Cuz if you don't have any armor by the time the enemy goes, you're probably going to just going to die, right? So I figure well instead of just trying to come up with this like the gorgette right now goreier um it takes whatever your current health value is and adds armor based on that.
But I'm I'm thinking maybe we just make the armor applying items trigger immediately on combat start. And if that's too powerful cuz I'm thinking oh it would trigger the entirety of the item. But if that's too powerful, then what I can do is just only trigger all of the armor abilities on start, right?
Um, which I think would be really interesting. And honestly, now that I think about it, that would probably be the best thing to do because otherwise I guess the strategy would just be to put at least one armor ability on everything and then like your entire board would just burst at once and that might just be like a oneot kind of deal.
Um, so I think yeah, maybe we'll just say any armor abilities will execute immediately and we'll just say that's good. So you get like all this armor built up at the start and that might work. The problem there though is that I think I need to do a little bit of work on armor because I think I think you can become functionally immune [music] like to everything.
So, I wonder if I should think about reworking armor a little bit. But anyway, we don't need to worry about that just yet.
But dinner first. We have dinner in the fridge. Hello, Hakee. Welcome. Brittle Bonds was fun when you got plenty of dragon skills to make a fire build. Oh, yeah.
There should be a milk can enemy that enables a secret synergy with him.
Like a Yeah, like a milk pale or something. Or just like a dairy cow.
That would be funny.
So, we're going to rework this. Gore gore gorgette. Gorgget.
Um, [sighs] and I really don't know how to do this.
So I can execute abilities from the artifacts.
Where is that? Execute abilities.
Need to listen for should end life cycle.
Is that right?
ability executed.
Oh, I see. So, this is going to iterate over all of the abilities.
New.
So, execute. Oh, base card. Ah. [sighs] Um, let me think about this.
Is this going to be harder than I think?
Maybe not. Um, maybe not.
So, all right. This artifact executabilities is a little bit weird, but that's all right.
I wonder [sighs] uh it's a little bit late in development to rework a bunch of critical systems, so I'm just going to have to spaghetti this together. But that's okay. Had I known that I would want to execute abilities from artifacts early on, I probably would have created a unified ability execution pipeline because right now the ability execution logic basically lives in executabilities here.
And the problem is there's some stuff that happens in here that I want to do for every ability, but then there's some like specific stuff that happens for this card. And so disentangling it would be quite a rework and probably would also open up a bunch of bugs.
So we're going to have to deal with that.
But I think I can make this work. So I'll go to my gore gorgget my gorg my goreier and we're going to do var. So we need a query target provider query target provider create options.
I don't even know if this is going to work.
Oh, because the Ah, this is probably not going to work. Oops.
Oh, what card type filter funk? Am I using this anywhere?
Oh, am I literally not using this anywhere? I think this was wrong. Okay, we're going to get rid of this.
Look at that. Goodbye.
Goodbye.
Okay. So, what I'm trying to figure out is trying to figure out how necessary this is actually.
Tag filter accumulated result.
So, wait a minute. Query source cells.
Query affected cells. Okay.
query affected cells for card.
All right. [music] So, I have a problem here.
I don't think I can use query target providers from the artifacts. And the reason is because I don't have a four card and I also don't have the query source cells.
Now, I might be able to just I might be able to just fake this.
The problem is I need to go from here to execute here.
This is going to call get query result.
That's going to have the context.
This does query board of final filter and then it does the query down here. So I need to get query source cells all the way into that from the artifact which I don't really feel like doing. So what I may do instead is I may just get I might just like manually get all the items.
So, var items that apply.
Let's do items with armor abilities.
Player board.board inventory component.get cards on board where x has ability has related keyword.
Yeah. has related keyword keywords.
Armor.
Okay.
Let's also do list um base card ability ability execution list.
All right. So now we'll just do a a straight up just loop for each var item in items with armor abilities.
I mean that may have not been that necessary either.
Um let's just actually let's simplify this. I'm getting a little bit ahead of myself. Hello clicker tail. Welcome for each bar item in player board. board inventory component get cards on board.
Oh, this should be ordered by priority as well. [snorts] That's important.
So, abilities to execute is equal to item.getall Get all composed abilities dot where xaxx has keyword keywords armor.
Okay. And then so that will return a list of or um yeah a list of base composed abilities.
I Okay, I think I can use this rerun abilities.
Maybe not though.
Man, this is difficult. Am I not going to be able to do this?
What? Let's see. Is full execution I ability repeater. No, I think rerun abilities is what I want.
Add card to rerun execution list. Rerun execution context. Okay.
So, I think it should be okay if I do this. If I go to my base artifact, I just want to put um do I want to do is full ex? Yeah, let's just do is full execution equals true.
Okay.
Goodness gracious. And then in here what we want to do is we want to do the new rerun abilities. So var rerun abilities is equal to new rerun abilities abilities to rerun his abilities to execute.
Get rerun count funk. We'll just do one cannot convert from base composed ability to base card ability.
I think I can just do this then.
That's interesting.
Okay, so we got the rerun abilities. Now I can add that to the ability execution list.
Add rerun abilities.
And then we do execute abilities artifact context.
Um, can just pass that in there. And then we've got the ability execution list here. All right.
So, I hope that works.
So, essentially, we're just iterating over all the items on the player board on combat start. We are filtering down.
Oh, I should probably do this. If abilities to execute count is equal to zero, we just continue.
So, we find all of the armor abilities on each item in the board. If there are armor abilities on the item, we're basically saying we're doing this rerun abilities. And what this does Oh, this is not going to work either.
Shoot because this rerun abilities is expecting base card.
Um, really add card to rerun execution list. Wait, how is this even working to begin with?
Oh, it's expecting Oh, I see.
Rerun abilities only works for yourself. It doesn't work to target other items. So, that's a little bit annoying.
I suppose what I could do here, this is a little bit messy, but I could do base card four card.
Oops. Null. Okay. And we'll do four card. Otherwise, we'll fall back to execution context base card. So, what I should be able to do now is in here for card is item here. I guess I should just be consistent with my language here. Okay, so maybe that will work. So anyway, we're adding all of those composed abilities, which are armor abilities, to a rerun list. They will be re reran once for the item that we're iterating over.
And what that essentially is going to do is that's just going to add this card to the rerun execution list.
which basically just puts the card back in a queue, but it will only run abilities in accordance with this filter here.
So, that's a little bit weird, but maybe it will work. I'm assuming it won't. I think we're probably going to end up with an error somewhere, but that's okay. Let's just see what happens. So, let's go to debug.
I'm going to change my character ID to skeleton and we'll go load up as Brittle Bones and we'll see what's happening.
We will go load up as Brittle Bones.
Ah, I forgot to sub uh suppress the tutorial. Also, I think the sound effects are on. So, let's turn that off.
Okay.
All righty then. So, we've got the idol which applies armor.
Helm of Joffrey. Great. Oh, this might actually trigger as well.
So, maybe we should see maybe eight armor being applied if it's working.
All right, let's see what happens. It didn't work. All right, what do we got?
Object reference not set to an instance of object. Turn executive component. Oh, [sighs] I may have to I may have to rework this system a little bit. I don't know if I should do that.
Is there a more clever way to do this?
combat start artifact context. Okay.
Um, what happens if I make this required?
Earn context.
>> [sighs] >> Yeah, I just don't have I don't have the data.
Well, I guess Oh, hey, this is a mess. Okay, that's fine. We're going to make it work.
Combat start artifact context. Turnex executive is equal to clear and registered turn executives.
This is very old code.
Dummy playerboard. Oh, context player board. Turn executive component. Um, do I have like an owner in here?
Turn executive component. Owner board.
Okay, so we do have an owner board.
Well, let's just do a public bull is player this return this get board manager get player board um we'll just [music] do owner owner board is equal to that.
Okay, the executive is going to be equal to turn executives do first or default X is player.
All right, that is a little bit messy, but let's go back to the base artifact.
Turn executive component is equal to artifact context turn executive. All right, let's see if that works. Hello, Snub Bill. Thank you for the yummers.
Appreciate it.
And also, thank you for being a YouTube member. Did you watch the new video, Snut Bill? I don't know if it's applicable. I don't know if you use GDAU, but hopefully you guys like that video. It's eight eight GDO tips that I think are pretty unknown. I mean, some of them are more known than others, but there's a couple in there where like you probably don't know about them or you probably haven't used them. So, hopefully you like it.
Yummers.
Okay, let's see what happens. So, I should see eight armor.
10 armor.
Why did I get 10 armor? Did I crit?
Okay, but it's working.
Oh, yeah. This one must have crit. The idol must have crit cuz it has a plus two bonus. So that would have put it up to seven armor. And then this one applied three.
So I got 10.
I think that's working.
Now the question is, is it going to massively break something?
That applied 19?
Why did that apply 19? Oh, cuz this this must have crit, too. So, wait, it applied 19 up first. So, if this one crits, that would have been 15.
No, 14 plus five. Yeah. So, it's a little bit confusing with the crits, but maybe I should use something that can't crit.
What applies armor that can't crit?
Uh-oh.
I might have to look at my card. I mean, I'm pretty sure it's working. The one thing that I'd be interested in testing though is if that works then with the abilities that scale off of like armor applied since last execution.
So, let's see where is shield. Here we go. Let's just do ally mausoleum key. That's a good one. Per item to Okay. Stone of the Ancients and Mausoleium Key as well as Lantern.
Apply three armor per fire. Oh, that's per fire applied. Oh, that's not going to work.
Does anything here scale off of armor?
I don't have any abilities that scale off of armor. Interesting. We're going to have to fix that.
Let's just do the Muslim key and Stone of the Ancients.
Okay, so we're getting to the point now where there's so many items in the game that I'm having trouble remembering what exists. Should I learn C++ before trying to use it with GDAU?
If you're dead set on learning C++ and you're intending on using it with GDAU, then yeah, probably. But I don't really know for sure. I'm not I don't know anything about C C++.
But welcome, Lethal GameDev.
All right, so we've got the Muslim key.
Two armor per item to the right and to the left. Let's just add a skeleton warrior.
So that's three armor. That's going to do two. That's five. And that's going to do Oh, this these can crit, too. All right, let's just do this one then. So that's going to do three armor. That's going to do two armor. So I should see five armor at the beginning.
Excellent.
Okay.
Cool. All right, I gotta rework that potentially. Let me see. Let me just throw that in the backlog.
Artifact execution pipeline with card execution pipeline.
All right. So, that appears to be working. I wish I had an ability to try this with something that scales.
I mean, I could, for example, I could maybe just take the lantern and flip these things. Shield on fire applied.
So, let's change this to or type shield.
Oh, this is all boards.
Let's change that to source board.
Okay. Well, I'm going to want Oh, well.
Okay. Anyway, dynamic magnitude ability fire. Okay. So, we just flipped those around.
So, the description is going to be wrong, but what I should see is I should see fire being applied based on shield.
So, let's do lantern.
What does this do?
Uh, per fire applied. Oh, that's going to apply a lot of armor, but that's okay. Maybe the lantern needs to be nerfed. I'm going to add that to my nerf list. He he Sorry.
I think lantern is too strong.
I meant to do that earlier, but I forgot to write it down. Okay, lantern, skeleton, warrior. So, the real question is going to be, are those abilities that are executed by the artifact, are they going to be added properly to the tracking system so that something like lantern now can scale off of that?
Right.
Okay. So we should get three, two, okay, so three, five, seven. So we should get seven armor and this is going to apply three fire per armor applied. So that should apply 21 fire or no, it's individual applications. I think it's individ. It's not counting the stacks. It's individual applications.
So, one application of armor and that's another application of armor.
So, that's two applications of armor.
And then this should put two fire stacks on the enemy then when it when it goes the first time, assuming that this has a lower cool down than anything else, which it doesn't. So, wait, this is actually going to go again before the lantern goes.
So, that's three stacks of armor. The lantern should apply three fire then.
So, there's our two applications of armor. There's our third application of armor. And it applied nine fire.
Oh, right. Cuz it's a multiplier of three. Okay. So, it worked. So, so yeah. So the artifact is triggering those abilities to execute on combat start and those are being those ability executions are being properly tracked so that things that scale with that will will respond to that, right? Cuz what I don't want is I don't want to have abilities executed by the artifacts, but for some reason they're excluded from the turn history and so the scaling doesn't work the way you expect it to, right? Because it's like whenever an ability executes, right, it needs to be tracked.
Now the question is I think that's probably skeleton warrior applied 3624.
Okay. I think we're good.
All right. All right. Cool. So that is that is working for the most part. I am going to change this though to just source board.
Okay.
So now let me rewrite the gore gorgget all keyword armor.
Armor abilities are executed immediately.
Combat start.
And then we're also going to want to do um no No damage can penetrate armor.
All keyword armor abilities are executed immediately. Common star. Okay.
No damage can penetrate armor.
So, the problem is if we're going to give the skeleton, if we're going to give Brittle Bones a a health of one as his gimmick, the problem is as soon as any damage bypasses armor, you're just going to die immediately. So, there needs to be there needs to be some immunity there.
Um, the other thing we could do is we could say we can make it a little bit more complex. Like we we could say for example um damage that penetrates armor cannot kill you, right?
So that's a little bit different because it means that as long as your health is above one, you can take damage through your armor, but as soon as you get to one health, no no damage can penetrate that, right?
So maybe that might be something to do.
I don't know. Got to think about it. I guess there's a lot of things specific to it like the standard library.
Did the mouse cursor just move? Yeah, I added an animation to the mouse cursor.
A little idle animation.
You were the first person to recognize that I was using Unity with C# for tears and I can say I'm an intermediate programmer.
Hello straight pointer. Welcome. Budget gym. Good to see you.
Curious if you let your unpaid intern Claude modify TNCN files directly or just C.
Um, so no. Usually I direct it like when I'm using it not to edit the scene files, but I have forgotten to include that instruction sometimes and it seems to like for like it seems to do a good job like editing the scene files, but that still makes me nervous. So like I change things through the editor and there aren't many situations where like Claude is making changes to things that would affect my scenes.
Usually, like I said, I'm just using Claude for like refactors and stuff and for bug fixing.
So that very rarely ever touches the scene tree, but it has done it like a handful of times and I'm like, whoa, don't do that.
Um, thought I was seeing things. That's what I figured, but I thought I'd ask.
Hello, Emerson. Welcome.
[clears throat] All right, let's just do the easy thing here. Let's just make it so no damage can penetrate armor.
Oh, I do want to increase such items cool down by three.
Maybe I want to do that too.
Yeah, I probably do want to do that.
Okay.
So, this one is this is a stacked artifact, but I definitely want to do that, I think.
Okay. Anyway, I will be right back in just three minutes. Going to take a quick break and then when I come back, we will try to finish up this artifact and then I mean that's probably going to be a little bit tricky, but we'll try it. Anyway, BRB [music] Sorry.
>> [music] >> Hey, hey, hey.
Down.
Hallelujah.
>> [music] [music] [music] >> Heat. Heat.
[music] All >> [music] >> right, I'm back. All right, first up We need to make it so that no damage can penetrate armor.
So, how are we going to do that? I think we just need to go to the board combat component.
should absorb shield.
Let's do damage type necrotic to false.
And then everything else we want to do artifact manager.acumulate modifier.
Okay, let's do artifact modifiers.
Let's do public static readonly artifact modifier key bool um what do I want to call it?
All armor blocks all damage.
Something like that.
Okay. And then in my gorgette, we're going to do a register modifier artifact modifiers.
all armor blocks, all damage current. And we just want to do true.
Okay.
Um artifact modifier key artifact modifiers dot armor blocks all damage would define we go false here.
Um I wonder I don't know if I want to do this every time.
because I'm going to basically for every instance of damage I'm just going to iterate over the entire artifact list.
I wonder if there is a better way to do that damage.
[sighs] Turn manager game event. I just got to see what the order of operations is. Emit combat started.
Okay, combat started happens before all this stuff. So, what I may end up doing is in my board combat component, I may just do this.
Well, shoot. Actually, this is not going to work either.
Is player armor blocking all damage?
So, I'm just going to do this game events dot instance.connect to combat started.
So on combat started in here, we're just going to update private void. Well, actually, I don't want to do it there.
So on combat started, we're going to say is player armor blocking all damage is equal to artifact manager dot accumulate modifier artifact modifiers do armor blocks all damage false. So we're just going to update that once on combat start. And then in here we're gonna say uh we're gonna say is player board blocking all damage and receiver board is player board.
So basically what's going to happen is this should absorb shield. It determines if shield is going to intercept some of the damage. For physical and fire that's always true. For necrotic it's always false. And for everything else, um, it's only going to be true if we have the player blocking all damage and the board that's receiving the damage, uh, is equal to the player board.
So, I think that should be correct.
Yeah, I think that should be correct.
So let me just check holy status.
Okay.
So, let's just make the training dummy.
We're going to make the training dummy apply a bunch of holy.
And then what we're going to do is we will just go ahead and run the game and we'll see what happens.
I didn't rebuild the translations yet, but let's see.
It froze.
Oh.
Uh, okay.
Hey.
Okay.
Why did that happen?
Well, let's just run it in debug.
I don't care about that. I don't care about that. I don't care about that.
Actually, put this back. Okay, that's fine. Anyway, continue.
All right.
So we have should absorb shield is true get absorbable shield damage nine.
Damage context damage amount is 40.
Oh, it's entering an infinite loop because it's going back to the damage again.
Oh. Oh. Oh. Um, I think I need to do this. Damage type dotshield false, right? Because shield is a damage type. Is there any other damage type that I'm forgetting? No. Okay. So, it's entering an infinite loop because what this does is this triggers shield damage, but it's just recursive. So, it goes back into damage here. The problem is shield damage was passing this check, too. So, it was just going in an infinite loop and should absorb shield.
So, we want shield to be false for sure.
So, let's do or damage type.shield just to be consistent.
All right, that makes sense. So now we should be golden pony boy.
Now I'm still going to die here because it looks like it was dealing 40 damage to me.
But if I were to apply a lesser amount of holy from the training dummies, um I wouldn't die.
Okay, so you can see that that took so I don't know if you saw those numbers, but it was 31 holy damage and nine armor damage. So it ate through all of my armor because I was supposed to take 40 damage. It ate through my armor first, but then because I had no armor, then the holy damage damaged me, right? But holy typically bypasses armor, right?
And so does poison and so does all that stuff. But all of those cases are handled in here, right? So, I'm just specifying the ones that are guaranteed to hit armor.
And oh, this one is actually wrong, too.
This this so true damage would bypass armor as well.
Let's just do this. Let's just do var is player immune to uh armor bypass is equal to that. We'll do this.
Is player immune to armor bypass?
So this one would be is player immune to armor bypass or Yeah.
Yeah, I think that's correct.
So, if player is not immune, then we're just going to fall back to what it was before. If the player is immune, then we're going to say that does absorb shield. And then the fallback case where everything else is is player immune to bypass.
Do I need to do that? Now I'm thinking maybe I just need two cases.
I set shield to false and then the rest of them are going to be this condition here, right?
Do I even need do I even need that fallback case? Can I just do this for every other damage type?
I think I don't even need that. Yeah, I think I can do that now. Now that what that means though is that I could potentially make fire ignore. Oh, that's actually better.
It's actually better.
Oh, fire. So, let me go to fire status damage type. Fire. So, this is new damage context. Ignore armor is false by default. So, I could potentially introduce an artifact where fire would like ignore armor, for example, and that would be handled automatically by this case. So, I think that's correct.
I should probably test it, but let me test the holy case specifically now.
All right. So, we don't want Don't forget about poison. Not that the enemy can use it. Yes, you can do self poison. But yeah, that's the that's the whole point of like focusing on that little block in the code is that this should just be handled automatically, right? So the only things that are explicitly bypassing shield are necrotic damage and shield damage, which makes sense, right? Because shield damage needs to apply directly to the shield.
But for every other damage type, fire, poison, physical, whatever, there's two conditions that need to be or there one of two conditions need to pass in order for the shield to absorb it, right? the player is immune to armor bypass, in which case every other single damage type will affect the shield first. If this is not true, then we're going to look at the damage context and say, okay, if the damage context does not have the ignore armor flag set to true, then we're also going to absorb shield.
So, I think that should just handle everything automatically if I'm thinking about it correctly.
And now we can check it here. So, I do that damage. I should take some shield damage now. Yeah, I just took two shield damage. So, I hit an item with holy or I hit a board with holy and instead of bypassing my shield, it just went into my shield automatically. Okay, that seems to work.
Cool. Now, the next thing is Okay, so now we just want to increase the cool down of those things just to nerf it a little bit because it's very strong as it stands.
All right. Um, I forgot how the filtering works.
Artifact context and base card.
Artifact context.
Okay. So, we're going to say if not base card is owned by player return.
Oh, this needs to be bool.
Turn false. Return uh basec card.get Get [music] Now I'm wondering Let's just do has related keyword keywords. Armor.
Okay.
private read only base composed ability um ability builder self turn cooldown modification Let's do cool down increase is equal to let's do 20.
So this would be cool down increase no scaling function.
Well, I don't think I need a scaling function, but let's just put an empty scaling function just to be safe.
What?
Oh, let's just make these discards.
Okay. Return self turn cooldown increase.duplicate register abil uh or is it add ability filter?
Yeah. Filter get ability. All right.
I suppose the other thing I want to do is self turn cold increase dot set hidden true.
Okay. And then I need to also do public override description template parameters.
Is it public?
Yeah.
Public override object description template parameters parameters is equal to not equal to returns description utils dot magnitude to seconds cool down increase. All right, build that.
Now, the question is, is that going to work?
I don't know. I actually don't know. I'm I'm encroaching into unknown waters here.
So the question I have is, is the skeleton warrior going to have its cool down increased?
No.
But the armor ability is going to execute immediately.
So it executed the armor ability but it did not increase did not increase the cool down has related keyword is just going off of base composed abilities.
Um so this is the problem now what happens if I ah son of a biscuit artifact. I wonder if I handled this situation where an artifact adds an armor ability and then another artifact works off of the armor ability.
Is that not going to work? Uh, rebuild composed ability cash. When is this happening?
Flush abilities if dirty.
Our abilities dirty. Okay, so our abilities dirty. Where is this being set? Mark abilities dirty. Okay, add projective. Add passive. Add contextual.
Reset non-combat modifiers. Add enchant.
Um, update composed abilities.
Reset all ability states. Rebuild abilities.
Where is rebuild abilities happening?
Rebuild abilities. So, I actually don't know.
Execute natural non-combat abilities for phase.
You know what I may have to do actually in order to get this ordering to work?
Instead of doing the filter of armor here.
Uh, let me think about this. How does this work? Why is this game so dang complicated?
This was supposed to be a small game.
Artifact. Get filtered composed abilities. Is this the only place where that's called? No, it's called up here too. Get all natural composed abilities.
Okay. All righty.
What is self turn cool down modification?
Ability builder.
Okay, I think I'm I think I need to do this differently.
I'm going to have to do my own ability.
I think this will be better actually.
Okay.
Let me just get this stubbed out and then I'll respond to the chat here.
Okay. And then I need let me just write this down. Tudu card data provider.
Uh, conditional ability decorator.
Check. This item has any abilities with armor keyword.
Okay.
What's the longest variable or method name you've ever written? I used to prioritize brevity, but you've convinced me to let it go. The code has become so much easier to read. Thank you. Yeah, you're welcome. Um, I don't know how to find that. I guess I could write a regular expression to figure that out.
Uh, if I have a long ability name, it's probably likely going to be in here somewhere. Can I look at the outline?
Let's see.
Board card mouse event entered or board card mouse entered event handler. That's a long one.
Get card position with root offset. Try place card at next available position.
Find nearest valid empty position for new card.
That's the longest one in this class.
That might be probably among the longest in the in the whole codebase. I doubt that there's anything much longer than that anywhere else.
That is like the top end of what I would typically write as a method name.
So yeah, I'll just say that one. That may not technically be the longest one, but that's the one I could find.
Brevity as in overly abbreviating, shortening whatever I could. Yeah. Yeah, I got you.
Am I reworking Snowcat? Does Snow Cat need a rework? I just want to say that you're inspirational. Keep going. Thank you, Ariana. I You're probably gone already, but thank you. I appreciate that.
Hello, Doc Walk. Just a question about using static event buses like artifact events. I know their solution is dependency injection, which seems like it would be a lot more work, but people say is best practice. Just wanted your thoughts on that.
Um, you know, I've never I've never really been a huge fan of dependency injection.
Um, and part of the reason is because I don't think I've ever really worked in a project where dependency injection was obviously a very good thing for the project. The idea behind dependency injection, right, is that you have all these things that depend on certain implementations and then you uh you inject those dependency usually through like interfaces or some kind of abstract class. And the idea is that you can swap out the concrete implementation whenever you want without changing the rest of the code. Right?
The problem is like I don't know like the kinds of games that I work on are pretty well defined in the sense that like I don't like I wouldn't get a lot of benefit out of like saying well I have this system and I'm going to you know use dependency injection for that so that way I can swap out how the system works or how a part of the system works with some like underlying code you know I could swap out the implementation I've never really found an instance where I'm doing something like that in my code. Like everything is very well defined. Like I have the artifact system, that's it, right? It's like there's nothing. The artifact system is the artifact system. Like there's no potential functionality that I'd want to swap in or out um in a dependency injected way, right? So I do have dependencies.
So like my artifact manager is a node and the node has to be present in the tree in order for the artifact system to work, right? And so there's a kind of dependency injection happening there.
Not really, but kind of because I basically can insert the artifact manager into whatever scene needs to have the artifact manager, but that's not exactly the same thing, right? Like the idea, like I said, is to be able to swap out implementations without changing the rest of the codebase. It's not just oh there is a dependency here that you place somewhere.
So yeah, I don't know. I don't think um I haven't really found a case where it would be very very useful in my projects. So DI is most useful for test during development. So it's easier to write your unit test implementations versus the live things. Yeah, that's true. But even when I have experience with that, it's like [sighs and gasps] I mean my my job was mostly JavaScript and there's all kinds of like mocking libraries where you could just create your own implementation in the test itself and you don't need to orchestrate like dependency injection across the entire system right so even in that case depending on like what mocking tools are available to you um it may not even be necessary in that case I think the CL like the textbook example of dependency injection is like um you have some data that you need to store in a persistent way and what you want to support is you want to support being able to write that data to any persistent backend right so you might have an S3 bucket or you might have a database or you might have just a text file and the idea there with dependency injection is you just provide an interface for like I persistent storage or whatever and then at runtime or at startup or whatever you can implement you can have a concrete implementation depending on which persistent store you want the data to go to and then that implementation will implement the interface and it handles all the details about where the data actually goes for persistent storage. Right? That's like the textbook example of dependency ejection.
Uh but again I haven't really encountered a situation like that in gamedev where like something like that would be very obviously helpful.
So yeah, but it's possible that it's possible that I'm just I have a blind spot and there's like something that could obviously make my life easier if I use that. But um Snowcat is my favorite character.
Thank you for the supporter membership Fox Shadow Codes by the way. Appreciate that.
Even just using DI for implementation, which can still be useful for decoupling, but trying this myself as a new game dev, I feel really slowed down when I can just use globals.
Yeah. See, the thing with that is like I almost think that thinking is backwards, right? Like you're you're trying to decouple something. Why? For the just for the purpose of decoupling it, right?
You don't have a clear reason why it needs to be decoupled. Um, now I think it's good to generally have a mind for like saying, well, we don't want to have these tightly coupled things if we can help it. Like we want to design stuff in a modular way as as much as possible.
But if you're finding that you have to implement a whole like dependency injection system just so you can achieve decoupling with no with no reason beyond that, like there's no explicit reason why that decoupling has to happen in that way.
My opinion is that that's a mistake that you should have a clear reason for implementing the patterns that you're implementing beyond just oh it's good for things to be decoupled right with C# and static typing is more significant than I imagine would be for JS. Yeah, for JS you could just create a JSON ob you you can just create a JavaScript object that just basically has like properties that match the method names or whatever and then you can just like you know it's very loosey goosey you could just implement whatever you want. So like when I was doing test uh writing unit tests for my software engineering jobs, um we just had like mock frameworks where you could basically just like just create a brand new object, mock up or mock out only the functions that you know are going to be called within that um within that unit test. And then that's all you had to do, right? You didn't have to like do this whole specific test implementation of this interface because JavaScript doesn't care, right? It's like it's going to go to the object. It's going to see is there a property on the object with this name. And then if you try to invoke that property, it's going to break if it's not a function, right?
It's like it's not it's very loose, right?
Which is both nice and not nice, but you're welcome docwalk. And the C# DI containers use reflection or something to avoid making explicit references to all the implementations. Right. Gotcha.
Yeah. [music] overeng engineering for GDAU. So a lot of my a lot of my professional experience is not in C.
There was a period of like six months where I was working on a net backend but that was it. That was all the professional experience I have with C.
If you're doing JavaScript react then you're doomed. You need DI at the least.
Yeah. I've been doing C, C++, C# since 1995. Gotcha.
Okay. Conditional ability decorator. So, we need a card data provider.
Card data provider. Card data provider in here.
Um, var dynamic magnitude ability or not dynamic mag conditional decorator is equal to new conditional ability decorator. We're going to decorate the self turn cooldown modification. The condition return card data provider.basecard.get Get all composed abilities dot any x x dot has keyword keywords armor.
Then this would be the conditional ability decorator.
And then we want to do is hidden is equal to true.
We're going to just get rid of this.
Okay, it needs to be present. So, we'll just set it to null by default.
Description template null and then the key is internal.
Okay. And then self turn cool down increase. We don't need that anymore.
So, we could create ability. Good.
All right. Let's see if that works.
I'm so tired of React. I'm doing everything I can nowadays to stop writing front-end code. It's so painful.
Yeah, it does get old after a while.
Have you tried spelt? A lot of people have told me it mostly removes the fatigue related to front-end libraries.
Um, that might be in response to I'm Jacob F, but for me personally, you know, React is so entrenched, or at least it was. Like, I've been I'm approaching two years now of being out of work and just doing this for a living.
Um, next month will be two years, which is wild to think about. So, I don't know how much the industry moved in two years. I mean, I know the whole AI thing, but um I never had the opportunity to try anything else other than React. Like React was just like the de facto industry standard. And so I I never every every project I ended up on was basically uh JavaScript like full stack JavaScript on the back end with Node.js, React on the front end.
And so yeah, it was pretty much just in that um now I wonder if I should make this not hidden.
Maybe not.
Self turned out cool down increase set description prefix get prefix game artifact gorg get self turn increase description template parameters Um, description utils magnitude to seconds cool down increase. Okay.
Spelt is basically improved HTML markup.
Interesting.
or solid use signals like a dough reactor view.
Oops, forgot to build the translations.
Also, is my lantern still broken?
Oh, yeah. Oh, wait.
No, I undid all the changes. Okay.
React to Hollix Anonymous. [laughter] I mean, I think React is fine. I like React and well enough. I will say React got a lot better when the hooks became a thing.
Before hooks were a thing, it was like really annoying to get data where you needed to get it. I know they have a concept of like providers and stuff too where you can essentially just put like a big data provider um in your in your tree and then you can write a series of custom hooks to fetch data from that provider which is pretty Nice well. I think this is working.
Wind forms are where it's at. [laughter] I do sometimes wish that silver light made it.
because I do actually like um WPF not far from Flutter.
Okay, so this should work now.
This has a slower cool down. So they have the same cool downs now.
Excellent.
So, this is kind of a nasty combo because this adds armor to items that deal damage, but then the uh let's see. Add item hag.
That one's not correct.
Did I do this wrong?
Why is this saying that this should increase the turn cool down card?
What did I just find? A different bug?
Why is the hag having a passive increased?
But it's 3.6. Wait a minute.
Oh, I did this wrong. Dang it.
I wonder. Oh man. Okay, so the problem here I wasn't thinking this is adding the cool down increase ability to every item, but it's it's not hidden. So it's showing up on every item even when it's not taking effect.
I mean, maybe I should just do.
Let's just do that.
I don't know. Well, I don't think this is going to work correctly though because of the order because of the order of things.
That idle is definitely not working.
What?
Why is this not working? So the idol is not getting What?
Why are these not getting the gorgget ability? I don't understand.
Only the skeleton warrior is What?
Why is this not getting?
Maybe it is working.
6.1. Okay, it is working. 8.1.
So, it is working. It's just not showing up. What?
How is that even possible?
What? Why is this not what?
I'm absolutely baffled.
So, it's obviously passing this filter because the stone it has the cool down reduction on it.
Is there a cache not being updated somewhere?
Why is this happening?
Oh boy.
Only 30 people who've fallen off on YouTube need to make another game jam video, I guess. So, I guess so.
I don't know why this isn't working.
Let me just get rid of that.
It's always 70 people after a game jam.
Have you tried turning it on and off again? Yeah. So, it's appearing there.
But when I add this filter to it, I think it it may be.
You know what? It probably is.
I don't know if this is going to work, but let's try this.
I'm I think maybe the cache is incorrect here.
Oops, I forgot to run it in debug mode.
I don't I I really don't know if that breakpoint is working. Oh, it is working.
So, for some reason in here, Rebuild the composed ability cache.
Get filtered composed abilities. Filter.
Oh, I guess it's not safe to do this in here.
Oh boy.
I guess that makes sense. I'm not supposed to really filter on abilities in that artifact filter there.
So, we're going to need to do something a little bit different. So, this approach that I was taking is a good one.
The problem is that this ability needs to be set to hidden if this conditional fails.
Is that possible? Card data provider Let me just try something clever.
Can I do ctxbase card?
Try ancestor.
Is there any ancestor?
So, the problem is I don't know how to get a reference to this ability that I'm currently in.
I was thinking I could just say set is hidden right in here.
So, I basically want this to only show if it's actually applying, but I don't have a way of doing that.
So, we're just going to have to take the easy way out.
We'll just have to set it to hidden. I don't really know what to do here because this this artifact ability is filtering on abilities. So, I can't filter on abilities in here. This is just like a basic card filter.
So, I have to do the filtering inside of the ability itself.
So, I check, you know, if any of the composed abilities are armor and then I only increase the turn cool down if that is true.
But then the problem is this ability ends up being shown on every single item instead of only the items that it's actually affecting. So I actually don't have a way of controlling that currently. Like I can't say, okay, this ability is going to go on every single item.
Uh but only show the ability in the tool tip if it's actually an effect. Like that's just not something that that I can do.
So, I mean, I don't think it's really worth fixing that necessarily.
Maybe at a later point in time I can fix it, but yeah, I just don't think it makes sense.
So, we'll just keep the ability hidden.
So, that is working.
Hag should be 3.6. Now if I do some alchemy This is not working.
So, one of the problems was this hag has a 3.6 second cool down.
It gets four damage there.
It's got the helm of Jeffrey the Great.
Apply three armor, but the cooldown hasn't been increased here until I move it and then it goes up to 5.6 from 3.6.
That's annoying.
Is that a I will be happy if this is just generally a problem.
So, let's see. This one is supposed to set everything's cool down above it to 7.5. [music] So, if I put it in alchemy, of course, it didn't end up at the bottom.
Of course, it didn't end up at the bottom.
Okay, this is a problem.
Okay, allied items below. [music] This is not going to work either. I need like a skeleton warrior.
Add item.
Shrunken head. Add item.
So that's the cool. Allied items below equal to this item's cool down. So I want to see 7.1 if there's anything below this item. And nothing's below the item. Cool.
I like that.
That's probably not going to work either.
Nope.
Oops.
That works. Okay. Well, shoot.
I'm going to need to spend some time thinking about this one. I may have to redesign this.
I may have to redesign this. I don't think I think the problem is the artifact to artifact interaction. This adds an armor ability and then this should increase the cool down of those things. I mean, I think it's I don't know. I do not know.
Yeah. See, this gets the armor ability now from the artifact from the helm, but it's not getting the turn increase, the cool down increase because it has an armor ability. But when I move it, then it goes up. So, it's I mean, I guess it's a minor detail cuz you have to move it anyway. But that indicates that there's something wrong with the system.
So, I'm going to need to fix that.
fix artifact to artifact um interaction.
Specifically, an item that gains damage via alchemy will not have cooldown updated until the next move.
I mean, I think most of it, the rest of it is fine. I just there's something about that particular interaction that is making me feel bad cuz that indicates that there's probably a problem with how the artifacts interact with each other.
In any case, I think everything else is okay.
I'm just going to run an extra translation build just in case anything changed.
Oh, I'm glad I did that.
Okay.
The more huge game, the more headache.
Yeah, it's impressive how much you've improved from Gunforge to Alchemortis. Thank you.
The third game will be the epicst. I can sense it. I hope so. So, I already have an idea for the third game, but got to finish Alabortis first, of course.
I just got a bunch of annoying random things to fix. So, anyway, um that'll be it for the stream for now. Actually, the last thing that I'm going to do on this stream is I'm just going to re-evaluate the skeleton items.
Let's see. Rusty spoon, scarab, skull tower, and mausoleium key.
I mean, let's just see. I just want to give a quick test of how that feels.
Oops. Project settings enable test player cards off.
So, let me just see generally how this looks.
Apply seven armor. Apply one armor plus apply three. Okay, so this actually should be good. Still going with brittle bones.
There's no Let's see.
If this ability executes at least four times in 12 seconds, deal 75 damage and exhaust this item. Okay, sell those. Let me just see. Let me just get a quick test of how this first combat feels. So, we got 16 armor.
Yeah, I think that's that's going to work pretty well. So, essentially my effective health pool is like 26 29.
Depends on how far it goes up.
I'm starting to take more fire damage though.
Okay, that should work.
Three damage and heal for the damage dealt.
So, put that there just to get some more armor. So, really you want to focus on like armor and also damage because damage is going to give you that armor.
Probably should alchemize this with something.
Shape shifter This item can only receive fire abilities. Interesting.
Why is there so many combats in a row?
Oh, that one's healing quite a bit.
That's not great.
It's okay. It's not dealing any damage to me either, basically.
Okay, what do we got here? Copies all damage abilities of adjacent items. Oh, interesting.
If this if this item has dealt at least eight armor damage since execution, exhaust this item.
Um, let's do Throw all these things in there.
Thank you for the supporter membership, Mr. Brendan Blake. I appreciate that.
Thank you.
Okay, here we go.
Apply one fire for every five damage dealt since previous execution. That's still armors. That's good. Corrupted.
Apply two holy to enemy. Perfect. Get get out of here. No one wants you. Might as well throw the fire guy on there. Um, okay.
Okay. I think Brittle Bones is feeling a lot better cuz like previously with the older version of Brittle Bones, I was um Oh, four armor. If health is less than less than 50% though, h I can't be less than 50% health.
Increase critical chance by 50% though.
Um, yeah, previously the old version of Brittle Bones, it was very easy to lose in the early game. Well, that's not good.
Increase critical chance. Oh, it's got Wait, why does it have 100%. Oh, because it's got a base critical chance of 50%, right?
How do I I can't make it work, can I?
Dang it.
Do I need uh I got to get rid of something.
Okay, whatever.
Upgrade something. Let's see.
Four armor. Oh, it's scaling.
It shouldn't be scaling the artifact abilities.
I don't think so.
Yeah, I'm going to need to upgrade event shows scaling for artifact added abilities.
So, I'll need to fix that. That one should be a relatively easy fix, I think.
What the heck?
Anyway, 10 damage, at least 10 armor damage. I mean, that's quite a lot of damage.
Let's just do that one.
Let's go for the reagents. Oh, I can get some health. Let's do it.
I might as well spend my blood. Now I've got a health pool. There we go.
All right.
What do we got? No bleed abilities of adjacent items. Do Am I going to use this? I don't know about that. Let's see. Absorb and remove a random legendary ability. Remove all corrupted abilities from top adjacent non-reagent items.
Get rid of that. Oh, the other thing I want to do.
Lots of work to do.
Lots of work to do. Okay, I don't need the death orchid. The critical bonus sum of non-reagent items to the left is 10 or greater add six critical bonus to bottom. Oh, okay.
Where is uh let's see sum of critical bonus of items to the left is 10 or greater then we can add Oh, do I want to add crit to this though? Cuz it'll exhaust.
So, I probably don't want to do that.
Actually, this is 100% crit chance. So, I could maybe increase the crit bonus on that one.
Um, I don't have enough. Oh, I got rid of the death orchid, too. Son of a biscuit.
I could have used the death orchid.
Um, well, oh, wait. This is bottom adjacent.
Oh, I'd do this and that and that, right?
7. That's 10.
And then this should add six to the doussing rod. But it's also going to randomize my dowsing rod abilities, I think.
Actually, oh, but it lost the it's back down to 50% crit chance. That's okay. Reduce the cool down of this item by 0.1 seconds.
Whatever. Now, allied item deals damage.
Deal six damage and heal for the damage dealt. So, that could potentially deal 19 damage. Half the time it's going to deal 19 damage. And we got a 50% chance on this guy now.
He's got a long cooldown though.
He's got a long cool down. Let's do that.
Deal eight damage. [music] Deal six damage and heal for the damage dealt. Copied from mausoleium key.
Interesting. Actually, that looks like a pretty beefy build to me.
That looks like a pretty beefy build.
Um, passive increased the tier of this item by one.
Corrupted abilities are prevented from executing. All items in this column are set to have only the weapon tag. Adds the following abilities. Items in this row swarm. Apply fire.
Uh, I guess I'm just going to take the tier upgrade. Oh, but I'm not going to Okay, let's put that there. It's going to just take up the whole row, though. I'm not going to maximize that. Okay, let's just do Let's swap these around. Yeah, let's put the dowsing rod over here. Okay, we'll make that work. Like that.
All right, let's see what happens.
Okay.
Oh, I forgot this exhausts everything.
Oh, I might have just Oh, okay. I probably don't want to use that.
So, let's not do that. Um, here we go.
Okay, much better. I forgot that the planter carnivora exhausts things.
[sighs] If this item has four or more tags, projects to adjacent allied items.
Let's just take the shape shifter. Going to have to see if I can get more tags on that thing.
What is all that to do? Are we scope creeping? No, it's not scope creep. It's just [sighs and gasps] it's just what I have to do. This is the longest end of stream ever. Yeah.
Well, I got sucked in. I guess that's a good that's a good thing.
I was just going to test the first couple of combats with Brittle Bones, but now I'm like invested.
Heal four.
Oh, that's a long string of combats. All right, we'll go to the first boss and then we'll see how I do.
I don't feel like my build is good enough for the boss, but we will see.
Got a bunch of blood. Do I need to start doing more?
Increase critical chance by 50%. Um, what do I got here? Right. Adjacent and bottom adjacent on reagent items will not be altered by alchemy. Oh, okay. So, wait. Let's see.
I want to keep this one the way that it is.
No. What do I want to do?
I don't really have a lot of good like damaging things. This one is pretty good.
I actually don't know if I can really do anything at the moment. Oh, there's a passive increased critical chance by 50% here. Do I dare try to slap that on something?
No, we'll just go forward.
Dang cats.
I am stop. Ooh, fairy wings. Okay.
To the average cool down of left and right adjacent items. All right. So, we got fairy wings.
Now, what can I do? Narlock's grand jewel. Can I do it?
Left and right adjacent. I got to average them together.
That's 3 seconds. That's 4 seconds.
That's 4.3.
So if I do this, so the average of those things is going to be what?
Like I don't know, something like five.
Narlocks Grand Jewel.
There's a 20% chance to gain a corrupted ability though. That's kind of dangerous.
YOLO.
And I got a corrupted ability. That's all right. 6.6 seconds.
Four times in 12 seconds. Let's see.
Apply 20% blind to this item.
Wait, this doesn't do anything anymore.
I mean, that's I guess that's fine.
I don't think I'm going to be able to get this to execute four times in 12 seconds.
Not with what I've got going on.
I'm dead. I don't have any more resurrection stones. Well, it's okay.
All right.
60 damage in a single hit. I did 20 damage. All right. What else? 10,000 damage. I did 826. Okay.
500 fire stacks in a single combin encounter. Only got to 34. Apply 20,000 armor.
Heal 5,000 in a single run. I only did 91.
Okay.
Uh unlocks. Do I have any unlocks available?
Oh, I must have ignore unlocks on.
Okay.
I will say that he's feeling better for sure.
Uh but yeah, we'll see.
All this color effects and such. Is it accessible? Would a color blind person differentiate those? I have no idea.
I have no idea. I pity the man who has to go against double foxes. Yeah. Are the Is the fox Does it still have a multiplier?
No, it's just normal damage per enemy one by one item. [music] The reworked artifact looks much more uh dynamic, synergistic. Yeah, I think it is. I just need to fix that one issue I was having with it. But I need to I don't know. I got to go eat some lunch before I look into that. But anyway, that's going to be it for the stream for today. I'll be back tomorrow at 10:00 a.m. Eastern. So, I hope to see you there. Maybe I'll stream this afternoon, too, depending on how it's going. But you can wish list Aortis on Steam. The next play test is coming up very soon.
That will be available for Patreon members early. So, Patreon members will get a period of early access. So, you can go to Patreon. You can sub you can join here. If you subscribe right now, you will get early access to the play test because it's coming out very soon.
You don't have to pay for anything to get access to the play test. It will be available to everyone after the Patreon early access period for the play test.
But this is just a way you could support the development. If you subscribe at the top tier for at least one month, I will send you an Alchemort Steam key when the game launches. So, you don't need to buy it on Steam and your name will be listed in the in-game Alchemortis credits.
So, um, that's available if you want to support me as I finish up the game, as we encroach on the end of the year here.
Uh, but yeah, wish list alchemortis, if nothing else, I would very much appreciate that. And thank you all for watching. Thank you for being here.
There are different kinds of color blind, so creating accessibility options. You need to be able to have several options. Yeah, I think I could fix that. I mean, I could just have multiple different like pallet swabs, right?
Um, I was thinking that the corruption was blending in with background too much, but now I realize that color blind person would see that better than me.
Yeah, I'm not sure. I mean, I think, like I said, I can do like pallet swap options. And so, like, not explicitly designed for colorblind accessibility, but if I offer enough different color palettes you can choose, maybe one of those will just work for the person. You know, it's it's one of those things where I'll I'll put something in there for people to pallet swap people that think the game is too dark or whatever else and then people can just find whatever works best for them. But anyway, thanks for watching. Have a great day everybody and [music] I will see you in the next one. Bye-bye. [snorts]
Related Videos

TOP 15 Data compression Interview Questions and Answers 2019 Part-2 | Data compression | Wisdom jobs
wisdomjobs
281 views•2019-06-28

CTS 158: 802.11w Management Frame Protection
ClearToSend
4K views•2019-02-04

NDSS 2019 Send Hardest Problems My Way: Probabilistic Path Prioritization for Hybrid Fuzzing
NDSSSymposium
496 views•2019-04-02

How realistic is Cities: Skylines?
CityBeautiful
159K views•2019-02-14

GUIs & TUIs: Choosing a User Interface for Your Python Project | Real Python Podcast
realpython
2K views•2025-04-04

The OSI Model - Explained by Example
hnasr
225K views•2019-05-12

Cloud Computing - Introduction
elithecomputerguy
98K views•2019-10-07

From Traveler's Dilemma to Dynamic Routing | Demystifying Networking
IITBombayJuly
5K views•2019-08-04
Trending

Gremlin Arrives… While Dorothy May Takes Another Step Forward
The-moons
10K views•2026-07-23

Playstation NO DISC/NO BUY Fight Is Over...
DavidJaffeGames
4K views•2026-07-23

Americans Confused in Australia for 17 Minutes Straight
IWrocker
17K views•2026-07-23

FURIOUS Raskin CORNERS DOJ over Trump DARK PAST!!!!
MeidasTouch
237K views•2026-07-23