Episode


Researched by SuperSaiyajinStackZ, Version: 0.2.0.


Some notes

  • There are 24 Episodes in game.
  • Only 12 of 24 are actually playable, while 11 are only re-play able from the Episode Select Menu.
  • The first Episode starts at 0xFF of the Slot.
  • The size of the Episode Structure is: 0x5 (5) bytes.
  • The full size for the Episode section is: 0x78 bytes ( 24 * 0x5 ).

  • NOTE: The final Offset varies with the amount of items you have in your house, see Episode Offset for how to get the proper final Offset.

Structure

You can find a C++ structure for the Episodes below.

struct Episode {
	uint8_t PlotPointsCompleted = 0x0; // Plot Points Completed Rating; 0x0.
	uint8_t AspirationConversation = 0x0; // Aspiration Conversation Rating; 0x1.
	uint8_t HiddenWantCompleted = 0x0; // Hidden Want Completed Rating; 0x2.
	uint8_t ErrandCompleted = 0x0; // Errand Completed Rating; 0x3.
	uint8_t Unlocked : 1; // Episode Unlocked State; 0x4 Bit 0.
	uint8_t Played : 1; // Episode Played State; 0x4 Bit 1.
	uint8_t Unknown : 6; // Something to figure out; 0x4 Bit 2 - 7.
};

Episode Offset

The Episode final offset depends on how many items you have in your House.

The amount of items you have in your house is stored at byte 0xD6 of the SavSlot’s Data.

See below for a way how to get the final offset.

/*
	Not necessarily required, but if you just like to use the offsets from the episodes that are displayed on the Episode Selection Screen,
	you can just use that instead of 0xFF.
*/
static constexpr uint32_t EPOffsets[11] = {
	0x104, 0x10E, 0x122, // Season 1.
	0x11D, 0x131, 0x127, 0x14A, // Season 2.
	0x140, 0x118, 0x16D, 0x168 // Season 3.
};

/*
	SlotData is the data of the SavSlot.
	EPIdx is the episode index ( 0 - 23 ).

	For the indexes, check the Episode Table below.
*/
uint32_t GetOffset(uint8_t *SlotData, uint8_t EPIdx) {
	if (EPIdx >= 23) return 0; // Out of scope. Only 0 - 23 is valid.

	return 0xFF + (SlotData[0xD6] * 0x6);

	/*
		If you instead want to access it directly from the SavData instead of the SlotData, rework it like this:
		Slot being '1' for Slot 1, '2' for Slot 2 etc.

		return (Slot * 0x1000) + 0xFF + (SavData[(Slot * 0x1000) + 0xD6] * 0x6);
	*/
};

Episode Table

You can find a list with the base offsets for each Episode below in the Table.

Episode Start Offset
It All Began 0xFF
Buried By the Mob 0x104
Unofficial 1 0x109
What Digs Beneath 0x10E
Unofficial 2 0x113
The Doomed Earth 0x118
Blackout! 0x11D
Aliens Arrived 0x122
The New Cola 0x127
Unofficial 3 0x12C
A Brand New Scent 0x131
Unofficial 4 0x136
Unofficial 5 0x13B
Triassic Trouble 0x140
Unofficial 6 0x145
There Was This Mummy 0x14A
Unofficial 7 0x14F
Unofficial 8 0x154
Unofficial 9 0x159
Unofficial 10 0x15E
Unofficial 11 0x163
A Very Special Reunion 0x168
It All Came to an End 0x16D
Unofficial 12 0x172

Episode Rating

0x0 up to 0x3 are the rating categories of the Episode.

The max value per rating category is 0x19 (25).

Below you will find a table with the index and what the category is.

Category Index
Plot Points Completed 0x0
Aspiration Conversation 0x1
Hidden Want Completed 0x2
Errand Completed 0x3

Episode Unlocked

The unlocked State is stored at bit index 0 at 0x4 of the Episode Structure.


Episode Played

The played State is stored at bit index 1 at 0x4 of the Episode Structure.