
             S C I    C H A N G E S   &   U P D A T E S
             ------------------------------------------
                   in reverse chronological order
                   ------------------------------

The following is a list of changes made to system modules since 2/2/92,
the date of the documentation given to Larry Scott by Brian K. Hughes.


8/23/93 Brian K. Hughes

	KERNEL.SH

	Added the fileCopy subfunction to the FileIO call.


8/16/93 Brian K. Hughes

	LOGGER.SC

	Added the Reproducible field for SFTracs and eliminated far text.


6/18/93 Brian K. Hughes

	MESSAGER.SC

	Cleared the oneOnly, killed, and caller properties in the sayFormat
	method.  Failure to do this resulted in the caller not being cleared
	when a new Cue was made, hence all Cues created by the Messager from
	the sayFormat method had the same caller as the last one Created by
	the say method.


6/9/93 Brian K. Hughes

	KERNEL.SH

	Added the RemapToGray and RemapToPctGray functions to the ColorRemap
	call.


6/1/93 Brian K. Hughes

	LOGGER.SC

	Adjusted the output of some of the fields so that the SFTracs program
	will recognize them.  Also added a Reproducible field for SFTracs.


5/13/93 Brian K. Hughes

	KERNEL.SH
	
	Added Martin's ColorRemap calls.


3/2/93 Brian K. Hughes

	KERNEL.SH

	Added subfunction entries for (DoAudio Queue) and (DoSync QueueSync).


2/26/93 Mark Wilden

	FILE.SC
	KERNEL.SH

	A rename method was added to class File to allow renaming of files.  A
	new kernel entry for (FileIO fileRename) was also added.


*2/19/93 Brian K. Hughes

	USER.SC

	If the event is claimed after going to the iconbar, we return out of User
	doit: with a TRUE value.


	EGO.SC

	We no longer look at events in the handleEvent method if the user cannot
	control.  Ego's script will still get events first, however.


	CONV.SC

	In the MessageObj's showSelf method, the talker (whoSays) is first checked
	for a value of -1, indicating a "comment" talker.  In this case, the caller
	is cued immediately and no other action is taken.

	Also, if the message is not found we no longer exit the game.


	INSET.SC

	Added explicit return values to the handleEvent method, since the calling
	object is expecing them (q.v. 1/11/93, GAME.SC).


	SAVE.SC

	When changing the directory, the size of the input field adjusts to the
	size of the current directory plus enough space for "\MMMMMMMM".  This
	both A) fixes a bug where the directory name was too long and the extra text
	trashed memory, and B) allows the user to change the directory down to
	further levels.

	Also, all usages of Print are now clones, which avoids changing Print's
	default font that the game may have set.


	TALKER.SC

	The position of the text for viewInPrint talkers was adjusted by the width
	of the icon to prevent the text from showing over the icon.


	SYSTEM.SC

	The dispose method of class Script now resets the seconds, cycles, and ticks
	properties to 0.


1/27/93 Brian K. Hughes

	SOUND.SC

	The mute method of Sound was using mMUTE as the command to MidiSend, whereas
	the command is actually mCONTROLLER with a parameter of mMUTE.


1/22/93 Brian K. Hughes

	SYSTEM.SH

	Added define for module QSOUND back.  It was removed because it was thought
	to be obsolete.  Since then a genuine need has arisen for it.


	INVENT.SC

	The default value for the modNum property of InvItem has been changed from
	0 to -1.  This makes InvItems more consistent with Feature and makes it
	possible to use module 0 for the messages.  The module will be changed to
	the current room if the value is -1.


	SOUND.SC

	The play method used to call the init method unconditionally, which added
	the sound to the sounds list and inited the C sound object.  Due to time
	issues, the init is now called only if the sound is not already on the
	sounds list.


1/22/93 Brian K. Hughes [Tester]

	TESTMENU.SC

	Setting an actor's step size now calls his setStep method instead of just
	setting the individual properties.  This eliminates the bug wherein pressing
	escape would set the step size to -1, because the setStep method treats a -1
	as a "no op".


1/22/93 Brian K. Hughes

	LOGGER.SC
	SYSTEM.SH
	TALKER.SC

	Removed the cdAudio global.  Instead, the expression (& msgType CD_MSG)
	is used.


	TALKER.SC

	The gameTime is reset in the Narrator's init to compensate for times when
	disk access eats some of the talker's ticks, making it dispose too soon.
	
	[Robert W. Lindsley]
	The wait cursor is displayed if the user does not have a mouse
	or if the message is a non-modeless CD message.  The game's volume is also
	saved and lowered during CD messages.


	KERNEL.SH

	Kernel entry #135 was added for SetQuitStr.  This call takes a near string
	as its only parameter, and displays this string on the screen when the
	interpreter exits.


1/20/93 Brian K. Hughes

	INVENT.SC

	Claimed the event if the OK button was selected.


1/11/93 Brian K. Hughes

	GAME.SC

	Messager's sayNext method return 0 in the accumulator if the message was
	not CD_MSG.  This caused Region's doVerb to return 0, which left the event
	unclaimed, which caused a fall-through default message to be displayed
	immediately after a room's message.  Region's doVerb now returns an explicit
	value instead of relying on Messager's return value.


1/8/93 Brian K. Hughes

	INTRFACE.SC

	Code in Dialog's handleEvent method to convert direction events (as would
	be produced by the joystick) to keyDown/Arrow events had been erroneously
	removed.  Joysticks in dialogs work correctly now.


1/7/93 Robert W. Lindsley

	SCALETO.SC

	Changed the ScaleTo class to be real-time.


12/30/92 Brian K. Hughes

	MESSAGER.SC
	TALKER.SC

	Messager and Narrator classes are now fully audio-compatable.  Messager
	makes use of the new (Message MsgKey) kernel call, which retrieves the
	current message pointers from the kernel and stores them into an array,
	which Messager allocates off heap.  The array is then passed to Narrator's
	startAudio method, via the say method.  This gives the audial talkers the
	information they need for mouth syncs and such, without requiring special
	calls for audio messages.  The message file is used as an index for audio,
	in that only after the message has been found does the code ask for the
	current pointers.

	Narrator's startAudio method now accepts as its only parameter the address
	of the message key array (still allocated off heap).


	KERNEL.SH

	Added an entry for the (Message MsgKey) call.


12/18/92 Brian K. Hughes

	USER.SC

	If sortedFeatures was FALSE, the event never got sent to addToPics.


	EGO.SC

	The approachObj bit in ego's state property is now set TRUE in his init.
	This way, ego will always try to approach objects by default.


12/8/92 Brian K. Hughes

	USER.SC

	The (User input?) was deleted from the list of conditions by which pMouse
	would get an event.  This means that the cursor may be moved with the
	arrow keys during handsOff.  This was important for being able to use the
	interactive text.


	PMOUSE.SC

	The check for the existence of an iconbar and whether the curIcon was the
	walk icon was removed from PseudoMouse's handleEvent.  If the event was
	a walk, User handles it appropriately before pMouse ever gets a shot.  In
	addition, this bug would not allow the cursor to be moved using the arrow
	keys if it was the walk cursor (see above change to USER.SC).


	FEATURE.SC

	Added an setOnMeCheck method that will set the onMeCheck property correctly,
	according to identifying type.  The syntax is:

			(obj setOnMeCheck: type args)

	where 'type' is one of ftrDefault (onMe if in nsRect), ftrPolygon (onMe if
	in polygon), or ftrControl (onMe if on control color).  'args' will be the
	object ID of a polygon for ftrPolygon type, and multiple control color
	defines for ftrControl type.  ftrDefault type takes no other arguments.

	In addition to setting the onMeCheck property, setOnMeCheck also manages
	the onMeIsControl bit in the state property.  This bit eliminates the bug
	caused when a bit map of controls is the same as the address of an object
	or $6789 (ftrDefault).

	The onMe method was rearranged slightly to better evaluate the three types
	of checks, and the onMeIsControl bit was checked for ftrControl type.

	Also, a new state bit, approachObj, is checked to see if ego should approach
	objects.  If the bit is not set, ego will not approach, regardless of the
	objects' approachVerbs.


	SYSTEM.SH

	Added defines for ftrPolygon and ftrControl, and state bit defines for
	onMeIsControl and approachObj.


12/7/92 Brian K. Hughes

	ACTOR.SC

	The ignoreBlocks method attempted to delete items from the blocks list
	without first checking to ensure that the blocks global points to an
	object.  Hence, invoking ignoreBlocks without having invoked observeBlocks
	would result in a PMachine NAO $0.


	GAME.SC

	The call to GetCWD in Game's play method has been removed.  The interpreter
	now fills in the curSaveDir buffer with the default directory, which may
	not necessary be the current working directory.


12/1/92 Brian K. Hughes

	INTRFACE.SC

	Removed MapKeyToDir in DText handleEvent (not needed).  Also, made event
	global instead of local to check the rectangles.


	PRINT.SC

	Clones of Print are now stored in temps so that the &rest won't screw up
	the stack.


