Total cutscene overhaul

This commit is contained in:
psyopcutie 2026-07-10 19:22:28 +02:00
parent 63af11240a
commit 7f1b1ef685
3 changed files with 137 additions and 76 deletions

View file

@ -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 -> {

View file

@ -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 -> {

View file

@ -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)