• Welcome to Dark Bit Factory & Gravity.
 
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - OFFLiNE

#1
Quote from: WhiteWolf on May 10, 2017Okay mods (or admins) please remove al of this crap if padman readed this its done for me no hard feeelings Padman but think before you act okay ;)
i hope i havent offended or breaked the dbf rules if i did i apolagize i respect this board and its contributing members..

Greets WhiteWolf

I think i took care of that part already didnt i and continued the topic as it should Shockwave ;)

please remove the crap send us a copy in our pm to remember it and its done i have said what i wanted to say and still standing behind every word of it no one likes to be accused of being a thief neither would you...

Oh and sorry its never been our intention to replace WAB dunno where that idea comes from maybe you should have a look on fb cos thats where al the codef action is aim a active member there and then you might understand how it came alive cos loads of people where asking for good tutorials and want to learn making things like the remakes and have a taste of the action with live samples and learning it by seeing and doing it thats al this codef to exe is just a part of the whole plan and to see if we can fix that also online offline in pb

Wel thanx for your like and comments and the work on keeping this board online schockwave

Sorry missed this one : I can't get my head around why you'd want to add your own splash screen in front of someone elses remake unless it was you who made the remake, maybe there is a readon for this which I'm missing? Perhaps you can explain.
Dont forget that the codef guys itself are interested in this also im building and thinking this together with them Dagon MellowMan etc etc

Wel we hope that people by using our Future WEBDEFF editor become active in the WEBDEFF demo scene  thats going to be a windows standalone exe program file which includes  lot of already installedl jslibs and webdemo effects and editors like glsl shadertool particle systems it gives the end user the abillity to work em out offline and see on the fly whats happening  not only codef also threejs and others it has included tutorials of learning glsl or webgl coding its open source brackets engine so they can use it as the like and build it further or remove stuff they arrent interested in the codef samples are just to give the end user a look whats going on in the kitchen and are able to work with the files ad own fonts that are also included change the music  change the colors etc etc learning by doing and no need to get the whole crap online setting up hosting uploading files installing the JS libs etc etc
But i think this whole Codef and WEBDEFF project thing is highly misunderstood here.
And by the looks of it people arrent even interested in looking deeper of where its comming from.
Its a pitty they already have their opinions and conclusions ready.

When i google your website im pretty sure it says :

DARK BIT FACTORY :: DEMOSCENE CODING WEBSITE.
Learn how to code effects and demos for the demoscene in this friendly programing community! All coders welcome

Wel it sure doesnt feel that way
#2
QuoteNo offense mate. But it is what it is. A web gadget displaying a website of a remake you did not create and a mod file being probably played on top locally. Otherwise it wouldn't work. I doubt that you can get this to work offline and to be honest I don't see the point either.

Wel to take al your doubts away we did this already as you can see in this video https://www.youtube.com/watch?v=4Ll_CId8jWc&feature=youtu.be sorry for the lame quality of lagging video but you get the idea and can see it works offline in your local chrome browser

We are currently working on a multifunctional WEB based Demo EFFects EDiTOR for short WEBDEFF EDiTOR for windows os

You can find more info here http://www.aftermath-creations.net/viewtopic.php?f=50&t=287

Its a open source project based on the brackets engine. ( If people are interested i can start a topic here on DBF about the WEBDEFF EDiTOR )

The use of this is to make WEBDEFF coding easier to access for beginners they install the package and already have samples tutorials Remakes provided and approved by codef and wab people
No need to buy online hosting setup accounts upload the libs ad or code contents cos its already in the package.
It carries options like teamhack so possibilitie by sharing a code like teamvieuwer to code together on the same projects using the editor .
Wel i can talk on for hours about its possibilities and things it can do just lemme know if people are interested here in following the progress of the WEBDEFF Tool and i wil start a topic here and share it otherwise you know where to follow it now
#3
I first wanted to ignore this Padman but you asked for it.  :bfuck1:
You just made the biggest mistake of your online board carreer here with your loud mouth thats only talking crap and bullshit.
Its obvious that you dont know who we are and what we do or did for the scene.
And you didnt even take the time todo that research first before you start to judge us yes us Whitewolf & iNC
We asked ourselves what people are thinking about this project and you are giving your opinion and thoughts ok for so far
We can handle critics sure why not otherwise we shouldend ask for peoples opinion right .
But im so sick and tyerd of people that think they are Ubersceners and think they know everything about it.
And are only bragging bullshit crap and judging other people that try to do and create new things for the scene.
No its not nice to accuse someone from stealing other peoples work and judging them before you are 100% sure thats the case.
So please do me a favour and do your research first before you write down big words and judgements cos some day you might offend the wrong people and bad things might happen okay...

Now for the fun part i show you 2 screenshots that hopefully explains enouf




Official release Topic. http://www.aftermath-creations.net/viewtopic.php?f=26&p=503#p503

#4
After a oldskool coding session night, iNC made it once again....



The CODEF2EXE Tool has been brought to live......

First, it was a idea of a concept from the evening but than it has been realised after hot enthusiasm in only 2 hours as a working win executable demo.

Yeah, we're now able to add Codef Screens, which normally count multiple files to combine and compile them into one Stand alone Windows EXE File.
How cool is that, you can download a working sample from the attachment of this post to see it for yourself. :icon_computer:
The attached example show the online version. A offline version with more features like adding own Splash Screens in front of a Demo.exe file and many more we will release very soon. Be patient...

.:: DIRECT DOWNLOAD HERE ::.

Let us know what you think about this project.
#5
Looking forward Omnikam
#6
Quote from: rbz on January 21, 2017
Hi inc,

I did some tests with an Intel HD 4600 and using a tool called Bonzomatic - https://github.com/Gargaj/Bonzomatic/releases/latest

I've used "sinwave_blobs" and "techtunnel" shaders and both worked fine on Bonzomatic and on your tool I got a black/white screen :(.

And here are the shaders that I've tested,  just copy and paste in Bonzomatic.

"sinwave_blobs"
#version 430 core

uniform float fGlobalTime; // in seconds
uniform vec2 v2Resolution; // viewport resolution (in pixels)
// by @mnstrmnch (remixed by @mrdoob)

//uniform vec2 resolution;
//uniform float time;

float f(vec3 o)
{
    float a=(sin(o.x)+o.y*.25)*2.35;
    // o=vec3(cos(fGlobalTime+a)*sin(fGlobalTime+o.x)*o.x-sin(fGlobalTime+a)*o.y,sin(a)*sin(fGlobalTime+o.y)*o.x+cos(fGlobalTime+a)*o.y,o.z);
    o=vec3(sin(fGlobalTime+a)*sin(o.x+o.z/3.0)*o.x,sin(fGlobalTime+a)*cos(o.y+o.z/2.0)*o.y,o.z);
    return dot(cos(o)*cos(o),vec3(1))-1.2;
}

vec3 s(vec3 o,vec3 d)
{
    float t=0.0;
    float dt = 0.2;
    float nh = 0.0;
    float lh = 0.0;
    for(int i=0;i<50;i++)
    {
        nh = f(o+d*t);
        if(nh>0.0) { lh=nh; t+=dt; }
    }

    if( nh > 0.0 ) return vec3(1.0,1.0,1.0);

    t = t - dt*nh/(nh-lh);

    vec3 e=vec3(-.1,.0,0.0);
    vec3 p=o+d*t;
    vec3 n=-normalize(vec3(f(p+e),f(p+e.yxy),f(p+e.yyx))+vec3((sin(p*75.)))*.001);

    return vec3( mix( ((max(-dot(n,vec3(0.977)),0.) + 0.125*max(-dot(n,vec3(-.707,-.707,0)),0.)))*(mod

(length(p.xy)*5.,2.)<1.0?vec3(1.0,1.,1.):vec3(.0,.0,.0))
                           ,vec3(1.0,1.0,1.5), vec3(pow(t/10.,1.5)) ) );
}