11/10/92 Brian K. Hughes

	INTRFACE.SC

	Called super's handleEvent from DText handleEvent to insure that the return
	value gets set just as it would if DText had no handleEvent.  Also reset
	the event type to nullEvt and claimed to FALSE so that the dialog will not
	go away if the event is within a rectangle.


	PRINT.SC

	All procedures (Prints, Printf, GetInput) now clone Print instead of using
	the class.


11/6/92 Brian K. Hughes, Robert W. Lindsley, Mark Wilden

	GAME.SC

	Class Game's doit: method now disposes of a modelessDialog if it runs
	out of time.  This allows modelessDialogs to time out the same way modal
	dialogs do.

	Class Game's replay: method now sets the wait cursor only if user can't
	input AND user can't control.


	INTRFACE.SC

	Added support for interactive text in DText class.  This required adding a
	handleEvent method that checks to see if the event is within any rectangles
	created in the text.  If so, the doit method of a global piece of code
	(pointed to by the textCode global) is called and passed the rectangle
	number (0 relative).  If there is no code, DText will ignore the rectangles.


	SYSTEM.SH

	Added the textCode global, which points to a piece of code to handle
	interactive text response.


11/5/92 Brian K. Hughes

	FLAGS.SC

	A bug in the way in which the array was being accessed in the setSize
	method was fixed.


	GROOPER.SC

	If the client's loop was fixed, the doit: method of GradualLooper was
	bailing out before it's caller was set, preventing the caller from being
	cued.


11/2/92 Mark Wilden

	FILE.SC

	The writeString method now returns TRUE if no error condition exists,
	and FALSE if an error occured during file (or printer) access.


10/29/92 Brian K. Hughes

	INVENT.SC

	A bug was fixed whereby the select: method of the Inventory's okButton
	was getting called twice.  This meant that the user had to click twice
	on the button to get out of inventory.


10/28/92 Brian K. Hughes (from Bob Fischbach)

	GAME.SC

	Added passing &rest to handsOffCode and handsOnCode.


10/27/92 Robert W. Lindsley

	ICONBAR.SC

	If the user does not have a mouse, the cursor is changed to the INVIS_CURSOR
	when displaying a help message.  The cursor is returned to normal upon 
	dispose of the message.

	No-click help is unaffected.


10/26/92 Brian K. Hughes (from Cynthia Hardin)

	ACTOR.SC

	A small fix was made to the inRect: method that made the bottom and right
	of the rectangle inclusive.  If the point in question is on the bottom or
	right edge, it will now return TRUE (in the rectangle).


	MESSAGER.SC

	The talkerList property was removed, and instead of creating a dynamic
	Set to hold the talkers' ID's an instance of Set is now used.  This allows
	us to override the Set's dispose method to pass along Messager's dispose-
	WhenDone property.

	If the Messager's disposeWhenDone is TRUE, the talkers will be "put to bed"
	after a sequence of messages is complete.  If FALSE, they will stay on the
	screen.  This can be useful when a sequence must be performed manually via
	a script, but you do not want the talkers to go away (flash) between
	messages.


10/26/92 Brian K. Hughes

	TUTORIAL.SC
	ICONBAR.SC
	INVENT.SC
	SYSTEM.SH

	Added Tutorial class.  Tutorial is a kind of Script that is meant to
	be put on the game.  It allows the programmer to specify icon items that
	the user is required to select for the script to continue.  There are three
	methods that the programmer will use:
	
			changeState:	used as in a normal script
			waitFor:			used to specify which icon item is the 'trigger'
			report:			used to display messages in the 'wrong' case

	As long as the user does the actions specified by the Tutorial, the Tutorial
	will cue right along, just as a normal script would.  If the user makes a
	wrong choice, the Tutorial can be made to display negative reinforcement
	messages.  The main advantage of the Tutorial class is that it uses the
	existing IconBar and Inventory.

	Here is a sample Tutorial:

		(instance rm100Help of Tutorial
			(method (report objOrVerb)
				(++ numTries)		<- a property!
				(switchto state
					(
						(switch numTries
							(1		(messager say: HELP NULL NOT_WALK 1)
							(2		(messager say: HELP NULL NOT_WALK 2)
							(else	(messager say: HELP NULL NOT_WALK 3)
						)
					)
					(
						; We will get handed either the incorrect object or
						;	the incorrect verb

						(if (IsObject objOrVerb)
							(switch numTries
								(1		(messager say: HELP NULL NOT_EGO 1)
								(2		(messager say: HELP NULL NOT_EGO 2)
								(else (messager say: HELP NULL NOT_EGO 3)
							)
						else
							(switch numTries
								(1		(messager say: HELP NULL NOT_DO 1)
								(2		(messager say: HELP NULL NOT_DO 2)
								(else (messager say: HELP NULL NOT_DO 3)
							)
						)
					)
				)
			)
			(method (changeState newState &tmp [str 50])
				(switchto (= state newState)
					(
						(self waitFor:
							(theIconBar at: walkIcon) NULL {Click on the walk icon}
						)
					)
					(
						(Message MsgGet HELP NULL PROMPT 1 @str)
						(self waitFor: ego DO @str)
					)
				)
			)
		)



10/23/92 Brian K. Hughes

	INTRFACE.SC

	Code was added both in Dialog and DItem to make the highlighting feature
	follow the mouse.  This prevents the problem caused when a user moves
	the highlight to a control using the keys, them moves the mouse over a
	second control and presses ENTER.  Under the old system, the first
	control would be selected, but now the highlight will follow the mouse
	to the second control and it will be selected by pressing ENTER.


	RANGEOSC.SC

	RangeOsc class.  Syntax is:

		(prop setCycle: RangeOsc howMany firstCel lastCel caller)

	Additional information is listed at the top of the file.


	GAME.SC

	Added handsOffCode and handsOnCode properties and handsOff and handsOn
	methods to class Game.  The methods simply alter user control and, in
	the case of handsOff, kill ego's mover.  The methods are setup to check
	the properties first and, if the property holds an address to an object,
	call that object's doit: method instead of the default functionality.
	For example, a specific room might require that some icons be disabled
	on handsOff.  An instance of code in that room could be attached to the
	Game's handsOffCode property, and that code will get it's doit: called
	instead of the default handsOff method's code.


10/20/92 Brian K. Hughes

	REGPATH.SC

	For whatever reason, this file was not included in the system when it
	was upgraded in February '92.  In addition to the original RegionPath
	class, the ability to reverse the motion through the points was added
	by Randy MacNeill.


10/16/92 Brian K. Hughes

	FEATURE.SC
	WRITEFTR.SC
	SYSTEM.SH

	A new method, setName, and a new property, state, was added to Feature
	class.  The setName method can be used to change the name of the feature,
	dynamically allocating space for it off the heap.  A new bit, dynamicName,
	is set in the state property to indicate dynamic name allocation.  The
	dispose method checks this bit to determine if the name needs to be de-
	allocated.

	The Feature Writer takes advantage of this new naming ability to allow
	users to create features, attach message parameters to them, and have
	them remain active in the game after the Feature Writer has been disposed.


10/14/92 Brian K. Hughes

	ICONBAR.SC

	The hide method now checks to ensure that the helpIconItem is an
	object before trying to turn off its translator bit.  This prevents
	PMachine NAO's in games that do not have help icons in their iconbars.


10/7/92 Brian K. Hughes

	GAME.SC

	The conditional compile directives were changed to follow the new
	format (i.e. #ifdef instead of IF).


	SYNC.SC

	The random loop in MouthSync's doit: method to cover for a sync cel
	that was invalid has been removed.  We can assume that the sync will
	give MouthSync a valid cel number, so there is no need to check for
	range violation and generate a random number, which process involved
	several additional messages and a kernel call.


10/6/92 Brian K. Hughes

	KERNEL.SH

	Entries were added for two new kernel calls, ShowMovie (#133) and
	SetVideoMode (#134).

	
	INVENT.SC

	The ESC key now produces the same result as clicking the mouse on
	the OK button.


9/23/92 Brian K. Hughes

	ICONBAR.SC

	The iconbar did not transfer the message property of the curIcon (or
	curInvIcon) to the event properly if the event was a keyDown/ENTER.


	GAME.SC

	Changed references to the Sounds list (from change of 9/16/92) to refer
	to the sounds global instead.


	ACTOR.SC

	In addition to checking the noStepScale bit in the scaleSignal, Actor's doit
	now also checks to see that the actor is scaling before trying to adjust its
	stepSize.

	
	TALKER.SC

	Added full audio support for talkers.
	
	Also added the ability to control the length of time a talker talks by
	modifying the value of the textSpeed global.  This global can be linked to
	a slider to let the user control the talker time.


	MESSAGER.SC

	The oneOnly property now gets set to TRUE in the sayFormat method, which
	will prevent the messager from calling the sayNext method after the message
	is done.


	FLAGS.SC

	The array property is checked in the init method now, and if it is non-zero
	the flags will not reallocate new space.  Similarly, the array property is
	reset to 0 in the dispose method.


	INVENT.SC

	The nsTop property of IconItem, which defaults to -1, is now set to 0 in the
	drawInvWindow method of Inventory, just prior to determining its final
	position.  This prevents the top row of pixels in the IconItem's cel from
	being overwritten by the window itself.


9/16/92 Brian K. Hughes

	GAME.SC

	The Sounds list was misspelled several places, leading to confusion
	between it and the Sound class.


9/10/92 Brian K. Hughes

	GAME.SC

	Game's doit: method now exits early if a fastCast exists after the call
	to Animate.  This would indicate that a talker has been initiated from
	someone's doit, and that next cycle the game will lock itself into the
	fastCast processing loop.  Exiting the doit method early prevents the
	user from getting a doit, which can lead to unexpected results if there
	is an event waiting in the queue.


	MESSAGER.SC

	The Messager now passes messager parameters to Talker, which will use them
	ONLY if the message has an audio component.  This allows the talker to pass
	the parameters along to the DoAudio call.  For non-audio talkers, the extra
	parameters are ignored.

	Note: This does not enable you to use the talker independent of Messager.


	PRINT.SC

	Print's font now defaults to the userFont for each item that uses a font.
	This prevents having to specify (Print font: userFont) in the game's init
	method.

	Also removed some debug code from addTitle.


	SYSTEM.SH

	A complete list of resource type defines was added, using a new naming
	convention.  Resource type defines will now be prefixed with 'RES_' to
	differentiate them from other defines.  The original list has been left
	in for backward compatability, but will be removed shortly.


	SYNC.SC

	Various small changes, mostly by Dan Carver.
	Largest change (and most significant) is that the syncs are now identified
	by standard message parameters instead of message number.


9/2/92 Brian K. Hughes

	ACTOR.SC

	Modified all the code that sets the scaleSignal to make sure it ORs the
	appropriate information into the existing scaleSignal, instead of just
	assigning the property to the new value.  This insures that any other bits
	set in the scaleSignal (like noStepScale) will be preserved.


	GAME.SC

	The doit method of game is now exited if there is a fastCast after the call
	to Animate.
	
	This fixes a very obscure bug, in which a call to Messager say:
	originated from the doit of a cast member.  After the call to Animate, there
	will be a fastCast (because the talker created it), yet the game's doit: is
	still not done with the current cycle.  At the end of the cycle the doit
	method of User is called, which polls for a new event.  If there is an event
	waiting, new processes with new messages may be spawned even though there is
	a fastCast waiting.

	This fix is obsolete as soon as the new versions of Talker and Messager (no
	fastCast!) are checked in.


8/31/92 Brian K. Hughes

	ACTOR.SC

	Moved the (avoider doit:) code outside the cond in which the (mover doit:)
	code resides in Actor.  The actor's avoider now gets a shot regardless of
	whether or not the actor has a mover.

	A new scaleSignal bit, noStepScale, was added.  If this bit is on, the actor
	will not recalculate its stepSize each doit.


	SYSTEM.SH

	Added the define for noStepScale and the define for the FLAGS module.


	SOUND.SC

	The mute method of Sound was changed to allow a single channel to be muted.
	In addition, the same code (MidiSend) is now used in a loop to mute all
	channels, allowing us to remove the MuteSound procedure from MIDI.S.  The
	format for the mute method is now:
	
			(sound mute: trueOrFalse [channel])

	If 'channel' is not specified, the mute/unmute operation will be applied to
	all channels.


8/25/92 Brian K. Hughes

	MESSAGER.SC

	In Messager's sayFormat method, &rest was not being passed to the
	FindFormatLen procedure and Format kernel call, thus only the first argument
	passed was being formatted into the control string.


8/21/92 Brian K. Hughes

	SYSTEM.SC

	The EventHandler class was checking for (event claimed?) instead of
	(evtClone claimed?) as one of the conditions for dropping out of the loop.
	Also, made sure to dispose of cloned event before returning.


	PAVOID.SC

	Made sure blocker has a mover property before trying to access it.  This bug
	caused PAvoider to PMachine if the object blocking ego was not an Actor or
	subclass of Actor.


8/21/92 Brian K. Hughes

	FEATURE.SC
	EGO.SC

	Made the handleEvent method actually claim the event instead of just return
	a TRUE if the event should be claimed.  (Reverse of change made 7/31/92)


8/21/92 Brian K. Hughes

	POLYEDIT.SC

	References to currentPalette, an obsolete global, have been removed.


8/20/92 Brian K. Hughes

	ICONBAR.SC

	The iconbar now references the loop used for the current inventory item with
	no modifiers.  The code used to always add 1 to the loop number because it
	assumed a specific order to loops in the inventory view.

	The gameTime global variable is now updated inside the iconbar's doit loop.
	This ensures that talkers and other real-time objects launched from the
	iconbar (or subclass) will set their timings correctly.

	A bug was fixed wherein if the iconbar's curInvIcon is 0 the iconbar will
	not try to reference its type or message.


8/19/92 Brian K. Hughes

	GAME.SC

	Removed subtitleLang and parseLang properties and setSpeed, checkAni, and
	setFeatures methods from Game.  Also removed locales list and RoomControls.

	Also, the code throughout the module has been straightened up, made more
	consistent in form, and comments added or updated.


	SYSTEM.SC

	Made the EventHandler class clone its event before sending it to its
	elements.  This avoids the problem of one of the elements executing a
	((user curEvent?) new:) and wiping out the EventHandler's event.


	SIGHT.SC

	A reference to egoBlindSpot, an obsolete global, has been removed.


	INSET.SC

	References to currentPalette, an obsolete global, have been removed.


	ACTOR.SC

	Removed palette property and isExtra method from View, and findPosn method
	from Actor.  Also removed the call to SetNowSeen in Prop's doit.


	SYSTEM.SH

	Removed obsolete module defines, including: AVOIDER, SORTCOPY, TEXTRA,
	MOUSER, QSCRIPT, TIMEDCUE, QSOUND, LASTLINK, PRINTD, PCYCLE, LANGUAGE.

	Also removed obsolete global variables, including: speed, showStyle, locales,
	aniThreshold, sortedFeatures, egoBlindSpot, demoDialogTime, currentPalette,
	and theMenuBar.

	Also set the default for msgType to be TEXT_MSG.


8/18/92 Brian K. Hughes

	DOOR.SC

	Door now uses module pointed to by modNum property instead of DOOR define.
	If modNum property is -1 (default), it is set to curRoomNum.


8/17/92 Brian K. Hughes

	DLGEDIT.SC
	POLYEDIT.SC
	WRITEFTR.SC
	TALKER.SC

	Replaced setting the title property in Print directly with invocations of
	the addTitle method.  Doing otherwise will cause an error because Print
	assumes that the title property contains a pointer to allocated heap.


	TALKER.SC

	The ability to pass message parameters directly to a talker has been
	removed.  The code was built originally to provide some measure of backward
	compatability, which is no longer necessary.  The say: method of Narrator
	and Talker now takes a single argument, which will be a buffer (for text
	messages) and probably an audio number for audio messages.


	MESSAGER.SC

	As above, all code that passed message parameters to a talker was removed.
	Also, error messages were made more clear and the findTalker method now
	returns the narrator by default, after displaying a warning message.


8/14/92 Brian K. Hughes

	MESSAGER.SC

	The oldIconBarState was not being set in the sayFormat method, as in the say
	method.


8/14/92 Brian K. Hughes

	ICONBAR.SC

	Code was added to the hide method to turn off the TRANSLATOR bit in the
	helpIconItem's signal.  This fixes a bug wherein the helpIconItem was still
	active when entering the iconbar if it was not used before exiting the last
	time.  This only happened if the NOCLICKHELP bit was not set in the iconbar.


8/12/92 Brian K. Hughes

	PRINT.SC

	A new procedure, FindFormatLen, was added.  Given a control string and its
	parameters, FindFormatLen will return the number of bytes that the formatted
	string will require (at maximum).

	The addTextF method of Print was modified to make use of this procedure.

	The addition of this procedure means that it is no longer required to pass
	a pre-defined buffer to either Printf or addTextF.


8/12/92 Brian K. Hughes

	MESSAGER.SC

	The sayFormat method was altered to make use of the new FindFormatLen
	procedure, instead of repeating the same code.


8/12/92 Brian K. Hughes

	USER.SC

	Code was added for speech support.  First, User checks for the existence of
	a speechHandler, and if so lets it handle the event.  Otherwise, the event
	is processed according to its type and message.

	Also, a check for (user canControl) was removed from the cond for direction
	events; if user can't control, only ego needs to know.  This bug made it
	impossible to move the cursor using the keyboard if the user did not have
	control, even if it was not a walk cursor.


8/12/92 Brian K. Hughes

	ICONBAR.SC

	The findIcon method only checked as many elements of the IconBar as the
	number of parameters you passed.  It now checks all elements of the list.


8/12/92 Brian K. Hughes (from Chad Bye)

	KERNEL.SH

	Obsolete kernel functions were commented out.  These include Parse, Said,
	SetSynonym, ShowObjs, and StrSplit.

	New kernel functions were added, including: AssertPalette, TextColors,
	TextFonts, Record, and PlayBack.


8/12/92 Brian K. Hughes

	PAVOID.SC

	If there are no obstacles in the current room, then the avoider's client's
	mover would have no obstacles.  This condition was not handled in PAvoider's
	doit.  The code now creates a list for the mover's obstacles if there is
	none and places the new polygon into it.  The first doit cycle wherein the
	PAvoider's client is > 20 pixels away from the blocker, the list is disposed
	to prevent frags.


8/12/92 Brian K. Hughes (from Martin Peters)

	MOTION.SC

	The initial value of cycleCnt for cyclers was changed from
	(- gameTime cycleSpeed) to gameTime.  This forces the cycler to wait for
	a time equal to the client's cycleSpeed before cycling the first time.
	This bug caused the first cel of an animation loop to be skipped over
	very fast.


8/12/92 Brian K. Hughes

	GAME.SC

	A call to the obsolete kernel call SetSynonyms was removed.


8/11/92 Brian K. Hughes

	LOGGER.SC

	The 3-character QA initials field was changed to an 8-character login name.
	This is to facilitate the new bug reporting system from Dynamix.


8/11/92 Brian K. Hughes

	FILE.SC

	The name property had been redefined and set to 0, which caused instances
	of the File class to become invisible in the object list.  This property
	definition was removed, allowing the name to default to the class name.


8/10/92 Brian K. Hughes

	PRINT.SC

	Added an addTitle method, which takes the following forms:

		(Print addTitle: @buffer)
		(Print addTitle: noun verb case sequence module)


8/10/92 Brian K. Hughes

	DLGEDIT.SC

	Window title can now be expressed as message parameters, as well as a
	literal string.  DialogEditor now writes title to SCI file.


8/10/92 Brian K. Hughes

	SCALETO.SC

	A new class, ScaleTo, has been added to the system.  ScaleTo scales its
	client from its current size to the specified size over a period of time.
	Usage of the ScaleTo class is:

		(object setScale: ScaleTo newSize [caller])


8/10/92 Brian K. Hughes

	MESSAGER.SC
	TALKER.SC

	Checks were added to ensure that theIconBar points to an object before
	making references to it.


8/10/92 Brian K. Hughes

	STOPWALK.SC

	Code in the doit method that killed the client's mover was removed.  This
	code was not necessary for StopWalk to work correctly, and in fact made it
	impossible to have a StopWalk cycler and Follow/PFollow mover on an actor
	at the same time.


8/10/92 Brian K. Hughes

	MESSAGER.SC

	The ability to say a range of sequences has been added to the say method.
	The parameter format for the say method is now:

		(messager say: noun [verb [case [sequence [caller [module]]]]])
		(messager say: noun [verb [case [fromSequence toSequence [caller [module]]]]])
		(messager say: NEXT [caller])

	A frag caused by not deallocating heap space in sayFormat was fixed.


8/07/92 Brian K. Hughes

	POLYEDIT.SC

	The PolygonEditor now handles editing polygons on the altPolyList.  They
	are read into the editor as normal polygons, but a new property called
	srcList will be set to indicate that the polygons come from the altPolyList.
	The polygons can be distinguished by different colored lines in the control
	screen, but as yet they are the same color on the visual screen.  This is
	due to the fact that different palettes yield unpredictable colors.


8/07/92 Brian K. Hughes

	PCHASE.SC

	The init methods of the PChase and PFollow classes was modified to call the
	super's with variable parameters, depending on the number of parameters
	passed to the init.  This allows the re-initing of the mover done at each
	node and when step size changes to still use the existing path without
	adjustements.  The most common manifestation of this bug was the tendency
	for the chasing actor to cut through polygons.


8/03/92 Brian K. Hughes

	TALKER.SC

	The cueVal property of Narrator was never being reset to 0, causing a talker
	that had been cancelled with the right mouse (or ESC) to continue to display
	only the first message in a series.  The cueVal is now reset to NULL in the
	Narrator's dispose.


8/03/92 Brian K. Hughes

	GAME.SC
	MESSAGER.SC
	ICONBAR.SC
	SYSTEM.SH

	A new class, Cue, was created for the purposes of delayed cuing.  Global 18,
	cuees, may be used as a pointer to a set that contains Cue clones.  At the
	beginning of each Game doit and IconBar doit cycle, the list is checked and
	a doit: message is sent to each of its members.  The doit: of Cue simply
	cues the cuee, with a register and cuer as arguments.

	This system allows Messager to cue its client after the stack has returned.
	The problem was that Messager could cue a script, which could call Messager
	again, without allowing the original talker to dispose correctly.


7/31/92 Brian K. Hughes

	ACTOR.SC (from Dave Artis)

	Changes were made to the order and nature of the step size calculations in
	Actor's doit: method.  These changes help reduce integer overflow problems
	and keep the actor from spinning or "getting stuck" at very small sizes.

	FEATURE.SC
	EGO.SC

	A temporary variable was added to the handleEvent methods to hold the return
	value.  Simply returning (event claimed?) is no longer reliable, since the
	events used in the IconBar, GameControls, and Inventory are no longer 
	clones.  This new variable ensures a proper return value from the handle-
	Event method regardless of the current condition of uEvt.


7/28/92 Brian K. Hughes

	FEATURE.SC

	If no argument is passed to a feature's facingMe: method, the actor to face
	is assumed to be ego.  The method will now return TRUE if this is the case
	AND ego is not in the cast.  This prevents bugs caused by ego trying to face
	even though he's not in the cast.


7/27/92 Brian K. Hughes

	ICONBAR.SC
	INVENT.SC
	GCONTROL.SC
	USER.SC

	The new: method of uEvt (in USER.SC) was overridden to simply poll for a new
	event record, not actually create a clone.  The IconBar class and its sub-
	classes were modified to use ((user curEvent?) new:) instead of (Event new:).
	This reduces the liklihood of errors caused by the constant creation and
	destruction of dynamic events.  In addition, (user curEvent?) now always
	points to the current event.


7/24/92 Brian K. Hughes

	RANDCYC.SC
	TALKER.SC

	The old RandCycle class from RANDCYC.SC was replaced with the RTRandCycle
	class from TALKER.SC.  This brings RandCycle up to real-time.  In addition,
	a new property called "reset" has been added to RandCycle which, if true,
	will set the client's cel to 0 upon init and cycleDone.  Talkers use this
	feature.  The parameter list for RandCycle is now:

		(prop setCycle: RandCycle timeToCycle [caller [resetOrNot]])


7/24/92 Brian K. Hughes (from Kevin Ray/Oliver Brelsford)

	EGO.SC

	Overrode the facingMe method to always return TRUE.  This prevents ego from
	turning around when the player clicks on him in an attempt to face himself.


7/23/92 Brian K. Hughes

	USER.SC
	EGO.SC
	ACTOR.SC

	The Ego class was split out of USER.SC into its own module, EGO.SC.  In
	addition, the setSpeed of Ego was moved into the Actor class.


7/22/92 Brian K. Hughes

	GAME.SC

	In Game's replay method, the style used to redraw the pic is changed to
	PLAIN if it was originally one of the scrolling styles, or if it contained
	either HMIRROR or VMIRROR.  Since the default style for a room is -1, this
	change prevents mirrored pictures from drawing unmirrored and scrolling
	pictures from scrolling in from nowhere.


7/21/92 Brian K. Hughes

	ICONBAR.SC

	A change that was forgotten in the work done on 7/08/92.  The IconBar now
	sets the cursor to ARROW_CURSOR before calling the doit, not normalCursor.


7/20/92 Brian K. Hughes

	MESSAGER.SC
	TALKER.SC

	A new method, sayFormat, was added to Messager.  The sayFormat method
	takes the following syntax:
	
		(messager sayFormat: talkerDefine @controlString formatParams [caller])

	It will format the string into a buffer of the appropriate size, then pass
	the string to the talker.  The say: method of Narrator was modified to
	handle a single argument (a string pointer).  Typical uses would be:

		(messager sayFormat: GATE_GUARD {How are you, %s?} @egoName self)

		(messager sayFormat: SALESMAN {That will be %d dollars for the %s.}
			(theItem cost?)
			(theItem name?)
		)

	Note that the talker define is required, since the messager will not be
	getting the message from a message file.  The (Message MsgGet) kernel call
	will return the talker number.


7/20/92 Brian K. Hughes

	MESSAGER.SC

	Removed the one-cycle delay before disposing; messager used to put
	itself on theDoits list, then dispose next cycle.  Messager now just
	disposes directly, when necessary.

	Also code added 4/08/92 (q.v.) to ignore messages whose talkers are -1
	will be checked in now.


7/10/92 Brian K. Hughes

	PATH.SC
	
	In the init method, properties are set only if arguments are passed.
	This prevents properties from getting set to the next available garbage
	on the stack when the Path is inited with no arguments (such as from
	Actor's setStep method).


7/09/92 Brian K. Hughes

	INVENT.SC

	The advanceCurIcon method was removed, allowing the IconBar's default
	method to be used.  The method was over-ridden to allow the user to select
	the help icon by cycling through the icons.  The removal was done in order
	to make the IconBar and its subclasses consistent.


	POLYPATH.SC
	SYSTEM.SH

	A new global, altPolyList (95), was defined to hold a pointer to a list of
	alternate polygons.  PolyPath was modified to check this list in addition
	to the room's obstacles list.  The function of PolyPath is now:
	
		1) Generate an optimized path, using the room's obstacles list
		2) Get the next target point in the path
		3) Generate an unoptimized path to this point, using the altPolyList
		4) If the returned end point is not the same as the point from step 2,
				the original path is blocked by an alt poly; therefore, insert
				an end-of-path marker ($7777) at this point
		5) If not end-of-path, go to step 2

	This change allows us to have a second list of polygons without requiring
	that they be merged into the room's obstacles list.  Alt polys are highly
	useful with Doors (see below).


	DOOR.SC

	This is a new class.  It is based on similar Door classes by Al Lowe and
	the Iceman group.

	By default, Doors create a alt polygon around them to keep actors from
	walking through them.  When the door opens, the alt poly is taken off the
	altPolyList, allowing free passage.  When the door closes, it puts its alt
	poly back on the altPolyList.  This has two major advantages:

		1) There is no way an actor can be "chicken-walked" around a door's
				control color block by being repositioned inside the room's poly
		2) Since control color blocks are eliminated, room's polygons can be made
				much closer to diagonally positioned doors

	Door doco is forthcoming.


	TALKER.SC

	Code was added to hide the cursor (set to INVIS_CURSOR) when a talker comes
	up, but only if the player has no mouse.  This prevents the wait cursor (or
	similarly-large cursor-like object) from hiding the text.

	Also, the time that a talker's mouth moves was lengthened by 33%.


7/08/92 Brian K. Hughes

	GAME.SC

	The code in the replay method of Game that sets the cursor was expanded to
	allow for a handsOff condition.  This ensures that the wait cursor will be
	displayed if restoring a game that was saved during handsOff.

	Code was added to the save & restore methods of Game that will check for to
	see if the current save directory is valid, and if not ask for a new path.
	The code will loop until a valid path is entered.


	FEATURE.SC

	In the handleEvent method, if we determine we will not approach the feature,
	we now call facingMe before calling the changeState method of CueObj.  This
	allows ego to face the object before we invoke the doVerb.

	The facingMe method now skips the actual facing code (in the notFacing
	method) if the sightAngle is equal to the feature default ($6789).


	GCONTROL.SC

	Removed obsolete references to helpStr, replacing them with the equivelant
	checks using helpVerb.  Also, used Print with a set width and font instead
	of the previous Format/Prints usage.


	ICONBAR.SC

	Upon exiting the iconbar code, the cursor is now set to the waitCursor if
	the player does not have input and control.

	When checking for a keyDown in the dispatchEvent method, the code was still
	using the old (icon select:) methodology instead of the new
	(if (icon select:) (icon doit:)) methodology.

	The Print statement that displays the help message was made better looking.


	INTRFACE.SC

	Optimized use of event's properties by using temp variables.


	LOGGER.SC

	Reformatted the Print displays so that they are better spaced.


	PRINT.SC

	Added an optional fourth parameter to the GetInput procedure that specifies
	a font other than the default SYSFONT.


	SAVE.SC (changes by Gary Kamigawachi)

	All text now resides in the message file.  Dialogs pull messages for text,
	button text, titles, etc.


	STOPWALK.SC

	Oddly enough, when the client begins to walk and is using a single view for
	both walking and stop loops, there was no code to set his loop correctly for
	walking.  It was left up to the setHeading/setDirection code to handle this,
	which caused occasional "pirouetting".


	USER.SC

	Checks were added to ensure that the player has control (user canControl:)
	before processing direction events, and that the player has input (user
	canInput:) before processing keyDown and mouseDown events.  These checks
	had gotten deleted erroneously during the first revision of User.


7/08/92 Brian K. Hughes

	KERNEL.SH

	The enum PALVARYNEWTIME was added to the PalVary entry.


7/02/92 Brian K. Hughes

	ACTOR.SC

	Fixed a bug in the match code of Prop setScale.  The new (clone) scaler
	was being improperly created, resulting in various errors.

	Also, moved code that set the actors step sizes (Actor doit:) to before
	the mover's re-init.  This ensures that the InitBresen code will have
	the proper step size values to work with.  The mover is now only re-inited
	if it decends from MoveTo or PolyPath.


6/05/92 Brian K. Hughes

	SAVE.SC

	Adjusted positions of yes/no buttons in the dialog for confirming the
	deletion of a save game.


6/04/92 Brian K. Hughes

	SAVE.SC

	Escape key now produces a -1, not 0.  Changed the code in SRDialog to
	look for the right return value.


6/04/92 Brian K. Hughes

	GAME.SC

	Added Mark Hood's fix for addToObstaclesCode for addToPics.  A logic error
	caused addToPics to never create polygons around themselves.

	Moved buttons in error dialogs down so it doesn't appear over the text.

	In class Region method dispose, there is code to check for a timer
	attached to the region and dispose of it.  Since Timer dispose: doesn't
	remove it from the timers list, the timer's delete: method is now
	called as well.


5/28/92 Brian K. Hughes

	KERNEL.SH

	Added new kernel call ResCheck, which will allow the programmer to
	verify the existence of a resource without loading it.

	Added a fifth function to PalVary, PALVARYTARGET, which allows the
	programmer to insert a custom color into the target palette.  More doco
	is forthcoming in the systems group report.


5/28/92 Brian K. Hughes

	USER.SC

	Conditioned whether pMouse gets dirStop events by whether the event
	type is a keyDown.  This fixed a bug wherein the joystick never produced
	dirStop events, making it impossible to stop the cursor with the joystick.


5/28/92 Brian K. Hughes

	ICONBAR.SC

	In the noClickHelp method, the temporary event was not being disposed if
 	the noClickHelp was terminated by clicking on the help icon again.  If it
	was terminated in any other way, the dispatchEvent method will dispose the
	event, as before.


5/11/92 Brian K. Hughes

	SYSTEM.SC
	ICONBAR.SC

	isMemberOf now returns TRUE if the object in question is an instance
	of or the actual class being compared.  This fixed the bug in IconBar
	wherein IconBar was mysteriously not a member of IconBar.


5/11/92 Brian K. Hughes

	PRINT.SC
	INTRFACE.SC

	Prints with no active items will now return FALSE if the ESCAPE key was
	pressed and TRUE if the ENTER key was pressed.


5/09/92 Brian K. Hughes

	SAVE.SC

	Made sure the current directory shows up in the edit box when asking
	for a new save game directory.  This got deleted in the conversion to
	the new Print object.


5/06/92 Brian K. Hughes

	ICONBAR.SC

	Removed the kludge for testing whether or not to localize the event in
	the noClickHelp method (q.v. 2/26/92).  The isMemberOf method of Object
	is functioning normally now (see below) so the kludge is not necessary.


5/06/92 Brian K. Hughes

	SYSTEM.SC

	Changed the isMemberOf method of class Object to also return TRUE if
	the object tested is equal to the class tested against.  For example,
	(IconBar isMemberOf: IconBar) will return TRUE.


4/30/92 Brian K. Hughes

	STOPWALK.SC

	Added a (super doit:) in StopWalk doit so that an actor who is stopped
	and has a separate stopped view will still cycle.  If you don't want
	the actor to cycle, you can reduce each of the stopped loops to one cel.
	Having an entire stopped loop of cels can be useful in situations such
	as ego standing holding a moving animal.


4/30/92 Brian K. Hughes

	GAME.SC
	GCONTROL.SC

	Added two properties, panelObj and panelSelector, to class Game.  Also
	added some code in the doit method of Game that checks the panelObj
	property and, if set, sends a 'panelSelector' message to panelObj.  This
	change allows a major heap-saving feature, which is that the control
	panel can now be contained in an external module, called in when it is
	used, and unloaded from memory BEFORE the user's action takes place.

	For example, in Laura Bow II the control panel requires about 1300 bytes
	of heap.  If the save button is pressed, the panelObj and panelSelector
	properties of Game are set to theGame and #save, respectively, and the
	control panel is unloaded from memory, regaining the 1300 bytes.  At the
	beginning of the next doit, the panelObj and panelSelector properties are
	evaluated and the save dialog is brought up, which requires about 1600
	bytes of heap.  The result is that saving the game requires only 1600
	bytes maximum instead of 2900 bytes.

	The game's panelObj and panelSelector properties are now set in the
	ControlIcon's doit method.


4/30/92 Brian K. Hughes

	PRINT.SC

	Fixed bug in addIcon whereby parameters were being used even if no values
	were passed.


4/30/92 Brian K. Hughes

	ACTOR.SC

	The step size calculations in Actor's doit method for scaling actors has
	been readjusted.  The old calculation rounded off, while the new calculation
	rounds to the nearest integer.  This creates a much more realistic look for
	a scaling actor.


4/23/92 Brian K. Hughes

	FEATURE.SC
	GAME.SC

	Changed default modNum in Feature and Region from 0 to -1 to allow use
	of message file number 0 as an object's default.


4/19/92 Brian K. Hughes

	ACTOR.SC

	Made sure to turn off the viewAdded bit of an addToPic's signal when it
	is deleted from the addToPics list.  This way, if the view is still in
	memory when it is used again, it won't automatically assume it is intended
	to be an addToPic again.

	Added a parameter to Actor's setStep method, leaveOriginal.  If a TRUE value
	is passed in this parameter, the origStep property of Actor will NOT be
	updated to the new xStep and yStep values.  So far, this is used only in
	Actor's doit method for scaling.


4/16/92 Brian K. Hughes

	WRITEFTR.SC

	Removed references to PicView.


4/16/92 Brian K. Hughes

	TALKER.SC
	PRINT.SC

	Since talkers' Prints are modeless, we can't dispose of the window clone
	created in the talker's display method immediately after the Print.
	Instead, the Print's cue method (which gets invoked from its dialog's
	dispose) gets rid of any windows that are connected to Print.


4/15/92 Brian K. Hughes (from Bob Fischbach/Hugh Diedrichs)

	MESSAGER.SC

	Removed code that checked for a non-zero fifth parameter to Messager
	say (the module number), and just checked for a fifth parameter.  This
	allows you to send 0 as a legal module number.


4/14/92 Brian K. Hughes

	GCONTROL.SC
	ICONBAR.SC

	Changed the select method of ControlItem to a doit, which gets called
	from the dispatchEvent method of IconBar (or subclass thereof).  This
	allows the select to determine actions to be taken, then the actions
	to actually happen near the end of the dispatchEvent method, allowing
	the IconBar (or subclass) to be disposed first.  For example, the save
	icon in the control panel will now allow the control panel to be disposed
	before the save code is brought in, reducing the amount of heap required
	to nearly 1/2.


4/13/92 Brian K. Hughes

	PRINT.SC

	Made sure to set the port back after a modal print.


4/11/92 Brian K. Hughes

	PRINT.SC

	Reset the window property back to 0 when disposing.  This prevents the
	Print class from trying to pass it along to the dialog again next time.


4/11/92 Brian K. Hughes

	TALKER.SC

	Removed the restriction that colors wouldn't be set for custom windows.
	The only danger in this is that completely custom windows (those that
	draw their own background rectangles) won't change color automatically
	to match the text background.


4/09/92 Brian K. Hughes

	FEATURE.SC

	Added a method, initialize, which performs the appropriate feature
	initializer code.  The init method now invokes this method before dealing
	with adding the feature to the cast or features list.  This way, a view
	may have the appropriate feature initializer code done without having to
	call the init and add it to a list (useful for views that will become
	addToPics, see below).


	ACTOR.SC

	Removed PicView class.  The view class now assumes all functionality of
	the PicView class.  Views may be added to the pic with the addToPic method
	(as before), but now the view itself is put onto the addToPics list, not
	the features list (see below).

	To make a view add itself to the pic automatically upon init, set the
	"viewAdded" bit in the view's signal, or invoke the addToPic method
	instead of the init.


	USER.SC

	Added the addToPics list to those considered by OnMeAndLowY during the
	sorted features process.


	GAME.SC

	The members of the addToPics list now get deleted on a room change, as
	well as disposed.


4/08/92 Brian K. Hughes

	PRINT.SC

	Check the message size to see if the message is actually in the message
	file, and if not don't try to allocate heap.  This prevents a "zero
	heap allocation request" error.


4/08/92 Brian K. Hughes

	MESSAGER.SC

	Messager now ignores a message if the return value from the findTalker
	method is -1.  This value can be used to indicate a talker that is used
	purely for comments in the message file, talkers that perform some other
	action besides displaying a message, et al.


4/08/92 Brian K. Hughes (from Dave Artis/Oliver Brelsford)

	SCALER.SC

	Reorganized calculations in init and doit to optimize for speed, while
	still attempting to retain some of the efficiency.  The doit method
	was modified to make sure the calculations were done even if ego is
	out of range.  Also, the doit is invoked from the init so that the
	correct parameters are set initially.


4/08/92 Brian K. Hughes

	ACTOR.SC

	Solidified parameters passed to View and Prop's setScale method and
	added new functionality.  The possible forms of setScale are:

		View:
			setScale: (no args)		- sets scaleSignal to scalable only
			setScale: 0					- turns off all scaling
			setScale: n					- sets auto-scaling based on vanishingY
												and ego's size of 100% at y = 'n'

		Prop:
			setScale: obj				- sets scaler object (with optional params)
			setScale: MATCH obj		- matches scaling of 'obj'


4/06/92 Brian K. Hughes

	SYSTEM.SH

	Replaced define RFEATURE with GCONTROL (978).  RFeature and RPicView
	classes are obsolete.  GameControls has been split out of SLIDICON and
	put into GCONTROL.

	Also, the define NEXT (used with messager) was changed from 0 to -1 so
	it would not conflict with ALL.


4/06/92 Brian K. Hughes

	ICONBAR.SC

	In noClickHelp, if the item under the mouse does not have a helpVerb,
	it will not try to print a help string.


4/05/92 Brian K. Hughes (from Hugh Diedrichs)

	ICONBAR.SC

	Set the event's message to (| userEvent helpEvent) in IconBar's doit.
	This allows the normal help to work correctly, as well as the no-click
	help.


4/05/92 Brian K. Hughes (from Hugh Diedrichs)

	POLYEDIT.SC

	Used the kernel call DrawPic when erasing lines at the end of the session
	instead of the room's drawPic method, and added code to redraw overlays
	and addToPics.


4/03/92 Brian K. Hughes

	ACTOR.SC

	Move the invocation of (scaler doit:) in Actor's doit method to after
	the invocation of (mover doit:).  This prevents ego from "jumping" or
	vibrating when he walks and scales.


4/03/92 Brian K. Hughes

	SAVE.SC

	Adjusted the positions of the YES and NO buttons on the save game delete
	confirmation Print.


4/02/92 Brian K. Hughes

	TALKER.SC

	Added color & back properties to Narrator.  These properties are used
	with a clone of the game's systemWindow for displaying talker messages.
	Note that custom windows (those of type $80) will NOT display the talker's
	colors.


4/02/92 Brian K. Hughes

	ICONBAR.SC

	The while loop in the doit method now checks that the state is IB_ACTIVE
	first, before generating an event.  This ensures that, should the state
	be changed during the process which forces us out of the while loop, we
	don't get a dynamic event hanging around.


4/01/92 Brian K. Hughes

	PRINT.SC

	Altered the addText and addButton methods to make use of the new MsgSize
	kernel call (see below).  This eliminates the need for the 1000-byte
	temporary buffers allocated off heap.


4/01/92 Mark Wilden

	KERNEL.SH

	Added Message MsgSize function.  It is used like this:
	  (= msgSize (Message MsgSize module noun verb case sequence))
	and returns the size of the buffer needed to hold the message including
	the trailing null.  Therefore, a blank message will return 1.  If the
	message is not found, the function returns 0.  Stage directions, which
	are normally stripped out when a message is retrieved, are included in
	the length.

4/01/92 Brian K. Hughes

	TIMER.SC

	The set60ths method has been changed to setTicks and the real-time
	calculation in this method has been changed to the correct algorithm.
	In addition, the parameters for this method have been reversed to make
	them more intuitive.  The format is:

			(myTimer setTicks: tickValue who2Cue)

	The ticks will now compensate for tickOffset, set when restoring a game.


3/31/92 Brian K. Hughes

	PRINT.SC

	In the showSelf method of Print, made the dialog center itself un-
	conditionally.  Then set the x and/or y according to the x and y properties
	of Print.  This insures that if you pass -1 for either coordinate, that
	coordinate will remain the value produced by centering the window.


3/30/92 Brian K. Hughes (from Robert Lindsley)

	INTRFACE.SC

	If a dialog had the time property set, the check method was disposing
	of the dialog but not breaking out of the while loop in the doit method.
	Check method now just returns TRUE if the dialog is out of time, and
	lets Print dispose of the dialog normally.


3/30/92 Brian K. Hughes

	ACTOR.SC

	Made sure to reset the scaler property to 0 in Prop's setScale method,
	in case we replace a scaler object with simply y-coordinate scaling.


3/27/92 Brian K. Hughes

	ACTOR.SC

	The setStep method was not setting the xStep and yStep properties if
	the actor wasn't scaling.  If the actor is scaling, the setStep method
	only sets the origStep property (a packed word: $xxyy), but doesn't set
	the xStep and yStep because actor's doit does that for us (if scaling).


3/27/92 Brian K. Hughes

	ACTOR.SC

	Made sure to dispose of a Prop's scaler in the setScale method, even if
	we're not attaching a new one.  Also, set scaler property to 0 when
	disposing the scaler in Prop's delete.


3/27/92 Brian K. Hughes

	ACTOR.SC
	SCALER.SC

	Changed the setScale method of Prop to clone the scaler class passed
	and pass the rest of the parameters to the scaler's init method.  This
	was patterned after the setMotion method.


3/26/92 Brian K. Hughes

	GAME.SC

	Changed the vanishingY property of class Game from -30000 to 0, which
	works better for scaling.


3/25/92 Brian K. Hughes (from Randy Mac Neill)

	INVENT.SC

	Code was added to the advanceCurIcon method of Inventory to set the
	curIcon's signal to TRANSLATOR or (~ TRANSLATOR), as required by whether
	the curIcon is the helpIconItem or not.


3/25/92 Brian K. Hughes

	ICONBAR.SC

	The cond in the noClickHelp of IconBar was replaced with code that
	unconditionally disposes a modeless dialog (if any), then displays the
	new help string.  This fixed several bugs with displaying the help.


3/25/92 Brian K. Hughes

	INVENT.SC

	Added a clause to the cond in Inventory's doit method that checks the
	fastCast and passes the event to the list if it exists.  This way, talkers
	that display messages as a result of actions taken on an inventory item
	will get events instead of the normal Inventory doit (which highlights
	items & such).


3/25/92 Brian K. Hughes

	ACTOR.SC

	Added code in Prop's delete method to dispose of the scaler object (if
	any) attached to the Prop (or Actor...).


3/19/92 Brian K. Hughes

	PRINT.SC

	The addButton: method was altered to allow the font to be passed to
	the new button.


3/17/92 Brian K. Hughes

	PRINT.SC

	The showSelf: method of Print has been changed to use the window property
	of Print for the dialog window.  If the window property is NULL, the
	systemWindow global will be used.


3/16/92 Brian K. Hughes

	ACTOR.SC

	Added an error message in the setScale method of Prop in case the Y
	value passed is less than the curRoom's vanishingY.  This caused problems
	because of the resulting negative numbers.

	In the setStep method of Actor the actor's mover is re-inited if it is a
	member of Motion now, not MoveTo.  Since a class is not a member of itself,
	this bug caused MoveTos attached to a scaling actor never to be re-inited.


3/16/92 Brian K. Hughes

	STOPWALK.SC

	Added (self doit:) to the init method.  This makes certain that the StopWalk
	gets a chance to change the actor's view/loop before the actor animates
	once.  This bug was noticable in the way actors would be initially drawn
	in mid-stride, then change to a standing view one cycle afterwards.


3/13/92 Brian K. Hughes

	FEATURE.SC

	Changed the approachVerbs method to reset the _approachVerbs property to
	0 if either no args are passed or the first arg is NULL.


3/11/92 Brian K. Hughes

	CONV.SC

	Had to save the caller into a temp and do the (super dispose:) before cueing
	the caller.  This prevents starting another Conversation process before the
	super disposes.


3/10/92 Brian K. Hughes

	DIALOG.SC
	INTRFACE.SC

	Added an optional parameter to the dispose method of DText and DButton.  If
	TRUE, it will be assumed that the text property is a pointer to a near
	string, and not a memory pointer to allocated heap.

=---------------------------------------

3/10/92 Brian K. Hughes

	SAVE.SC

	Dialogs were converted to use Print.


3/09/92 Brian K. Hughes

	PRINT.SC

	Made sure to reset x & y to -1 and modeless to FALSE.


3/09/92 Brian K. Hughes

	ACTOR.SC

	Made sure that the setStep method allows for -1 in either parameter, which
	keeps the original value.


3/07/92 Brian K. Hughes

	PRINT.SC

	Added Print to the prints list only if it is modal.  Modeless prints do
	not want to go on the list because the list gets first shot at events, and
	modeless dialogs are usually handled by other objects who should get the
	events instead.


3/07/92 Brian K. Hughes

	TALKER.SC


	Made sure all Prints done from Talker & Narrator's display methods are
	modeless.  This insures that events will get passed to the talker through
	either the fastCast (if talker is not modeless) or the mouse/keyDownHandler
	(if the talker is modeless).


3/05/92 Brian K. Hughes

	POLYEDIT.SC
	WRITEFTR.SC

	Adjusted all the print buttons & such to be more pleasing to the eye.


3/04/92 Brian K. Hughes

	PRINT.SC

	Fixed Prints and Printf procedures to not use a clone of Print.  Sending
	a message to (Print new:) was invalidating &rest.
	
	Made first property of Print able to contain an object ID or an object
	number ('n'th item in the dialog).

	Reset the mode, font, width, caller, title, first, and saveCursor properties
	in the dispose method so that they have the right values next time.

	Added saveCursor property - if set TRUE, Print will change cursor to an
	arrow cursor then restore it to the iconbar's current icon's cursor.

	Set the width property to 0 to default.  This fixes the bug with TextSize
	not recognizing newlines & such.


3/03/92 Brian K. Hughes

	ACTOR.SC
	SCALER.SC
	SYSTEM.SH

	Removed the 'vm' designation from all scaling defines.  Also renamed the
	'vm_signal' of actor to 'scaleSignal'.


3/03/92 Brian K. Hughes

	SYSTEM.SH
	PRINTOBJ.SC

	Changed Print procedure to Prints (print string) and added simple Printf
	procedure, both of which use Print.  Renamed PrintObj to Print (including
	module & define).  As things stand now:

	PrintObj -> Print		= New class
	Print    -> Prints	= Procedure to display near strings
	Printf	-> Printf	= Procedure to format & display near strings


3/03/92 Brian K. Hughes

	PRINTOBJ.SC

	Doit method now calls doit method of each dialog item (for cycling icons &
	such).  Also, renamed format method to addTextF.  Method now adds text auto-
	matically after formatting.


3/03/92 Brian K. Hughes (from Randy MacNeill)

	MESSAGER.SC

	Added a dispose after printing the error message if the talker can't be
	found in findTalker.  This allows the messager to be disposed cleanly and
	won't leave it's Set hanging around.


3/03/92 Brian K. Hughes

	TALKER.SC

	Was referencing a parameter not declared in the parameter list in Talker's
	display method.


3/03/92 Brian K. Hughes (from Kevin Ray)

	INSET.SC

	Had to reanimate the cast in the hideCast method so that their new z values
	will be applied.


3/03/92 Brian K. Hughes

	INTRFACE.SC

	Changed GetInput to use PrintObj.


3/03/92 Brian K. Hughes

	PRINTOBJ.SC

	Made sure that x and y parameters were set to 0 if not passed to addEdit.


3/02/92 Brian K. Hughes

	ACTOR.SC

	Changed origXStep and origYStep to just origStep, which is packed.  The
	setStep method will pack the property with the values passed, and the doit
	method will unpack them for the scaling computations.  Also changed the
	setScale method of Prop to take four additional parameters: frontSize,
	backSize, frontY, and backY.  Now a scaler can be set with:

		(theActor setScale: Scaler frontSize backSize frontY backY)

	The setScale method will attach a clone of the scaler object specified to
	the scaler property of actor.


3/02/92 Brian K. Hughes

	[ Multiple Files ]

	Converted use of Print, PrintD, Printf to PrintObj.


2/27/92 Brian K. Hughes

	ACTOR.SC

	Changed default view property in class View to -1.  This way, if the
	programmer forgets to set the view he or she will receive an error
	"View 65535 not found" instead of trying to load view 0.  CD guys say this
	will solve lots of interruptions due to resource loading.


2/27/92 Brian K. Hughes

	ICONBAR.SC

	Did away with the newCursor temp var in the handleEvent method and just set
	the cursor to the curIcon's cursor, regardless of whether it or the
	curInvItem has changed.  This way, if the cursor property of the curIcon is
	changed, it will be reflected immediately.


2/27/92 Brian K. Hughes

	ACTOR.SC

	1)	Fixed bug in turning off the scaling (in setScale method).  Changed
		OR-ing signal with (~ vmAutoScale) to AND-ing.

	2) Moved the (mover doit:) code in actor's doit method to above the scaling
		code.  Doing the scaling first sometimes caused PMachine errors.

	3) Added origXStep and origYStep properties so that the scaling always has a
		good set from which to calculate the new values.

	4)	The setScale method no longer takes a multiplier to be applied to the
		maxScale property.  The argument now represents the y coordinate at which
		the view is 100% of its normal size.  The maxScale is now calculated,
		based on a ratio of this y coordinate to the vanishingY of the room.

	5)	Changed the minimum xStep that can be calculated (in the setStep method)
		from 2 to 1.


