From bd673f4fef2fef4d5d3bf27afd9073b84ce5c3ed Mon Sep 17 00:00:00 2001 From: WizardMantis441 <77557487+WizardMantis441@users.noreply.github.com> Date: Sat, 14 Oct 2023 15:19:33 -0500 Subject: [PATCH] moddable game over i think --- .../backend/scripting/events/GameOverEvent.hx | 30 +++++++++++++++++++ source/funkin/game/PlayState.hx | 16 ++++++---- 2 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 source/funkin/backend/scripting/events/GameOverEvent.hx diff --git a/source/funkin/backend/scripting/events/GameOverEvent.hx b/source/funkin/backend/scripting/events/GameOverEvent.hx new file mode 100644 index 00000000..cdf46256 --- /dev/null +++ b/source/funkin/backend/scripting/events/GameOverEvent.hx @@ -0,0 +1,30 @@ +package funkin.backend.scripting.events; + +import funkin.game.Character; + +final class GameOverEvent extends CancellableEvent { + /** + * Character which died. Default to `boyfriend`. + */ + public var character:Character; + + /** + * Character ID (name) for game over. Default to whatever is specified in the character's XML. + */ + public var deathCharID:String; + + /** + * Song for the game over screen. Default to `this.gameOverSong` (`gameOver`) + */ + public var gameOverSong:String; + + /** + * SFX at the beginning of the game over (Mic drop). Default to `this.lossSFX` (`gameOverSFX`) + */ + public var lossSFX:String; + + /** + * SFX played whenever the player retries. Defaults to `retrySFX` (`gameOverEnd`) + */ + public var retrySFX:String; +} \ No newline at end of file diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index 2629e7ca..46d53041 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -1243,11 +1243,15 @@ class PlayState extends MusicBeatState * @param retrySFX SFX played whenever the player retries. Defaults to `retrySFX` (`gameOverEnd`) */ public function gameOver(?character:Character, ?deathCharID:String, ?gameOverSong:String, ?lossSFX:String, ?retrySFX:String) { - character = character.getDefault(opponentMode ? dad : boyfriend); - deathCharID = deathCharID.getDefault(character != null ? character.gameOverCharacter : "bf-dead"); - gameOverSong = gameOverSong.getDefault(this.gameOverSong); - lossSFX = lossSFX.getDefault(this.lossSFX); - retrySFX = retrySFX.getDefault(this.retrySFX); + var event:GameOverEvent = scripts.event("onGameOver", EventManager.get(GameOverEvent).recycle( + character.getDefault(opponentMode ? dad : boyfriend), + deathCharID.getDefault(character != null ? character.gameOverCharacter : "bf-dead"), + gameOverSong.getDefault(this.gameOverSong), + lossSFX.getDefault(this.lossSFX), + retrySFX.getDefault(this.retrySFX) + )); + + if (event.cancelled) return; if (character != null) character.stunned = true; @@ -1261,6 +1265,8 @@ class PlayState extends MusicBeatState FlxG.sound.music.stop(); openSubState(new GameOverSubstate(character == null ? 0 : character.x, character == null ? 0 : character.y, deathCharID, character != null ? character.isPlayer : true, gameOverSong, lossSFX, retrySFX)); + + scripts.event("onGameOver", event); } /**