Forever GS

 
 

program ForeverGS;

uses Types, QuickDraw, Events, MiscTool, ST;


type

  Star = record

    x, y, sx, sy: Real;

  end;


var

  i, color, dir: Integer;

  tick: LongInt;

  s: Star;

  stars: Array[0..20] of Star;

 

procedure playMusic(path: String);

begin

  loadOneTool(219, 0);

  stStartup(57005);

  stLoadOneMusic(path);

  stPlayMusic(true);

end;


procedure stopMusic;

begin

  stShutDown;

end;


begin


  { Setup }

 

  graphics(320);

  clearScreen(black);

  playMusic('Music/Toolbox');

  setPenMode(modeXOR);

  hideCursor;

  tick := getTick;

  dir := -1;


  { Draw background }


  setColorEntry(0, 15, 0);

 

  for i := 1 to 15 do

    setColorEntry(1, i, i);

 

  for i := 125 to 199 do

    setSCB(i, 1);


  setPenSize(1, 5);

 

  for i := 1 to 15 do begin

    setSolidPenPat(i);

    moveTo(0, 120 + i * 5);

    line(320, 0);

  end;

 

  setPenSize(1, 1);

  setBackColor(black);

  setForeColor(15);

  moveTo(85, 124);

  write('Apple IIGS Forever!');

 

  { Setup stars }

 

  for i := 0 to 20 do begin

    stars[i].x := 160;

    stars[i].y := 60;

    stars[i].sx := (random mod 41) / 10 - 2;

    stars[i].sy := (random mod 41) / 10 - 2;

  end;

 

  repeat

 

    { Color cycle title }

   

    color := getColorEntry(0, 15);

    if (color = 0) or (color = $F00) then

      dir := -dir;

    setColorEntry(0, 15, color + $100 * dir);

   

    { Color cycle background }

   

    color := getColorEntry(1, 15);

    for i := 15 downto 1 do

      setColorEntry(1, i, getColorEntry(1, i - 1));

    setColorEntry(1, 1, color);


    { Move stars }


    for i := 0 to 20 do begin

      s := stars[i];

      setSolidPenPat(i mod 14 + 1);

      moveTo(round(s.x), round(s.y));

      line(0, 0);

     

      stars[i].x := s.x + s.sx;

      stars[i].y := s.y + s.sy;

     

      s := stars[i];

      if (s.x < 0) or (s.x > 319) or (s.y < 0) or

      (s.y > 119)

      then begin

        stars[i].x := 160;

        stars[i].y := 60;

        stars[i].sx := (random mod 41) / 10 - 2;

        stars[i].sy := (random mod 41) / 10 - 2;

      end

      else begin


      { Accelerate stars movement }

     

        stars[i].sx := s.sx * 1.1;

        stars[i].sy := s.sy * 1.1;

      end;

   

      s := stars[i];

      moveTo(round(s.x), round(s.y));

      line(0, 0);

    end;

   

    repeat until getTick - tick > 1;

    tick := getTick;

  until button(0);

 

  stopMusic;

end.

Apple IIGS Forever! Now you can design your own FTA demo!


This program teaches psuedo 3D effect, multiple color palettes and color cycling.


Note: The program uses FTA Tool219 to play music, please install Tool219 to the Apple IIGS System folder first.


GSoft BASIC 3D star field demo:

      TYPE STAR

        X

        Y

        SX

        SY

      END TYPE


      DIM S AS STAR

      DIM STARS(20) AS STAR


      HGR

      SETPENMODE (MODEXOR)


      ! Write message


      SETBACKCOLOR (0)

      SETFORECOLOR (7)

      MOVETO (85, 100)

      PRINT “Apple IIGS Forever!”


      ! Setup stars


      FOR I = 0 TO 20

        STARS(I).X = 160

        STARS(I).Y = 100

        STARS(I).SX = RND (1) * 4 - 2

        STARS(I).SY = RND (1) * 4 - 2

      NEXT


      DO


        ! Move Stars


        FOR I = 0 TO 20

          S = STARS(I)

          HCOLOR= (I / 21) * 15 + 1

          HPLOT S.X, S.Y


          STARS(I).X = S.X + S.SX

          STARS(I).Y = S.Y + S.SY

          S = STARS(I)


          IF (S.X < 0) OR (S.X > 319) OR (S.Y < 0)

          OR (S.Y > 199) THEN

            STARS(I).X = 160

            STARS(I).Y = 100

            STARS(I).SX = RND (1) * 4 - 2

            STARS(I).SY = RND (1) * 4 - 2

          ELSE


          ! Accelerate stars movement


            STARS(I).SX = S.SX * 1.1

            STARS(I).SY = S.SY * 1.1

          END IF


          HPLOT STARS(I).X, STARS(I).Y

        NEXT

      LOOP