2/27/92 Brian K. Hughes

	CONV.SC

	Bug in MessageObj showSelf.  If the sequence of a MessageObj is 0
	(indicating that we want all sequences) the Message kernel call should look
	for sequence 1 for purposes of determining if the messages exist or not.


2/27/92 Brian K. Hughes

	POLYEDIT.SC

	Changed the name of the polygons file from polygons.999 to 999.pol (where
	'999' represents the picture number).


2/26/92 Brian K. Hughes

	INVENT.SC

	Replaced all references to the helpStr property of invItems with code to get
	the message from a message file.


2/26/92 Brian K. Hughes

	ICONBAR.SC

	1) Had to save the cursor and signal of the current icon item before calling
		the item's select method cuz during the select process the item might be
		disposed.  For example, the save button in game controls disposes of the
		game controls list in it's select method.  After that, the save icon is
		disposed out of memory, so the iconbar's dispatchEvent method can't
		reference it anymore.

	2)	Added noun, modNum, and helpVerb properties to IconItem and changed the
		noClickHelp method to get messages from a message file instead of
		printing a help string.  The helpStr property has been removed.

	3)	Fixed bug at top of while loop in the noClickHelp method.  It appears
		that a class is NOT a member of itself.  Hence, IconBar was NOT a member
		of IconBar, which caused the event to be localized.  This resulted in
		A) the event not registering as on an icon if it was within the top 10
		pixels on the screen, and B) the text box would flash quickly if the
		event was within 10 pixels below the bottom of the icon.


