We know what you really want: An excruciatingly detailed fungus pickling simulator. And I’m going to show you how it’s done. “What, more logistics simulation?” you gasp, somewhat overwhelmed with emotions you can not identify, will not identify. Yes, I answer, because if I’m going to be forced to write this thing two weeks in a row it’s either this or more Bizarre Literary Experiments and we all know how that turns out. (Of course we could always mix the two – a bizarre literary industrial logistics simulation experiment, but then I might be treading on China Mieville’s turf and that guy could totally beat me up.)
Let’s call it a two-part series if that makes you feel better. Remember that episode of TNG where Riker said “Fire!” and it cut to the end of the season? It’s like that but without the cliffhanger. Or Riker. But we’ll make it work because we’ve got fungus and the luminous mycelium interfacing with the base of our neck, suggesting that this is a good idea after all and why don’t we continue discussing the laudable qualities of fungi.
So let’s walk through the process of adding a harvestable resource to the game and go into a bit more detail about creating a production chain from start to finish. All meat free!
First, we have a set of three models with textures created by Mr. Hamilton — a large, medium, and small cluster of fungus. He makes the magic happen in Maya for 3d modeling plus 3d Coat and Photoshop for texturing. Out of this we get some .obj model files and some .png or .tga texture files. The *.obj must be turned into a *.upm for the game (I mean, duh) via the importer, seen here:
Now stop looking please.
The *.upm holds the model geometry, various rendering flags, paths to textures, and probably some other nonsense. This packaging process must be done for every model and animation in the game and that’s about what there is to it.
So we’ve got the models, how about putting some fungus on the game map? This requires two things: a game object definition, here:
And putting said game object definition into the biome definitions so it’ll actually spawn some fungus:
We’re almost there, but I’m pretty sure the game will write some passive-aggressive console log lines if we attempt to harvest this stuff without defining that commodityOutput. Back to Mr. Hamilton, the importer, and some more Komodo Edit. Oh hey, and it needs an icon! Great. Forgot to even draw that thing, one sec, loading up Photoshop, copy-paste, paint a bit, there.
Okay, we’re all set up!
Think we’re done? Nope! You can harvest these things, they can be eaten (because they’re type “food”), but they’re not being pickled and black cup fungus is best when pickled. Now last week Sean made some lovely models for berry preserves which you can see here:
Let’s re-use the same models but change the texture to make some pickled fungus. Normally I’d make Sean do this but he’s in Portland drinking craft beer or getting a tattoo or whatever it is they do in Portland, so it’s up to me. Just need to modify a texture, slap it on a new copy of the model, put in a new food definition (and I’m skipping drawing the icon for now, so a placeholder that consists of my bloody, screaming head will have to suffice).
But that’s not all! We have the raw resource, we have the end product — now we need to workshop definition for this transformation of mere fungus into slimy quivering morsels of delicious homey nourishment. Ah, you say, we talked about workshop definitions last week! Excellent, I say, we can apply this to our current feature. Onward!
… Actually there are a few things I mentioned but didn’t show because I didn’t want to go into excruciating detail last week but have kinda walked into it this week. Let’s see ’em.
Ouch, okay. Hurrying along here as best I can – we’ll make this cleaner and smarter later. It’ll need a requirement for glass bottles in which to pickle, but we’re going to be nice just for this one example. (And yes, we’re going to pickle the fungus by sticking it in the oven. JUST LIKE GRANDMA DID. And you really, really don’t want to see the contents of those FSM commands, though we’re going to have to clean them up to make the character interactions with the modules look more natural.)
Where does this get us?
And I’m out.
I should rename the build machine; Suggestions?
TIM
SOMECALLMETIM
YHTNTEP
HARVESTER, maybe?
Bertha! Lovely Bertha. Sometimes I think she’s a dream.
Damn, the more I read the more I want this game! Stop taunting me!! Is there any news on a tentative release date? I remember a while back it was set for end of December or something, then mid-Febuary, any news on the new time window estimate?
Well the official game website still states “early 2014” as release date, which I think isn´realistic anymore, so maybe mid 2014?
I can only hope it comes out sometime soonish x.x I die a little every day waiting for this to finally come out 🙁
How many people stopped to find the missing comma like I did?
Yup, I did.
Same here.
I think this fascinating blog post leaves out one crucial question: who in their right mind would want to eat black fungus? Or spread it their toast? Does it give one superpowers?
I think I’ll stick with the Queen’s Own Cherry Preserves, thank you very much.
Cherry preserves, you stahlmarkian terrorist, the moonfungus is a gift of the beneviolent cog, in his name must we eat them.
So does the mushroom jam cause madness or what?
Not this particular one. There are some other fungi that probably would…
Are the black cap mushrooms a cap mushroom with a white ring around the edges? Because in pictures it looks kind of like a lava tube or some other thing.
Cup, not cap. Hey, maybe we can fill them with delicious berry preserves!
I’ve never been so excited about fungus before. Or at least not in a long time.
Why are you mixing of json and html? Unless you go into namespaces and other
nastyadvanced XML features, you can express more or less the same with both formats.And one of the sucks. And it’s not json
XML gives better error reports. Since you have the name of the closing tag, you can be more specific about “Unexpected end of NoodlyBucket on Line 406” while also having the ability to run one of a massive number of schema validators on all of your files to make sure they are formatted correctly ahead of time.
If you have a similar error in a large JSON file, everything gets a little weird because you have just made malformed objects which might technically still be correct. So maybe one of those lua scripts converts the JSON to XML, so the human operator can write the nicer syntax but the error messages will be a lot more reasonable / localized?
Ah, your speculation is charitable.
We’re not using JSON; the non-xml you see above is a form of Lua read by … a custom interpreter I believe? Micah would know, as I believe he wrote it, and it’s related to our parallel processing Sorcery.
XML is used, I believe, because there was code for reading it from Dredmor. I will concede that the error reports *are* better in XML generally, but that’s not why I have to pull some data out of Lua- it’s that the UI doesn’t read the Lua data, only XML. Which probably comes down to “do you work on the game or the tools”, and while arguably the tools allow the team to work on the game more efficiently, the question then is where the production bottleneck is. And for now it was easier overall to just hack it.
Long story short: very small team, indie game, necessity. Somehow it works!
http://xkcd.com/1205/
Thanks for the answer, makes quite some sense. To quote someone from pycon 2012: I hate source code and I want as little as possible of it in our product. Our customers pay for features, not for source code!
And I admit json errors are annoying, although an editor with auto-indent will normally make them easy enough to spot. I guess what I like about it is mainly how trivial it is to handle json because it maps 1:1 onto language primitives in most languages, while DOM is about as clumsy an interface as it gets, and the whole ecosystem of XML+XMLS+XSLT+XQuery is just a horrible mess of convoluted code. Do I sound frustrated at all?
Glad, but not surprised, to hear there’s a Gaslamp China Miéville fan club. See you at six.
Which Elder Thing do I need to make a sacrifice to in order to get this game?
Why was Riker yelling “Fire!” because there was a fire on the ship? He was commanding Worf to shoot at something? Or he was just being a dink and trying to panic the ensigns on the bridge?
P.S. These damn captchas are way to hard to read!