After Cloudee uploaded MegaTokyo's boards, I found an old question of mine from there:
using Brian's decompiled 000.scr from lsl7 i figured out the game looks for a "CLASSES" file to trigger the debug mode - and it worked.
I still have one more question though for Brian:
I can also see that the file "AUTOTP" has a significance (it triggers the global variable global243), but I have no idea what it does (it is not used in any of the scripts you published).
Any help please?
Since we are still not able to decompile LSL7, I wondered if I could find information in the source code I have from Torin's Passage. Both games were from the same time period, and both by Al Lowe.
Here's what I found:
In
0.SC:
#ifdef DEBUG
;============================================+
; Take out the following lines for shipping ;
; ;
#ifndef DEMO
; Programmers always has the "classes" file
(if (FileIO FileExists "classes")
(= gbDebug TRUE) ;
else
; Oooh...sneaky, Look in resource file
(= cfgBuf (String newWith: 100 " "))
(GetConfig "TorinDebug" cfgBuf)
(cfgBuf lower:)
(= i (cfgBuf at: 0))
(if (== i `t) ; t for true (or tea for two!)
(= gbDebug TRUE)
)
(cfgBuf dispose:)
)
(if (FileIO FileExists "autotp") ; automatically teleport on pick a chapter
(= gbDebugTeleport TRUE)
)
(if gbDebug
(goDebugger init:)
)
#endif
;
; ;
; Take out the above lines for shipping ;
;============================================+
#endif
So the presence of
AUTOTP sets the
gbDebugTeleport flag.
Let's look for that, shall we?
In
GAME.SH we find:
gbDebugTeleport 243 = FALSE ; is auto-teleport on for this game?
And we also find it in
PIKACHPT.SC. Here's the full script:
;;;; PIKACHPT.SC
;;;;
;;;; (c) Sierra On-Line, Inc, 1995
;;;;
;;;; PIKACHPT.SC -- the sierra logo
;;;; Created for Domain, 1995
;;;;
;;;; Author: Don Munsil
;;;;
(script# rPickAChapter)
(include "200.shm")
(include "110.shm")
#ifdef DEMO
(include "300.shm")
#endif
(procedure
TipOfTheDay
)
(public
roPickAChapter 0
)
(local
line1 = NULL ; the lines pointing at the world
line2 = NULL ; more lines
line3 = NULL
line4 = NULL
line5 = NULL
)
(define INTRO_BUTTON_FONT 2510)
; how far from top of the button should we start drawing the connecting line
; This number is dependant upon the font
(define LINE_OFFSET 14)
(define LINE_COLOR 227)
; X alignemnt of the chapter buttons
(define BUTTON_X 480)
(define BOTTOM_Y 440)
; This is called by the choose a chapter number buttons.
(instance oRoomChosen of Object
(method (doit aChapter)
(if (not gbInterfaceInitted)
(goInterface init:)
(InitInterface2)
(goMainMenu disable:)
)
(goMusic1 stop:)
(= gnChapter 1)
;; chapter init stuff -- pass through whether or not we are teleporting
(switch aChapter
(INTRO_N
(= gnChapter 0)
)
(TLA_N
; ego gets nothing
(= gnChapter 1)
)
(ESCARPA_N
(= gnChapter 2)
(ego get: gioBoogleBox)
(ego get: gioBoogleWorm)
(ego get: gioBoogleLantern)
(ego get: gioShard)
(ego get: gioEressdy)
)
(PERGOLA_N
(= gnChapter 3)
(ego get: gioBoogleBox)
(ego get: gioBoogleShovel)
(ego get: gioBoogleWorm)
(ego get: gioBoogleLantern)
(ego get: gioBoogleYoYo)
(ego get: gioEressdy)
(ego get: gioLocket)
)
(ASTHENIA_N
(= gnChapter 4)
(ego get: gioBoogleBox)
(ego get: gioBoogleShovel)
(ego get: gioBoogleWorm)
(ego get: gioBoogleLantern)
(ego get: gioBoogleYoYo)
(ego get: gioBoogleRedCross)
(ego get: gioEressdy)
(ego get: gioKnife)
)
(TENEBROUS_N
(= gnChapter 5)
(ego get: gioBoogleBox)
(ego get: gioBoogleShovel)
(ego get: gioBoogleWorm)
(ego get: gioBoogleLantern)
(ego get: gioBoogleYoYo)
(ego get: gioBoogleRedCross)
(ego get: gioEressdy)
(ego get: gioAmmonia)
(ego get: gioKnife)
)
(EPILOGUE_N
(= gnChapter 6)
(curRoom newRoom: rCredits)
(return)
)
(RESUME_N
(curRoom setScript: soResume)
; actually we never reach this statement, but...
(return)
)
(RESTORE_N
(curRoom setScript: soRestore)
(return)
)
(EXIT_N
(= quit TRUE)
(return)
)
)
(if
(and
(< 0 gnChapter 6) ; chapter 1 to 5
(or gbTeleport gbDebugTeleport)
)
(= gbTeleport FALSE)
(curRoom newRoom: (RoomTeleport gnChapter))
else
;djm (MonoOut "chapter %d, select %d" gnChapter aChapter)
(switch aChapter
(INTRO_N
(curRoom newRoom: rPrologue1)
)
(TLA_N
(curRoom newRoom: rChapter1)
)
(ESCARPA_N
(curRoom newRoom: rChapter2)
)
(PERGOLA_N
(curRoom newRoom: rChapter3)
)
(ASTHENIA_N
(curRoom newRoom: rChapter4)
)
(TENEBROUS_N
(curRoom newRoom: rChapter5)
)
(else
; They wanna leave
(= quit TRUE)
)
)
)
)
)
(procedure (TipOfTheDay &tmp oTipStr)
; tip of the day
(if gbTipOfTheDay
(= oTipStr (MakeMessageText ALL ALL TIP_OF_THE_DAY gnNextTip 110))
(if oTipStr
(TextDialog oTipStr (String with: goDismissString) (MakeMessageText ALL ALL TIP_TITLE 1 110))
(= oTipStr NULL)
)
(++ gnNextTip)
; check to see if we should wrap around
(= oTipStr (MakeMessageText ALL ALL TIP_OF_THE_DAY gnNextTip 110))
(if oTipStr
(StringDispose oTipStr)
(= oTipStr NULL)
else
(= gnNextTip 1)
)
(SavePrefs)
)
)
(instance foBlackOpaque of OpaqueFeature)
(instance oBlackPlane of Plane
(properties
priority PRI_ROT_INV
picture -1
)
(method (init)
(super init: &rest)
(foBlackOpaque init: self)
)
)
(instance soFadeToTip of Script
(method (changeState newState &tmp oTipStr)
(switchto (= state newState)
(
(FadeToBlack TRUE 15 self TRUE)
)
(
; put a black plane over all
(oBlackPlane init: 0 0 lastScreenX lastScreenY)
(= ticks 1)
)
(
; put the color back so we can see the dialog
(FadeToBlack FALSE 100 self TRUE)
)
(
(TipOfTheDay)
(self dispose:)
)
)
)
)
(instance soResume of Script
(method (changeState newState &tmp oTipStr)
(switchto (= state newState)
(
(self setScript: soFadeToTip self)
)
(
(theGame autorestore:)
; if we get here some really bad happened
(oBlackPlane dispose:)
(self dispose:)
)
)
)
)
(instance soRestore of Script
(method (changeState newState &tmp oTipStr)
(switchto (= state newState)
(
(self setScript: soFadeToTip self)
)
(
(Open)
; we get here if they choose not to restore
(oBlackPlane dispose:)
(self dispose:)
)
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; VIEWS, FEATURES, PROPS AND THEIR RELATED SCRIPTS/CUEOBJECTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(instance oIntroButton of MessageButton
(properties
noun INTRO_N
module 200
font INTRO_BUTTON_FONT
mode teJustCenter
nSelectMethod #doit
nSelectValue INTRO_N
x BUTTON_X
y 96
vTileOff vButtonOffBg
vTileOn vButtonOnBg
nMinWidth 130
)
(method (init)
(= back gnButtonDownColor)
(= fore gnButtonUpColor)
(super init: &rest)
)
)
(instance oResumeButton of MessageButton
(properties
noun RESUME_N
module 200
font INTRO_BUTTON_FONT
mode teJustCenter
nSelectMethod #doit
nSelectValue RESUME_N
x 252
y BOTTOM_Y
vTileOff vButtonOffBg
vTileOn vButtonOnBg
nMinWidth 130
)
(method (init)
(= back gnButtonDownColor)
(= fore gnButtonUpColor)
; same margin on my left side as the buttons on the right side
(= x (- 639 (+ (oExitButton x?) (oExitButton nWidth?))))
(= x (Max 5 x)); never let the button go off the screen
(super init: &rest)
)
)
(instance oRestoreButton of MessageButton
(properties
noun RESTORE_N
module 200
font INTRO_BUTTON_FONT
mode teJustCenter
nSelectMethod #doit
nSelectValue RESTORE_N
x 100
y BOTTOM_Y
vTileOff vButtonOffBg
vTileOn vButtonOnBg
nMinWidth 130
)
(method (init)
(= back gnButtonDownColor)
(= fore gnButtonUpColor)
(super init: &rest)
; center button
(= x (- 316 (/ nWidth 2)))
(UpdateScreenItem self)
)
)
(instance oChapter1Button of MessageButton
(properties
noun TLA_N
module 200
font INTRO_BUTTON_FONT
mode teJustCenter
nSelectMethod #doit
nSelectValue TLA_N
x BUTTON_X
y 132
vTileOff vButtonOffBg
vTileOn vButtonOnBg
nMinWidth 130
)
(method (init)
(= back gnButtonDownColor)
(= fore gnButtonUpColor)
(super init: &rest)
(= line1 (AddLine oPickAChapter 434 (+ y LINE_OFFSET) x (+ y LINE_OFFSET) 200 LINE_COLOR 0 0 2))
)
)
(instance oChapter2Button of MessageButton
(properties
noun ESCARPA_N
module 200
font INTRO_BUTTON_FONT
mode teJustCenter
nSelectMethod #doit
nSelectValue ESCARPA_N
x BUTTON_X
y 168
vTileOff vButtonOffBg
vTileOn vButtonOnBg
nMinWidth 130
)
(method (init)
(= back gnButtonDownColor)
(= fore gnButtonUpColor)
(super init: &rest)
(= line2 (AddLine oPickAChapter 413 (+ y LINE_OFFSET) x (+ y LINE_OFFSET) 200 LINE_COLOR 0 0 2))
)
)
(instance oChapter3Button of MessageButton
(properties
noun PERGOLA_N
module 200
font INTRO_BUTTON_FONT
mode teJustCenter
nSelectMethod #doit
nSelectValue PERGOLA_N
x BUTTON_X
y 204
vTileOff vButtonOffBg
vTileOn vButtonOnBg
nMinWidth 130
)
(method (init)
(= back gnButtonDownColor)
(= fore gnButtonUpColor)
(super init: &rest)
(= line3 (AddLine oPickAChapter 389 (+ y LINE_OFFSET) x (+ y LINE_OFFSET) 200 LINE_COLOR 0 0 2))
)
)
(instance oChapter4Button of MessageButton
(properties
noun ASTHENIA_N
module 200
font INTRO_BUTTON_FONT
mode teJustCenter
nSelectMethod #doit
nSelectValue ASTHENIA_N
x BUTTON_X
y 240
vTileOff vButtonOffBg
vTileOn vButtonOnBg
nMinWidth 130
)
(method (init)
(= back gnButtonDownColor)
(= fore gnButtonUpColor)
(super init: &rest)
(= line4 (AddLine oPickAChapter 346 (+ y LINE_OFFSET) x (+ y LINE_OFFSET) 200 LINE_COLOR 0 0 2))
)
)
(instance oChapter5Button of MessageButton
(properties
noun TENEBROUS_N
module 200
font INTRO_BUTTON_FONT
mode teJustCenter
nSelectMethod #doit
nSelectValue TENEBROUS_N
x BUTTON_X
y 276
vTileOff vButtonOffBg
vTileOn vButtonOnBg
nMinWidth 130
)
(method (init)
(= back gnButtonDownColor)
(= fore gnButtonUpColor)
(super init: &rest)
(= line5 (AddLine oPickAChapter 275 (+ y LINE_OFFSET) x (+ y LINE_OFFSET) 200 LINE_COLOR 0 0 2))
)
)
; actually the credits button
(instance oEpilogueButton of MessageButton
(properties
noun EPILOGUE_N
module 200
font INTRO_BUTTON_FONT
mode teJustCenter
nSelectMethod #doit
nSelectValue EPILOGUE_N
x BUTTON_X
y 312
vTileOff vButtonOffBg
vTileOn vButtonOnBg
nMinWidth 130
)
(method (init)
(= back gnButtonDownColor)
(= fore gnButtonUpColor)
(super init: &rest)
)
)
(instance oExitButton of MessageButton
(properties
noun EXIT_N
module 200
font INTRO_BUTTON_FONT
mode teJustCenter
nSelectMethod #doit
nSelectValue EXIT_N
x BUTTON_X
y BOTTOM_Y
vTileOff vButtonOffBg
vTileOn vButtonOnBg
nMinWidth 130
)
(method (init)
(= back gnButtonDownColor)
(= fore gnButtonUpColor)
(super init: &rest)
)
)
(instance oTwinkle1 of Prop
(properties
view vTwinklingStars
loop 0
x 2
y 313
)
)
(instance oTwinkle2 of Prop
(properties
view vTwinklingStars
loop 1
x 609
y 279
)
)
(instance oTwinkle3 of Prop
(properties
view vTwinklingStars
loop 2
x 30
y 30
)
)
(instance oTwinkle4 of Prop
(properties
view vTwinklingStars
loop 3
x 516
y 50
)
)
(instance oTwinkle5 of Prop
(properties
view vTwinklingStars
loop 0
x 464
y 196
)
)
(instance oTwinkle6 of Prop
(properties
view vTwinklingStars
loop 2
x 420
y 429
)
)
(instance oTwinkle7 of Prop
(properties
view vTwinklingStars
loop 3
x 122
y 394
)
)
(instance voText of View)
(instance voLogo of View
(properties
view vLogo
x 48
y 231
)
)
(instance foAll of OpaqueFeature)
(instance oPickAChapter of Plane
(method (dispose)
(if line1
(DeleteLine line1 self)
(= line1 NULL)
)
(if line2
(DeleteLine line2 self)
(= line2 NULL)
)
(if line3
(DeleteLine line3 self)
(= line3 NULL)
)
(if line4
(DeleteLine line4 self)
(= line4 NULL)
)
(if line5
(DeleteLine line5 self)
(= line5 NULL)
)
(super dispose: &rest)
)
)
(instance roPickAChapter of TPRoom
(properties
picture pPickAChapter
)
(method (dispose)
(goMainMenu enable: TRUE)
(super dispose: &rest)
)
(method (init &tmp fp oTipStr pathName)
; Always load the system palette. This is not necessary,
; but is handy if we have loaded something that screwed
; the palette
(Palette PalLoad 999)
(oPickAChapter
priority: (- PRI_ROT_INV 1),
init: 0 0 lastScreenX lastScreenY
)
(= plane oPickAChapter)
(super init: &rest)
(goMusic1
playSound: S_PICK_A_CHAPTER
)
(= gnChapter 0)
(oIntroButton oSelectNotify: oRoomChosen, init: oPickAChapter)
(oChapter1Button oSelectNotify: oRoomChosen, init: oPickAChapter)
(oChapter2Button oSelectNotify: oRoomChosen, init: oPickAChapter)
(oChapter3Button oSelectNotify: oRoomChosen, init: oPickAChapter)
(oChapter4Button oSelectNotify: oRoomChosen, init: oPickAChapter)
(oChapter5Button oSelectNotify: oRoomChosen, init: oPickAChapter)
(oEpilogueButton oSelectNotify: oRoomChosen, init: oPickAChapter)
(oExitButton oSelectNotify: oRoomChosen, init: oPickAChapter)
(= pathName (String new:))
(pathName format: "%s\%s" curSaveDir "torinsg.cat")
(= fp (FileIO FileOpen (pathName data?) fRead))
(pathName dispose:)
(if (!= fp -1)
(oRestoreButton oSelectNotify: oRoomChosen, init: oPickAChapter)
(FileIO FileClose fp)
)
(foAll init:)
; Only create the resume button of we have an autosave game
(= fp (FileIO FileOpen "autosave.cat" fRead))
(if
(or
(!= fp -1)
(SaveGame SGCheckSaveGame "Autosave" 0 (KString StrGetData version))
)
; create after exit button, it's alignment depends on oExitButton
(oResumeButton oSelectNotify: oRoomChosen, init: oPickAChapter)
)
; only close the file if it was actually opened
(if (!= fp -1) (FileIO FileClose fp))
(oTwinkle1 init:, cycleSpeed (Random 7 17), setCycle: Forward)
(oTwinkle2 init:, cycleSpeed (Random 7 17), setCycle: RandCycle)
(oTwinkle3 init:, cycleSpeed (Random 7 17), setCycle: RandCycle)
(oTwinkle4 init:, cycleSpeed (Random 7 17), setCycle: RandCycle)
(oTwinkle5 init:, cycleSpeed (Random 7 17), setCycle: Forward)
(oTwinkle6 init:, cycleSpeed (Random 7 17), setCycle: RandCycle)
(oTwinkle7 init:, cycleSpeed (Random 7 17), setCycle: RandCycle)
(FadeToBlack FALSE 15 goHandsOnWhenCued TRUE)
(goMainMenu disable:)
)
)
Did you notice the "
Created for Domain, 1995" comment at the header there?
It seems that it's present in almost all the source files.
So I got curios, and did a bit of digging. Turns out the working title for this game was either
Domain or
Domain's Quest:
New Adventure Games For 1995
From the adventure game people at Sierra Publishing, the word is that Al Lowe (designer of Leisure Suit Larry, and Freddy Pharkas) has teamed up with Andy Hoyos (Art Director of King's Quest V and VII, Quest for Glory IV) to create a new high fantasy game called "Domain." No word about whether this game is a follow-up or sequel to either Quest for Glory IV or Betrayal of Krondor.
Good News, Bad News. And a Great Family Christmas Product.
The bad news is there won't be a new King's Quest next Christmas. The good news is that Designer Al Lowe, Producer Mark Seibert and Senior Art Director Andy Hoyos (all long-time Sierra game development veterans), have joined forces to produce a new family game suitable for all ages. They promise it will be full of cute humor, great puzzles, and fun characters. They also promise it will be available in time for Christmas.
This game was referred to in the last issue of InterAction as Domain's Quest, but the new (and hopefully final), name is Torin's Passage. If you think a name change this big is a good trick, check out the Boogie. (The cute little purple character that looks like a cross between a cat and a miniature giraffe.) The Boogie can change into any other object at will (like an ax or a gift). Cool.