Stout’s modular approach brings professional engineering rigor to Roblox, effectively bridging the gap between hobbyist scripting and scalable systems design. It’s a masterclass in applying high-level architectural discipline to ensure long-term maintainability even in seemingly simple game loops.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
coding items for my button game
Added:Yo, welcome in. Welcome.
Welcome. Welcome.
Yeah, Penguin, you were first.
I'm doing all right. Doing all right.
When do you expect to ship the game?
I don't know, dude. I'm just taking my time with this.
Oh, I made a I made a backpack icon.
I made two. I went with this. Uh, this one was too much. I think I needed like an icon here, but um I didn't know what to put. I tried putting like this, but it looked weird.
Also, you don't have buttons in your inventory, so yeah, I think it looks nice though. Um, it'll look better once we actually have an icon.
Go Talon E out of the window. Oh, I get it. You're talking about League. Nice.
[laughter] So dumb.
Are you an artist? How do you draw that backpack?
I don't think I'm an artist. I don't know. I think I've gotten a lot better at UI over the years. I also just take a long time doing it.
This one looks great, but too distracting. Yeah, exactly. It was like too much. It was too much. So then I I simpler and I I like it. Kind of dumbed it down.
I think a little icon would be nice, but whatever.
Leaf, my game is doing good. When do you think it'll get into home wrecks? It depends how many players uh you've had and then the stats you have. I would like typically expect it at about like a week from release is when you would get like your first um homerex.
What font are you using? Builder sands extra bold. I will add that to the FAQ.
I forgot I was going to do that.
Oh, wait. I did. Wait, did I?
I did.
No, I don't use Hoka.
I use Builder Sands Extra Bold.
I've used it for the last like four games I've made.
Preda one is so overused though.
Um, okay.
What's up?
Doing all right. Oh, you're trying out VI. Nice. [clears throat] What? Okay.
Uh, do you use Video or you just use regular springs? I just use the regular springs in VID. Although I like the ripple springs a lot more. That was my like my biggest gripe when switching from React to Vide was I missed my ripple springs, but the Vine ones get the job done.
Purple. Yeah, I know. But it's whatever.
My game has pre-built UI like I've done it via non via script. Would the plugin used to be compatible with it? Almost definitely not.
vignette at the bottom. H maybe.
Okay. Um so today, what are we doing? When you equip an item, um I want it to be shown um on your player and for other players to see. And then we'll go from there on what it actually happens after that.
Um, I kind of want to add like a cool like cover effect type deal.
Like that would be cool. Um, and then yeah, we'll see how difficult that is. I don't know. I want it to look clean and then we can actually do like the whole like, you know, make the item usable. got the the Steam Deck.
Uh the coins are Yeah, they're just a part with a billboard UA. The coins.
The fish, if I can get one. Is it just the actual item? I guess it has billboard in it, too, though.
No, I'm not left-handed. I guess this is mirrored. So this is my right hand.
You're focusing way too much on how things lick and and not just making stuff work at a decent pace. I mean, you're right, but I'm also just having fun with this. My goal is not to pump out a game as fast as possible and try and be really efficient and whatever.
I'm just trying to have fun making a game and make a a well polished game in the process. Just enjoying the process.
Really?
Yeah, I'm definitely not locked in on like trying to get this out.
If I was, I would not be spending this much time on it whatsoever.
Okay. Yeah. So, when you equip something, basically I just made a a feature folder. Equipment right here.
There's nothing in it. So, um I'm thinking basically everything will be considered like like equipment client and then you pass in the player and then from there you kind of derive everything.
Game out yet? No, not even not even close. [laughter] Not even close.
Hope Jinking the packages. Oh no modules. It's for my gen feature tree thing that I can set up my Rojo like this.
Yeah.
Um, packages do you use? Um, I use this is everything I use.
Sift. You don't like sift? What?
Why don't you like sift?
What's wrong with sift?
Thanks. Sift is great.
That's such like a specific issue. I've never experienced that.
Um, that's funny though.
Video on your networker, dude. It's not worth making a video.
It's so basic.
And it's like not anything crazy either.
English, guys. English Um, okay. So, what this feature will do.
Oh, weird.
um what equipment or [music] what this feature will do is it will track every player's um equipped items, replicate the IDs and the level and all that to the clients and then the clients will basically create the the items and manage like the life cycle of um them being like which one's equipped when it like attacks a certain thing or if there is attacks. I don't not going to go into that or anything like that, but that's what this feature will kind of control. Um, and features are basically like slices of your game um broken up into just like features. So, make a video about your gen feature tree. No, someone made a replacement for it called um Rogen, I believe. And I think there's actually docks and like easy setups for it.
Aren't using cons for the table.
I don't know. [laughter] Just used local for over 10 years. So now stuck with it. I use cons like actually make like you know like I don't know whatever. Um, okay.
Let's say just in it, I guess.
Damn.
Um, uh, I don't make loading screens, so I don't know what I would do.
Okay. So then I want to basically track players um track their equipped items.
So I basically just need to like listen to the changed event on each player which I could just use.
player data.
Um will be service player data.
New and then basically this allows me to hook into a um player added function.
Um, and then I'll just do local player data template that and type player data shirt and then Yep.
This also gives me the data which is just going to be a blank table for now.
Can I ask how your game got 100 million visits even though I've never seen it?
Defenders Depot.
Defenders Depot is a really old game.
So, uh, it was popular like five or six years ago if you're talking about that on my profile.
Uh, Slime RNG has like half a billion plays though. That was really big like a month ago.
Yeah. Overseer. I like uh I like VI over React personally.
Sift is for table utilities. table table utility functions. So I could do like sift dictionary and there's a bunch of just like table utility functions.
The general tree tutorial look up row genen.
Someone made an easier tool.
Okay. Um, so when a some when a player is added, I basically want to subscribe to their data. I'll say data um data service wait for data player.
How much time it took me to make slime?
5 weeks.
Slime RG was like the quickest game I ever made.
Uh, highly 15. I've been creating some of the games, different systems to learn and gain experience. What do you think?
Um, I'm glad I'm one of your favorites.
Uh, I mean, yeah, just just keep at it.
Um, and I don't actually need data here.
Okay. And then what I'll do is say data player um um equipped changed and then I'll make a function.
Um, hey, what's up guys? Doing all right.
Uh, I'll make a function just called uh replicate equipped.
per player.
And when you're um equip changes, I'll say self um self replicate equipped player.
Yeah.
Um, this like won't fully work now that I'm thinking about it because this just tracks the ID. Like this will just give me a um an array of strings which points to the unique ID.
Um, so like let's say I level up something then like that ID has changed. You know what I mean? This is equipped ids.
You can see here the it's an array of strings.
Like technically what I should do is subscribe to um those or um those as well.
Just do something like I mean maybe not. Maybe what we could do is like when you level up [music] something, we say replicate equipped like inside inside of level service or inventory service. I mean, we could just say when we upgrade something and it's equipped. So like Basically, we would just like look to see if it's equipped here. If it is, then we would replicate. I don't love that.
Um, but it would be by far the easiest way to do it.
What are developers even fine about these underground modules? I've never heard about VI or things like that.
They're not underground. You just need to if you're not familiar with the open source ecosystem um on Roblox then like you just won't be exposed to any of it.
Why' you choose feature base? Dude, it just makes the most sense.
Um no FZY.
Uh I'll kind of explain. So features are basically slices of the game's logic. So like right now I'm working on the equipment like feature or the inventory.
Okay. But inside of each feature um there is like client and server um related stuff like right next to each other which is great for the developer experience. However, there's a big issue here. [snorts] You don't want to expose the client to the server sided code, right? Um, so what my I made a tool that basically maps um files to their corresponding spots in Roblox Studio. So if I look at inventory right here, you can see we have inventory service client inventory server server um right next to each other. But then inside of studio, if I go to replicate storage, source features inventory, you can see the client's here, but the server is not.
the server gets automatically mapped into the server. Pretty cool. Same thing goes for like uh classes. So if I go to buttons um you can see we have button server [music] button server server. Um going to save here essentially exactly that [music] an anning work if you need to require um what do you mean if I want inventory server server It it already knows like inventory service server um oh I got the client on accident inventory service server you can see server script service features it's already mapped just because they're next to each other in VS Code just because the files are next to each other does not mean that where they're mapped um because basically what you do is you manipulate the default project JSON basically my tool writes all of this out and someone made a more userfriendly version of mine called Rogen.
You guys keep it to English, please.
Otherwise, I'll have to mute.
Any tips? Just keep building.
Experience is is what you need.
Um, basically what I want to do here is map out like this and then I need to basically get the values. So, local um equip items and then for yeah ID in equipped ids too and I'll just say equipped items ID will be data um player inventory ID.
thoughts on Rolex racing build stupid quality of code, quality of experience like user experience versus developer experience. I think both are important, but in the end, the only thing that actually matters is the user experience.
If the developer experience allows you to create a better user experience, then maybe I don't know. I value developer experience very highly, though.
Yeah, Lollipop.
Yeah, unfortunately code quality does not correlate to CCU.
And then I'm going to make a function that the client is going to be allowed to call that's just called like uh get equipped.
Um, and this will return essentially everything. I guess what we could do here is when we call replicate equip, we can say self um player data.
Wait, what? Self player data.
What?
What is happening, dude? The autocomplete is dying right now.
Yeah. And then I'll say um equipped is a table which we can type cast to um basically string um of item um data template item data And this will return.
Okay.
But um so basically just loop through the players.
Um, all players equipped Here's an example where I could use sift. By the way, just kidding. I can't. But dude, the co-pilot is so annoying. Oh my goodness. I might disable it.
This charmer set more useful. They're they do two different things. What is happening? Why is there a random self here?
What?
What is happening, bro?
I'm so confused. What's It's like my autocomplete or like co-pilot is just going crazy right now.
Service player data is for service non-persistent service data on for like a service level. So this data belongs to this service and then like what is this?
No.
All right, I'm actually going to disable co-pilot. This is so annoying.
Did they like update it or something?
Why is it like way more annoying than normal?
Um, how come I did uh get the inventory and then ID instead of both would work. Um, this would get me the inventory table and then index the table with the ID. So like it both would literally both would work here. Both would work completely fine.
Technically this would be slightly more efficient like ever so slightly more efficient.
But both like both would work completely fine.
Yeah, like it's extremely minuscule and like both are completely fine though.
Yeah, this just gets the raw table basically a step earlier, but whatever. Okay. Um I guess when a player leaves, we also need to Um, player removing See you demonic.
And like technically I should really do this.
blown the table so it's not mutable.
Chickle fac.
That's crazy.
Okay. Um, so this should all work.
Basically, this will just track every player's equip data and replicate it to client. The client needs to know how to receive it though or what to do with it.
Let's create the client version.
Uh equipment service client It's like weird like you don't realize how much you are relying on co-pilot until you disable it. But I also feel like you're able to like think clearer without it constantly screaming at you.
Is this prime leaf?
Am I tough? I don't know.
Okay. Um, and then what we're going to do is say local all equipped would be self dot I guess we need to define what networker is.
Um, networker client new equipment service and self.n networker fetch whatever this is equip and we need to allow the client to call this.
Um, and then we should also throw this in the task spawn cuz we don't want to yield on the initialization thread.
That's right.
Leaf monster.
[music] Yeah. And then what we'll probably end up doing is have a class for each player that just controls all of their equipment.
Yeah. [music] So, I'll make a new folder called classes. And inside of it, um, like we're going to have a an equipment class. And then this will have all it it'll control all of the children like items.
I'm trying to think of a name that like fits that leaf. Could you not have a state syncing module instead of using fetch every time you need it?
I'm only calling fetch once.
Yeah, I watched the World Cup final yesterday. Was glad Spain won. Although I wish there were more goals.
Um, let's call this equipment controller maybe.
Uh, I don't really need Trump sync. Like I I see I do see in this scenario it is a little redundant what I'm doing.
Charm sync definitely could be used here. You're right.
Um, this like it's fine.
Yeah, no problem, Nick.
Yeah, I guess in this scenario it is kind of gross doing what I'm doing. I should just make like a synced value like Heat. Hey, Heat.
Yeah, that actually makes me really want to do like make my own thing that's backed by the same values that this is using.
I'm not going to do that right now. But that just why test spawn here? Cuz you don't want to yield in the in it.
to type um equipped item data will be uh data template item data inventory.
Huh?
Okay, let's think.
So basically when this changes um yeah the disallowed gold that was so stupid.
Yeah that was so bad dude. Actually so bad. There were some pretty hilarious fowls that game.
Yeah, I know VS Code. I just have never felt the need to set them up.
It's It's really whatever.
Um, hey.
Is it just set meta table or how uh and you have to type of I think the new [snorts] way to do it.
No, I I don't really watch fighting kind of stuff.
Project's going to get a V2 soon. Oh, really? Is there something wrong with it that it needs a V2?
I've never looked at it besides like the initial post. I forget who sent it to me.
the open source. Is there like a what's the reason for the update though?
Like is there something wrong with it?
Yeah, you can ping me.
Leaf and tongue tongue. Sahur collab. One.
Nope.
So what's the purpose though?
Just a refactor. Sure.
[music] That's That's awesome. Game Joy. Yeah, dude. Crush Rods. It's a technical masterpiece.
Uh maybe not gameplay-wise, but technically really awesome.
Best UI by far. The Crash Bros UI.
Yeah, I think the Crash Bots UI was very, very good.
I spent so long on this game. Insane looking back.
How do you make the icons?
You make everything in Figma.
I made this on stream actually.
No, I'm never going to make an icon pack.
Yeah. UI and icons in Figma.
Yep. Crash Bots was all done in React.
It's That's the game where I learned React.
Essentially game creep. Yeah.
Dude, making 50 icons would take me so much longer in 3 hours.
Uh, couple mil wavy.
Yeah, I am doing devlogs for this. I've been recording them.
And then I guess what I'll you.
Double various Um, okay. Look, we'll just lazily create these. Um, equipment controller is self equipment controllers player.
Um if not equipment controller then um local new controller will be equipment controller new for player and equipped items.
Um, else we'll just say equipment controller set equipped items.
Um, equipped items and then self dot equipment controllers player is new controller.
Ch doing dev streams. Nice.
On Twitch or YouTube or both.
Some people despise indexing by player, but I don't really care. I've never had any issues with it.
Either works.
Some people like to do user ID which like I totally understand to be honest.
Yeah.
Um if non-equipped items then uh return if equipment controller then equipment controller destroy which doesn't exist. So I need to create that function equipment controller destroy. boy.
That's progress. Uh, slow, but just enjoying it. So, does Vit have a hydrate? Um, I I'm actually unsure.
I can track.
Yeah. Oh, yeah. That's right. you can pass in an instance to the create function. So yeah, that would be essentially hydrate.
Um, oh, maybe not though.
A new instance that is a clone of the given instance. Okay, wait, wait, wait.
No, I'm wrong.
Um, maybe not.
by apply that a thing. Dude, why do they not like they API reference and then there isn't there is an apply.
Okay, that seems like it. I It's not documented anywhere though.
The vi docks could be a lot better.
Yeah, I'm not seeing it anywhere, but apply. Looks like it.
Yeah, dude. Dude, I switched from Fusion years ago at this point and haven't looked back.
Oh, really? Is it that bad?
A tequila.
I need context. I don't know what is getting six.
That's so funny. What? Fusion literally is six or five FPS.
Dude, that's so bad. Was point 2. Okay, 2 is a lot better. What did 3 do? I used 2 when I used it.
What about Vide? How does Vide do?
Oh, yeah.
Vide's good. At least that's React one.
Dude, there's so many different React one. I don't Or react ones. I don't know. There's not like a specific.
Never even heard of Aegus Blend.
All looks the same. You have to look at these numbers down here.
Yeah, VI does well. Good.
This is funny. I never knew this was a thing. Oh, they got rowact in here. What cap your Oh, is my FPS capped?
Um, oh, what? Why vi I'm getting 155 react.
What's just like a basic react one?
Component binding component custom state.
Oh wow.
Yeah. Component binding.
Now let's do fusion.
Dude, why is fusion so bad?
What went wrong in.3? I never did point or I never used.3. I used 2.
But even 2 caps at 45.
Dang.
So fusion is just bad, dude. Holy crap.
I've never seen the actual numbers behind it. That's pretty crazy.
Another classic dropping soon. I've been I've been cooking something up. I know it doesn't look like it based on what I'm doing right now, but I've been cooking.
uh a React component state.
Oh, doesn't react actually have like uh like it hinders its performance if it if if it's going too hard. I don't know if you know what I mean when I say that.
like if the frame time goes above a certain amount, React will uh will uh whatever it's called, cap or whatever, I don't know.
You can tell what framework is easier by the amount of tests in this game. Wait, true.
Okay, this this enforces my VI supremacy [laughter] Clash Royale UI. Yeah, it's based on Clash Royale incremental game. Who knows, dude? Who knows?
>> [snorts] >> I got a fish.
Hey, hey, hey.
make inventory icon. Yeah, I just made that. Uh I guess I finished earlier today. I made this but it was too detailed so I kind of dumbed it down a little bit.
And then I feel like there should be an icon here but I couldn't I don't know.
It looked weird with the button so I didn't know what to do.
Yeah, just doing everything solo. I prefer it that way.
Um, where was I?
How do you not get bored while scripting? I genuinely enjoy it.
Yeah, I'll be at uh RDC. Although, unfortunately, I'm missing the last day, which really sucks, but I have a wedding that I need to attend to, but I will be there.
Yeah, I know. The last day is the best day, which really sucks, but it's okay.
No, I'm not. It's not my wedding.
Imagine you're nominated for something.
Yeah, dude. I know.
nominated for biggest gambling addiction game.
Uh yeah, I don't even know.
Yeah, for sure.
RDC is always so much fun. If anyone watching ever gets invited, definitely go.
Yeah, that's what I was thinking. Lucky Matt. I know a lot of Roblox employees are familiar with my game, too. And I don't I don't know. We'll see. Just getting nominated would be cool. I don't think I would win anything just because the game died, but uh getting nominated would be cool.
Yeah, there's also a girl garden 2 though.
I don't know.
Which like garden kind of swept a lot of the awards last year, so I don't know. Yeah.
Okay. Um, equip change.
This is all good. to destroy if you don't have equips.
That equips. Okay, that equips.
And then I'll just make equipment item.
kind of a long word, but we're kind of I don't know what I'm trying to Crash Bots 2-1.
Um we would need what ID item ID which is string and item data which is an item data. Uh yeah, I thing is I don't know when nominations will be. Dude, I feel like they they took a long time this year. I was really hoping nominations would be like a month ago, [laughter] but they took so long even just like sending out invites this year. It's just weird.
Yeah, they started the questionnaire and then uh and then what's it called? Cancelled it or not canceled it. Uh took it down in less than a day when they said it would be going to be open uh for a week or something like that.
I didn't even get the chance to um look at it.
Don't know if keyboard escape isn't Wait, what? [laughter] Dude, what are they doing?
That's actually insane.
Yeah, that's absurd.
1820 is after. Oh, shoot. Did you get invited?
So, you're unable to go.
Is Roblox down or now?
is that maybe 7 CC 7 mil CC was all bots. Dude, I don't get that. I don't I feel like there's such a large sentiment in Roblox that for some reason whenever there's a popular game, everyone assumes it's all bots.
One single advice for a game to do well on boarding and funnels.
Any new assets for the button game?
The inventory icon.
I think that's it though.
Yeah, I'm using a storybook plugin.
Text under the button glowing. This it's a billboard gooey.
So when you're playing the game, it follows your camera.
The story behind pronouncing gooey gooey. That's how you pronounce it, bro.
literally look.
Pronouncing guey as guey is the most common accepted way to say it.
Alternatively, you can spell it out by saying each letter. Both are correct, but guey is preferred by most software developers and everyday users for its conventional speed. The Hold you true using AI. Oh, graphical user interface. Yeah, true.
Why don't we all just say that?
Okay. So, what I'm going to do is the Hogman raid.
[laughter] One man army.
Um, let's see this in controller.
update.
No, I'm not using type strip.
What? Why are we mad?
Oh, is this supposed to be this?
Ow.
What?
Um, I can maybe explain my how I structure UI in a bit.
Why do I need to do that, by the way?
That doesn't make sense.
Right.
Okay.
Cuz I did not need to do that here, right? Yeah.
Okay.
Curious background music. Sorry, I I'm listening to other stuff. I don't really know what it sounds like.
>> [snorts] >> uh say self update con equals run service heartbeat connect function pt number.
Do we even need GT? I'm going to use OS clock, right?
Actually, pause.
Yeah. Do you want the total time?
And then item update thing is like I guess I could just say, "Isn't calling OS clock every update cycle like not ideal?"
Uh you're I guess it's fine. I swear there used to be a thing here that said like this isn't as performant.
Whatever then I guess we don't need even consider ET and we just pass in T.
Um I also want to pass in the C frame.
Um so char CF which be this is guaranteed to always be a C frame.
Um, and then what I'll do is say local char is player self.player char um if char then self.char So charf equals char get pivot um char cf is c frame update con is what is it rbx strip connection again.
What's up, Bear?
Yeah, dude. An an MMO RPG is that's a ton of work.
RPGs are so much work.
What's up, Alexe? Dev.
Definitely focusing on one.
I think working on three at the same time would be a lot.
Okay. So, we'll pass in the tr CF as well as the time into the update function. I think like this.
Um, and then inside of Oh, we already have destroy. Cool.
Why did that why is this NA equipment item?
What?
What is going on with the type checker today?
Is it because I'm doing I'm just going to do the old way of set of this because this just like is not working. Type of set metat table.
Yeah, now it works. Okay, so you just need to do it. You can't use the new set meta table, I guess.
Interesting.
except the meta table and the object table. What do you mean?
You just said the same thing twice.
Whatever. This works.
It was equipped item equal sub manageable. Yeah.
Hey, I'm glad you like it, PXN. I think it's awesome, too.
Okay.
So then let's make the update function um equipment.
Let's do CF E frame and T is a number.
Uh yeah, Glas. I do that quite often.
Because if I do the colon operator like this and now I do self dot. Notice how I'm not getting anything.
Nothing. Okay.
And then back like this. Self dot.
Suddenly we have everything.
It's awesome, Aiden.
You have to use it for Yeah. a lot of things. When you call it, you can call it with a colon operator, but just when you're define the functions, define it like this.
up slip.
Okay. Um, okay. So now we need to define basically open an issue and you get up. Yeah, I saw that. Uh I will probably uh it's a really easy fix. I just need to loop through the array backwards.
Kind of a stupid mistake. I I guess I never thought about the case of you disconnecting inside of a changed, which is honestly a pretty common thing. I shouldn't even consider it.
Um, yeah, just iterating through the change events backwards instead of forwards would fix that. So, it' be really easy to fix.
H I'm done with slime energy. It's fine.
I have moved on.
Yes, the game will just sit there.
Let's see.
I'm sorry.
Okay.
Okay. There's no map. The game is pretty much works already. Yeah, that's how kind of everything works for me. I do like the map blast.
That's the new UI shadow. Uh the fact it doesn't work on text is laughable.
It's like the main use case is text.
You name the game. I have no clue.
Oh, and then Wait.
Okay, let's do >> [music] >> It's the times B.
Uh uh hover data.amp stamp.
Uh speed offset. it.
I don't know. Something like that.
Okay. And then maybe we do like gold the blocks.
What's up, Cody? Froggy.
No, I see everything solo.
Um, and then maybe I just say like self I guess we need like the model as well, right?
Well, like maybe we have a model.
I think like there's definitely a possibility that the model doesn't exist.
Um, we'll just be a PV instant and then so we need to set the goal. So let me do I'll just give it a basic offset for now, but eventually like depending on what the layout order of the item is is where it would be like on the player.
Yeah.
So, I'll give it a basic offset and I'll just say the goal is like passency frame plus offset plus whatever this is, right?
Yeah.
Um, [music] local CF offset.
Uh, char offset. Let's be C frame. New um something like this. I don't know. And then so the new goal would be local goal would be CF time char offset time C frame new XYZ um and then we would need our current CF.
I'll just say CF is what I guess a blank frame, right?
Um, and then when we actually add the item, I guess. Well, we can set this to nil.
Yeah. Yeah, we can set this to nil.
Or well, we what we can do is check the distance between these two. If um let me say local mag is self.cf umposition minus goal.position position got mag up um if mag is greater than I don't know just be like local um max distance set it to be like 100 I guess if If it's greater than max distance, then we set self.cf equals goal.
Okay.
And then if not model um if the model does not exist then we simply return.
Well we can lurp the C frame right away actually.
Yeah cuz we have a goal we have a mag.
Um I'll say else if mag is less than or equal to 1 eg -3 um then um Well, I guess we could Well, no, no, no, no, no.
I'll come back to that. So, we can just lurp here.
Um, we'll say local new is self CF blurp. Um, goal Oh, we do want DT still, huh? Yeah, we need DT.
Wait.
Couldn't we technically just this takes into account T already, so we don't even need to lurp.
Which means what are we doing?
We're just setting self CF2 goal.
So CF is CF time offset time that yeah and then what if model doesn't exist you return if it does exist then we [music] say self uh model pivot 2 uh self cf F and then to determine if the model should exist or not. It should be based off of distance from the players from the local player's camera.
But for now, we can just assume it always exists.
And we can say that model is I'll just do this. Um self domodel is going to be instance new art. Um self dot model dot okay route please intellisense art dot anchored true art can collide is false part do parent is workspace self delod equals part On destroy we say uh self if self do model then selfm model destroy make sense.
and then set equipped items. So what we need to do We lazily create equipment controller.
Um, and then we call set equipped items on it. Whenever item sets changed or destroy it if items are nil, we set equipped items. So, we need to loop through the current items, see if they exist, if they don't, set them to nil, and then loop through the new items, create them if they don't exist.
Yeah. So for uh self equipment items um for not self for item ID uh equipment [music] it uh item in self equipment items do if dance.
Hey If not equipped items item ID.
So if your item doesn't exist, then we say equipment item destroy. And then we also say uh self equipment items item ID is nil.
Yeah. So, we remove uh non-existent ones and then we need to build the ones that don't exist. So, then we would loop through equipped items for item ID um item data in equipped items.
I really want to name this uh equipped item data.
Items data. I would rather item ID item and equipped items data. Do um if not self equipment items uh item ID then we need to create the new one. So I'll say local equip equipment item will be equipment item new uh which should be selfplayer item id item data right yeah and then we can say uh self this equal to that I don't. So, this gets rid of the stale old ones that don't exist anymore. This adds the new ones that don't exist.
Yeah.
Okay.
What are the odds everything just works?
Thoughts Nothing happened.
Oh, wait, wait, wait. Okay, nothing happened because we don't have equipping being set up.
Oh, we do. It's just not firing. Hold on, hold on, hold on, hold on.
Oh, no. We just straight up don't have equipping.
Um, I'll just say equipped.
So we get the equipped and then let's say if table.find equipped item id then return if number of equipped is greater than or equal to inventory service utils enums max slots then we return.
Otherwise we say data player equipped insert item ID.
Okay. And then we need what? Remove or unequip. on a clip.
We get the index. If index then data player uh equipped um remove index.
Yeah. Simple as that.
Heat up here.
somehow managed to equip two.
Um, oh, because this needs to not replicate, right?
Um, nil, false. That's just nil or false, I mean.
No, it's cuz the client does it first like here. So that you immediately see the uh reaction or you immediately see the action and then the server can lag behind. So we need to not replicate this call basically.
Um I also need to give access to unequip.
>> [music] >> Okay. So, I'm getting the equip change.
I'm not actually seeing equip change replicate equip. So am I getting where how far am I getting?
Like am I getting all the way here?
Oh, I'm never initializing the first equipped items.
I say self uh equip item or set equipped items. Equipped items.
Yeah. Yeah. Yeah.
Okay. It's the tiniest bit of hovering you've ever seen, but it is hovering.
Um on right back from Roblox inspire. Nice.
There we go. Got a little bit more hovering now.
I don't like how it's stuck to your person though. That's why we need to lurp.
Math.larp coming in.
Heat. Heat. N.
million CCU instantly. We have a floating brick.
Yeah, this is why we need to LAR though.
>> [snorts] >> Um, and then I'll Just say self CF blurp.
Um, the goal.
Yeah. So, this is why we need DT.
This is where I was earlier, which is fine. We have DT. I just wasn't using it.
It seems strange to have to do like I'm doing DT, but I also have OS clock. So, it's like I don't love that, but it doesn't really matter.
I don't know. We could do like Make it pretty red, I suppose.
I broke up, dude. I wish I could like see if there's errors, but Roblox just spams me.
Oh.
Oh, hey.
kind of choppy though.
Is this too high or what?
No, it's just how it is. It's fine.
Should I do like a tiny bit of rotation as well?
Permission to leave the stream. No, you have to stay.
Heat. Heat.
with its moving direction. Oh, I see.
Oh, that gets complicated.
Wait, does it though cuz I could just get DT or DX, DY, DZ.
They literally have that here.
Um, local delta.
Delta would be that and then I latte.
Um, isn't this just a vector already though?
Like, couldn't I just do unit here?
Local unit is delta dot.
Let me let me try something.
Let's just see what this looks like.
Genuinely curious.
These are going to be tiny though.
Kind of hard to tell.
Yeah, the orientation is non-existent. Okay, wait. Uh, maybe we get rid of the radian.
Whoa.
Wait, did that do it?
I think that did it.
Wait, that's kind of cool though.
[laughter] Whoa.
I think it needs to be clamped at like a certain max.
Yeah, I think it needs to be tweaked a little bit cuz when like the character is moving Um, it kind of goes overboard. [music] I think it does look very good though.
Yeah. When the character moving.
Why is that?
Well, I could just make it only based off of the delta of the previous uh like change in the offset position rather than comparing it to the change of the final position and just completely disregard basically character position in terms [music] of rotation.
So like this delta here, instead of doing goal minus whatever, we just do prev goal.
Um, which is just a C frame.
Well, yeah. I guess it would just be C frame.
And then up here, Rev goal.
Um and then we say instead of delta here we can say like this and then um we can do hover delta.
Hover delta is um goal.position position minus self.prev goal minus position and then instead of delta we do hover delta.
Um, and then we need to set uh the prep goal.
like that calculated there. Okay. Yeah.
Oh, it broke.
Why?
Wait, this is still considering Hover delta is uh let's change this to be prevalset.
Uh cover delta will be well offset position minus self of we'll offset position Right.
And then we say self.prep goal offset equals goal offset.
Right.
Time to go.
I don't right.
What did I do that?
It doesn't work anymore. But why? I don't understand why.
so weird. Like that's great.
What happened? It's when I move. I could just clamp it.
Yeah, maybe I should just clamp it.
Like what apple I don't fully understand Why? My other thing wasn't working though.
What?
What is going on? I'm so confused.
Like, it's so good when I'm not moving.
What is happening?
Yeah, it's anchored. It's anchored. It's anchored.
Okay.
Clamp it more.
I think I got my math wrong somewhere to be completely honest.
This isn't bad though.
Yeah, it it's like depending on which way I'm moving, it's going like a different way.
No, it's not supposed to be rotating around the player.
I mean, this isn't bad.
What's up, Andrew?
Yeah, it's like weird. See, like depending on which way I'm moving, the block is like facing like right now it's facing towards me. You know what I mean?
It's It's like down angled like this.
You'd think whenever I'm moving it would be facing down towards me, but when I'm moving this way it's angled up, which is not what should happen. It's like depending on what axis it's on. And now it's angled to the side.
It's like not It's like being world access aligned, not player access aligned. Um because of why comes if you jump.
Well, it should be based off of human report. It's based off the character's pivot.
Um, but I'm messing something up somewhere.
This may be a case of where I ask AI what the issue is cuz is a very like technical thing that just requires it to dig through code.
not generating code.
I mean, it's probably just this, is it not? Wait, it actually just is this.
Yeah, it's actually just this um like that.
my AI to convert projects to to nice.
Would that work, do you think?
Check out three. Oh, whoops.
Ang is not a valid member of C frame.
Dark Run using Viesta code. Uh not as your very first game, but okay. This is good. It's facing the wrong direction, but it's actually good cuz it's it's consistently turned the wrong direction.
Yeah, [laughter] cuz now I can just apply I can just rotate it.
I mean the other option.
I don't know if this will work. I don't know if this will make any difference.
It might actually.
No, it just flips it. Okay.
That's also not what I want at all.
Okay, definitely the other way.
Okay, what's weird though?
Oh boy.
the bats because the hover has the correct orientation, does it not?
Oh, wait. Dude, so hard to tell.
How do you do that?
You Right click and explorer.
I made the inventory icon. I promise I have the the Figma proof.
Heat. Heat.
>> [laughter] >> I seriously can't tell if like I assuming it just is wrong consistently cuz it wouldn't make any sense for the hover to be right.
Like I think everything just needs to be like rotated or like the X needs to be Y or Y needs to be X or something like that and we should just guess until it works.
Thoughts?
>> [snorts] >> Take the walk of shame and use AI. Just hold on. I almost got it.
That's strange.
What?
Hey, wait.
what I'm in local. So it is the X that need that should be going forward but Z. So X and Z need to be switched.
X and Z need to be switched.
Yeah, I miss slime.
Should it be flipped the other way though? Like, should it be negative?
Like if I'm going this way, does that make sense or should it be the other way? Flip it. Okay.
Oh yeah, there we go.
There we go.
Leaf is the AI. Yeah.
Click on the button.
Yeah, all the button parts are on Blender. Yeah, replace the part with the fish.
I like the brick.
It is really smooth. It's crazy how much you can like how much effort you can put into like one little thing. You know what I mean?
Like you know like the videos that's like 10-second painting versus 10 minute versus 10 hour versus 10 day or something like that. It's like a a pet follow system like 1 second versus like you know however long this took.
an hour or whatever.
Yeah, the one second version. Yeah. Weld it to the body or the root part or whatever.
You know, fun fact, this is my first time ever using math.n noise.
The floating fish.
Not going to lie, your pet following is lowkey better. I'm going back to the lab. Good luck.
Why is this? This is just a It's just a random part that I have.
Have a random coin here, too.
just cuz I'm curious what this will look like. I don't think it'll look that good cuz this was a random model I got off of the toolbox.
All right.
Actually not bad.
It needs to be rotated like 90° though.
The fish looks dead. Yeah, it needs to be rotated.
Old.
Oops. Uh angles.
Oh god. What axis do you think this is?
Not that axis.
There we go.
My little buddy, my buddy. [laughter] Your game started getting charge traffic today. Oh, nice.
He's so happy.
The vlog update with fish. True. I should record an update for it.
No, fish has nothing to do with this game.
Wait, if I remove it, does it actually work? It does.
Okay. Uh, let me record an update, I guess.
I need to talk about the inventory button. And then also obviously this how you make this cool effect. Rewind an hour.
This is what I I've been doing today.
We also need to add like the the tag to it. You know how this says like one in 26 fish or whatever. We need to add something so that like it's obvious that it's like a common or whatever.
I kind of feel like the Y goes too much.
We like divide this by two and then clamp it more.
I guess I don't really want to divide it by two though.
Um I guess I could No, it's fine. We'll just clamp it more.
Okay, let me record the update to the delog goes way too downward. Yeah, but I actually think it's fine now. I don't know. It's not that big of a deal.
Okay. Um I'm going to have to hide chat and mute the music.
Sorry.
Okay.
Is everyone ready?
Um maybe let me actually unequip this first. Yeah.
Yeah. I'll start in here.
Um, start recording.
Okay. And then I threw together this inventory icon. Um, I had this like more detailed one, but I think it just like was way too detailed for compared to the other icons. So, I kind of dumbed it down a little bit. Um, yeah, I think it looks all right. And then here's what it actually looks like in game. Um, just have like, you know, the text on it. And down at the bottom there is like a tiny little drop shadow too which you might be able to see. I don't know. And then obviously you click it and it opens.
Pretty crazy.
Okay. Okay. Okay.
And then um hold.
Okay. And now when you equip something um it actually like is equipped to you.
So, you can kind of see this here.
There's this really nice like hover effect that you can kind of see. I I'm really happy with how it turned out. I think it looks really, really good. Um, and it just kind of follows you around like this. Maybe it looks a little goofy when it's following you, but um, it gets the job done. The way I'm doing this is by utilizing like noise math noise, which I've actually never used before, so this was something fun to learn. um wasn't too bad, but um yeah, I think it looks really nice. And uh we'll we'll get a use for these items in a bit.
There we go. I did it.
Make them go through par. Yeah, they won't get stuck.
W YouTuber it does go too far down. I agree.
I think maybe we can we can change this a lot actually. Divide [music] this by like 14. Double it.
Really? It's still We got to do way more. Wait, what? It's hard for me to think in terms of radians when it's this low.
Half.
I'm just going to [music] put it into radians. I can't think we do at that or [music] put it into degrees. I mean like 5°.
What?
Yeah, it's not Yaxis. What?
How though?
I'm in local space right here.
Heat. Heat.
It's Z.
That is so confusing. [laughter] So, it's this Oh yeah, it's the first one cuz Z is X.
Jesus Christ.
AI could have already done this. AI could have already done this. Go do it then.
I'm literally not anti- AI, by the way.
I hate how AI has turned into the new crypto bros. So annoying how everyone tries to shove it in your face.
Nice.
a lot quicker and more efficient. It's definitely not more efficient.
The code it produces is pretty terrible.
It works.
I don't deny that. I've used codecs and that kind of stuff in previous games, previous game. I guess a great success. It's just not as fun for me.
bro. When is Figma?
What does that mean?
camera shot on click. I experimented with that and it was kind of bad.
It just like was disorienting and didn't add anything.
I think when you get a rare one maybe.
But every click. No, cuz I was Yeah, I was thinking about that inventory. You guys sick. Do you make yourself? If you did, how? Yeah, I made a lot of this on stream actually.
Yeah, a lot of it's images. Pretty much everything is an image except for the text, I guess.
I don't really use like frames with UI corners and stuff like that.
This fish is so derpy. I love it.
Wonder if anyone copies his game when he shows the code on the streams. Yeah, people do.
Heat up here.
You combine combine your images in the spreadsheet? No.
Really not that worth it on Roblox. Like you definitely could, but I don't think it's that worth it.
The biggest [music] images are a th00and by,000 and like a like an icon you're looking at probably around 200 by 200.
Like I mean yeah you could but like does that I don't I don't know. Does that actually save much?
Where do you get most icons you use? I make them all.
Something like that. This probably needs to be a bit smaller though.
I don't know. Actually, it's better with the one. Okay. thing is is that the odds are like they're not going to actually show like chances.
It's complicated. [laughter] Technically, they do have chances, but the chance can change depending on where you get it. That's why I would rather it just be like common, rare, whatever. You know what I mean?
Got intel.
Heat. Heat. N.
I think this looks sweet.
No, you have not.
How can you know if I don't know?
Can all players see the fish? Yeah, they should be able to.
Um, the way I coded this should be fully multiplayer right away.
Um, how do I do run client Anthony?
Okay, so theoretically this should all just work out of the box if I equip a fish on this screen. Yeah, fully multiplayer.
Oh, I guess you can't there. Now you can see global except it's still all client sided. So if I switch to server, oops, switch to server. You'll see there are no fish from the server.
Oh, was that your post?
Yeah, I saw that.
pickle. Um, let's put I guess the Let's commit this first.
I guess we should do this, too.
Well, no.
So basically just grab the item info attachment and parent it to the object probably the root.
Um I'll have to rotate this. I guess the real issue is that the fish is just rotated 90 degrees.
I'll also have to switch this [music] to be stud offset instead of world offset.
A lot of not centered.
You gain XP by leveling up your items like fish. If I level this up, I get 45 XP.
Level this up, I get more XP.
Yeah, dude. Twitter's so annoying. Every single post is just glazing AI. I hate how everyone is like so like I don't even know what the word is like like braggy about AI.
Yeah, it's the inventory is based off of the Clash Royale upgrade system.
And it's like all these posts are like they're they can't even go through the effort of writing the posts. They get AI to write the post too. It's just like Yeah, dude. It's just annoying. Like I It's just like I don't get why. Like I got why Crypto Bros were constantly like shilling their coins, you know, cuz they're going to make money from it, but what do they get from promoting the tools that they're using?
I just don't get it.
engagement farming. I guess they get more likes.
Yeah, I do like RNG games.
Jump over the button. I need to make it so if you jump on the button, it presses. And if you and it shoots you up, too. I think that'd be funny.
That fish better not be. And what are the odds this fish stays? Stay very low.
Oops.
Um, okay. I'm probably going to end stream here, though.
Kind of did what I wanted to do.
Curious to use user input service for your buttons for like my UI buttons.
for UI buttons. I just do like got activated or whatever.
Click the button one last time. Okay.
Yeah, activated works on everything.
Yeah, once turned into 64.
Yeah, activator works on everything.
Mouse button one down. I don't think mouse button one down can get really weird, I believe.
Yo, I guess you can jump on it.
Those putting one down I think can be buggy though, can it not?
Especially on controller.
I think on mobile it technically does work though.
Yeah. Okay. Uh GG's. I'm ending stream.
We have a floating fish. I think it looks amazing.
Um, yeah.
All right.
See you guys. Goodbye.
Related Videos

