From 7f1b1ef685b61e45c645d1291aa941c2e0e26340 Mon Sep 17 00:00:00 2001 From: psyopcutie Date: Fri, 10 Jul 2026 19:22:28 +0200 Subject: [PATCH] Total cutscene overhaul --- .../cutscene/BalloonConstructionCutscene.kt | 31 +++--- .../cutscene/BalloonExperimentCutscene.kt | 79 +++++++++----- .../SecondBalloonExperimentCutscene.kt | 103 ++++++++++++------ 3 files changed, 137 insertions(+), 76 deletions(-) diff --git a/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/BalloonConstructionCutscene.kt b/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/BalloonConstructionCutscene.kt index b75efabae..65f4caf07 100644 --- a/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/BalloonConstructionCutscene.kt +++ b/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/BalloonConstructionCutscene.kt @@ -20,44 +20,47 @@ import org.rs09.consts.NPCs */ class BalloonConstructionCutscene(player: Player) : Cutscene(player) { + companion object { + private const val REGION_ENTRANA_11060 = 11060 + private const val JINGLE_A_HOT_AIR_JOURNEY_116 = 116 + } + override fun setup() { setExit(Location.create(player.location)) - loadRegion(11060) - addNPC(NPCs.AUGUSTE_5049, 57, 26, Direction.WEST) + loadRegion(REGION_ENTRANA_11060) } override fun runStage(stage: Int) { when (stage) { 0 -> { fadeToBlack() - timedUpdate(6) + timedUpdate(5) } 1 -> { teleport(player, 56, 26, 0) - moveCamera(41, 25, 2000) - rotateCamera(56, 27) - val obj = getObject(55, 26)!! - face(player, obj.location) - fadeFromBlack() - playJingle(player, 116) + face(player, base.transform(55, 26, 0)) + addNPC(NPCs.AUGUSTE_5049, 57, 27, Direction.SOUTH) + moveCamera(48, 25, 1100) + rotateCamera(60, 31) setVarbit(player, VARBIT_ENTRANA_BALLOON_2867, ENTRANA_BALLOON_COMPLETE_2, true) timedUpdate(5) } 2 -> { + fadeFromBlack() move(getNPC(NPCs.AUGUSTE_5049)!!, 56, 27) - timedUpdate(1) + timedUpdate(2) } 3 -> { - moveCamera(39, 25, 200, 2) - timedUpdate(3) + playJingle(player, JINGLE_A_HOT_AIR_JOURNEY_116) + timedUpdate(2) } 4 -> { - moveCamera(38, 24, 2000, 2) - timedUpdate(3) + moveCamera(39, 20, 2000, 8) + timedUpdate(6) } 5 -> { diff --git a/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/BalloonExperimentCutscene.kt b/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/BalloonExperimentCutscene.kt index f7e8ef402..5aa7276bb 100644 --- a/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/BalloonExperimentCutscene.kt +++ b/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/BalloonExperimentCutscene.kt @@ -3,6 +3,7 @@ package content.region.misc.entrana.quest.enlightenedjourney.cutscene import content.data.Quests import content.region.misc.entrana.quest.enlightenedjourney.quest.EnlightenedJourney.Companion.STAGE_FIRST_EXPERIMENT import core.api.face +import core.api.playAudio import core.api.playJingle import core.api.setQuestStage import core.api.visualize @@ -20,69 +21,95 @@ import org.rs09.consts.NPCs */ class BalloonExperimentCutscene(player: Player) : Cutscene(player) { + companion object { + private const val REGION_ENTRANA_11060 = 11060 + private const val JINGLE_A_HOT_AIR_JOURNEY_116 = 116 + private const val SOUND_ORIGAMI_BALLOON_BURNS_3243 = 3243 + private const val SOUND_RELEASE_BALLOON_3245 = 3245 + private const val ANIMATION_RELEASE_ORIGAMI_BALLOON_5142 = 5142 + private const val GRAPHIC_RELEASE_ORIGAMI_BALLOON_880 = 880 + private const val GRAPHIC_FLYING_ORIGAMI_BALLOON_882 = 882 + } + override fun setup() { setExit(Location.create(player.location)) - loadRegion(11060) + loadRegion(REGION_ENTRANA_11060) } override fun runStage(stage: Int) { when (stage) { 0 -> { fadeToBlack() - timedUpdate(6) + timedUpdate(5) } 1 -> { teleport(player, 56, 27, 0) - face(player, Location.create(440, 25, 0)) - moveCamera(58, 30, 350) - rotateCamera(54, 18, 400) + face(player, base.transform(56, 25, 0)) addNPC(NPCs.AUGUSTE_5049, 57, 27, Direction.SOUTH_WEST) - fadeFromBlack() - playJingle(player, 116) - timedUpdate(6) + moveCamera(58, 30, 400) + rotateCamera(50, 6) + timedUpdate(5) } 2 -> { - visualize(player, 5142, 877) + fadeFromBlack() timedUpdate(2) } 3 -> { - Projectile - .create(player, null, 879, 45, 45, 1, 70, 0) - .transform( - player, - player.location.transform(Direction.SOUTH, player.direction.ordinal + 1), - false, - 70, - 140 - ) - .send() + visualize(player, ANIMATION_RELEASE_ORIGAMI_BALLOON_5142, GRAPHIC_RELEASE_ORIGAMI_BALLOON_880) + playAudio(player, SOUND_RELEASE_BALLOON_3245) + playJingle(player, JINGLE_A_HOT_AIR_JOURNEY_116) timedUpdate(3) } 4 -> { - moveCamera(63, 29, 600) - rotateCamera(55, 23, 600) - timedUpdate(3) + val origamiBalloonStart = base.transform(56, 26, 0) + val origamiBalloonEnd = base.transform(56, 21, 0) + + Projectile + .create( + origamiBalloonStart, + origamiBalloonEnd, + GRAPHIC_FLYING_ORIGAMI_BALLOON_882, + 0, + 50, + 0, + 250, + 0, + 0 + ) + .send() + + moveCamera(63, 22, 500, 8) + rotateCamera(47, 26, speed = 8) + timedUpdate(7) } 5 -> { - face(getNPC(NPCs.AUGUSTE_5049)!!, player, 2) - face(player, getNPC(NPCs.AUGUSTE_5049)!!, 2) - timedUpdate(2) + face(player, getNPC(NPCs.AUGUSTE_5049)!!) + dialogueUpdate(NPCs.AUGUSTE_5049, FacialExpression.HAPPY, "That was perfect. My hypothesis was right!") + timedUpdate(1) + } + + 6 -> { + playAudio(player, SOUND_ORIGAMI_BALLOON_BURNS_3243) + face(getNPC(NPCs.AUGUSTE_5049)!!, player) } - 6 -> dialogueUpdate(NPCs.AUGUSTE_5049, FacialExpression.HAPPY, "That was perfect. My hypothesis was right!") 7 -> playerDialogueUpdate(FacialExpression.HALF_WORRIED, "Did you not see the burning?") + 8 -> dialogueUpdate(NPCs.AUGUSTE_5049, FacialExpression.HAPPY, "One more test. Then we shall proceed.") + 9 -> playerDialogueUpdate(FacialExpression.HALF_WORRIED, "Burning? Fire? Hello?") + 10 -> dialogueUpdate( NPCs.AUGUSTE_5049, FacialExpression.HAPPY, "We shall meekly go! No...no...it needs to sound grander. We shall cautiously go..." ) + 11 -> playerDialogueUpdate(FacialExpression.HALF_WORRIED, "We're doomed.") 12 -> { diff --git a/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/SecondBalloonExperimentCutscene.kt b/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/SecondBalloonExperimentCutscene.kt index 49151dcab..64955fd67 100644 --- a/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/SecondBalloonExperimentCutscene.kt +++ b/Server/src/main/content/region/misc/entrana/quest/enlightenedjourney/cutscene/SecondBalloonExperimentCutscene.kt @@ -4,8 +4,10 @@ import content.data.Quests import content.region.misc.entrana.quest.enlightenedjourney.quest.EnlightenedJourney.Companion.STAGE_SECOND_EXPERIMENT import core.api.animate import core.api.face +import core.api.playAudio import core.api.playJingle import core.api.sendChat +import core.api.sendGraphics import core.api.setQuestStage import core.api.visualize import core.game.activity.Cutscene @@ -14,6 +16,7 @@ import core.game.node.entity.impl.Projectile import core.game.node.entity.player.Player import core.game.world.map.Direction import core.game.world.map.Location +import core.game.world.update.flag.context.Graphics import org.rs09.consts.NPCs /** @@ -22,85 +25,113 @@ import org.rs09.consts.NPCs */ class SecondBalloonExperimentCutscene(player: Player) : Cutscene(player) { + companion object { + private const val REGION_ENTRANA_11060 = 11060 + private const val JINGLE_A_HOT_AIR_JOURNEY_116 = 116 + private const val SOUND_ORIGAMI_BALLOON_BURNS_3243 = 3243 + private const val SOUND_RELEASE_BALLOON_3245 = 3245 + private const val ANIMATION_RELEASE_ORIGAMI_BALLOON_5142 = 5142 + private const val GRAPHIC_RELEASE_BIGGER_ORIGAMI_BALLOON_877 = 877 + private const val GRAPHIC_FLYING_BIGGER_ORIGAMI_BALLOON_878 = 878 + private const val GRAPHIC_BURNING_BIGGER_ORIGAMI_BALLOON_879 = 879 + } override fun setup() { setExit(Location.create(player.location)) - loadRegion(11060) + loadRegion(REGION_ENTRANA_11060) } override fun runStage(stage: Int) { when (stage) { 0 -> { fadeToBlack() - timedUpdate(6) + timedUpdate(5) } 1 -> { teleport(player, 56, 27, 0) - face(player, Location.create(440, 25, 0)) - moveCamera(58, 30, 350) - rotateCamera(54, 18, 400) + face(player, base.transform(56, 28, 0)) addNPC(NPCs.AUGUSTE_5049, 57, 27, Direction.SOUTH_WEST) - fadeFromBlack() - playJingle(player, 116) - timedUpdate(6) + moveCamera(58, 30, 400) + rotateCamera(50, 6) + timedUpdate(5) } 2 -> { - visualize(player, 5142, 877) + fadeFromBlack() timedUpdate(2) } 3 -> { - Projectile - .create(player, null, 879, 45, 45, 1, 70, 0) - .transform( - player, - player.location.transform(Direction.SOUTH, player.direction.ordinal + 1), - false, - 70, - 140 - ) - .send() + face(player, base.transform(56, 26, 0)) + visualize(player, ANIMATION_RELEASE_ORIGAMI_BALLOON_5142, GRAPHIC_RELEASE_BIGGER_ORIGAMI_BALLOON_877) + playAudio(player, SOUND_RELEASE_BALLOON_3245) + playJingle(player, JINGLE_A_HOT_AIR_JOURNEY_116) timedUpdate(3) } 4 -> { - addNPC(NPCs.BOB_5058, 58, 23, Direction.WEST) - addNPC(NPCs.CURLY_5059, 59, 24, Direction.WEST) - addNPC(NPCs.MOE_5060, 60, 23, Direction.WEST) - addNPC(NPCs.LARRY_5061, 59, 22, Direction.WEST) - moveCamera(63, 23, 600) - rotateCamera(57, 24, 400, 1000) - timedUpdate(4) + val origamiBalloonStart = base.transform(56, 27, 0) + val origamiBalloonEnd = base.transform(56, 21, 0) + + Projectile + .create( + origamiBalloonStart, + origamiBalloonEnd, + GRAPHIC_FLYING_BIGGER_ORIGAMI_BALLOON_878, + 50, + 50, + 0, + 250, + 0, + 0 + ) + .send() + + moveCamera(63, 22, 550, 8) + rotateCamera(47, 26, speed = 8) + addNPC(NPCs.BOB_5058, 60, 22, Direction.WEST) + addNPC(NPCs.CURLY_5059, 61, 23, Direction.WEST) + addNPC(NPCs.MOE_5060, 62, 22, Direction.WEST) + addNPC(NPCs.LARRY_5061, 61, 21, Direction.WEST) + timedUpdate(3) } 5 -> { - move(getNPC(NPCs.BOB_5058)!!, 53, 23) - move(getNPC(NPCs.CURLY_5059)!!, 53, 24) - move(getNPC(NPCs.MOE_5060)!!, 54, 23) - move(getNPC(NPCs.LARRY_5061)!!, 53, 22) - sendChat(getNPC(NPCs.BOB_5058)!!, "Destroy the floating thing!") + move(getNPC(NPCs.BOB_5058)!!, 53, 22) + move(getNPC(NPCs.CURLY_5059)!!, 54, 23) + move(getNPC(NPCs.MOE_5060)!!, 55, 22) + move(getNPC(NPCs.LARRY_5061)!!, 54, 21) timedUpdate(5) } 6 -> { - moveCamera(56, 23, 400, 1000) - rotateCamera(56, 27, 200, 1000) - timedUpdate(1) + sendChat(getNPC(NPCs.BOB_5058)!!, "Destroy the floating thing!") + sendGraphics( + Graphics(GRAPHIC_BURNING_BIGGER_ORIGAMI_BALLOON_879, 200, 0), + base.transform(56, 21, 0) + ) + playAudio(player, SOUND_ORIGAMI_BALLOON_BURNS_3243) + timedUpdate(3) } 7 -> { + moveCamera(56, 23, 450) + rotateCamera(57, 32) + timedUpdate(1) + } + + 8 -> { animate(player, 2113) playerDialogueUpdate(FacialExpression.NEUTRAL, "Well, that went down like a lead balloon.") } - 8 -> { + 9 -> { fadeToBlack() timedUpdate(3) } - 9 -> { + 10 -> { endWithoutFade { fadeFromBlack() setQuestStage(player, Quests.ENLIGHTENED_JOURNEY, STAGE_SECOND_EXPERIMENT)