void main()
{
    vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / v2Resolution.xy;
    gl_FragColor=vec4(s(vec3(0.0,0.0,fGlobalTime), normalize(vec3(p.xy,sin(fGlobalTime/5.0)*0.25+0.75))),1.0);
}


"techtunnel"
#version 430 core

uniform float fGlobalTime; // in seconds
uniform vec2 v2Resolution; // viewport resolution (in pixels)


//uniform float time;
//uniform vec2 mouse;
//uniform vec2 resolution;

#define PI 3.1415926535897932384626433832795

#define ITER 12

vec2 rotate(vec2 p, float a)
{
return vec2(p.x * cos(a) - p.y * sin(a), p.x * sin(a) + p.y * cos(a));
}

vec2 circuit(vec2 p)
{
p = fract(p);
float r = 0.123;
float v = 0.0, g = 0.0;
float test = 0.0;
r = fract(r * 9184.928);
float cp, d;

d = p.x;
g += pow(clamp(1.0 - abs(d), 0.0, 1.0), 160.0);
d = p.y;
g += pow(clamp(1.0 - abs(d), 0.0, 1.0), 160.0);
d = p.x - 1.0;
g += pow(clamp(1.0 - abs(d), 0.0, 1.0), 160.0);
d = p.y - 1.0;
g += pow(clamp(1.0 - abs(d), 0.0, 1.0), 160.0);

for(int i = 0; i < ITER; i ++)
{
cp = 0.5 + (r - 0.5) * 0.9;
d = p.x - cp;
g += pow(clamp(1.0 - abs(d), 0.0, 1.0), 160.0);
if(d > 0.0)
{
r = fract(r * 4829.013);
p.x = (p.x - cp) / (1.0 - cp);
v += 1.0;
test = r;
}
else
{
r = fract(r * 1239.528);
p.x = p.x / cp;
test = r;
}
p = p.yx;
}
v /= float(ITER);
return vec2(v, g);
}

float box(vec2 p, vec2 b, float r)
{
return length(max(abs(p) - b, 0.0)) - r;
}

float rand(float p)
{
return fract(sin(p * 591.32) * 43758.5357);
}

float rand2(vec2 p)
{
return fract(sin(dot(p.xy, vec2(12.9898, 78.233))) * 43758.5357);
}

vec2 rand2(float p)
{
return fract(vec2(sin(p * 591.32), cos(p * 391.32)));
}

vec3 sky(vec3 rd, float t)
{
float u = atan(rd.z, rd.x) / PI / 2.0;
float v = rd.y / length(rd.xz);
float fg = exp(-0.04 * abs(v));
vec2 ca = circuit(vec2(u, (v - t * 25.0) * 0.03));
vec2 cb = circuit(vec2(-u, (v - t * 50.0) * 0.06));
float c = (ca.x - ca.y * 0.2) + cb.y * 0.7;
vec3 glow = pow(vec3(c), vec3(5.18, 0.8, 0.6) * 3.0);
vec2 cr = vec2(u, (v - t * 25.0) * 0.03);
float crFr = fract(cr.y);
float r = smoothstep(0.8, 0.82, abs(crFr * 2.0 - 1.0));
float vo = 0.0, gl = 0.0;
for(int i = 0; i < 6; i ++)
{
float id = float(i);
vec2 off = rand2(id);
vec2 pp = vec2(fract(cr.x * 5.0 + off.x + t * 8.0 * (0.5 + rand(id))) - 0.5, fract(cr.y * 12.0 + off.y * 0.2) - 0.5);
float di = box(pp, vec2(0.2, 0.01), 0.02);
vo += smoothstep(0.999, 1.0, 1.0 - di);
gl += exp(max(di, 0.0) * -60.0);
}
vo = pow(vo * 4.4, 2.0);
vec3 qds = vec3(1.0);
vec3 col = mix(glow, qds, clamp(vo, 0.0, 6.0)) + vec3(0.0, 0.0, 0.0) * gl * 0.5;
return col + (1.0 - fg);
}

vec3 colorset(float v)
{
return pow(vec3(v), vec3(6.2, 0.4, 1.0) * 4.0);
}



vec3 pixel(vec2 uv)
{
uv /= v2Resolution.xy;
uv = uv * 2.0 - 1.0;
uv.x *= v2Resolution.x / v2Resolution.y;
vec3 ro = vec3(0.0, 0.0, -0.0);
vec3 rd = normalize(vec3(uv, 1.6));
float t = fGlobalTime;
rd.yz = rotate(rd.zy, sin(t) * 0.8 + PI * 0.5);
rd.yz = rotate(rd.yz, t * 0.25);
rd.yx = rotate(rd.xy, sin(t) * 0.1);
rd.yx = rotate(rd.yx, t * 0.1);
vec3 col = sky(rd, t * 0.25);
return pow(col, vec3(1.5)) * 1.3;
}



void main()
{
vec2 uv = gl_FragCoord.xy;
vec3 col;
vec2 h = vec2(0.5, 0.0);
uv += rand2(fGlobalTime) * 6.0;
col = pixel(uv);
col += pixel(uv + h.xy);
col += pixel(uv + h.yx);
col += pixel(uv + h.xx);
col /= 4.0;
gl_FragColor = vec4(col, 0.0);
}


Thanx for sharing this RBZ this explains a lot and i think :