2/26/92 Brian K. Hughes

	SLIDICON.SC

	Added (= window 0) to the hide method of GameControls.  In case a control
	item hides the game controls, this will ensure that the window does not try
	to dispose again when the game controls are hidden later in the doit method.


2/26/92 Brian K. Hughes

	INSET.SC

	Instead of reanimating the oldCast in the drawInset method, we reanimate the
	oldCast in the doit method every cycle, unless hideTheCast is TRUE.  Slows
	insets a bit but it's the only way to insure that the images of the old cast
	don't get wiped out by text boxes & such.


2/26/92 Brian K. Hughes (from Jack Magn)

	PAVOID.SC

	The MergeAPoly procedure has been replaced by a MergePoly kernel call.


2/25/92 Brian K. Hughes

	TALKER.SC

	Moved the super dispose in Talker to below the call to hide.  This ensures
	that the talker is fully hidden before the caller gets cued, preventing the
	"overlapping" of talkers and confusion of underbits.


2/25/92 Brian K. Hughes

	WRITEFTR.SC

	Commented the code that uses the selector dialog item to pick approach
	verbs.  Since selector items can't read from a file and VERBS.SH is game-
	specific, the selector can't adjust itself from game to game.

	When DSelector (or a similar class) can read from a text file, this code
	will be reinstated.


