home *** CD-ROM | disk | FTP | other *** search
/ Sound, Music & MIDI Collection 2 / SMMVOL2.bin / PROG / BWSB120B.ZIP / TTP / STUFF.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-12-23  |  4.0 KB  |  186 lines

  1. Unit Stuff;
  2.  
  3. Interface
  4.  
  5. Uses
  6.   Crt,
  7.   MCGA,       { Some graphics routines    }
  8.   Vector,     { Vector graphics stuff     }
  9.   PCXData,    { CockPit data              }
  10.   Explosions; { Explosion bitmap data     }
  11.  
  12. Procedure EndProg(S : String);
  13. Procedure InitGraphics;
  14. Procedure CleanUp;
  15. Procedure DrawExplosion;
  16. Procedure GetKeyStuff(Var LRAngle, UDAngle : Integer; Var Fired, Quit : Boolean);
  17. Procedure DisplayIt(Var Fired : Boolean; Side : Integer; LR,UD : Word);
  18. Procedure TitleScreen;
  19. Procedure KickKBDaemon;
  20. Procedure FreeKBDaemon;
  21.  
  22.  
  23. Implementation
  24.  
  25. {$F+}
  26. {$L KBDAEMON.OBJ}
  27. Procedure KBDaemon (Var Up, Down, Left, Right : Boolean); External;
  28. Procedure KickKBDaemon; External;
  29. Procedure FreeKBDaemon; External;
  30. {$F-}
  31.  
  32. Var
  33.   ShowCage : Boolean;
  34.   KeyUp, KeyDwn, KeyLft, KeyRgt : Boolean;
  35.   LocalX, LocalY, LocalZ : Word;
  36.  
  37. Procedure EndProg(S : String);
  38.  
  39. Begin
  40.   Writeln(S);
  41.   Halt(0);
  42. End;
  43.  
  44. Procedure InitGraphics;
  45.  
  46. Begin
  47.   SetMode($13);
  48.   If Page1 = $FFFF
  49.     Then Begin
  50.       SetMode($03);
  51.       EndProg('Could not allocate virtual screen.');
  52.     End;
  53. End;
  54.  
  55. Procedure CleanUp;
  56.  
  57. Begin
  58.   FreeAlloc(Page1);
  59.   SetMode($03);
  60. End;
  61.  
  62. Procedure DrawExplosion;
  63.  
  64. Var
  65.   Target : Integer;
  66.  
  67. Begin
  68.   For Target := 1 to 32 do
  69.       Begin
  70.         ClearPage(Page1);
  71.         PutStars;
  72.         PutScaledSprite(160-(Target Shr 1), 100-(Target Shr 1), Target, Exp1^, Page1);
  73.         If ShowCage
  74.           Then DeCompPCX(CockPitAddr^, Page1, 199*320)
  75.           Else ShowCross(Page1);
  76.         CopyPage(Page1, Page0);
  77.       End;
  78.     For Target := 32 to 48 do
  79.       Begin
  80.         ClearPage(Page1);
  81.         PutStars;
  82.         PutScaledSprite(158-(Target Shr 1), 98-(Target Shr 1), Target, Exp2^, Page1);
  83.         If ShowCage
  84.           Then DeCompPCX(CockPitAddr^, Page1, 199*320)
  85.           Else ShowCross(Page1);
  86.         CopyPage(Page1, Page0);
  87.       End;
  88.     For Target := 1 to 15 do
  89.       Begin
  90.         ClearPage(Page1);
  91.         PutStars;
  92.         PutScaledSprite(160-20, 100-20, 48, Exp3^, Page1);
  93.         If ShowCage
  94.           Then DeCompPCX(CockPitAddr^, Page1, 199*320)
  95.           Else ShowCross(Page1);
  96.         CopyPage(Page1, Page0);
  97.       End;
  98.       Delay(1000);
  99. End;
  100.  
  101. Procedure GetKeyStuff(Var LRAngle, UDAngle : Integer; Var Fired, Quit : Boolean);
  102.  
  103. Begin
  104.   KBDaemon(KeyUp, KeyDwn, KeyLft, KeyRgt);
  105.  
  106.   If KeyRgt Then Begin                     { Right Arrow }
  107.     LRAngle := LRAngle + 1;
  108.     If LRAngle > 384 Then LRAngle := 384;
  109.   End;
  110.  
  111.   If KeyUp Then Begin                      { Up Arrow }
  112.     UDAngle := UDAngle + 1;
  113.     If UDAngle > 384 Then UDAngle := 384;
  114.   End;
  115.  
  116.   If KeyDwn Then Begin                     { Down Arrow }
  117.     UDAngle := UDAngle - 1;
  118.     If UDAngle < 128 Then UDAngle := 128;
  119.   End;
  120.  
  121.   If KeyLft Then Begin                     { Left Arrow }
  122.     LRAngle := LRAngle - 1;
  123.     If LRAngle < 128 Then LRAngle := 128;
  124.   End;
  125.  
  126.   If KeyPressed
  127.     Then Begin
  128.       Case ReadKey of
  129.         #27 : Quit := True;
  130.         #32 : Fired := True;
  131.         #13 : ShowCage := Not(ShowCage);
  132.       End;
  133.     End;
  134. End;
  135.  
  136. Procedure DoVector(LRAngle, UDAngle : Word);
  137.  
  138. Begin
  139.   LocalX := (LocalX + 2) And 511;
  140.   LocalY := (LocalY + 2) And 511;
  141.   LocalZ := (LocalZ + 2) And 511;
  142.   LocalRotate(LocalX, LocalY, LocalZ);
  143.   Scale;
  144.   GlobalTransLate;
  145.   UpDatePos;
  146.   GlobalRotate(-UDAngle And 511, -LRAngle And 511, 0);
  147.   PutStars;
  148.   DisplayVec;
  149.   If ShowCage
  150.     Then DeCompPCX(CockPitAddr^, Page1, 199*320)
  151.     Else ShowCross(Page1);
  152.   CopyPage(Page1, Page0);
  153.   ClearPage(Page1);
  154. End;
  155.  
  156. Procedure DisplayIt(Var Fired : Boolean; Side : Integer; LR,UD : Word);
  157.  
  158. Var
  159.   Count : Integer;
  160.  
  161. Begin
  162.   If Fired
  163.     Then Begin
  164.       For Count := 1 to 10 do
  165.         Begin
  166.           DrawLaser(Side);
  167.           DoVector(LR, UD);
  168.         End;
  169.       Fired := False;
  170.     End
  171.     Else DoVector(LR, UD);
  172. End;
  173.  
  174. Procedure TitleScreen;
  175.  
  176. Var
  177.   Ch : Char;
  178.  
  179. Begin
  180.   DeCompPCX(TitleAddr^, Page0, 200*320);
  181.   ch := ReadKey;
  182. End;
  183.  
  184. Begin
  185.   ShowCage := True;
  186. End.