Add rescue cutscenes at save points

This commit is contained in:
RedEnchilada 2016-05-16 21:53:20 -05:00
parent cc6db0b58b
commit a0adc30c65
9 changed files with 147 additions and 0 deletions

BIN
assets/sprites/barrier1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

BIN
assets/sprites/barrier2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

BIN
assets/sprites/barrier3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

BIN
assets/sprites/bubble.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

BIN
assets/sprites/midget.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 630 B

BIN
assets/sprites/mom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 B

38
data/RescueDatabase.js Normal file
View file

@ -0,0 +1,38 @@
RescueDatabase = {};
RescueDatabase["Save 1"] = {
sprite: "midget",
position: { x: 1244, y: 1449, z: 150 },
lines: [
"Oh, prince, thank goodness you're here!",
"The royals have been taken far away from here.",
"The seas past here are uncharted by our kind...",
"...But the queen always told us how brave you were.",
"You're probably the only hope we have right now.",
"Go, and save us all!",
]
};
RescueDatabase["Save 2"] = {
sprite: "midget",
position: { x: 1244, y: 1449, z: 150 },
lines: [
"My prince! Thank you for saving me!",
"The queen and princess were taken further into the caverns.",
"I didn't get a good look at who took them...",
"...But what I saw was quite unsettling.",
"Be careful in there.",
]
};
RescueDatabase["Save 3"] = {
sprite: "mom",
position: { x: 1440, y: 1261, z: 150 },
lines: [
"My child...",
"I always knew your spirit was strong.",
"The princess lies further ahead... but so does the monster.",
"...",
"Do not let him bring harm to you.",
]
};

View file

@ -147,6 +147,16 @@ Level = function(levelName) {
placeEntityInGrid(crystal);
}
// Rescuee.
if (RescueDatabase[levelName] && !level.saveData.rescued) {
var r = Rescuee(level, RescueDatabase[levelName], dolphin);
placeEntityInGrid(r);
if (r.bubble) {
placeEntityInGrid(r.bubble);
placeEntityInGrid(r.barrier);
}
}
// Boss.
if (level.map.boss && !Memory.global.bossClear) {
boss = Boss(

99
level/Rescuee.js Normal file
View file

@ -0,0 +1,99 @@
Rescuee = function(level, data, dolphin) {
var rescuee = Entity(level, data.position.x, data.position.y, data.position.z);
rescuee.addSprite("spr", Renderer.sprite(data.sprite));
rescuee.currentSprite("spr");
if (data.dead) {
rescuee.activeSprite.rotation = Math.PI;
} else {
rescuee.bubble = Entity(level, data.position.x, data.position.y, data.position.z);
rescuee.bubble.addSprite("spr", Renderer.sprite("bubble"));
rescuee.bubble.currentSprite("spr");
rescuee.barrier = Entity(level, dolphin.position.x, dolphin.position.y, 20);
rescuee.barrier.addSprite("spr", Renderer.animation([
"barrier1","barrier2","barrier3","barrier2"
]).speed(10));
rescuee.barrier.currentSprite("spr");
rescuee.barrier.think = function() {
rescuee.barrier.position.x = dolphin.position.x;
rescuee.barrier.position.y = dolphin.position.y;
}
rescuee.barrier.bbox = {
x: 200,
y: 200,
z: 6,
tag: "geometry"
};
}
var flt = 0;
rescuee.think = function() {
flt += Math.PI / 90;
var bob = Math.cos(flt);
rescuee.position.z += bob/9;
if (!data.dead) {
rescuee.activeSprite.rotation = bob/7;
}
// Check burst
var xd, yd, zd;
xd = dolphin.position.x - data.position.x;
yd = dolphin.position.y - data.position.y;
zd = dolphin.position.z - data.position.z;
if (xd * xd + yd * yd + zd * zd < 40*40) {
rescuee.bubble.position.x = -99999;
rescuee.bubble.activeSprite.visible = false;
rescuee.think = cutscene;
level.saveData.rescued = true;
}
}
var cutsceneLine = -1;
var cutsceneTimer = 250;
var text;
function cutscene() {
flt += Math.PI / 90;
var bob = Math.cos(flt);
rescuee.position.z += bob/9;
if (!data.dead) {
rescuee.activeSprite.rotation = bob/7;
}
cutsceneTimer++;
if (cutsceneTimer >= 300) {
cutsceneTimer = 0;
cutsceneLine++;
var line = data.lines[cutsceneLine];
if (text) {
level.stage.removeChild(text);
}
if (line) {
text = Renderer.typewriterText(line, 30, 220);
level.stage.addChild(text);
} else {
rescuee.barrier.position.x = -99999;
rescuee.barrier.activeSprite.visible = false;
rescuee.barrier.think = undefined;
}
}
}
return rescuee;
}