2/25/92 Brian K. Hughes

	USER.SC

	In the handleEvent method, if the event is a direction event be sure to
	check if there IS an iconbar before sending messages to it.


2/25/92 Brian K. Hughes

	ICONBAR.SC

	Removed code that disposed of the temp variable 'event' at the end of the
	doit method.  The dispatchEvent method already disposes of it and clones
	that were created in the process of the doit method may end up at the same
	address.


2/24/92 Brian K. Hughes

	INSET.SC

	Removed code that saved the old value of useSortedFeatures (can't think why
	it was put in and it caused a bug!) and re-animated the old cast when an
	inset gets drawn initially.  Since insets normally invalidate the picture
	we don't want to accidentally obliterate any old cast members on the screen
	unless the programmer has indicated to do so by settting hideTheCast TRUE.


2/24/92 Brian K. Hughes

	USER.SC

	Made sure to check user controls before passing a walk event to ego
	(original functionality that was accidentally removed).


2/24/92 Brian K. Hughes

	GAME.SC

	Removed explicit Load of CURSOR in save & restore methods.  Can't load
	cursor resources anymore with the new color cursors.


2/24/92 Brian K. Hughes

	TALKER.SC

	Added a showTitle property (boolean) which, if TRUE, will cause the object's
	name to be displayed in a title box.


