VOGONS


First post, by Peter Swinkels

User metadata
Rank Oldbie
Rank
Oldbie

Hello everyone,

who remembers the wonderful game The Playroom by Broderbund from 1989 for MS-DOS and Macintosh? Who played it and still remembers it? Or even better, who knows the even more beautiful Windows version from 1994?
There was something special about this game. A colorful playroom filled with interactive objects and surprises—every click brought something new to life. But what made it so memorable? Was it the mysterious mouse hole, the magical scrapbook where creativity came to life, or perhaps something else that many overlooked? For those who remember: what was your favorite discovery? And is there a way to experience it again today? Maybe someone still has old screenshots, floppy disks, or a working installation?

Let's dive back in time together and rediscover this hidden gem!

the-playroom_2.gif

(Bing assisted with the tone and details. 😀)

My GitHub:
https://github.com/peterswinkels

Reply 1 of 1, by Peter Swinkels

User metadata
Rank Oldbie
Rank
Oldbie

Anyway, I tried reverse engineering the game's data files. Someone very kindly gave me this Python script:

# An unpacker for *.PES files from The Playroom for MS-DOS by Broderbund (1989)

import sys

def pes_unpack(infile, outfile):

with open(infile, 'rb') as f:
data = f.read()

mode = data[4]
usz = data[5] | (data[6] << 8) | (data[7] << 16)
ts = data[8]

if mode != 2: raise Exception("Unknown compression method")
if ts & 0x80: raise Exception("Table w/flag not implemented")

h = 0
tptr = 9 + ts
htabs = []

for i in range(ts):

nrec = data[9+i]
tbl = (h << 1, tuple(data[tptr : tptr+nrec]))
htabs.append(tbl)
h = h * 2 + nrec
tptr += nrec

out = []
bits = 0
val = 0

for i in ((n & (1<<x)) >> x for n in data[tptr:] for x in (0,1,2,3,4,5,6,7)):

val = (val << 1) | i
ht = htabs[bits]

if val >= ht[0] and val < ht[0] + len(ht[1]):

res = ht[1][val - ht[0]]
bits = 0
val = 0
out.append(res)

if len(out) == usz:
break

continue

bits += 1

with open(outfile, 'wb') as f:
f.write(bytes(out))

if len(sys.argv) != 3:
print("Usage: python script.py <input.pes> <output.unpacked>")
sys.exit(1)

input_file = sys.argv[1]
output_file = sys.argv[2]
Show last 3 lines

pes_unpack(input_file, output_file)

It ignores a few bytes from the header which appear to unimportant to the actual decompression process. Anyway, although I consider myself to be okay at coding and do enjoy a challenge I doubt I am going to invest much more time in trying to crack the game files. Anyone who wants to give it a try is welcome to use the script I posted here as they please. 😀

See ya.

My GitHub:
https://github.com/peterswinkels