We just released a prototype of the cancelled SNES port of Puggsy! Take a look!
As always, thank you for supporting The Cutting Room Floor on Patreon!

Proto:Theme Hospital

From The Cutting Room Floor
Jump to navigation Jump to search

This page details one or more prototype versions of Theme Hospital.

There are three known demos of Theme Hospital - an initial rolling demo from 1995, a further rolling demo from 1996, and a playable demo of the game.

1995 Rolling Demo

This was released as part of a "Christmas Demo" pack from Bullfrog that was included on the coverdisc of magazines such as PC Zone issue 37.

General Differences

It demonstrates various parts of an pre-alpha build of the game, with the early "pin board" UI style seen in many pre-release screenshots. The demo content varies from simple scenes with large numbers of NPCs on screen, to how the room creation UI works to glimpses of actual gameplay with patients being treated by Doctors and waiting in the corridors. Unlike the later rolling demo, this one runs on the games' actual engine, and as such includes many cut graphics and other files that are not actually visible if the demo is played through. As with the Syndicate Wars Pre-alpha Demo, this demo works by replaying a series of pre-recorded actions. Even more revealingly, the player can interrupt and take limited control by moving the mouse during playback. This will then cause the demo to fail on replay of the next sequence of the demo.

The demo begins with text promising that the final game will feature "4 locations" and "4 time periods", the latter concept of course scrapped in the final game for a modern setting.

The first actual game scene seems to simply demonstrate the large number of on-screen NPCs the game can handle, showing various patients milling around, most interestingly including the Black and Asian Bloaty Heads that are cut from the final game, as well as lots of female patient designs that were also cut.

Next is a demonstration of how rooms are created. This scene demonstrates a large number of cut interface ideas. At this stage of development it seems rooms start as generic structures, rather than each room having a specific purpose and therefore set size and components. The following can be observed:

  • The player clicks on the "blueprint" button in the bottom menu. This instantly puts the game in room creation mode
  • Two empty rooms are placed. Door and window placement works as in the final game based on context and order (door first), rather than using the "fold-out" menu seen in pre-release screenshots and videos
  • Once the doors and windows are placed, they turn into generic empty rooms. These have a decorators' pasting table covered in wallpaper, paste, and paint in them
  • These empty rooms use the bare floorboards tile that is present but unused in the final game
  • A spinning 'i' icon hangs above each of these tables, and at some point turns into the '?' icon
  • Once the room menu is used to define the room and start placing objects, the decorators' table disappears and the bare floor gets replaced with carpet
  • Items are placed in the room. This part uses an early room item UI design that is somewhat similar to the final game's. Many boxes that should clearly have values such as prices in on the UI are empty.

The fold-out UI design for windows and doors is not triggered in this scene despite the graphics being included in the files, so either it was simply not finished yet, or it was cut as it can be seen in pre-release screenshots and the progress report video. That the demo places windows and doors in the way the final game behaves, and that it shows an early version of the final game room items pop-up interface suggests this original design UI was already cut and on the way to being completely replaced.

After this various scenes of patients being treated play. These are less interesting, but visible are the cut wall charts in various rooms, more unused female NPC variations, and extra long windows on exterior walls.

Restoring Player Control

As with the Syndicate Wars pre-alpha demo, it's possible to hack the demo into being playable.

If the SAVE directory is set to read-only, the demo will fail to playback correctly (the mouse movement recordings are located here in the format of PLAY.RX files), and the mouse pointer will simply constantly move to the top left of the screen, breaking the demo.

This behaviour is controlled by two variables, which are set in function 0004a8a0 (the following addresses assume a code segment with start at 00010000 and data segment with start at 00080000):

; Enable playback of actions stored in recorded demo
0004ad28 c6 05 b5        MOV        byte ptr [DAT_000956b5],0x1
         56 09 00 01
...
; Disable player mouse control
0004ad39 c6 05 b6        MOV        byte ptr [DAT_000956b6],0x0
         56 09 00 00

Therefore, patching the first instruction to set value 0x0 disables playback of actions, and patching the second instruction to set value 0x1 enables player mouse control.

This function also iterates through a list of file indexes stored at 0008fa9a. We can zero out all indexes of the first introductory screens, so that after the logo screen, we jump straight into the recorded demo.

However, if the player presses any key during playback, the demo exits. This is due to a hardcoded check in function 000120d0, which parses the pressed key, but instead of calling the corresponding handlers, it sets a variable that exits the game main loop:

; DAT_002d0910 stores the key value, which is 0x0 if no key is pressed
00012122 80 3d 10        CMP        byte ptr [DAT_002d0910],0x0
         09 2d 00 00

; If value = 0x0, jump to handlers. However, the handlers expect a
; key value != 0x0, therefore none will be called.
00012129 74 0e           JZ         LAB_00012139

; Else value != 0x0, set game main loop variable to exit game
0001212b 66 c7 05        MOV        word ptr [DAT_000956ac],0x1
         ac 56 09 
         00 01 00

Therefore, we can change the condition to take the jump if value != 0x0, and set game main loop variable to 0x0, so that the game doesn't exit if no key is pressed.

In summary, all these steps can be performed by patching the following file offsets:

          00025d29 = 75 ; don't skip key processing when key is pressed
          00025d32 = 00 ; don't end main game loop when key is released
          0005e92e = 00 ; disable playback of actions from replay file
          0005e93f = 01 ; enable player control
