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.

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

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.