diff --git a/micropolis-java/src/micropolisj/engine/Micropolis.java b/micropolis-java/src/micropolisj/engine/Micropolis.java index 1a1454c4..fe505ae4 100644 --- a/micropolis-java/src/micropolisj/engine/Micropolis.java +++ b/micropolis-java/src/micropolisj/engine/Micropolis.java @@ -94,6 +94,9 @@ public class Micropolis static final int DEFAULT_WIDTH = 120; static final int DEFAULT_HEIGHT = 100; + public boolean keepHeader = false; + byte [] bbHeader = new byte[128]; + public final CityBudget budget = new CityBudget(this); public boolean autoBulldoze = true; public boolean autoBudget = false; @@ -2085,7 +2088,7 @@ public void load(File filename) // but otherwise use the same format as us, // so read in that 128-byte header and continue // as before. - byte [] bbHeader = new byte[128]; + keepHeader = true; fis.read(bbHeader); } load(fis); @@ -2146,6 +2149,9 @@ public void save(OutputStream outStream) throws IOException { DataOutputStream out = new DataOutputStream(outStream); + if (keepHeader) { + out.write(bbHeader); + } writeHistoryArray(history.res, out); writeHistoryArray(history.com, out); writeHistoryArray(history.ind, out); @@ -2181,6 +2187,12 @@ public void setSpeed(Speed newSpeed) fireOptionsChanged(); } + public void toggleKeepHeader() + { + keepHeader = !keepHeader; + fireOptionsChanged(); + } + public void animate() { this.acycle = (this.acycle+1) % 960; diff --git a/micropolis-java/src/micropolisj/gui/MainWindow.java b/micropolis-java/src/micropolisj/gui/MainWindow.java index 47fc7146..98389bae 100644 --- a/micropolis-java/src/micropolisj/gui/MainWindow.java +++ b/micropolis-java/src/micropolisj/gui/MainWindow.java @@ -587,6 +587,17 @@ public void actionPerformed(ActionEvent ev) }})); optionsMenu.add(menuItem); + keepHeaderMenuItem = new JCheckBoxMenuItem(strings.getString("menu.options.keep_header")); + setupKeys(keepHeaderMenuItem, "menu.options.keep_header"); + keepHeaderMenuItem.addActionListener(wrapActionListener( + new ActionListener() { + public void actionPerformed(ActionEvent ev) + { + onKeepHeaderClicked(); + } + })); + optionsMenu.add(keepHeaderMenuItem); + JMenu disastersMenu = new JMenu(strings.getString("menu.disasters")); setupKeys(disastersMenu, "menu.disasters"); menuBar.add(disastersMenu); @@ -795,6 +806,7 @@ private Micropolis getEngine() JMenuItem autoBulldozeMenuItem; JMenuItem disastersMenuItem; JMenuItem soundsMenuItem; + JMenuItem keepHeaderMenuItem; Map priorityMenuItems; Map difficultyMenuItems; @@ -825,6 +837,12 @@ private void onSoundClicked() reloadOptions(); } + private void onKeepHeaderClicked() + { + dirty1 = true; + getEngine().toggleKeepHeader(); + } + void makeClean() { dirty1 = false; @@ -1582,6 +1600,7 @@ private void reloadOptions() autoBulldozeMenuItem.setSelected(getEngine().autoBulldoze); disastersMenuItem.setSelected(!getEngine().noDisasters); soundsMenuItem.setSelected(doSounds); + keepHeaderMenuItem.setSelected(getEngine().keepHeader); for (Speed spd : priorityMenuItems.keySet()) { priorityMenuItems.get(spd).setSelected(getEngine().simSpeed == spd); diff --git a/micropolis-java/strings/GuiStrings.properties b/micropolis-java/strings/GuiStrings.properties index 950076e1..c123efb0 100644 --- a/micropolis-java/strings/GuiStrings.properties +++ b/micropolis-java/strings/GuiStrings.properties @@ -114,6 +114,8 @@ menu.options.zoom_in = Zoom In menu.options.zoom_in.shortcut = PLUS menu.options.zoom_out = Zoom Out menu.options.zoom_out.shortcut = MINUS +menu.options.keep_header = Keep 128 bytes header +menu.options.keep_header.key = H menu.difficulty = Difficulty menu.difficulty.key = F