Expanding Stikbot thumbnails
leopoldshorts
2K views•2023-09-24

Digital Discrimination: Cognitive Bias in Machine Learning
redmonktechevents2974
4K views•2019-12-18

Evolutionary Approach to Clustering by Ujjwal Maulik
ICTStalks
279 views•2019-06-26

Rose Yu "Learning from Large-Scale Spatiotemporal Data"
networkscienceinstitute
2K views•2019-03-04

Stanford Seminar - Generalization through Task Representations with Foundation Models
stanfordonline
4K views•2025-07-14

Satellite-Based Wheat Yield Forecasting using GEE & Transformer Neural Network
gisrsinstitute
634 views•2025-06-15

Paradigm Shifts in Data Processing for the Generative AI Era: Robert Nishihara of Anyscale & Ray.io
GradientFlow
2K views•2025-01-02

How to Build Your Own GenAI-Based Knowledge Management System
2150GmbH
360 views•2025-06-03
Trending

One Must Imagine Sisyphus Happy
vlogbrothers
61K views•2026-07-21

Future of Taylor Farms
maighstirtarot5385
11K views•2026-07-21

The Downfall of OnePlus!
techwiser
65K views•2026-07-21

My Friend Locked Up The Engine On His K-Swapped Bug...
boostedboiz
128K views•2026-07-21