mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2024-12-29 08:15:46 +00:00
275 lines
5.9 KiB
Lua
275 lines
5.9 KiB
Lua
|
-- 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.
|
||
|
|
||
|
if not v then v = {} end
|
||
|
if not AQUARIA_VERSION then dofile("scripts/entities/entityinclude.lua") end
|
||
|
|
||
|
v.minNode = 1
|
||
|
v.maxNodes = 7
|
||
|
|
||
|
v.nodes = nil
|
||
|
v.raceStarted = false
|
||
|
v.avatarNode = 1
|
||
|
v.n = 0
|
||
|
v.timer = 0
|
||
|
v.lastNodeTimer = 0
|
||
|
v.maxLastNodeTimer = 20
|
||
|
v.raceTime = 0
|
||
|
|
||
|
v.kappa1 = 0
|
||
|
v.kappa2 = 0
|
||
|
|
||
|
v.songNote1 = 0
|
||
|
v.songNote2 = 0
|
||
|
v.songNote3 = 0
|
||
|
v.songNote4 = 0
|
||
|
|
||
|
v.timeRock = 0
|
||
|
|
||
|
v.maxLaps = 4
|
||
|
v.lap = 1
|
||
|
|
||
|
v.incut = false
|
||
|
|
||
|
v.doStartRace = false
|
||
|
|
||
|
function init(me)
|
||
|
-- this could be odd.. if you add nodes after... postinit for nodes??
|
||
|
v.nodes = {}
|
||
|
for i=v.minNode, v.maxNodes do
|
||
|
local nodeName = string.format("R0%d", i)
|
||
|
v.nodes[i] = getNode(nodeName)
|
||
|
if v.nodes[i]==0 then
|
||
|
--debugLog("Could not find node named: " + nodeName)
|
||
|
end
|
||
|
end
|
||
|
v.n = getNaija()
|
||
|
|
||
|
--debugLog("setting")
|
||
|
--node_setCursorActivation(me, true)
|
||
|
|
||
|
v.kappa1 = node_getNearestEntity(me, "Kappa")
|
||
|
v.kappa2 = entity_getNearestEntity(v.kappa1, "Kappa")
|
||
|
|
||
|
v.timeRock = node_getNearestEntity(me, "TimeRock")
|
||
|
|
||
|
loadSound("mia-appear")
|
||
|
|
||
|
setFlag(FLAG_SEAHORSETIMETOBEAT, 90) -- 2:00 -- used to be 90 / 1:30
|
||
|
|
||
|
if isFlag(FLAG_SEAHORSEBESTTIME, 0) then
|
||
|
setFlag(FLAG_SEAHORSEBESTTIME, getFlag(FLAG_SEAHORSETIMETOBEAT))
|
||
|
end
|
||
|
|
||
|
entity_msg(v.timeRock, "time", getFlag(FLAG_SEAHORSEBESTTIME))
|
||
|
end
|
||
|
|
||
|
function postInit(me)
|
||
|
end
|
||
|
|
||
|
local function showLap()
|
||
|
if v.lap >= v.maxLaps then
|
||
|
centerText(getStringBank(853))
|
||
|
else
|
||
|
centerText(string.format("%s %d", getStringBank(852), v.lap))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function stopRace(me)
|
||
|
setCameraLerpDelay(0)
|
||
|
v.raceStarted = false
|
||
|
overrideZoom(0, 5)
|
||
|
|
||
|
setTimerTextAlpha(0, 1)
|
||
|
end
|
||
|
|
||
|
local function lost(me)
|
||
|
v.raceStarted = false
|
||
|
|
||
|
debugLog("you failed the race")
|
||
|
|
||
|
playSfx("denied")
|
||
|
entity_idle(v.n)
|
||
|
fadeOutMusic(1.4)
|
||
|
watch(0.5)
|
||
|
fade2(1, 1, 1, 1, 1)
|
||
|
watch(1)
|
||
|
entity_setPosition(v.n, node_x(me), node_y(me))
|
||
|
watch(0.5)
|
||
|
|
||
|
updateMusic()
|
||
|
|
||
|
fade2(0, 1, 1, 1, 1)
|
||
|
watch(1)
|
||
|
|
||
|
stopRace(me)
|
||
|
end
|
||
|
|
||
|
local function won(me)
|
||
|
v.raceStarted = false
|
||
|
|
||
|
updateMusic()
|
||
|
|
||
|
|
||
|
|
||
|
entity_idle(v.n)
|
||
|
watch(1)
|
||
|
entity_flipToEntity(v.n, v.timeRock)
|
||
|
|
||
|
if v.raceTime < getFlag(FLAG_SEAHORSEBESTTIME) then
|
||
|
setFlag(FLAG_SEAHORSEBESTTIME, v.raceTime)
|
||
|
cam_toEntity(v.timeRock)
|
||
|
watch(0.5)
|
||
|
entity_msg(v.timeRock, "time", v.raceTime)
|
||
|
watch(3)
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
if v.raceTime < getFlag(FLAG_SEAHORSETIMETOBEAT) then
|
||
|
if isFlag(FLAG_COLLECTIBLE_SEAHORSECOSTUME, 0) and getEntity("collectibleseahorsecostume") == 0 then
|
||
|
local nd = getNode("armorloc")
|
||
|
local e = createEntity("collectibleseahorsecostume", "", node_x(nd), node_y(nd))
|
||
|
entity_alpha(e, 0)
|
||
|
cam_toEntity(e)
|
||
|
watch(0.5)
|
||
|
playSfx("secret")
|
||
|
playSfx("mia-appear")
|
||
|
spawnParticleEffect("tinyredexplode", node_x(nd), node_y(nd))
|
||
|
entity_alpha(e, 1, 1)
|
||
|
watch(2)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
cam_toEntity(v.n)
|
||
|
|
||
|
stopRace(me)
|
||
|
end
|
||
|
|
||
|
|
||
|
function songNoteDone(me, note, t)
|
||
|
if not v.raceStarted then
|
||
|
v.songNote1 = v.songNote2
|
||
|
v.songNote2 = v.songNote3
|
||
|
v.songNote3 = v.songNote4
|
||
|
v.songNote4 = note
|
||
|
|
||
|
if v.songNote1 == 0 and v.songNote2 == 3 and v.songNote3 == 4 and v.songNote4 == 5 then
|
||
|
debugLog("setting startRace")
|
||
|
v.doStartRace = true
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function update(me, dt)
|
||
|
if v.incut then return end
|
||
|
v.n = getNaija()
|
||
|
if v.doStartRace then
|
||
|
debugLog("start race!")
|
||
|
v.incut = true
|
||
|
|
||
|
entity_idle(v.n)
|
||
|
|
||
|
v.avatarNode = 1
|
||
|
v.raceTime = 0
|
||
|
v.lastNodeTimer = 0
|
||
|
|
||
|
fade2(1, 0.5, 1, 1, 1)
|
||
|
watch(0.5)
|
||
|
|
||
|
entity_setPosition(v.n, node_x(me), node_y(me))
|
||
|
watch(0.4)
|
||
|
fade2(0, 1, 1, 1, 1)
|
||
|
overrideZoom(0.4, 3)
|
||
|
fadeOutMusic(2)
|
||
|
watch(2.5)
|
||
|
entity_setState(v.kappa1, STATE_CHARGE1)
|
||
|
entity_setState(v.kappa2, STATE_CHARGE1)
|
||
|
watch(1)
|
||
|
entity_setState(v.kappa1, STATE_CHARGE2)
|
||
|
entity_setState(v.kappa2, STATE_CHARGE2)
|
||
|
watch(1)
|
||
|
entity_setState(v.kappa1, STATE_CHARGE3)
|
||
|
entity_setState(v.kappa2, STATE_CHARGE3)
|
||
|
v.raceStarted = true
|
||
|
entity_addVel(v.n, 0, -800)
|
||
|
|
||
|
setCameraLerpDelay(0.04)
|
||
|
playMusic("sunworm")
|
||
|
|
||
|
v.lap = 1
|
||
|
|
||
|
showLap()
|
||
|
|
||
|
v.doStartRace = false
|
||
|
v.incut = false
|
||
|
|
||
|
setTimerTextAlpha(1, 1)
|
||
|
end
|
||
|
if v.raceStarted then
|
||
|
overrideZoom(0.4, 0.5)
|
||
|
|
||
|
local node = entity_getNearestNode(v.n, "wrongway")
|
||
|
if node ~= 0 and node_isEntityIn(node, v.n) then
|
||
|
centerText(getStringBank(851))
|
||
|
lost(me)
|
||
|
else
|
||
|
v.raceTime = v.raceTime + dt
|
||
|
|
||
|
setTimerText(v.raceTime)
|
||
|
|
||
|
v.lastNodeTimer = v.lastNodeTimer + dt
|
||
|
if v.lastNodeTimer > v.maxLastNodeTimer then
|
||
|
lost(me)
|
||
|
end
|
||
|
if node_isEntityIn(v.nodes[v.avatarNode], v.n) then
|
||
|
local k1 = node_getNearestEntity(v.nodes[v.avatarNode], "kappa")
|
||
|
local k2 = entity_getNearestEntity(k1, "kappa")
|
||
|
--debugLog(string.format("crossed node %d", v.avatarNode))
|
||
|
playSfx("secret", 0, 0.5)
|
||
|
v.lastNodeTimer = 0
|
||
|
v.avatarNode = v.avatarNode + 1
|
||
|
if v.avatarNode > v.maxNodes then
|
||
|
v.lap = v.lap + 1
|
||
|
showLap()
|
||
|
if v.lap < v.maxLaps then
|
||
|
v.avatarNode = 1
|
||
|
entity_setState(k1, STATE_CHARGE2)
|
||
|
entity_setState(k2, STATE_CHARGE2)
|
||
|
else
|
||
|
entity_setState(k1, STATE_CHARGE3)
|
||
|
entity_setState(k2, STATE_CHARGE3)
|
||
|
won(me)
|
||
|
end
|
||
|
else
|
||
|
entity_setState(k1, STATE_CHARGE1)
|
||
|
entity_setState(k2, STATE_CHARGE1)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
debugLog(string.format("v.raceTime: %d", v.raceTime))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function activate(me)
|
||
|
end
|
||
|
|
||
|
|