Results 1 to 14 of 14

Thread: SCAR shooter

  1. #1
    Join Date
    Jan 2008
    Posts
    19
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default SCAR shooter

    Yo, dawgs, check dis out.

    Code:
    Obsolete
    Updated.

    Code:
    program nnnn; 
    var
      range, projimg, backg, gposx, gposy, i, n, red, time, maxbullets, control: Integer;
      green, speed, projspeed, xmax, ymax, bitmap, maxenemies, shotdelay:integer;
      angspeed, ang: extended;
      shot, pause: boolean;
      zzz: TForm;
      n1, n2, n3, n4:  TEdit;
    type
      enemy = record
      enx, eny, enspeed, endir: integer;
      end;
      projectile = record
      projx, projy, savex, savey: integer;
      saveang: extended;
      end;
    var
    bullets: array of projectile;
    enemies: array of enemy;
    v: tvariantarray;
    
    procedure createenemy(dir: integer);
    begin
      if (length(enemies)<maxenemies) then begin
      setlength(enemies, length(enemies) + 1);
        for i := (length(enemies)-1) to high(enemies) do
          begin
          enemies[i].enspeed := (1+Random(5));
          enemies[i].endir := dir;
            case enemies[i].endir of
            0:begin
                enemies[i].enx := Random(xmax-10)+5;
                enemies[i].eny := (-6);
              end;
            1:begin
                enemies[i].enx := (-6);
                enemies[i].eny := Random(ymax-10)+5;
              end;
            2:begin
                enemies[i].enx := Random(xmax-10)+5;
                enemies[i].eny := (ymax+6);
              end;
            3:begin
                enemies[i].enx := (xmax+6);
                enemies[i].eny := Random(ymax-10)+5;
              end;
            end;
          end;
      end;
    end;
    
    function stupid(angle:extended; spd:integer; crap:boolean):integer;
    begin
      if crap then result:=((round(degrees(sin(radians(angle)))))/spd) else result:=((round(degrees(cos(radians(angle)))))/spd);
    end;
    
    procedure moveenemies;
    begin
      for i:=0 to high(enemies) do
        begin
        case enemies[i].endir of
          0:enemies[i].eny:=enemies[i].eny + enemies[i].enspeed;
          1:enemies[i].enx:=enemies[i].enx + enemies[i].enspeed;
          2:enemies[i].eny:=enemies[i].eny - enemies[i].enspeed;
          3:enemies[i].enx:=enemies[i].enx - enemies[i].enspeed;
        end;
      end;
    end;
    
    procedure cut;
    begin
    enemies[i]:= enemies[high(enemies)]
    setlength(enemies, length(enemies) -1);
    end;
    
    procedure freenemies;
    begin
      for i:=0 to high(enemies) do
        begin
        case enemies[i].endir of
          0:if (enemies[i].eny>ymax+6) then cut;
          1:if (enemies[i].enx>xmax+6) then cut;
          2:if (enemies[i].eny<-6) then cut;
          3:if (enemies[i].enx<-6) then cut;
        end;
      end;
    end;
    
    procedure shoot;
    begin
      if (shotdelay=0) and (length(bullets)<maxbullets) then begin
      setlength(bullets, length(bullets) + 1);
      shotdelay:= control;
      for i := (length(bullets)-1) to high(bullets) do
        begin
          bullets[i].savex:=gposx;
          bullets[i].savey:=gposy;
          bullets[i].projx:=gposx;
          bullets[i].projy:=gposy;
          bullets[i].saveang:=ang;
        end;
      end;
    end;
    
    procedure blah;
    begin
      for i := 0 to high(bullets) do
      begin
        FastDrawTransparent(bullets[i].projx-3, bullets[i].projy-3, projimg, backg);
        if (not(InCircle(bullets[i].projx, bullets[i].projy, bullets[i].savex, bullets[i].savey, range))) then begin
          bullets[i]:= bullets[high(bullets)];
          setlength(bullets, length(bullets)-1);
        end else begin
          bullets[i].projx:=bullets[i].projx-(stupid(bullets[i].saveang,projspeed,true));
          bullets[i].projy:=bullets[i].projy-(stupid(bullets[i].saveang,projspeed,false));
        end;
      end;
    end;
    
    procedure formo;
    begin
      zzz := CreateForm;
      zzz.ClientHeight:= ymax;
      zzz.ClientWidth := xmax+120;
      zzz.Caption := 'Form';
      zzz.Position := poDesktopCenter;
      GetSelf.WindowState := wsMinimized;
      zzz.Show;
      n1 := TEdit.create(zzz);
      n2 := TEdit.create(zzz);
      n3 := TEdit.create(zzz);
      n4 := TEdit.create(zzz);
      n1.height:= 15;
      n1.width:= 100;
      n1.Top:= 20;
      n1.Left:= 5;
      n1.parent:= zzz;
      n2.height:= 15;
      n2.width:= 100;
      n2.Top:= 60;
      n2.Left:= 5;
      n2.parent:= zzz;
      n3.height:= 15;
      n3.width:= 100;
      n3.Top:= 100;
      n3.Left:= 5;
      n3.parent:= zzz;
      n4.height:= 15;
      n4.width:= 100;
      n4.Top:= 140;
      n4.Left:= 5;
      n4.parent:= zzz;
      n1.text:= inttostr(time);
      n2.text:= inttostr(maxenemies);
      n3.text:= inttostr(maxbullets);
      n4.text:= inttostr(control);
    end;
    
    function collisiondetect(actx, acty, objx, objy, correction: integer): Boolean;
    begin
      Result := IntInBox(actx, acty, inttobox(objx-correction, objy-correction, objx+correction, objy+correction))
    end;
    
    begin
      maxenemies:= 100;
      time:= 10;
      control:= 40;
      ang:=90;
      angspeed:=4;
      xmax:=500;
      ymax:=500;
      setlength(enemies, 0);
      backg  := BitmapFromString(xmax, ymax, 'beNrtwTEBAAAAwqD1T20MH' +
            '6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgbx7sAAE=');
      green:= BitmapFromString(15, 15, 'beNq1yrkNADAIw' +
           'ED2X9qpKJCI+K0rjfgh2VC7M9bWjGc+8zeZifRmcqozNx6sgX6C');
      red:= BitmapFromString(11, 11, 'beNpjYPjPMIroggA92XiI');
      bitmap:=green;
      projimg:= BitmapFromString(6, 6, 'beNpjYACC/0iIAYnBgCrOgCqIKfIfQwGKyQAqehPt');
      gposx:=145;
      gposy:=145;
      range:=200;
      speed:=13;
      projspeed:= 7;
      maxbullets:= 3;
      SetTransparentColor(projimg,0);
      SetTransparentColor(green,0);
      ThreadSafeCall('formo', v);
      SafeDrawBitmap(backg, zzz.canvas,120,0);
      repeat
        if iskeydown('l') and not pause then pause:= true;
        if not pause then begin
          n1.ReadOnly:= true;
          n2.ReadOnly:= true;
          n3.ReadOnly:= true;
          n4.ReadOnly:= true;
          shotdelay:= shotdelay - 2;
          if (shotdelay<0) then shotdelay:=0;
          FastDrawTransparent(gposx-7, gposy-7, green, backg);
          if (length(bullets)>0) then shot:= true else shot:=false;
          if shot then blah;
          case true of
            (iskeydown('w')): createenemy(2);
            (iskeydown('a')): createenemy(3);
            (iskeydown('d')): createenemy(1);
            (iskeydown('x')): createenemy(0);
            (iskeydown('s')): createenemy(random(4));
          end;
          moveenemies;
          freenemies;
          if shot then begin
            for i := 0 to high(enemies) do
            begin
              for n:= 0 to high(bullets) do
                begin
                  if collisiondetect(bullets[n].projx,bullets[n].projy,enemies[i].enx, enemies[i].eny, 6) then
                  begin
                  cut;
                  bullets[n]:= bullets[high(bullets)];
                  setlength(bullets, length(bullets)-1);
                  end;
                end;
            end;
          end;
          for i := 0 to high(enemies) do fastdrawtransparent(enemies[i].enx-5, enemies[i].eny-5, red, backg);
          SafeDrawBitmap(backg, zzz.canvas,120,0);
          Wait(time);
          green:=rotatebitmap(bitmap,(radians(ang)));
          case true of
            (IsArrowDown(0)):begin
                             gposx:=gposx-(stupid(ang,speed,true));
                             gposy:=gposy-(stupid(ang,speed,false));
                             end;
            (IsArrowDown(2)):begin
                             gposx:=gposx+(stupid(ang,speed,true));
                             gposy:=gposy+(stupid(ang,speed,false));
                             end;
          end;
          case true of
            (IsArrowDown(3)): ang:= ang+angspeed;
            (IsArrowDown(1)): ang:= ang-angspeed;
          end;
          case true of
            (gposx<7): gposx:=7;
            (gposx>(xmax-7)): gposx:=(xmax-7);
          end;
          case true of
            (gposy<7): gposy:=7;
            (gposy>(ymax-7)): gposy:=(ymax-7);
          end;
          if iskeydown('t') then shoot;
          FastDrawClear(backg,0);
        end else begin
          n1.ReadOnly:= false;
          n2.ReadOnly:= false;
          n3.ReadOnly:= false;
          n4.ReadOnly:= false;
          n1.text:=TrimLetters(n1.Text);
          n2.text:=TrimLetters(n2.Text);
          n3.text:=TrimLetters(n3.Text);
          n4.text:=TrimLetters(n4.Text);
          wait(10);
          control:=strtoint(n4.text);
          maxbullets:=strtoint(n3.text);
          maxenemies:=strtoint(n2.text);
          time:=strtoint(n1.text);
        end;
        if iskeydown('k') and pause then pause:=false;
      until (IsKeyDown('p'));
      setlength(bullets, 0);
      setlength(enemies, 0);
      FreeBitmap(backg);
      FreeBitmap(red);
      FreeBitmap(green);
      FreeBitmap(projimg);
      FreeBitmap(bitmap);
      freeform(zzz);
      GetSelf.WindowState := wsMaximized;
      ClearDebug;
      writeln('"Oooow!"');
      writeln('   - Michael Jackson');
      writeln('');
      terminatescript;
    end.
    Controls are WASDX, arrows, T, L to pause and K to unpause.
    The edit boxes control some stuff, and can only be edited during pause.
    Last edited by Vandalf; 07-19-2010 at 09:25 PM.

  2. #2
    Join Date
    Jan 2008
    Location
    NC, USA.
    Posts
    4,429
    Mentioned
    0 Post(s)
    Quoted
    4 Post(s)

    Default

    Good job
    Quote Originally Posted by irc
    [00:55:29] < Guest3097> I lol at how BenLand100 has become noidea
    [01:07:40] <@BenLand100> i'm not noidea i'm
    [01:07:44] -!- BenLand100 is now known as BenLand42-
    [01:07:46] <@BenLand42-> shit
    [01:07:49] -!- BenLand42- is now known as BenLand420
    [01:07:50] <@BenLand420> YEA

  3. #3
    Join Date
    Feb 2007
    Location
    Alberta,Canada
    Posts
    2,358
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    very cool. Well done
    “Ignorance, the root and the stem of every evil.”

  4. #4
    Join Date
    Apr 2008
    Location
    Marquette, MI
    Posts
    15,252
    Mentioned
    138 Post(s)
    Quoted
    680 Post(s)

    Default

    That's actually pretty cool. You should continue developing it. Maybe add some scores? Have the targets move? Not sure if you can do that with SCAR though.

  5. #5
    Join Date
    Apr 2007
    Posts
    3,152
    Mentioned
    3 Post(s)
    Quoted
    1 Post(s)

    Default

    Of course you can do that with SCAR. Add momentum to the player and you pretty much have asteroids! Nice Job.
    SCAR Tutorials: The Form Tutorial | Types, Arrays, and Classes
    Programming Projects: NotePad | Tetris | Chess


  6. #6
    Join Date
    Sep 2006
    Posts
    6,089
    Mentioned
    77 Post(s)
    Quoted
    43 Post(s)

    Default

    Nice!

  7. #7
    Join Date
    Mar 2007
    Posts
    1,700
    Mentioned
    0 Post(s)
    Quoted
    8 Post(s)

    Default

    Cool adapted for simba
    Code:
    program nnnn;
    {$i srl/srl/core/simba.simba}
    var
      range, savex, savey, projimg, projx, projy, backg, gposx, gposy, i, red: Integer;
      green, speed, projspeed, xmax, ymax, bitmap:integer;
      angspeed, ang, saveang: extended;
      shot: boolean;
      DF: TForm;
    type
      enemy = record
      enx, eny: integer;
    end;
    var
    enemies: array of enemy;
    v: tvariantarray;
    
    procedure createenemy;
    begin
      setlength(enemies, length(enemies) + 1);
      for i := (length(enemies)-1) to high(enemies) do
      begin
        enemies[i].enx := Random(xmax-10);
        enemies[i].eny := Random(ymax-10);
      end;
    end;
    
    procedure formo;
    begin
      DF := CreateForm;
      DF.ClientHeight:= ymax;
      DF.ClientWidth := xmax;
      DF.Caption := 'Form';
      DF.Position := poDesktopCenter;
      //GetSelf.WindowState := wsMinimized;
      DF.Show;
    end;
    
    function killenemy(lol: enemy): Boolean;
    begin
      Result := IntInBox(projx, projy, inttobox(lol.enx, lol.eny, lol.enx + 10, lol.eny + 10)) or
        IntInBox(projx + 6, projy, inttobox(lol.enx, lol.eny, lol.enx + 10, lol.eny + 10)) or
        IntInBox(projx, projy + 6, inttobox(lol.enx, lol.eny, lol.enx + 10, lol.eny + 10)) or
        IntInBox(projx + 6, projy + 6, inttobox(lol.enx, lol.eny, lol.enx + 10, lol.eny + 10))
    end;
    
    function stupid(angle:extended; spd:integer; crap:boolean):integer;
    begin
      if crap then result:=((round(degrees(sin(radians(angle)))))/spd);
      if (not(crap)) then result:=((round(degrees(cos(radians(angle)))))/spd);
    end;
    
    begin
      ang:=90;
      angspeed:=4;
      xmax:=500;
      ymax:=500;
      setlength(enemies, 0);
      backg  := BitmapFromString(xmax, ymax, 'beNrtwTEBAAAAwqD1T20MH' +
            '6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
            'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgbx7sAAE=');
      green:= BitmapFromString(15, 15, 'beNq1yrkNADAIw' +
           'ED2X9qpKJCI+K0rjfgh2VC7M9bWjGc+8zeZifRmcqozNx6sgX6C');
      red:= BitmapFromString(11, 11, 'beNpjYPjPMIroggA92XiI');
      bitmap:=green;
      projimg:= BitmapFromString(6, 6, 'beNpjYACC/0iIAYnBgCrOgCqIKfIfQwGKyQAqehPt');
      gposx:=145;
      gposy:=145;
      range:=200;
      speed:=13;
      projspeed:= 7;
      SetTransparentColor(projimg,0);
      SetTransparentColor(green,0);
      ThreadSafeCall('formo', v);
      repeat
        FastDrawTransparent(gposx, gposy, green, backg);
        if shot then
          begin
            projx:=projx-(stupid(saveang,projspeed,true));
            projy:=projy-(stupid(saveang,projspeed,false));
            if (not(InCircle(projx, projy, savex, savey, range))) then shot:=false;
            FastDrawTransparent(projx, projy, projimg, backg);
          end;
        if(iskeydown(GetKeyCode('k'))) then createenemy;
        if shot then
        begin
          for i := 0 to high(enemies) do
          begin
            if killenemy(enemies[i]) then
            begin
              shot:=false;
              enemies[i]:= enemies[high(enemies)];
              setlength(enemies, length(enemies) -1);
            end;
          end;
        end;
        for i := 0 to high(enemies) do fastdrawtransparent(enemies[i].enx, enemies[i].eny, red, backg);
    
        DrawBitmap(backg, df.canvas, 0, 0);
        Wait(10);
        green:=rotatebitmap(bitmap,(radians(ang)));
    
        case true of   //0
          (IsKeyDown(VK_DOWN)):begin
                           gposx:=gposx-(stupid(ang,speed,true));
                           gposy:=gposy-(stupid(ang,speed,false));
                       {2}    end;
          (IsKeyDown(VK_UP) ):begin
                           gposx:=gposx+(stupid(ang,speed,true));
                           gposy:=gposy+(stupid(ang,speed,false));
                           end;
        end;
        case true of  {3}
          (IsKeyDown(VK_RIGHT)): ang:= ang+angspeed;
                      {1}
          (IsKeyDown(VK_LEFT)): ang:= ang-angspeed;
        end;
        case true of
          (gposx<0): gposx:=0;
          (gposx>(xmax-15)): gposx:=(xmax-15);
        end;
        case true of
          (gposy<0): gposy:=0;
          (gposy>(ymax-15)): gposy:=(ymax-15);
        end;
        if (not(shot)) and iskeydown(GetKeyCode('t')) then
          begin
          shot:=true;
          saveang:=ang;
          savex:=gposx+4;
          savey:=gposy+4;
          projx:=gposx+4;
          projy:=gposy+4;
          end;
        FastDrawClear(backg,0);
      until (IsKeyDown(GetKeyCode('p')));
      ClearDebug;
    end.
    incase anyone doesnt want to do it themselves

  8. #8
    Join Date
    Feb 2006
    Location
    Tracy/Davis, California
    Posts
    12,631
    Mentioned
    135 Post(s)
    Quoted
    418 Post(s)

    Default

    Love it when people make this kind of neat stuff for scar.
    And cohen are you kidding me?! Yakman made some DAMN amazing games for scar, as well as a FULLY FUNCTIONING IRC client! He is one damn amazing scripter.

    I agree, you should definitely develop this further and make even make some more classic fun games!

  9. #9
    Join Date
    Mar 2008
    Location
    Look behind you.
    Posts
    795
    Mentioned
    0 Post(s)
    Quoted
    1 Post(s)

    Default

    Awesome! I could never do this. XD

  10. #10
    Join Date
    Oct 2010
    Posts
    12
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    Great little game . I never seen anything like it on scar. I'm not too sure how to shoot or if you can?

  11. #11
    Join Date
    Sep 2006
    Posts
    6,089
    Mentioned
    77 Post(s)
    Quoted
    43 Post(s)

    Default

    You can use "t"
    Hup Holland Hup!

  12. #12
    Join Date
    Nov 2011
    Posts
    15
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default

    i got this
    Exception in Script: Unable to find file 'srl/srl/core/simba.simba' used from ''
    doesn't exist

  13. #13
    Join Date
    Feb 2006
    Location
    Tracy/Davis, California
    Posts
    12,631
    Mentioned
    135 Post(s)
    Quoted
    418 Post(s)

    Default

    Quote Originally Posted by heado45 View Post
    i got this
    Exception in Script: Unable to find file 'srl/srl/core/simba.simba' used from ''
    doesn't exist
    The first post on this thread says "Obsolete" so whatever it is, it doesn't work anymore.

  14. #14
    Join Date
    Jan 2012
    Posts
    190
    Mentioned
    0 Post(s)
    Quoted
    10 Post(s)

    Default

    SCAR is great but terrible for games look at this first person perspective its barely a square
    you can act like your walking its slow as can be
    SCAR Code:
    var
    _0,_1,_2,_3,_4,_5:integer;
    begin
     DisplayDebugImgWindow(200,200)
     _0:=bitmapfromstring(200,200,'')
     while not(_1=-1)do
     begin
      _1:=_1+1
      if _1=200 then
      begin
       if IsArrowDown(ar_down)then _2:=_2+4;
       if IsArrowDown(ar_up)then _2:=_2-4;
       if IsArrowDown(ar_left)then _3:=_3-4;
       if IsArrowDown(ar_right)then _3:=_3+4;
       while not(_5=2+-_2)do
       begin
        while not(_4=2+-_2)do
        begin
         FastSetPixel(_0,_4+_3+98+_2/2,_5+98+_2/2,clwheat)
         _4:=_4+1
        end;
        _5:=_5+1
        _4:=0
       end;
       _5:=0
       SafeDrawBitmap(_0,GetDebugCanvas,0,0)
       FastDrawClear(_0,0)
       _1:=0
      end;
     end;
    end.

    SCAR Code:
    VAR BMP,_0,_1,_2:INTEGER;
     S:ARRAY OF STRING;
      _3:ARRAY OF INTEGER;
    BEGIN
    ClearDebug
    BMP:=BitmapFromString(200,200,'')
    DisplayDebugImgWindow(200,200)
    REPEAT
     _2:=0 REPEAT _1:=0
      REPEAT FastSetPixel(BMP,_1+200/2-1-_0/2,_2+200/2-1-_0/2,CLWHEAT)
       IF _0=0 THEN BREAK; _1:=_1+1 UNTIL _1=_0
        IF _0=0 THEN BREAK;_2:=_2+1 UNTIL _2=_0
         SetLength(S,LENGTH(S)+1)
          S[_0/2]:=BitmapToString(BMP)
           SetLength(_3,LENGTH(_3)+1)
            _3[_0/2]:=BitmapfromString(200,200,S[_0/2])
             //WRITELN(S[_3])
              //FastDrawTransparent(0,0,_3[_0/2],bmp)
               //SafeDrawBitmap(bmp,getdebugcanvas,0,0)
                FastDrawClear(BMP,0)
                 WRITELN('NOW LOADING '+INTTOSTR(_0/2)+'%')
                  _0:=_0+2 UNTIL _0=200
    BMP:=BitmapFromString(600,600,'')
    _1:=0
    _2:=0
    REPEAT
     _0:=0 REPEAT
      _0:=_0+1 UNTIL _0=20000
    IF IsArrowDown(AR_UP) THEN _1:=_1+1;
    IF IsArrowDown(AR_DOWN) THEN _1:=_1-1;
    IF IsArrowDown(AR_LEFT) THEN _2:=_2+2;
    IF IsArrowDown(AR_RIGHT) THEN _2:=_2-2;
    FastDrawTransparent(200-1+_2,200-1,_3[_1],BMP)
    SafeDrawBitmap(BMP,GetDebugCanvas,-200-1,-200-1)
    FastDrawClear(BMP,0)
    UNTIL FALSE
     END.
    a bit fun

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •