tandy put their sound chip on the 1A interrupt? THE TIME SERVICES?

I started reverse engineering Where in the World is Carmen Sandiego (Enhanced DOS edition) and I'm trying to find how it generates its random seeds so I search on int 1a and the first thing I find is it's doing TANDY SOUNDS?

Funny fact: I was trying to get an online assembler to spit out the machine code for "int 1a" but couldn't get it to, so I just went "fuck it, I can probably just do that in my head!"

Turns out I can. My brain is weird.

Here's something I didn't know existed until just now: Where in the World is Carmen Sandiego checks your name against the list dossier list and rejects you if you use any of those names.

PRONOUNS DETECTED: THIS GAME IS WOKE

sadly they don't have they/them on here. What about the non-binary criminals, huh?

stretch goal: hack in at least on enby criminal with appropriate pronouns. maybe I'll just put myself in the game as one of the criminals you can apprehend

I think I might be able to do the hack I want by changing one byte.

I'm trying to change it so it has "daily challenges", and I think I can fix that by just switching a INT 1A from subfunction 00 to 04, making it seed the random function with the date instead of the ticks-since-midnight

eh, I used 5 bytes. I don't need to impress anyone

NORMAL CODE

random(*(byte *)*(undefined2 *)
(*(int *)(*(int *)0x39a6 * 0xe + local_c * 2 + 0x1d02) * 2 +
*(int *)(local_c * 2 + 0x24b)) - 1);

I haven't figured out how this game stores gender, but I'm gonna go out on a limb and say it's like this:
male: 0
female: 4

why? because they have strings like:
char* HE="He\0\0She\0"
char* HIS="His\0Hers\0";
char* HIM="Him\0Her\0";

so they can do like:

printf("Follow %s to %s lair, and capture %s alive!", badguy->name, HIS+badguy->gender, HIM+badguy->gender);

I like how the game only asks your name, not your gender.
Player's don't have genders. Only thieves have genders.

It's a prequel to Disco Elysium, and your gender is set to COP

why does ghidra's "search by instruction pattern" default to BINARY?
what kind of a freak remembers the machine code for INT 21 on x86 in BINARY?
it's CD21h, not 1100110100100001!

what are you, some kind of nerd?

I love reversing a string and it's:

void printString(char* str, int length);

and I go look what calls it, reverse that function, and it's:

void printStringSimple(char *str){
printString(str, strlen(str));
}

it's like "aww, did someone have second thoughts about making PRINT always take a length, and got tired of having to manually calculate lengths so you just wrapped it?

and your compiler didn't inline SHIT?

Follow

@foone OH NO! CARMEN SANDIEGO HAS STOLEN YOUR pronouns

Sign in to participate in the conversation
Pixietown

Small server part of the pixie.town infrastructure. Registration is closed.