2/18/92 Brian K. Hughes

	MESSAGER.SC

	The oldIconBarState property was getting set even if we were invoked without
	being previously disposed.  This meant that the oldIconBarState could be set
	to a DISABLED state if the previous message was interrupted by a new
	message.  To prevent this the oldIconBarState is set only if it is 0.


2/15/92 Brian K. Hughes

	WRITEFTR.SC

	Updated code using the verbs.  Also added code to support approach distance
	and a few other options, such as letting the approachX and approachY default
	to the x and y of the object, etc.


2/14/92 Brian K. Hughes

	MESSAGER.SC

	Made sure the fastCast gets disposed of properly if the conversation is
	killed (pressed ESC or right-mouse) or if we were displaying one message of
	a sequence only.


2/14/92 Brian K. Hughes

	TALKER.SC

	Fixed bug wherein the talker's mouth would keep cycling if you click away
	the message sooner than the talker expected.  If the talker isn't the one
	talking (ticks are -1) then the handleEvent returns FALSE so the next talker
	gets a shot at the event.  Also, check to see if the event is claimed (by
	previous member of fastCast list), instead of passing the event to the
	super.


2/13/92 Brian K. Hughes

	INVENT.SC

	Fixed bug in call to Message in InvItem's doVerb method.  Call was passing
	NULL for sequence instead of 1.  (Note that messager will allow a NULL
	sequence but not the Message kernel call.)


