This video demonstrates how to implement controller input handling in Godot engine, specifically addressing scroll management challenges when multiple scroll containers exist on screen. The developer explains that Godot normalizes controller inputs across platforms (Xbox, PlayStation, Nintendo) using standardized button mappings, but scroll handling requires careful focus management. The solution involves using focus context boundary components and focus toggle listeners to ensure scroll handlers only intercept input when the corresponding scroll bar has focus, preventing conflicts between multiple scrollable areas. This approach ensures that controller users can navigate different UI elements without unintended scroll behavior.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
Might Do Some Work on Alchemortis - Live Game Development
Added:Mhm.
Mhm.
Hey. Hey. Hey.
Oh my god.
Heat. Heat.
I like that.
Heat. Heat.
Oh my god. Oh my god.
Hello everybody. Welcome back to the stream. Good to see you all.
So yeah, we're just still working towards having a play test build ready to go. And yeah, just got a bunch of random things to do today. I want to finish up a new item that I drew up last night, which I shared in the Discord.
So finish up that item. It needs abilities and all that good stuff. And then we could take a look at my board here and we could figure out what else needs to be done.
So, lots of controller improvements still to do. I still need to do a bunch of sound effect stuff.
Riddle Bones needs a little bit of a rework.
I got some bugs here. So, we may take a look at some of those bugs.
But yeah, I think all in all, we're getting we're getting down to the point where all the work that will be required for the play test is done and then we can go ahead and launch it. So anyway, before we get into all of that, I want to remind everyone that Alchemortis is available for wishlisting, so you could check it out. The link is uh the link to the Steam page is in the description below. You can also join on Patreon. As a reminder, the play test will be available early to Patreon members only.
So, if you subscribe today, you will get access to the play test cuz your subscription lasts a month. And the play test is definitely happening soon.
Um, and if you subscribe to the top tier here, I will send you an Alchemist Steam key for the full game when it launches.
So, you won't need to buy it on Steam and your name will be listed in the in-game Alchemortis credits. And then I also have my Udemy courses available for sale.
So, all that stuff is linked in the description below. All those ways you could support me. I should mention also that you do not need to pay to join the play test. The Patreon early play test is just that. It's just an early play test period for Patreon members, but everyone will get a chance to try the play test. And yeah, we'll be good to go.
And this is probably going to be the last play test before the publicly available demo.
So, we are getting there. We are getting there.
So much work to do. So much work to do, but we're vast. We're We're fast approaching the release date. Anyway, hello Clicker Tail. Welcome, Ninja Link. Good to see you again with the snail cats. Hello, Christian. Welcome. Good to see you.
Uh, hello Chris. Welcome back. Always good to see you in for a bit before my meeting. Sounds good. Welcome, straight pointer. All right, let's take a look at the guy that I drew up last night. Maybe after sleeping on it, maybe I'll change it a little bit. Oh, maybe not. I think it looks great.
My first reaction. So, you know, sometimes you sleep on something and then you look at it again and you go, "Uh, I want to change it."
But no, I think this is great.
I mean, if I was being really nitpicky, I would maybe I would maybe clean some of this up over here.
If I was being really nitpicky.
Um, do I want to do Can't make it too. Yeah, actually, I think that's probably better.
Yeah, that looks a little bit better to me.
Do I want to create more separation there? Oh, that looks a little bit weird. Let's do Okay. Um, actually, this may need to go I don't want to Oh, yeah. H Do I want to put like a big No, that looks weird, too. I think I'll just call it good.
Although maybe maybe most of the problem is just it looks kind of doubled up here.
Maybe that's most of the problem.
Yeah, if I do that. Okay, if I do this.
So, we're just going to clean a little bit of this up here.
Um, That doesn't look quite right either.
Actually, this should probably be all right.
Yeah, I think it's all right.
Me get rid of this one.
There's a lot of red going on here.
Maybe bring this over a little bit.
Yeah, that looks fine.
Well, maybe not. Maybe I'll shrink it up a little bit.
No, maybe I think this is fine. I don't know. Maybe I won't spend too much time on it, but all right.
I wonder if that's actually better. Let me export this and then we'll look at VS Code and we'll see the diff and we'll see what's up here. So, that's the before.
That's the after. Uh, it's kind of hard to tell.
No, I think the after definitely looks better. I think the eyelid shape is better. I just smoothed it out a little bit. So, yeah. I guess I lied when I said it looked all right. This top part is a little bit flat, but I think that looks okay with the dark background. Oh, maybe not. Maybe if it just Let's see. Do I just add like a little bit here?
Oops.
Just add a little bit there. Uh, I do need to preserve a little bit of light going up.
I think the problem is that it's always going to look flat unless I do something like that.
Oh, wait a minute. That might work. Does that look better?
Yes. Do I want to put like some red up here?
Maybe. Maybe not. You know what? I don't I don't want to go overboard on this, but I think that does look better. So, let's fix the outlines now.
Fix the outlines.
Fill this back in. Fill that back in.
We can make that pointy just for fun.
Okay. All right.
So, let's export that now. Let's take a look at the difference here.
Um Okay.
Yeah, I think that looks better. I mean, maybe this looks a little odd, but we could always always check what it looks like in game as well, but okay. So, a couple of minor tweaks. Uh, streamlined or polished up that upper eyelid and then added a little bit more roundness to the top.
Shoot. Now, does the bottom need the roundness, too?
No. Actually, I think it looks fine.
Actually, if I were to do one thing, I may just like take this pixel off.
Actually, maybe take that pixel off, too. Oh, yes. I like that shape better.
Okay. All right. We're done. We're not going to do any more minor changes here.
That just gives it much more of like an angled feel.
All you got to do, sometimes you just got to change like one or two pixels and it completely changes it.
So, I think this is cool. I mean, I think, you know, I don't think it's the best the best like eyeball part, the inner part, but that is for some reason very hard for me to do. So, we are not going to spend too much time on that. But I think those couple of revisions look better.
And then I'll catch up on the chat here.
I also need to restart my extensions because these numerical badges Oh, I need to up up up my scale here. Okay, restart. All right, you like it? Hey, my eye is up here. Hello, woo. Yes, welcome.
It looks nice. Thank you. Appreciate that. Mark, mock it up. Looks god. The only thing that is I think that the sharpen silhouette on the eye on the right should be more spherical instead of pointy.
Um, I think it's okay. like the eyeball shape is a little bit weird, but I think it's serviceable if I if I understand correctly what you're talking about. Hello Emerson.
Uh, good morning. Good morning, Monkey Software. Welcome.
Okay, so let's put that into the game.
Giant eyeball. Let's do 5.5 seconds. Let's give it a five critical bonus.
Um, it is going to be a ritual item and a minion item.
Probably should add a demon tag cuz I think this would work well as like a demon. This is a 2x two.
And what else? Exclude from loot table.
No.
Okay.
All righty. So, I was wondering if you have a solution for web exports using C#. I heard there's some friction with that. Um, yeah, it's just it's not supported. So, I don't know to what extent like other tinkerers have figured out a way to get GDOC games working on web. My understanding is that there's something there's something blocking GDO from being able to do that. They actually need to wait for some kind of like.NET feature to be made available. That was my understanding. And so like basically C exports won't be supported officially by GDAU until that.NET change happens. I don't know what that change is though.
So, but that was my understanding. So, so the GDO devs are like they're not actively working on it because they need something fromnet to be able to support web exports.
So, if you need web exports, your best bet is to use GDScript.
or find one of those side projects where people have hacked it to get it to work.
Let's see what it looks like in game.
That is my understanding as well about C#. Then again, I think GDO3 C# exports working on web is black magic. Yeah.
Well, they were using mono in GDO3 and so you know that that whole like mono ecosystem is different but they switched tonet in GDO 4 which I'm pretty sure oh maybe maybe I'm wrong. I thought C exports were supported for a time with GDO4 but maybe that's just not true.
Maybe that's never been the case.
All right, there's our eyeball.
There's our eyeball.
Hello, Mountainflower. Welcome, Jacob Gaming. Hello. How do I import a sprite assets? I do not know. I just export them as PGs.
I just go here, control shift, alts. It brings up this dialogue. If you've named your file correctly, then you don't need to do anything. You just click export, and that plops a PNG right in the same directory as your A-brite file. And if that directory is inside your GDO project route, then it just automatically gets picked up. So I I never really found a need to have like, you know, plugins to automatically import a sprite files. It's just like it's literally just one button and you click export and done. I mean, you could just do boom boom boom boom boom. Super fast, right? You hit enter, just keep exporting it, right?
And GDO will also hot reload those while it's working. So, I could, you know, I could just Oops. do this. Do that.
Export. Go back. Oh, there's my art.
It's all ruined, right?
But yeah, so I've never really I mean I think the workflow is pretty straightforward. It's just create the PNG whenever you're done updating and that's all you need to do. It's not really that much of an extra step, you know.
All right, we need to give this guy some abilities.
Uh, giant eyeball.
I appreciate the input. How do you do play tests for your game?
Well, Steam has a play test feature which allows you to just allow people to sign up for the play test from the Steam page. But for the Patreon, um, I've got a whole like web hook system for sending out the keys. And I'm using a tool that's basically like a competitor to Zapier for that, but I don't know if that's what you're asking for, but it's interesting to talk about. So, basically, I just load up a bunch of keys in a pool and then I've got a couple of operations. One operation I run once when the play test starts which goes through all the active Patreon subscribers and for each subscriber it grabs a key from the database marks that key as used then it you know sends an email inserting the key into the email to the person's Patreon email address and that's how I distribute the keys initially but then I have like web hooks that are actively listening u Patreon will uh call these web hooks when people update their subscriptions. So, whenever somebody updates their subscription during that Patreon early access period, it does the same thing, right? It looks at that person's subscription tier, make sure it's on a paid subscription, not a free one, and then it just does the same process, right? It pulls a key from the database, marks it as used, so it doesn't get pulled again, and then it sends off an email to their email address.
So, yeah, that is uh that's how I run the play test. But when it goes public, it's just a matter of setting a flag on Steam and then you don't have to deal with any keys or anything like that.
It's just whoever wants to sign up just gets access to it.
Okay.
Oh, you know what I just realized? Um, there may be a weird interaction here which I may not want.
Investigate whether blind also causes enemies to ignore confusion. Oh, that's a good point. Also, that would be actually very problem problematic, I think.
Um, and then also investigate what happens when um, confusion crits.
So, my cat will not shut up, man. He's just sitting outside my door just screaming. Okay, come on. Come on.
What is your deal?
>> What is your deal?
This is the monster. This is the guy that won't stop screaming.
Do you have water on your nose? Were you drinking?
You're a little bit too young to be drinking.
Okay.
You're only 8 years old. You can't drink.
Uh anyway, so the reason why those things just came to mind is because what I was thinking about doing is um giving this some kind of innate ability which will maybe apply blind to ed uh either apply blind.
I want to do something interesting with this one. Like I wanted to give it an an innate ability that's something like, you know, um every time this item confuses an enemy, um blind all enemies by like 25% or something like that or blind one random enemy by 25%.
But then what I want to do is like not have any confuse abilities on this item.
So, like give it a really powerful innate ability, but it that innate ability won't do anything until you like do some alchemy to get get what you need working.
Um, so that's kind of what I want to do.
Actually, I maybe I'll just make it straight damage because I don't know if blind is going to be appealing enough um to actually go through the effort of doing that. So, what I may do instead is I may do something like let's do like deal four true damage for each Time this item applied confusion since last execution.
Something like that.
And then we can also give it some kind of like big blind.
What tips do you have for small beginner devs like me and GDAU?
Um, read the docs and just build stuff.
That's really all I can say.
Uh, you know, I think part of the problem with me giving advice to beginner devs is like I'm so far removed from being a beginner in GDAU since I started using it in 2017.
So, it's really hard for me to put myself in the shoes of a beginner and like imagine what information would be the most useful to know or what tips would be the most useful.
So, whenever this question comes up, I always have a hard time answering it cuz like I can't I have a hard time putting myself in the shoes of a beginner.
Um, but I think, you know, reading the docs is a good thing to do, but also like I'm a big proponent of trial by fire. Like I think the most frustrating and also the quickest way to learn is to jump into the deep end and try to do something that you have no clue how to do and then just figure it out piece by piece. And the reason I say it's the most frustrating is because that is the way that you're going to hit the most barriers. Like you're just going to you're going to write like one line of code and it's not going to work and then you're going to get stuck for an hour because you don't know what's happening.
But on the flip side, presenting those challenges frequently that you have to work through is how you learn the quickest, right? So, I would say like if you're just learning, just try to try to do something, you know, do input handling just to get a little character moving around. Um, try to do like scene transitions, try to make like just a basic platformer.
And if you're a beginner, there's going to be a lot a lot of problems that come up.
when you do that, but yeah, I don't know if that's helpful at all.
Are you still open for item suggestions?
Yes, absolutely.
Absolutely. I still want to add like at least a hundred more items to the game so there's plenty of room for item suggestions.
Kit saw the title, just had to know if it was true. But yeah, I know it's a big shocker. We're we're working on Alabortis today. It's very unusual for this morning stream.
Welcome Fox Shadow Codes. By the way, is GDO C# production ready? Yes, I would say so. I mean, is there is there a better example of GDAU being C production ready than Slay the Spire 2?
If Slate Aspire 2 can release a game that's written in C and also make millions of dollars doing it, then I think that's all the proof that you need.
You're welcome. I'd give you some more suggestions, but I'm starting to hoard good ideas. Oh, that's fine. Like I have an endless stream of ideas, both from the suggestions that have been made in the Discord, but also just my own ideas.
Got all kinds of stuff I want to do.
Still, I'm going to cheat a little bit.
Um, this item I think the werewolf is one such card.
Apply zero bleed per instance of damage dealt by this item.
Self-damage dealt provider. Well, that doesn't help.
Um I think what I need to do is var confusion tracker is equal to new or no ability execution tracker self for type buff applicator confuse debuff. off on triggered.
So, we need um confusion.
Uh let's do captured confusion.
Confuse applied.
Untriggered. X captured. Confuse applied. Plus plus I guess I don't really need that to be broken up.
Okay.
Okay. Okay. And then we want to do a true damage constant base true or let's just do yeah base true damage var current true damage.
Okay. And then we want an ability repeater is equal to new ability repeater.
Let's do var true damage is equal to new damage.
Current true damage. Uh target self is let's just do ignore armor true.
Okay. So, we want to repeat the true damage ability and we want this to be the captured confuse applied.
And then we need a generic like reset.
So, we need a var um confuse confusion count reset is equal to new generic ability.
Confusion count reset is equal to zero. Let's also do this needs a context object.
Oh, confusion count. What am I doing?
Confusion track. Okay.
What the heck? No. Captured confuse applied. There we go. Okay. Var. Let's just do reset is equal to new uh generic transient state and we'll just do captured confused applied equals zero.
All right. So we're going to want to do a couple of things here. So firstly we want to put the confusion tracker.
Um then we want to do the ability repeater. Then we want to do the confusion count reset. And then let's just put the other reset. So we'll just do the transient state reset here.
So this is very similar to an item that we made the other day, but basically what's going to happen is this is going to track any time confusion is applied by this item.
It's going to increment that captured confused applied. That's going to drive how many times this true damage gets repeated.
But we want to make sure that we reset that count during or after execution. So we're going to execute the true damage first and then we're going to reset that value to zero. But it is possible in theory, well it's not even in theory, this is likely possible that combat will end with a nonzero uh captured confused applied count because well I guess yeah that is possible because you could like echo a confuse on the item without it doing the full execution for example.
So this generic transient state, this is basically a way, this is like a a function that runs when combat ends. So when combat ends, we're just going to reset that value to zero as well.
I think that's basically it. So true damage perk and fuse scaling funk.
Get damage scaler base magnitude.
Now we got the tier set scale to magnitude.
Okay description template. This would be deal zero keywords. true damage for each time this item applied.
Ewords.confuse.confuse since last execution.
This would be current true damage. Oh, this needs to be Double brackets, double curly braces.
Okay, this card giant eyeball true damage.
Okay.
So, let's just do let's just do this.
Um, we'll just add a confuse.
Okay, let's see what happens.
I'm a newbie here. Do you have any suggestions for learning GDI the C way?
No. I mean, I think there's not really too much of a difference between like GDAU, the way you would do things in GDScript versus the way that you would do things in C.
So, like you know, any tutorials that you'll find about GDAU, the only difference with C is just like what scripting language you use for it. But all of the other concepts are basically the same. So, I wouldn't uh I wouldn't worry too much about that.
I forgot to build the translations, but let's see if this works. So, when this executes it, it should confuse an enemy, and it should also deal four true damage. Boom.
Deal five damage to self. Nice.
Excellent.
Uh, I'm the creator of a browser game.
If you have some time, I'd like to hear honest opinion about the game play. What do you think of the game's biggest strengths and weaknesses? and feedback would be greatly appreciated as I'm looking to improve the game.
Um, you're welcome to share your game in the Firebelly Games Discord for other people to try, but I I don't have time to really do anything else other than work on this game. But like I said, you could join the Discord and share your game there. Admin Fedario Fedario Uh, hello Evan. Welcome. I'm making some progress in this month's Wild Jam and feeling happy. Awesome. That's great.
That's great. Card idea. Gong farmer.
It's a medieval poop collector armed with a bucket and a shovel. That's fun.
Okay, I'm missing the confused keyword.
Okay, go.
Dang, cat.
What does confused do? Uh, when an enemy is confused, when they execute, when their cooldown gets reduced to zero, they deal five damage to themselves, which I may need to adjust that. That may not be strong enough, but we'll see.
Oh, I forgot to build the translations.
That was the whole point of me fixing that. All right, let's see if this works. Deal four true damage for each time this item applied confused. True damage physical damage that ignores armor.
Okay, actually let's uh let's beef that up a little bit. Let's do seven true damage.
Make it a little bit stronger. And we also want to make this innate explosive diary based on real life events.
Basically takes one action. Is confuse stackable? It is. Yes.
You could put confuse on a you could put a bunch of confuse on the same item and then it could deal like 20 damage to itself.
I mean to the to the board items don't have health individually obviously deals seven true damage for each time this item applied confused since last execution. Look at that.
So the first execution it's not going to do anything because the confuse comes after but then it will deal four or seven true damage and it should keep doing seven true damage as well.
Excellent.
All right, let's give it some kind of blind now. So, we're not going to give it any innate confuse, I don't think.
Um, actually, I wonder if I should do like another synergy ability. Like I wonder if I should make it apply confuse um whenever an ally applies blind.
Yeah, maybe we'll do that instead.
Okay, initial work.
So before I forget, I also want to do this giant eyeball. I need to give it a new name and I also need to give it flavored text.
Okay.
Yeah. So, let's do Okay.
Confuse per blind.
So actually this is largely going to be this is largely going to be the same.
So we'll just copy paste.
I think confusion Yeah, confusion can crit which will add more Yeah.
I'm going to need to figure out how to handle confusion being critted. I think what I want to do with the crit for confusion is I actually want to take the crit bonus and add it to the self damage. But I actually don't know how that's gonna work.
Um, anyway, we'll think about that later.
We will think about that later.
Anyway, so confuse per blind. So we want to do four type mischants debuff source board.
Okay, so on triggered captured blind count to do confusion.
Oh, this would be blind tracker. Okay.
Um, new buff applicator confuse debuff.
I need to Oh, I need to query target provider for this. Okay, so we do magnitude.
All right.
blind tracker.
Okay, so we need the query target provider.
Options.query sourceboard is equal to false. Options.query Query target board is equal to true.
Options dot limit is equal to one.
board inventory component.query directions. entire board. Okay. So, here's our query target provider now.
Oh, my initial magnitude. Okay. Ability repeater. Confusion.
captured blind count.
Oh, this is going to break because it's going to it's going to apply confusion to the same enemy multiple times. So, I actually need to like grab a new item from the query target provider. How did I do this before?
generic ability with result static cash.
Uh, I need to figure that out. Okay.
Well, I guess it's fine.
Maybe I don't need this scaling funk. I don't need this current true damage anymore. I don't need that anymore.
Okay.
All right. Keywords confuse capitalized query target provider.2query string template zero for each time. Keywords.blind was applied since last execution.
Card giant eyeball.
Confuse per blind.
Uh, no. Confuse per blind.
We'll get rid of this.
Do I need that additional keywords? I need blind for sure.
I don't think I need this one.
Although maybe I do.
No, I don't need that. Okay.
So the problem I need to figure out what to do about that query target provider because essentially what's going to happen oh I need to add that also to here.
So essentially what's going to happen is it's going to run this query target provider. It's going to grab one thing and then it's just going to repeat. It's going to repeatedly add confused to that one item. But what I want to do is I want to add confusion to a random item every time it executes.
So I may need to figure out how to do that.
I could have sworn that I had something similar in my codebase somewhere.
But let's just see if it works. I'm going to add an idol here.
A giant eyeball with blind is funny.
What if it becomes enraged when blind attacking everything at random but is also stronger? Oh, that's an interesting idea.
Hello Dan. Not serious but serious item idea. Mirror visions of past. Minus.1 second cool down. Alchemy. This item cannot be used in alchemy.
Apply 1% blind to random enemy item.
Oh, I see.
So it's just got a really quick cool down. It's just continually applying 1% blind to a random enemy. But you can't use it in alchemy to prevent people from like um getting the low cool down.
That sounds cool. I don't know if I would make it that low, but yeah, I get the idea. What am I working on today?
Well, right now I'm just adding this new item into the game. So, we're working on the abilities for that. And then I should be done with this guy relatively soon. I mean, this might be the last ability that I add to it.
Confuse one random enemy item for each time blind was applied since last execution.
Deal seven true damage each time this item applied.
Okay, so the descriptions look correct.
So this should go first. This should confuse one random item. So, this will go.
We should see some kind of confusion.
Okay, it did apply confusion.
Cool. So, that worked.
And now the giant eyeball should deal seven true damage, I believe.
And then also apply confusion again.
So, because this is the only thing applying confusion. Oh, that was a crit.
Oh, dang. Because this is the only thing applying confusion.
Actually, hold on a second. Oh, yeah.
It's applying So, see, it's applying confused twice. So, actually, it applied confused twice. So, it should deal 14 damage.
or it's seven damage twice. Yeah. Okay.
So, it is working. It is working. The only thing I need to figure out now is how to get that query target provider to choose new targets every time the ability repeats.
And the the the honest truth is I don't know how to do that.
Um, um, one thing that I could do is I could wrap I could wrap the query target provider and the buff applicator here. I could wrap that in another composed ability and then I could repeat the composed ability.
That might be the thing that I have to do. But I want to make sure that that's the case cuz I I was sure that I had something similar.
Oh, wait a minute. Oh, yeah. Yeah. Okay.
Okay. So, I actually don't need to do this. I can just create a confusion ability confuse like this and basically just take these options and actually those options are already correct. So I think all I need to do is just do this do the base confuse count.
So now this this ability builder confuse this creates a composed ability that has the buff applicator and the query target provider inside.
And so all I need to do now is I just need to repeat that confusion and that should work.
Does this scale?
Oh, but the problem is so I need to restructure the description now a little bit.
So this would be I would do this instead. I would do repeat for each time blind was applied since last execution colon zero.
And then in here what I would do is I would do confusion or this would be inner ability description wrapper from confusion.
To be honest, I don't remember why I have this.
Oh, for upgrade diffing. I got you.
So, that is a way to do that. Um, the other thing I can consider too is do we want to just make the confusion scale for tier in here?
What does that do? That increases the limit.
Uh, why am I using this? Oh, I'm using it all over the place.
That might be a little bit too aggressive scaling.
Um, I just won't scale it. It's fine.
I think I'm using this language elsewhere or Yeah.
This is the kind of thing where I'm like, I don't know what I should do for language consistency. See?
Well, let's just try this.
Just try that.
Okay.
Is this VS Code? It is. Yes, it is VS Code.
Oops, I forgot to build the translations again.
Build.
There we go. So, this should be functionally the same.
This should be functionally the same, but we'll see.
Yeah, it appears to be working.
Cool. All right.
So, that's a little bit of an interesting one. It's got a couple of synergies built into it. One of which is innate, but you could also put confusion directly on the eyeball.
Cool.
any particular reason you choose not to use a pre-established engine?
Uh, I don't know what you mean. I think GDAU is a pre-established engine.
Okay, I'm going to take a quick 3minut break and when I come back, um, we will find something else to work on in the backlog here.
got a bunch of controller stuff to do. I didn't see GDAU. Oh, gotcha.
Okay, so I've got uh yeah, I've got a bunch of stuff in the backlog to do. So, we'll find one of these things to do when I get back. But I'll be right back in just 3 minutes.
Heat. Heat.
Heat. Hey, Heat.
Hey, hey, hey.
Hey, hey, hey. Heat. Heat.
All right, I'm back.
Oh, I'm missing something.
Uh, sorry. Give me one second.
Okay, now I'm back.
GDAU is basically 30,000 years old now.
It's an established engine. Yes, indeed.
Hello, budget gym. Welcome.
All righty. What are we going to do?
Um, let's see.
got a bunch of controller stuff to do.
Maybe we'll work on this. I mean, I it has to get done anyway. So, maybe we just go ahead and do that.
Okay. All right. I'll plug my controller in and we'll get some controller work done.
We had our fun adding a new item to the game and now we do controller back to some technical work.
Okay, got my Xbox controller plugged in.
So, one thing that I want to do is character select needs to disable controller focus when starting.
I always forget how this works.
What is this?
Oh, character select scene instantiate. it.
We disable the mouse input there.
Character select.
So where is it's adding it as a child just like down here.
Um, so I guess it would help to show the problem first that I'm trying to trying to resolve. So if I turn off skip menu, I go into the game.
So I go to continue.
Start brings you to the character select. If I click back, that actually works pretty good. But if I have a character selected here and I've got like the character Oh. Oh, I need a scroll container. Oh, we're going to have some problems here.
I've got two scroll containers and they both need to be scrollable.
But anyway, when I click start, it focuses back on some things in the drawer there. So, I don't want that to happen.
Um, what I may be able to do, how am I going to handle this actually?
Well, I've got a couple of problems here.
So, one problem is we've got two scroll containers, which means that I cannot just assume Oh, well, let me think about this.
Shoot. What am I going to do about this?
Um, cuz right now scrolling typically works by you just move the right analog stick up and down. But if I've got two scroll containers on the screen at the same time, what in the heck am I going to do about that?
So, that's one problem.
The other problem that may yeah this card tool tip this needs to go all the way down here.
So I'm trying to rely on the GDO scene tree order of things for input handling.
So I've got a scroll component that handles scrolling in the card tool tip.
There's a scroll handler component here.
So that needs to be low on the tree so that when that scroll handler is in context, it intercepts all of the scroll requests. So it scrolls this card tool tip directly automatically.
Um, so I need to move that down there.
And then for the character select, I mean, I'm not really trying to resolve the scroll handling at the moment.
I think what I can do potentially is I could maybe add a focus context boundary component here and we could set it to disabled by default. And then what I can do is I could set it to exclusion I think.
So if I do node focus context boundary component scroll all the way down here. So on start clicked focus context boundary component set mode mode.exclusion.
Now, the question is, is that actually going to work?
Let's just see if that works first.
So, I select this guy, I click start, and I can't select anything else. Okay, perfect. We're probably also going to want to do that uh when I click back as well.
If not play in that and am I Q freeing this? Yes. Okay. So that should handle those is issues.
So we'll make use of the focus context boundary component for that.
So click start. It's not working.
Why is it not working?
Excuse me.
What did I do?
Unable to cast object of type. Type GDO control to type character select.
Are you sure about that?
Are you sure about that?
Why did that break?
I have no idea why that broke, but let's go back now.
That works. All very nice. Now I'm back to the start. The focus is only appearing when I have something to focus. I do all this stuff. I click start. My focus goes away.
Then I come into the map. Okay, so that's looking pretty good. Now we got to handle the scroll handling.
Disable focus during play out start on character select.
I wonder, excuse me, does controller input differ a lot between Xbox, PlayStation, and a third party party controller? Obviously, the buttons are called different things.
My understanding is that the mappings to the buttons are pretty universal.
Uh, and GDO picks up on that, too. So, if I go to my input map, you can see that this says like click left, right?
This is Joyad button zero. So whatever whatever button on the joyad is zero um is what will be the action and for Xbox that's a for Nintendo that's B and for um PlayStation that's the X I always called it X I don't know why it's called cross but there you go right so button zero like in a typical joyad like button zero will always be some button usually it's the bottom face button. But if you have a different weird controller, there will be a button on the controller that is mapped to button zero. Right? So, it's just whatever button zero is on the controller.
Um, which for the major controllers face buttons is going to be the the bottom face button, right?
Um, and that's the way it works too. Like these axes as well. Like this is all standardized uh for the most part.
So yeah, it's it's looking for the button index essentially or the button code essentially.
The wish list flag needs to be more obvious somehow. I don't I don't know about that. I mean, it's just a little nice thing to have. But if people are trying the demo from the Steam page and they're really liking the game, number one, if the game's already out, they may just go and immediately buy it.
And number two, like they're not going to forget to wishlist if they're going to have fun with the game. So, I don't need to make it super obvious, I don't think.
And obviously, that wish list f uh flag will have to go away when um you know the the full release of the game is out.
So, would you be able to add a rare modifier that can rotate a card?
Yeah, I considered doing an artifact that would allow you to rotate, but the problem is that would require very significant technical changes and so I don't know I don't know if the juice is worth the squeeze, you know, like that would require so like not only would I have to take into account a potential rotation for the card every time I'm doing like card placement stuff, but I would also need to persist whatever the card card's rotation state is in the save file. And if all of that was being done just so I could add like one artifact to the game, it's it's really high risk. It's a lot of technical effort and it's for one thing, right? So maybe in the future, like postrelease, if I'm thinking, "Oh man, that would really be a cool thing to do, maybe I'll do it." But at this point in time, it's just it's not I don't think it's worth the effort, unfortunately.
GDO first tries to normalize the buttons to the SDL mappings, but my 8bit DO controller doesn't have a mapping in GDO prior to 4.6. Oh, gotcha.
That makes sense.
Uh, okay. So, we need to handle the scroll. I mean, would it really be that bad if I just did a scroll handler component? Well, actually I don't think I can actually make this work with two.
I'm never using this when hovered thing.
Oh man, I would have to go and update everywhere. Scroll.
Let me just do this clean up really quick. So firstly, let's do this. I hope this works.
Scroll handle mode.
Disabled or always.
And then I don't think I'm using this when hovered anywhere. So we can get rid of this.
We can get rid of this.
Get rid of that.
Get rid of is hovered.
I don't care about this anymore.
Parent clickable control.
We don't care about that. Okay.
So now really really is that just going to be a safe change?
Do I never have I don't have a scene with always configured by default? Oh, it's Oh, it's always by default. Oh, that's this default option. That would make sense. So what I was looking for is I was looking for scenes where I had always set and I was going to change the number cuz you know GDAU represents the enum value as a number. U but since I removed the middle option I was thinking oh I'm going to have to change the value from 2 to one right but since it's defaulted to always it doesn't write that to the scene file.
So it only writes whenever the default whenever the value is non-default. So that means that these ones are set to disabled by default. But that still is zero. So I should actually be good to go with that. So I don't think I need to do anything actually.
Yeah, I don't think I need to do anything. I am going to rebuild though.
Now we got to figure out what to do about the scroll handling for both components.
Hello Adosu. Read the chat please.
Goodness gracious. Hello, Play Tomato.
Why do you use VS Code and not the built-in code editor? The built-in code editor basically has no C# support. And by basically it has no C# support, I mean it doesn't have C# support at all.
So no IntelliSense, no refactoring, no nothing.
It'd be like writing your C scripts and just like Notepad or something.
So that's why.
So the problem here is I do I do this.
I mean we could get the scroll handler working there. Problem is if I select all these difficulty options, I've got two scroll bars now.
Now one way to fix it is to take this scroll handler component and just point it at Oh, and I don't even have ah son of a biscuit. I don't even have a reference to those things in this scene.
All right.
Um, okay. We're going to have to do some things.
Um, character information.
Let's put a scroll handler component here.
Point that at the scroll container.
Now I'm wondering if I should change the behavior of that scroll handler.
So the way it works now is that you can scroll basically any scroll bar that's on the screen.
You can scroll with the with the uh controller. So this works. Now problem is if I put all these up even if I add a scroll handler component to that modifier information. So difficulty information. So, if I add another scroll handler here and I point this one at the scroll container, the problem is that I think only one of those is going to be scrolled. So, this one works fine, but as soon as I select a character, see that one is taking precedence. So, I can't actually scroll the character select one.
So, one change I could make which I really don't want to make is I could make it so that the focus has to be so whatever element is focused the ancestor of that control has to be the scroll container that is in the purview of the scroll handler component.
The problem is that won't work as a generalized solution because then I need to make these focusable in here, right?
But the other problem is I have other elements like in my unlock menu, the challenge list, which I would also have to make focusable.
So that would require some pretty broad changes to make that work that way. And also, I don't know if it would be as nice to do it that way. So, if I go to my unlock tree and I open challenges, see how that takes precedence here. But I can also inspect like these things.
Oops.
So, I can also inspect this and that scrolls there, right? So, it would be really annoying. Oh, that's there's also a problem here, which is that I can't inspect the cards in here.
Okay, let's write that down.
Controller input handling is a nightmare. So, I think what I'll do is I'll do like a middle ground approach.
How do I want to do this middle ground approach?
So, I grab a character.
I could make it so that this character panel can only scroll if you're like focused inside of here. I guess the other thing I could do is I could make the scroll bars themselves focusable.
How difficult would that be?
That may be a nightmare.
But if I made the scroll bars themselves focusable, maybe that would be the solution.
Uh, what happens if I do that? Let's see.
That might be a piece that I can use here.
Okay, so let me just try this.
So, scroll container get v scroll bar v scroll bar. You know what's really annoying about the scroll containers in GDI is there's no straightforward way to determine or like there's no built-in method to say, "Hey, is the scroll bar at the bottom?"
Can you believe that?
Can you believe that? So, look at this.
I have to do this whole bunch of garbage just to detect just to detect if the scroll bar is at the bottom of the scrollable area. And it's not and it's a nonobvious comparison, too. Like, you have to look at the scroll vertical position and then you have to take the scroll bar's max value and subtract it by the size and that will tell you if you're at the bottom or not. It's like, what? And then there's some weird stuff about like page sizes and whatnot like is scrollable. So the the scroll bar is scrollable if the vertical scroll bar domax value minus the scroll bar.page is greater than zero. Like what?
What?
So anyway, I think I might add those as extension methods to the GDO utilities library.
But anyway, did I break something?
Oh, so anyway, um focus manager.register register focus toggle toggle listener.
Well, do I want to do that?
Actually, I wonder if can I do it in here?
I don't know.
Focus manager.register register focus toggle listener scroll bar um I don't think I need to add any filtering there.
Let me see what that does. I have a feeling that's not going to work. My feeling is that the scroll bar is not going to be available at that point. So I may have to do something else. Been a while since I've joined the stream.
Hello, Andrew. The game is looking sick.
Thank you.
I've been missing so many streams that there are four new characters and difficulty options. Yeah, you're welcome. Play tomato. Hello, Ving. I've only made one one-handed weapon so far. Just realized I had the holster string attached to the hip instead of the thigh. Interesting. How much time did you work on Alamortis?
I've been working on it since March of 2025.
So, it's been a long time.
It's going well. How are you doing?
Could you scroll a box depending on where you are? Focus currently modifier scroll if you're on the difficulty idols. Otherwise, the character box scrolls. That is a good idea.
Something broke.
What is even going on right now?
Huh?
So, I can go over to the scroll bar here, but I can't go back out. Oh, did I break something?
Hold up a second. What did I do?
What is happening here? Why is it that when I add this as a focus toggle listener this focus system is I mean I'm pretty happy with the focus system generally. It's just really hard to know why things are breaking sometimes.
Okay. It must have been grabbing it must have been grabbing the scroll.
See, I don't get that. My focus system should automatically be checking if something is visible in the tree before trying to grab focus.
is visible in tree. Yeah. Is control intrinsically focusable?
Handle scroll changed get focusable group members. Try grab focus if control I just want to check something. is vc scroll bar gd.print tried to grab scroll bar.
I just want to see what this is actually doing.
My suspicion is that it's trying to grab the the invisible scroll bar of the other scroll handler component, but I don't think that's okay. So, we should see in here.
Oh, try to grab scroll bar. V scroll.
Yeah.
Did I not do this correctly? One second.
Oh, I still have this is scrollable here.
Try it without that.
How are you handling all the cards you're adding to the game? Are each of those cards unique resource node? No, they are custom resources.
So there's one resource per card, but there is not one node per card, if that makes sense.
Try to grab scroll bar vcroll.
Now the problem is I don't know which scroll which scroll that is.
I just put that there. I want to see if those are different scroll bars.
Is control focusable? Is control in intrinsically focusable? Is visible in tree? I mean, that should work. Let's see.
Okay.
The scroll bar 801.
Okay.
So, it's trying to grab the same scroll bar. So, it's not grabbing the other scroll bar. I don't know why that's happening.
Where is the controller focus going?
Okay, let's do something else. I mean, I don't Okay, I don't really need to pursue this path, I don't think. But I would like to be able to cuz I think this would be a relatively nice solution if I could in my scroll handler component say, "Okay, this thing cannot scroll unless the scroll bar is focused." That would be a nice way of handling that.
Um, but I guess I won't do that if it's going to be a huge thing.
So, I'm going to watch I'm going to sort of shrink the window so I can actually see the logs being printed here. Okay.
Focus change to reference wrecked.
That's fine. Select that.
Focus change to V scroll bar.
No, it is trying to go over to the other scroll bar. You see that focus changed to controlV scroll bar 3.
So, we don't need to read that whole thing, but it ends with 586 and then it tries to change to the scroll bar 168. So, it is trying to go to the other scroll bar.
Oh, is it trying to go to the Oh, that should not be happening.
If control is vc scroll bar v scroll bar um gd.print Print is vc scroll bar uh visible in tree b scroll bar is visible in tree.
Okay.
My focus So the way my focus system works is that there's several layers to it.
I have the focus context boundary component. And what the focus context boundary component does is it basically limits the focusable options to be only those that are descendants of the parent of that boundary component.
So when I have a focus context boundary component here for example, that means that only the controls that are descendants of character select are focusable candidates. But there's also extra checks, right? like we don't want to be able to grab focus of something that is not visible in the tree. So, it's been hidden or for example in the scroll bar case the there's a scroll container but it doesn't have enough content to actually show the scroll bar.
So, we don't want to be able to focus that, right? And so, the thing that's confusing me is that I don't know I don't know how it's being able to grab a control that should not be grabbed because it's invisible.
That's the part that's kind of confusing me a little bit.
So wait, let's go here.
So we've got is scroll bar visible in tree. That's true.
Is v scroll bar visible in tree is true.
Huh?
Oh, I think I know what's going on.
I bet you if I do this um Oh, I see. The scroll container is always visible. So it must be the case that uh so what's probably happening is even though the scroll bar is not visible, it's still visible in the tree. So basically its visibility is enabled, it just doesn't draw anything and that could be the problem. So that would explain why it was working when I added the is scrollable filter to this here because that is an additional check.
See, but I don't know if that's going to work.
No, it should work actually.
So that's a little bit annoying. So, it must be the case that GDAU keeps the scroll bar visible in the tree even though the scroll bar is not going to render anything.
That has to be what's happening cuz like if I turn that scroll container visibility off. So, let's just turn that off there and I go back into the character select. I bet you I'm not going to have that issue again.
So, I go over here. Yeah. See, it's not it's not breaking anymore.
Well, that's a little bit Trixie.
So, yeah, I think it's just as simple as making sure to add this is scrollable filter here on the focus toggle listener. So this is the other kind of layer of the system is that because I support switching between mouse and keyboard dynamically, I want to actually turn off the focus mode of everything when you're using the controller. So these focus toggle listeners uh register and unregister.
This is essentially a way of me registering in the focus system that this control can have its focus mode enabled. U but then the system handles flipping that enum value to focus mode.all. all um when controller input is being used, but when controller input is not being used, when the mouse is being used, it goes through all of the focus toggle listeners and it just sets them all to not focusable.
And that's just, you know, because I don't support keyboard navigation and if I left the focus mode up, that would get all weird and whatnot. So, if you're on mouse, nothing is focusable. If you're on controller, only the ele the controls that opt into the focus system are focusable.
So yeah.
Oops. I need to.
So that's kind of that's kind of I guess okay, but I need to put this back.
So now let's just see if it works in theory. And then I also need to change like where exactly this is going to be focused. And I also probably want to make it uh like a flag on the scroll component. But let's see. So, if I enable all of these, I can go over here now. Yeah.
Oh, wait.
So, yeah, I'm not even close to done.
So, this should only be scrollable if I'm actually focused on the scroll bar because right now it's still intercepting all the scroll events.
Okay, but we're making progress.
Now, how am I going to do that?
Uh, well, well.
Anyway, we figured out the weirdness at least. So now it's just a matter of getting the logic to work so that I prioritize the scroll handler components that have the scroll focus. Actually, do I even need to do that? Let me think about this.
Me think about this.
So I think input handling is only done for the mouse. else.
Allow outside scroll.
Okay, so there's a little bit of weirdness going on with controller. I want to handle the scroll in the process method so I get screw smooth scroll, but I turn off the process method when using the mouse and I just rely on input events instead for discrete mouse wheel events.
So actually there is this like should handle scroll So, I think what I would do in here I think what I would do in here is I would have like another flag that's something like um export private will require scroll bar focus or something like that.
So I do require scroll bar focus and then in should handle scroll.
Um if handler equals this and not um require score focus or get viewport.gui GUI get focus owner is equal to scroll container.getv scroll bar.
I don't know if that's going to work but let's see.
I got it. Thanks for answering. I watched you talk recently about how someone managed their car data via YAML and found it very very interesting.
Yeah, I mean I could do something similar too. I mean a custom resource in GDO is basically just that right it's just it's just a text resource that contains all the initial configuration data. Now what I can't do is I can't define the card abilities um in a custom resource. So every card has its own script where it defines its abilities.
Um so every single card resource has a script to match. It just doesn't have a node. Like there's a generic card presentation node that all cards use. Uh but I do have like so like my giant eyeball that I just made on this stream. I have to define all the abilities in code cuz there's just I'm not going to say there's no way to do it, but being able to define the abilities that I want to create in text would require me to create basically my own scripting language.
um which is just not worth any effort whatsoever. Hello, Snut Bill. Thank you for the R10,000. Very much appreciated.
Thank you. Thank you.
So, we turn on require scroll bar focus and we've got the message yummers here.
Very nice.
All right, let's see what happens.
Um actually, is that going to break the mouse?
I think I need to do not input device manager. Controller active.
Okay.
Continue. Start.
Let's turn on all the difficulty modifiers.
Okay, let's try scrolling. Scrolling didn't do anything.
Scrolling is still not doing anything.
But I can scroll this now when I focus the scroll bar. This one is not working.
Did I not put a scroll?
Oh.
Recomputee active handler.
Heat. Heat.
I think I put this check in the wrong place.
I think I need to put that in the active handler.
Okay, where is the recomputee active handler?
If handler is live target uh which one do I add it to? Do I add it to the live target?
I don't think this is going to work either.
I think this needs to be a little bit more complicated than I was thinking cuz this only recomputes.
So it grabs. So of all the there's a there's a reverse depth first order to the scroll handler components which basically determines which one should actually be intercepting the input events. And the reason for that is what I've mentioned before which is if I've got a screen that has a scroll bar and then I want to overlay like a modal or a drawer on top of that screen and that screen also has a scroll bar. the scroll bar that is lowest in the tree order, which would be the modal that's on top of the screen or the drawer that's on top of the screen. That's the one that should be handling the scroll, not anything else that's in the background.
So, what I'm doing is I'm basically only recomputing what the active scroll handler is when certain things change.
Right? So, I've got this mark active handler dirty.
Um, and this is basically just whenever something changes about the scroll bars, it will mark mark this as dirty and then on the next time something calls should handle scroll. It will find the new active handler and then it will, you know, figure that out. you know, it will say, okay, if the active handler is equal to this scroll component, then I'm the one that should be handling it.
Um, but I have another situation in here now, which is that the active handler should change if require scroll bar focus is true and the focus owner is the scroll bar.
So I think the only way that I can really do this is I have to listen for GUI focus changes I think. Or maybe not actually. Maybe I don't need to do that.
Let me just drop this in here before I forget.
Okay, I'll just keep that logic there.
What I can probably do actually is in enter tree, I could do scroll bar. Yeah, I could do this. Scroll bar.focus entered on scrollbar focus entered.
And then scrollar.focus exited.
And then I want to unsubscribe those when we leave the tree.
I don't think it really matters that much, but okay.
On scroll bar, focus entered.
If require scroll bar focus, we're going to mark active handler dirty.
Private void on scroll bar focus exited is live target on scroll bar focus exited. We'll do if require scroll bar focus and active handler is equal to this. We're going to mark the active handler as dirty as well.
Okay.
So now when we go to recomputee what we're going to do is we're going to say for each of our handler and handlers handler notis is live target. That's correct. So we keep that.
If handler require scroll bar focus and get viewport uh handler.get viewport GUI get focus owner is equal to handler dot scrollcontainer.getv scrollbar.
We're going to say active handler is equal to handler and we're going to break Is that going to work?
I have no idea.
Yummers.
Okay, so we've got this. I can scroll that just fine.
I put all these up.
Son of a biscuit.
Why is that not working? Oh, I broke my controller.
Why is this still intercepting the scrolls? I literally Oh, it's Oh, I think I need to This is wrong. I need to just Yeah. go in here and then I need to say if handler.get viewport right.
So if if it requires scroll bar focus, we're going to break if it registers itself as the active handler. Otherwise, we're going to continue. We don't want to do the depth first search.
We just want to skip it. So if it requires scroll bar focus, it's either going to be that it is active, the active handler, or we don't want to consider it at all because it doesn't have it didn't meet the requirements, right?
So that should work. What are we working on at the moment? We're working on controller controller navigation particularly as it relates to scroll bars. Okay, so that one still works.
Look at that. It's working. And now if I go over here. Oh man, look at that.
Beautiful.
Now, I guess you could make an argument that maybe scrolling something should always require the focus, but now that I have that functionality in place, you know, I can think about that. But the other thing that's a little bit annoying is that the I think the cursor should like sit in the middle of the scroll bar.
Um, so yeah, I might want to do that, but I don't really know how I'm going to approach that just yet.
Excellent.
Goodness gracious, that was quite an ordeal.
Okay. All right.
And actually, do I even need to do that?
I think it's fine the way I have it now. I should probably test it with a mouse and make sure I didn't break anything. I don't think I did because I think the way the mouse works is it basically just falls back to the default um scroll container.
So, I can only scroll when I'm in here.
Oh, and it looks like It looks like that broke cuz I can't scroll the card tool tip anymore. That's good.
Why is that happening?
Oh, because the card tool tip is before the character select, right?
Okay. Well, I can fix that. I mean, if I just Oh, I can't move this at runtime.
Um Let's just fix that really quick before I forget.
Okay, hopefully that works.
It does not work. Cool. That's awesome.
Oh, I need to do minus two.
That's a little bit finicky, but I don't know. I guess that's the downside of using the tree order to determine the scroll order.
Okay, now I can scroll that. Good.
Okay, let me make sure that it still works with controller. So, if I go up here.
Oops. And I lost I lost my focus again.
Really?
It's It's probably going into the card tool tip if I had to guess.
I'm really not sure why that happens.
Character select scroll bar not working after viewing card tool tip. Suspect that focus is being grabbed by invisible card tool tip scroll bar.
Okay. Well, I have to figure that one out. But anyway, I think maybe the easy solution would be just to prevent those things from being registered as focus listeners if require scroll bar focus is not true.
Or I could add yet another flag and just say like disallow scroll bar focus.
Although the thing that's worrying me is that I think this could potentially become a problem just generally.
Man, I don't like controllers.
I don't like them.
If I do that, I can't inspect any items there. That's interesting.
But I could scroll that now.
Oh, I can still focus the scroll bar over here, too.
This is pain.
I'm trying to get this freaking item done and I keep adding more because there keeps popping up with issues.
character scroll bar.
I think I can fix that one. I think that one because No, wait a minute. Focus context.
Does this get set to exclusion?
Oh, I think I might need to do something weird here. I might what I might need to do is put like another focus context boundary component here and set this to exclusion.
Oh, that's the wrong thing. But set that to exclusion when it's collapsed so that it excludes the scroll bar from being focusable. Goodness gracious.
Anyway, anyway, I'm going to have to keep working on this this afternoon, but that's going to be it for the stream for today. Thank you all for watching. Thank you for being here. It's always appreciated.
And yeah, like I said, my main focus is just going to be finishing up these last to-do items, which apparently the controller support is just going to take up all that time. But the uh the play test will be available very soon. So wish list the game on Steam if you're interested. And then if you are interested again, you can join the Patreon to get early access to the play test.
If you subscribe at either tier um while the play test is running, you will get um a bunch of early access time before anyone else. Uh, if you subscribe to top tier here for at least one month, I will send you a Steam key for the full game when it releases, as well as put your name in the in-game Alchemortis credits.
So, yeah, there are some nice things for you. So, yeah, if you want a sports game, those are the ways to do it.
Otherwise, the play test will be available for everyone to try after the Patreon early play test period. So, you don't need to pay anything to get access to the play test. And yeah, that's it.
Thank you all for watching. Thank you for being here again. And yeah, I hope you all have a great day. And bye-bye for now.
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

WOW! Judge TURNS THE TABLES on Trump in His OWN $10B LAWSUIT!!!
MeidasTouch
197K views•2026-07-23

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

Steam and Xbox Just Dropped The Hammer On PlayStation
OhNoItsAlexx
9K views•2026-07-23

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