Rendering video in game engines like MonoGame requires careful attention to content pipeline configuration, proper file path management, and build artifact handling, as video files often fail to load due to issues with content builder compilation, stale build artifacts, and incorrect path references between shared and project-specific build folders.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
Coding with Claude: Switch Ball Deluxe Game DevelopmentAdded:
What's up? It's Thursday.
We're back. What are we looking at? This is cloud.
Cloud cloud code.
We are going to be coding today using Claude just like yesterday. Yesterday was our first time uh using Claude on stream. I only used like one other time off stream. So, today we're going to be tackling a couple more features that I want to put in Switch Ball Deluxe and we're going to have Claw do the work. We're going to review the work and they'll probably need to be some revisions and things along the way, especially for the uh second feature that we're going to be doing, which is a tutorial. First thing that I want to do is uh consistently being able to render video usually from MP4, but I'm guessing it could be from a like a move file um in the game. So, this is something I had trouble with before and I want to be able to render uh video.
So, We're going to open up Visual Studio here.
And I'm just going to close We're just going to close all these classes right now.
And uh where the video will likely be rendered is in the hood because the videos that I want to render today are going to be in the background.
So, I'm just going to start the game and give context for where we want this video to be.
Put up the old game.
All right. So, here's the game.
So, right here, video So the places that I want video to be are anywhere where we have stock photo.
I want stock video or just recorded video um rather than stock. So here for fossil fuels, you know, we have this kind of this fire explosion factory stock image going. I want that to be video of something like within a fossil fuel plant. Um here for windmills instead of having a static image of windmills here I want them to be moving. Um and then when we go in the level itself see I have a different image of windmills and I want that to be um a video.
So in essence when we're done with the game I mean there could be numerous ones that could load. Maybe it's random.
Maybe like the first uh eight levels are one video and the last eight videos or last eight levels are another um video.
Maybe the boss is its own uh video that plays in the background.
But either way, each of these stock images, which are pretty cool stock images that I was able to find, um I want there to be video instead. you know, having a nice video that I can purchase um or that we can research or that we can even take ourselves, that's going to be a little challenging.
Um, but that's what I want and I want to see how it looks. And then, you know, if we decide that it doesn't look very good, we can always revert it and use images.
Um, but part of this is I need to get this done before I can really update the UI because all the UI is um text, like the white text, basically anywhere there's white text, uh, that will need to change um, based off of the background, so it's easy to see. White's often uh pretty decent, but some places like the geothermal, you know, if you have a cloud or something like that in the sky, you know, it's hard to see the white against it.
So, that's the first thing we want to do is be able to render video on a loop in the background.
Uh, and then the second thing is we're going to be creating a tutorial that we can access from the main menu. So here in the main menu we have adventure mode, gauntlet mode, options and quit. Very straightforward, simple. Um either straight from here we would have a tutorial or maybe the very first time you open up adventure mode there would be a little tutorial tutorial very short um in terms of a couple screens maybe screenshots showing you the basic mechanics of the game. Maybe again if we work fig figure out how to do the video then I could show video of the game being played um instead.
By the way, this title screen, this background, ignoring the uh switch blades in the front, this is the only piece of uh AI art that is in the game.
Um which I think looks really cool. I really I really enjoy it. But um we'll have to get some uh actual art. Um, maybe it'll look like this just because it's inspired by this. Um, I think it's really neat.
Um, hey, look, it's 2026, not 2025.
>> I don't like lyrics in my smooth jazz.
>> I know it's already been going for a little bit, but skip.
So, that's what we're going to do today.
So, how are we going to do it? So, here in the hood, this is where we're rendering the uh images in the background.
So, can I find just by scrolling where it's doing that?
Yeah, right here. These backgrounds background shade.
So, these are quote unquote shades, I think. No, no, no. This is actually the shade of the uh what's it called? The shade of the pipes. The pipes like surround the background that actually changes color based on your color. Um there is something here called play video. It's not working.
So you can see are there any references to play video.
And if I go to final references and you'll see at the bottom, nothing.
But if we do a control find, I think I just commented it out.
Yeah, right here.
So you can see I used to have a video that would play.
Not right now.
Um so it is updating the shade um based on the background.
Where is the you know I could just ask claw to do it but it's these guys right here. See this fossil fuels background solar background. This is the stuff that's appearing um within the stage itself.
So, let's just look for fossil fuels background.
Here he goes. Draw behind all objects.
So, this method is being called because we do it um this call first. So, draw behind all objects to do the background and then we're drawing everything in front of it. And based on the stage that you're at, we're drawing uh this.
So what we're going to do is we're going to create a pretty detailed prompt um together and say hey in this method draw behind all objects I actually want to render a video and rather than just draw this I wanted to do it on a loop um and see what it comes up with because I've tried to do video before as I saw as you saw there I had a video method.
We'll see how it can expand on it. And we're probably going to have to do some iterations here.
Now, when you're uh doing prompts, I would suggest that you always do it outside of any given um like editor because if you accidentally press enter, it's going to start doing stuff without context. There might be like an alt enter to create uh you know prompts outside of that but so that you don't press enter but we're just going to do it here.
I'm just putting our prompts in here just as easy access.
And this is also going to be in a new session. So over here in the left sidebar we have different sessions that are going. Each of these have their own context of conversation. However, the overall context is in an MD file. This is basically a file that when um Claude looked at the whole project and understood the architecture, it created a bunch of stuff so that every time it starts a new session, which is going to be a new branch or a new uh clone of the project to begin working on, it's going to have knowledge of that. Um, so it's not going to have to relearn everything every single time it does it.
So anyh who, let's go ahead and write up our prompt here.
There it is.
So we're going to say currently in the level in the hood class the background image which is a stock image changes depending on the world that you are in.
This is done in the method and copy over our method behind all objects.
Instead of rendering images though. I want to have a looping video.
In the past, I've tried to render videos, but often they would crash or not loop.
These videos won't have any sound.
They will be cool real life videos that contrast with pixel art front.
For example, I could have I could have a actual fossil fuels plant or a fictional normal.
You'll see in the hood and also in the opening game cut scene that there are places video has already tried and sort of works like game loads.
However, it's not consistent.
I need something always consistent.
You can All right. What's the video file that I had in there?
The video file that was in content was uh this one.
Use this as the test to run in the background.
Once this is working, I'll extend it to other videos.
So step one is to get video consistently running and step two is to modify methods to switch between videos depending on life you're in.
Lastly, you'll see that images also change background in the adventure menu.
We'll want to do something similar there.
All right. So, there's our our detailed instructions. The more instructions you can give, the better.
So, there it all is. So you want to be as explicit with what content and um methods that already exist so it knows where to go, what you want it to do, and then just let it go.
So this is going to be our our prompt that we're going to start with, and then we're going to work off of that.
So let's copy the whole thing.
We're going to create a new session.
And we're just going to slap this guy in.
Move this a little bit so you can see it over there.
And guess boom.
And then it do be thinking.
Uh I'm going to move this up here so you can see this at the bottom.
Um here you can choose what model you're using. By default it uses Sonnet. I think each of these models does something slightly better. Um we can ask it which model is the best for it. I think uh SA is the default. You can also choose the effort level. This says how much how many tokens and stuff it's going to be inputting for the task.
Um, and uh, for our sake we're just doing medium right now. This kind of works for us.
Um, often it's going to be doing things like this, like, hey, I want to be able to run certain things like this.
But right now it's saying, hey, I want to create a new work tree. And we'll say, yeah, sure, go for it.
It also creates things like agents that go and do different work. So they have an agent here exploring the hood, rendering the code, exploring the codebase to see how I've done it already and then we just let it go. So depending on the task, it could take a minute and a half or it could take 20 minutes for this. I think this will be somewhat straightforward.
Um I think this will just take a a few minutes.
Um, it's looking at the hood, it's looking at the menu, it's taking a look at the code, it's looking explicitly at the areas that I told it to look and then as needed, it'll know, oh, wait a second.
Um, we can look at classes that are related to those things.
And eventually I bring up this. This is um, Upbeat.
This is what I use to play music on stream. Upbeat along with a ton of other places has like stock video. Yesterday we were starting to look at examples of like stock video of like geothermal stuff. Upbeat doesn't have a ton of selection. I'll probably have to select other video. Um I also noted it'd be fun if I could get my own video if I went out and like took video on my phone or like if I knew people that could like send me in video. Um, but I mean sometimes you just got to support people who went to a cool place. Like this place has Icelandic landscapes.
Unfortunately, this is barely moving.
You can't even tell this is a video right now.
Um, but if we wanted to do something like, I don't know, wind power, windmills, like that's a really common one to have.
But like something like this, you know, it's kind of a loop.
It's not bad.
Something like that.
All right. It's still doing stuff. We'll go back.
And then what's another world that we have? Um yeah, you want to do like inside a power plant.
See, most views are not going to have that. They're just going to have like some like drone some drone footage.
It's like Oh, cool. Yeah, it's the aerial view of a solar power plant.
you know.
Oh, look. It's doing great.
Move this down.
So, what did it do this far?
So, here's the plan.
Step one, create a looping video player wrapping class that uses monogames is looping true and safely handles get texture.
So, I think I've tried that stuff before. We'll see how it works. We're going to modify the hood to replace the dead video fails with this and render the video frame here. Cool.
And do the same for that. Good.
Um, the is looping is the key fix.
you know, pretty sure I tried that, but maybe I didn't.
So, it's updating we already have imported, which is this media uh right there.
Fixing load content dead video code.
Um, add the method update this class update and Adventure menu and then do a sanity check.
And then we'll read through this and we're going to look at um we're going to look to see what it did.
So here it's a little summary.
So they have a new looping video player core fix wraps mono games video player with looping true and no uh volume play is item potent.
It skips this if the same video is already running. Great.
Hood. Replace the three dead with a single private. Adds a um update.
Tries get texture.
Added this.
Great.
And then here adventure menu. Same pattern. Looping video player calls updating draw.
to add a new worlds video later just add a case for both the hood and that where you could you know do what we did before like a case statement.
So let's take a look at these updates. So how are we going to look at these updates? Well you can um in here you can actually click here and you can see what it did at each of them as it went along. It's noting what updates did.
Cool.
If we want to see all the updates at once, we're going to have to take a look at um the code itself via git.
So, we're going to go to our project.
We're going to go in the cloud flower and it's work trees. It created this new one right here.
and I'm going to right click on it and we're going to do show log.
We're going to go to working tree changes over the top.
And here we can see the files that it changed. We got the hood class that it updated. We got the adventure menu. And here is a new class that it put in video transitions, which is great. Now, if we want to look at all the updates here, I could rightclick, do a compare with bass.
Um, this is pulling up a new thing called wind merge, which I'll show.
It's a little bit small. Let's try to make it bigger.
ish. Good enough.
And um on the sidebar here, you can see there's diffs wherever there is yellow.
So if we scroll down, we can see the sections that it changed.
So here we had a commented out section and now it has its method update background video. At the top we can see, hey, our video player is now this new kind of looping video player.
We can see where it put in the new looping video player instead of the stuff we had before.
Go all the way to the bottom.
You can see how it changed each of our methods here and said, "Hey, if video frame is not null, go ahead and do the video frame.
Otherwise, continue doing your image stuff," which is great.
And then down here, um, it created a couple new, uh, methods. It has this get video path for world level attributes where we can put in more and this update background video, uh, method.
So, that all looks pretty good. We're going to go to the adventure menu and see how it did it over there, too.
And here, I think it's doing something similar. It needed to use the media and again it's adding the looping video player here as a private creates a new instance of it and load content has a couple methods for it and at the bottom it modified it. It looks really straightforward. This is kind of why I thought it would be easy to do. Um that's all dead and this is the new class that it added to.
So, looks pretty good to me. Looks pretty good.
Um, so let's go ahead and commit that here.
So, I'm just going to go ahead and commit it. We're going to say, uh, video looping video player implementation updates.
and we'll add that.
Okay, so that's up to date and we want to merge that into our current working branch.
Um, so we're going to go back to our branch right here and we are going to run a merge.
And here we're going to select the cloud branch that we have. This new one is called vibrant yellow. Oo. And let's click okay.
And you can see it merged in the updates.
Very good. Now if we go back to Visual Studio, there it is.
We have our new background video player running. get texture. It says if it's not null, we're going to go ahead and draw that. And it's going to be drawing it to the same location.
Fantastic.
Now, we are getting some uh red squigglies. So, we need to see why are we getting red squigglies? Oh, it's because this stuff doesn't exist anymore.
So, it didn't clean up the old methods.
So, we need to get rid of the old methods here.
As you can see, it doesn't do everything perfect.
It doesn't know what a looping video player is. That's because in our project over here, it created a new uh class and we need to include that in our project.
So, I think it went over here to video transitions and see, we can see looping video player right here. We just need to say um including project.
We can take a look at the looping video player.
Um here it's expecting a thing called is looping because it's using media. Currently that is not a thing. So we're gonna have to take a look at that.
And it has a simple play loop, a stop, and a get texture. Very simple.
So, we're going to look at this in a second.
Yeah. Is looping.
Video player doesn't have an is looping.
That's interesting.
Uh, let's also take a look at our adventure menu, which I'm sure has some errors, too.
No, let's go ahead and open that up.
This is where the other updates were made.
And we go to the bottom.
It's right here.
All right. So, all this looks good.
So, the only uh the only error is that we don't see an is looping.
That's not great. Maybe that's why I tried to do what I tried to do is that uh there is no is looping.
So if we look at video player, let's see if we can see the details of it. This is decompiled.
We have is looped.
So instead of is looping, it has something called is looped.
All right. So, it was close.
It's called is looped, not is looping.
Wamp wamp.
So, we'll go back here. Instead of saying is looped or is looping, it is looped.
I think that's it. We'll give this a try.
So, you saw we did have to make a couple updates.
That's all good.
Now the idea is that if we go to fossil fuels we are going to see video.
Um otherwise we won't I think is that correct?
Let's go down to it again.
Wee video frame.
Get texture.
Wait. Did we Did it put in anything?
Let's go back here.
background video player.play.
Oopsie.
Black screen.
that play.
Wait, did I put it in or do I need to put it in update background Oopsie.
Control find update background video. Get video path for world.
return video that this or it doesn't even use the MP4.
Interesting.
All right. Where is this being called?
Update background video.
Okay.
And it's saying if um we have and this is getting the video and it's playing the video.
So in our draw method which is right right should probably put like a click thing to go to it instead of just scrolling.
We're dizzy.
There it is. Draw behind all objects. It says, "Hey, if it's running, i.e. there's a texture, go ahead and draw it. Otherwise, do this." Okay, let's try it out.
You get you get a an error right away.
The method or operation is not implemented.
What?
New looping video player.
Is is loot right the method or operations?
What do you mean?
No, we have to think.
No. Fix it for me. Whoa. Look, I have two things now. Oo, cool.
Uh, let's take a look at looped again.
Return is looped.
Let's give Claude this error. See what Claude says.
The method or operation is not implemented.
Fine. Okay. Let's close VS so you can see what I'm doing.
I'm getting following error on the line of is uh of what's called player is looped equals through play dot when the video player is being initialized.
Initialized Note that I had to change it to is looped as is looping wasn't correct property.
This is happening straight away when the game loads.
See what it says.
Man, my nose is itchy.
I always have itchy nose. Itchy nose.
Not good for streamer.
The is looped setter isn't implemented.
Oh, in this version of Monogame, but looping will still work correctly though the existing play logic since play is called every frame when the video finishes.
Oh, it's just removing it. Interesting.
so it's just removing is looped equals true.
Okay.
Well, I mean, we'll see.
Do one of these.
Let's see what happens.
There it is. Takes a little while to appear.
Ah, can't find my file. E video slash, etc. Why not?
Let's look at our content path. Uh, you're not seeing Visual Studio here.
Here, if I do this, does it work?
You see the black screen of death?
There it is.
So, we're getting a nice nice little exception here. Uh, you could see it when it first loaded. Now that I moved it, you can't. It basically says this content path is wrong.
It's in content video.
Okay.
So, let's go to uh our hood and we're going to go to our method update.
Let's go to it here.
Get video path.
It thinks it's just in video.
I think the problem is it needs MP4.
Like we need to explicitly say MP4.
If not, I'm surprised that it wouldn't work because this is the internal content path.
We'll see if that works. Otherwise, we'll have to put in content.
Trial and error.
Trial and error.
Same error.
It says I can't find that lies. Deceit.
There you go.
Maybe take out the MP4.
I didn't know it's in the content folder again.
Nope.
Stay there.
It's right there.
I'll tell you what.
Shirley. My name ain't Shirley.
Come on.
Cannot find the file specified content path video.
I didn't pass that in.
Oh, it's doing it from the adventure menu.
Uh, I was updating the hood. I think this has the same uh, same method.
Where is it?
Oh my goodness. There we go.
This is where I was doing the adventure menu. I was changing it here.
Eventually, we'll have different videos in each place, too.
Let's try that.
Uh, this is usual coding, trial and error.
What does it say now?
The content file was not found.
What?
Bro directory not found.
Oh, >> it was smart.
It's not supposed to put content. It need It was correct. It's like this.
I think it just needed it before.
Shut up.
Now we're just getting a path wrong. Oh my gosh.
We might not be moving on to the tutorial today. Told you this wasn't easy.
Same thing.
Could not find beam content video.xmbb bro.
Why is this struggling so hard?
All right, let's do a little uh This is the same exact thing it was before.
See what's weird is um it's not finding it. But then when I put an MP4 like this, then it came up with a different path.
Why? Why are you the way that you are?
See here it says cannot find bin debug blah blah blah blah blah blah blah.
It's because it's not in here.
What?
Yeah, these are old old videos.
Interesting.
I'm going to send this We'll ask it more clarifying questions here.
Getting this error.
No, I'm not.
No, I thought I copied it.
Oh my goodness.
Let's get it again.
Copy.
I changed it to MP4 because it was getting a generic file not found.
When looking in the bin folder, I didn't see any of the updated video files.
Is it looking in the wrong place?
Why is it looking instead of the core directory?
Uh yes, it can do the hard thing and then we struggle on paths.
Oh, we're going to see this video.
How you guys doing?
Please revert it. What are you doing?
It didn't work. I try to do something computer.
A real problem. The MGCB file has the video entries, but the Monogame content builder hasn't actually run to compile them into XM files.
Ah, yes.
Now it's looking at my project file to see what else I did wrong.
H. Now, I haven't run the content pipeline builder in a little while, but when I was building files, maybe I just didn't select those uh those files to be uh built.
I'll wait till it's done. Well, no. Let me open it up.
Open up the pipeline.
Uh can show yeah sure uh I got to show this too.
Okay, pipeline.
Here's the monogame pipeline tool.
You can see in the monogame pipeline tool, we have video.
They're present right here. You can see here are the videos that we have. It's a little bit small.
We you can see that these are built on build. We're supposed to build them.
This is the type of processor it is video. You can see we also have our sprite sheets in here.
Um this is where we have music. The music is actually running through these bank files for um fod.
Got some font files.
All right. What's it saying?
The XMBB files are already built and present in bin. No, they're not.
It doesn't work.
It doesn't work.
The path just needs to drop the extension. Trust me. Trust me. It doesn't work.
It's so confident.
You know how much I always want to say nah, bro.
If we go back here and say this, it thinks it's present, which is funny.
We proved by looking because what it did by the way we scroll here.
It said hey it looked and found these things in bin.
But when we went over there, we went in bin in content in video and I don't see them.
Those one sec.
Also, our music stopped. Wump wamp.
It's going to go back and forth. Nuh-uh.
Meanwhile, What's next?
Uh, what are we feeling?
Jazz rumble.
How about some uh classical?
Yeah, go ahead and take a look. Sure.
Sure.
Go.
Do your thing.
I'm finding music.
Music. Robots don't need music.
Classical.
Classical. Fairy tale.
What else we got here? Quirky classical.
What? How much more do you want from me?
Yeah, sure.
Quirky. Yeah, quirky classical. Charming piano pieces with a cheeky twist.
I like how they suggest what you're supposed to be using it for. Perfect for adding a dash of Wes Anderson to light-hearted moments, quirky clips, and comedic capers.
Sure.
Oh, there we go.
I can see the full picture. The source file exists in content and it's NBC files correct. It just hasn't been compiled to do a clean rebuild. All this forces the Monday game content builder to reprocess all of them including the coal file.
It still doesn't reappel. Check the build output window.
View output.
Is this louder for you too?
Moderately.
Cool.
Also make sure the path is I know blah blah is not MP4 little.
All right, let's uh go back to Visual Studio.
So we are going to clean solution and rebuild all.
It's building it all.
Did it actually rebuild it?
I did skip that stuff.
Interesting.
I don't think that'll work.
I might need to rebuild the monogame uh thing, too.
Yeah.
So if I go to this pipeline right here, these say build action build.
So, if I go to build um Oh, look at all those saves that are down there. Um, it says skipping this MP4 file.
Interesting.
Just keep clicking the button.
Just keep explosions.
All right. What did it suggest us to do?
If it still doesn't appear, check the build output window. View output.
So if I go over in Visual Studio over here properties content do not copy. Is that true for spreadsheets as well?
Yeah, because this is supposed to be done in the uh MBG file here.
What does it say?
Check the build output window. View output.
Uh view.
Where is output? Output.
I'm looking at output literally right here.
It's selected.
What do you want me to do?
Change drop down to build for any MBGC errors.
Now it's skipping them.
Let's try it again.
right here. We have video.
All right, we're gonna have to say this in the Monog game pipeline tool.
These were built in.
Let's see if we can explain it and maybe it'll give us some more advice.
in the mono game pipeline tool.
These videos were properly built in.
I cleaned and rebuilt the solution and Ben is not changing.
Seems like problem is that Ben is not getting updated with what is accurately being present present in the pipeline.
Because if we look here in our pipeline tool, we can see they're all properly here.
Uh if we go to Visual Studio and we go to our project settings, uh that's not what we wanted.
file, bro.
Yeah, go for it.
I knew something like this was going to happen.
where bin here you see it in here in the content folder, right? We see it.
But in our solution, it shows this old stuff. Look how old this stuff is. The last time this was built was um a year ago. It says 417 2025.
It's asking for permission.
All right. It's doing some debugging on uh because our pipeline. So you can see here we're showing fire explorer um in debug here. You can see that this stuff is from 417. This is like a year ago.
So whatever is doing bin here in our debug where it's finding it is old. It's not getting refreshed. bin is uh something that you know every time you rebuild you would think this would get updated.
It's not.
I'm allowing it to do stuff.
Use project looking project files.
It's using PowerShell.
Um, if we go here, what I'm looking for is um, our project settings.
The thing is I think these project settings are not in shared. It might be the uh, so I go to properties here.
This isn't what I want. This is just a dependency on Windows. So I might have to look at the Windows project rather than the shared um property.
So it should be like project properties.
What about It's not the settings I was expecting.
It's drying.
Um, is there something that should say like um when you're building something, where is it exported to? And like are you doing a uh release or are you doing a debug?
Is this the one?
This is just showing you what you can do.
Yield Where is it?
I don't know. Not know.
Sucks that you can't see these drop down menus. When I select this, you can't see what I'm looking at.
Sure, go for it.
Project items What you talking about, Willis?
Oh, okay.
It's It thinks it has the full picture.
So this switch ball one has it. This old executable in the shared bin folder is stale.
This exe is not being rebuilt. It is currently shared as a stale artifact from the previous build setup. That is true.
There are two things to fix right now.
First, this is mixing project items.
I included that in the project though, which is weird that it's not in it.
Usually you're not supposed to save stuff in project items. You're just supposed to use, you know, Visual Studio to do it.
Um, the fastest fix is to manual copy it to share bin so it can find it.
Oh, I mean it would compile. It was confused about that. XMBB manually copied.
The long-term question is what produces the executable blister, which is the code that this is based off of, which I did more than a year ago.
You had more video XBS. You'll need copies over the same way until blister bill is sorted out.
Well, let's see if it's present.
Did it do the thing?
It did. It slapped it in there.
It just threw it in there.
So, um, when we did releases and debugs for Blisterblade, which is, um, the game, this is the codebase, this was, uh, cloned from and then built off of to create a different game because we used a lot of the same collision and other stuff. Um, and was kind of a basis for it, especially the level editor was the big thing. Um, it was creating release of bins in executables. So it was like, hey, the current way this is working is it was running blister blight and etc. So I'll probably take a look that on my own. I think again it's because we're running it from the shared folder and the solution is built off of different um projects.
So I think in the shared folder when it's um was being built as an executable um it was doing it somewhere else. So I think that's kind of broken.
Any case, I'm not even going to ignore I'm going to ignore this project items thing.
It thinks it's not present, but it is.
Um we included it in our project here.
Um, in fact, actually, I forgot over here. I can look at Windows.
What if I open up project properties here? This is what I was looking for.
This is the menu.
Um, build optimize code. Oh, for release. That's probably it, too, cuz we're doing we're not trying to create release versions right now.
So, I bet in our release, you know what?
If we look at our release, is our release uh getting updated?
So, if we go and do go to release, I have a release, Josh. Let's take a look at our release.
Uh, no. This also says the old stuff.
What is in release, Josh?
Um, that sort of doesn't really matter then.
at the moment.
Allow publishing.
You know, I might look at this again on my own because if we know it just needs to be in that path right now, we can just see if the video works.
And then this is something we'll need to figure out, of course, when this actually gets released and creates, you know, versions of it to put on Steam and everywhere else.
Um, but right now it's not building and putting stuff in the right place.
So, I'll figure that out. Any case, see if it works.
All right. So, if I press enter, what happened?
the same thing.
Are you kidding me right now?
Video slash.
All right, let's look in content.
root directory.
Uh, we need to hide the game for you to see this um content.
Fortunately, you can't look in here.
I'm getting real close.
Text is so tiny.
It's just not loading.
GameState.stance that content.
like something up.
see other places where it does this.
This is how it loads content.
Content manager.load.
See how this is so different with how it loads a type of thing.
And then see how in the video player is it doing the similar thing similar dotload I guess it is trying to load video and the concept. All right it's similar but it doesn't exist.
Uh where is this here?
game state instance content.
And yes, as it says, it should look like this. As you can see, we have a bunch of different like spreadsheets and stuff.
It's loading.
And then it's utterly failing when uh it gets to the video equals consent content root directory.
You know, we're gonna have to do this.
What is our content root directory?
Just says content.
That's so that's so unhelpful.
Why is the call stack over here? This is weird. Why is all this stuff way over here? That's not supposed to be like that.
What happened? This is supposed to be down here.
Why are you Why are you the way that you are?
Oh, cuz I moved into another window.
Yeah.
Uh, debugging. I love it.
Let it break again.
But if we look in the content folder here, uh, all it has, it doesn't even have any video at all because it fails to load in this path.
Um, so that sucks.
We're going to need to figure this out.
What else can we ask it?
Where else can we have it look in our project to figure this out?
We're going to need to talk to our AI friend. Try to be more detailed.
This was not the thing that I thought would be a problem is finding a file.
I thought the issue was going to be um when it tries to render it.
But this is something we were going to have to address eventually was being able to create a new project that can be compiled and released and packaged. Um and we're just hitting it now.
It's got to be before early 2025, too.
How can I um I'm going to need to new versions of this Switch Light Switch Ball Deluxe game. Anyway, how about we go about creating new debug and release releases all of the current assessments.
Once this is resolved, then we can refresh bin with accurate current releases.
Then we then with finding any content in bin will also be resolved.
Sounds good to me, right?
Let's figure out how we can create a release or debug uh instance of the project. And if we can do that, then when we're rel uh referring to content within that, it'll always work. What's weird is like we can do spreadsheet updates and we can do font updates and I never have this problem. The fonts and all those things get referred to in such a way where they're not looking at that path.
Um so there's something weird going on where the paths are um being not found.
Good call. This estab canonical build.
Good call.
Thank you. I thought so too.
I mean, it's not a big deal. We're not going to lose anything.
Silly faces. So, there are some videos.
When I was first working on Blisterblite on the action platformer, uh I was uh messing with video and um I just created the really silly little tiny videos that I could display in the game. And this was uh this is probably 2020 maybe when I was working on this stuff when I was first doing this stuff. Um, I started working on blister blight in uh 2018.
So, this could have been 2018, 2019. Um, and I like that those sorts of things are being referenced.
They're like, we we need to bring in the silly faces.
No, we don't.
Fine. It doesn't matter, bro. It's It's Who cares?
It It sees them. So, the idea behind um these little faces that I was finding was that um depending on your actions and what choices you would make, different stuff would happen. So, I had like a negative face, a neutral face. Um and now it's looking at all this old uh blister stuff to be like, "Hey, we don't want to lose it." I'm like, "Don't worry, it's in a completely different project."
Um, and it's okay. It's not a big deal.
Yeah. Good. The only thing is we see these silly faces. Please let me do it.
Okay.
You're welcome.
Sure.
What's interesting is how it's trying to do stuff in Monogame just directly adding it to the content MGCB file which itself is a file that gets built whenever you build stuff via the pipeline. So whatever it's doing might get overwritten anyway but just let it do its thing. I want to The big thing we're trying to do here is to uh be able to rebuild and actually get debug and uh release projects.
Sure, go for it.
By the way, it did a ton of stuff that it expects me to constant copy over. I'm not going to do it. It's doing all this stuff in its own little folder for content. I don't care about any of these spaces or any of the stuff. So, we're just going to we're just going to do this.
Move this down a little bit.
This is what we're going to be doing.
Oh, my music was so short. Oh, never mind. It's running.
That's weird. Why is the end of this song so silent?
I don't know.
In the Windows project in solution explorer, right click on the Windows project, set a startup.
But don't we need to run from shared like if we're here.
Oh no, we are running in Windows. Dur shared is just Yep.
All right, let's follow it instructions.
This I think is what we're trying to do.
Um we are going to it already is the setup project configuration debug build clean solution rebuild.
Oh, we were cleaning the shared. We weren't cleaning the actual release.
Wait a second. Is that it?
So when we were rebuilding, we were right clicking on shared up here. Is it just here?
If I just clean And then here I rebuild or here debug. No rebuild.
Where else is it telling us to go?
Configuration debug properties. This n see if that worked.
We'll know if it worked if we go here and we actually see stuff change.
It did not.
It still has all our blister bite stuff.
Um, by the way, this music it's a little quirky for those who stuck around.
Everything's in place.
Windows project is a startup. Yes.
Configuration dropdown. Debug.
Build. Clean. Build. Rebuild.
Bro, I'm right up here. I've been doing this the whole time.
Clean.
properties.
Oh, this is so quirky.
Build rebuild.
And it's skipping all the content.
But that shouldn't matter.
The big thing is that in rebuilding windows, it's not actually um well, is it? Let's go in Windows instead.
Dude, this is old AF.
Is it in here?
I see this here.
But shouldn't it be completely refreshed like I see old because the thing about the Windows is that Windows is supposed to go to shared. Third.
And here in bin, we do have the switch ball deluxe one right here.
Our application I'm not changing anything on stream till this breaks again.
This is ridiculous.
All right, we're going to need it to do more because right now did it update it did. Uh, no, it did update this. You can see it says exe.
The DLL was updated right here.
The content is still not found.
Just keep at it.
do this so you can see what I'm writing.
I'm still getting.
So, first I just heard that sounded like the sound like a little bit like some Super Mario Galaxy going on here.
Trying to sneak in a little tunes there.
There are still what how do I want to say it?
Yeah, I must have copied this over a while ago. See, this iss 415 or 4. Yeah, this was when I was probably testing this back then.
different projects.
I need to v this out. I have a little bit desperation in the tone.
Um, what else was I going to note? Oh, we didn't try to create a release version of it.
So up here we can go here instead of debug we can do release and then we can do a uh rebuild for release and we can see if it created a release um one in here. It did. Look at that.
So this is everything it currently sees.
So that's something can also do the configuration manager.
It's just saying that it's very basic stuff.
Just keep just keep giving it stuff. Who knew this stream was just going to be the Hey, I can't find this file name.
And yeah, see when you use tools, tools aren't just going to magically make it go away.
This is also something where the again the more that you write and the more info you can give it the better it will have at understanding what to fix because right now it's like still not finding the file.
You do need to have different projects.
What do we do now?
The goal is that I'll just be able to create different versions and then package them together and just have all the stuff there.
It's weird to me that video though is something that again it's problematic.
Our pipeline right here, where is our pipeline going to?
Pipeline is connected to the shared folder.
So our content pipeline is going to the shared folder because this is content that should be shared across all directories. That's why um Oh, look at it's a different thing.
See, I told it that it needed the MP4.
It didn't believe me.
It's learning.
So, I know it's scrolling a little too fast here.
that says, "Hey, when you press play, the Foundation tries to open the MP4 file at runtime."
This is why the old shared bin had both the MP4 and the XMBB. The MP4 must be physically alongside the XMBB for it to decode it.
The fix is to explicitly copy entries for every MP4 in that copy directories are written into the build manifest which forces the content builder to include them in the project bin.
Cool.
Now do a clean rebuild in Visual Studio after the build.
I see.
And where is it? You're updating it directly.
It's updating it. Where it is up to getting shared.
This This sounds like a western.
Okay. So, let's go ahead and try it out.
Um, this time we'll just go ahead And I don't think this the one I was doing it in. There it is.
We'll just merge whatever it did.
Make it happy.
Cloud.
So we'll do a little commit here.
Um, it wants it wants our MP4s.
Oh, don't move that. This. See, it wants to do our MP4s.
These old ones. Whatever. Sure.
Okay.
Now the thing about content updates via um from another branch is that generally I want to do everything through um your local changes override my merge.
Oh, whatever.
This is the stuff.
Oh boy. All right. All right. All right.
All right. All right. All right. All right. All right. All right.
Content generally should be done through the pipeline tool and building it rather than updating the file directly. But because it's Claude, Claude is just like, I'll just update the file directly.
What's the problem? Let's see what the problem is.
So, if we go and bin here, do I see it? No.
I don't see the MP4 here.
It didn't work because all it did is update the pipeline.
Um, if we go to the Windows bin, which is I don't know why it would be using this.
It's not there either.
So, for just the sake of trying of just getting it there.
I'm just going to put it in.
I don't know what'll happen, but we have uh the video.
The video is present in content.
So, I'm just going to copy it.
I'm just going to slap it in here. I don't care.
And we're going to do it in uh and shared as well.
Cool.
I did it. I did a thing.
Shout out. All right. So, the project has things outside it.
Discard.
Um, now we're going to try to Do it again.
Build failed.
Why?
What is it gone? What happened to my looping video player?
Oh, I need to add it again.
Wait, this is copied the same crap he had before.
Um, good.
Because I copied over what it had before and these were the changes I made to delete the errors.
Good. Good. We're right back to where we started.
And remember, we didn't need this.
Let's see if anything changed.
I hate how it's showing that on the right side now.
Enter.
Still broken.
It broke again.
Why?
The media was stopped immediately.
By the way, it had something What's the player state? The player state is playing and get texture is null.
We're going to do this.
All right. So, here we have video.
It did somehow find the MP4 cuz we copied it in. You can see it's looking in Windows. We don't want to look in Windows. We want to be looking in the shared folder for content.
I think that's one of the big problems here is that it's running there, but when it's loading stuff, it should be in shared.
Um, regardless, um, it's finding the video. It's trying to play the video.
And then texture.
It's immediately doing get texture.
What does get texture do?
Just trying to get the texture of the video and it fails.
All right, this will be the last thing we do today. This is ridiculous.
Today was a stream of failure. I had great hopes. I thought it would just work.
uh an important thing though.
I saw that when it was attempting to get the content video. It was looking the Windows bin folder, not the shared folder.
The shared folder and project is what is to be used across all projects.
This is what is getting updated and is what is connected to the mon game pipeline.
In fact, the MP4 files directly to both bin files just to see if it would work.
Did not.
I don't understand why it's so easy to update and add sprites and fonts, but why video is problematic.
I also don't understand why pipeline tool isn't working for these videos like four sprites.
Should I re add Should I remove read the videos via the pipeline tool?
I don't like adding content directly to the content file.
It should be generated based on the pipeline tool.
There's a lot of words for it.
Lovely.
When you're doing development, whether you're working with a tool or whether you're doing it on your own, as with today where we've been going for about two hours, the vast majority of time is spent in trying to figure out what went wrong.
rather than building out a new feature.
So for here we uh it's a little bit summary because I think we're just going to let it do its thing and call it a day.
The main issue isn't that we have video files um or that we have a method that can call them.
it's that the video itself isn't being pulled into the content the same way as the sprites and that when it attempts to call the video and run the video, it doesn't find the content to run. It's getting null reference exceptions and there's confusion between the Windows project which is supposed to talk to shared um and the shared project itself in terms of what dictates the content and what's being used.
So, this is one of the things the two that if you use different uh engines instead of mono game, some of this stuff's a lot easier um to do. So, what you're running into now is something that could be completely trivial in other game engines. Um but this is what we have. This is what I'm working with.
Um so, we'll see what it gets back to us. It's probably going to say something like, "Hey, uh try rebuilding this again."
Um, but we'll see. The goal, as you saw, is just we're just going to show a different video. Um, but tomorrow when we uh get back into this, we're probably going to skip this. This might be something I just debug on my own. And we'll probably go to a new feature like the tutorial that I wanted to do today.
Um, I need to think more about how I direct it for what I want the tutorial to look like. But again, I think it's just going to be a sequence of little screens or video um, back toback that you just teach the basic mechanics of the game.
Most of this game I want to be taught just by playing. I don't want there to be hardly any tutorials, but just having a basic one, I think, would be nice. Um, that's kind of it.
I don't know how long it's going to think here.
It's been a pretty good uh music channel.
I'm impressed by uh the music that they have. whoever. There's so many different people who are like, I just want people to listen to my music and they, you know, are getting paid probably some tiny little amount, tiny little amount by upbeat. Um, but they're allowed allowing people to listen to it, to use it for different things. It's really cool.
Um, I don't know. Tune in tomorrow.
Tune in tomorrow if you want to see this. I'm just going to let this run. It might take a little while for it to think of an answer. We're going to call it there. Glyph hanganger, but that's it for today. We saw some interaction with Claude and did a lot of debugging.
I'll be back tomorrow around 11 as we continue this. And next week, um I have a couple ideas for the next game to play.
uh whether it's just gonna be a straightforward game or something different, maybe some speedr runninging, maybe some wackiness. We'll see. But I'm going to call it right there. Again, thanks for everyone on Twitch and YouTube who are checking in today and who are going to be watching this later.
This is probably one of those ones that you want to just keep skipping ahead, but you won't know that until the end.
Too bad.
Oh, wait, wait, wait, wait. Oh, no. It's it's it's still doing stuff. Never mind.
I'll check you guys tomorrow. As always, love you guys. Cheers. Love you, too.
Related Videos
VALORANT's Latest 'Exclusive' Tier Bundle is Rough...
KangaValorant
17K views•2026-05-28
Flight Attendant Mocks Poor Looking Black Woman — Mid Air Announcement Exposes Her Real Power
SkyboundStories-b4r
184 views•2026-05-28
I FIXED My Friend’s Blown Turbo RX-8… Then Sold It
Cameron-RX8
134 views•2026-05-28
NewsWatch 12 at 5: Top Stories
NewsWatch12
1K views•2026-05-28
Simon Jordan & Danny Murphy deliver PREDICTIONS for Arsenal's Champions League FINAL with PSG
talkSPORTArsenal
6K views•2026-05-28
Botting is OUT OF CONTROL in Classic WoW (Again)...
SolheimGaming
108 views•2026-05-28
The "AI Job Apocalypse" is CANCELLED!
WesRoth
9K views•2026-05-28
STREET FIGHTER 6 - INGRID Story Walkthrough @ 4K 60ᶠᵖˢ ✔
RajmanGamingHD
12K views•2026-05-28











