Community

General and Everything Else => The Games and other Sierra Adventure stuff => Topic started by: MusicallyInspired on November 30, 2018, 11:16:08 AM

Title: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: MusicallyInspired on November 30, 2018, 11:16:08 AM
He said "none of my kids want this junk" and it took a fan to convince him that the community would find it invaluable.

https://www.ebay.com/sch/al_lowe/m.html?_nkw=&_armrs=1&_ipg=&_from= (https://www.ebay.com/sch/al_lowe/m.html?_nkw=&_armrs=1&_ipg=&_from=)

Here's an interview video by Metal Jesus Rocks.

https://www.youtube.com/watch?v=v7AgSapZAi8 (https://www.youtube.com/watch?v=v7AgSapZAi8)
Title: Re: Al Lowe selling original Sierra games source code on ebay!!
Post by: OmerMor on November 30, 2018, 02:03:02 PM
Wow!
I can't believe he's actually selling this stuff...

I guess since he's publicly selling the source code now, I can reveal that some of the Sierra source code I managed to obtain was kindly shared with me by Al. However I think I saw some floppies in this video (e.g. Winnie the Poo) which he forgot to send me. I hope the happy buyer will archive and publish everything.
Title: Re: Al Lowe selling original Sierra games source code on ebay!!
Post by: lskovlun on November 30, 2018, 02:05:29 PM
However I think I saw some floppies in this video (e.g. Winnie the Poo) which he forgot to send me.
I suppose this is because they are Apple II floppies which he can't read directly.
Title: Re: Al Lowe selling original Sierra games source code on ebay!!
Post by: OmerMor on November 30, 2018, 02:20:06 PM
I guess you're right!
Title: Re: Al Lowe selling original Sierra games source code on ebay!!
Post by: lance.ewing on December 01, 2018, 03:30:29 AM
I can't believe he's actually selling this stuff...

It does seem strange, especially given this:

Quote
Realize that, while you値l have my data as of the day of Larry 1痴 creation, you will not own the intellectual property rights to the game, the code, the art, or anything else. Nor do I. The I. P. rights were sold over and over again, until they are now owned by a German game company.

It is crazy how much the bidding is up to already.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: Kawa on December 01, 2018, 06:32:11 AM
It's not that strange. Back when SCI Studio was still relevant, I contacted Mr. Lowe via email about permission to develop a Larry 4. Shared a concept and everything, and he gave me basically the same spiel -- I had his blessing to make Larry 4 - The Missing Floppies, but I was to absolutely not name it Leisure Suit Larry 4 - The Missing Floppies. He could only permit me to use the Larry Laffer character, not the LSL name. Which was about what Kon-Tiki and I'd expected.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lskovlun on December 01, 2018, 11:34:57 AM
So you called it The Dating Pool instead? How's it coming along?
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: Kawa on December 01, 2018, 12:52:18 PM
The Dating Pool is not Larry 4, lol. Though there is some Larry influence in there.

I still have an old AGS project that was supposed to become Larry 4 after we gave up on the new SCI Studio ever coming out. Who knows, it might become the second SCI11+ game... probably not, though. I'd like to make it at least pass for SCI1 ;D
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lance.ewing on December 01, 2018, 01:29:01 PM
It's not that strange. Back when SCI Studio was still relevant, I contacted Mr. Lowe via email about permission to develop a Larry 4. Shared a concept and everything, and he gave me basically the same spiel -- I had his blessing to make Larry 4 - The Missing Floppies, but I was to absolutely not name it Leisure Suit Larry 4 - The Missing Floppies. He could only permit me to use the Larry Laffer character, not the LSL name. Which was about what Kon-Tiki and I'd expected.

Yeah, I guess I'm not so surprised that Al is doing this, since he has always supported the fans. I'm surprised that he is allowed to do this though. Obviously we've had access to the AGI "source" for Larry 1 since the first fan made AGI tools came out, so its not like its selling a secret part of the intellectual property, but I'd be surprised if the current owners of the IP weren't frowning a bit at these auctions. Still, wish I could afford a bid on them. I wonder who is bidding so high and if they have an interest in the technical side.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: Kawa on December 01, 2018, 01:33:12 PM
Plot twist: the top bidder is the current owner of the IP.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: Collector on December 01, 2018, 08:50:10 PM
Obviously we've had access to the AGI "source" for Larry 1 since the first fan made AGI tools came out
Except I would love to see the real source, especially the comments, etc.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: MusicallyInspired on December 01, 2018, 11:33:45 PM
I wonder if the source to the SCI interpreter itself is included somehow somewhere with what he has. Doubtful, I guess...
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: Kawa on December 02, 2018, 03:43:30 AM
I wonder if the source to the SCI interpreter itself is included somehow somewhere with what he has. Doubtful, I guess...
I figure someone on the systems team would be more likely to have those.

☐ SCI0
☐ SCI1
☑ SCI11
☑ Some version of SCI3?
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lance.ewing on December 02, 2018, 05:46:11 AM
Except I would love to see the real source, especially the comments, etc.

The disk slack space would be interesting as well. I hope that whoever wins it thinks to look at that. Still 8 days to run and its already over $8000. Why are they pushing it up so quickly?
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: OmerMor on December 02, 2018, 01:47:44 PM
I wonder if the source to the SCI interpreter itself is included somehow somewhere with what he has. Doubtful, I guess...
I figure someone on the systems team would be more likely to have those.

Kawa is right.
There's no interpreter source in Al's archive.
And indeed some system programmers kept source code to a few interpreter versions.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: OmerMor on December 02, 2018, 01:51:32 PM
I would love to see the real source, especially the comments, etc.

If the buyer won't publish the stuff, I'm certain someone would leak it...  ;)
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: troflip on December 07, 2018, 03:07:03 PM
Aaaaaand all the Larry stuff has vanished...
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: Kawa on December 07, 2018, 03:45:03 PM
In the "bought by a hoarder" sense or in the "bitrotted away" sense?
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: MusicallyInspired on December 07, 2018, 03:49:47 PM
The auctions were cancelled.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lskovlun on December 07, 2018, 04:33:40 PM
Well, the Larry ones were. His copy of Bop-A-Bet is still up. ;) Guess someone didn't like him selling authentic source code...
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lance.ewing on December 12, 2018, 03:56:44 PM
Saw this in the Youtube comments a short while ago:

Quote from: thejobloshow
A few people on the Sierra Gamers Facebook group reached out to Al and said it was because Activision sent a cease-and-desist. Activision doesn't own the IP for Larry but was compelled to act because some of the source code might also be used in King's Quest and Space Quest, which AV does own. Al stated that AV is wrong but doesn't want to take legal action because it will cost more than what the source code is going for.

https://www.facebook.com/groups/273746983994/

And this quote from the mentioned Facebook page:

Quote from: Britton Mathews
I called Al yesterday to ask him.
He received a letter from an outside law firm hired by Activison that ordered him to take it down. He said in the letter Activison understood they don稚 own the IP to LSL but that the source code probably contained shared code to Kings Quest and Space Quest. For that reason they sent him the letter.

