- Fixed visual glitches when playing games in Wrapped mode with the "Curve on Turns" option enabled.
- Fixed a regression bug introduced in version 3.4 that would cause starting food to fail to spawn on fixed board sizes.
- Ported changes from the latest version of the official Battlesnake Rules (v1.0.26):
- Default move is correctly applied when using the Wrapped ruleset.
- (Mojave already supported this, but we now do it the same way as the official rules).
- On fixed board sizes, food will only spawn on locations away from the center of the board.
- Default move is correctly applied when using the Wrapped ruleset.
- Substantially rewrote the head and tail loader and renderer in order to support non-monochrome head and tail images.
- Added additional head and tail images.
- Added the
customizations
field to the JSON sent to API v1 snakes.
- Custom game modes are now supported! These modes are often featured on Snake Pit Live and include Bridges, Dots, Rings, and Lines.
- Moved hazard damage and speed settings to the game creation screen, displayed for Royale (speed + damage) and Custom (damage only) games.
- Added the "source" parameter to API calls, which will always return "custom" as Mojave doesn't have leagues.
- The heads/tails lists are now sorted alphabetically when adding a Robosnake or human-controlled snake.
- Modified some internal data structures for improved performance and maintainability.
- Renamed "Bloom Filter" option to "Bloom Effect".
- Added additional head and tail images.
- You can now use the function keys on your keyboard to control Mojave:
- F4 - toggles music and SFX
- F5 - toggles fullscreen mode
- F6 through F12 - correspond to the in-game controls: first turn, previous turn, pause/resume, next turn, last turn, restart game, and exit.
- Thank you to Xtagon for suggesting this feature!
- Mojave can now run at higher resolutions!
- The game window can be resized, both at the menu and while a game is in progress.
- The menu background now draws correctly if the game is launched in fullscreen mode.
- The menu UI scales up correctly if the window is resized or the game enters fullscreen mode.
- Do note that the minimum required resolution remains 1280x720.
- There is still UI work to be done to improve usability at higher resolutions, but much of the foundational work is now complete.
- Added the ability to spawn food and hazards deterministically when starting a game, although we're not using it anywhere yet.
- Timeouts used when adding a snake are now hardcoded to 5 seconds rather than using the in-game timeout.
- Added additional head and tail images.
- Manual placement of snakes on the game board is now supported, although we don't use this anywhere yet.
- Corrected the text on the Options screen because in some cases, you actually need to press Save Changes for the changes to take effect. Also I had the name of the button wrong...
- Fixed an edge case where hazard damage would default to 15 instead of 14.
- Minor portability fixes.
- Updated Battlesnake Client API:
- Ruleset configuration parameters are now sent to API v1 snakes in the move JSON.
- "squad" is now always sent as part of the move JSON.
- Ported changes from latest Battlesnake Rules (v1.0.22):
- Moved board generation logic out of StandardRules.
- StandardRules is now responsible for applying hazard damage.
- Snake health is not reduced when eating food in a hazard.
- Added support for the Wrapped game mode.
- Added a config option to optionally limit the number of turns that a game can run for.
- Reduced the default hazard damage to 14 (Note: if you are upgrading from a previous version, you will need to make this change in the Options yourself)
- Minor UX improvements:
- Added some text to the Options screen to make it clear that changes to options, while having immediate effect, do not persist unless the save button is pressed.
- Added some text to the error dialog when trying to add a new snake that says to double-check that the name and URL were entered into the correct fields.
- Centered the Save / Revert Options buttons to make them more prominent.
- Left-aligned the text field labels when adding a new snake.
- Snake shouts can now be viewed under the latency when hovering over a snake avatar during a game.
- Disabled some debugging messages that could cause confusion when launching the game for the first time under Linux.
- Added additional head and tail images.
- Squad games now send the correct ruleset name in the snake request JSON.
- Fixed a bug that could cause the "shout" key to be dropped for some snakes in the request JSON.
- Added additional head and tail images.
- Fixed a bug causing hazard deaths in Royale games to not register on the correct turn.
- Corrected tail rendering when being drawn in up/down state.
- Added additional head and tail images.
- Fixed a bug that caused the food spawn chance, minimum food, snake max health, and snake start size options to not be respected in non-standard game modes.
- Fixed a bug that would cause the game to crash if a snake response was valid JSON, but was not contained in a dictionary.
- Corrected love-imgui URL to use the correct fork in docs/credits.
- Fixed a major bug on Mac OS where Mojave would fail to load ImGui on systems that did not have LuaJIT installed.
- Switched build system from love-release to LovePackaging.
- Application icon now persists.
- Added additional head and tail images.
- Fixed a crash when adding a snake that does not specify a color customization. Snakes without a color customization will now be assigned a random color.
- Snakes are now drawn with curves when turning. This is configurable via a new appearance option. Thank you to Nettogrof for contributing this feature!
- Added a rematch button to the in-game controls that when pressed starts a new game with the same options as the current game.
Mojave 3.0 is a significant rewrite, much like 2.0 was. There are many changes, the notable ones are listed below:
- Appearance
- Added application icon (but only when the app is running).
- Updated to a more recent version of dear imgui and tweaked UI colors.
- Replaced static vignette image with a shader powered by Moonshine. Vignette properties can be configured.
- This lays the groundwork for adding other moonshine effects in the future, i.e. filmgrain.
- The renderer is now capped at 60 FPS, significantly reducing CPU usage.
- Snakes built on API V1, plus human and robo snakes will have preview images rendered in menus.
- All snakes will have a preview rendered during the game.
- Control buttons for advancing, pausing, rewinding the game now use image labels.
- When running in fullscreen mode, the game board will be scaled and the snake stats pane will retain a fixed width.
- Shrunk food size so that it stays within its tile when rotating.
- Added a tile fade effect for hazards.
- All animations can now be disabled via the options menu for improved performance on older computers.
- Gameplay
- The official Battlesnake rules have been open-sourced, so I have ported them to Lua for use in Mojave. This means that Mojave should now fully exhibit the same behavior (and bugs) as the official game board, at least when it comes to gameplay.
- Dropped support for the 2016 Battlesnake API.
- Renamed the 2019 API version to V0 and implemented support for the V1 API.
- Dropped support for deprecated game features (gold, walls, avatars, and taunts).
- Shouts will be used as taunts for the 2017/2018 API requests.
- Added support for Royale, Squads, and Constrictor game modes.
- Added support for hazards.
- Added support for post-2018 head and tail types.
- Added support for stepping back through games.
- Stepping forward through games will no longer generate API calls if the turn has already been played.
- Hover over a snake in the stats pane during an active game to view that snake's latency.
- Press the "Debug" button above a snake in the stats pane during an active game to copy the request/response JSON for that turn to the clipboard.
- Bug Fixes
- You can no longer start a game without any snakes.
- Other
- Relicensed Mojave under GPL 3.0. This was required in order to bundle the latest Battlesnake head and tail images, and port the rules, which are AGPL-licensed.
- Replaced all music and sound effects (this was a side effect of relicensing).
- Mojave now runs the game in a separate thread from the GUI. This makes the GUI significantly more responsive when a game is in progress.
- Incorporated libcurl in order to support snakes over HTTPS and simultaneous requests.
- Moved the appdata directory to "mojave3" so that we can run side-by-side with 2.x and earlier versions.
- Updated game engine to LÖVE 11.3, which has changed system requirements.
- Windows:
- Dropped support for Windows XP. The minimum OS requirement is now Windows Vista.
- The Microsoft Visual C++ 2017 Redistributable package is now required to run the game.
- Mac:
- The minimum OS requirement is now Mac OS 10.14 (also called Mojave...)
- Added support for macOS 11 (Big Sur).
- Apple Silicon (ARM) based machines are not natively supported at this time. They should be able to run the game under emulation, though this hasn't been tested.
- All: A 64-bit operating system is now required.
- Windows:
- Added the Robosnake Mk. III as another built-in snake! This version of Robo is the toughest yet, especially when many snakes are in play.
- When using fixed snake starting positions, those positions are now randomly assigned to the first eight snakes in play, rather than hardcoding a position to each snake slot.
- Support 2017/2018 head and tail images on 2019 snakes.
- Added a new option to specify the amount of food that is placed on the game board when one of the growing food placement strategies is used.
- Added a new option to place an amount of food equal to half the number of living snakes in play on the game board when using a growing food placement strategy (rather than a fixed value)
- Updated the Readme to explain why new head and tail images added in 2019 will not be supported.
- Update default API timeout to 250ms
- When using a growing food placement strategy, start the game with one food on the board for each snake in the game.
- Added a "dynamic growing" food placement strategy which is used by the official 2019 game board.
- Ensure that snakes are always placed on even-numbered tiles to ensure that they are capable of killing each other with a head-on collision.
- Tweaked the default configuration values for people who are running the app for the first time.
- Support the draft 2019 API (subject to change).
- Support the ability to fix snake starting positions according to 2019 tournament rules.
- Added presets for tournament board sizes.
- Fixed the winning snake ID in /end endpoint for 2018 API snakes that win by collecting all gold.
- Clicking "Play" on the game board when a match has completed will now re-start the match using the same settings without requiring you to make a trip back to the menu.
- Added a note to the readme re: incompatibility with LÖVE 11.x
- Fixed a bug that prevented changing Son of Robosnake's recursion depth setting from the default.
- Changed default board height/width/food for better compatibility with Robosnakes
- Minor documentation tweaks.
- It is now possible to play Son of Robosnake, Redbrick's 2018 Bounty Snake directly from Mojave without requiring you to set up your own server.
- The /end endpoint call has been implemented for both the 2016 and 2018 APIs (it was not used in 2017)
- Snakes now die of starvation when their health reaches zero, rather than when it drops below zero (revert change from v2.3.5)
- Fixed a bug where playing Robosnake could cause the game state to corrupt.
- Fixed an additional crash caused by missing values in config.json when upgrading.
- Fixed a bug that allowed you to step past the end of the game.
- Reorganized the options menu a bit.
- Removed some unused code.
- Added the ability to pin snake tails so that snakes grow on every turn (like a Tron game).
- Matches now start at turn 0 instead of turn 1.
- Game ID is now an integer in the 2018 API instead of a UUID.
- Restored move taunt support for 2018 API snakes (the official board supports this even though the API says it doesn't).
- Restored sending height/width on start to 2018 API snakes (the official board does this even though the API says it doesn't).
- 2018 API snakes now need to have their name specified when they are added, the "name" property in API calls is no longer used (this is the same behavior as 2016 API snakes).
- Snakes now die of starvation when their health drops below zero, rather than at zero.
- Do not send dead snakes at all in 2018 API.
- Leave snake health stat alone on death (reverts change from v2.3).
- 2017/2018 API snakes will now be assigned a random color and have their endpoint URL as their name, in the event that their start endpoint call fails.
- Taunts are only set when calling the start endpoint in 2018 API.
- Fixed a bug that caused start endpoint taunts not to show when using snakes under the 2017 or 2018 API (or robosnake).
- Added missing "length" parameter to snakes in 2018 API.
- Start endpoint for 2018 API snakes no longer sends board height/width
- Updated imgui so that Mojave should run correctly under Linux now (thanks @eburdon). If you previously tried to run Mojave under Linux and got an error you will need to remove the application data directory first (see "Troubleshooting" in the readme for instructions).
- Support the draft 2018 API (subject to change).
- When a snake dies, its' health is now set to 0.
- Fixed Robosnake's head and tail type.
- Fix for crashes caused by missing values in config.json (i.e. when upgrading to a new version with new config options that won't be present in the existing config.json on disk).
- The starting length of snakes can now be customized from the default of 3. Lots of low-level tweaks to ensure that snakes with a length of 1 or 2 behave and render correctly.
- The amount of health lost per turn can now be customized from the default of 1.
- Kill counts are no longer double-awarded for head-on-head collisions between three or four snakes.
- The snake death sound effect is no longer played when trying to kill a snake that is already marked for death on the current turn.
- Fixed a visual bug that caused snake tails to appear in the wrong direction on the first turn of the game.
- Added an option to start new games paused (useful for debugging).
- Shrunk default board size to 25x15.
- 2017 API Snakes whos requests time out will now have their direction randomly selected.
- You can now play the infamous Redbrick Robosnake directly within Mojave, without having to set up your own server.
- Snake kills are now incremented when running into the body of another snake, not just the head.
- Walls are now drawn underneath food instead of on top.
- Decreased the opacity of dead snakes slightly.
- Corrected the debug output of game ticks.
- Corrected a bug that could cause the 'Enable Sanity Checks' option not to have any effect.
Mojave 2.0 is a nearly complete rewrite, with lots and lots of changes. The more notable ones are listed below:
- Appearance
- Replaced SUIT with "dear imgui" for rendering GUI elements.
- The game board colors can now be customized.
- Snakes can be configured in the GUI, no more editing snakes.json by hand!
- Snake head and tail type images are now fully supported (for 2017 API snakes). 2016 API snakes use heads and tails that are associated with their slot.
- Snake avatars in GIF format are now supported (however they will not be animated)
- Snake health and gold are rendered using progress bars.
- Improved overall visual appearance of the game board with a (toggleable) bloom filter and vignette. These use a lot of GPU power, so turn them off for laptops or if the game runs too slowly.
- Gameplay
- Fixed several inconsistencies related to tracking snake length and position on the game board, when compared to the official Battlesnake arena. This fixes a number of snakes that would crash at game start or run into their own body when playing under Mojave.
- 2016 and 2017 API snakes can now play each other in the same game - Mojave will send the appropriate API calls to each snake rather than globally.
- Rules changed in different versions of the API can be toggled on/off from the Options menu, allowing for fully hybrid games rather than strict "2016" or "2017" games.
- The game speed can be customized (though it's still bound by the response time from snakes)
- Matches can be paused and resumed, and the internal map state logged during the match.
- The board size is no longer forced to have an odd height/width under any circumstances.
- A human player can no longer control a computer snake, rather, a human player can have own snake to control if requested.
- Reduced the maximum number of snakes allowed in the arena to 10 (for GUI purposes, might bump it back up to 12 in a future release)
- Snakes will no longer be spawned on the edge of the game board.
- Other
- New soundtrack, "Desert Mayhem" plays while a game is running.
- New soundtrack, "Automation" plays while on the menu screen.
- Moved logging to the game UI, and snake taunts to log messages.
- Moved the appdata directory to "mojave2" so that we can run side-by-side with 1.0 and earlier versions.
- Introduced debugging functionality that allows you to step through a match one turn at a time.
- Public release!
- Merged 2017 API and food rules into a single menu option.
- Corrected documentation for food spawns in README.
- Use a default image for snakes whos head could not be loaded
- Do not force board height and width to be odd if playing under the 2017 API
- Implemented support for a global API call timeout, with a 200ms default
- Enable 2017 API and food rules by default
- Fix a crash that occurred when a snake's head was in an unsupported image format
- Generate UUIDs for snakes that have no ID explicitly defined in snakes.json
- Fix /move response interpretation for 2017 API
- If only a single snake is present in snakes.json, allow that snake to play forever (just like we do with human-controlled snakes)
- Support for the 2017 API (https://stembolthq.github.io/battle_snake/). This is a work in progress and will lag behind the official arena.
- The 2017 rule changes (for food) can be toggled separately from the API changes, in order to test new rules / game mechanics using third-party snakes that do not support the latest API yet. When the competition has concluded, this will be replaced by a simple 2016/2017 toggle that will change both the API calls as well as the game rules.
- Custom snake head images and body colors are now used on the game board.
- Gold is now spawned in the closest free square to the center of the game board.
- Gold will not be spawned on the game board if gold is already present on the board.
- Restrict the maximum number of snakes in the arena to 12.
- Disallow play if there are no snakes defined in snakes.json.
- Force board height and width to be odd numbers (so that there is always a center square for gold spawns)
- Fixed broken logging caused by a missing submodule.
- Fixed a crash when trying to start a game containing a snake without a head image.
- Added the ability to customize the game board size from the menu.
- Snake heads and colors are now read and used when displaying stats and taunts. They're not used on the game board itself yet, though.
- Added the ability to run the game in fullscreen.
- Worked around a bug in LuaSocket that could cause some HTTP requests to fail.
- Increased the time between gold drops to 100 turns - with the previous value of 75, drops were happening frequently enough that a lot of victories would happen due to gold collection (no matter what snakes were playing). This is probably because we play with a larger board size (by default) than the official Battlesnake arena.
- Initial Internal Release.