1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2024-12-27 07:06:00 +00:00
Aquaria/game_scripts/scripts/maps/node_seahorserace.lua

274 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