Al and I agreed that he was right, but by the time you hire an attorney to prove you池e right, it would have cost more than what he would have got from the auctions.

If I had to take a guess, this is one of those scenarios where Activison is compelled to act. You can稚 pick and choose when to enforce IP rights. If they chose not to go after Al and then someone else releases source code that they actually care about, attorneys can point to ALS scenario and say Activison is being partial and selective in their enforcement of their IP rights, which you can稚 do under US law.

Probably a good thing that Al didn't yet start the KQ3 and PQ1 auctions, which apparently he was intending to do.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: Collector on December 13, 2018, 03:33:08 AM
I would love to see the KQ3 source.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: EricOakford on December 13, 2018, 08:31:48 PM
So, Activision killed the auctions. In all fairness, while they don't own Larry, they do own much of the other Sierra franchises, and they share engines.

I imagine the legal issue is referring to the system scripts that the AGI and SCI games all share. There's just one problem, though: many of those scripts are also in freely available demos. I took advantage of that fact when creating the SCI01 template game, using the QFG2 demo as the foundation and the interpreter from the EGA 1990 Christmas Card.

Quote from: Briton Mathews
If I had to take a guess, this is one of those scenarios where Activison is compelled to act. You can稚 pick and choose when to enforce IP rights. If they chose not to go after Al and then someone else releases source code that they actually care about, attorneys can point to ALS scenario and say Activison is being partial and selective in their enforcement of their IP rights, which you can稚 do under US law.

That would be true to an extent with trademarks, but it's completely wrong copyright-wise. A copyright owner can, in fact, pick and choose when to enforce their rights. The worst thing that would happen by ignoring copyright violations is less damages awarded to the copyright owner in a lawsuit.
I'm no lawyer, by the way; I just read the TV Tropes article (https://tvtropes.org/pmwiki/pmwiki.php/UsefulNotes/Copyright) regarding copyright law (it explains that defending a copyright is not required, simply allowed), as well as this (https://www.templetons.com/brad/copymyths.html) article regarding copyright myths (the relevant one is number 5).
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: pmkelly on December 15, 2018, 08:30:42 PM
I imagine the legal issue is referring to the system scripts that the AGI and SCI games all share. There's just one problem, though: many of those scripts are also in freely available demos.

I suspect with regards to these their objection was about the source code being released; the script binaries (which the AGI community has been able to decompile) are publicly available separately.

Having said that, i think this is really unfortunate news, and means we may never get to see the original sources to Larry or Sierra's other titles. The only circumstances under which I could see them becoming public is if Activision could somehow be convinced to donate the sources to the Internet Archive for the purposes of preserving an important piece of gaming history - but I think any such efforts are unlikely to be successful.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lance.ewing on December 18, 2018, 01:26:05 PM
Having said that, i think this is really unfortunate news, and means we may never get to see the original sources to Larry or Sierra's other titles. The only circumstances under which I could see them becoming public is if Activision could somehow be convinced to donate the sources to the Internet Archive for the purposes of preserving an important piece of gaming history - but I think any such efforts are unlikely to be successful.

Hi Peter !   :)

Really great to see you join the forum. Hope we see a few more posts from you. It's been a long time. Any thoughts on doing anything in the AGI community again?

I've been dabbling with a C# AGI interpreter recently, in fact Collector will be happy to know I've got tired of working on my Vectrex emulator and decided to switch back to the C# AGI interpreter. Currently working on playing sounds.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: OmerMor on December 18, 2018, 02:13:24 PM
Having said that, i think this is really unfortunate news, and means we may never get to see the original sources to Larry or Sierra's other titles.

Hi Peter,
Don't despair. Here's the source for LSL1's Lefty's bar (RM15):

