unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls,
OpenGLContext, glcanvas, gl, Math;
const
DEMO_TEXT = 'HI AND WELCOME GIGATRON PRESENTS SHADOW OF THE BEAST CRACKED ' +
'TRAINED AND COMPACTED TO ONE DISK WITH QUANTUM DATA PACKER V 5.0 ' +
' ENJOY TECHNOLOGY AND SEE YOU ON ANOTHER PRODUCTION BYE BYE ';
type
{ TForm1 }
TForm1 = class(TForm)
OpenGLControl1: TOpenGLControl;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure OpenGLControl1Paint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
public
end;
var
Form1: TForm1;
tmr, rr,gg,bb : Single;
counter : integer;
// bitmap font !
fnt: GLuint;
fnt_tmr : Single;
fnt_w, fnt_h : integer;
// Amiga decruncher & the rest
adosb,adosf : GLuint;
decrunchFinished: Boolean;
decrunchDuration: Integer;
adosb_w,adosb_h,adosf_w,adosf_h: integer;
implementation
{$R *.lfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
glInit(OpenGLControl1);
glEnableVSync(True);
Randomize;
tmr := 0.0; // float
fnt_tmr := 0.0;
rr := random(); gg := random(); bb := random();
counter := 0;
fnt := glLoadPNGToTexture('fonts/32/025_32.png', fnt_w, fnt_h);
adosb := glLoadPNGToTexture('gfx/amdos.png', adosb_w, adosb_h); // AmigaDos Back
adosf := glLoadPNGToTexture('gfx/amdos2.png', adosf_w, adosf_h); // AmigaDos Front
// Initialiser le decrunch
decrunchFinished := False;
decrunchDuration := 0; // decrunch duration
end;
procedure TForm1.OpenGLControl1Paint(Sender: TObject);
var
cw, ch: integer;
begin
glFillScreen(OpenGLControl1, 0.1, 0.1, 0.1, 1.0);
cw := OpenGLControl1.Width ;
ch := OpenGLControl1.Height ;
if not decrunchFinished then // not finished
begin
glDecrunchBars(cw,ch, 20, decrunchDuration);
Inc(decrunchDuration);
glDrawTexture2D(600,300,adosb_w,adosb_h,adosb,2.5,2.5,0.0,1.0,1.0,1.0,1.0);
glDrawTexture2D(598,68, adosf_w,adosf_h,adosf,2.5,2.5,0.0,1.0,1.0,1.0,1.0);
if decrunchDuration >= 250 then decrunchFinished := True;
end
else // decrunch end ? continue :)
begin
glStarFieldShader(0, 0, cw, ch, tmr, 1.0, 0.0, 8, 1.0, 1.0, 1.0, 1.0);
glDrawVectorText3DSolid(0, 40, 0,'GIGATRON', 30, 4, // 3D Space pos x,y,z !!
2, cw, ch,180.0, -tmr*8.0, 0.0, 0.8, 1.0, 1.0, 1.0,
Cos(tmr * 0.4) * 40, Sin(tmr * 0.2) * 80, 0.8 );
glCandyBarShader(0, 0, 1980, 130, tmr/3.0, 0.0, 20.0, 1.0, 1.0, 1.0,
rr, gg, bb,1.0);
glCandyBarShader(0, 884, 1980, 130, -tmr/3.0, 0.0, 20.0, 1.0, 1.0, 1.0,
rr, gg, bb, 1.0);
glBitmapFontText(fnt, Round(8000 - fnt_tmr ), 710-50*abs(sin(tmr*0.48)*5.0),
DEMO_TEXT, 32, 32, 10, 1.0, 0.0, bmMax, 6.0,6.0);
end;
OpenGLControl1.SwapBuffers;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
tmr := tmr + 0.1;
fnt_tmr := (fnt_tmr + 15.0) mod 52000;
counter := (counter + 1) mod 100;
if (counter >= 99) then // reset colors
begin
rr := random();
gg := random();
bb := random();
end;
OpenGLControl1.Invalidate;
end;
end.