00094690..000946f4 = 00 ; skip loading .LBM files before first replay

Alternatively, a script[1] is also available to apply these patches.

Under player control, the game attempts to load file SAVE/HOSP.G0, which isn't present, resulting in an empty map. However, any of the HOSP.G* files can be copied over.

Unused Console Output

A variable that controls the console output of some debug messages is initialized in function 00010010 with value 0x1. However, it is then compared with value 0x0 to bypass the output. We can restore it by modifying the condition to compare with value 0x1, by applying patch 00023f04 = 01.

Output:

Hospital v0.0
SIZEOF THING STRUCTURE: 2150
SAVE GAME SIZE: 1106733

Unused Command Line Options

An unreachable switch-case statement that handles command line options is present in function 00010010. We can restore it by replacing the first jump instruction of that function to instead jump into this parsing logic, by applying patch 00023c30 = c0.

These can be provided in format -x or /x, either lowercase or uppercase, with some also supporting a number parameter: /x-1 for negative, /x+1 for positive.

Elementary, my dear Cactus.
This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: Networking setup in function 0004dee0 formats some strings such as ADDING TESTER and CALLING TESTER, but these don't appear to be printed, may require patching.

Options:

/c Unused, sets unreferenced variable at 000953a6
/d Unused, sets unreferenced variable at 000953c8
/e Loads Map Editor
/f Loads Complex Editor, but crashes the game. Likely due to missing a call to function 00022e40, which is done when this editor is activated in-game
/g+1 Loads HOSP.G1
/l+1 Loads level.l1
/m Switches the default video mode (101h, 640x480) with a lower resolution video mode (13h, 320x200). However, it attempts to load missing graphics files, and crashes the game after the logo screen
/n+2 Enables networking between two peers if value >= 2. Communication is done with NetBIOS over IPX, which can be emulated with two DOSBox instances. The game exits if NETBIOS.EXE is not found on the game directory. If this option is used along with /s+0, NetBIOS names for each peer are HOSP00 and HOSP01. The implementation appears to be buggy, since both peers print on screen --------OUT OF SYNC----------, although some actions are synced: loading a level with Shift + n updates the map position on both peers, and Shift + Esc also exits the game on both peers.
/o Unused, no-op
/p+1 Enables playback of file SAVE/PLAY.R1
/q Enables console debug output, although it requires a patch
/r+1 Enables recording to file SAVE/PLAY.R1, however it only appears to allow player control, unknown if any recording is actually written.
/s+0 Sets the NetBIOS name prefix HOSP0, used along with option /n.
/x+1 Tests shift operations applied on the given number. First operation is a Shift Arithmetic Right (SAR) with expression (x & 0xff) >> 8, which will always return 0. Second operation is a Shift Logical Right (SHR) with expression (x >> 8) & 0xff. For example, if we pass /x+256, we get the following output:
ANSWER IS 0
OTHER ANSWER IS 1

In-Game Screen

When taking screenshots, these are stored under directory scrshots, which isn't present. Therefore, make sure you create it beforehand.

It's possible to activate editors from the in-game screen, but due to buggy behaviour, they only show up after toggling the Progress Report screen.

Elementary, my dear Cactus.
This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: Check if recording can be activated, since there is code to handle that function.

Controls:

F1 Toggles Progress Report screen
1 Create a peep
Shift + 1 Create a peep at mouse position
2 Enter room creation mode (click+hold mouse button to place blueprint)
5 Create a peep on mouse click
8 Place a room object
9 Place a decorative object
a Plays advisor animation
b Complete all rooms in Blueprint mode on the map
e Open map editor
f Open complex editor
i Draw bounding boxes around objects
m Build Reception desk (click+hold mouse button to place blueprint)
p Pauses animations
t Blacks out screen and creates picture-in-picture window
Keypad + Creates Picture-in-picture windows. Can be used in conjunction with t. Windows can be resized with mouse. Last clicked window can be scrolled with cursors/mouse. Click in main window to scroll that view again. Toggling map editor removes windows
. Toggles the Town Map screen
Alt + c Takes a screenshot and saves in scrshots\HOSP001.LBM
Alt + r Loads level.l0 tiles. However, this file isn't present in the demo. Attempting to copy over a level from a later version loads garbled tiles, likely due to differences in the level format.
Alt + l Loads HOSP.G0
Alt + s Saves HOSP.G0
Shift + n Loads level.l0
Shift + Esc Exits the level

Map Editor

ThemeHospital-1995RollingDemo-MapEditor.png

Controls:

Right-Click on panel Scrolls to next/previous entries
Left-Click on panel Selects tile
Left-Click on ground Places tile
f + Right-Click on ground Fills the ground with the selected tile
u Undo placed tile

Unused Functions

Located near the map editor's initialization function 0002d5d0, there are 2 unreferenced functions that add additional debugging functionality. These can be activated by replacing the return instruction of function 0002d5d0 with a jump instruction to either one of those unreferenced functions. To do so, apply one of the following patches at the corresponding file offset:

  • Function 0002d700: 000412fa = e9 01 00 00 00
  • Function 0002dd00: 000412fa = e9 01 06 00 00

Function 0002d700 adds both a debug display and an overlay mode, where a flashing white rectangle represents the mouse position. The player can place marks on the overlay. Additionally, the top panel has visible buttons when the overlay is active. These buttons can also be activated without the overlay, even though they aren't rendered.

Controls:

1 Clears mark
2 to 5 Places different styles of marks
7 Toggles overlay
8 Places a large mark