### Libraries and other included software Bonzomatic
- Scintilla editing component by the Scintilla Dev Team (http://www.scintilla.org/)
- OpenGL Extension Wrangler Library by Nigel Stewart (http://glew.sourceforge.net/)
- BASS.DLL by Ian Luck (http://www.un4seen.com/)
- STB Image and Truetype libraries by Sean Barrett (http://nothings.org/)
- Simple DirectMedia Layer by the SDL dev team (https://www.libsdl.org/)
- JSON++ by Hong Jiang (https://github.com/hjiang/jsonxx)

The Shadereditor by inc doesnt use Java DirectX or SDL and is capable to run without any of them on most gfx card platforms.
But to make his editor also work on the intels gfx platforms you have pointed out the right solution and way to go.
Thanks again for your interests and sharing your experiences...
Greets Wolf
#7
Quote from: inc. on January 13, 2017
Yes, i write a plain code with a oglgadged plus a simple  glsl shader.
Seems to be a problem with pc's and Intel gfx chip cards.

Yep thats for sure nasty crap im sure there is a solution game industry uses these glsl shaders for ages tho
#8
Quote from: waste on January 10, 2017
i've tested this one at home with nvidia gtx and gt => ok

black screen on NUC , music ok

Hmm strange situation waste have you tried this one to :

http://www.dbfinteractive.com/forum/index.php?topic=6547.msg83678#msg83678

It has a lighter GLSL code
When i run the egg demo from inc it shows up but runs slow not smooth
(discovered that the GLSL script code for that demo is demanding quite a lot shadersources from the videocard)
#9
Another interesting way to use these glsl shaders is to use them for some kind of DJ/VJ program.
This is nothing new and already done.
But im sure we can make this way better then the currently programs that are out there.(they are kinda crappy and pretty basic)
Another interesting idea is to intergrate them in a audio player to load as visuals.
Like mediaplayer has winamp and xm player.
sorry for bugging you al with this just brainstorming a bit about this new GLSL intergrating with purebasic scripting.....
Hope to get you al motivated and see what you come up with  ;D
#10
Quote from: ttemper on January 06, 2017
Awesome stuff inc.

Any tools to help in the process of demo making is a win... and that it exports directly for PureBasic... :)

-ttemper.

Yeah next step is figuring out how to layer this in a demoscreen so we are able to ad scroller gfx framework etc etc imagine the demos and cracktros we can build then wohooo getting exited
#11
I have been beta testing this wonderfull glsl tool and it works like a charme and stable inc well done keep up the great work
#12
General chat / Happy New Year !!!!
December 31, 2016
Made this quicky NewYears demo on the last hours left of 2016...
The demo is about 6mb big (i didnt pack the demo with UPX or any other packer) hope you al like it....

Happy NewYear DBF Greets WhiteWolf.....

#13
General chat / Re: new tune from me.
December 26, 2016
The tune has a  :updance: happy catching melody... Wel done Ampli keep up the good work...
#14
Merry xmass to everyone......

#15
Purebasic / Re: Demo Test
December 23, 2016
Quote from: emook on December 03, 2016
I've uploaded all the required files and sources (I think!)

Hi Emook i have tested your GLSL script and it starts then page stays blank.
After a few secs my gfx card loses connection and i get directed to this Help page of Nvidia.

http://nvidia.custhelp.com/app/answers/detail/a_id/3007

Im also working on this GLSL PureBasic routine project.
And my experience is that the problem with it is how big the GLSL shader routine is and how much shaders/effects it contains and calling from your gfx card.
example :
The first post of inc on this topic runs and works for me but very slow.
There are loads of written GLSL shader scripts and a few standards like (1)Vertex shader and (2)Fragment shader. (OpenGLEs 2.0 /3.0)
The first makes the GLSL shader run smooth if your machine specs and GFX card supports the routine demands and sec as the name says is loaded and running in Fragments les intensive but doesnt run smooth.
There are loads of GLSL shader scripts and routines out there that do look good and work smoothly.
A nice source to test and start is on the Android Mobile platform https://play.google.com/store/apps/details?id=info.u250.glsl&hl=en
Install this GLSL Gallery.Over 11,701 examples now can run on Android.

* OpenGL ES 2.0
* Libgdx

you can see for yourself now wich scripts are to heavy for higher end specs and wich ones run smoothly on most common setups.

My specs :

        Windows7 ultimate sp1 32bits
        4GB ddr2 memory
        GFX NVIDIA GeForce 8200M G
   Manufacturer   NVIDIA
   Model   GeForce 8200M G
   GPU   MCP77MV/MCP79MVL
   Device ID   10DE-0845
   Revision   A3
   Subvendor   HP (103C)
   Current Performance Level   Level 1
   Current GPU Clock   169 MHz
   Current Memory Clock   666 MHz
   Current Shader Clock   666 MHz
   Voltage   0.920 V
   DirectX Support   10.0
   DirectX Shader Model   4.0
   OpenGL Support   3.0
   Bus Interface   FPCI
   Temperature   64 °C
   Driver version   21.21.13.4201
   BIOS Version   62.77.2f.00.07
   ROPs   4
   Shaders   16 unified (if the GLSL Routine Script needs more you get lagging or blank screen)
   Memory Type   System
   Memory   256 MB
      Count of performance levels : 3
            Level 1 - "Default"
               GPU Clock   169 MHz
               Memory Clock   338 MHz
               Shader Clock   666 MHz
            Level 2 - "2D Desktop"
               GPU Clock   275 MHz
               Memory Clock   550 MHz
               Shader Clock   666 MHz
            Level 3 - "3D Applications"
               GPU Clock   400 MHz
               Memory Clock   800 MHz
               Shader Clock   666 MHz

Info made with Speccy :http://www.piriform.com/speccy

More info about GLSL programming and standards @ wikibooks : https://en.wikibooks.org/wiki/GLSL_Programming
Goodluck with this cool Purebasic GLSL shader project i hope this info helped a bit.
greets Wolf
#16
Purebasic / Re: Demo Test
December 22, 2016


Okay here is my first attempt with this new cool GLSL pb routine
Coded and provided by inc.

Let us know if this one runs better for you  ;)


#17
Your welcome lets hope we started a new trend here and maybe actually learn something....  :goodpost:
#18


Here it is a Amiga retro remake intro called Vroom.
The official author of this code is PJAY274 not me.
I havent seen much complete pb cracktro codes here so i thought it would  be a nice thing to share here.

Tested on PB 5.30 (x86) and works like a charme.

This is the pb code :

EnableExplicit

#WindowWidth=640 : #WindowHeight = 240 : #TopBorder  = 18 : #BottomBorder  = 18 : #ActualWindowHeight = 240*2

Enumeration ;/ Window
  #Window_Main
EndEnumeration
Enumeration ;/ Gadget
  #Gad_OpenGL
EndEnumeration

;{ Init bits

Structure Scrolltext
  Letter_Texture_Pos.f
  Letter_Texture_Posy.f
  X.l
EndStructure
Structure Balls
  X.f
  Y.f
  Z.f
EndStructure
Structure Copper
  length.l
  r.c[1000]
  g.c[1000]
  b.c[1000]
  RGB.i[1000]
EndStructure

Global Quit.i, DrawnFrames.i, Offset.f, Font_Lookup_Text.S, MyLoop.i,  Copper1.Copper, Max_Balls = 100, BallSpeed.f=0.04
Global ST_Base1.f,ST_Base2.f, ST_Next.i, ST_FontWidth.w = 30, ST_Texture_Width.f = 0.0625, ST_Font_Gap.w = 2, ST_Text.S, ST_Position.i, ST_Delay_Scroller.i, Pages.i = 6
Global Colours.i, Page.i, Current_Page.i = 1, Current_Letter.i, Page_Swap_Duration.i = 280, Page_Swap_Time.i = 200, Current_Line.i, Current_Letter.i, PT_Delay.i=1, PT_Update.i
Global Dim MiniText.s(Pages,3,40), Dim Text_Page.s(3,40), Dim Balls.Balls(max_Balls), NewList Scrolltext.Scrolltext()
Global Font_Lookup_Text.S = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.!:,'?-£$/[]+               "
Global ST_Text = "      THE COMPANY AND VISION FACTORY PRESENTS  VROOM FROM LANKHOR SOFTWARE.     SUPPLIED BY LINK CRACKED BY THE COMPANY  THANX TO FIREBALL DIC AND GONOCOK SPECIAL REGARDS TO MARK  NOTE TO ALL NON BELIEVERS : FOXY IS DEAD AND OUTTA THE SCENE             REGARDS TO :  TRSI / CRYSTAL / SKID ROW / NEMESIS / FAIRLIGHT  / BITSTOPPERS / CONSPIRACY AND MARK AND ALL WE HAVE FORGOTTEN THIS TIME               THATS IT BYE .........           REMADE BY:    $£$£ PJAY274 £$£$ |     FOR:  DBFINTERACTIVE.COM|  AND  RETROREMAKES.NET  |       "
Define.i EveryOther, Event.i, SoundAvailable.i

Procedure ReadTextPages() ;/ reads in the text from the datasection to array
  Protected Page.i, X.i, Y.i, NTex.s
  Restore UpperText
  For Page = 1 To Pages
    For Y = 0 To 3
      Read.s NTex.s
      For X = 1 To 40 : MiniText(page,Y,X) = Mid(NTex,X,1) : Next
    Next
  Next
EndProcedure
ReadTextPages()
;}

;{ Window, OpenGL + other bits setup
If MessageRequester("Remade by PJAY274","WWW.RETROREMAKES.NET"+Chr(10)+"FULLSCREEN?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
  OpenWindow(#Window_Main, 0, 0, #WindowWidth, #ActualWindowHeight,"Vroom remake",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
Else
  ExamineDesktops()
  OpenWindow(#Window_Main, 0, 0, DesktopWidth(0), DesktopHeight(0),"Vroom remake",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
EndIf
OpenGLGadget(#Gad_OpenGL,0,0,WindowWidth(0),WindowHeight(0),#PB_OpenGL_Keyboard|#PB_OpenGL_FlipSynchronization|#PB_OpenGL_8BitStencilBuffer)
SetGadgetAttribute(#Gad_OpenGL,#PB_OpenGL_Cursor,#PB_Cursor_Invisible)



glEnable_(#GL_BLEND) : glBlendFunc_(#GL_SRC_ALPHA, #GL_ONE_MINUS_SRC_ALPHA);
glDepthMask_(#GL_FALSE) : glDisable_(#GL_DEPTH_TEST)
glEnable_(#GL_CULL_FACE) : glCullFace_(#GL_BACK)
glMatrixMode_(#GL_PROJECTION): glLoadIdentity_()
glDisable_(#GL_LIGHTING)
glOrtho_(0, #WindowWidth-1, 0, #WindowHeight-1, 0, 1)
glMatrixMode_(#GL_MODELVIEW) : glLoadIdentity_()

;/ read copperlist
Restore Copperlist: ;copd:
Read.w Copper1\length

For MyLoop=1 To Copper1\length
  Read.B Copper1\r[MyLoop] : Read.B Copper1\g[MyLoop] : Read.B Copper1\b[MyLoop]
  Copper1\r[MyLoop] * 15 : Copper1\r[MyLoop] * 1.133
  Copper1\g[MyLoop] * 15 : Copper1\g[MyLoop] * 1.133
  Copper1\b[MyLoop] * 15 : Copper1\b[MyLoop] * 1.133
Next

For MyLoop = 0 To max_Balls
  Balls(MyLoop)\X=Random(#WindowWidth)-#WindowWidth/2
  Balls(MyLoop)\Y=Random(#WindowHeight)-#WindowHeight/2
  Balls(MyLoop)\Z=Random(2000)/200.0
Next

;}

;/ *** Texture loading / processing
Procedure LoadTexture_(Texture.i) ; Returns the texture for an OpenGL application
  Protected Width.i, Height.i, NWidth.i, NHeight.i, X.i, Y.i, Colour.i, I.i, R.i, G.i, B.i, Tex.i
 
  If Texture = 0 : CatchImage(1, ?Bigtext)  : EndIf
  If Texture = 1 : CatchImage(1, ?RogLogo)  : EndIf
  If Texture = 2 : CatchImage(1, ?Ball)     : EndIf
  If Texture = 3 : CatchImage(1, ?Smallfont): EndIf
 
  Width = ImageWidth(1)
  Height = ImageHeight(1)

  NWidth  = Width : NHeight  = Height
  If NWidth > NHeight : NHeight = NWidth : EndIf ;/ had to force equal width / height due to compatability issues
  If NHeight > NWidth : NWidth = NHeight : EndIf ;/

  Dim ImageData.c(NWidth * NHeight * 4)
 
  StartDrawing(ImageOutput(1))

  For Y=0 To NHeight-1
    For X=0 To NWidth-1
      If Y>Height-1 Or X>Width
        Colour = 0 ;/ speeds up loading
      Else
        Colour = Point(X,Y)
        r=Red(Colour) : g=Green(Colour) : b=Blue(Colour)
        ImageData(i)=b : i+1
        ImageData(i)=g : i+1
        ImageData(i)=r : i+1
        ImageData(i)=255
      EndIf
      If r<15 And g<15 And b<15  : ImageData(i)=0 : EndIf
      i+1
    Next
  Next
  StopDrawing()
  glGenTextures_(1, @tex.i)
  glBindTexture_(#GL_TEXTURE_2D, tex)
  glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_NEAREST)
  glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_NEAREST)
  glTexParameteri_(#GL_TEXTURE_2D,#GL_TEXTURE_WRAP_S, #GL_CLAMP)
  glTexParameteri_(#GL_TEXTURE_2D,#GL_TEXTURE_WRAP_T, #GL_CLAMP)
 
  glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGBA, NWidth, NHeight, 0, #GL_BGRA_EXT, #GL_UNSIGNED_BYTE, @ImageData());
  FreeImage(1)
  Dim ImageData(0)
  ProcedureReturn tex
EndProcedure
Procedure CopperTexture_() ; Returns the OpenGL texture
  Protected Height.i, X.i, Y.i, I.i, Tex.i
  Height = Copper1\length
  Dim ImageData.c(Height*Height*4)
  For Y=1 To Height
    For X=1 To Height
      ImageData(i)=Copper1\b[Y] : i+1
      ImageData(i)=Copper1\g[Y] : i+1
      ImageData(i)=Copper1\r[Y] : i+1
      ImageData(i)=255 : i+1
    Next
  Next

  glGenTextures_(1, @tex)
  glBindTexture_(#GL_TEXTURE_2D, tex)
  glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_NEAREST)
  glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_NEAREST)
  glTexParameteri_(#GL_TEXTURE_2D,#GL_TEXTURE_WRAP_S, #GL_CLAMP)
  glTexParameteri_(#GL_TEXTURE_2D,#GL_TEXTURE_WRAP_T, #GL_CLAMP)
 
  glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGBA, Height, Height, 0, #GL_BGRA_EXT, #GL_UNSIGNED_BYTE, @ImageData());
  Dim ImageData(0)
  ProcedureReturn tex
EndProcedure
Global MyTexture.i = LoadTexture_(0),  RogLogo.i = LoadTexture_(1), Ball_Texture.i = LoadTexture_(2), Smallfont.i = LoadTexture_(3), CopperTexture.i = CopperTexture_()
;/ ***

Procedure MiddleText() ;/ draws the static central text
  ;/ Would've been easier to have a single textured quad, but thus way it's modifiable...
  Protected Midtext.s = "VROOM!", YSize.i = 15, C.i, Letter_Texture_Pos.i, Yof.i, Yoff.f, XPos.i, YPos.i
 
  glEnable_(#GL_TEXTURE_2D)
  glBindTexture_(#GL_TEXTURE_2D,MyTexture)
  glBegin_(#GL_QUADS)
  For c = 0 To Len(Midtext)-1
    Letter_Texture_Pos = FindString(Font_Lookup_Text,Mid(Midtext,c+1,1),0)-1
    Yof = Int(((Letter_Texture_Pos-1) / 16))
    Yoff.f = Yof * 0.0625
    Letter_Texture_Pos = Letter_Texture_Pos - (Yof * 16)

    Xpos = (#WindowWidth/2)-((Len(Midtext)*ST_FontWidth)/2) : YPos = (#WindowHeight / 2)-(YSize/2.0)+1
   
    glColor4f_(0.66,0.66,0.66,1.0)
    glTexCoord2f_((ST_Texture_Width*Letter_Texture_Pos),Yoff+0.0585) : glVertex2i_(Xpos+(c*ST_FontWidth),YPos)
    glTexCoord2f_((ST_Texture_Width*Letter_Texture_Pos)+0.0624,Yoff+0.0585) : glVertex2i_(Xpos+(c*ST_FontWidth)+ST_FontWidth,YPos)
    glTexCoord2f_((ST_Texture_Width*Letter_Texture_Pos)+0.0624,Yoff+0) : glVertex2i_(Xpos+(c*ST_FontWidth)+ST_FontWidth,YPos+YSize)
    glTexCoord2f_((ST_Texture_Width*Letter_Texture_Pos),Yoff+0) : glVertex2i_(Xpos+(c*ST_FontWidth),YPos+YSize)
    YPos+1
    glColor4f_(0.4,0.427,0.533,1.0)
    glTexCoord2f_((ST_Texture_Width*Letter_Texture_Pos),Yoff+0.0585) : glVertex2i_(Xpos+(c*ST_FontWidth),YPos)
    glTexCoord2f_((ST_Texture_Width*Letter_Texture_Pos)+0.0624,Yoff+0.0585) : glVertex2i_(Xpos+(c*ST_FontWidth)+ST_FontWidth,YPos)
    glTexCoord2f_((ST_Texture_Width*Letter_Texture_Pos)+0.0624,Yoff+0) : glVertex2i_(Xpos+(c*ST_FontWidth)+ST_FontWidth,YPos+YSize)
    glTexCoord2f_((ST_Texture_Width*Letter_Texture_Pos),Yoff+0) : glVertex2i_(Xpos+(c*ST_FontWidth),YPos+YSize)
  Next
  glEnd_()
  glDisable_(#GL_TEXTURE_2D)
EndProcedure
Procedure Draw3dBalls() ;/ updates and draws the pseudo 3d balls
  Protected C.i, s_x.i, s_y.i, Size.f, SizeY.f
  ;/update
  glEnable_(#GL_TEXTURE_2D) : glBindTexture_(#GL_TEXTURE_2D,Ball_Texture)
  glBegin_(#GL_QUADS)
  glColor4f_(1.0,1.0,1.0,1.0)
 
  For C = 0 To Max_Balls
    Balls(c)\Z - BallSpeed
   
    If Balls(c)\Z <= BallSpeed : Balls(c)\Z+10 : EndIf
   
    If balls(c)\Z < 5
      s_x=(Balls(c)\X/Balls(c)\Z)+(#WindowWidth/2)
      s_y=(Balls(c)\Y/Balls(c)\Z)+(#WindowHeight/2)
      Size.f= 3.0 + (16 - (Balls(c)\Z)*2.0) : Sizey = Size / 2.0
     
      glTexCoord2f_(0,0) :glVertex2i_(s_x-Size,s_y+Sizey)
      glTexCoord2f_(0,1) :glVertex2i_(s_x-Size,s_y-Sizey)
      glTexCoord2f_(1,1) :glVertex2i_(s_x+Size,s_y-Sizey)
      glTexCoord2f_(1,0) :glVertex2i_(s_x+Size,s_y+Sizey)
    EndIf
  Next
  glEnd_()
  glDisable_(#GL_TEXTURE_2D)
EndProcedure
Procedure SmallFontText() ;/ updates the draws the top ticker-text
  Protected X.i, Y.i, SmT_YSize.i = 9, Smt_Ypos.i, Letter.s, Lup.l, txPos.f, txPosY.f, ST_Xpos.f, ST_Width.i
 
  If DrawnFrames > Page_Swap_Time
   
    ;/ swap between the two pages
    PT_Update-1
    If PT_Update < 1
      Current_Letter+1
      If Current_Letter = 41 : Current_Letter = 0 : : Current_Line + 1 : EndIf
      If Current_Line < 4
        Text_Page.S(Current_Line,Current_Letter) = MiniText(Current_Page,Current_Line,Current_Letter)
      EndIf
     
      If Current_Line = 4 : Current_Line = 0 : Page_Swap_Time = DrawnFrames + Page_Swap_Duration : Current_Page + 1 : EndIf
      If Current_Page > Pages : Current_Page = 1 : EndIf
      PT_Update = PT_Delay
      PT_Delay + 1
      If PT_Delay = 3 : PT_Delay = 1 : EndIf
    EndIf
  EndIf
 
  ;/ render
  glEnable_(#GL_TEXTURE_2D) :  glBindTexture_(#GL_TEXTURE_2D,Smallfont)
  glBegin_(#GL_QUADS)
 
  glColor4f_(1.0,1.0,1.0,1.0)
  For Y=0 To 3
    For X=1 To 40
      Smt_Ypos = 201-(Y*(SmT_YSize))
      Letter.s = Text_Page(Y,X)
      If Letter <> "" And Letter <> " "
        Lup.l = FindString("ABCDEFGHIJKLMNOPQRSTUVWXYZ!0123456789'()@,.-:;<>?ccccccccccccccccccc ",Letter.s,0)-1
        txPos.f = (Lup*8)/256.0
        ST_Xpos = ((X-1)*16)+0 : ST_Width = 15
        txPosY.f = 0
        If txPos.f > 1-0.03125
          txPosY.f = 0.03124
          txPos - 1
        EndIf
       
        glTexCoord2f_(txPos,txPosY+0) :glVertex2i_(ST_Xpos,Smt_Ypos+SmT_YSize-1)
        glTexCoord2f_(txPos,txPosY+0.027343) :glVertex2i_(ST_Xpos,Smt_Ypos)
        glTexCoord2f_(txPos+0.027343,txPosY+0.027343) :glVertex2i_(ST_Xpos+ST_Width,Smt_Ypos)
        glTexCoord2f_(txPos+0.027343,txPosY+0) :glVertex2i_(ST_Xpos+ST_Width,Smt_Ypos+SmT_YSize-1)
      EndIf
    Next
  Next

  glEnd_()
EndProcedure
Procedure Mirror_Surface() ;/ draws the lower 'mirrored' surface
  glBegin_(#GL_QUADS)
    glColor4f_(0,0.0,0.5,0.4)
    glVertex2f_(#WindowWidth,#TopBorder) : glVertex2f_(#WindowWidth,#TopBorder+23) : glVertex2f_(0,#TopBorder+23) : glVertex2f_(0,#TopBorder)
  glEnd_()
EndProcedure
Procedure After_Borders() ;/ draws the top and bottom black borders to mask overdrawn area
  glBegin_(#GL_QUADS)
    glColor4f_(0,0.0,0.0,1.0)
    glVertex2f_(#WindowWidth,0) : glVertex2f_(#WindowWidth,#TopBorder) : glVertex2f_(0,#TopBorder) : glVertex2f_(0,0)
    glVertex2f_(#WindowWidth,#WindowHeight-#TopBorder) : glVertex2f_(#WindowWidth,#WindowHeight) : glVertex2f_(0,#WindowHeight) : glVertex2f_(0,#WindowHeight-#TopBorder)
  glEnd_()
EndProcedure
Procedure Rainbow_Copper() ;/ draws the rainbow texture over the stencil mask
  glEnable_(#GL_TEXTURE_2D) :  glBindTexture_(#GL_TEXTURE_2D,CopperTexture)
  glBegin_(#GL_QUADS)
  glColor4f_(1.0,1.0,1.0,1.0)
    glTexCoord2f_(0,0)  :glVertex2i_(0,171)
    glTexCoord2f_(0,0.45) :glVertex2i_(0,41)
    glTexCoord2f_(1,0.45) :glVertex2i_(#WindowWidth,41)
    glTexCoord2f_(1,0)  :glVertex2i_(#WindowWidth,171)
  glEnd_()
  glDisable_(#GL_STENCIL_TEST)
EndProcedure
Procedure Draw_ScrollText() ;/ updates and draws the scrolltext on to the stencil buffer
  Protected letter$, Mult.i, YPos.i, YSize.i, Timmy.f, X.i, tY.f, TopM.f, BotM.f, HySize.f
 
  glEnable_(#GL_BLEND) : glBlendFunc_(#GL_SRC_ALPHA, #GL_ONE_MINUS_SRC_ALPHA);
  glColorMask_(#GL_FALSE, #GL_FALSE, #GL_FALSE, #GL_FALSE);
  glDepthMask_(#GL_TRUE);
 
  glEnable_(#GL_STENCIL_TEST);
  glStencilFunc_(#GL_ALWAYS, 1, $FFFFFFFF);
  glStencilOp_(#GL_REPLACE, #GL_REPLACE, #GL_REPLACE);
  glEnable_(#GL_ALPHA_TEST)
  glAlphaFunc_(#GL_GREATER  ,0.0)
 
  ;/ update
  If ST_Delay_Scroller = 0
    ForEach ScrollText()
      scrolltext()\X - 2
      If scrolltext()\X < -ST_FontWidth : DeleteElement(scrolltext()) : EndIf
    Next
    If DrawnFrames >= ST_Next; And ST_Delay_Scroller = 0
      ST_Position + 1 : If ST_Position > Len(ST_Text) : ST_Position = 0 : EndIf
      letter$ = Mid(ST_Text,ST_Position,1)
      If letter$ = "|" : ST_Delay_Scroller = 100 : ST_Next + 100: letter$ = " " : EndIf
      If letter$<>" "
        AddElement(scrolltext())
        scrolltext()\X = #WindowWidth
        scrolltext()\Letter_Texture_Pos = FindString(Font_Lookup_Text,letter$,0)-1
        Mult = Int(scrolltext()\Letter_Texture_Pos / 16)
        scrolltext()\Letter_Texture_Pos = scrolltext()\Letter_Texture_Pos - (Mult*16)
        scrolltext()\Letter_Texture_Posy = Mult;*16
      EndIf
      ST_Next + (ST_FontWidth/2) + ST_Font_Gap
    EndIf
  Else
    ST_Delay_Scroller - 1
  EndIf
 
  ;/ render
  glEnable_(#GL_TEXTURE_2D) :  glBindTexture_(#GL_TEXTURE_2D,MyTexture)
  glBegin_(#GL_QUADS)
 
  YPos = #WindowHeight/2.4 : YSize = 32 : ST_Base1.f + 0.08 : ST_Base2.f + 0.14
 
  glColor4f_(1.0,1.0,1.0,1.0)
  timmy.f = Sin(offset/30.0)*0.5
 
  ForEach Scrolltext()
    X = scrolltext()\X
    tY.f=(Sin(ST_Base1+(X/120))*(#WindowHeight/(5.5+timmy))) ; ;Y.f=(Sin(base2+((X+20)/50))-Sin(base1+(X/40)))*80 ;/ double base
    YSize = 14  + (Sin(ST_Base2+X/360.0)*7.0)
    HySize.f = YSize/2.0
    TopM.f = 0.0580 : BotM.f = 0.005
   
    ;/ top
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos),(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+0.0585) : glVertex2i_(X,(tY+YPos-HySize)-1)
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos)+0.0585,(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+0.0585) : glVertex2i_(X+ST_FontWidth+2,(tY+YPos-HySize)-1)
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos)+0.0585,(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+TopM) : glVertex2i_(X+ST_FontWidth+2,(tY+YPos-HySize))
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos),(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+TopM) : glVertex2i_(X,(tY+YPos-HySize))
    ;/ middle
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos),(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+TopM) : glVertex2i_(X,tY+YPos-HySize)
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos)+0.0585,(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+TopM) : glVertex2i_(X+ST_FontWidth+2,tY+YPos-HySize)
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos)+0.0585,(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+BotM) : glVertex2i_(X+ST_FontWidth+2,tY+YPos+YSize)
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos),(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+BotM) : glVertex2i_(X,tY+YPos+YSize)
    ;/ bottom
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos),(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+BotM) : glVertex2i_(X,tY+YPos+YSize)
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos)+0.0585,(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+BotM) : glVertex2i_(X+ST_FontWidth+2,tY+YPos+YSize)
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos)+0.0585,(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+0.000) : glVertex2i_(X+ST_FontWidth+2,tY+YPos+YSize+2)
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos),(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+0.000) : glVertex2i_(X,tY+YPos+YSize+2)
  Next
  glEnd_()
  glDisable_(#GL_TEXTURE_2D) : glColorMask_(#GL_TRUE, #GL_TRUE, #GL_TRUE, #GL_TRUE);
  glStencilFunc_(#GL_EQUAL, 1, $FFFFFFFF) : glStencilOp_(#GL_KEEP, #GL_KEEP, #GL_KEEP);
EndProcedure
Procedure Draw_MirrorScrollText() ;/ inverts the main scroller and draw it on the  'mirrored' surface
  Protected YPos.i, Timmy.f, YSize.i, Ty.f, X.i, ShadPos.i, HySize.f
  glEnable_(#GL_TEXTURE_2D) :  glBindTexture_(#GL_TEXTURE_2D,MyTexture)
  glBegin_(#GL_QUADS)
 
  YPos = #WindowHeight/2.4 : YSize = 32
  glColor4f_(0,0.0,0.53,1.0)
  timmy.f = Sin(offset/30.0)*0.5
  ForEach Scrolltext()
    X=scrolltext()\X

    tY.f=(Sin(ST_Base1+(X/120))*#WindowHeight/(5.5+timmy))
    YSize = 14.0  + (Sin(ST_Base2+X/360.0)*7.0)
    HySize.f = YSize/2.0 : ShadPos = 82
   
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos),(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+0.0) : glVertex2i_(X,ShadPos-(tY+YPos+YSize))
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos)+0.0585,(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+0.0) : glVertex2i_(X+ST_FontWidth,ShadPos-(tY+YPos+YSize))
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos)+0.0585,(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+0.0585) : glVertex2i_(X+ST_FontWidth,ShadPos-(tY+YPos-HySize))
    glTexCoord2f_((ST_Texture_Width*scrolltext()\Letter_Texture_Pos),(ST_Texture_Width*scrolltext()\Letter_Texture_Posy)+0.0585) : glVertex2i_(X,ShadPos-(tY+YPos-HySize))

  Next
  glEnd_()
  glDisable_(#GL_TEXTURE_2D)
EndProcedure
Procedure Draw_Rog_Logo() ;/ draw the tiny ROG logo
  glEnable_(#GL_TEXTURE_2D) :  glBindTexture_(#GL_TEXTURE_2D,RogLogo)
  glBegin_(#GL_QUADS)
  glColor4f_(0.867,0.867,0.867,1.0)
  glTexCoord2f_(0,0.3125) : glVertex2i_(609,20)
  glTexCoord2f_(1,0.3125) : glVertex2i_(609+32,20)
  glTexCoord2f_(1,0) : glVertex2i_(609+32,25)
  glTexCoord2f_(0,0) : glVertex2i_(609,25)
  glEnd_()
  glDisable_(#GL_TEXTURE_2D)
EndProcedure
Procedure BorderLines() ;/ draws the colourful border edges
  Protected X.i, ofs2.i, YPos1.i, YPos2.i
  glBegin_(#GL_QUADS)
  #CL_Step=16 : YPos1 = #TopBorder : YPos2 = #WindowHeight-#TopBorder
  For X=0 To #WindowWidth Step #CL_Step
    ofs2 = (X/#CL_Step) + offset : ofs2 % (180-16) : ofs2+1
    ;/set colour
    glColor4ub_(Copper1\r[ofs2],Copper1\g[ofs2],Copper1\b[ofs2],255)
    glVertex2i_(X,YPos2-1) : glVertex2i_(X+#CL_Step,YPos2-1): glVertex2i_(X+#CL_Step,YPos2): glVertex2i_(X,YPos2)
    glVertex2i_(#WindowWidth-X,YPos1+1) : glVertex2i_(#WindowWidth-(X+#CL_Step),YPos1+1): glVertex2i_(#WindowWidth-(X+#CL_Step),YPos1) : glVertex2i_(#WindowWidth-X,YPos1)
  Next
  glEnd_()
EndProcedure

Procedure Boot() ;/ rough simulation of the amiga boot sequence and decompression bars
  Protected Stage.i, Inctime.i, MyLoop.i, Y.i, Size.i
  IncTime = ElapsedMilliseconds() + 1000
  Stage = 0
  Repeat
    Delay(15)
    Select Stage
      Case 0 ;/ dark grey
        glBegin_(#GL_QUADS)
        glColor4f_(0.26,0.26,0.26,1.0)
        glVertex2f_(#WindowWidth,0) : glVertex2f_(#WindowWidth,#WindowHeight) : glVertex2f_(0,#WindowHeight) : glVertex2f_(0,0)
        glEnd_()
      Case 1 ;/ light grey
        glBegin_(#GL_QUADS)
        glColor4f_(0.52,0.52,0.52,1.0)
        glVertex2f_(#WindowWidth,0) : glVertex2f_(#WindowWidth,#WindowHeight) : glVertex2f_(0,#WindowHeight) : glVertex2f_(0,0)
        glEnd_()
       
      Case 2,3 ;/ white
        glBegin_(#GL_QUADS)
        glColor4f_(1.0,1.0,1.0,1.0)
        glVertex2f_(#WindowWidth,0) : glVertex2f_(#WindowWidth,#WindowHeight) : glVertex2f_(0,#WindowHeight) : glVertex2f_(0,0)
        glEnd_()
       
      Case 4
        Y = 0
        glBegin_(#GL_QUADS)
        Repeat
          Size = Random(5)+1
          glColor4f_(Random(100)/100,Random(100)/100,Random(100)/100,1.0)
          glVertex2f_(#WindowWidth,Y) : glVertex2f_(#WindowWidth,Y+Size) : glVertex2f_(0,Y+Size) : glVertex2f_(0,Y)
          Y + Size
        Until Y >= #WindowHeight
        glEnd_()
    EndSelect
   
    If ElapsedMilliseconds() > IncTime
      IncTime = ElapsedMilliseconds() + 1000
      Stage + 1
    EndIf
   
    Repeat ;/ clear events
    Until Not WindowEvent()
   
   
    SetGadgetAttribute(#Gad_OpenGL,#PB_OpenGL_FlipBuffers,#True)
   
    glClear_(#GL_COLOR_BUFFER_BIT)

  Until Stage = 5
  Delay(75)
EndProcedure

SetActiveGadget(#Gad_OpenGL)
Boot()

If InitSound()
  SoundAvailable = 1
  CatchMusic(1,?Mod,?ModEnd - ?Mod)
  PlayMusic(1)
EndIf

;{/ Main Loop
Repeat
  Draw3dBalls()             ;/ 3d balls
  MiddleText()              ;/ Vroom logo
  Mirror_Surface()          ;/ Blue Mirror Border
  Draw_ScrollText()         ;/ Main Scroller
  Rainbow_Copper()          ;/ Colour the scroller
  Draw_Rog_Logo()           ;/ small ROG logo at bottom right
  Draw_MirrorScrollText()   ;/ Draw mirrored text
  BorderLines()             ;/ Colour scrolling line
  After_Borders()           ;/ top & bottom 'blackening' borders
  SmallFontText()           ;/ updates and draws the text window
 
  ;/ Update the BorderLines colour position
  everyother = 1 - everyother : If everyother : offset.f + 1 : EndIf

  ;/ Flip buffers
  DrawnFrames + 1
  SetGadgetAttribute(#Gad_OpenGL,#PB_OpenGL_FlipBuffers,#True)
 
  Repeat ;/ check for escape key & clear other events
    Event = WindowEvent()
    Select Event
      Case #PB_Event_Gadget ;/ must be our opengl gadget
        If EventType() = #PB_EventType_KeyDown
          If GetGadgetAttribute(#Gad_OpenGL,#PB_OpenGL_Key ) = #VK_ESCAPE
            Quit = #True
          EndIf
        EndIf
    EndSelect
  Until Not Event
 
  glClear_(#GL_COLOR_BUFFER_BIT | #GL_STENCIL_BUFFER_BIT)
 
  ;/ ensure the music loops
  If SoundAvailable
   If GetMusicPosition(1) = 255
     If GetMusicRow(1) = 0 : SetMusicPosition(1, 0) : EndIf
   EndIf
EndIf

Until Quit = #True
;}

DataSection
  mod:
  IncludeBinary "Monday.mod"
  modend:
 
  Bigtext:
  IncludeBinary "VroomFont.bmp"
  Bigtextend:
 
  Smallfont:
  IncludeBinary "VroomSmallFont.bmp"
  Smalltextend:
 
  RogLogo:
  IncludeBinary "RogLogo.bmp"
  RogLogoEnd:
 
  Ball:
  IncludeBinary "VroomBall.bmp"
  Ballend:
 
  UpperText:
  Data.S "    VISION FACTORY AND THE COMPANY      "
Data.S "           PROVIDE YOU WITH             "
  Data.S "                                        "
Data.S "      VROOM FROM LANKHOR SOFTWARE       "

Data.S "----------------------------------------"
Data.S "--  CALL OUR BULLETIN BOARDS SYSTEMS  --"
Data.S "--    UNDER THE FOLLOWING NUMBERS:    --"
Data.S "----------------------------------------"

Data.S "DANCE MACABRE     ---  713-324-2139     "
Data.S "UNDERWORLD        ---  916-429-2232     "
Data.S "THE HOLE          ---  313-363-4475     "
Data.S "CHILDS PLAY       ---  414-258-0337     "
 
Data.S "GURU HEAVEN       ---  708-752-9958     "
Data.S "BAD DREAMS        ---  (44)-816-759-693 "
Data.S "CIMMERIA          ---  (90)-138-408-63  "
Data.S "SOMEWHERE IN TIME ---  (46)-040-423-029 "
 
  Data.S  "PHANTOM ZONE      ---  (39)-805-574-376 "
Data.S "SECOND WORLD      ---  (49)-618-ELI-TE  "
Data.S "MAIDEN HOOD       ---  (49)-220-ELI-TE  "
Data.S "BLACK SKYLINE     ---  (49)-615-ELI-TE  "
 
  Data.S "MIND BOMB         ---  (49)-220-ELI-TE  "
Data.S "                                        "
Data.S "                                        "
Data.S "                                        "

  CopperList:
  Data.w 256
 
  Data.B $F,$3,$0  ,$F,$4,$0  ,$F,$5,$0  ,$F,$6,$0  ,$F,$7,$0  ,$F,$8,$0  ,$F,$9,$0  ,$F,$A,$0  ,$F,$B,$0  ,$F,$C,$0
Data.B $F,$D,$0  ,$F,$E,$0  ,$F,$F,$0  ,$E,$F,$0  ,$D,$F,$0  ,$C,$F,$0  ,$B,$F,$0  ,$A,$F,$0  ,$9,$F,$0  ,$8,$F,$0
Data.B $7,$F,$0  ,$6,$F,$0  ,$5,$F,$0  ,$4,$F,$0  ,$3,$F,$0  ,$2,$F,$0  ,$1,$F,$0  ,$0,$F,$0  ,$0,$F,$1  ,$0,$F,$2
Data.B $0,$F,$3  ,$0,$F,$4  ,$0,$F,$5  ,$0,$F,$6  ,$0,$F,$7  ,$0,$F,$8  ,$0,$F,$9  ,$0,$F,$A  ,$0,$F,$B  ,$0,$F,$C
Data.B $0,$F,$D  ,$0,$F,$E  ,$0,$F,$F  ,$0,$E,$F  ,$0,$D,$F  ,$0,$C,$F  ,$0,$B,$F  ,$0,$A,$F  ,$0,$9,$F  ,$0,$8,$F
Data.B $0,$7,$F  ,$0,$6,$F  ,$0,$5,$F  ,$0,$4,$F  ,$0,$3,$F  ,$0,$2,$F  ,$0,$1,$F  ,$0,$0,$F  ,$1,$0,$F  ,$2,$0,$F
Data.B $3,$0,$F  ,$4,$0,$F  ,$5,$0,$F  ,$6,$0,$F  ,$7,$0,$F  ,$8,$0,$F  ,$9,$0,$F  ,$A,$0,$F  ,$B,$0,$F  ,$C,$0,$F
Data.B $D,$0,$F  ,$E,$0,$F  ,$F,$0,$F  ,$F,$0,$E  ,$F,$0,$D  ,$F,$0,$C  ,$F,$0,$B  ,$F,$0,$A  ,$F,$0,$9  ,$F,$0,$8
Data.B $F,$0,$7  ,$F,$0,$6  ,$F,$0,$5  ,$F,$0,$4  ,$F,$0,$3 ;  ,$F,$0,$2  ,$F,$0,$1  ,$F,$0,$0  ,$F,$1,$0  ,$F,$2,$0
Data.B $F,$3,$0  ,$F,$4,$0  ,$F,$5,$0  ,$F,$6,$0  ,$F,$7,$0  ,$F,$8,$0  ,$F,$9,$0  ,$F,$A,$0  ,$F,$B,$0  ,$F,$C,$0
Data.B $F,$D,$0  ,$F,$E,$0  ,$F,$F,$0  ,$E,$F,$0  ,$D,$F,$0  ,$C,$F,$0  ,$B,$F,$0  ,$A,$F,$0  ,$9,$F,$0  ,$8,$F,$0
Data.B $7,$F,$0  ,$6,$F,$0  ,$5,$F,$0  ,$4,$F,$0  ,$3,$F,$0  ,$2,$F,$0  ,$1,$F,$0  ,$0,$F,$0  ,$0,$F,$1  ,$0,$F,$2
Data.B $0,$F,$3  ,$0,$F,$4  ,$0,$F,$5  ,$0,$F,$6  ,$0,$F,$7  ,$0,$F,$8  ,$0,$F,$9  ,$0,$F,$A  ,$0,$F,$B  ,$0,$F,$C
Data.B $0,$F,$D  ,$0,$F,$E  ,$0,$F,$F  ,$0,$E,$F  ,$0,$D,$F  ,$0,$C,$F  ,$0,$B,$F  ,$0,$A,$F  ,$0,$9,$F  ,$0,$8,$F
Data.B $0,$7,$F  ,$0,$6,$F  ,$0,$5,$F  ,$0,$4,$F  ,$0,$3,$F  ,$0,$2,$F  ,$0,$1,$F  ,$0,$0,$F  ,$1,$0,$F  ,$2,$0,$F
Data.B $3,$0,$F  ,$4,$0,$F  ,$5,$0,$F  ,$6,$0,$F  ,$7,$0,$F  ,$8,$0,$F  ,$9,$0,$F  ,$A,$0,$F  ,$B,$0,$F  ,$C,$0,$F
Data.B $D,$0,$F  ,$E,$0,$F  ,$F,$0,$F  ,$F,$0,$E  ,$F,$0,$D  ,$F,$0,$C  ,$F,$0,$B  ,$F,$0,$A  ,$F,$0,$9  ,$F,$0,$8
  Data.B $F,$0,$7,  $F,$0,$6,  $F,$0,$5,  $F,$0,$4,  $F,$0,$3,  $F,$0,$2,  $F,$0,$1,  $F,$0,$0,  $F,$1,$0,  $F,$2,$0 ;- padded so the colours flow a bit bitter between lists.
 
  Data.B $F,$3,$0  ,$F,$4,$0  ,$F,$5,$0  ,$F,$6,$0  ,$F,$7,$0  ,$F,$8,$0  ,$F,$9,$0  ,$F,$A,$0  ,$F,$B,$0  ,$F,$C,$0
Data.B $F,$D,$0  ,$F,$E,$0  ,$F,$F,$0  ,$E,$F,$0  ,$D,$F,$0  ,$C,$F,$0  ,$B,$F,$0  ,$A,$F,$0  ,$9,$F,$0  ,$8,$F,$0
Data.B $7,$F,$0  ,$6,$F,$0  ,$5,$F,$0  ,$4,$F,$0  ,$3,$F,$0  ,$2,$F,$0  ,$1,$F,$0  ,$0,$F,$0  ,$0,$F,$1  ,$0,$F,$2
Data.B $0,$F,$3  ,$0,$F,$4  ,$0,$F,$5  ,$0,$F,$6  ,$0,$F,$7  ,$0,$F,$8  ,$0,$F,$9  ,$0,$F,$A  ,$0,$F,$B  ,$0,$F,$C
Data.B $0,$F,$D  ,$0,$F,$E  ,$0,$F,$F  ,$0,$E,$F  ,$0,$D,$F  ,$0,$C,$F  ,$0,$B,$F  ,$0,$A,$F  ,$0,$9,$F  ,$0,$8,$F
Data.B $0,$7,$F  ,$0,$6,$F  ,$0,$5,$F  ,$0,$4,$F  ,$0,$3,$F  ,$0,$2,$F  ,$0,$1,$F  ,$0,$0,$F  ,$1,$0,$F  ,$2,$0,$F
Data.B $3,$0,$F  ,$4,$0,$F  ,$5,$0,$F  ,$6,$0,$F  ,$7,$0,$F  ,$8,$0,$F  ,$9,$0,$F  ,$A,$0,$F  ,$B,$0,$F  ,$C,$0,$F
Data.B $D,$0,$F  ,$E,$0,$F  ,$F,$0,$F  ,$F,$0,$E  ,$F,$0,$D  ,$F,$0,$C  ,$F,$0,$B  ,$F,$0,$A  ,$F,$0,$9  ,$F,$0,$8
Data.B $F,$0,$7  ,$F,$0,$6  ,$F,$0,$5  ,$F,$0,$4  ,$F,$0,$3 ;  ,$F,$0,$2  ,$F,$0,$1  ,$F,$0,$0  ,$F,$1,$0  ,$F,$2,$0
Data.B $F,$3,$0  ,$F,$4,$0  ,$F,$5,$0  ,$F,$6,$0  ,$F,$7,$0  ,$F,$8,$0  ,$F,$9,$0  ,$F,$A,$0  ,$F,$B,$0  ,$F,$C,$0
Data.B $F,$D,$0  ,$F,$E,$0  ,$F,$F,$0  ,$E,$F,$0  ,$D,$F,$0  ,$C,$F,$0  ,$B,$F,$0  ,$A,$F,$0  ,$9,$F,$0  ,$8,$F,$0
Data.B $7,$F,$0  ,$6,$F,$0  ,$5,$F,$0  ,$4,$F,$0  ,$3,$F,$0  ,$2,$F,$0  ,$1,$F,$0  ,$0,$F,$0  ,$0,$F,$1  ,$0,$F,$2
Data.B $0,$F,$3  ,$0,$F,$4  ,$0,$F,$5  ,$0,$F,$6  ,$0,$F,$7  ,$0,$F,$8  ,$0,$F,$9  ,$0,$F,$A  ,$0,$F,$B  ,$0,$F,$C
Data.B $0,$F,$D  ,$0,$F,$E  ,$0,$F,$F  ,$0,$E,$F  ,$0,$D,$F  ,$0,$C,$F  ,$0,$B,$F  ,$0,$A,$F  ,$0,$9,$F  ,$0,$8,$F
Data.B $0,$7,$F  ,$0,$6,$F  ,$0,$5,$F  ,$0,$4,$F  ,$0,$3,$F  ,$0,$2,$F  ,$0,$1,$F  ,$0,$0,$F  ,$1,$0,$F  ,$2,$0,$F
 
 
  ;Data.B $F,$0,$7,
EndDataSection


Screenshot :



Its amazing only 619 lines of code and you have this cool intro
The code and files are in the attachment of this post
So you can see how this cool retro remake amiga cracktro was done.
Thanx a lot PJAY274 for sharing this great remake.
Greets WhiteWolf
#19
Purebasic / Re: Demo Test
December 18, 2016
Tested your download here and it works inc.
But the shader code itself runs quite slow for me. but thats my machine.
Maybe you should run a test here with another shader code i suggest ( megawave or Techtunnel  ;) )
#20
Quote from: Dr.Death on June 26, 2016
Hi mate long time no speak.... How you doing??

Hi dr.Death nice to see you here buddy
Everythings cool just picking up stuff with my buddy inc.
After a really long time of inactivity (10years) but im back as you can see...
Its time we get things moving again with some kickass projects so wazzup.....
Btw what happend to our belgian friend dextro dawn creations down ???
And Peace also gone and dissapeared no more work or updates on the Osdm project ???
Its sad to see these guys not active anymore
I gues they have the same excuse i have
To bussy wIth real personal live matters work family etc etc