2/13/92 Brian K. Hughes

	TALKER.SC

	Made Blink run on real time (it was cycle-based before, which didn't work
	well) and added a property to Talker called blinkSpeed, which is the number
	of ticks that will be used as the basis for the Blink cycler.  The actual
	delay between blinks is a random range from (.5 * blinkSpeed) to
	(1.5 * blinkSpeed).


2/12/92 Brian K. Hughes

	SYSTEM.SC

	Class Collection now has a new method, called isDuplicate, which determines
	if an object is already in the list.  Each of the add methods (add,
	addToFront, addToEnd, addAfter) invokes this method and only performs the
	add if the method returns NULL.  For Collection and List, this method simply
	returns FALSE, since we always want to add, but for class Set, this method
	returns FALSE only if the set does not already contain the object.  Hence,
	class Set now functions correctly for all the add methods.


2/12/92 Brian K. Hughes

	MESSAGER.SC

	Made sure each member of the talkerList gets its caller set to 0 before
	being disposed, then dispose with TRUE rather than the talker's
	disposeWhenDone property.  Also, made sure we weren't sending bogus
	parameters to the talker's say method from the sayNext method.  If the
	sayNext is invoked from our cue method (at the end of a message), we have
	no parameters to pass.


2/12/92 Brian K. Hughes

	ICONBAR.SC

	A line of code that was added to IconBar's handleEvent that returned FALSE
	if user can't control, was removed again.  This was done originally to
	prevent the ability to middle-click (swap icon) if user can't control.  That
	check has been moved into the code for the middle click.


2/10/92 Brian K. Hughes

	FOLLOW.SC

	Checked to see if, when the client is within distance and waiting, the angle
	has changed before trying to set a new angle.  This prevents constantly
	setting the client's heading and invoking the looper every cycle, even if
	the client is just standing there.


2/10/92 Brian K. Hughes

	INSET.SC

	Added a style property which determines how the picture will be drawn (if
	a picture is used).


2/10/92 Brian K. Hughes

	INTRFACE.SC

	Made ESC return 0 from a dialog with no active items, and any other key
	returns TRUE.  That way we can tell (if we want to) whether the ESC was
	pressed.


2/10/92 Brian K. Hughes

	SAVE.SC
	GAME.SC
	SLIDICON.SC
	INVENT.SC
	ICONBAR.SC

	Removed text and put into message files (where applicable) and converted
	some far text used in Format statements to near text.


2/07/92 Brian K. Hughes

   TALKER.SC

	Several changes:
		1) Added a true Blink class for the eyes
		2) Gave the fastCast a name so it can be inspected easily in the debugger
		3) Narrator's startText method now returns the length of the string
				(useful for Talker's startText method)
		4) Set a talker's ticks property to -1 if he is done talking, but did not
				pull them from the fastCast or theDoits list.  This way they still
				cycle the eyes even when they're not talking.
		5) Made sure the mouth and eyes get set back to cel 0 in the dispose


2/06/92 Brian K. Hughes

	SYSTEM.SH

	Added global textSpeed (94) which talkers will use to determine the length
	of time their text should remain on screen.  Has no function in CD audio.
	Note: This global can easily be set by a text speed slider.


2/06/92 Brian K. Hughes

	SCALER.SC

	New class.  Scales its client according to a pair of y values and a pair of
	percentage multipliers for those y values.


2/06/92 Brian K. Hughes

	POLYEDIT.SC

	Changed SetCursor kernel calls to invocations of theGame's setCursor.  Also
	set the cursor to ARROW_CURSOR explicitly.


2/06/92 Brian K. Hughes

	FEATURE.SC

	Was setting a temp variable, theVerb, in the approachVerbs method of class
	Feature which was unnecessary.


2/04/92 Brian K. Hughes

	USER.SC

	Added method setSpeed to ego, which sets ego's moveSpeed & cycleSpeed.


2/04/92 Brian K. Hughes

	GAME.SC

	Move second setCursor call in Game's play method out of the complex message.
	The system global normalCursor was getting evaluated before the message
	began, making it impossible to initialize it to a value other than
	ARROW_CURSOR in the game's init method.  This explains why games would get
	an arrow cursor as soon as the player gets control.

	Removed egoMoveSpeed property of class Game.


2/04/92 Brian K. Hughes

	MESSAGER.SC

	Disposing our Set full of talkers on first doit following the end of the
	last message, not the second doit.


2/04/92 Brian K. Hughes

	FEATURE.SC

	On recommendation of myself and Mark Hood, backward compatibility is not
	being preserved.  To that effect, the lookStr and description properties
	have been removed from class Feature.  In addition, all references to the
	invItem parameter of the doVerb method have been removed.  Also, the invItem
	property of CueObj has been removed.


2/04/92 Brian K. Hughes

	FEATURE.SC

	The approachVerbs method only functions now if there is approachCode AND at
	least one argument.


2/04/92 Brian K. Hughes

	INSET.SC

	Made sure the walkHandler is handled correctly.


2/04/92 Brian K. Hughes

	INTRFACE.SC

	Print now returns 0 if cleared with the ESC key.


2/03/92 Brian K. Hughes

	GAME.SC

	The modNum property of class Region is now set to the current room if 0.


2/03/92 Brian K. Hughes

	ACTOR.SC

	Added a setScale method to View class.  If FALSE is passed the scaling is
	disabled for that object.  If a positive value is passed it is used as the
	multiplier for the maxScale property.  Also added a setScale method to Prop
	class that will take a scaler object as a parameter.
