October 12, 2015: BerryBots v1.3.3
- High-resolution ("Retina") graphics support on Mac OS X - game graphics, stage previews, and button icons.
- Improved game speed tuner:
- Default to 30 fps, with additional grooves at 15 fps and 60 fps.
- Keyboard shortcuts for slow down and speed up ("[" and "]").
- Persist speed setting while app is running.
- Higher max speed.
- UI tweaks:
- New Match dialog got a minor facelift.
- Output consoles now larger initial size.
- Reuse main game window across matches.
- Put replay controls under results dialog and output consoles.
- Allow ships to change names and colors during the match if debug gfx are enabled.
- Updated to LuaJIT 2.0.4, SFML 2.3.2, wxWidgets 3.0.2, and KineticJS 5.1.0.
- Bug fix: Crash when starting (or restarting) a match if a bot has compilation errors.
- Bug fix: print() should match Lua's default behavior - supporting multiple arguments and using tostring.
- Bug fix: Start Match hotkey (alt-M) broken on Linux and Windows.
- Bug fix: Packaging saves to wrong directories after changing base directory.
- Bug fix: Escape backslashes in replay text data (output consoles, stage texts, ship / team names).
August 6, 2015: The new PlayBerryBots.com
- The new PlayBerryBots.com is up, featuring a sleek new AngularJS interface, beautiful low contrast colors c/o Solarized, and a "starter kit" with movement and targeting snippets to get you off the ground.
January 26, 2014: BerryBots Little League
- The BerryBots Little League is here! A new tourney every few weeks with a different stage or rule set. Get started coding and submit your bot right from the web at PlayBerryBots.com/battle.
December 3, 2013: BerryBots v1.3.2
- New web UI. Try BerryBots in a browser at PlayBerryBots.com.
- Game Runner updates.
- Added file access to ships and stages directories from RunnerFiles. This enables research that evaluates changes to source code, like genetic algorithms.
- Added RunnerForm.reset(), to clear all fields and values.
- Added RunnerForm.addDropdown(), to choose from a set of strings.
- Added MazerEvolver sample runner. It uses a genetic algorithm to evolve a ship to solve a maze.
- Added option for "Round-robin" seeding in simpletourney. All ships face each other and overall win/loss determines bracket seeding.
- Added win percentages to batchduels.
- Replay/web UI rendering changes.
- Default to 0.5x speed (~30 fps), with options for 1x ("Bouncy") and 20x ("Ludicrous") speeds.
- Added restart button to playback controls.
- Tweaked playback controls to be less intrusive on desktop browsers.
- Bug fix: Lua errors not being saved to replay output consoles.
- Bug fix: Inaccurate API docs for TeamResult.stats table. It's a map, not a list of tables. See example usage in batch1p or batchduels.
- Bug fix: Writing extra null chars to end of file from RunnerFiles.writeFile() on Windows.
- Bug fix: "make install" broken when SFML is already installed on system. (Thanks to cortezthekiller for the bug report and patch.)
- Bug fix: Crash when calling RunnerForm.ok() multiple times.
- Bug fix: Crash when printing empty string with Admin.drawText() or DebugGfx.drawText().
November 10, 2013: BerryBots v1.3.1
- Linux binaries now in .deb (Debian/Ubuntu/Mint) and .rpm (Fedora/openSUSE) packages.
- Revamped build process with autoconf.
- Tweaked torpedo blast graphics to more closely resemble torpedo blast behavior.
- Added "Restart" button to results dialog.
- Mac app is now signed (for Gatekeeper).
- Bug fix: Not always correctly propagating scores to ranks to winner. (E.g., if you only set scores, ranks and winner should be deduced.)
- Bug fix: Torpedo debris not showing in replays.
- Bug fix: Line breaks in output consoles breaks replay data parsing.
- Bug fix: Multiple spaces render as one space in replay output consoles, mangling ASCII art.
- Bug fix: Crash on Mac OS X when launching New Match with a mouse click after first match is launched with hotkey (cmd-M).
- Bug fix: Lua print() with a boolean value doesn't work.
October 13, 2013: BerryBots v1.3.0
- Replays!
- Replays include game graphics, video player controls, output consoles, and full results.
- Replays are saved as HTML files. View them locally or post them online to show off your creations. Rendering is HTML5 Canvas and Javascript using KineticJS.
- Sample: battle2-2013.10.05-17.03.40.html
- Overview video: BerryBots replays
- How to save replays:
- GUI: The results dialog now contains "View Replay" and "Save Replay" buttons.
- Raspberry Pi: Pass
-savereplay
to berrybots.sh. - Sample Game Runners: Check the "Save replays" checkbox.
- Game Runner API: Call
MatchRunner.saveReplay()
.
- Revamped stage preview. Larger image and more info, like stage size, team size, and stage ships. (Sample)
- Game Runner API updates.
- Added
MatchRunner.saveReplay()
to save the replay of the last result returned byMatchRunner.nextResult()
. - Added
RunnerForm.addCheckbox()
to allow boolean form inputs (e.g., "Save replays").
- Added
- Updated to LuaJIT 2.0.2, SFML 2.0+, and wxWidgets 2.9.5.
- Added a 20 lap limit to RaceTrack sample stage.
- Bug fix: Crash when switching between Game Runner and normal matches.
- Bug fix: Crash when previewing stages with no description.
- Bug fix: Crash when closing Error Console on Linux/GTK.
- Bug fix: Incorrectly calculating per-ship scores in batchduels sample runner.
- Bug fix: Rendering negative energy in dock for destroyed ships.
- Bug fix: Debug gfx circles are too coarse (only 30 points).
April 21, 2013: BerryBots v1.2.0
- Game Runner API to execute BerryBots matches and process the results.
Watch the
overview video or read the
API docs.
- Multi-threaded execution of matches.
- Simple system for configuring and receiving input parameters, presented to user through a GUI form.
- Basic file access for saving settings or match results.
- Includes sample Game Runner programs for batch single-player stages (like LaserGallery), batch duels, and a single-elimination tournament.
- For now, only supports Mac, Linux, and Windows.
- Robust results handling.
- In addition to setting a winner, stages can set ranks, scores, and/or custom statistics for each ship or team.
- If no winner is set, winner is ship/team with rank=1. If no winner or ranks are set by the stage, they are determined according to highest scores.
- Sample stages updated with ranks, scores, and statistics.
- Added color and duration parameters to Admin.drawText() (now same as DebugGfx.drawText()).
- Bug fix: Don't segfault when quitting from Package Ship or Package Stage dialogs on Linux.
April 7, 2013: BerryBots v1.1.4
- Bug fix: World.touchedZone and World.touchedAnyZone fixed for ship programs. They were working for stages, but functioning the same as inZone/inAnyZone for ships.
- Bug fix: Memory leaks from not closing Lua states for ship programs, and not detaching timer thread.
- Bug fix: Always print to end of output console, even after user has moved the cursor.
- Tweaked zone tags in sample/racetrack.lua to give a better clue to ships as to which direction they should move around the track.
- On Mac OS X, added a plist setting to allow disabling anti-aliasing in the game graphics. Set Disable Anti-aliasing to true in ~/Library/Application Support/BerryBots/config.plist. If you're on an older Mac and BerryBots crashes when you start a match, give this a try.
March 31, 2013: BerryBots v1.1.3
- Document hard limit of 4096 of each type of debugging graphic. Print warning to ship/stage console if the limit is hit.
- When game is paused and window loses focus, drop frame rate to 5 fps to consume less resources.
- Bug fix: Don't disable garbage collection during calls to user Lua code. This was inadvertently causing GC never to run for some memory-intensive bots.
March 24, 2013: BerryBots v1.1.2
- Display debris when a ship is hit by a torpedo. One particle of debris per damage taken.
- Print Lua stack trace to output console when ship/stage programs encounter errors, in addition to error message.
- Print a different message to output console when a ship destroys itself.
- On Mac OS X, offer to update samples and API docs in base directory when running a new version for the first time.
- Bug fix: Output consoles can be properly resized again.
- Bug fix: Ships and stages packaged on Windows now work on non-Windows.
- Bug fix: When trying to load a file for crawling during packaging, don't crash if Lua encounters an error.
- Bug fix: Minor issue with random seeding for Lua states.
- Bug fix: Some lib path issues with build process on Mac OS X.
March 19, 2013: BerryBots v1.1.1
- Graphical debugging for ships and stages. Watch the overview video or read the DebugGfx API docs. For now, only supports Mac, Linux, and Windows.
- Updated LuaJIT to 2.0.1.
March 11, 2013: BerryBots v1.1.0
- Full GUI for Mac / Linux / Windows.
- Dialogs for running matches, packaging ships and stages.
- Left-hand dock in main window to access ship/stage output consoles, pause or restart the match, and adjust execution speed.
- Preview stages from New Match dialog (like Mac's "Quick Look").
- Quick access to ships and stages directories and API documentation.
- Keyboard shortcuts for just about everything - hit Command (on Mac) or Alt (everywhere else) to see hints.
- Improvements to sample ships and stages.
- New targeting challenge stage: LaserGallery. Goal is to destroy each of five ships with increasingly hard to hit movements as quickly as possible.
- New 5v5 team battle stage: TeamBattle1. Try RandomBot, WallHugger, and Chaser.
- Stages display warning if loaded with wrong number of ships, and destroy any extra ships.
- Battle stages display game time in bottom left and scores at end of a match.
- Maze stages display completion time.
- Misc bug fixes, code cleanup, and colors.
- Sandbox improvements:
- Removed support for loading or packaging ships/stages as LuaJIT bytecode. Running bytecode is much more dangerous than source code. There are Lua bytecode exploits to escape a sandbox and execute arbitrary code. Roblox's blog post about removing bytecode support provides a good overview: Bye Bye Bytecode.
- Disabled LuaJIT Debug library, JIT library, and package.loadlib function. (I/O and OS libraries already disabled.)
- Disallow running ship/stage packages that contain symlinks.
- Hard limit on CPU time for each call to user Lua code. The limit is quite large - the goal for now is only to recover gracefully from misbehaving code. If a stage hits this limit, the match is aborted. If a ship hits the limit, it's disabled for the rest of the match.
- Lots of bug fixes, code refactoring, and cleanup, including:
- bots/ and stages/ directories are now the base path for loading packages, not the directory of the main ship/stage file. So you can have a library in
bots/voidious/pathlib.lua
and use it from
bots/voidious/maze/mazemaster.lua
with:
require "voidious.pathlib"
Having source files spread across directories works much better now. - Re-organized build process with Makefile and documented build instructions on the wiki.
- bots/ and stages/ directories are now the base path for loading packages, not the directory of the main ship/stage file. So you can have a library in
- A fancy new overview video.
January 18, 2013: BerryBots v1.0.1
- Simplified the build process on all platforms.
- Fixed several issues with compiling under Linux (32-bit and 64-bit).
- Misc fixes to the sample ships and stages.