Function 0002dd00 only adds a slightly different debug display.

ThemeHospital-1995RollingDemo-MapEditorUnusedDisplay2.png

Complex Editor

ThemeHospital-1995RollingDemo-ComplexEditor.png

The Complex Editor is where the game's disparate animations were combined to create coherent behaviours for the game's characters, as demonstrated in the later rolling demo.

Some functions load and save files under directory CDATA, which isn't present. Therefore, make sure you create it beforehand.

Elementary, my dear Cactus.
This needs some investigation.
Discuss ideas and findings on the talk page.
Specifically: Menus appear to be mostly broken, check if there are associated functions and if they can be fixed.

Controls:

Right-Click on panel Scrolls to next/previous entries
Left-Click on panel Selects object
Left-Click on ground Places object
1 Increases HEAD variable
2 Increases BODY variable
3 Increases SHOES variable
4 Increases ACCESS variable
5 Increases SPECIAL variable
F1 Loads bottom panel entries with peep animations
F2 Loads bottom panel entries with objects
c Closes sub-menu
e Hides objects
r Reveals objects
n Input FUNCTION NAME
p Switches to CDATA/CTHING_P.d* save file
s Switches to CDATA/CTHING_S.d* save file
Shift + Delete Deletes objects
Shift + f Exits the editor
Up / Down arrow keys Loads the next/previous save file under CDATA

Unused Main Menu

Function 00035130 checks for left and right mouse clicks while the complex editor is active. However, it then calls functions that were compiled as no-ops. Near these functions, there's the unreferenced function 000353e0 that sets up a main menu with some available actions.

We can activate this menu on right mouse click with this patch:

00048dab = 31 
00048dac = 02
00049050 = 08

Menu entries start at file offset 0009280D.

PLACE
STAFF
PEOPLE
FILE & UTILS
OPTION5
OPTION6
RETURN TO GAME
EXIT GAME
STAFF
PATIENTS
OBJECTS




MAIN MENU
LIST FUNCTIONS
NEW FUNCTION
CHANGE FUNCTION
ADD ACTION
REMOVE ACTION
DELETE FUNCTION

MAIN MENU
LIST FUNCTIONS
NEW FUNCTION
CHANGE FUNCTION
ADD ACTION
REMOVE ACTION
DELETE FUNCTION

MAIN MENU
LOAD STAFF
SAVE STAFF
LOAD PEOPLE
SAVE PEOPLE
WRITE PBM

MAIN MENU

Menus/Defined Animations List

Starts at file offset 0008A3BD.

Desk                                              Cabinet                                           Door                                              Bench                                             Chair                                              Drinks 1                                          Bed                                               	9                                                 
10                                                11                                                12                                                
13                                                14                                                15                                                cX                                                 ÈNull                                     GOTO OBJECT                             PLAY ANIMATION                          SETUP EXIT COMPLEX                      XX                                      ST - DOCTOR_IN_OFFICE                   ARRIVE AT OBJECT                        LEAVE OBJECT                             ADVANCE OBJECT 1 FRAME                  XX                                      	XX                                      
Null                                    Null                                    Null                                    
Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                     Null                                    !Null                                    "Null                                    #Null                                    $Null                                    %Null                                    &Null                                    'Null                                    (Null                                    )Null                                    *Null                                    +Null                                    ,Null                                    -Null                                    .Null                                    /Null                                    0Null                                    1Null                                    2Null                                    3Null                                    4Null                                    5Null                                    6Null                                    7Null                                    8Null                                    9Null                                    :Null                                    ;Null                                    <Null                                    =Null                                    >Null                                    ?Null                                    @Null                                    ANull                                    BNull                                    CNull                                    DNull                                    ENull                                    FNull                                    GNull                                    HNull                                    INull                                    JNull                                    KNull                                    LNull                                    MNull                                    NNull                                    ONull                                    PNull                                    QNull                                    RNull                                    SNull                                    TNull                                    UNull                                    VNull                                    WNull                                    XNull                                    YNull                                    ZNull                                    [Null                                    \Null                                    ]Null                                    ^Null                                    _Null                                    `Null                                    aNull                                    bNull                                    cNull                                    dNull                                    eUNUSEABLE - Goto Desk                   fUNUSEABLE - Goto Cabinet                gUNUSEABLE - Goto Door                   hUNUSEABLE - Goto Bench                  iUNUSEABLE - Goto Chair                  jUNUSEABLE - Goto Drink1                 kUNUSEABLE - Goto Bed                    lUNUSEABLE - Goto 9                      mUNUSEABLE - Goto 10                     nUNUSEABLE - Goto 11                     oUNUSEABLE - Goto 12                     pUNUSEABLE - Goto 13                     qUNUSEABLE - Goto 14                     rUNUSEABLE - Goto 15                     sUNUSEABLE - NE                          tUNUSEABLE - SIT DESK                    uUNUSEABLE - WORK DESK                   vUNUSEABLE - LEAVE DESK                  wUNUSEABLE - A_ST_USE CAB

A second table of animations found at file offset 0008A6E3.

