MMM - Mystery Mansion

MMM - Mystery Mansion vytvořil pravděpodobně Bill Wolpert v jazyce FORTRAN IV pro minipočítač HP-1000 během pobytu na Naval Undersea Warfare Engineering Station v Keyportu v letech 1978-1981. Verze 16 byla distribuována na magnetických páskách HP UserGroup. Jedna z těchto pásek se dostala za železnou oponu někdy v roce 1982 a skončila u nás. Po převodu pásky na sálovém počítači EC-1027 z hustoty 1600bpi na 800bpi, kterou uměla číst naše mechanika u počítače HP-1000E jsme tam nalezli i tuto hru. Byla anglicky, byla hodně zabugovaná, narážela na limity hardware (počítač měl 32 Kslov, tj. 64 KB adresový prostor), byla psána sice nestrukturovaně, ale čitelně, viz příklad dále. Na tehdejší dobu (PC ještě neexistovalo) měla spoustu vychytávek (viz např. neúplný výčet zde) a tak jsme se společně se spolužákem Bohoušem Michalem rozhodli hru upravit a převést do češtiny. Přispěl zejména svým analyzátorem skloňování slov (který spáchal pro tehdejší textový procesor MAN - předchůdce LaTexu :-), takže tato hra rozeznávala česká slova v různých tvarech a pádech, správně skloňovala a vůbec hovořila téměř správnou CESTINOU (ano, tehdy ještě nebyly na počítačích háčky a čárky).

Port na PC vznikl v roce 1999 převodem do jazyka C a oháčkováním a očárkováním. Poté následovala v roce 2001 čistka kódu od pozůstatků nestrukturovaného Fortranu a doplnění scházejících neportovaných příkazů. V roce 2012 pak vznikla tato stránka a u této příležitosti byl kód dále trochu poopravován (hlavně ukládání hry).

Zde je PC verze ke stažení (WIN32 konzolová aplikace, běží v Win XP - Win 7):

Příklad zdrojového kódu ve FORTRANU IV:
C                                                                       
C *** MATCH ROUTINE ***                                                 
C                                                                       
  220 IF(IFD(IVEN(31)).EQ.0)GOTO 230                                    
      ITST(7)=ITST(7)+10000                                             
      IBT=ITST(7)/10000                                                 
      IF(IBT.LT.3)GOTO 230                                              
      ITST(7)=ITST(7)-30000                                             
      IF(IVEN(31).GT.20000)WRITE(LU,222)                                
      IF(LX.NE.0.AND.IVEN(31).GT.20000)WRITE(LX,222)                    
  222 FORMAT(/" YOUR MATCH BURNED OUT")                                 
      IVEN(31)=118                                                      
C                                                                       
C *** TORCH ROUTINE ***                                                 
C                                                                       
  230 IF(IVEN(27).EQ.0.AND.IR.EQ.53.AND.IXT(320).NE.0)IVEN(27)=1242