home *** CD-ROM | disk | FTP | other *** search
/ CD PowerPlay 6 / TheCompleteAdventureCollection1995 / CDPP6.ISO / utility / agtsrc / title.pa3 < prev    next >
Encoding:
Text File  |  1994-05-19  |  12.4 KB  |  350 lines

  1.  
  2.   {TITLE.PA2}
  3.  
  4.   { Title }
  5.   {Print the title screen: }
  6.   {First, if the user has provided a }
  7.   {file TITLE.TTL, display that, pausing}
  8.   {if necessary. Then, print the GAGS }
  9.   {copyright/credit information. }
  10.   PROCEDURE Title;
  11.  
  12.     { Center }
  13.     {Write the string of text centered}
  14.     {on an 80-column display. }
  15.     PROCEDURE center(st : s);
  16.     VAR i : Integer;
  17.     BEGIN
  18.       IF morecount >= 23 THEN BEGIN
  19.         Pause;
  20.         morecount := 0;
  21.       END;
  22.       {delete leading blanks}
  23.       WHILE st[1] = ' ' DO
  24.         st := Copy(st, 2, Length(st)-1);
  25.       FOR i := 1 TO ((80-Length(st)) DIV 2) DO
  26.         Write(' ');
  27.       WriteLn(st);
  28.       morecount := morecount+1;
  29.     END;                          {center}
  30.  
  31.   CONST
  32.  
  33.   {$IFDEF NormalVersion}
  34.     cw1 = 'The Adventure Game Toolkit (AGT) 1.7';
  35.   {$ELSE}
  36.     cw1 = 'The BIG Adventure Game Toolkit (AGT) 1.7';
  37.   {$ENDIF}
  38.     cw2 = 'Copyright 1994 -- All Rights Reserved';
  39.     cw3 = 'by David R. Malmberg and Mark J. Welch';
  40.     cw4 = 'AGT is distributed as "Freeware" and you are free to use it as you wish.';
  41.  
  42.   VAR titlefile : Text;
  43.     Line1, Line2, GameName : s;
  44.     LowStr, HighStr : words;
  45.     fn : Text;
  46.     Spot : Integer;
  47.     datafile : FILE;
  48.   BEGIN                           {title}
  49.     GameName := data_file_name;
  50.     Spot := POS('.', GameName);
  51.     IF Spot <> 0 THEN GameName := Copy(GameName, 1, Spot-1);
  52.   {$IFDEF NormalVersion}
  53.     Line1 := 'Compiling Final Game Version -- should take a few minutes';
  54.   {$ELSE}
  55.     Line1 := 'BIG Compiling Final Game Version -- should take a few minutes';
  56.   {$ENDIF}
  57.     Line2 := Line1;
  58.     CLRSCR;                       {clear the screen so nothing distracts user from title}
  59.     WriteLn;
  60.     morecount := 1;
  61.   {$IFDEF NormalVersion}
  62.     center('Compiling '+GameName+' using:'+cw1);
  63.   {$ELSE}
  64.     center('BIG Compiling '+GameName+' using:'+cw1);
  65.   {$ENDIF}
  66.     center(cw2);
  67.     center(cw3);
  68.     WriteLn;
  69.     center(cw4);
  70.     WriteLn;
  71.     morecount := morecount+1;
  72.     DELAY(5000);                  {give user at least 5 seconds to read title}
  73.     IF CreatingFinalVersion
  74.     THEN center(Line1)
  75.     ELSE IF File_Exists(Command_File_Name)
  76.     THEN center(Line2)
  77.       {takes quite a bit longer if special commands to be read and initialized}
  78.     ELSE IF File_Exists('CONFIG.SYS')
  79.     THEN center(Line2);
  80.   END;                            {title}
  81.  
  82.  
  83.   FUNCTION Valid_Room(num : Integer) : Boolean;
  84.   BEGIN
  85.     IF ((num >= First_Room) AND (num <= TopRoom))
  86.     THEN Valid_Room := True
  87.     ELSE Valid_Room := False;
  88.   END;                            {Valid_Room}
  89.  
  90.   FUNCTION Valid_ZRoom(num : Integer) : Boolean; {Normal Rooms plus Room Zero}
  91.   BEGIN
  92.     IF ((num = 0) OR Valid_Room(num))
  93.     THEN Valid_ZRoom := True
  94.     ELSE Valid_ZRoom := False;
  95.   END;                            {Valid_ZRoom}
  96.  
  97.   FUNCTION Valid_Noun(num : Integer) : Boolean;
  98.   BEGIN
  99.     IF ((num >= First_noun) AND (num <= TopNoun))
  100.     THEN Valid_Noun := True
  101.     ELSE Valid_Noun := False;
  102.   END;                            {Valid_Noun}
  103.  
  104.   FUNCTION Valid_ZNoun(num : Integer) : Boolean; {Normal Nouns plus Noun Zero}
  105.   BEGIN
  106.     IF ((num = 0) OR Valid_Noun(num))
  107.     THEN Valid_ZNoun := True
  108.     ELSE Valid_ZNoun := False;
  109.   END;                            {Valid_ZNoun}
  110.  
  111.   FUNCTION Valid_Creature(num : Integer) : Boolean;
  112.   BEGIN
  113.     IF ((num >= First_creature) AND (num <= TopCreature))
  114.     THEN Valid_Creature := True
  115.     ELSE Valid_Creature := False;
  116.   END;                            {Valid_Creature}
  117.  
  118.   FUNCTION Valid_Thing(num : Integer) : Boolean;
  119.   BEGIN
  120.     IF (Valid_Creature(num) OR Valid_Noun(num))
  121.     THEN Valid_Thing := True
  122.     ELSE Valid_Thing := False;
  123.   END;                            {Valid_Thing}
  124.  
  125.   FUNCTION Valid_Token(num : Integer) : Boolean;
  126.   BEGIN
  127.     IF (num >= Ord(AtLocation)) AND (num <= Ord(DoneWithTurn))
  128.     THEN Valid_Token := True
  129.     ELSE Valid_Token := False;
  130.   END;                            {Valid_Token}
  131.  
  132.   FUNCTION Valid_Message(num : Integer) : Boolean;
  133.   BEGIN
  134.     IF ((num >= 1) AND (num <= TopMessage))
  135.     THEN Valid_Message := True
  136.     ELSE Valid_Message := False;
  137.   END;                            {Valid_Message}
  138.  
  139.   FUNCTION Valid_Counter(num : Integer) : Boolean;
  140.   BEGIN
  141.     IF ((num >= 1) AND (num <= MaxCounter))
  142.     THEN Valid_Counter := True
  143.     ELSE Valid_Counter := False;
  144.   END;                            {Valid_Counter}
  145.  
  146.   FUNCTION Valid_Flag(num : Integer) : Boolean;
  147.   BEGIN
  148.     IF ((num >= 1) AND (num <= MaxFlag))
  149.     THEN Valid_Flag := True
  150.     ELSE Valid_Flag := False;
  151.   END;                            {Valid_Flag}
  152.  
  153.   FUNCTION Valid_Variable(num : Integer) : Boolean;
  154.   BEGIN
  155.     IF ((num >= 1) AND (num <= MaxVariable))
  156.     THEN Valid_Variable := True
  157.     ELSE Valid_Variable := False;
  158.   END;                            {Valid_Variable}
  159.  
  160.   FUNCTION Valid_Question(num : Integer) : Boolean;
  161.   BEGIN
  162.     IF ((num >= 1) AND (num <= MaxQuestion))
  163.     THEN Valid_Question := True
  164.     ELSE Valid_Question := False;
  165.   END;                            {Valid_Variable}
  166.  
  167.   FUNCTION Valid_Location(num : Integer) : Boolean;
  168.   BEGIN
  169.     IF (Valid_Room(num) OR Valid_Noun(num) OR (num = Wearing) OR (num = Player) OR (num = 0))
  170.     THEN Valid_Location := True
  171.     ELSE Valid_Location := False;
  172.   END;                            {Valid_Location}
  173.  
  174.   PROCEDURE InitializeLimits;
  175.   BEGIN
  176.     NumberOfErrors := 0;
  177.     TopRoom := Last_Room;
  178.     TopNoun := Last_noun;
  179.     TopCreature := Last_Creature;
  180.     TopMessage := Last_Message;
  181.     MaxMessage := 0;              {to start with}
  182.   END;                            {InitializeLimits}
  183.  
  184.   PROCEDURE ResetLimits;
  185.   BEGIN
  186.     TopRoom := MaxRoom;
  187.     TopNoun := MaxNoun;
  188.     TopCreature := MaxCreature;
  189.     TopMessage := MaxMessage;
  190.   END;                            {ResetLimits}
  191.  
  192.  
  193.   PROCEDURE TestParameter(num : Integer; TopSen : s; InSen : s; TypeOfTest : TestType);
  194.   VAR LastCount : Integer;
  195.  
  196.   BEGIN
  197.     LastCount := NumberOfErrors;
  198.     CASE TypeOfTest OF
  199.       RoomTest : IF NOT Valid_Room(num) THEN NumberOfErrors := NumberOfErrors+1;
  200.       ZRoomTest : IF NOT Valid_ZRoom(num) THEN NumberOfErrors := NumberOfErrors+1;
  201.       NounTest : IF NOT Valid_Noun(num) THEN NumberOfErrors := NumberOfErrors+1;
  202.       ZNounTest : IF NOT Valid_ZNoun(num) THEN NumberOfErrors := NumberOfErrors+1;
  203.       CreatureTest : IF NOT Valid_Creature(num) THEN NumberOfErrors := NumberOfErrors+1;
  204.       ThingTest : IF NOT Valid_Thing(num) THEN NumberOfErrors := NumberOfErrors+1;
  205.       LocationTest : IF NOT Valid_Location(num) THEN NumberOfErrors := NumberOfErrors+1;
  206.       TokenTest : IF NOT Valid_Token(num) THEN NumberOfErrors := NumberOfErrors+1;
  207.       MessageTest : IF NOT Valid_Message(num) THEN NumberOfErrors := NumberOfErrors+1;
  208.       CounterTest : IF NOT Valid_Counter(num) THEN NumberOfErrors := NumberOfErrors+1;
  209.       VariableTest : IF NOT Valid_Variable(num) THEN NumberOfErrors := NumberOfErrors+1;
  210.       FlagTest : IF NOT Valid_Flag(num) THEN NumberOfErrors := NumberOfErrors+1;
  211.       QuestionTest : IF NOT Valid_Question(num) THEN NumberOfErrors := NumberOfErrors+1;
  212.     END;                          {CASE}
  213.     IF LastCount < NumberOfErrors THEN {some kind of error}
  214.       BEGIN
  215.         WriteLn;
  216.         IF TopSen <> '' THEN WriteLn(TopSen);
  217.         Write('  ', InSen, ' <-- ');
  218.         CASE TypeOfTest OF
  219.           RoomTest : WriteLn('ROOMS have only been defined for 2 to ', TopRoom);
  220.           ZRoomTest : WriteLn('Valid locations have only been defined for 0 and 2 to ', TopRoom);
  221.           NounTest : WriteLn('NOUNS have only been defined for 200 to ', TopNoun);
  222.           CreatureTest : WriteLn('CREATURES have only been defined for 300 to ', TopCreature);
  223.           ThingTest : WriteLn('Must be a NOUN (200 to ', TopNoun, ') or a CREATURE (300 to ', TopCreature, ')');
  224.           LocationTest : BEGIN
  225.                            WriteLn('Locations must be 0, 1, 1000 or in a ROOM (2 to ', TopRoom, ')');
  226.                            WriteLn('   or inside a NOUN (200 to ', TopNoun, ')');
  227.                          END;
  228.           TokenTest : WriteLn('Tokens range from AtLocation to DoneWithTurn only');
  229.           MessageTest : WriteLn('MESSAGES have only been defined for 1 to ', TopMessage);
  230.           CounterTest : WriteLn('COUNTERS have only been defined for 1 to ', MaxCounter);
  231.           VariableTest : WriteLn('VARIABLES have only been defined for 1 to ', MaxVariable);
  232.           FlagTest : WriteLn('FLAGS have only been defined for 1 to ', MaxFlag);
  233.           QuestionTest : WriteLn('QUESTIONS have only been defined for 1 to ', MaxQuestion);
  234.         END;                      {CASE}
  235.       END;                        {some kind of error}
  236.   END;                            {TestParameter}
  237.  
  238.  
  239.   PROCEDURE CheckParameters;
  240.  
  241.   TYPE
  242.     DName = ARRAY[Direction] OF words;
  243.  
  244.   VAR i, vv : Integer;
  245.     sentence, TopSen, InSen : s;
  246.     st : words;
  247.     Dir : Direction;
  248.     DirectionName : DName;
  249.  
  250.   BEGIN
  251.     ResetLimits;                  {to actual upper limits -- as read in}
  252.  
  253.     DirectionName[NORTH] := 'NORTH';
  254.     DirectionName[SOUTH] := 'SOUTH';
  255.     DirectionName[WEST] := 'WEST';
  256.     DirectionName[EAST] := 'EAST';
  257.     DirectionName[northeast] := 'NORTHEAST';
  258.     DirectionName[southeast] := 'SOUTHEAST';
  259.     DirectionName[northwest] := 'NORTHWEST';
  260.     DirectionName[southwest] := 'SOUTHWEST';
  261.     DirectionName[up] := 'UP';
  262.     DirectionName[down] := 'DOWN';
  263.     DirectionName[enter] := 'ENTER';
  264.     DirectionName[Exit] := 'EXIT';
  265.  
  266.     {first check out "special" room information}
  267.  
  268.     Str(Starting_room, st);
  269.     sentence := 'STARTING_ROOM '+st;
  270.     TestParameter(Starting_room, '', sentence, RoomTest);
  271.  
  272.     Str(Resurrection_Room, st);
  273.     sentence := 'RESURRECTION_ROOM '+st;
  274.     TestParameter(Resurrection_Room, '', sentence, ZRoomTest); {Zero allowed if no resurrection}
  275.  
  276.     IF Treasure_Room <> 3000 THEN {3000, i.e., no treasure room is default value}
  277.       BEGIN
  278.         Str(Treasure_Room, st);
  279.         sentence := 'TREASURE_ROOM '+st;
  280.         TestParameter(Treasure_Room, '', sentence, LocationTest);
  281.       END;
  282.  
  283.     FOR i := First_Room TO MaxRoom DO
  284.       BEGIN
  285.         WITH Room[i]^ DO
  286.           BEGIN
  287.             Str(i, st);
  288.             TopSen := 'ROOM '+st;
  289.             FOR Dir := NORTH TO Exit DO
  290.               BEGIN
  291.                 Str(Path[Dir], st);
  292.                 InSen := DirectionName[Dir]+' '+st;
  293.                 TestParameter(Path[Dir], TopSen, InSen, ZRoomTest); {Zero allowed}
  294.               END;
  295.             IF special <> 0 THEN  {0, i.e., no special is default value}
  296.               BEGIN
  297.                 Str(special, st);
  298.                 InSen := 'SPECIAL '+st;
  299.                 TestParameter(special, TopSen, InSen, RoomTest);
  300.               END;
  301.             IF key <> 0 THEN      {0, i.e., no key is default value}
  302.               BEGIN
  303.                 Str(key, st);
  304.                 InSen := 'KEY '+st;
  305.                 TestParameter(key, TopSen, InSen, NounTest);
  306.               END;
  307.             IF light > 1 THEN     {0 or 1, i.e., no light or ANY light}
  308.               BEGIN
  309.                 Str(light, st);
  310.                 InSen := 'LIGHT '+st;
  311.                 TestParameter(light, TopSen, InSen, NounTest);
  312.               END;
  313.           END;                    {WITH}
  314.       END;                        {for i := first_room..MaxRoom}
  315.  
  316.     {now check out the noun information}
  317.     FOR i := First_noun TO MaxNoun DO
  318.       BEGIN
  319.         WITH N[i]^ DO
  320.           BEGIN
  321.             Str(i, st);
  322.             TopSen := 'NOUN '+st;
  323.             Str(location, st);    {test noun's location}
  324.             sentence := 'LOCATION '+st;
  325.             TestParameter(location, TopSen, sentence, LocationTest);
  326.             IF key <> 0 THEN      {0, i.e., no key is default value}
  327.               BEGIN
  328.                 Str(key, st);
  329.                 InSen := 'KEY '+st;
  330.                 TestParameter(key, TopSen, InSen, NounTest);
  331.               END;
  332.           END;
  333.       END;
  334.  
  335.     {now check out the creature information}
  336.     IF MaxCreature > 0 THEN
  337.       FOR i := First_creature TO MaxCreature DO
  338.         BEGIN
  339.           WITH M[i]^ DO
  340.             BEGIN
  341.               Str(i, st);
  342.               TopSen := 'CREATURE '+st;
  343.               Str(location, st);  {test creature's location}
  344.               sentence := 'LOCATION '+st;
  345.               TestParameter(location, TopSen, sentence, ZRoomTest);
  346.             END;
  347.         END;
  348.  
  349.   END;                            {CheckParameters}
  350.