Null                                     GOTO OBJECT                             PLAY ANIM                               CHOOSE ANIM                             SET EXIT SEQ                            FACE OBJECT                             MAKE PERSON WAIT                        PERSON SITS                              ARRIVE AT OBJECT                        LEAVE OBJECT                            	ARRIVE DOOR                             
LEAVE DOOR                              GOTO OBJECT - DEST SET                  Null                                    
Null                                    ST PERSON_GONE                          ST PERSON_AT_DOOR                       ST PERSON_IN_QUEUE                      SP PERSON THROUGH DOOR                  ST PERSON_WAITS                         ADVANCE OBJECT BY FRAME                 Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                    Null                                     Null                                    !Null                                    "Null                                    #Null                                    $Null                                    %Null                                    &Null                                    'Null                                    (Null                                    )Null                                    *Null                                    +Null                                    ,Null                                    -Null                                    .Null                                    /Null                                    0Null                                    1Null                                    2Null                                    3Null                                    4Null                                    5Null                                    6Null                                    7Null                                    8Null                                    9Null                                    :Null                                    ;Null                                    <Null                                    =Null                                    >Null                                    ?Null                                    @Null                                    ANull                                    BNull                                    CNull                                    DNull                                    ENull                                    FNull                                    GNull                                    HNull                                    INull                                    JNull                                    KNull                                    LNull                                    MNull                                    NNull                                    ONull                                    PNull                                    QNull                                    RNull                                    SNull                                    TNull                                    UNull                                    VNull                                    WNull                                    XNull                                    YNull                                    ZNull                                    [Null                                    \Null                                    ]Null                                    ^Null                                    _Null                                    `Null                                    aNull                                    bNull                                    cNull                                    dNull                                    eUNUSEABLE - Goto Desk                   fUNUSEABLE - Goto Cabinet                gUNUSEABLE - Goto Door                   hUNUSEABLE - Goto Bench                  iUNUSEABLE - Goto Chair                  jUNUSEABLE - Goto Drink1                 kUNUSEABLE - Goto Bed                    lUNUSEABLE - Goto 9                      mUNUSEABLE - Goto 10                     nUNUSEABLE - Goto 11                     oUNUSEABLE - Goto 12                     pUNUSEABLE - Goto 13                     qUNUSEABLE - Goto 14                     rUNUSEABLE - Goto 15                     sUNUSEABLE - Anim CHECKIN                tUNUSEABLE - Anim KNOCK                  uUNUSEABLE - Anim BUY DR                 vUNUSEABLE - Anim SIT1                   wUNUSEABLE - Anim SIT2                   xUNUSEABLE - Anim SIT3                   yUNUSEABLE - Anim ENTER DO               zUNUSEABLE - Anim EXIT DO                {UNUSEABLE - Anim STAND                  |UNUSEABLE - Anim SITTING                }UNUSEABLE - Anim GET UP                 ~UNUSEABLE - Face Desk                   UNUSEABLE - Face Cabinet                €UNUSEABLE - Face Door                   UNUSEABLE - Face Bench                  ‚UNUSEABLE - Face Chair                  ƒUNUSEABLE - Face Drink1                 „UNUSEABLE - Face Bed                    …UNUSEABLE - Face 9                      †UNUSEABLE - Face 10                     ‡UNUSEABLE - Face 11                     ˆUNUSEABLE - Face 12                     ‰UNUSEABLE - Face 13                     ŠUNUSEABLE - Face 14                     ‹UNUSEABLE - Face 15                     

Several labels and filenames at file offset 00084DEC.

