238 lines
6.1 KiB
Plaintext
238 lines
6.1 KiB
Plaintext
// ActiveVRML 1.0 ASCII
|
|
|
|
use "lib.avr";
|
|
use "bitmap.avr";
|
|
|
|
/*****************************************************************************\
|
|
*
|
|
* The background
|
|
*
|
|
\*****************************************************************************/
|
|
|
|
backBitmap = bitmapFromImport(import("back.gif"));
|
|
backImage = imageOf(backBitmap);
|
|
backXSize = xsizeOf(backBitmap);
|
|
backYSize = ysizeOf(backBitmap);
|
|
|
|
/*****************************************************************************\
|
|
*
|
|
* Blinking stars on the background
|
|
*
|
|
\*****************************************************************************/
|
|
|
|
brightImage = first(import("bright.bmp"));
|
|
dimImage = first(import("dim.bmp"));
|
|
|
|
starImage(x, y, delay) =
|
|
let
|
|
s0 = dimImage until after(delay) => function(x) . s1;
|
|
s1 = brightImage until after(0.25) => function(x) . s0;
|
|
in
|
|
transformImage(
|
|
translate(
|
|
x * backXSize,
|
|
y * backYSize
|
|
),
|
|
s0
|
|
);
|
|
|
|
starsImage =
|
|
starImage( 0.9 , 0.1 , 5)
|
|
over starImage(-0.8 , -0.8 , 6)
|
|
over starImage(-0.1 , 0.75, 9)
|
|
over starImage( 0.25, 0.9 , 10);
|
|
|
|
/*****************************************************************************\
|
|
*
|
|
* The title letters
|
|
*
|
|
\*****************************************************************************/
|
|
|
|
titleImage =
|
|
let
|
|
titlePos = vector2Xy(-0.5 * backXSize, 0.6 * backYSize);
|
|
|
|
images =
|
|
[
|
|
first(import("title0.gif")),
|
|
first(import("title1.gif")),
|
|
first(import("title2.gif")),
|
|
first(import("title3.gif")),
|
|
first(import("title4.gif")),
|
|
first(import("title5.gif")),
|
|
first(import("title6.gif")),
|
|
first(import("title7.gif")),
|
|
first(import("title8.gif")),
|
|
first(import("title9.gif"))
|
|
];
|
|
|
|
zoomImage =
|
|
let
|
|
number = (0.5 - cos((time - 1) * pi / 2.2) / 2);
|
|
in
|
|
transformImage(
|
|
translate(titlePos * number)
|
|
o scale2(number),
|
|
nth(images, 0)
|
|
);
|
|
|
|
glowImage =
|
|
let
|
|
index = sin(time * pi * 2 / 3.56 - pi / 2) * 4.99 + 5;
|
|
in
|
|
nth(images, index);
|
|
|
|
image =
|
|
if (time < 1) then
|
|
emptyImage
|
|
else if (time < 3.2) then
|
|
zoomImage
|
|
else
|
|
transformImage(
|
|
translate(titlePos),
|
|
glowImage
|
|
);
|
|
in
|
|
image;
|
|
|
|
titleIn = first(import("titleIn.wav"));
|
|
titleLoop =
|
|
loop(gain(0.9,
|
|
first(import("loop2.wav"))
|
|
));
|
|
|
|
titleSound =
|
|
(silence until after(1) => function(x) . titleIn)
|
|
mix (silence until after(1.75) => titleLoop);
|
|
|
|
|
|
/*****************************************************************************\
|
|
*
|
|
* Button swoosh animation
|
|
*
|
|
\*****************************************************************************/
|
|
|
|
swooshImage(link, motionImage, xsize, xend, yend, delay) =
|
|
let
|
|
number = time * 4;
|
|
maxSize = (backXSize + xend + xsize) / 2;
|
|
midPoint = (-backXSize + xend + xsize) / 2;
|
|
|
|
stretchIn(number) =
|
|
transformImage(
|
|
translate(
|
|
interpolate(-backXSize, midPoint, number),
|
|
yend
|
|
)
|
|
o scale(number * maxSize / xsize + 0.01, 1),
|
|
motionImage
|
|
);
|
|
|
|
shrinkIn(number) =
|
|
transformImage(
|
|
translate(
|
|
interpolate(midPoint, xend, number),
|
|
yend
|
|
)
|
|
o scale(
|
|
interpolate(maxSize / xsize, 1, number), 1
|
|
),
|
|
motionImage
|
|
);
|
|
|
|
static =
|
|
hyperlink2(
|
|
link,
|
|
transformImage(
|
|
translate(xend, yend),
|
|
motionImage
|
|
)
|
|
);
|
|
|
|
image =
|
|
if (number < 1) then
|
|
stretchIn(number)
|
|
else if (number < 2) then
|
|
shrinkIn(number - 1)
|
|
else
|
|
static;
|
|
|
|
sound = first(import("schwoop.wav"));
|
|
in
|
|
(emptyImage, silence) until after(delay) => function(x) . (image, sound);
|
|
|
|
/*****************************************************************************\
|
|
*
|
|
* The buttons
|
|
*
|
|
\*****************************************************************************/
|
|
|
|
tutorialBitmap = import("tbutton.bmp");
|
|
|
|
pbackXSize(x) = (x / 460 - 0.5) * backXSize * 2;
|
|
pbackYSize(y) = (0.5 - y / 256) * backYSize * 2;
|
|
|
|
(tutorialImage, tutorialSound) =
|
|
swooshImage(
|
|
"earth.htm",
|
|
first(import("tutor1.gif")),
|
|
xComponent(second(import("tutor.gif"))),
|
|
pbackXSize(274),
|
|
pbackYSize( 54),
|
|
3.5
|
|
);
|
|
|
|
(introductionImage, introductionSound) =
|
|
swooshImage(
|
|
"avrml001.htm",
|
|
first(import("intro1.gif")),
|
|
xComponent(second(import("intro.gif"))),
|
|
pbackXSize(138),
|
|
pbackYSize(112),
|
|
5.0
|
|
);
|
|
|
|
(referenceImage, referenceSound) =
|
|
swooshImage(
|
|
"avrml002.htm",
|
|
first(import("refer1.gif")),
|
|
xComponent(second(import("refer.gif"))),
|
|
pbackXSize(193),
|
|
pbackYSize(173),
|
|
6.5
|
|
);
|
|
|
|
(samplesImage, samplesSound) =
|
|
swooshImage(
|
|
"samples.htm",
|
|
first(import("samp1.gif")),
|
|
xComponent(second(import("samp1.gif"))),
|
|
pbackXSize(308),
|
|
pbackYSize(220),
|
|
8.0
|
|
);
|
|
|
|
modelSound =
|
|
tutorialSound
|
|
mix introductionSound
|
|
mix referenceSound
|
|
mix samplesSound
|
|
mix titleSound;
|
|
|
|
/*****************************************************************************\
|
|
*
|
|
* composite all the images
|
|
*
|
|
\*****************************************************************************/
|
|
|
|
modelImage =
|
|
tutorialImage
|
|
over introductionImage
|
|
over referenceImage
|
|
over samplesImage
|
|
over titleImage
|
|
over starsImage
|
|
over backImage;
|
|
|
|
model = (modelImage, modelSound, modelSound);
|