Bruce Morrison <firstname.lastname@example.org> of Man Up Time Studios, the people who brought you PID for OS X, has pulled out all the development comments from the PID source code and compiled them into one document. He writes:
"They are interesting, as it's pretty much all Jason Jones's thoughts on the game, and it's cute to see the references to what will become Marathon, and the MacWorld expos and what not."
Some interesting tidbits in there, including reference to Minotaur 3D and the infamous Greek Flag.
Wednesday, July 7, 1993 11:43:04 AM hacked up the old SPLASH_WINDOW.C into this. Monday, August 16, 1993 10:49:46 AM the keymap is sixteen bytes long. you probably only need to use the following bits (set them to one to simulate a key being held down). 0x37 sidestep (must be used in conjunction with a turn key) 0x38 turn head (must be used in conjunction with a turn key) 0x7e move forward 0x7d move backward 0x7b turn left 0x7c turn right 0x31 fire gun 0x30 use crystal these numbers are offsets, in bits, from the low bit of the first byte of the keymap. for example, 0x31 (fire gun) is the second bit in the sixth byte. there is currently no way to pause or slow the game, and you don't get any sound information. it's easy to get the CLUT information from the PixMapHandle, just use (*pixels)->pmTable. See Inside Mac Volume 5 for the structures (duh). Saturday, December 5, 1992 6:32:33 PM need badly to speed up vbl_clut_tinting(). Tuesday, March 9, 1993 5:32:43 PM flashes don't work if a game is closed and reopened without quitting. Saturday, April 3, 1993 8:45:48 AM phase is in increments of 8/60ths of a second. November 25: 2011: The parameter to start_earthquake should probably have a type Tuesday, January 26, 1993 11:06:45 AM mostly debugged. Sunday, July 11, 1993 10:10:56 AM stripped; no canned responses anymore (all that beautiful tab stuff nuked). Wednesday, June 2, 1993 9:34:21 AM tried for the ten-billionth time to make doors clip right when they are opening and closing. Thursday, December 17, 1992 2:23:04 PM moved out conversation dialog. Monday, March 22, 1993 4:35:43 PM real map stuff. Sunday, May 16, 1993 10:38:25 PM sleeping modifications. Tuesday, December 15, 1992 10:02:30 PM oh. we just realized that this is where we 'get to' maintain the temporary files. Friday, March 26, 1993 7:44:08 AM the temporary file scheme actually wasn't that hard or annoying. Monday, March 29, 1993 7:48:14 AM we now open players double-clicked-on by the finder. Tuesday, July 6, 1993 9:11:36 AM modifications for 6-slot saved game file, compression, etc. largely rewritten two days before MacShow. :) Monday, July 19, 1993 11:23:05 AM yea, but the resource manager sucks big green ones, so we're now doing a data fork non-redundant slot model. or something. Monday, October 11, 1993 2:08:35 PM added calls to cseries' FSFlush after all FSWrites for v1.2 Friday, July 13, 1990 10:55:54 AM preliminary version compiled. Wednesday, August 15, 1990 9:54:22 PM the maze needs to be an array of chars (1 byte), even if the shape enum is placed in a 2-byte quantity. Thursday, January 31, 1991 7:40:33 PM ok, at some point we need to change all of our [int]s to [short]s so that we fly on 68000/68020 Macintoshes. this will speed things considerably. Friday, August 9, 1991 4:51:54 PM changed array initilization in functions to code for MSC. Tuesday, June 30, 1992 9:04:33 PM from minotaur's CREATE_MAZE.C; hacked for the new grid architecture as a test for minotaur3d. Tuesday, August 25, 1992 11:11:17 AM 'and the meek shall inherit the earth...' Wednesday, September 16, 1992 5:42:39 PM all things dealing directly with the maze are now external calls. Sunday, December 13, 1992 10:10:40 PM most everything has been coded now, though the rest of the game shell must be finished before the work can be tested. Tuesday, January 5, 1993 11:09:26 AM damn near all of the click and drag stuff works now. Thursday, January 28, 1993 8:09:17 AM the entire hierarchy follows the cursor around when a drag occurs, drop works. Tuesday, April 20, 1993 3:52:08 PM the weight line was not being updated on pickups/drops. Saturday, July 17, 1993 8:24:13 AM ed got an assert in _sw_insert_or_delete_lines when he was picking stuff up, suggesting that the actual number of top-level inventory lines was not equal to the number of lines the window_utilities package thought should be there. great. Friday, July 23, 1993 1:24:46 PM dan noticed that if you drink potions, the DROP and EXAMINE buttons aren't update to show that they can't be used. fixed inconsistency with open_or_close_inventory_item. Saturday, July 24, 1993 12:18:19 PM gee, more bugs: dragging the last item in your inventory into a container fucked things hard. Monday, July 26, 1993 9:37:16 AM several more bugs of the same kind fixed; we have to wipe inventory_line_highlighted before calling set_inventory_highlight a lot because the item list has already been updated and set_inventory_highlight will try to unhighlight something which doesn't exist anymore. duh. Wednesday, July 28, 1993 10:18:04 AM remove_inventory_line() now only removes a single line, instead of calling count_inventory_lines_below() for the count. this is a good thing. Tuesday, November 10, 1992 4:22:15 PM in an abrupt departure from minotaur, an item's number is it's array index into the definition array and can be translated directly into a shape_descriptor. Friday, December 4, 1992 12:24:26 PM ya, right. so what happens when two items share a shape? that's what i thought. we had grand designs of using Rez or a ResEdit template to enter items and monsters, but it just isn't worthwhile. Wednesday, February 24, 1993 5:14:55 PM the new gun/magazine/bullet paradigm is being implelented this evening (clips are non-recyclable, bullets no longer exist). ditched grouping alltogether. Friday, October 30, 1992 12:58:48 AM Originally this was going to be an extremely complicated function which called all sorts of different OS routines to build an extremely unique cookie, but it appears that all we really need to do is called SysEnvirons and perhaps GetVol (what does GetVol return, anyway? Full pathname of working directory?). Tuesday, June 2, 1992 11:21:40 AM from hex_map.c Tuesday, August 25, 1992 10:59:55 AM modifications for arbitrary-sized squares. Wednesday, September 16, 1992 7:45:15 AM oh dear; hacked for use with 3dworld only (no handles, etc). Wednesday, November 4, 1992 1:55:56 PM hacked again, same purpose-- now MAP_UTILITIES.C Thursday, November 19, 1992 2:33:22 AM in case anyone was wondering, providing default initializiers for an incomplete structure definition will hose MPW mightily. :) Monday, May 24, 1993 7:57:53 PM removed stuff taken from GRID_MAZE.C, noticing that not a lot of these nifty calls actually get used anywhere. Thursday, June 4, 1992 12:11:37 PM sucky interface to GRID and GRAPHICS_TEST_SHELL. Tuesday, August 25, 1992 12:17:42 PM slightly less sucky (but still quite sucky), now smoothing the edges of the maze with our 1/4 length corners. this will become obsolete when the map editor is written. 'the elder race still learn and grow...' Wednesday, September 16, 1992 12:24:17 PM modifications for new square structure. Sunday, May 2, 1993 9:01:56 AM additions for 'the catacombs' walls. Friday, October 16, 1992 4:35:24 PM nearly all map data structures have been finalized. monsters remain untouched. Friday, December 3, 1993 10:31:05 PM removed item_list, exit_list. this should pretty obviously be called 'marathon.h'. Monday, December 7, 1992 2:31:51 PM paradigm changed slightly. Saturday, January 23, 1993 4:38:38 PM modifications for 45° frames, removed melee attacks. this is a test. Wednesday, January 27, 1993 9:49:00 AM modifications to prevent monsters from wedging each other in corridors. Monday, February 1, 1993 1:39:45 PM additions for projectiles (PROJECTILES.C scrapped). Saturday, February 20, 1993 10:54:55 AM animation modifications for bipeds, unique stationary animation field added. Monday, February 22, 1993 1:07:49 PM fixed several problems caused by prevasive failure to mask off the NEED_PATH flag from a monster's action field. Sunday, February 28, 1993 7:22:01 PM fragmentation attacks don't work yet. Tuesday, March 9, 1993 3:38:51 PM projectile shapes change when viewed from different angles. Saturday, April 17, 1993 10:03:08 AM monster activation improvements. Monday, April 19, 1993 8:13:43 AM projectiles get more in your face before hitting. Friday, April 23, 1993 7:10:08 PM projectiles can be guided. Wednesday, April 28, 1993 9:26:00 AM added _proximity attack for the player's knife. Monday, June 28, 1993 9:46:45 AM there's reasonably good evidence that monsters walking through walls and monsters hitting themselves were due to a monster being activated twice due to a bug in the random monster code. but we'll see ... Monday, June 28, 1993 3:44:43 PM bug fix to translate monster. Friday, July 16, 1993 7:04:35 AM tons of undocumented changes scampering to get ready for macworld. Tuesday, July 20, 1993 12:56:06 PM monsters still hit themselves; i think this happens when long-armed monsters start their throw outside their square but clip one of their own corners. projectiles now knew who threw them, and avoid that monster. Thursday, August 26, 1993 12:50:02 PM fixed NULL pointer assignment in handle_monk_square. Tuesday, June 15, 1993 11:27:44 AM this is a complete hack to handle things which circle the player like moths circling a light. Tuesday, January 19, 1993 1:19:47 PM wicked rockin bitch-fast 2D pathfinder finished. almost portable. hacks to convert diagonals into compass directions. Monday, January 25, 1993 12:57:56 PM we now handle the trival case origin==destination separately. Thursday, October 29, 1992 8:56:36 AM Controller code for the conversation dialog, the search dialog, and general alerts. November 25, 2011: Moved char temporary to MacGlue.m because it disappeared somewhere. Fixed prototype for retroactive_monster_stats Thursday, December 31, 1992 4:10:27 PM added the long awaited 'move_item_between_lists()' and coded a lot of low-level stuff. Wednesday, March 10, 1993 9:34:18 AM the item lists are checked for appropriate free space before stuff is moved into them, dropping multiple items from the same world location works, and two insidious bugs in move_item_between_lists() were fixed (new chains were not terminated, and last_item in copy_item_chain() was pointing to the last source item, not the last destination item). Saturday, June 26, 1993 7:39:27 AM modifications for the cedar box. Friday, June 26, 1992 12:15:45 PM CLUT depth-fade, robust rasterizer, cone-edge clipping (and texture corrections). Saturday, June 27, 1992 9:13:06 PM depth-first flood of rasterized view cone. Tuesday, August 25, 1992 12:22:10 PM get_cone_intersection finalized, after being wholly recalculated and rewritten three times. Tuesday, November 17, 1992 10:48:49 PM renamed RENDER.C, modifications for the final game architecture. Monday, November 23, 1992 3:37:34 PM added and debuged add_transparent_objects. Sunday, November 29, 1992 5:45:12 PM added low_resolution flag to render_object_list. Thursday, January 7, 1993 11:05:39 AM fixed clipping bug (distant objects are clipped on their largest visible side by closer objects in their centers). Thursday, February 11, 1993 1:40:33 AM final clipping bug fixed (introducted after resolving a lingering problem in the corner workaround hack caused by the order in which squares were spawned and subsequently not re-evaluated). we were rendering walls on the gridlines of squares not in the view cone. to be cleaned up when i wake up tomorrow. that took way too fucking long to find. Friday, February 12, 1993 3:43:45 PM added tinting stuff (walls are always tinted normally, so far). Tuesday, February 16, 1993 11:23:39 PM final clipping bug fixed, really. the cone region now adds the corners of the cone manually (for low-light situations, when this was most obvious). Thursday, February 25, 1993 11:00:37 AM because of the stupid way flood-cone works (adding objects which are totally invisible) we were exceeding the maximum limit of 50 objects and overwriting half our A5 world. the object list is now in the heap, and the maximum number of objects is 100. hack hack hack. removed the historical intersection_description list. Monday, March 29, 1993 8:23:18 AM as of yesterday, flood_cone() now uses the ultima-style LOS algorithm, instead of a dumb fill. hopefull this will prevent a lot of useless scene calculation. bug fixed today. Saturday, May 22, 1993 9:05:32 AM fixed another clipping bug: because walls were clipped to the screen and objects were not, it was possible for a clipped wall to straddle an object and clip the object off the screen. we now clip off-screen areas before we clip on-screen areas Tuesday, November 17, 1992 10:47:10 PM this is the old CLIP.H, now renamed RENDER.H Sunday, June 7, 1992 9:58:14 AM this is descended from minotaur's SCREEN.C, started ten days short of two years ago. Thursday, August 20, 1992 5:35:34 PM modified into SHAPES.C (long needed). Monday, August 31, 1992 11:05:44 PM modifications to parse the new shape format; the low four bits of texture numbers are windows within a given shape. Saturday, September 19, 1992 7:03:27 PM real shape descriptors, multiple shape files conditionally loaded. Thursday, November 12, 1992 10:02:27 PM ha ha ha ha. ya'll are p-a-t-h-e-t-ic, started added new shape headers. Friday, November 13, 1992 10:56:37 AM we now build better shading tables, Sunday, November 15, 1992 5:54:43 PM day of unification. Friday, February 12, 1993 12:28:38 PM quote of the day, 'what is index, and why are we adding one to it?' added build functions for all the new tinting/shading technologies. Tuesday, March 2, 1993 8:15:06 PM we now set up a pattern dither for the ceiling and floors. Friday, March 12, 1993 10:32:51 PM shapes supplied to the editor now include a number of global item shapes, and the dead shapes for a level's monsters. Wednesday, March 17, 1993 9:34:30 AM imported get_shape_pixmap from chooser_window.c, with changes. Friday, July 23, 1993 9:38:55 PM duh. we now unload old shapes before trying to load anything new. Wednesday, August 11, 1993 4:17:35 PM bug fix in get_shape_pixmap() for multiple monitors, Monday, August 30, 1993 12:14:01 PM we now lock world_color_table and animation_color_table because we don't want to catch them in the middle of being moved around by the memory manager (given that we're slamming them around at VBL time and all). Tuesday, July 17, 1990 12:26:24 AM Minotaur modifications. Tuesday, November 26, 1991 11:29:11 PM This shit needs to be totally rewritten. Tuesday, December 17, 1991 11:19:09 AM (strongly favoring tuesdays) ... we now work under single finder, hopefully, and this shit is being totally rewritten. Tuesday, November 17, 1992 3:32:11 PM changes for Pathways into Darkness. this shell will compile into editor_shell.c.o and game.c.o based on whether GAME or EDITOR is defined in the preprocessor. Saturday, December 12, 1992 9:41:53 AM we now pass through some command keys, when not handled by the menus. Friday, April 23, 1993 7:44:35 AM added ai timing voodoo for mouse-in-world and closing immediately after an explicit save. Wednesday, June 2, 1993 9:17:08 AM lots of changes for new first-event dialogs. happy birthday, yesterday. talked to mara for half an hour in front of brek. Friday, July 30, 1993 6:49:48 PM the day before the big build; final modifications to copy-protection stuff. Saturday, January 2, 1993 10:22:46 PM thank god c doesn't choke on incomplete structure references. Friday, March 26, 1993 10:16:01 AM this is the source file that will make minotaur's sound manager look like a truckload of dead rats in a tampon factory. Saturday, March 27, 1993 8:13:44 PM a few things have been changed, i think most of the coding is done. Tuesday, April 6, 1993 9:26:54 PM is there any way to use SyncCmd's to better synchronize the left and right channels of stereo sound? why do all sounds end in a click when the sound manager is doing realtime sound mixing? Tuesday, May 18, 1993 9:35:21 PM ha ha ha. after wwdc93, hacking out jim reekes' new stereo amplitude command, rewriting all of this crap so it'll actually work like you might expect. fixed a bug where the sample rate wasn't restored after drinking the potion. we used to have tons of problems in our amplitude calculations (that was why it didn't initially work under the new sound driver). Sunday, July 4, 1993 7:56:21 AM there exists a bug such that for every channel (especially the monster channel) there is a possibility that the channel will stop playing sounds but report no errors. Friday, July 16, 1993 6:04:11 PM the last_played field of a sound definition was not being set by play_sound, so the sound which was first loaded will be disposed of first. would that manifest in the 'pause bug'? alex has a version of Suitcase which was marking all the sounds I loaded as purgable. Friday, July 23, 1993 9:43:39 PM the pause bug was SCSI Probe's COMMAND-SPACE hotkey. reduced sound space to 250k. i can't wait to rewrite this and make it real. Monday, December 7, 1992 9:14:54 PM first actual code written. Sunday, February 28, 1993 9:17:35 PM mysterious historical update code removed from update_player_skill. arg. what a meatball, that was the code that ensured that the gray/white staggering was maintained (by redrawing everything after the given skill). Wednesday, January 27, 1993 5:22:27 PM corners are impassable to the player on 45° lines now. Saturday, April 17, 1993 11:11:03 AM added random monster checks, every time the player switches squares (something like this will be called during speeping, too). Saturday, May 8, 1993 7:37:44 AM modifications for crystals. wwdc1993 in two days. Friday, June 25, 1993 11:31:29 AM ow. add_random_monster() was _activating the last monster in the monster list without checking to make sure new_monster was successful; in the perverse case this caused two (or more) entries in the active_monster list to point to the same monster slot. Thursday, June 25, 1992 11:31:44 PM shading by depth. Tuesday, June 30, 1992 1:29:18 PM assembly optimizations for trapezoid. Thursday, July 2, 1992 12:50:11 PM transparent mapper now does shading by depth in assembly. Monday, August 17, 1992 5:36:15 PM finally began to fix the 'slowing wall' problem: the x-axis of the texture was being mapped linearly to the trapezoid, this was wrong. enter 64 bit operations ... Monday, November 30, 1992 10:30:50 AM modifications for double-mapping. Thursday, December 3, 1992 12:29:13 PM modifications for blending: map_transparent_texture is becoming a bottleneck for all types of transparent mapping. Tuesday, February 23, 1993 4:16:48 PM we now support shapes up to 1k pixels wide. shapes wider than this are not drawn. in the final game (when the player can't run through anything) this shouldn't be a problem. Wednesday, March 3, 1993 3:04:02 PM changed five lines to support mirrored shapes. Wednesday, June 3, 1992 10:16:36 AM unlike minotaur, this texture-mapping code will have to be rewritten in 68000 eventually. Friday, November 13, 1992 10:54:22 AM yea, minotaur had tons of texture-mapping code. Sunday, February 21, 1993 12:16:15 PM tons. Tuesday, November 17, 1992 3:53:29 PM the new task of the vbl controller is only to move the player. this is necessary for good control of the game. everything else (doors, monsters, projectiles, etc) will be moved immediately before the next frame is drawn, based on delta-time values. collisions (including the player with walls) will also be handled at this time. Thursday, November 19, 1992 1:27:23 AM the enumeration 'turning_head' had to be changed to '_turn_not_rotate' to make this file compile. go figure. Wednesday, December 2, 1992 2:31:05 PM the world doesn't change while the mouse button is pressed. Friday, January 15, 1993 11:19:11 AM the world doesn't change after 14 ticks have passed without a screen refresh. Friday, January 22, 1993 3:06:32 PM world_ticks was never being initialized to zero. hmmm. Saturday, March 6, 1993 12:23:48 PM at exit, we remove our vbl task. Sunday, May 16, 1993 4:07:47 PM finally recoding everything Monday, August 16, 1993 10:22:17 AM #ifdef CHARLES added. Saturday, February 27, 1993 3:20:16 PM weapons shoot correctly now. Friday, May 7, 1993 8:48:06 AM added handedness, crystal support. Saturday, October 2, 1993 7:40:17 PM magazines are now removed immediately; is this a problem? Wednesday, November 11, 1992 4:16:19 PM added _draw_gray_frame() to our standard filter procedure Thursday, November 12, 1992 3:26:32 PM moved get_system_window_colors and our new dialog filter functions to cseries.lib, where they can be used and enjoyed by all. i don't think these stupid buttons have much of a future here. Saturday, December 12, 1992 4:34:21 PM coded _sw_scroll_lines, _sw_move_lines, _sw_insert_lines and _sw_delete_lines. made _track_data_click global, named it _sw_where_is_point and gave it a slop argument. Friday, January 1, 1993 10:45:51 AM successfully compiled. Thursday, February 25, 1993 12:30:40 PM fixed cosmetic bug in _sw_add_or_delete_lines() which didn't update the window correctly if the scrollbar changed (_sw_set_data_bounds became _set_data_bounds and does scrolling now). Saturday, July 10, 1993 10:37:53 PM plugged gaping memory hole caused by _sw_set_data_clip's 7 callers never disposing of the new clip region (ow), in STATUS_WINDOW.C and INVENTORY_WINDOW.C and fixed _sw_draw_data_region which did the management itself, but had the same problem. Thursday, November 12, 1992 4:26:40 PM coded something. this is shared code between the editor and the game, crawling with #ifdef's. Tuesday, November 17, 1992 11:50:36 AM updates. remember our parse_device/find_device bombed dan's quadra 700. Wednesday, July 28, 1993 11:25:36 AM 'recalculate' was not being initialized to FALSE in build_window_frame. Tuesday, November 3, 1992 1:32:08 PM WINDOW_MENU.C has been collapsed into the main window handler, WINDOWS.C and WORLD_WINDOW.C was brought over from the editor. who owns the WORLD_WINDOW code, anyway? Wednesday, August 19, 1992 10:01:24 PM done; praise the greek flag. :) Sunday, September 20, 1992 7:16:27 PM we don't have to call SetPalette and ActivatePalette every time the color environment changes, we just have to be ready to remap our shapes if our colors have moved. this was redundant, and probably dangerous (our colors will be *somewhere* in the palette, if at all possible). Tuesday, March 16, 1993 12:11:02 PM fixed long-standing confusion between low/high cut wall shapes in click_in_editor_world_window. Friday, March 19, 1993 3:17:24 PM added fake_world_window_status() Saturday, March 20, 1993 12:30:02 PM we're conditionally compiled now. Tuesday, April 6, 1993 10:28:11 PM added zooming feature. Monday, August 16, 1993 10:24:52 AM fixed drag/zoom bugs for multiple monitors. Wednesday, November 3, 1993 1:35:53 PM Friday, January 15, 1993 9:59:14 AM added arctangent function. Thursday, January 21, 1993 9:46:24 PM fixed arctangent function. normalize_angle() could stand to be improved. Saturday, January 23, 1993 9:46:34 PM fixed arctangent, hopefully for the last time. normalize_angle() is a little faster. Monday, January 25, 1993 3:01:47 PM arctangent works (tested at 0.5° increments against SANE's tan), the only anomoly was apparently arctan(0)==180°. Wednesday, January 27, 1993 3:49:04 PM final fix to arctangent, we swear. recall lim(arctan(x)) as x approaches π/2 or 3π/4 is ±∞, depending on which side we come from. because we didn't realize this, arctan failed in the case where x was very close to but slightly below π/2. i think we've seen the last monster suddenly panic and bolt directly into a wall. Sunday, July 25, 1993 11:51:42 PM the arctan of 0/0 is now (arbitrairly) π/2 because we're sick of assert(y) failing. Friday, June 26, 1992 10:47:47 AM to maintain precision, world coordinates must be in the range [0,32).