CEDITOR BACKED UP %SAVE/HOSP.R%d tisave/HOSP.g%d ].save/level.l%d  COMPLEX RETRY OCCURRING PEEP %d COMPLEX RETRY OCCURRING PEEP %d %d èEDITOR LEVEL %d   Owner Status %d  üSAVING MAP DETAILS  X=%d,Y=%d timap_pos=%d %MouseX=%d  MouseY=%d  cdMOUSE LOCKED LBM************** EDITOR : LEVEL %d ************** save/back.g%d ELsave/level.l%d t******* %d ******** %d *****  %d *********** os=NOTHING MORE TO UNDO =%dNOTHING MORE TO REDO ***PUT LINE * ECOPY  : CUT PASTE **FILL ***UNDO    REDO    PLACE  üSTAFF  üPEOPLE üFILE & UTILS 	 üOPTION5 OPTION6 RETURN TO GAME *EXIT GAME      HPATIENTS TO OBJECTS                 MAIN MENU T LIST FUNCTIONS  NEW FUNCTION ILLCHANGE FUNCTION ADD ACTION FREMOVE ACTION LEDELETE FUNCTION           6 LOAD STAFF ASAVE STAFF MLOAD PEOPLE SAVE PEOPLE WRITE PBM       DETAIL FOR FUNCTION %d DELETED  CHANGES HAVE BEEN MADE - SHIFT + ESC TO RETURN TO GAME WITH NO CHANGES NDESTINATION STORED AS CELL %d - PRESS D TO SET DESTINATIONS DESTINATION RESET FOR %d STAFF CDESTINATION RESET FOR %d PEEP(S) N MCHANGES HAVE BEEN MADE - SHIFT + F TO RETURN TO GAME WITH NO CHANGES N SDISK ERROR - UNABLE TO SAVE FUNCTION %d SAVED - COMPLEX TABLES SAVED FOR STAFF & PATIENTS  RDISK ERROR - UNABLE TO SAVE FUNCTION %d DISK ERROR - UNABLE TO SAVE FUNCTION %d DISK ERROR - UNABLE TO SAVE FUNCTION %d DISK ERROR - UNABLE TO SAVE FUNCTION %d       à¿      0@      à?      à¿      0@      à?      à¿      0@      à?      à¿      0@      à?      à¿      0@      à?      à¿      0@      à?hosp  - FUNC %d NEW P FUNC %d       à¿      0@      4@      à?      $@      à¿      0@      4@      à?      $@      à¿      0@      4@      à?      $@      à¿      0@      4@      à?      $@NEcdata/CTHING_S.d%d ¿cdata/CTHING_P.d%d  cdata/S_COMP.BAK    data/S_COMP.LEX cdata/S_COMP.TXT    cdata/S_COMP.LEX  4@w           %d, // %s à¿
   #define %s @%d  S_COMP.LEX @cdata/P_COMP.BAK d%ddata/P_COMP.LEX cdata/P_COMP.TXT P.Bcdata/P_COMP.LEX    P_COMP.LEX .cdata/PREF.CED PNULL ACTION COMPLEX EXIT BRANCH TO FUNCTION %d %FINDOBJECT %s   DO %d   DODETAIL %d   NEWSTATE %d   COUNT %d   REPEAT %d datFINDOBJECT %s   DO %d   DODETAIL %d   NEWSTATE %d   COUNT %d   REPEAT %d LEXFINDOBJECT %s   DO %d   DODETAIL %d   NEWSTATE %d   COUNT %d   REPEAT %d TE FINDOBJECT %s   DO %d   DODETAIL %d   NEWSTATE %d   COUNT %d   REPEAT %d NEWMODE : STAFF UNTMODE : PEOPLE d FUNCTION NO : %d   DACTIVE THINGS : %d  FUNCTION NAME : %s TBRANCH TO F%d %s E F_ DOR EC* %sFUNCTION NAME : %s%s d  FUNCTION %d DETAIL LOADED   UNABLE TO LOAD FUNCTION %d DETAIL  P//*S*
  *SE* ION*S* r %dCPXTABLE.C T//*P*
  *PE* UNC*P* DISK ERROR - UNABLE TO SAVE FUNCTION %d cdata/S_TEMP.LEX  : cdata/S_TEMP.TXT    cdata/P_TEMP.LEX NCTcdata/P_TEMP.TXT /*SHEAD %d   BODY %d   SHOES %d   ACCESS %d   SPECIAL %d

Unused Presentation Screens

The demo has the following .LBM images included in the directory NEWDEMO that are not actually displayed:

Cut Graphics

The demo files contain the following graphics that are not present in the final game:

Fir Tree
Replaced in the final game with a different style of tree. This design does exist in the final game, but only as a tile with several other plants placed together, this standalone version was removed.
ThemehospitalDemo-FirTree.png

Wall Pieces with Mounted Fire Extinguishers
There are several versions of this same graphic with different palettes. In the final game fire extinguishers are separate objects that just sit on the floor. These don't even seem to be used in the demo itself.
ThemehospitalDemo-FireWall.png

Walls with Name Plaques
As well as the separate plaque sprite, there are wall segments with plaques already in place. Does not seem to appear in the demo.
ThemehospitalDemo-WallWithPlaque.png

Wall Plaque
Again, a very early feature seemingly removed even by the time of this demo, but visible in the files.
ThemehospitalDemo-WallPlaque.png

Wall Chart
As seen in the earliest screenshots and visible in the demo.
ThemehospitalDemo-WallChart.png

Pasting Table
Only the low resolution version of this file is included (but unused) in the final game. Used to furnish an unfinished room in this build of the game.
Themehospital-pastingtablehires.png

Spinning letter 'i'
The low resolution version of this is included in the final game's files. Used to draw the player's attention to the pasting table in a newly placed room in this early build of the game.
ThemehospitalDemo-iRotate.gif

Spinning Question Mark '?'
The low resolution version of this is included in the final game's files. As with the letter 'i', Used to draw the player's attention to the pasting table in a newly placed room.
ThemehospitalDemo-QuestRotate.gif

Coffee Table
A low height coffee table visible in wards in pre-release screenshots. The low resolution version of this is included (but unused) in the final games' files.
ThemehospitalDemo-LowTableHi.png

Reading Material
Various magazines, books, and newspapers intended to be placed on top of the coffee table, as seen in pre-release screenshots.
ThemehospitalDemo-Book1.png ThemehospitalDemo-Mag1.png ThemehospitalDemo-Mag2.png ThemehospitalDemo-Newspaper1.png ThemehospitalDemo-Newspaper2.png

Bedside Cabinet
This is visible in one of the scenes in the rolling demo. However, the back plate for cabinets facing away from the camera is not seen. Below is a mock-up of it combined with the front facing cabinet graphic as it would have appeared in-game.
ThemehospitalDemo-BedCabinet1.png ThemehospitalDemo-BedCabinet2.png ThemehospitalDemo-BedCabinet3.png

Receptionist Animations
Included in the file but not seen in the demo are these animations from the original iteration of the receptionist. Based on these graphics, pre-release screenshots and the second rolling demo, it seems this first iteration of the receptionist only had animations drawn for facing away from the screen before the idea of the dedicated reception room was scrapped and the simpler final game receptionist design was used instead. From watching the second rolling demo, the two pointing animations below were for greeting patients and pointing them to the correct hospital department, the other was for typing on a computer, the receptionist's default idle animation.
ThemehospitalDemo-RecepPoint.gif ThemehospitalDemo-RecepPoint2.gif ThemehospitalDemo-RecepType.gif

Reception Desk
A lot of work was seemingly put into this early and vastly more complicated and space-consuming iteration of the receptionist desk.
ThemehospitalDemo-RD1.png ThemehospitalDemo-RD2.png ThemehospitalDemo-RD3.png ThemehospitalDemo-RD4.png ThemehospitalDemo-RD5.png ThemehospitalDemo-RD6.png

Reception Desk Walls
These graphics are in the VBLK-0 files, used for external walls and ground tiles. However, two of the tiles from the set above are also reproduced in this file (not included here) These seem to be the mandatory core parts of the reception area structure.

ThemehospitalDemo-RDW1.png ThemehospitalDemo-RDW2.png ThemehospitalDemo-RDW3.png ThemehospitalDemo-RDW4.png ThemehospitalDemo-RDW5.png ThemehospitalDemo-RDW6.png ThemehospitalDemo-RDW7.png

Reception Desk Blueprints
Placement blueprints for the desk. implies that reception areas must have been built from long static segments between corner pieces/joins and was likely considered a room type. Note the entrance flaps have different shading, showing them to be considered "doors" for the room.
ThemehospitalDemo-RecepBP1.png ThemehospitalDemo-RecepBP2.png ThemehospitalDemo-RDBP1.png ThemehospitalDemo-RDBP2.png ThemehospitalDemo-RDBP3.png ThemehospitalDemo-RDBP4.png ThemehospitalDemo-RDBP5.png ThemehospitalDemo-RDBP6.png ThemehospitalDemo-RDBP7.png ThemehospitalDemo-RDBP8.png ThemehospitalDemo-RDBP9.png ThemehospitalDemo-RDBP10.png ThemehospitalDemo-RDBP11.png ThemehospitalDemo-RDBP12.png

Reception Desk Flap
The animations for the entrance flaps for the desk. These flaps are not seen in action in any of the rolling demos, but can be seen in some of the pre-release screenshots of this build.
ThemehospitalDemo-RDFlapAnim1.gif ThemehospitalDemo-RDFlapAnim2.gif

Reception Desk Accessories
Various items that would be placed on the desk, including several telephone designs, a visitors book, and computers. There is also an extended drawer graphic for the desks with drawers above. It's not clear why there are multiple telephone recolours - possibly they were intended for multiplayer. There are four corresponding phones facing away, but they are all white, so it seems this was abandoned early on. The front facing white phone is also off the hook.

ThemehospitalDemo-RDBackPhone.png ThemehospitalDemo-RDComp.png ThemehospitalDemo-RDComp2.png ThemehospitalDemo-RDComp3.png ThemehospitalDemo-RDKeyboard.png ThemehospitalDemo-RDBook.png ThemehospitalDemo-RDDrawer.png ThemehospitalDemo-RDPhoneB.png ThemehospitalDemo-RDPhoneP.png ThemehospitalDemo-RDPhonePu.png ThemehospitalDemo-RDPhoneW.png

Cut Staff Portraits
These are for the Staff Management screen, and can be seen in a very early pre-release screenshot. The demo includes what became the final game art for general Doctors, Nurses and Receptionists along with the below, so these are additional classes that once existed in the game. Clearly the first is a Surgeon, so presumably they were an entire separate hireable class at one point rather than just a specialization of the basic Doctor. Next appears to be a Nurse (with literally the same face as the regular Nurse), but in surgical scrubs. Finally, there is what seems to be a Handyman, but with a very different uniform and overall smarter appearance. Based on the appearance here and the very earliest pre-release screenshots of the game (where similar figures are carrying a stretcher), this class seems to have been intended as some kind of orderly character that was changed to the final game's more generic Handyman.

ThemehospitalDemo-SurgeonIcon.png ThemehospitalDemo-Nurse2Icon.png ThemehospitalDemo-OrderlyIcon.png

Stars
These are found alongside the staff portraits, and can be seen in the Bullfrog progres report video which shows they were part of the cut fold-out staff hire UI. Presumably gold, silver and bronze were likely early versions of the staff rating system.

ThemehospitalDemo-GoldStar.png ThemehospitalDemo-SilverStar.png ThemehospitalDemo-BronzeStar.png

Plants
A planter and different style of pot plant. Neither of these have corresponding withered plant versions, so they were likely created before the plant watering mechanic had been instated. As such it's likely the introduction of this mechanic that led to the planter being cut and replaced with simpler pot plants. Based on pre-release images it seems the plant pot here was intended to be placed on top of things like desks and tables.
ThemehospitalDemo-Planter.png ThemehospitalDemo-PotPlant.png

Shopping Bags
Graphics for what would presumably be a dropped carrier bag, and other ones in the hands of various kinds of patients
ThemehospitalDemo-SBag1.png ThemehospitalDemo-SBag2.png ThemehospitalDemo-SBag3.png ThemehospitalDemo-SBag4.png

Bouquet of Flowers
Two different sets of flowers with a gap presumably for a hand to hold them
ThemehospitalDemo-Bouquet1.png ThemehospitalDemo-Bouquet2.png ThemehospitalDemo-Bouquet3.png

Early Advisor Animations

Hmmm...
To do:
Try and find a working palette and rip these properly

As in the final game, there are animations for the Advisor to pop up to grant some advice. However, in the demo files and as per early promotional artwork, the Advisor appears in his original Theme Park outfit, before his costume was redesigned to have a doctor theme. In fact, he appears twice - once in his Theme Park garb, but also dressed up in a bowler hat and glasses the same as the bank manager wears in the final game. Presumably he would wear this costume when popping up to offer advice on financial matters such as loans. Unfortunately, the palette used for these two images seems different to that used for the rest of the sprites, and the other palette file included with the game still does not look right, resulting in these graphics being a garbled mess. Both of these animations can be seen in the Bullfrog Progress Report video.

ThemehospitalDemo-AdvBadPal.png ThemehospitalDemo-AdvBankBadPal.png

Unused UI Graphics

The demo also includes the complete set of interface graphics for the bottom "pin board" design, despite these animations oddly never being seen in the actual demo. The first "blueprint" set is complete, and includes several icons that would be displayed. The item order form and staff hiring UIs have their basic layout graphics, but no actual items are present in the demos' files. The fact that these interfaces are never seen in the demo suggests either a) they simply were not finished in time, but also b) based on the way the demo behaves where doors and windows are placed in the same way as the final game, and items are placed from a dedicated pop-up window, they were already cut. The below animations are recreated based on the early pre-release screens of these animations, which are incomplete, so may be incorrect. The mid-animation frame in the pre-release shots also does not make sense as it shows the far left edge of the blueprint fold out further away from the edge of the box then it can possibly be for the next (and final) frame of the left edge folding out. It's therefore likely these were mocked-up screens and this entire design was never actually used in the game.

The staff fold-out menu seems to have been short-lived based on pre-release screenshots that already show a pop-up menu similar to the final game's UI with staff in for this build. However, the Bullfrog progress report video does show this and the room placement menus in action. Revealingly, the actual fold-out animation is never played, even when switching from the room placement to staff hire menu. There is no menu shown at all for room items.

The Room item menu has no object icons at all, and based on the lack of screenshots of them (and that all screenshots showing items being placed use a pop-up menu interface similar to the final game, as does this demo) it's likely this was abandoned before these were ever created.

The blueprint style set for creating rooms seems to be expecting a slightly different palette to that used by the demo itself. This means each part has a clearly incorrect turquoise area at the bottom. That the icon graphics (Windows doors, etc) still look as in the pre-release shots with the same palette file show this is an error, and the colour has been replaced based on these icons in the animations below.

Room Menu
Themehospital-UIAnim1.gif

Room Items Menu
Themehospital-UIAnim2.gif

Staff Hiring Menu
Themehospital-UIAnim3.gif

Room Menu Icons
ThemehospitalDemo-BPUIWindow.png ThemehospitalDemo-BPUIDoor.png ThemehospitalDemo-BPUIRoom.png ThemehospitalDemo-BPUIUnknown1.png ThemehospitalDemo-BPUIUnknown2.png

Room Menu Graphics Examples with original Palette
ThemehospitalDemo-UIOrigPal1.png ThemehospitalDemo-UIOrigPal2.png ThemehospitalDemo-UIOrigPal3.png

Unused Text

The executable MAIN.exe has a huge amount of unseen text inside it, both from debug information, and what is clear the game's editors' menus. There is also a list of pictures to load during the intial slideshow part of the demo, which includes two pictures not present in the actual demo released: x.LBM and um, SHIT.LBM. Starts at position 0009421C.

SHIT.LBM                                          newdemo/frog4.LBM                                 newdemo/logo.LBM                                  NEWDEMO/Demo3.LBM                                 NEWDEMO/Demo4.LBM                                 NEWDEMO/sign.LBM                                  NEWDEMO/Demo6.LBM                                 NEWDEMO/Demo7.LBM                                 NEWDEMO/x.LBM                                     NEWDEMO/x.LBM                                     NEWDEMO/Demo7.LBM                                 NEWDEMO/COMING.LBM                                NEWDEMO/HI-RES.LBM                                NEWDEMO/16000.LBM                                 NEWDEMO/TIME.LBM                                  NEWDEMO/4LOCS.LBM                                 NEWDEMO/PLAN.LBM                                  NEWDEMO/DIAGNOSE.LBM                              NEWDEMO/ADVTECH.LBM                               NEWDEMO/NET.LBM                                   NEWDEMO/ELVIS.LBM                                 NEWDEMO/SOON.LBM                                  NEWDEMO/WILLSEE.LBM 


This list of files includes some not seen in the demo, most notably the mspr files, which in the final game are the low resolution mode graphics. This suggests that while they are not included with the demo, they were already being worked on at this point in development. Found at position 00088F8C.

data/mspr-0.dat             ŒS             data/mspr-0.tab             „S xS         data/mfra-0.ani             |S lS         data/msta-0.ani             S             data/mele-0.ani             XS LS         data/mblk-0.dat             €S             data/mblk-0.tab             tS ˆS         data/mpalette.dat           œS             data/mpointer.dat           ”S             data/mpointer.tab           ˜S S         data/mfont-0.dat            ¸G             data/mfont-0.tab            pH PH         data/mpanel-0.dat           ÈR             data/mpanel-0.tab           @S \S                                                     data/vspr-0.dat             ŒS             data/vspr-0.tab             „S xS         data/vfra-0.ani             |S lS         data/vsta-0.ani             S             data/vele-0.ani             XS LS         data/vblk-0.dat             €S             data/vblk-0.tab             tS ˆS         data/mpalette.dat           œS             data/mpointer.dat           ”S             data/mpointer.tab           ˜S S         data/vfont-0.dat            ¸G             data/vfont-0.tab            pH PH         data/font01v.dat            ¼G             data/font01v.tab            tH TH         data/vpanel-0.dat           ÈR             data/vpanel-0.tab           @S \S         data/vpspr.dat              ¼R             data/vpspr.tab              <S  S         data/border01.dat           ØR             data/border01.tab           S S         data/button01.dat           \ %             data/button01.tab           L % 8 %         data/slab01.dat             P %             data/presents.dat           hS             data/presents.tab           PS S         data/emerg.dat              DS             data/emerg.tab              4S 0S         data/sptdoc.dat             8S             data/sptdoc.tab             HS S         data/dpalette.dat           $S                                                         data/languk-0.dat           ”H ”R                                                     data/s_comp.lex             (S             data/p_comp.lex             dS             *WB_SCREEN                  ¤ %      `	     *VESA                       €P&                                                       *MAP                        TS `S  p      *ROOMS                      ,S äR        *SKILLREGISTER              ÄR ÐR è      *PAGERS                     ìR S x       *COMPUTER                   øR àR ª       *CONTROL                    ÀR üR ¬      *HOSPITAL                   ðR ÌR ì                                                  *THING

Error messages

We can find messages for different kinds of errors that would be displayed on screen. However, attempting to load one of these errors (for example, by patching a jump instruction with 00055DDB = 74) makes the game crash, without allowing the player to continue or quit.

Error display labels at file offset 00084C04.

COMPLEX FUCKED AT %d AND %d
%s(%d) : ERROR!
>%s<
Press [F10-Continue] [ESC-Quit].

Error details at file offset 000858B0.

tri_new : overflow ünavigate.c ¤default.tri rotate_edgeAC : lB not found CESrotate_edgeAC : A not found rotate_edgeAC : B not found tri_split3 : A not found /S_tri_split3 : B not found    tri_split2 : A not found ateinsert_point : triangle not found  nmake_3point : skip>4 for nonquad  fomake_edge : border point  fothin_wall : border edge edge_points : edge not found %d->%d route_to_path : loop i:%d pl:%d (%d,%d)->(%d,%d) fouExceeded max path length (i:%d,L:%d) (%d,%d)->(%d,%d) orExceeded max path length (i:%d,R:%d) (%d,%d)->(%d,%d) e Exceeded max path length - gate_route_to_coords Exceeded max path length (i:%d,rl:%d) x Exceeded max path length (i:%d,rl:%d) d)path_init8 : implement random externally    %d  CHARTS %s ü%2d * : %s  %2d   : %s ü%d Ð[%d,%d]

ERROR: Allocation %s.
Press return to continue
ERROR: File %s.

1997 Playable Demo

ThemehospitalDemo-Title.png

A single level playable demo released in early 1997, including on the cover disc of issue 50 of PC Zone magazine. This includes both Windows and DOS executables, but they behave exactly the same. The player must cure at least 20 patients in the single year the demo offers, and unlike the final game an on-screen counter records these. Gameplay seems identical to the final release, only the player is granted some more advanced rooms out of sequence. Specifically, the General Diagnosis is not available, with the Scanner given from the start instead. There is no research room in the demo, so the initial selection of rooms is all that can be played with. Oddly all doctors hireable in the demo seem to be psychiatrists.

Attempting to access any of the management sub screens shows they are identical to the final game, but are greyed out and the player is prevented from accessing them.

Unused Graphics

The demo files contain several graphics files that are cut from the final game:

PANEL03V.DAT/TAB
A pair of interface graphic files that are missing from the final game. Investigating them reveals they actually contain the graphics for the older "curved" UI seen in some pre-release screenshots. Even more interestingly, they seem to have been recycled for use in some kind of debug mode. This includes buttons for various game map options including heat map visualisations and options to buy land plots.

ThemehospitalDemo-P3Balance.png ThemehospitalDemo-P3Calendar.png ThemehospitalDemo-P3BuyPlot.png ThemehospitalDemo-P3BuyMap.png ThemehospitalDemo-P3HeatMap.png ThemehospitalDemo-P3NoiseMap.png ThemehospitalDemo-P3PlantMap.png ThemehospitalDemo-P3Ret.png ThemehospitalDemo-P3Icon.png


BUTTON01.DAT/TAB
A file containing the various interface graphics. These were moved elsewhere in the final game and are almost identical. More interesting is a leftover graphic of what appears to be a nurse's hat inside the files. It's found alongside the graphics for the various doctor specialities (surgeon, psychiatrist, etc), so possibly this would be seen as a skill for nurses at some point.

ThemehospitalDemo-B1NurseHat.png

SHOT1-4.DAT
The demo includes 4 raw image files of screenshots of the final game that oddly aren't actually used by the demo. They're not terribly interesting as they seem to show the final game's build. Shot3 is the most interesting as it shows a lone alien wandering the hospital outside of an emergency (no light over its head) and a doctor with a cut icon that appears to be checking his watch. These must be very close to the final build as the wards no longer have the fold-out screen visible anymore.

Unused Sounds

The demo uses the file SOUND\DATA\SOUND-0.DAT for sound effects and announcements as per the final game. This is largely cut down for the demo with lots of unneeded sounds removed to save space. However, the demo also oddly includes the file SOUND\SOUND.DAT. This doesn't seem to be used and contains only emergency announcements. Even stranger it seems to be in the same format used for Dungeon Keeper sound files, it's not in the Theme Hospital sound archive format.

Different Cheats

The demo still has remnants of code for cheats not found in the final game. See the main article for more details.