Chill Manor - Development Spreadsheet
Located on the root directory of Chill Manor's disc is a file called STRETCH.DIF that dates to February 22nd, 1996. Its contents indicate that it was a logging file generated when an earlier version of the game's executable (CHILL.EXE, dated July 17th, 1996) was being built, but was never deleted for whatever reason. STRETCH.DIF contains the paths of various files from the source code as well as almost every coding function involved in creating the game's executable.
The file's contents are way too long to post in its entirety here, even if it was reduced to only its functions like what I did with TFoE and TWoG. So, I've decided to split the most interesting aspects of the spreadsheet into three sections:
Spreadsheet Layout -- Source Code Layout Reconstruction -- Other Discoveries
Spreadsheet Layout
STRETCH.DIF contains five columns in total, each covering a different aspect of the compiling process. Using some guesswork, I've tried to decipher what the purpose of each column is:
- A: Image. The path of the file that is being built. In every single row, this column reads
C:\CHILL\BIN\chill.exe
. - B: Module. The name of the source code module associated with the current row.
- C: File. The path of the module named in column B. Some rows read
***Unknown_File
instead, and this can include entire modules. Typically, though, the more important files have proper paths at the end of their function groups. - D: Routine. The name of the function being called/referenced/used/whatever the proper terminology is.
- E: Count. A decimal value that counts... something. Function repeats, maybe? It's almost always zero, but has a few outliers that range from 1 to 379.
The name of the worksheet itself is "WProf". This is the command used for the Execution Profiler that comes with Watcom C/C++.
Source Code Layout Reconstruction
Using the abundance of file paths in STRETCH.DIF, the layout of Chill Manor's source code can be reconstructed to an extent. This does NOT mean that every file is listed here, or that it reflects what the source code looked like when the final executable was built. The layout is as so:
- C:\CHILL\SRC\
- eng\
- a_anim.cpp
- a_chrque.c
- a_coord.cpp
- a_crdort.cpp
- a_decl1.cpp
- a_main.cpp
- a_map.cpp
- a_moucsr.cpp
- a_mouse.cpp
- a_optio.cpp
- a_ortex.cpp
- a_pcx.cpp
- a_save.cpp
- a_tools.cpp
- a_vb_hrd.cpp
- a_vgetc.cpp
- a_vio.cpp
- a_vr.cpp
- a_wc_vio.asm
- a_weapon.cpp
- blitbuf.asm
- blitscr.asm
- d_anim.h
- d_anim.hpp
- d_extdefs.h
- d_init.h
- d_list.hpp
- mc_tools.hpp
- s_interf.hpp
- inc\
- h\
- mc_aplay.hpp
- mc_cmp.hpp
- mc_image.hpp
- mc_key.hpp
- a_image.h
- a_rs.h
- MCLIBSCR\
- mc_anim.cpp
- mc_anim.hpp
- mc_aplay.cpp
- mc_cmp.cpp
- mc_cmp.hpp
- mc_file.cpp
- mc_file.hpp
- mc_font.cpp
- mc_image.cpp
- mc_image.hpp
- mc_key.cpp
- mc_key.hpp
- mc_mouse.cpp
- mc_mouse.hpp
- mc_pal.cpp
- mc_pal.hpp
- mc_queue.hpp
- mc_rgb.hpp
- mc_strm.cpp
- mc_vfram.cpp
- part2\
- a_h1.asm
- d_2near.cpp
- d_2near.hpp
- d_actor.cpp
- d_anim.cpp
- d_flats.cpp
- d_flats.hpp
- d_grenad.cpp
- d_grenade.hpp
- d_height.cpp
- d_height.hpp
- d_init.cpp
- d_joined.cpp
- d_key.cpp
- d_key.hpp
- d_load.cpp
- d_m2near.cpp
- d_m2near.hpp
- d_main.cpp
- d_manim.hpp
- d_mactor.cpp
- d_mem.cpp
- d_myfoun.cpp
- d_object.cpp
- d_object.hpp
- d_objects.hpp
- d_player.cpp
- d_player.hpp
- d_save.cpp
- d_search.cpp
- d_spells.cpp
- d_test.cpp
- d_test1.cpp
- d_test1.hpp
- d_wcanim.cpp
- d_wcanim.hpp
- draw_sky.asm
- ds_mummy.cpp
- ds_mummy.hpp
- ds_nymho.cpp
- ds_nymho.hpp
- fastline.c
- fill_scr.asm
- m_c_cpp.cpp
- m_timer.c
- mc_cvars.c
- mc_faces.cpp
- mc_fc.cpp
- mc_input.cpp
- mc_optio.cpp
- mc_sound.cpp
- mc_start.cpp
- mc_tools.cpp
- profile.cpp
- profile.hpp
- put_win.asm
- screen.asm
- shakescr.asm
- stretch.asm
- vr_anim.cpp
- vr_floor.cpp
- vr_getnu.cpp
- vr_input.cpp
- vr_main.cpp
- vr_pcx.cpp
- vr_puz_s.cpp
- vr_puz_w.cpp
- vr_raytr.cpp
- vr_rnd_2.cpp
- vr_rnd_3.cpp
- vr_rnd_4.cpp
- vr_sprit.cpp
- vr_view.cpp
- SNDLIB\
- a_res.cpp
- s_base.cpp
- s_base.hpp
- s_driver.cpp
- s_interf.cpp
- s_midi.cpp
- s_midi.hpp
- s_middrv.cpp
- s_middrv.hpp
- s_reader.cpp
- s_snddrv.cpp
- s_snddrv.hpp
- s_voice.cpp
- s_voice.hpp
- aila.asm
- ailssa.asm
- mc_spr.asm
- mc_tfrm.asm
- C:\MICHAEL\AIL\
- ailxmidi.c
- C:\WC\H\
- iomanip.h
- iostream.h
Now you can pretend to be a programmer working for Capitol Multimedia! A couple of relevant notes:
- The data in STRETCH.DIF confirms that Chill Manor (as well as I. M. Meen by proxy) were coded using a mixture of Watcom C/C++ and ASM. This tracks, given that Pyramid Adventures has leftover text suggesting that it was (at least partially) programmed using C.
- The placement of a couple of functions (Rows 3388/7936 in the following section) suggest that the eng/ folder consists of code originating from I. M. Meen, and that part2/ consists of Chill Manor's new code.
- The "Michael" namedropped in one of the folders is most likely Mikhail Tchekmarev, one of the game's software engineers.
Other Discoveries
Rows 701 and 702 refer to functions named load_CDI_palette
and save_CDI_palette
. These appear to be the only (confirmed) pieces of code that survived Animation Magic's CD-i development days, and it appears that they were superseded by load_MS_palette
and save_MS_palette
.
Rows 3388 and 7936 concerns functions named PlayGnorrisAnimation
and Reset_Explode_O_Fruit
, respectively, and are exclusive to files residing in the eng/ folder. However, I can't think of a single instance where Chill Manor plays a cutscene in the middle of playing a level like what Gnorris does, apart from the game over cutscene. Maybe this feature was scrapped?
Rows 8071 and 8072 mention functions called SaveIgor
and RestoreIgor
. Rather strange naming choices for save-related functions, don't you think?
There are a few oddly-worded functions related to weapons; these include Bullet
, ShortGun
, Grenade
, Dagger
, and Spell_Azatoth
. These appear to correspond with the various weapon types used within the Action Learning titles, but they feel like something meant for a more "mature" game, especially that Lovecraft deity reference. Incidentally, the TEST.SCN file believed to be involved with John Dark: Psychic Eye lists a character named "derlet". This appears to be short for "Derleth"... August Derleth was Lovecraft's literary executor and a contributor to the Cthulhu Mythos. Could it be...?
On a related note, there are a couple of functions near the end of the list that reference enemies named Nymhotek
and Shredax
. These could belong to either Chill Manor or John Dark: Psychic Eye, to be honest...
Return to top
Last updated: December 8th, 2024.