what?

Return of the Obra Dinn saves your game as .txt files
containing XML
which contain a date and a <data> element that's a base64 encoded string.

that sounds like binary with extra steps
I'm trying to Death Generator this game but Lucas Pope is known for two things:
1. really neat games
2. caching all his rendered text
this means that if a game has a message box that says "Hello World!" and you memory edit it to read "Cat Sauce" and re-trigger the message box, you still see "Hello World!" because it's still caching the rendered text
oh
I was worried this game had dynamic justification
but no, it's just that I can't spell.
there's only two Rs in "terrible"
the good news is that I can quit to the menu and re-load the save and it empties the cache
the bad news is that automating this is not going to be easy. this game has its own mouse controls, meaning I can't use absolution positioning
absolute positioning, I mean.
ahh, there's keyboard controls. so this is doable.
There's still a nasty memory-search in there, but I'll manage
okay got it doing a full reset.
the best part is that if I set it up slightly too slow, it accidentally clicks quit instead of begin, and the game closes, and I have to set up the IDs and pointers again
I'm not sure I've ever gotten memory searching to work
got it. the problem was, as always, memory protection
well, that didn't last long. I was trying to skip some steps and figure out what unicode regions are supported by this font, and instead it just hung my extractor
I'll just extract all of unicode!
at 11 seconds a character, that'll take about... 19 days?

there's apparently a timing bug in my script which means that sometimes instead of quitting, it tries to turn down the volume.

this is less than useful

it turned out to be because minecraft was crashing slowly in a multithreaded manner
this is one of the worst ideas for a game to extract to put in the death generator
it has, like, 7 different character sets in it?
english (plus extra characters because there's some danish and german in there), hindi, traditional chinese, russian, and probably several more I'm forgetting
frankly I'm lucky this game didn't just invent its own conlang and stick the alphabet up in the private use area somewher

also every time it renders text it looks different.

literally every time.
there are randomly missing pixels. this is intentional and part of the game's aesthetic

I have now crashed two asset extractors
interesting discovery: although the game is monochrome, the textures aren't. They seem to be mostly red/pink, with some green used.
The monochrome stuff seems to be done in a shader, but I'm wondering if the colors in the textures are being used for some in-game use?
oh neat, an undithered version of the two sketches

oh my god
the carpenter, first mate, and 7th top man have IDENTICAL arm muscles!

LITERALLY UNPLAYABLE

it keeps the list of fate-moments in a CSV file. Interesting.
the column headings are:
"id, r, die,pull, music, clear, keep, fog, loc,corpse, skel,shadows,prune,unlock"
same for the crew manifest:
"id,,gender,name_unused,shortname_unused,job,birthplace,fate,clue,difficulty,hint,sketch,tally,pay,insurance,category,pic"

{
"key": "fate_parts_fell-rigging",
"val": "Fell/Rigging | $subject | fell from the rigging to <M>his<><F>her<> death."
},

The game has an interesting implementation of gendered-text, one which I'm not a fan of as an enby

I need to write a game engine with a comprehensive pronoun engine one of these days, just to Show How It's Done

OMG! it actually DOES have more than the gender binary! just the final gender is "beast":

{
"key": "fate_parts_eaten-killer",
"val": "Eaten | $subject | was <m>cannibalized<><f>cannibalized<><b>devoured<> | by $killer."
},

@foone I think APICO has a thing that lets you fill in all the different pronoun types
@foone for me its just a:
# Change thr pronouns to your own,
PRONOUN01=she
PRONOUN02=they
PRONOUN03=their
PRONOUN04=Themselves
echo "$Character got $PROUNOUN4 a new cool ahhh flames sword"
Problem solved
@foone omg yes we need a pronouns/localization library that can insert any pronouns from pronouns.page
@foone A truly comprehensive pronoun engine would be extremely interesting, since pronouns can affect other grammar in arbitrary ways. Consider "They are/He is". And one could construct even more advanced pronouns that change disconnected parts of the sentence. You'd either need to have a *very* sophisticated language understander, or have entirely separate text for every gender.
@foone [nods] a comprehensive gender engine should be no harder than a comprehensive time zone engine. How hard could it possibly be...
@foone
Can you have characters randomly call me an "enby lookin ass?"
@foone I've been curious how Chrono Cross did it to handle different formality levels, first person pronouns, and speech quirks.
@foone I think engines that have comprehensive localisation support would be a good start, since those usually have to deal with things far more bullshit than pronouns (insert "if you think pronouns are confusing, wait until you find out about verbs" meme here)
@foone That would also be a PITA to localize.
@sarahokeefe this actually is the localized text. There's a separate file for all the other languages
@foone like, for compression?
@ellie No, just texture-reuse. It's not even stored in the same file, so it's not compression at all
@foone wtf; what year is this. That's some very modern wastefulness.
@foone if i had to guess, the red channel is used for the lightness of the monochrome textures and the green channel is used for emission. blue channel is just a copy of the red channel.
@foone I forget what for, but they *are* in fact used for different purposes.
@foone reflection data for the shader?

@foone yep. Lots of tricks being done to obtain the final 1 bit look of the game.

I believe red channel = the base texture, green = painted in lighting to ensure important parts are visible even if they're fully in shadow.

@bgolus ooh, nice! I had done some searching to see if anyone had figured out what the game looks like without the 1bit/dither shaders, but couldn't find anything
@foone Pope did a dev blog on tigforums in which he detailed how most of it works.
Return of the Obra Dinn [Releasing Oct 18]

Return of the Obra Dinn [Releasing Oct 18]

@foone Based on some info in the debug menu and the dev diaries, the different colours are used to create visible seams for the edge detection shader on the surfaces without the need for modeling those details
GitHub - AssetRipper/AssetRipper: GUI Application to work with engine assets, asset bundles, and serialized files

GUI Application to work with engine assets, asset bundles, and serialized files - AssetRipper/AssetRipper

GitHub
@foone As someone who did exactly that, where else would you put the damn things?
@kawa my own codepage, of course. Fuck unicode
@foone been there, done that too.
@kawa I don't see the Felinese

@foone That's the #Asspull3X codepage, not the Felinese conlang.

*This* is the conlang. 👇

@kawa oh I see. Why isn't your conlang in your codepage though?
@foone Not enough space and, despite the system's mascot being a felin, it is not itself part of the #FirrhnaProject so...
@foone wait, what does Minecraft have to do with this?
@oblomov nothing! It was just running at the same time, and it crashed in a way that ate all my cpu
@foone pouring gasoline on the fire meme, but it's foone pouring timing rubber bands into the automation
@foone maybe it's just trying to find some passive aggressive middle ground, ok.