Author Topic: LSL7's AUTOTP / Digital Archeology  (Read 1754 times)

0 Members and 1 Guest are viewing this topic.

Offline OmerMor

LSL7's AUTOTP / Digital Archeology
« on: June 16, 2023, 09:44:26 AM »
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:
Code: (SCI) [Select]
#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:
Code: (SCI) [Select]
gbDebugTeleport         243   = FALSE ; is auto-teleport on for this game?

And we also find it in PIKACHPT.SC. Here's the full script:
Code: (SCI) [Select]

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



Offline Collector

Re: LSL7's AUTOTP / Digital Archeology
« Reply #1 on: July 22, 2023, 08:44:31 PM »
I have been trying to see if I could restore the debug to Torin's, but Companion does not like the PikAChpt script. it chokes at lines 15 and 630
KQII Remake Pic


SMF 2.0.19 | SMF © 2021, Simple Machines
Simple Audio Video Embedder

Page created in 0.073 seconds with 22 queries.