diff --git a/src/bobbin/constants/Actions.java b/src/bobbin/constants/Actions.java index e0d8f8a..0349fa3 100644 --- a/src/bobbin/constants/Actions.java +++ b/src/bobbin/constants/Actions.java @@ -112,7 +112,7 @@ public int respondToInteraction(PlayerCharacter actor, public static final BaseAction NEW_GAME = new BaseAction(Globals.messages.getString("Actions.NEW_GAME.name"), "", - gameCharacter -> Main.stockGame()); + gameCharacter -> Main.buildStockGame()); public static BaseAction OPEN_DOOR(Door door) { return new BaseAction(Printers.format("Actions.OPEN_DOOR", door.getName()), diff --git a/src/bobbin/main/Main.java b/src/bobbin/main/Main.java index 270129b..1abf807 100644 --- a/src/bobbin/main/Main.java +++ b/src/bobbin/main/Main.java @@ -10,6 +10,7 @@ import bobbin.characters.PlayerCharacter; import bobbin.constants.Items; import bobbin.effects.GameCharacterEffect; +import bobbin.interaction.ConsolePrompt; import bobbin.interaction.ExitToException; import bobbin.interaction.Interactive; import bobbin.interaction.actions.Action; @@ -52,7 +53,20 @@ private static void start(BufferedReader reader, PrintWriter writer, } } - public static PlayerCharacter stockGame() { + /** + * Build a room, allowing the player to configure their character. + * + * @return {@link PlayerCharacter} in the new game. + */ + public static PlayerCharacter buildNewGame(BufferedReader reader, PrintWriter writer) { + Room startingRoom = new Room("Starting Room", "A Whole New Room"); + return new PlayerCharacter( + ConsolePrompt.getResponseString(reader, writer, "Character Name"), + ConsolePrompt.getResponseString(reader, writer, "Character Tagline"), + startingRoom); + } + + public static PlayerCharacter buildStockGame() { Room startingRoom = new Room("Starting Room", "The room you start in", Items.getCopiesOf(Items.BLUEBERRY, Items.BED)); Room otherRoom = new Room("Another Room", "Not the room you start in", diff --git a/src/bobbin/menus/MainMenu.java b/src/bobbin/menus/MainMenu.java index 6ef964c..3e2c3da 100644 --- a/src/bobbin/menus/MainMenu.java +++ b/src/bobbin/menus/MainMenu.java @@ -23,6 +23,12 @@ public class MainMenu extends Menu { + class DummyPlayerCharacter extends PlayerCharacter { + public DummyPlayerCharacter(String name, String description, Room location) { + super(name, description, location); + } + } + public static PlayerCharacter dummyPlayerCharacter() { Room fakeRoom = new Room("Fake Room", "For dummy character to exist in"); return new PlayerCharacter("A Dummy Character", "To be used in the main menu", fakeRoom); @@ -31,8 +37,8 @@ public static PlayerCharacter dummyPlayerCharacter() { public void saveGame(PrintWriter writer, PlayerCharacter playerCharacter) { try { new SaveGameSerial(playerCharacter.getName() - .replace(' ', '_') - .replace(File.separatorChar, '.')) + .replace(' ', '_') + .replace(File.separatorChar, '.')) .saveData(playerCharacter); Printers.printMessage(writer, "MainMenu.gameSaved"); } @@ -59,7 +65,11 @@ protected ActionList actions(GameCharacter actor, BaseGameEntity from) { ActionList actions = new ActionList(); if (SaveGameSerial.hasActiveSave()) { - actions.add(Actions.CONTINUE); + SaveGameSerial activeSave = SaveGameSerial.loadActiveSave(); + if (activeSave != null && !(activeSave.loadData() instanceof DummyPlayerCharacter)) { + // Only allow continue if the current player isn't a dummy + actions.add(Actions.CONTINUE); + } } actions.add(Actions.NEW_GAME); @@ -88,7 +98,7 @@ public int respondToInteraction(PlayerCharacter actor, BaseGameEntity from, Buff } if (next.equals(Actions.NEW_GAME)) { - PlayerCharacter playerCharacter = Main.stockGame(); + PlayerCharacter playerCharacter = Main.buildNewGame(reader, writer); return playerCharacter.interact(playerCharacter, this, reader, writer); }