RM15.CG
Code: [Select]
[logics for room 15 -- rmInsideBar
[    "Leisure Suit Larry in the Land of the Lounge Lizards"
[    by Al Lowe

%include  "rm15.msg"
%include  "gamedefs.h"



#define   L_PEEPHOLE               0
#define   L_CEILING_FAN            1
#define   L_JUKEBOX                2
#define   L_MEN_ON_STOOL           0
#define   L_GIRL_ON_STOOL          1
#define   L_EGO_ON_STOOL           2
%define   BAR_Y                    136
%define   WAITING_FOR_PASSWORD     3


%define   legCycling               lf0
%define   bartenderWandering       lf1
%define   boreCycling              lf2
%define   nearJukeBox              lf3
%define   nearGirl                 lf4
%define   nearBore                 lf5
%define   nearEmptyStool           lf6
%define   nearMen                  lf7
%define   nearDoor                 lf8
%define   doorScriptDone           lf9
%define   startJukeBox             lf10
%define   orderedAWhiskey          lf11
%define   orderedABeer             lf12
%define   orderedAWine             lf13
%define   staggering               lf14
%define   tookADrink               lf15
%define   beenToldPrice            lf16

%define   heardJoke1               lf21
%define   heardJoke2               lf22
%define   heardJoke3               lf23
%define   heardJoke4               lf24
%define   heardJoke5               lf25
%define   heardJoke6               lf26
%define   heardJoke7               lf27
%define   heardJoke8               lf28
%define   heardJoke9               lf29


%define   jukeBoxTimer             lv0
%define   bartenderTimer           lv1
%define   legCycles                lv2
%define   boreTalkCycles           lv3
%define   jokeSeconds              lv4
%define   doorTimer                lv5
%define   doorScript               lv6
%define   drinkCount               lv7
%define   staggerCycles            lv8
%define   drunkSeconds             lv9
%define   joke                     lv10
%define   tipCount                 lv11


%object   aDoor                    1
%object   aPeepHole                2
%object   aFan                     3
%object   aJukeBox                 4
%object   aGirl                    5
%object   aBore                    6
%object   aBartender               7



if (initLog)
     {
     SetHorizon( 99);

     LoadPic( currentRoom);
     DrawPic( currentRoom);
     DiscardPic( currentRoom);

     LoadSound( mTitle);

     LoadView( vPimpDoor);
     LoadView( vBarInterior);
     LoadView( vBarGreaser);
     LoadView( vBarFlys);
     LoadView( vBarDoor);
     LoadView( vBartender);


     LoadView( vPainting);
     AddToPic( vPainting, 0, 0, 81, 69, 4, 4);
          [view, loop, cel,  x,   y, obj priority, box priority
     DiscardView( vPainting);

     AddToPic( vBarFlys, 0, 0, 112, 128, 11, 0);
     AddToPic( vBarFlys, 0, 1, 101, 128, 11, 0);


     AnimateObj( aDoor);
     IgnoreBlocks( aDoor);
     IgnoreObjs( aDoor);
     Position( aDoor, 142, 150);
     SetView( aDoor, vPimpDoor);
     SetCel( aDoor, 0);
     SetPriority( aDoor, 11);
     Draw( aDoor);
     work = DOOR_CYCLE_TIME;
     CycleTime( aDoor, work);
     StopUpdate( aDoor);

     AnimateObj( aPeepHole);
     SetView( aPeepHole, vBarInterior);
     SetLoop( aPeepHole, L_PEEPHOLE);
     FixLoop( aPeepHole);
     SetCel( aPeepHole, 0);
     SetPriority( aPeepHole, 12);
     Position( aPeepHole, 143, 110);

     AnimateObj( aFan);
     IgnoreHorizon( aFan);
     Position( aFan, 66, 66);
     SetView( aFan, vBarInterior);
     SetLoop( aFan, L_CEILING_FAN);
     FixLoop( aFan);
     SetCel( aFan, 0);
     Draw( aFan);
     CycleTime( aFan, two);

     AnimateObj( aJukeBox);
     IgnoreBlocks( aJukeBox);
     IgnoreObjs( aJukeBox);
     SetView( aJukeBox, vBarInterior);
     SetLoop( aJukeBox, L_JUKEBOX);
     FixLoop( aJukeBox);
     SetCel( aJukeBox, 1);
     Position( aJukeBox, 16, 128);
     SetPriority( aJukeBox, 11);
     Draw( aJukeBox);
     StopUpdate( aJukeBox);

     AnimateObj( aGirl);
     IgnoreBlocks( aGirl);
     IgnoreObjs( aGirl);
     SetView( aGirl, vBarFlys);
     SetLoop( aGirl, L_GIRL_ON_STOOL);
     SetCel( aGirl, 0);
     SetPriority( aGirl, 11);
     Position( aGirl, 65, 128);
     Draw( aGirl);
     CycleTime( aGirl, two);

     AnimateObj( aBore);
     IgnoreBlocks( aBore);
     SetView( aBore, vBarGreaser);
     SetLoop( aBore, FACING_LEFT);
     SetPriority( aBore, 11);
     Position( aBore, 77, 128);
     Draw( aBore);

     AnimateObj( aBartender);
     SetView( aBartender, vBartender);
     SetLoop( aBartender, 0);
     SetCel( aBartender, 0);
     Position( aBartender, 106, 101);
     Draw( aBartender);
     StopUpdate( aBartender);

     if (previousRoom == rmBackroom)
          {
          egoX = 141;
          egoY = 148;
          }
     else
          {
          if (previousRoom == rmHallway)
               {
               egoX = 39;
               egoY = 108;
               }
          else
               {
               egoX = 76;
               egoY = 167;
               }
          }
     PositionV( ego, egoX, egoY);
     Draw( ego);

     Random( 15, 32, bartenderTimer);
     Random( 4, 32, legCycles);
     Random( 15, 32, boreTalkCycles);

     ShowPic( );

     Return( );

     }                                  [    end initLOG



if (Posn( ego, 45, 120, 133, 159))      [    near bar
     {
     SetPriority( ego, 12);
     }
else
     {
     ReleasePriority( ego);
     }

Reset( nearJukeBox);
if (Posn( ego, 0, 117, 33, 131))
     {
     Set( nearJukeBox);
     }

Reset( nearGirl);
if (Posn( ego, 55, 0, 78, BAR_Y))
     {
     Set( nearGirl);
     Set( nearPerson);
     }

Reset( nearBore);
if (Posn( ego, 71, 0, 87, BAR_Y))
     {
     Set( nearBore);
     Set( nearPerson);
     }

Reset( nearEmptyStool);
if (Posn( ego, 85, 0, 99, BAR_Y))
     {
     Set( nearEmptyStool);
     }

Reset( nearMen);
if (Posn( ego, 94, 0, 124, BAR_Y))
     {
     Set( nearMen);
     Set( nearPerson);
     }

Reset( nearDoor);
if (Posn( ego, 132, 137, 149, 154))
     {
     Set( nearDoor);
     }


[*****
:handleInput
[*****

if (!haveInput)               {goto noInput;}


[    Handle the pimp door sequence.

if (doorScript != WAITING_FOR_PASSWORD)
     {
     if (Said( ken$sent$me))
          {
          Print( 6);
          }
     }
else
     {
     Set( doorScriptDone);
     if (Said( ken$sent$me))
          {
          doorScript = 100;
          doorTimer = 0;
          }
     Set( haveMatch);
     unknownWord = 0;
     }

if ((Said( ask, anyword, password) ||
     Said( ask, password)))
     {
     if (!nearPerson)
          {
          Set( notCloseEnough);
          }
     else
          {
          Print( 68);
          }
     }

if ((Said( unlock, door) ||
     Said( open, door)))
     {
     if (!nearDoor)
          {
          Set( notCloseEnough);
          }
     else
          {
          Print( 47);
          }
     }

if ((Said( look, peephole, rol) ||
     Said( look$in, peephole, rol) ||
     Said( look, door) ||
     Said( look$in, door) ||
     Said( look, window, rol) ||
     Said( look$in, window, rol)))
     {
     Print( 65);
     }

if ((Said( break, down, door) ||
     Said( break, door, rol) ||
     Said( hit, door)))
     {
     if (!nearDoor)
          {
          Set( notCloseEnough);
          }
     else
          {
          Print( 55);
          }
     }

if (Said( knock, rol))
     {
     if (!nearDoor)
          {
          Set( notCloseEnough);                   
          }
     else
          {
          if (doorScript)
               {
               Print( 46);
               }
          else
               {
               Set( programControl);
               StopMotion( ego);
               Print( 5);
               doorTimer = 3;
               }
          }
     }

if ((Said( unlock, door, rol) ||
     Said( use, key, rol)))
     {
     if (!nearDoor)
          {
          Set( notCloseEnough);
          }
     else
          {
          Print( 63);
          }
     }


[    General purpose looks.

if ((Said( look) ||
     Said( look, room) ||
     Said( look, bar)))
     {
     Print( 1);
     }

if ((Said( tip, bartender) ||
     Said( give, bartender, money) ||
     Said( give, money, bartender) ||
     Said( give, tip, bartender)))
     {
     if (currentStatus != ON_BAR_STOOL)
          {
          Print( 33);
          }
     else
          {
          if (!dollars > 4)
               {
               Print( 76);
               }
          else
               {
               ++tipCount;
               dollars -= 5;
               if (tipCount == 1)                 {Print( 77);}
               if (tipCount == 2)                 {Print( 78);}
               if (tipCount == 3)                 {Print( 79);}
               if (tipCount == 4)                 {Print( 80);}
               if (tipCount  > 4)                 {Print( 81);}
               }
          }
     }

if (Said( look, bartender))
     {
     Print( 82);
     Print( 83);
     }

if (Said( buy, bartender, drink))
     {
     if (currentStatus != ON_BAR_STOOL)
          {
          Print( 33);
          }
     else
          {
          Print( 69);
          }
     }

if (Said( buy, round))
     {
     if (currentStatus != ON_BAR_STOOL)
          {
          Print( 33);
          }
     else
          {
          if (!beenToldPrice)
               {
               Set( beenToldPrice);
               Print( 70);
               }
          else
               {
               dollars = 0;
               Print( 71);
               }
          }
     }

if ((Said( give, bartender, money) ||
     Said( give, money, bartender) ||
     Said( pay, lefty) ||
     Said( bribe, lefty)))
     {
     Print( 72);
     }

if (Said( look, moose))
     {
     Print( 45);
     }

if (Said( look, girl))
     {
     Print( 48);
     }

if ((Said( look, man) ||
     Said( look, people)))
     {
     Print( 53);
     }

if (Said( look, fan))
     {
     Print( 49);
     Print( 50);
     }

if (Said( look, painting))
     {
     Print( 51);
     }

if ((Said( touch, girl) ||
     Said( touch, girl, leg) ||
     Said( touch, leg) ||
     Said( look, leg) ||
     Said( feel, leg) ||
     Said( feel, girl, leg) ||
     Said( feel, girl)))
     {
     if (!nearGirl)
          {
          Set( notCloseEnough);
          }
     else
          {
          Print( 67);
          }
     }

if ((Said( pick$up, girl) ||
     Said( ask, girl, dance) ||
     Said( dance, with, girl) ||
     Said( buy, girl, drink) ||
     Said( kiss, girl) ||
     Said( talk, girl)))
     {
     if (!nearGirl)
          {
          Set( notCloseEnough);
          }
     else
          {
          Print( 60);
          Print( 56);
          Print( 57);
          }
     }

if ((Said( listen, man) ||
     Said( talk, man)))
     {
     if ((nearBore || currentStatus == ON_BAR_STOOL))
          {
          Print( 59);
          }
     else
          {
          if (nearMen)
               {
               Print( 61);
               }
          else
               {
               Set( notCloseEnough);
               }
          }
     }

if ((Said( look, jukebox) ||
     Said( look$in, jukebox)))
     {
     if (!nearJukeBox)
          {
          Set( notCloseEnough);
          }
     else
          {
          Print( 64);
          }
     }

if ((Said( play, jukebox) ||
     Said( use, jukebox) ||
     Said( play, music) ||
     Said( put, anyword, dollar, jukebox) ||
     Said( put, dollar, jukebox) ||
     Said( put, money, jukebox)))
     {
     if (!nearJukeBox)
          {
          Set( notCloseEnough);
          }
     else
          {
          Print( 4);
          dollars -= 1;
          Set( startJukeBox);
          }
     }

if ((Said( use, hammer, door) ||
     Said( open, door, use, hammer) ||
     Said( hit, door, with, hammer) ||
     Said( use, hammer, open, door) ||
     Said( use, hammer, door) ||
     Said( use, hammer, on, door) ||
     Said( hammer, on, door)))
     {
     if (!nearDoor)
          {
          Set( notCloseEnough);
          }
     else
          {
          if (!Has( iHammer))
               {
               Set( dontHaveIt);
               }
          else
               {
               Print( 73);
               }
          }
     }


[    Handle the purchase of libations.

if ((Said( order, drink) ||
     Said( buy, drink, wino) ||
     Said( buy, wino, drink) ||
     Said( buy, drink) ||
     Said( drink) ||
     Said( talk, bartender)))
     {
     if (currentStatus != ON_BAR_STOOL)
          {
          Print( 20);
          }
     else
          {
          Print( 21);
          }
     }

if ((Said( wine) ||
     Said( give, me, wine) ||
     Said( get, wine) ||
     Said( order, wine)))
     {
     if (currentStatus != ON_BAR_STOOL)
          {
          Print( 33);
          }
     else
          {
          if (script && script < 5)
               {
               Print( 40);
               }
          else
               {
               Print( 36);
               Print( 37);
               Set( orderedAWine);
               script = 0;
               Set( scriptDone);
               }
          }
     }

if ((Said( beer) ||
     Said( give, me, beer) ||
     Said( get, beer) ||
     Said( order, beer)))
     {
     if (currentStatus != ON_BAR_STOOL)
          {
          Print( 33);
          }
     else
          {
          if (script && script < 5)
               {
               Print( 40);
               }
          else
               {
               Print( 23);
               Set( orderedABeer);
               script = 0;
               Set( scriptDone);
               }
          }
     }

if ((Said( booze) ||                    [    Generic non-handled liquors.
     Said( give, me, booze) ||
     Said( get, booze) ||
     Said( champagne) ||
     Said( give, me, champagne) ||
     Said( get, champagne) ||
     Said( order, champagne) ||
     Said( order, booze)))
     {
     if (currentStatus != ON_BAR_STOOL)
          {
          Print( 33);
          }
     else
          {
          if (script && script < 5)
               {
               Print( 40);
               }
          else
               {
               Print( 54);
               }
          }
     }

if ((Said( light, beer) ||
     Said( give, me, light, beer) ||
     Said( get, light, beer) ||
     Said( order, light, beer)))
     {
     if (currentStatus != ON_BAR_STOOL)
          {
          Print( 33);
          }
     else
          {
          if (script && script < 5)
               {
               Print( 40);
               }
          else
               {
               Print( 52);
               }
          }
     }

if ((Said( whiskey) ||
     Said( give, me, whiskey) ||
     Said( get, whiskey) ||
     Said( order, whiskey)))
     {
     if (currentStatus != ON_BAR_STOOL)
          {
          Print( 33);
          }
     else
          {
          if (script && script < 5)
               {
               Print( 40);
               }
          else
               {
               Print( 22);
               Set( orderedAWhiskey);
               script = 0;
               Set( scriptDone);
               }
          }
     }

if (Said( drink, whiskey))
     {
     if (!Has( iWhiskey))
          {
          Set( dontHaveIt);
          }
     else
          {
          if (currentStatus != ON_BAR_STOOL)
               {
               Print( 34);
               }
          else
               {
               Set( tookADrink);
               Drop( iWhiskey);
               Print( 39);
               }
          }
     }



[    Handle mounting, and dismounting, of stool.

if ((Said( sit) ||
     Said( sit, down)||
     Said( sit, bar)||
     Said( mount, stool)||
     Said( mount, bar, stool)||
     Said( get, on, stool) ||
     Said( sit, on, stool) ||
     Said( sit, on, bar, stool) ||
     Said( sit, down, on, stool) ||
     Said( sit, down, on, bar, stool) ||
     Said( sit, bar, stool) ||
     Said( sit, stool)))
     {
     if (currentStatus == ON_BAR_STOOL)
          {
          Print( 3);
          }
     else
          {
          if (!nearEmptyStool)
               {
               Set( notCloseEnough);                   
               }
          else
               {
               currentStatus = ON_BAR_STOOL;
               IgnoreBlocks( ego);
               SetView( ego, vBarFlys);
               SetLoop( ego, L_EGO_ON_STOOL);
               RepositionTo( ego, 90, 128);
               StopMotion( ego);
               Set( programControl);

               StopCycling( aBore);
               jokeSeconds = 15;        [    Seconds(+7) before first joke.
               boreTalkCycles = 0;      [    Turn off his random talking.
               }
          }
     }


if ((Said( leave, stool) ||
     Said( leave, bar, stool) ||
     Said( get, off, stool) ||
     Said( get, off, bar, stool) ||
     Said( get, up) ||
     Said( get, off) ||
     Said( get, down) ||
     Said( stand, up) ||
     Said( stand)))
     {
     if (currentStatus != ON_BAR_STOOL)
          {
          Print( 2);
          }
     else
          {
          if (script && script < 5)
               {
               Print( 40);
               }
          else
               {
               SetView( ego, vEgo);
               StartMotion( ego);
               Reset( programControl);
               ObserveBlocks( ego);
               RepositionTo( ego, 90, 131);

               SetLoop( aBore, FACING_LEFT);
               StopCycling( aBore);
               Random( 24, 32, boreTalkCycles); [ Cycles before talking to girl.
               jokeSeconds = 0;              [    No more jokes.

               if (!drunkSeconds)
                    {
                    currentStatus = NORMAL;
                    }
               else
                    {
                    currentStatus = DRUNK;
                    Set( handsOff);
                    PreventInput();
                    Print( 41);
                    }
               }
          }
     }


if ((Said( kiss, off, rol) ||
     Said( fuck$you, rol) ||
     Said( damn, rol) ||
     Said( go, hump, rol) ||
     Said( shut, up, rol) ||
     Said( get, lost, rol)))
     {
     if (currentStatus != ON_BAR_STOOL)
          {
          Print( 44);
          }
     else
          {
          CurrentLoop( aBore, work);
          if (work != FACING_RIGHT)
               {
               Print( 62);
               }
          else
               {
               Print( 43);

               [    Make him sulk awhile before he starts talking to the girl.
               SetLoop( aBore, FACING_LEFT);
               StopCycling( aBore);
               Reset( boreCycling);
               Random( 123, 234, boreTalkCycles);
               Random( 44, 88, jokeSeconds); [    seconds till he talks to ego.
               }
          }
     }


[*****
:noInput
[*****

if (aSecondPassed)
     {
     --jukeBoxTimer;
     if (jukeBoxTimer == 1 && !soundOn)
          {
          Set( musicDone);
          }

     --bartenderTimer;
     if (bartenderTimer == 1)
          {
          Toggle( bartenderWandering);
          if (bartenderWandering)
               {
               Random( 4, 12, bartenderTimer);
               StartUpdate( aBartender);
               Wander( aBartender);
               }
          else
               {
               Random( 12, 33, bartenderTimer);
               SetLoop( aBartender, FACING_FRONT);
               ForceUpdate( aBartender);
               StopUpdate( aBartender);
               }
          }

     --doorTimer;
     if (doorTimer == 1)
          {
          Set( doorScriptDone);
          }

     if (currentStatus == DRUNK)
          {
          --drunkSeconds;
          if (drunkSeconds == 41)
               {
               Print( 66);
               }

          if (drunkSeconds == 1)
               {
               --drunkSeconds;
               staggerCycles = 0;
               AcceptInput();
               ReleaseLoop( ego);
               PlayerControl();
               Reset( programControl);
               currentStatus = NORMAL;
               Reset( handsOff);
               Print( 42);
               }
          }

     --jokeSeconds;
     if (jokeSeconds == 7)
          {
          SetLoop( aBore, FACING_RIGHT);
          StartCycling( aBore);         [    He's starting a new joke
          }

     if (jokeSeconds == 1)
          {
          if (typing)
               {
               jokeSeconds = 4;
               }
          else
               {
               Random( 20, 45, jokeSeconds); [    seconds before he starts again
               StopCycling( aBore);          [    He's starting a new joke

               if ((!heardJoke1 ||
                    !heardJoke2 ||
                    !heardJoke3 ||
                    !heardJoke4 ||
                    !heardJoke5 ||
                    !heardJoke6 ||
                    !heardJoke7 ||
                    !heardJoke8 ||
                    !heardJoke9))
                    {
                    :pickAJoke;
                    Random( 11, 19, joke);   [    Pick a punch line.
                    work = joke;
                    work += 210;             [    Because flags are 221-229.
                    if (IssetV( work))       [    Be sure it's a new one.
                         {
                         goto pickAJoke;
                         }

                    SetV( work);
                    Print( 10);
                    PrintV( joke);
                    Print( 58);
                    }
               }
          }
     }


--boreTalkCycles;
if (boreTalkCycles == 1)
     {
     Random( 23, 45, boreTalkCycles);
     Toggle( boreCycling);
     if (boreCycling)
          {
          StartCycling( aBore);
          }
     else
          {
          StopCycling( aBore);
          }
     }


if (scriptDone)
     {
     Reset( scriptDone);
     ++script;

     if (script == 1)
          {
          bartenderTimer = 0;
          StartUpdate( aBartender);
          MoveObj( aBartender, 106, 102, 1, scriptDone);
          }

     if (script == 2)
          {
          SetLoop( aBartender, FACING_FRONT);
          StopUpdate( aBartender);
          ForceUpdate( aBartender);
          scriptTimer = 4;
          }

     if (script == 3)
          {
          StartUpdate( aBartender);
          MoveObj( aBartender, 90, 102, 1, scriptDone);
          }

     if (script == 4)
          {
          SetLoop( aBartender, FACING_FRONT);
          StopUpdate( aBartender);
          ForceUpdate( aBartender);
          scriptTimer = 3;
          }

     if (script == 5)
          {
          Print( 24);
          if (!dollars > 2)
               {
               Print( 26);
               Print( 27);

               script = 6;
               }
          else
               {
               StartUpdate( aBartender);
               MoveObj( aBartender, 119, 99, 1, scriptDone);

               Print( 25);
               dollars -= 3;
               if (orderedAWhiskey)
                    {
                    Reset( orderedAWhiskey);
                    if (Has( iWhiskey))
                         {
                         Set( tookADrink);
                         Print( 35);
                         }
                    else
                         {
                         if (!boughtWhiskey)
                              {
                              Set( boughtWhiskey);
                              currentScore += 1;
                              }
                         Get( iWhiskey);
                         Print( 38);
                         }
                    }

               if (orderedABeer)
                    {
                    Reset( orderedABeer);
                    Set( tookADrink);
                    Print( 28);
                    }
               
               if (orderedAWine)
                    {
                    Reset( orderedAWine);
                    Set( tookADrink);
                    Print( 29);
                    Print( 30);
                    }
               }
          }

     if (script == 6)
          {
          script = 0;
          SetLoop( aBartender, FACING_BACK);
          StopUpdate( aBartender);
          ForceUpdate( aBartender);

          Reset( bartenderWandering);
          bartenderTimer = 5;
          }
     }



--legCycles;
if (legCycles == 1)
     {
     Random( 10, 22, legCycles);
     Toggle( legCycling);
     if (legCycling)
          {
          StartCycling( aGirl);
          }
     else
          {
          StopCycling( aGirl);
          }
     }

if (doorScriptDone)
     {
     Reset( doorScriptDone);
     ++doorScript;

     if (doorScript == 1)
          {
          Draw( aPeepHole);
          EndOfLoop( aPeepHole, doorScriptDone);
          }

     if (doorScript == 2)
          {
          StopUpdate( aPeepHole);
          doorTimer = 3;
          }

     if (doorScript == WAITING_FOR_PASSWORD)
          {
          Print( 7);
          doorTimer = 12;
          }

     if (doorScript == 4)
          {
          Print( 8);
          StartUpdate( aPeepHole);
          BeginningOfLoop( aPeepHole, doorScriptDone);
          }

     if (doorScript == 5)
          {
          Erase( aPeepHole);
          StartMotion( ego);
          Reset( programControl);
          doorScript = 0;
          doorTimer = 0;
          }

     if (doorScript == 101)             [    He knew the password.
          {
          Print( 9);
          StopMotion( ego);
          Set( programControl);
          StartUpdate( aPeepHole);
          BeginningOfLoop( aPeepHole, doorScriptDone);
          }

     if (doorScript == 102)
          {
          Erase( aPeepHole);
          StartUpdate( aDoor);
          EndOfLoop( aDoor, doorScriptDone);
          }

     if (doorScript == 103)
          {
          newRoom = rmBackroom;
          }
     }


if (musicDone)
     {
     Reset( musicDone);
     SetCel( aJukeBox, 1);
     StopUpdate( aJukeBox);
     ForceUpdate( aJukeBox);
     }

if (startJukeBox)
     {
     Reset( startJukeBox);
     StartUpdate( aJukeBox);
     Sound( mTitle, musicDone);

     if (!soundOn)
          {
          Reset( musicDone);
          Random( 8, 12, jukeBoxTimer);
          StartUpdate( aJukeBox);
          }
     }




[    Scott Murphy's drinking problem

if (tookADrink)
     {
     Reset( tookADrink);
     ShakeScreen( 1);
     if (!drunkSeconds)
          {
          drunkSeconds = 5;        [    increases geometricly with each drink.
          staggerCycles = 10;
          Print( 31);
          }
     else
          {
          Print( 32);
          if (drunkSeconds < 120)
               {
               drunkSeconds += drunkSeconds;
               }
          }
     }

if (currentStatus == DRUNK)
     {
     if (egoDir != EGO_STOPPED)
          {
          --staggerCycles;
          if (staggerCycles == 1)
               {
               Toggle( staggering);
               if (!staggering)
                    {
                    Reset( programControl);
                    ReleaseLoop( ego);
                    staggerCycles = 7;
                    }
               else
                    {
                    Set( programControl);
                    FixLoop(ego);
                    :loop1
                    Random( 1, 8, work);
                    if (work == egoDir)
                         {
                         goto loop1;
                         }
                    egoDir = work;
                    staggerCycles = 5;
                    }
               }
          }
     }


[*****
:exit                                   [    test for leaving the room
[*****

if (edgeEgoHit == TOP)             {newRoom = rmHallway;}
if (edgeEgoHit == BOTTOM)          {newRoom = rmOutsideBar;}

RM15.MSG
Code: [Select]
[messages for room 15 -- rmInsideBar
[    "Leisure Suit Larry in the Land of the Lounge Lizards"
[    by Al Lowe



%message  1
"This is the sleaziest bar you've ever been in.
 And you've been in quite a few."

%message  2
"You are standing."

%message  3
"You are sitting."

%message  4
"You insert a dollar into the juke box, and select a suitably sleazy song."

%message  5
"You rap loudly on the naugahyde door.
 You wonder how many naugas had to give their
 all just to decorate this sleazehole."

%message  6
"So what?"

%message  7
"\"Yeah. Whatsda passwoid?\""

%message  8
"\"Scram, dog breath!\""

%message  9
"\"Come on in!\""

%message  10
"\"...blah, blah, blah, blah, blah...\""

%message  11
"\"...a lotta guys just leave her hanging in a tree somewhere!\""

%message  12
"\"...'cause Thursday's your night in the barrel!\""

%message  13
"\"...just think of the money he saved!\""

%message  14
"\"...and there stood the pig and the cow!\""

%message  15
"\"...dammit Liza, doncha know ya own reflection?\""

%message  16
"\"...we are coming back this way, aren't we?\""

%message  17
"\"...You idiot! I said POSSE!!\""

%message  18
"\"...nobody can eat THAT much ice cream!\""

%message  19
"\"...25 bucks, same as in town!\""

%message  20
"You'd better sit down first."

%message  21
"You greet the bartender.\n\n
\"What'll it be,\" Lefty responds, \"whiskey, wine or beer?\""

%message  22
"\"I'll have a glass of your fine, well whiskey!\" you tell Lefty."

%message  23
"\"Gimme a mug o' beer!\" you order Lefty."

%message  24
"\"That'll be $3.00, please.\""

%message  25
"You flip three bucks onto the counter."

%message  26
"\"I'm presently a little short,\" you stammer."

%message  27
"\"Yeah, and not just in the financial department, I bet!\" he replies,
 grabbing back your order."

%message  28
"You down the beer in your pseudo-macho style,
 and slam the mug back on the bar."

%message  29
"You delicately sip the wine until it's all gone.\n\n
You tell Lefty,
 \"I find this impudent and sassy, with the slightest hint of impertinence.\""

%message  30
"He gazes at you longingly and moistens his lips!"

%message  31
"Suddenly you feel a little woozy."

%message  32
"This one tastes even better than the last.
 One more sounds like a good idea."

%message  33
"Try sitting at the bar; that usually gets Lefty's attention."

%message  34
"It's not good etiquette to drink standing up."

%message  35
"Since you can only balance one open glass of whiskey at a time,
 you toss this one down immediately."

%message  36
"\"May I please have a glass of your delicate white zinfandel, sir?\"
 you ask Lefty."

%message  37
"Hey, was that your voice?"

%message  38
"You don't drink the whiskey, but instead,
 decide to carry it with you wherever you go,
 precariously balanced in an open shot glass."

%message  39
"The whiskey burns its way down your throat.
 You vow to never again buy a \"well\" brand."

%message  40
"Hold on; you haven't got your last order yet!"

%message  41
"You feel a little light-headed."

%message  42
"Shaking your head, you clear away the cobwebs and are able to once again
 walk in your standard, studly style."

%message  43
"\"Cram it, clown!\" you tell the bore on the stool next to you!"

%message  44
"\"Same to ya!\" shouts Lefty."

%message  45
"It's an antique, left over from \"King's Quest III.\""

%message  46
"Patience, Larry; patience!"

%message  47
"The door is locked. And, there is no key."

%message  48
"She may not be a great looker, but think of the muscles in that leg."

%message  49
"It's just going around in circles..."

%message  50
"...like your life."

%message  51
"You don't know much about art, but you do know what you like!"

%message  52
"You mean to say you're playing a 3-D adventure game,
 and all you want is LIGHT beer??"

%message  53
"They're just sitting at the bar, drinking their livers into oblivion."

%message  54
"\"Sorry, we don't sell them sissy drinks here,\" says Lefty.
 \"We got whiskey, wine and beer. What do you want?\""

%message  55
"My, aren't we the little savage!
 Didn't your mother teach you anything?"

%message  56
"\"Who cares,\" she replies sarcastically.
 \"Stop bugging me, or I'll have my boy friend
 take care of you when he gets back from the rest room!\""

%message  57
"Looks like you're operating at your standard level of charm, Larry."

%message  58
"\"Har, har!!\""

%message  59
"He has nothing to say, but says it continuously."

%message  60
"\"Hi there, lovely legs!\" you say sweetly.
 \"My name's Larry; Larry Laffer.\""

%message  61
"They have no comment."

%message  62
"He's not bothering you now; leave him alone, you big bully!"

%message  63
"You can't. There's no key in this game!"

%message  64
"Gee, Dad. It's a Wurlitzer!"

%message  65
"The peephole is locked from the inside."

%message  66
"Boy, are you drunk!"

%message  67
"SLAP!"

%message  68
"\"Ya got me!\""

%message  69
"\"No, thanks,\" Lefty replies. \"I don't drink.\""

%message  70
"\"Ok,\" says Lefty, \"but that'll cost ya $%v90.00!\""

%message  71
"The last of the big time spenders,
 you go down in a blaze of glory, ordering drinks for everybody in the place."

%message  72
"\"I'll not help you,\" says Lefty, \"no matter how much you offer me!\""

%message  73
"The naugahyde bounces the hammer back, grazing your scalp but slightly."

%message  74
"You flip a fiver out on the bar.
 Lefty grabs it, smiles, and says, \"Hey, thanks buddy! "

%message  75
"%m74"

%message  76
"You don't have enough money!"

%message  77
"\"Double down on eleven.\""

%message  78
"\"If you're short of money, you could always try gambling at the casino.\""

%message  79
"\"If you're bored hanging around my place, try hailing a cab outside.\""

%message  80
"\"Have you talked to Sierra On-Line lately?\""

%message  81
"\"Guys tell me I need to clean my rest room walls.\""

%message  82
"He appears to be perverted, twisted and sick!"

%message  83
"You instantly take a liking to him."

Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: Kawa on December 18, 2018, 02:20:09 PM
Just walk on by and drop a load of code right there like it ain't a thing ::)
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: OmerMor on December 18, 2018, 04:13:19 PM
Just walk on by and drop a load of code right there like it ain't a thing ::)

Christmas spirit, right?  ;D
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: Collector on December 18, 2018, 08:41:21 PM
So a comment was set by a bracket?
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: OmerMor on December 19, 2018, 03:04:17 AM
Indeed.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lance.ewing on December 19, 2018, 08:08:36 AM
If memory serves me right, the AGI code shown in the Donald B. Trivette book might have shown comments like that.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: Charles on December 19, 2018, 09:07:24 AM
Good memory.
(http://blazingstix.com/pictures/agi-comments.jpg)
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: OmerMor on December 19, 2018, 03:03:16 PM
Apparently a scan of the book can be found in the Internet Archive:
https://www.archive.org/35/items/the-official-book-of-kings-quest/TheOfficialBookOfKingsQuest_text.pdf#page=31 (https://www.archive.org/35/items/the-official-book-of-kings-quest/TheOfficialBookOfKingsQuest_text.pdf#page=31)
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: AGKorson on December 19, 2018, 03:25:38 PM
Having said that, i think this is really unfortunate news, and means we may never get to see the original sources to Larry or Sierra's other titles.

Hi Peter,
Don't despair. Here's the source for LSL1's Lefty's bar (RM15):

RM15.CG
Code: [Select]
snip

RM15.MSG
Code: [Select]
snip

Where did you get this? It is a really fascinating look at how Sierra coded their games. Some things that I noticed right away:

 - commands are not in the 'dot' format; looks like they used CamelCase. Which is interesting because the debug scripts all used lower case, with a dot separator.
 - looks like they set aside flags and variables from 200 and above as 'local' flags and variables; for example, 'nearJukeBox', defined as 'lf3', decompiles as f203
 - reserved flags and variables have values different than what is currently used in fan based games (for example currentRoom vs room_num, haveInput vs input_received)
 - in 'said' commands, they didn't use quotes around words; and they used dollar sign ($) for spaces

I would really love to have more of this source code to help in decompiling the interpreter and gaining a fuller understanding of how everything works.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: troflip on December 19, 2018, 03:48:19 PM
Apparently a scan of the book can be found in the Internet Archive:
https://www.archive.org/35/items/the-official-book-of-kings-quest/TheOfficialBookOfKingsQuest_text.pdf#page=31 (https://www.archive.org/35/items/the-official-book-of-kings-quest/TheOfficialBookOfKingsQuest_text.pdf#page=31)

Pretty easy to pick one up off of ebay too.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: OmerMor on December 20, 2018, 12:16:10 PM
Where did you get this? It is a really fascinating look at how Sierra coded their games.
From generous people who were willing to privately share it with me.

I would really love to have more of this source code to help in decompiling the interpreter and gaining a fuller understanding of how everything works.

If you're looking for a specific snippet - I can probably post it here.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lance.ewing on December 20, 2018, 03:16:20 PM
Some things that I noticed right away:

 - commands are not in the 'dot' format; looks like they used CamelCase. Which is interesting because the debug scripts all used lower case, with a dot separator.
 - looks like they set aside flags and variables from 200 and above as 'local' flags and variables; for example, 'nearJukeBox', defined as 'lf3', decompiles as f203
 - reserved flags and variables have values different than what is currently used in fan based games (for example currentRoom vs room_num, haveInput vs input_received)
 - in 'said' commands, they didn't use quotes around words; and they used dollar sign ($) for space

Perhaps if Omer has scripts from other AGI games, he could post one or two more for comparison with LSL.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: pmkelly on December 26, 2018, 10:53:15 AM
Really great to see you join the forum. Hope we see a few more posts from you. It's been a long time. Any thoughts on doing anything in the AGI community again?

I feel somewhat tempted to do a rewrite of AGI Studio in TypeScript that would allow it to run on all platforms via Electron, and also via a web browser. Currently my full time gig is working on interpreters/compilers + web-based IDEs so it seems like a good time to revisit AGI tooling again. Largely it's going to be a matter of whether I could find enough spare time to do it, but also what level of interest there might be in such a project.

Anyone think this is a good idea? I'd love to see more fan games being made and existence of more modern tools esp. with good support for Mac/Linux as well as Windows might help that.

If I were to go ahead with this I'd use https://github.com/Microsoft/monaco-editor which provides excellent facilities for language tooling like error highlighting, autocomplete etc.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: pmkelly on December 26, 2018, 11:16:16 AM
Hi Peter,
Don't despair. Here's the source for LSL1's Lefty's bar (RM15):

!!!!!!!!

Wow. That... is awesome.

I never thought I'd get to see any of the original code. My main interest is in the syntax and structure; the language AGI Studio uses is an educated guess partially based on some code samples that came from a book somewhere (it might have actually been the one Charles posted about). I always wondered what it _really_ looked like, e.g. how variable names were handled, whether there were local declarations used for specific rooms or everything was global, whether messages were embedded or in a separate file etc.

If I were to go ahead with a new version of AGI Studio, I'd love to have it support the original syntax, for authenticity. I understand there's legal restrictions on the original sources for the games, but I'm sure we could put together a brand new template and/or examples which conformed to the original syntax without problems as that would constitute our own work.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lance.ewing on December 26, 2018, 03:39:08 PM
I never thought I'd get to see any of the original code. My main interest is in the syntax and structure; the language AGI Studio uses is an educated guess partially based on some code samples that came from a book somewhere (it might have actually been the one Charles posted about).

Yes, it was definitely the same book. I bought a copy of this book back in the 90s, from a local store in NZ, and that is what I used when I created the SHOWLOG application, which I think is what you used as the basis of the code syntax in AGI Studio. So indirectly the AGI Studio syntax is based on the example code in the Donald B. Trivette book. I would expect it to be fairly authentic, given it was in that book, which is why I'm surprised a bit that the LSL1 source code is different.

I always wondered what it _really_ looked like, e.g. how variable names were handled, whether there were local declarations used for specific rooms or everything was global, whether messages were embedded or in a separate file etc.

I'm hoping Omer is going to provide some samples from other games for comparison (the more games, the better, even if it is only one script from each  ;) ). It could be that they had multiple different syntaxes, which if true would make it difficult to make a tool like AGI Studio or WinAGI more authentic.

If I were to go ahead with a new version of AGI Studio, I'd love to have it support the original syntax, for authenticity. I understand there's legal restrictions on the original sources for the games, but I'm sure we could put together a brand new template and/or examples which conformed to the original syntax without problems as that would constitute our own work.

Don't know if you know, but there is something like 75% of the original AGI interpreter source code available as well. There is a topic on these forums with an attachment that has the code. Apparently it was found in the floppy disk slack space from one of the games. It has been invaluable in my work on the C# AGI Interpreter.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: OmerMor on December 26, 2018, 05:03:18 PM
I'm hoping Omer is going to provide some samples from other games for comparison (the more games, the better, even if it is only one script from each  ;) ). It could be that they had multiple different syntaxes, which if true would make it difficult to make a tool like AGI Studio or WinAGI more authentic.

Here are some samples from a few AGI games: https://drive.google.com/open?id=1HSI3RiZPYszjLPbZM9k-Zyuo4uHqd1id (https://drive.google.com/open?id=1HSI3RiZPYszjLPbZM9k-Zyuo4uHqd1id)
The syntax is game specific and defined in their source.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lance.ewing on December 26, 2018, 05:13:20 PM
I feel somewhat tempted to do a rewrite of AGI Studio in TypeScript that would allow it to run on all platforms via Electron, and also via a web browser. Currently my full time gig is working on interpreters/compilers + web-based IDEs so it seems like a good time to revisit AGI tooling again. Largely it's going to be a matter of whether I could find enough spare time to do it, but also what level of interest there might be in such a project.

Anyone think this is a good idea? I'd love to see more fan games being made and existence of more modern tools esp. with good support for Mac/Linux as well as Windows might help that.

If I were to go ahead with this I'd use https://github.com/Microsoft/monaco-editor which provides excellent facilities for language tooling like error highlighting, autocomplete etc.

I would certainly be interested in such a project. I was considering something similar. My thoughts were about creating something like the Scratch online programming "IDE" that is used a lot in school these days. I've played around with Scratch a bit (my daughters have both used it in school, and my younger daughter likes building Adventure-like games in Scratch on her ipad). It struct me that such an online environment would be great for an AGI IDE. If we could define a similar palette of blocks that could be dragged and dropped to build scripts, similar to how Scratch does it, then I think that might go down well, not only with AGI fans, but also in schools. And that is where I think it gets interesting. If the AGI/SCI community were to build something similar to Scratch but for building AGI games, then it could very well become adopted by some schools and our exposure could be greatly increased.

So if your plans were to create something online like that, then I think it would be fantastic. I've seen "block" like programming demos (Google's Blockly) where you can switch between the code and the blocks, where changes in one reflect in the other. That might be quite interesting as well.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lance.ewing on December 26, 2018, 05:22:54 PM
Here are some samples from a few AGI games: https://drive.google.com/open?id=1HSI3RiZPYszjLPbZM9k-Zyuo4uHqd1id (https://drive.google.com/open?id=1HSI3RiZPYszjLPbZM9k-Zyuo4uHqd1id)
The syntax is game specific and defined in their source.

Thanks Omer. Yeah, looks like coders defined what they liked, although LSL appears to be the odd one out.

I've just remembered that you also provided a PDF with the original AGI programming documentation used by Sierra, and that it is attached to a post somewhere here in the forums. That document would also answer the question about syntax. Peter would no doubt be interested in that as well. Let me see if I can find the post...

Found it:  http://sciprogramming.com/community/index.php?topic=1617.0
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: AGKorson on December 26, 2018, 06:04:57 PM
Here are some samples from a few AGI games: https://drive.google.com/open?id=1HSI3RiZPYszjLPbZM9k-Zyuo4uHqd1id (https://drive.google.com/open?id=1HSI3RiZPYszjLPbZM9k-Zyuo4uHqd1id)
The syntax is game specific and defined in their source.

Thank you for this! I'll probably spend weeks going over these samples in detail! I'm pleased that at first glance, all of the things I learned about variables, flags, commands, etc. by decompiling the interpreters appears to be accurate based on what I see here. And I also noticed that they used defines to refer to their resources (rooms, logics, views, sound, pics) which is emulated in WinAGI by the ResourceID property.


Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: Collector on December 26, 2018, 08:23:23 PM
I would hate to see Visual AGI get swept under the rug with all of these other projects.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: lance.ewing on December 30, 2018, 04:17:37 PM
I would hate to see Visual AGI get swept under the rug with all of these other projects.

I do have it on my todo list to convert that AGI sound editor code that you sent me so that it can be incorporated into Visual AGI. Hopefully at some point we'll see that. And obviously in the not too distant future I'll ask you to merge my C# AGI Interpreter back into Visual AGI and then we can add a "Run Game" button.

On the subject of other projects, I think it is really great that there are other AGI projects starting up. We should encourage these as much as possible, and I for one would like to support Peter in what he has suggested. A browser based AGI IDE would be fantastic.
Title: Re: Al Lowe reveals his Sierra source code collection葉hen puts all of it on eBay
Post by: pmkelly on January 01, 2019, 06:43:49 AM
Just came across a video about the copyright issues surrounding the auction by the Space Quest historian:

https://www.youtube.com/watch?v=x8K7AWd-YAs