mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2024-12-03 00:15:46 +00:00
8472718fb7
This untangles some of the gigantic kitchen sink headers in an attempt to split things into smaller files. Also don't include gl.h, glext.h, windows.h, and other such nonsense *everywhere*. Lots of cleanups on the way too. More dead/unused code removal. Remove incrFlag(), decrFlag() Lua functions.
872 lines
19 KiB
C++
872 lines
19 KiB
C++
/*
|
|
Copyright (C) 2007, 2010 - Bit-Blot
|
|
|
|
This file is part of Aquaria.
|
|
|
|
Aquaria is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#include "Intro.h"
|
|
#include "../BBGE/AfterEffect.h"
|
|
#include "Gradient.h"
|
|
#include "DSQ.h"
|
|
#include "SkeletalSprite.h"
|
|
|
|
|
|
//class Mappy;
|
|
|
|
namespace IntroStuff
|
|
{
|
|
//Mappy *m;
|
|
bool quitFlag;
|
|
};
|
|
|
|
using namespace IntroStuff;
|
|
|
|
/*
|
|
class Mappy : public RenderObject, public ActionMapper
|
|
{
|
|
public:
|
|
Mappy() : RenderObject(), ActionMapper() {}
|
|
void render() {}
|
|
//bool isOnScreen() { return false; }
|
|
void action(int id, int state)
|
|
{
|
|
ActionMapper::action(id, state);
|
|
if (!quitFlag)
|
|
{
|
|
if (state)
|
|
{
|
|
quitFlag = true;
|
|
dsq->quitNestedMain();
|
|
}
|
|
}
|
|
}
|
|
protected:
|
|
void onUpdate(float dt)
|
|
{
|
|
ActionMapper::onUpdate(dt);
|
|
RenderObject::onUpdate(dt);
|
|
}
|
|
};
|
|
*/
|
|
|
|
Intro::Intro() : StateObject()
|
|
{
|
|
registerState(this, "Intro");
|
|
}
|
|
|
|
void Intro::applyState()
|
|
{
|
|
quitFlag = false;
|
|
|
|
dsq->jiggleCursor();
|
|
dsq->cursor->alpha = 0;
|
|
//core->sound->streamOgg("sc/theme", 0);
|
|
StateObject::applyState();
|
|
|
|
core->sound->fadeMusic(SFT_OUT, 1);
|
|
|
|
dsq->user.load(true);
|
|
|
|
ActionMapper::clearActions();
|
|
|
|
/*
|
|
m = new Mappy;
|
|
dsq->user.control.actionSet.importAction(m, "Escape", ACTION_ESC);
|
|
addRenderObject(m, LR_BACKGROUND);
|
|
*/
|
|
|
|
done = false;
|
|
}
|
|
|
|
void Intro::removeState()
|
|
{
|
|
core->setClearColor(Vector(0,0,0));
|
|
//glClearColor(0, 0, 0, 0);
|
|
dsq->cursor->alpha = 1;
|
|
StateObject::removeState();
|
|
}
|
|
|
|
void Intro::endIntro()
|
|
{
|
|
quitFlag = true;
|
|
|
|
dsq->overlay->color.stop();
|
|
dsq->overlay->alpha.stop();
|
|
|
|
dsq->overlay2->alpha.stop();
|
|
dsq->overlay2->color.stop();
|
|
|
|
dsq->overlay2->color = Vector(1,1,1);
|
|
dsq->overlay2->alpha.interpolateTo(1, 1);
|
|
|
|
dsq->run(1);
|
|
|
|
dsq->overlay->color = Vector(0,0,0);
|
|
dsq->overlay->alpha = 0;
|
|
|
|
dsq->sound->stopAllSfx();
|
|
|
|
dsq->sound->clearLocalSounds();
|
|
|
|
cachy.clean();
|
|
|
|
dsq->toggleBlackBars(0);
|
|
|
|
dsq->setCutscene(0);
|
|
|
|
dsq->title();
|
|
}
|
|
|
|
bool Intro::waitQuit(float t)
|
|
{
|
|
dsq->run(t);
|
|
return false;
|
|
|
|
/*
|
|
dsq->main(t);
|
|
if (quitFlag)
|
|
{
|
|
//errorLog("quitFlag!");
|
|
endIntro();
|
|
return true;
|
|
}
|
|
return false;
|
|
*/
|
|
|
|
/*
|
|
float frameTime = 0.01;
|
|
float c = 0;
|
|
bool tminus=false;
|
|
while (c < t)
|
|
{
|
|
float dt = frameTime;
|
|
if ((c + dt) > t)
|
|
{
|
|
dt = (t-c);
|
|
tminus = true;
|
|
}
|
|
|
|
std::ostringstream os;
|
|
os << " tminus: " << tminus << " dt: " << dt << " c: " << c;
|
|
debugLog(os.str());
|
|
|
|
dsq->main(dt);
|
|
c += dt;
|
|
|
|
if (m->isActing(ACTION_ESC))
|
|
//if (core->getKeyState(KEY_ESCAPE))
|
|
{
|
|
endIntro();
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
*/
|
|
}
|
|
|
|
void Intro::createMeteor(int layer, Vector pos, Vector off, Vector sz)
|
|
{
|
|
Quad *m = new Quad("intro/meteor", pos);
|
|
m->offset.interpolateTo(off, 5);
|
|
m->rotationOffset.interpolateTo(Vector(0,0,-360), 2.5, -1);
|
|
m->rotation.z = rand()%360;
|
|
Quad *g = new Quad("particles/glow", Vector(0,0));
|
|
g->setBlendType(RenderObject::BLEND_ADD);
|
|
g->scale = Vector(24, 24);
|
|
g->alpha = 0.5;
|
|
g->color = Vector(1, 0.5, 0.5);
|
|
|
|
m->addChild(g, PM_POINTER);
|
|
m->scale = sz;
|
|
addRenderObject(m, LR_ENTITIES);
|
|
|
|
meteors.push_back(m);
|
|
}
|
|
|
|
void Intro::clearMeteors()
|
|
{
|
|
for (int i = 0; i < meteors.size(); i++)
|
|
{
|
|
meteors[i]->setLife(1);
|
|
meteors[i]->setDecayRate(100);
|
|
}
|
|
|
|
meteors.clear();
|
|
}
|
|
|
|
void Intro::update(float dt)
|
|
{
|
|
if (!done)
|
|
{
|
|
done = true;
|
|
|
|
#ifndef AQUARIA_DEMO
|
|
bool doit=true;
|
|
if (doit){
|
|
if (dsq->user.demo.intro > 0)
|
|
dsq->user.demo.intro = 0;
|
|
}
|
|
#endif
|
|
|
|
dsq->setCutscene(1, 1);
|
|
|
|
//errorLog("Here!");
|
|
|
|
dsq->toggleBlackBars(1);
|
|
dsq->setBlackBarsColor(Vector(0,0,0));
|
|
|
|
cachy.precacheTex("intro/*.png");
|
|
|
|
meteors.clear();
|
|
|
|
dsq->sound->loadLocalSound("thunder");
|
|
dsq->sound->loadLocalSound("drone");
|
|
dsq->sound->loadLocalSound("windloop");
|
|
dsq->sound->loadLocalSound("lululu");
|
|
dsq->sound->loadLocalSound("proploop");
|
|
dsq->sound->loadLocalSound("bridgebreak");
|
|
dsq->sound->loadLocalSound("erictodoor");
|
|
dsq->sound->loadLocalSound("ericdrowns");
|
|
dsq->sound->loadLocalSound("mother");
|
|
dsq->sound->loadLocalSound("bgloop-interior");
|
|
dsq->sound->loadLocalSound("aqfocus");
|
|
dsq->sound->loadLocalSound("thewave");
|
|
dsq->sound->loadLocalSound("screaming");
|
|
|
|
|
|
SkeletalSprite *citybg = new SkeletalSprite();
|
|
citybg->loadSkeletal("citybg");
|
|
citybg->animate("idle", -1);
|
|
citybg->color = Vector(0.1, 0.08, 0.08);
|
|
citybg->position = Vector(400,300);
|
|
citybg->offset = Vector(-100, 0);
|
|
citybg->scale = Vector(0.6, 0.6);
|
|
citybg->alpha = 0;
|
|
for (int i = 0; i < citybg->bones.size(); i++)
|
|
{
|
|
if (citybg->bones[i]->name != "meteor")
|
|
{
|
|
citybg->bones[i]->color = citybg->color;
|
|
}
|
|
}
|
|
addRenderObject(citybg, LR_ENTITIES);
|
|
|
|
SkeletalSprite *eric = new SkeletalSprite();
|
|
eric->loadSkeletal("cc");
|
|
eric->animate("runLow", -1);
|
|
eric->color = Vector(0.08,0.08,0.08);
|
|
eric->flipHorizontal();
|
|
eric->position = Vector(50, 400);
|
|
eric->alpha = 0;
|
|
eric->scale = Vector(0.4, 0.4);
|
|
for (int i = 0; i < eric->bones.size(); i++)
|
|
{
|
|
eric->bones[i]->color = eric->color;
|
|
}
|
|
addRenderObject(eric, LR_ENTITIES);
|
|
|
|
|
|
|
|
dsq->overlay->alpha = 0;
|
|
dsq->overlay2->alpha = 0;
|
|
dsq->overlay3->alpha = 0;
|
|
|
|
dsq->overlay->color = Vector(1,1,1);
|
|
dsq->overlay2->color.interpolateTo(Vector(0,0,0), 1);
|
|
|
|
dsq->overlay2->alpha = 1;
|
|
|
|
core->cacheRender();
|
|
|
|
|
|
//----------- set up the stuff
|
|
|
|
|
|
// -- bit blot presents
|
|
|
|
PlaySfx play;
|
|
play.name = "drone";
|
|
play.fade = SFT_IN;
|
|
play.loops = -1;
|
|
play.time = 40;
|
|
play.vol = 0.7;
|
|
void *drone = dsq->sound->playSfx(play);
|
|
|
|
|
|
PlaySfx play2;
|
|
play2.name = "windloop";
|
|
play2.fade = SFT_IN;
|
|
play2.loops = -1;
|
|
play2.time = 20;
|
|
play2.vol = 0.9;
|
|
void *windLoop = dsq->sound->playSfx(play2);
|
|
|
|
dsq->run(3);
|
|
|
|
dsq->setClearColor(Vector(0.2,0.2,0.21));
|
|
|
|
float bt = 11;
|
|
|
|
/*
|
|
Quad *bg = new Quad("intro/sky", Vector(400,300));
|
|
bg->setWidthHeight(800, 600);
|
|
addRenderObject(bg, LR_HUD);
|
|
*/
|
|
|
|
Quad *cloud_bg = new Quad("intro/cloud-bg", Vector(400,300));
|
|
cloud_bg->setWidthHeight(800,600);
|
|
cloud_bg->followCamera = 1;
|
|
cloud_bg->alpha = 0.2;
|
|
cloud_bg->flipVertical();
|
|
cloud_bg->scale.interpolateTo(Vector(1.2, 1.5), bt*2);
|
|
addRenderObject(cloud_bg, LR_BACKGROUND);
|
|
|
|
Quad *mc1 = new Quad("intro/intro-big-cloud", Vector(200, 300));
|
|
mc1->scale = Vector(2, 2);
|
|
mc1->followCamera = 1;
|
|
mc1->alpha = 1;
|
|
mc1->alpha.interpolateTo(0, bt*2);
|
|
mc1->offset = Vector(200, 0);
|
|
mc1->offset.interpolateTo(Vector(0,0), bt*2);
|
|
mc1->cull = false;
|
|
addRenderObject(mc1, LR_HUD2);
|
|
|
|
/*
|
|
// FIXME: In the original code, the addRenderObject() call below
|
|
// referenced mc1 instead of mc2, causing mc1 to get added to the
|
|
// RenderObject list twice (potentially resulting in a crash).
|
|
// Fixing the addRenderObject() call will naturally change the
|
|
// appearance of the intro, so I've left this disabled. --achurch
|
|
Quad *mc2 = new Quad("intro/intro-big-cloud", Vector(500, 300));
|
|
mc2->scale = Vector(2, 2);
|
|
mc2->followCamera = 1;
|
|
mc2->alpha = 1;
|
|
mc2->alpha.interpolateTo(0.2, bt*2);
|
|
mc2->offset = Vector(-200, 0);
|
|
mc2->offset.interpolateTo(Vector(0,0), bt*1.5f);
|
|
mc2->cull = false;
|
|
addRenderObject(mc2, LR_HUD2);
|
|
*/
|
|
|
|
Quad *bbp = new Quad("intro/bbp", Vector(400,300));
|
|
bbp->alpha = 0;
|
|
bbp->alpha.interpolateTo(1, 8);
|
|
bbp->followCamera = 1;
|
|
bbp->scale = Vector(0.5, 0.5);
|
|
bbp->scale.interpolateTo(Vector(0.8, 0.8), bt);
|
|
bbp->color.ensureData();
|
|
bbp->color.data->path.addPathNode(Vector(1,1,1), 0);
|
|
bbp->color.data->path.addPathNode(Vector(0.5,0.5,0.5), 0.1);
|
|
bbp->color.data->path.addPathNode(Vector(1,1,1), 0.2);
|
|
bbp->color.data->path.addPathNode(Vector(0.5,0.5,0.5), 0.9);
|
|
bbp->color.data->path.addPathNode(Vector(1,1,1), 0.95);
|
|
bbp->color.data->path.addPathNode(Vector(0.5,0.5,0.5), 1.0);
|
|
bbp->color.startPath(2.5);
|
|
bbp->color.data->loopType = -1;
|
|
addRenderObject(bbp, LR_HUD);
|
|
|
|
|
|
dsq->overlay2->alpha.interpolateTo(0, 2);
|
|
|
|
if (waitQuit(1)) return;
|
|
|
|
dsq->sound->playSfx("lululu", 0.6);
|
|
|
|
if (waitQuit(9)) return;
|
|
|
|
dsq->sound->playSfx("thunder");
|
|
dsq->overlay->alpha.interpolateTo(1, 0.2);
|
|
|
|
if (waitQuit(0.5)) return;
|
|
|
|
bbp->alpha = 0;
|
|
cloud_bg->alpha = 0;
|
|
cloud_bg->scale.stop();
|
|
cloud_bg->scale = Vector(1,1);
|
|
mc1->alpha.stop();
|
|
//mc2->alpha.stop();
|
|
mc1->alpha = 0;
|
|
//mc2->alpha = 0;
|
|
|
|
|
|
// -- floating city in clouds
|
|
|
|
|
|
dsq->setClearColor(Vector(0.4,0.4,0.4));
|
|
|
|
/*
|
|
Gradient *grad = new Gradient();
|
|
grad->position = Vector(400,300);
|
|
grad->scale = Vector(800,600);
|
|
grad->makeVertical(Vector(0,0,0), Vector(0.2, 0.2, 0.3));
|
|
addRenderObject(grad, LR_BACKGROUND);
|
|
*/
|
|
|
|
cloud_bg->alpha = 1;
|
|
cloud_bg->flipVertical();
|
|
|
|
Quad *grad = new Quad("intro/intro-gradient-bg", Vector(400,300));
|
|
grad->setWidthHeight(800,600);
|
|
//grad->alpha = 0.5;
|
|
grad->alpha = 0;
|
|
addRenderObject(grad, LR_BACKGROUND);
|
|
|
|
SkeletalSprite *city = new SkeletalSprite();
|
|
city->loadSkeletal("floating-city");
|
|
city->position = Vector(400,300);
|
|
city->shareColorWithChildren = true;
|
|
city->shareAlphaWithChildren = true;
|
|
city->alpha = 0;
|
|
for (int i = 1; i <=2; i++)
|
|
{
|
|
Bone *b = city->getBoneByIdx(i);
|
|
b->rotationOffset.interpolateTo(Vector(0,0,360), 0.5, -1);
|
|
}
|
|
for (int i = 3; i <=5; i++)
|
|
{
|
|
Bone *b = city->getBoneByIdx(i);
|
|
b->scale.interpolateTo(Vector(0.2, 1), 0.2, -1, 1);
|
|
}
|
|
city->alpha.interpolateTo(1.0, bt*0.75f);
|
|
city->internalOffset = Vector(0, 50);
|
|
city->scale = Vector(0.6, 0.6);
|
|
city->scale.interpolateTo(Vector(0.75, 0.75), bt);
|
|
city->animate("idle");
|
|
addRenderObject(city, LR_HUD);
|
|
|
|
PlaySfx play3;
|
|
play3.name = "proploop";
|
|
play3.fade = SFT_IN;
|
|
play3.loops = -1;
|
|
play3.time = 10;
|
|
play3.vol = 0.7;
|
|
void *propLoop = dsq->sound->playSfx(play3);
|
|
|
|
dsq->overlay->alpha.interpolateTo(0, 1);
|
|
|
|
if (waitQuit(8)) return;
|
|
|
|
|
|
dsq->sound->playSfx("heartbeat");
|
|
|
|
dsq->sound->fadeSfx(propLoop, SFT_OUT, 2);
|
|
|
|
dsq->overlay->color = Vector(0,0,0);
|
|
dsq->fade(1, 0.5);
|
|
if (waitQuit(0.5)) return;
|
|
|
|
city->alpha = 0;
|
|
grad->alpha = 0;
|
|
cloud_bg->alpha = 0;
|
|
|
|
if (waitQuit(2)) return;
|
|
|
|
|
|
|
|
// -- window
|
|
|
|
float wt = 7;
|
|
dsq->setClearColor(Vector(0,0,0));
|
|
|
|
Quad *window = new Quad("intro/window", Vector(400,300));
|
|
window->offset.interpolateTo(Vector(0, 0),0);
|
|
window->offset.interpolateTo(Vector(50, 0), wt, 0, 0, 1);
|
|
window->followCamera = 1;
|
|
//window->setWidthHeight(200, 400);
|
|
addRenderObject(window, LR_BACKGROUND);
|
|
|
|
Quad *windowGlow = new Quad("intro/window-glow", Vector(0,0));
|
|
window->addChild(windowGlow, PM_POINTER);
|
|
|
|
window->shareColorWithChildren = 1;
|
|
window->shareAlphaWithChildren = 1;
|
|
|
|
Quad *ericHead = new Quad("intro/eric-head", Vector(350,600-256));
|
|
ericHead->offset.interpolateTo(Vector(-50, 0),0);
|
|
ericHead->offset.interpolateTo(Vector(-140, 50), wt, 0, 0, 1);
|
|
ericHead->followCamera = 1;
|
|
addRenderObject(ericHead, LR_ENTITIES);
|
|
|
|
dsq->fade(0, 0.5);
|
|
if (waitQuit(0.5)) return;
|
|
|
|
if (waitQuit(5)) return;
|
|
|
|
dsq->sound->playSfx("heartbeat");
|
|
|
|
dsq->fade(1, 0.5);
|
|
if (waitQuit(0.5)) return;
|
|
|
|
window->alpha = 0;
|
|
ericHead->alpha = 0;
|
|
|
|
|
|
|
|
// -- brush
|
|
|
|
float brusht=7;
|
|
Quad *painting = new Quad("intro/painting", Vector(400,300));
|
|
painting->scale = Vector(0.9, 0.9);
|
|
// 1.2
|
|
painting->scale.interpolateTo(Vector(2,2), brusht, 0, 0, 1);
|
|
painting->followCamera = 1;
|
|
addRenderObject(painting, LR_HUD);
|
|
|
|
Quad *ericHandBrush = new Quad("intro/eric-hand-brush", Vector(800-256 + 20,600-256 + 20));
|
|
ericHandBrush->scale = Vector(0.99, 0.99);
|
|
ericHandBrush->scale.interpolateTo(Vector(1.7,1.7), brusht, 0, 0, 1);
|
|
ericHandBrush->followCamera = 1;
|
|
ericHandBrush->rotation.interpolateTo(Vector(0,0,-20), brusht);
|
|
ericHandBrush->offset.interpolateTo(Vector(550, 550), brusht*0.75f, 0, 0, 1);
|
|
addRenderObject(ericHandBrush, LR_HUD);
|
|
|
|
|
|
dsq->fade(0, 0.5);
|
|
if (waitQuit(0.5)) return;
|
|
|
|
if (waitQuit(2)) return;
|
|
|
|
// music bit
|
|
|
|
dsq->sound->playSfx("aqfocus", 0.8);
|
|
|
|
if (waitQuit(1.5)) return;
|
|
|
|
|
|
if (waitQuit(2)) return;
|
|
|
|
// aquaria... could go here
|
|
|
|
if (waitQuit(2)) return;
|
|
|
|
dsq->sound->playSfx("thewave");
|
|
|
|
if (waitQuit(0.5)) return;
|
|
|
|
dsq->sound->playSfx("heartbeat");
|
|
dsq->fade(1, 0.5);
|
|
if (waitQuit(0.5)) return;
|
|
|
|
painting->alpha = 0;
|
|
ericHandBrush->alpha = 0;
|
|
|
|
|
|
// -- window turning red
|
|
|
|
float wrt = 4;
|
|
|
|
dsq->setClearColor(Vector(0,0,0));
|
|
window->alpha = 1;
|
|
ericHead->alpha = 1;
|
|
|
|
window->color.interpolateTo(Vector(1, 0.5, 0.5), wrt);
|
|
ericHead->color.interpolateTo(Vector(1, 0.7, 0.7), wrt);
|
|
ericHead->offset = Vector(-200,0);
|
|
ericHead->offset.interpolateTo(Vector(-800, 200), wrt);
|
|
|
|
window->scale.interpolateTo(Vector(1.3, 1.3), wrt);
|
|
|
|
dsq->fade(0, 0.5);
|
|
if (waitQuit(0.5)) return;
|
|
|
|
if (waitQuit(wrt-1)) return;
|
|
|
|
dsq->sound->playSfx("heartbeat");
|
|
dsq->fade(1, 0.5);
|
|
if (waitQuit(0.5)) return;
|
|
|
|
ericHead->alpha = 0;
|
|
window->alpha = 0;
|
|
|
|
// -- city under attack by meteors
|
|
|
|
dsq->setClearColor(Vector(0.6,0.1,0.1));
|
|
|
|
createMeteor(LR_ENTITIES, Vector(600, -50), Vector(-600, 600), Vector(0.05, 0.05));
|
|
|
|
|
|
cloud_bg->alpha = 0.99;
|
|
cloud_bg->alpha.interpolateTo(0.8, 4);
|
|
//grad->alpha = 0.5;
|
|
city->alpha = 1;
|
|
|
|
city->stopAllAnimations();
|
|
|
|
city->animate("idle");
|
|
|
|
dsq->fade(0, 0.5);
|
|
if (waitQuit(0.5)) return;
|
|
|
|
if (waitQuit(0.5)) return;
|
|
|
|
createMeteor(LR_ENTITIES, Vector(300, -50), Vector(-500, 900), Vector(0.2, 0.2));
|
|
createMeteor(LR_HUD, Vector(400, -100), Vector(-400, 1000), Vector(0.2, 0.2));
|
|
|
|
if (waitQuit(2)) return;
|
|
|
|
dsq->shakeCamera(2, 10);
|
|
|
|
for (int i = 0; i < 16; i++)
|
|
{
|
|
int l = LR_ENTITIES;
|
|
Vector sz(0.1, 0.1);
|
|
if (rand()%5 < 2)
|
|
{
|
|
l = LR_HUD;
|
|
sz = Vector(0.15, 0.15);
|
|
}
|
|
createMeteor(l, Vector(200+rand()%600, -50 - rand()%100), Vector(-200 - rand()%400, 900 + rand()%400), sz);
|
|
}
|
|
|
|
if (waitQuit(1)) return;
|
|
|
|
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
int l = LR_ENTITIES;
|
|
Vector sz(0.1, 0.1);
|
|
if (rand()%5 < 2)
|
|
{
|
|
l = LR_HUD;
|
|
sz = Vector(0.15, 0.15);
|
|
}
|
|
createMeteor(l, Vector(200+rand()%600, -50 - rand()%100), Vector(-200 - rand()%400, 900 + rand()%400), sz);
|
|
}
|
|
|
|
if (waitQuit(0.4)) return;
|
|
|
|
dsq->sound->playSfx("heartbeat");
|
|
dsq->sound->fadeSfx(drone, SFT_OUT, 0.1);
|
|
dsq->sound->fadeSfx(windLoop, SFT_OUT, 0.1);
|
|
|
|
dsq->overlay->color = Vector(1, 0.5, 0.5);
|
|
dsq->fade(1, 0.1);
|
|
if (waitQuit(1)) return;
|
|
|
|
city->alpha = 0;
|
|
|
|
cloud_bg->alpha.stop();
|
|
cloud_bg->alpha = 0;
|
|
|
|
clearMeteors();
|
|
|
|
dsq->shakeCamera(0, 0);
|
|
|
|
|
|
// -- walking out
|
|
|
|
dsq->sound->playSfx("bridgebreak");
|
|
|
|
if (waitQuit(2)) return;
|
|
|
|
dsq->setClearColor(Vector(0,0,0));
|
|
dsq->fade(0, 10);
|
|
|
|
//dsq->sound->playSfx("heartbeat");
|
|
|
|
if (waitQuit(2)) return;
|
|
|
|
if (waitQuit(2)) return;
|
|
|
|
dsq->sound->playSfx("erictodoor");
|
|
|
|
if (waitQuit(8)) return;
|
|
|
|
windLoop = dsq->sound->playSfx(play2);
|
|
drone = dsq->sound->playSfx(play);
|
|
|
|
dsq->overlay->color = Vector(0,0,0);
|
|
|
|
dsq->fade(1, 0.1);
|
|
|
|
if (waitQuit(3.5)) return;
|
|
|
|
|
|
// -- outside scene
|
|
|
|
|
|
dsq->setClearColor(Vector(0.3,0.1,0.1));
|
|
|
|
cloud_bg->alpha = 0.4;
|
|
cloud_bg->scale = Vector(1.5, 1.5);
|
|
//cloud_bg->setSegs(32, 32, 0.5, 0.5, 0.008, 0.008, 4, 1);
|
|
//cloud_bg->setSegs(10, 10, 0.1, 0.1, 1, 1, 0.1, 1);
|
|
cloud_bg->rotation.z = 180;
|
|
|
|
citybg->alpha = 1;
|
|
|
|
PlaySfx pScreaming;
|
|
pScreaming.name = "screaming";
|
|
pScreaming.fade = SFT_IN;
|
|
pScreaming.loops = -1;
|
|
pScreaming.time = 8;
|
|
pScreaming.vol = 1.0;
|
|
void *screaming = dsq->sound->playSfx(pScreaming);
|
|
|
|
eric->alpha = 1;
|
|
eric->offset.interpolateTo(Vector(150, 0), 1);
|
|
|
|
dsq->fade(0, 0.2);
|
|
|
|
if (waitQuit(1)) return;
|
|
eric->animate("idle", -1);
|
|
|
|
if (waitQuit(1)) return;
|
|
|
|
eric->animate("runLow", -1);
|
|
|
|
eric->offset.interpolateTo(Vector(150+150, 0), 1);
|
|
if (waitQuit(0.5)) return;
|
|
|
|
dsq->sound->playSfx("thunder", 0.1);
|
|
|
|
if (waitQuit(0.5)) return;
|
|
|
|
eric->offset.interpolateTo(Vector(150+150+150, 0), 1);
|
|
if (waitQuit(1)) return;
|
|
|
|
eric->offset.interpolateTo(Vector(150+150+150+150, 0), 1);
|
|
if (waitQuit(0.5)) return;
|
|
dsq->sound->playSfx("thunder", 0.7);
|
|
if (waitQuit(0.5)) return;
|
|
|
|
eric->animate("idle", -1);
|
|
|
|
|
|
|
|
eric->flipHorizontal();
|
|
|
|
citybg->animate("crash");
|
|
if (waitQuit(1.9)) return;
|
|
|
|
dsq->sound->playSfx("bridgebreak");
|
|
|
|
dsq->sound->stopSfx(windLoop);
|
|
dsq->sound->stopSfx(drone);
|
|
dsq->sound->stopSfx(screaming);
|
|
|
|
eric->rotation.interpolateTo(Vector(0,0,96), 1.5);
|
|
eric->offset.interpolateTo(Vector(eric->offset.x, 800), 1);
|
|
|
|
if (waitQuit(1.9)) return;
|
|
|
|
|
|
|
|
dsq->overlay->color = Vector(0,0,0);
|
|
dsq->fade(1, 0.1);
|
|
if (waitQuit(0.1)) return;
|
|
|
|
citybg->alpha = 0;
|
|
eric->alpha = 0;
|
|
cloud_bg->alpha = 0;
|
|
|
|
if (waitQuit(2)) return;
|
|
|
|
|
|
// -- drown
|
|
|
|
|
|
dsq->sound->playSfx("ericdrowns");
|
|
|
|
if (waitQuit(8)) return;
|
|
|
|
float st = 10;
|
|
|
|
Quad *underwaterBG = new Quad("intro/underwater-bg", Vector(400,400));
|
|
underwaterBG->setWidthHeight(800, 800);
|
|
underwaterBG->followCamera = 1;
|
|
addRenderObject(underwaterBG, LR_ENTITIES);
|
|
|
|
Quad *ericHandSink = new Quad("intro/eric-hand-sink", Vector(550,610));
|
|
ericHandSink->scale = Vector(0.99, 0.99);
|
|
ericHandSink->scale.interpolateTo(Vector(1.5,1.5), st, 0, 0, 1);
|
|
ericHandSink->internalOffset = Vector(0, -256);
|
|
ericHandSink->rotation = Vector(0,0,-10);
|
|
ericHandSink->rotation.interpolateTo(Vector(0,0,10), st, 0, 0, 1);
|
|
ericHandSink->offset.interpolateTo(Vector(360, 100), st, 0, 0, 1);
|
|
ericHandSink->followCamera = 1;
|
|
addRenderObject(ericHandSink, LR_ENTITIES);
|
|
|
|
dsq->setClearColor(Vector(0, 0.05, 0.1));
|
|
|
|
|
|
if (core->afterEffectManager)
|
|
core->afterEffectManager->addEffect(new ShockEffect(Vector(core->width/2, core->height/2),core->screenCenter,0.08,0.05,22,0.2f, 1.2));
|
|
|
|
|
|
dsq->fade(0, 3);
|
|
|
|
if (waitQuit(3)) return;
|
|
|
|
PlaySfx play4;
|
|
play4.name = "bgloop-interior";
|
|
play4.loops = -1;
|
|
play4.time = 1;
|
|
play4.fade = SFT_IN;
|
|
void *bgLoop = dsq->sound->playSfx(play4);
|
|
|
|
if (waitQuit(3)) return;
|
|
|
|
|
|
// -- dying
|
|
|
|
|
|
|
|
dsq->sound->playSfx("heartbeat", 0.5);
|
|
|
|
dsq->fade(1, 5);
|
|
if (waitQuit(2.5)) return;
|
|
|
|
core->sound->playVoice("titleb");
|
|
|
|
dsq->sound->playSfx("heartbeat", 0.2);
|
|
|
|
if (waitQuit(2.5)) return;
|
|
|
|
underwaterBG->alphaMod = 0;
|
|
|
|
core->sound->playSfx("mother", 0.6);
|
|
|
|
dsq->fade(0, 2);
|
|
|
|
Quad *mom = new Quad("gameover-0004", Vector(400,300));
|
|
mom->setWidthHeight(600,600);
|
|
mom->alphaMod = 0.035;
|
|
mom->setBlendType(RenderObject::BLEND_ADD);
|
|
mom->alpha = 0;
|
|
mom->alpha.interpolateTo(1, 5);
|
|
mom->followCamera = 1;
|
|
addRenderObject(mom, LR_HUD);
|
|
|
|
|
|
// -- music backwards
|
|
|
|
dsq->overlay2->color = Vector(1,1,1);
|
|
dsq->overlay2->alpha.interpolateTo(1, 9);
|
|
|
|
dsq->sound->fadeSfx(bgLoop, SFT_OUT, 5);
|
|
|
|
if (waitQuit(8)) return; // 11.5
|
|
|
|
// -- end
|
|
|
|
endIntro();
|
|
}
|
|
}
|
|
|