Contributor: SCOTT TUNSTALL

{
Err.. RACER programmed by Scott Tunstall 1994.
(When I first got me PC at the age of 22)

Update in March 95 (Also by Scott Tunstall) - to piss off the
B.Sc chaps. And what's more folks it's already on BBS's so
ripping off me code will mean I sue you for (C).

Renamed to The Dave Norrie Driving Simulator just to piss the c**t
right off!! :) sorry Dave mate but this is easily the best game
you'll play on your PC cos :

       (A) I programmed it
       (B) Your f***ing name is on it. :) :) :)

Even SHITTER than the lawnmower simulator.. it's me racing game
which has absolutely NO collision detection whatever. I done this
just for a laugh see?

And to practise assembler. Compared to me efforts now the assembler
code in this really SUCKS!! (But why should I optimize a piece of
shit like this? :) )

(And no commenting either.. tut tut)

Oh by the way Ronny seeing as you don't believe I wrote space lords
I thought I'd update me copy just for you... EAT YOUR WORDS
}

Program Norrie_Simulator;

Uses Crt;

Var CarX: byte;
    CarY: byte;
    OldCarX : byte;
    OldCarY : byte;
    Speed: byte;
    CaveY: byte;
    CaveHeight: byte;
    Dead: boolean;






{
OH NO! I AM SO EMBARASSED BY THIS CODE IT IS SHIT!!
}


Procedure ScrollLeft; Assembler;
label outer,shift;

asm
     push ds
     mov ax,$b800               { Want me to explain this eh? }
     mov ds,ax

     mov bx,0
     mov dl,22

outer:
      mov cx,38                 { Woulda been better with CL }
      push bx                   { ain't altered it to show you
                                  how shit it is - if you understand asm }

shift:
      mov ax,[bx+2]
      mov [bx],ax
      add bx,2
      loop shift                { Err... don't tell anyone I wrote this OK }

      pop bx
      add bx,80

      dec dl
      jne outer

      pop ds
End;







Procedure WriteNewTrack;
var y:byte;
Begin
     If CaveY <> 1 Then
        Begin
        TextBackground(Green);
        For Y:=1 to CaveY do
        Begin
            GotoXY(39,Y);
            Write(' ');
        End;
     End;

     gotoxy(39,CaveY);
     TextColor(White);
     Write('O');

     gotoxy(39,CaveY+CaveHeight);
     Write('O');

     TextBackground(LightGray);
     For Y:=CaveY + 1 to (CaveY + (CaveHeight-1)) do
     begin
          gotoXY(39,Y);
          Write(' ');
     End;

     TextBackground(Green);
     For Y:= (CaveY + CaveHeight + 1) to 22 do
     begin
          gotoxy(39,Y);
          write(' ');
     end;
end;






Procedure DrawScreen;
Var Action:byte;
Begin
     GotoXY(OldCarX,OldCarY);
     TextBackground(LightGray);
     Write(' ');

     ScrollLeft;
     WriteNewTrack;


     Action:= Random(30);
     Case Action Of
          1: If CaveY > 1 Then Dec(CaveY);
          2: If (CaveY + CaveHeight)< 22 Then Inc(CaveY);
          3: If CaveHeight > 6 Then Dec(CaveHeight);
          4: If (CaveY + CaveHeight)< 22 Then Inc(CaveHeight);
     End;

End;





Procedure Setup;
Var X:byte;
Begin
     TextMode(CO40);
     CaveY:=5;
     CaveHeight:=15;
     CarX:=1;
     CarY:=12;
     OldCarX:=CarX;
     OldCarY:=CarY;

     Speed:=100;

{ I added this bit to piss Dave off }

     gotoxy(4,24);
     textcolor(WHITE);
     textbackground(black);
     write('The Dave Norrie Driving Simulator');

{ This bit was in the original }

     For X:=1 to 38 do
         DrawScreen;



End;







Procedure MovePlayer;
Begin
     TextColor(LightGray);
     TextBackground(Blue);
     GotoXY(CarX,CarY);
     Write('>');

     OldCarX:=CarX;
     OldCarY:=CarY;

     If KeyPressed Then
        Begin
        Case Upcase(Readkey) of
             'Q': If CarY>1 Then Dec(CarY);
             'A': If CarY<22 Then Inc(CarY);
             'O': If CarX>1 Then
                     Begin
                     Speed:=Speed+5;
                     Dec(CarX);
                     End;
             'P': If CarX<20 Then
                     Begin
                     Speed:=Speed-5;
                     Inc(CarX);
                     End;
        End;
     End;
End;







Begin
SetUp;
Repeat
     Delay(Speed);
     DrawScreen;
     MovePlayer;
Until Dead;
End.



{    Here's a few possible additions for you sad fucks who
     actually like this trash:

     1. Collision detection (Not too good though - ruins the fun!)
     2. Graphics ! (No then again maybe not)
     3. Some sound (Keep it crap)
     4. Err.. playability?
}