From 516756734d89e6114a71d93e0793e58ac4137a1f Mon Sep 17 00:00:00 2001 From: Benjamin Amos Date: Tue, 20 Feb 2024 20:24:40 +0000 Subject: [PATCH 1/2] Prevent saving during the tutorial --- engine/src/main/java/org/destinationsol/game/SolGame.java | 2 +- engine/src/main/java/org/destinationsol/game/StarPort.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/engine/src/main/java/org/destinationsol/game/SolGame.java b/engine/src/main/java/org/destinationsol/game/SolGame.java index 865b5a542..7e0244be8 100644 --- a/engine/src/main/java/org/destinationsol/game/SolGame.java +++ b/engine/src/main/java/org/destinationsol/game/SolGame.java @@ -255,7 +255,7 @@ public void startGame(String shipName, boolean isNewGame, EntitySystemManager en Timer.schedule(new Timer.Task() { @Override public void run() { - if (!hero.isTranscendent()) { + if (!hero.isTranscendent() && !isTutorial()) { saveShip(); // Console.getInstance().println("Game saved"); } diff --git a/engine/src/main/java/org/destinationsol/game/StarPort.java b/engine/src/main/java/org/destinationsol/game/StarPort.java index 63308362d..3a75ed00b 100644 --- a/engine/src/main/java/org/destinationsol/game/StarPort.java +++ b/engine/src/main/java/org/destinationsol/game/StarPort.java @@ -124,7 +124,7 @@ public void update(SolGame game) { if (ship != null && ship.getMoney() >= FARE && ship.getPosition().dst(position) < .05f * SIZE) { ship.setMoney(ship.getMoney() - FARE); Transcendent transcendent = new Transcendent(ship, fromPlanet, toPlanet, game); - if (transcendent.getShip().getPilot().isPlayer()) { + if (transcendent.getShip().getPilot().isPlayer() && !game.isTutorial()) { SaveManager.saveWorld(game.getWorldConfig()); game.getHero().setTranscendent(transcendent); } @@ -403,7 +403,7 @@ public void update(SolGame game) { ship.setPos(position); ship.setVelocity(new Vector2()); SolShip ship = this.ship.toObject(game); - if (ship.getPilot().isPlayer()) { + if (ship.getPilot().isPlayer() && !game.isTutorial()) { game.getHero().setSolShip(ship, game); SaveManager.saveWorld(game.getWorldConfig()); } From 0b1dbe312ca6a1350088c5284d3593ebb4c43a7a Mon Sep 17 00:00:00 2001 From: soloturn Date: Sun, 23 Aug 2026 15:34:49 +0200 Subject: [PATCH 2/2] fix: only skip the save during tutorial, not the ship/hero linkage Both StarPort transcendence paths gated setTranscendent()/setSolShip() behind the same '&& !game.isTutorial()' guard as the save call, so a tutorial player using a star port got detached from their ship: the outgoing ship was still removed via removeObjDelayed()/replaced via addObjDelayed(), but the hero was never pointed at the new object. Per @NicholasBatesNZ's review: keep the isPlayer() check on the outer if, nest only the SaveManager.saveWorld() call inside !isTutorial(). --- .../main/java/org/destinationsol/game/StarPort.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/engine/src/main/java/org/destinationsol/game/StarPort.java b/engine/src/main/java/org/destinationsol/game/StarPort.java index 3a75ed00b..6ddbc3e96 100644 --- a/engine/src/main/java/org/destinationsol/game/StarPort.java +++ b/engine/src/main/java/org/destinationsol/game/StarPort.java @@ -124,8 +124,10 @@ public void update(SolGame game) { if (ship != null && ship.getMoney() >= FARE && ship.getPosition().dst(position) < .05f * SIZE) { ship.setMoney(ship.getMoney() - FARE); Transcendent transcendent = new Transcendent(ship, fromPlanet, toPlanet, game); - if (transcendent.getShip().getPilot().isPlayer() && !game.isTutorial()) { - SaveManager.saveWorld(game.getWorldConfig()); + if (transcendent.getShip().getPilot().isPlayer()) { + if (!game.isTutorial()) { + SaveManager.saveWorld(game.getWorldConfig()); + } game.getHero().setTranscendent(transcendent); } ObjectManager objectManager = game.getObjectManager(); @@ -403,9 +405,11 @@ public void update(SolGame game) { ship.setPos(position); ship.setVelocity(new Vector2()); SolShip ship = this.ship.toObject(game); - if (ship.getPilot().isPlayer() && !game.isTutorial()) { + if (ship.getPilot().isPlayer()) { game.getHero().setSolShip(ship, game); - SaveManager.saveWorld(game.getWorldConfig()); + if (!game.isTutorial()) { + SaveManager.saveWorld(game.getWorldConfig()); + } } objectManager.addObjDelayed(ship); blip(game, ship);