SCI Changes & Updates

From SCI Wiki
Jump to: navigation, search

Official SCI Documentation

SCI Changes & Updates
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


Added the fileCopy subfunction to the FileIO call.

8/16/93 Brian K. Hughes


Added the Reproducible field for SFTracs and eliminated far text.

6/18/93 Brian K. Hughes


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


Added the RemapToGray and RemapToPctGray functions to the ColorRemap call.

6/1/93 Brian K. Hughes


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


Added Martin's ColorRemap calls.

3/2/93 Brian K. Hughes


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

2/26/93 Mark Wilden


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


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


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


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.


Added explicit return values to the handleEvent method, since the calling object is expecing them (q.v. 1/11/93, GAME.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.


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.


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

1/27/93 Brian K. Hughes


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


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.


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.


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]


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


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


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 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


Claimed the event if the OK button was selected.

1/11/93 Brian K. Hughes


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


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


Changed the ScaleTo class to be real-time.

12/30/92 Brian K. Hughes


Messager and Narrator classes are now fully audio-compatible. 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).


Added an entry for the (Message MsgKey) call.

12/18/92 Brian K. Hughes


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


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


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.


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).


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.


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

12/7/92 Brian K. Hughes


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.


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


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


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

11/10/92 Brian K. Hughes


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.


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

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


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.


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.


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

11/5/92 Brian K. Hughes


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


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


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

10/29/92 Brian K. Hughes


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)


Added passing &rest to handsOffCode and handsOnCode.

10/27/92 Robert W. Lindsley


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)


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).


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.