Add rescue cutscenes at save points
This commit is contained in:
parent
cc6db0b58b
commit
a0adc30c65
9 changed files with 147 additions and 0 deletions
BIN
assets/sprites/barrier1.png
Normal file
BIN
assets/sprites/barrier1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 450 B |
BIN
assets/sprites/barrier2.png
Normal file
BIN
assets/sprites/barrier2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 437 B |
BIN
assets/sprites/barrier3.png
Normal file
BIN
assets/sprites/barrier3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 435 B |
BIN
assets/sprites/bubble.png
Normal file
BIN
assets/sprites/bubble.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 583 B |
BIN
assets/sprites/midget.png
Normal file
BIN
assets/sprites/midget.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 630 B |
BIN
assets/sprites/mom.png
Normal file
BIN
assets/sprites/mom.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 711 B |
38
data/RescueDatabase.js
Normal file
38
data/RescueDatabase.js
Normal 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.",
|
||||
]
|
||||
};
|
|
@ -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
99
level/Rescuee.js
Normal 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;
|
||||
}
|
Loading…
Add table
Reference in a new issue