Something that we’e always done here at Star Frog Games, and this – the development diary is to give the highs, the middles, and especially the lows in independent game development. We (I) do the stupid thing so that you, dearest reader, at home won’t do the stupid thing that we just did while working on your own project.
Well then, so I was working on the Paper Zeppelin project. my goal for the night was to add the Ground spawning and level loading functions into the Monogame port. And honestly, I was making some real cracking progress on that front. I’d ported over the level loading functions, and the ground spawning functions (of which younger me had created a dozen functions for. Or, you sweet summer child). But, I kept running headlong into the issue of my images not loading.
Look, there is technically an asset import function in Monogame, and technically it works, but technically it is ass. It doesn’t always seem to do what you would like it to, and it was built with no concept whatsoever of guardrails. In software design, a guardrail is something like asking “Hey, do you want to save this?” if you’ve closed a program and didn’t save recently. Or, in this case, if you add files to your directory, please just build the fuggin things. Don’t make me ask, since I will forget, and I will forget because I have better shit to be doing with my time than to remind you to build the files that I just imported. What else, in the name of the wee baby Shamus, would I have imported those files in the first gods damned place if I didn’t want them built? Riddle me that Batman.
Anyway, now that we are past that particular rant I can continue with the story of woe, terror and impotent rage. I went in and added a debug write line to the PZ code to let me know that the loading function was working correctly, and you know what? It totally was. The application console (that’s the window that shows your errors and things that you tell it to write) spit out the file character data and would have loaded the level just like a good panda.
Instead, it kept telling me that the ground tiles were not in the directory, and they were not in the directly in spite of my import, because the Monogame import function is technically ass. So I went to working around that and getting it all sorted out by attempting to do the import a few different ways. One of them should work after all, other people can get their Monogame projects to load without needing to sacrifice lambs to some dark, unknowable, and downright capricious deity.
But then, in my haste and/or annoyance, I went and deleted out the Content File. Let me tell you about the Content File. The Content File held all of the images, csv level data and, this is true, the .cs files for my new version of Paper Zeppelin. Worse, and this is true, the way that they were deleted skipped the Recycling Bin and sent themselves straight to hell. They’re gone now. My new Core function is gone now. Thankfully, the custom Sprite Manager that I’ve been working from managed to dodge my ineptitude, so it’s not a total loss. But I do want to go have a lie down anyway.
But, and this is true, I learned that I can import direct C# files from another project without the middle pieces, which means that I can really easily port in the original classes for the XNA Paper Zeppelin, so long as I change the Namespace to Zeppelin instead of whatever.
We also learned (the hard way – because us) about Version Control. Way back for The Thief’s Tale, we had a method of version control where every time we worked on the project we made a new file with the date. That way if there was an issue, we could roll back to the last version that we hadn’t broken. This was a good idea that I wasn’t even thinking about. After all, I’m just moving Paper Zeppelin to Monogame out of XNA, what sort of dumb thing could I do that would even require me to need such a thing? I’ll get that clicking along for next time.
You heard it here first kiddos. Keep a ton of backups and version control your stuff. We do the dumb things so that you don’t have to. Still though, I’m gonna make a face: