1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2024-12-28 07:45:49 +00:00
Aquaria/game_scripts/scripts/entities/hellbeast.lua

929 lines
24 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.bone_tongue = 0
v.bone_hand = 0
v.bone_head = 0
v.bone_body = 0
v.bone_upperLeg = 0
v.bone_tongue = 0
v.bone_jaw = 0
v.bone_target = 0
v.naijaPit = 0
v.inHand = false
v.node_right = 0
v.node_left = 0
v.node_hang = 0
v.node_middle = 0
v.node_check = 0
v.node_mermanSpawn = 0
v.node_nostomp = 0
v.handSpin = 0
v.sx = 0
v.sy = 0
v.holding = 0
v.soundDelay = 0
v.skull = false
local STATE_ATTACK1 = 1000
local STATE_ATTACK2 = 1001
local STATE_ATTACK3 = 1002
local STATE_HOLDING = 1003
local STATE_ATTACK4 = 1004
local STATE_ACIDSPRAY = 1005
local STATE_PAIN = 1006
local STATE_DIE = 1007
local STATE_DONE = 1008
local STATE_MOVERIGHT = 1009
local STATE_MOVELEFT = 1010
local STATE_ATTACK5 = 1011
local STATE_TRANSFORM = 1012
local STATE_CREATEMERMAN= 1013
-- yer done!
v.attacksToGo = 3
v.lastAcid = false
v.getHitDelay = 0
-- initial v.attackDelay value set below
v.attackDelay = 0
v.hurtDelay =0
v.hits = 0
v.maxHeadHits = 3
v.headHits = v.maxHeadHits
v.maxHandHits = 6
v.handHits = 0
v.minPullSpd = 100
v.maxPullSpd = 1800
v.pullSpdRate = 1000
v.grabPoint = 0
v.started = false
v.fireDelay = 0
v.n = 0
v.beam = 0
v.canMove = true
v.skullHits = 80
v.lessThan = v.skullHits*0.6
v.finalStage = false
function init(me)
setupBasicEntity(
me,
"", -- texture
90, -- health
1, -- manaballamount
1, -- exp
1, -- money
0, -- collideRadius (only used if hit entities is on)
STATE_IDLE, -- initState
90, -- sprite width
90, -- sprite height
1, -- particle "explosion" type, maps to particleEffects.txt -1 = none
0, -- 0/1 hit other entities off/on (uses collideRadius)
3000, -- updateCull -1: disabled, default: 4000
0
)
entity_initSkeletal(me, "HellBeast")
entity_generateCollisionMask(me)
entity_scale(me, 2.0, 2.0)
--entity_setDamageTarget(me, DT_AVATAR_ENERGYBLAST, false)
entity_setCull(me, false)
--entity_setState(me, STATE_IDLE)
v.bone_tongue = entity_getBoneByName(me, "Tongue")
v.bone_hand = entity_getBoneByName(me, "Hand")
--bone_leftThumb = entity_getBoneByName(me, "LeftThumb")
v.bone_head = entity_getBoneByName(me, "Head")
v.bone_body = entity_getBoneByName(me, "Body")
v.bone_upperLeg = entity_getBoneByName(me, "UpperLeg")
v.bone_tongue = entity_getBoneByName(me, "Tongue")
v.bone_jaw = entity_getBoneByName(me, "Jaw")
v.bone_target = entity_getBoneByName(me, "Target")
bone_setSegs(v.bone_tongue, 2, 12, 0.4, 0.3, -0.02, 0, 8, 0)
v.node_left = entity_getNearestNode(me, "HELLBEAST_LEFT")
v.node_right = entity_getNearestNode(me, "HELLBEAST_RIGHT")
v.node_middle = entity_getNearestNode(me, "HELLBEAST_MIDDLE")
v.node_hang = entity_getNearestNode(me, "HELLBEAST_HANG")
v.node_nostomp = getNode("NOSTOMP")
v.node_check = entity_getNearestNode(me, "HELLBEAST_CHECK")
v.node_mermanSpawn = entity_getNearestNode(me, "MERMAN_SPAWN")
v.grabPoint = entity_getBoneByName(me, "GrabPoint")
bone_alpha(v.grabPoint, 0)
v.naijaPit = getNode("NAIJAPIT")
entity_setState(me, STATE_IDLE)
--entity_setDamageTarget(me, DT_AVATAR_SHOCK, false)
entity_setTargetPriority(me, 2)
entity_setTargetRange(me, 1024)
v.n = getNaija()
v.hits = 3
loadSound("HellBeast-Beam")
loadSound("HellBeast-Die")
loadSound("HellBeast-Idle")
loadSound("HellBeast-Roar")
loadSound("HellBeast-Stomp")
loadSound("HellBeast-Suck")
loadSound("hellbeast-skullhit")
loadSound("merman-bloat-explode")
loadSound("mia-appear")
loadSound("BossDieBig")
loadSound("BossDieSmall")
loadSound("hellbeast-shot")
loadSound("hellbeast-shot-skull")
entity_setDamageTarget(me, DT_AVATAR_PET, false)
end
function postInit(me)
if getFlag(FLAG_BOSS_MITHALA) > 0 then
entity_setState(me, STATE_DONE)
bone_setTexture(v.bone_head, "hellbeast/skull")
bone_setTexture(v.bone_jaw, "hellbeast/skulljaw")
bone_alpha(v.bone_tongue, 0)
entity_animate(me, "done", -1, true)
if entity_isFlag(me, 0) then
voice("naija_song_beastform")
setControlHint(getStringBank(38), 0, 0, 0, 10, "", SONG_BEASTFORM)
entity_setFlag(me, 1)
end
entity_setAllDamageTargets(me, false)
entity_setColor(me, 0.6, 0.2, 0.2)
end
v.sx = entity_x(me)
v.sy = entity_y(me)
-- cache
createEntity("mermanthin", "", -100, -100)
local e = createEntity("mermanthin", "", -100, -100)
entity_setState(e, STATE_BLOATED)
end
function damage(me, attacker, bone, damageType, dmg)
--[[
v.hits = v.hits + 1
if v.hits > 5 then
v.hits = 0
if entity_isState(me, STATE_THREE) then
entity_setState(me, STATE_TWO)
else
entity_setState(me, STATE_THREE)
end
end
return false
]]--
if entity_isState(me, STATE_HOLDING) then
v.handHits = v.handHits - dmg
if v.handHits <= 0 then
-- move to some hurt state instead
v.inHand = false
entity_setState(me, STATE_IDLE)
end
end
if v.skull then
if bone == v.bone_head or bone == v.bone_jaw then
debugLog("skull hit")
bone_damageFlash(v.bone_head)
bone_damageFlash(v.bone_jaw)
bone_damageFlash(entity_getBoneByIdx(me, 0))
bone_offset(v.bone_head, 0, 0)
bone_offset(v.bone_head, 20, 0, 0.1, 1, 1)
playSfx("hellbeast-skullhit")
v.skullHits = v.skullHits - dmg
if v.skullHits < v.lessThan and not v.finalStage then
v.finalStage = true
playMusicStraight("mithalapeace")
end
if v.skullHits <= 0 then
entity_setState(me, STATE_DIE)
end
shakeCamera(2, 1)
else
playNoEffect()
end
else
if not (entity_isState(me, STATE_MOVELEFT) or entity_isState(me, STATE_ATTACK4)) then
if (damageType == DT_AVATAR_ENERGYBLAST or damageType == DT_AVATAR_SHOCK) and (bone == v.bone_head or bone == v.bone_jaw or bone == v.bone_tongue) then
v.headHits = v.headHits - dmg
end
end
end
if not v.skull then
bone_damageFlash(v.bone_head, 1)
bone_damageFlash(v.bone_jaw, 1)
--playNoEffect()
end
entity_heal(me, 999)
-- for debug
--[[
if not entity_isState(me, STATE_DIE) then
entity_setState(me, STATE_DIE)
end
]]--
--bone_damageFlash(bone)
return false
end
function animationKey(me, key)
if entity_isState(me, STATE_PAIN) and key==3 then
shakeCamera(10, 1.5)
end
if ((entity_isState(me, STATE_MOVERIGHT) or entity_isState(me, STATE_MOVELEFT)) and key == 2)
or (entity_isState(me, STATE_ATTACK3) and key == 2)
or ((entity_isState(me, STATE_MOVERIGHT) or entity_isState(me, STATE_MOVELEFT)) and key == 6)
then
playSfx("HellBeast-Stomp")
shakeCamera(30, 0.5)
if not v.skull then
setSceneColor(0.7, 0.7, 0.7)
setSceneColor(1, 1, 1, 0.5)
end
end
if entity_isState(me, STATE_MOVERIGHT) or entity_isState(me, STATE_MOVELEFT) then
if key == 0 or key == 2 or key == 3 or key == 6 or key == 7 then
v.canMove = false
else
v.canMove = true
end
end
if entity_isState(me, STATE_ACIDSPRAY) and key == 3 then
--playSfx("HellBeast-Beam")
local x, y = bone_getPosition(v.bone_tongue)
--v.beam = createBeam(x, y, 90)
end
if entity_isState(me, STATE_CREATEMERMAN) then
v.lastAcid = false
if key == 1 then
local bx, by = bone_getWorldPosition(v.bone_tongue)
spawnParticleEffect("mermanspawn", bx, by)
playSfx("mia-appear")
elseif key == 3 then
local bx, by = bone_getWorldPosition(v.grabPoint)
v.holding = createEntity("mermanthin", "", bx, by)
elseif key == 4 then
v.holding = 0
end
end
end
function update(me, dt)
if not entity_isState(me, STATE_DONE) and getFlag(FLAG_BOSS_MITHALA) > 0 then
return
end
if not(entity_isState(me, STATE_DONE) or entity_isState(me, STATE_DIE)) then
if entity_isEntityInRange(me, v.n, 2848) then
if not v.started then
emote(EMOTE_NAIJAUGH)
playMusic("Mithala")
playSfx("HellBeast-Roar")
v.started = true
v.attackDelay = -2
local nd = getNode("MERSPAWN")
createEntity("mermanthin", "", node_x(nd), node_y(nd))
end
v.soundDelay = v.soundDelay - dt
if v.soundDelay < 0 then
entity_playSfx(me, "HellBeast-Idle")
v.soundDelay = (math.random(100)/100.0)*1 + 0.5
end
end
end
entity_clearTargetPoints(me)
entity_addTargetPoint(me, bone_getWorldPosition(v.bone_head))
entity_addTargetPoint(me, bone_getWorldPosition(v.bone_jaw))
--[[
if isLeftMouse() then
cutscene(me)
end
]]--
--[[
entity_addTargetPoint(me, bone_getWorldPosition(v.bone_body))
entity_addTargetPoint(me, bone_getWorldPosition(v.bone_upperLeg))
]]--
if not entity_isState(me, STATE_DIE) and not entity_isState(me, STATE_DONE) then
overrideZoom(0.3, 1)
--[[
if node_getNumEntitiesIn(v.node_check, "MermanThin")<=0 then
createEntity("MermanThin", "", node_x(v.node_mermanSpawn), node_y(v.node_mermanSpawn))
end
]]--
end
entity_handleShotCollisionsSkeletal(me)
if entity_isState(me, STATE_IDLE) then
if v.headHits <= 0 then
v.headHits = v.maxHeadHits
debugLog("HeadHits exceeded")
if entity_x(me) < node_x(v.node_left)+100 then
if node_getNumEntitiesIn(v.node_check, "MermanThin") > 0 then
entity_setState(me, STATE_ATTACK4, -1, true)
else
entity_setState(me, STATE_MOVERIGHT)
end
else
if node_getNumEntitiesIn(v.node_check, "MermanThin") <= 0 then
entity_setState(me, STATE_MOVERIGHT)
else
entity_setState(me, STATE_MOVELEFT)
end
end
return
end
v.attackDelay = v.attackDelay + dt
if v.attackDelay > 1.8 then
v.attackDelay = (3-v.hits)*0.2
local my_x = entity_x(me)
local my_y = entity_y(me)
if not v.skull then
v.attacksToGo = v.attacksToGo - 1
if node_getNumEntitiesIn(v.node_check, "MermanThin")<=0 then
if v.attacksToGo <= 0 then
v.attacksToGo = v.hits + 3
entity_setState(me, STATE_CREATEMERMAN)
return
end
else
v.attacksToGo = 2
end
end
if node_isEntityIn(v.naijaPit, v.n) then
debugLog("in pit")
if node_isEntityIn(v.node_nostomp, me) then
debugLog("no stomp")
v.lastAcid = false
entity_setState(me, STATE_ATTACK5)
else
debugLog("not no stomp")
if not v.lastAcid then
if chance(50) then
entity_setState(me, STATE_ACIDSPRAY)
v.lastAcid = true
else
v.lastAcid = false
entity_setState(me, STATE_MOVERIGHT)
end
else
v.lastAcid = false
entity_setState(me, STATE_MOVERIGHT)
end
end
else
if entity_y(v.n) < my_y+50 and entity_y(v.n) > my_y-200 and entity_x(v.n) < my_x+1024 then
entity_setState(me, STATE_ATTACK2)
elseif entity_y(v.n) >= my_y and entity_x(v.n) < my_x + 750 then
if not node_isEntityIn(v.node_nostomp, me) then
entity_setState(me, STATE_ATTACK3)
else
entity_setState(me, STATE_ATTACK2)
end
elseif entity_y(v.n) < my_y-200 then
if entity_x(v.n) < entity_x(me)+ 300 then
entity_setState(me, STATE_ATTACK1)
else
entity_setState(me, STATE_ACIDSPRAY)
end
--elseif entity_y(v.n) < my_y+800 then
else
if chance(55) then
if my_x < node_x(v.node_right)-100 or v.lastAcid then
v.lastAcid = false
entity_setState(me, STATE_MOVERIGHT)
else
if node_isEntityIn(v.naijaPit, v.n) then
entity_setState(me, STATE_ATTACK5)
v.lastAcid = false
else
v.lastAcid = true
entity_setState(me, STATE_ACIDSPRAY)
end
end
else
if not v.lastAcid then
v.lastAcid = true
entity_setState(me, STATE_ACIDSPRAY)
else
entity_setState(me, STATE_MOVERIGHT)
end
end
end
end
end
end
if entity_isState(me, STATE_ATTACK4) then
v.pullSpd = v.pullSpd + v.pullSpdRate * dt
if v.pullSpd > v.maxPullSpd then
v.pullSpd = v.maxPullSpd
end
local x, y = bone_getWorldPosition(v.bone_tongue)
local radius = 1500
local length = v.pullSpd
entity_pullEntities(me, x, y, radius, length, dt)
if v.getHitDelay > 0 then
v.getHitDelay = v.getHitDelay - dt
else
--ent = entity_getNearestEntity(me, "MermanThin")
local ent = getFirstEntity()
while ent ~= 0 do
if entity_getEntityType(ent)==ET_ENEMY or entity_getEntityType(ent)==ET_AVATAR then
if entity_isPositionInRange(ent, x, y, 180) then
-- chompy
entity_stopPull(ent)
if entity_isState(ent, STATE_BLOATED) then
v.attackDelay = 0
spawnParticleEffect("mermanexplode", entity_x(ent), entity_y(ent))
playSfx("merman-bloat-explode")
entity_delete(ent)
--debugLog(string.format("%s %d", "hits: ", v.hits))
setSceneColor(0.7, 1, 0.5)
setSceneColor(1, 1, 1, 1)
v.hits = v.hits - 1
if v.hits == 1 then
playMusic("mithalaanger")
entity_setColor(me, 1, 0.5, 0.5, 4)
end
v.getHitDelay = 3
if v.hits <= 0 then
--entity_delete(me)
fade2(1, 0, 1, 1, 1)
bone_setTexture(v.bone_head, "hellbeast/skull")
bone_setTexture(v.bone_jaw, "hellbeast/skulljaw")
bone_alpha(v.bone_tongue, 0)
fade2(0, 0.5, 1, 1, 1)
playSfx("mia-appear")
entity_setState(me, STATE_TRANSFORM, -1, true)
return
--entity_setState(me, STATE_DIE)
else
entity_setState(me, STATE_PAIN)
end
bone_damageFlash(v.bone_head)
bone_damageFlash(v.bone_jaw)
bone_damageFlash(v.bone_body)
elseif entity_isName(ent, "mermanthin") then
entity_delete(ent)
else
if entity_getEntityType(ent) == ET_AVATAR then
entity_damage(ent, me, 1)
else
entity_damage(ent, me, 999)
end
end
end
end
ent = getNextEntity()
end
end
end
if entity_isState(me, STATE_ACIDSPRAY) then
if v.beam ~= 0 then
beam_setAngle(v.beam, bone_getWorldRotation(v.bone_tongue)+90)
beam_setPosition(v.beam, bone_getWorldPosition(v.bone_tongue))
end
v.fireDelay = v.fireDelay + dt
local amount = 0.5
if v.skull then
amount = 0.2
end
if v.fireDelay > amount then
v.fireDelay = 0
local x, y = bone_getWorldPosition(v.bone_tongue)
local tx, ty = bone_getWorldPosition(v.bone_target)
local vx = tx - x
local vy = (ty - y)*1.5
if v.skull then
local dx = entity_x(v.n) - x
local dy = entity_y(v.n) - y
vx, vy = vector_normalize(vx, vy)
dx, dy = vector_normalize(dx, dy)
vx = dx
vy = dy
end
if v.skull then
playSfx("hellbeast-shot-skull")
createShot(string.format("hellbeast-skull", 4-v.hits), me, v.n, x, y, vx, vy)
else
playSfx("hellbeast-shot")
createShot(string.format("hellbeast%d", 4-v.hits), me, v.n, x, y, vx, vy)
end
end
end
--[[
if entity_isState(me, STATE_ACIDSPRAY) then
v.fireDelay = v.fireDelay - dt
if v.fireDelay < 0 then
x,y = bone_getWorldPosition(v.bone_tongue)
entity_setTarget(me, v.n)
entity_fireAtTarget(me, "Purple", 1, 1000, 100, 0, 0, offx, offy, 0, 0, x, y)
v.fireDelay = v.fireDelay + 0.2
end
end
]]--
if v.hurtDelay > 0 then
v.hurtDelay = v.hurtDelay - dt
else
if not v.inHand and
not entity_isState(me, STATE_DONE) and not entity_isState(me, STATE_DIE)
then
local bone = entity_collideSkeletalVsCircle(me, v.n)
if bone ~= 0 then
if not entity_isState(me, STATE_IDLE) then
if bone == v.bone_hand then
if (entity_isState(me, STATE_ATTACK2) or entity_isState(me, STATE_ATTACK5)) then
v.inHand = true
avatar_fallOffWall()
entity_setState(me, STATE_HOLDING)
entity_animate(v.n, "trapped", -1, LAYER_OVERRIDE)
v.handSpin = 4
return
end
end
end
if entity_isState(me, STATE_ATTACK4) then
entity_setState(me, STATE_IDLE)
end
if not v.inHand then
if not entity_isState(me, STATE_PAIN) and not entity_isState(me, STATE_DIE) and not entity_isState(me, STATE_CREATEMERMAN)
and not entity_isState(me, STATE_TRANSFORM) then
entity_damage(v.n, me, 1)
end
entity_push(v.n, 1200, 0, 0)
end
end
if entity_x(v.n) < entity_x(me) then
entity_setPosition(v.n, entity_x(me) + 1, entity_y(v.n))
if entity_velx(v.n) < 0 then
local vx = entity_velx(v.n)
local vy = entity_vely(v.n)
if vx < 0 then
vx = -vx
end
entity_clearVel(v.n)
entity_addVel(v.n, vx, vy)
end
end
end
end
--[[
if entity_isState(me, STATE_TWO) then
x,y = bone_getWorldPosition(v.bone_tongue)
entity_velTowards(getNaija(), x, y, 1200*dt, 1000)
end
]]--
if v.inHand then
--debugLog(string.format("%s %d", "handHits: ", v.handHits))
entity_setPosition(v.n, bone_getWorldPosition(v.grabPoint))
entity_rotate(v.n, bone_getWorldRotation(v.grabPoint))
entity_flipToEntity(v.n, me)
v.hurtDelay = 1
if avatar_isRolling() then
v.handSpin = v.handSpin - dt
if v.handSpin < 0 then
v.handSpin = 0
v.inHand = false
entity_setState(me, STATE_IDLE)
end
end
if entity_isState(me, STATE_IDLE) then
v.inHand = false
entity_idle(v.n)
end
end
if v.holding ~= 0 then
entity_setPosition(v.holding, bone_getWorldPosition(v.grabPoint))
entity_rotate(v.n, bone_getWorldRotation(v.grabPoint))
end
local moveSpd = 500
if v.canMove then
if entity_isState(me, STATE_MOVERIGHT) then
entity_setPosition(me, entity_x(me)+moveSpd*dt, entity_y(me))
end
if entity_isState(me, STATE_MOVELEFT) then
entity_setPosition(me, entity_x(me)-moveSpd*1.3*dt, entity_y(me))
end
end
if entity_isState(me, STATE_ATTACK1) or entity_isState(me, STATE_ATTACK2) or entity_isState(me, STATE_ATTACK3) or entity_isState(me, STATE_HOLDING) or entity_isState(me, STATE_ATTACK4) or entity_isState(me, STATE_ACIDSPRAY) or entity_isState(me, STATE_PAIN) then
if not entity_isAnimating(me) then
if entity_isState(me, STATE_PAIN) then
v.lastAcid = true
entity_setState(me, STATE_ACIDSPRAY)
--entity_setState(me, STATE_MOVERIGHT)
v.attackDelay = -1
else
entity_setState(me, STATE_IDLE)
end
end
end
if entity_isState(me, STATE_DIE) and not entity_isAnimating(me) then
entity_setState(me, STATE_DONE)
end
if entity_isState(me, STATE_MOVERIGHT) and entity_x(me) > node_x(v.node_right) then
entity_setState(me, STATE_IDLE)
end
if entity_isState(me, STATE_MOVELEFT) and entity_x(me) < node_x(v.node_left) then
entity_setState(me, STATE_IDLE)
end
end
v.inCutScene = false
local function cutscene(me)
v.n = getNaija()
if not v.inCutScene then
v.inCutScene = true
setCameraLerpDelay(1)
local pn = getNode("NAIJADONE")
setFlag(FLAG_BOSS_MITHALA, 1)
local ent = getFirstEntity()
while ent ~= 0 do
if entity_isName(ent, "MermanThin") then
entity_setDieTimer(ent, 0.1)
end
ent = getNextEntity()
end
changeForm(FORM_NORMAL)
setSceneColor(0.5, 0.1, 0.1, 1)
entity_idle(v.n)
entity_flipToEntity(v.n, me)
fade2(1, 1, 1, 0, 0)
watch(1)
cam_toNode(getNode("WATCHDIE"))
entity_setPosition(me, v.sx, v.sy)
entity_setPosition(v.n, node_x(pn), node_y(pn))
playMusicOnce("mithalaend")
entity_animate(me, "pain", -1)
fade2(0, 1.5, 1, 0, 0)
watch(2)
playSfx("HellBeast-Die")
shakeCamera(100, 3)
entity_animate(me, "die")
watch(3)
playSfx("BossDieSmall")
fade(1, 0.2, 1, 1, 1)
watch(0.2)
fade(0, 0.5, 1, 1, 1)
watch(0.5)
playSfx("BossDieSmall")
fade(1, 0.2, 1, 1, 1)
watch(0.2)
fade(0, 0.5, 1, 1, 1)
watch(0.5)
entity_color(me, 0.5, 0.5, 0.5, 1.5)
entity_offset(me, 0, 0)
entity_offset(me, 5, 0, 0.05, -1, 1)
playSfx("BossDieSmall")
--playSfx("BossDieBig")
fade(1, 1, 1, 1, 1)
watch(1.2)
fade(0, 0.5, 1, 1, 1)
entity_offset(me, 0, 0, 0.1)
entity_heal(v.n, 1)
entity_idle(v.n)
entity_flipToEntity(v.n, me)
watch(5)
--debugLog("playing agony")
entity_idle(v.n)
emote(EMOTE_NAIJASADSIGH)
cam_toEntity(v.n)
--entity_setPosition(v.n, node_x(pn), node_y(pn), 2, 0, 0, 1)
--cam_toNode(getNode("WATCHDIE"))
setSceneColor(1, 1, 1, 6)
watch(2)
--entity_setPosition(v.n, node_x(pn), node_y(pn), 2, 0, 0, 1)
overrideZoom(0.8, 5)
fade2(1,5,1,1,1)
watch(2)
cam_toEntity(v.n)
entity_animate(v.n, "agony", -1)
watch(4)
--[[
fade2(1, 1, 1, 1, 1)
watch(1)
]]--
setCameraLerpDelay(0)
loadMap("MithalasVision")
--[[
fade(0,0.5,1,1,1)
fade2(0,0.5,1,1,1)
entity_animate(v.n, "agony", LOOP_INF)
showImage("Visions/Mithalas/00")
watch(0.5)
voice("naija_vision_mithalas")
watchForVoice()
hideImage()
learnSong(SONG_BEASTFORM)
watch(1)
entity_idle(v.n)
changeForm(FORM_BEAST)
entity_addVel(v.n, 0, -100)
entity_animate(v.n, "beast", 4)
while entity_isAnimating(v.n) do
watch(FRAME_TIME)
end
voice("naija_song_beastform")
setControlHint(getStringBank(38), 0, 0, 0, 10, "", SONG_BEASTFORM)
overrideZoom(0)
entity_idle(v.n)
setCameraLerpDelay(0)
]]--
--watchForVoice()
-- show help text
end
end
function enterState(me, state)
if entity_isState(me, STATE_IDLE) then
entity_animate(me, "idle", LOOP_INF)
elseif entity_isState(me, STATE_TRANSFORM) then
v.skull = true
entity_setStateTime(me, entity_animate(me, "transform"))
setSceneColor(1, 0.5, 0.5, 2)
v.attackDelay = -1
elseif entity_isState(me, STATE_ATTACK1) then
entity_animate(me, "attack1")
elseif entity_isState(me, STATE_ATTACK2) then
entity_animate(me, "attack2")
elseif entity_isState(me, STATE_ATTACK3) then
entity_animate(me, "attack3")
elseif entity_isState(me, STATE_ATTACK4) then
if v.skull then
entity_setState(me, STATE_IDLE)
else
playSfx("HellBeast-Suck")
v.pullSpd = v.minPullSpd
entity_animate(me, "attack4")
end
elseif entity_isState(me, STATE_ATTACK5) then
entity_setStateTime(me, entity_animate(me, "attack5"))
elseif entity_isState(me, STATE_ACIDSPRAY) then
if v.skull then
local bx, by = bone_getWorldPosition(v.bone_tongue)
spawnParticleEffect("mermanspawn", bx, by)
end
entity_animate(me, "acidSpray")
v.fireDelay = -1.5
elseif entity_isState(me, STATE_PAIN) then
playSfx("HellBeast-Roar")
entity_animate(me, "pain")
elseif entity_isState(me, STATE_HOLDING) then
entity_animate(me, "holding")
v.handHits = v.maxHandHits
elseif entity_isState(me, STATE_DIE) then
cutscene(me)
elseif entity_isState(me, STATE_DONE) then
debugLog("DONE")
overrideZoom(0)
elseif entity_isState(me, STATE_MOVERIGHT) then
v.lastAcid = false
entity_animate(me, "move", -1)
--entity_setPosition(me, entity_x(me)+800, entity_y(me), 3)
entity_setStateTime(me, 3)
elseif entity_isState(me, STATE_MOVELEFT) then
v.attackDelay = v.attackDelay - 1
if v.attackDelay < -1 then
v.attackDelay = -1
end
entity_animate(me, "move", -1)
--entity_setPosition(me, entity_x(me)-800, entity_y(me), 3)
entity_setStateTime(me, 3)
elseif entity_isState(me, STATE_CREATEMERMAN) then
entity_setStateTime(me, entity_animate(me, "create"))
end
end
function exitState(me, state)
if entity_isState(me, STATE_HOLDING) then
if v.inHand then
entity_damage(v.n, me, 1.5, DT_ENEMY)
end
v.inHand = false
entity_idle(v.n)
v.hurtDelay = 2
elseif entity_isState(me, STATE_MOVERIGHT) or entity_isState(me, STATE_MOVELEFT) then
playSfx("HellBeast-Stomp")
shakeCamera(10, 1)
entity_setState(me, STATE_IDLE)
elseif entity_isState(me, STATE_ATTACK4) then
elseif entity_isState(me, STATE_ATTACK5) then
v.attackDelay = -4
entity_setState(me, STATE_IDLE)
elseif entity_isState(me, STATE_ACIDSPRAY) then
if v.beam ~= 0 then
beam_delete(v.beam)
v.beam = 0
end
elseif entity_isState(me, STATE_TRANSFORM) then
entity_setState(me, STATE_ACIDSPRAY)
elseif entity_isState(me, STATE_CREATEMERMAN) then
entity_setState(me, STATE_IDLE)
end
end