Bolero Planning

From Kangaroo Effects
Jump to navigation Jump to search

Bolero is a 2D game engine, currently under development for the LÖVE Framework.

This page tracks development progress and is intended to eventually provide a rough schedule towards completion. Eventually, this info will be shifted over to a dedicated wiki.

Older content: Bolero Planning (Old)


✅ Complete

⌛ Pending, in progress

❌ Cancelled, decided against

❓ Unsure, implementation issues

Task List



[Scenes/Actors] Make a camera / scrolling / scene transition manager. Target-to-follow, Scroll boundaries, Fade-in / Fade-out transitions.

  • The functionality is in, but it really needs to be refactored.
  • 1/Oct/2019: Brought in from September.
  • 23/Oct/2019: Moved the camera logic out of a test actor and into the existing camera toolkit. I turned off fade-out / fade-in a while back and haven't missed it too much. Comfortable with marking this complete for now.

[Scenes/Actors] Early versions of the engine had a simple message stack system for sending messages between actors. Re-enable and finish this, and add support for sending messages across scene boundaries.

  • 1/Oct/2019: Brought in from September.
  • 1/Oct/2019: So I looked at the old commented-out code, and there wasn't much to it, certainly not usable in its present state. I've rewritten the basic queue / stack structure, added a simple name resolution system for addressing actors in different ways, and started on application-wide message definition and message handler hashmaps. I've gotten the player to send a message outside of its scene, back into its scene, and handle the message/event with a handler function. So this is technically working in the absolute barest sense, but it's not really plugged into anything or doing anything useful yet.

[Widgets] Full options menu tree. Need to improve the widget system in order to do this. Selection boxes, "OK/apply/cancel" buttons, scroll boxes, etc.

  • 1/Oct/2019: Brought in from September.
  • 10/Oct/2019: Chipping away at this. Rewrote the widget system and created a top-level state controller widget to support navigating through nested menus. Need to plug engine config into the settings once again. Input binding and resolution settings will likely need their own custom scenes + widgets.
  • 14/Oct/2019: So the basic menu layout is in. Took a short break, and now currently working on an ad hoc scene / widget for configuring input bindings. Once that is functional, I need to do the same for video mode / resolution settings in windowed and fullscreen modes.
  • 19/Oct/2019: Menu tree is in and about 90% functional, except for saving/loading config and resetting everything to defaults. Input binding and resolution settings work. I'm comfortable with marking this complete, and coming back to it near the end of production.

[GFX/Window] Functional fullscreen (canvas needs centering IIRC)

  • 1/Oct/2019: Brought in from September.
  • 19/Oct/2019: Borderless and exclusive fullscreen now working with scaling and resolution selection for exclusive mode.

[Game State] Implement the following: Game-start + restart, loss of life, Game Over, Continuing, and tie actor spawnpoints to difficulty settings.

  • 21/Oct/2019: Seems like the logical next step after cleaning up state + transition handling.
  • 21/Oct/2019: Implemented all of the items on this task.


(Pending further planning)


[Planning] All engine components necessary to finish the game should be operational

[Planning] Get some kind of engine demo out for feedback

I need to do these, but no timeline scheduled

[GFX+Window] Once upgraded to LÖVE 11.3, use the call love.window.setVSync() to set the sync mode without recreating the window.

[I/O+Conf] Debug: Save / Load game state

  • 27/Sept/2019: Putting off for now. Need to distinguish between the game state and the overall engine state. Would savestates include the engine configuration as well, and user-facing save-games in memory? What about the state of the sound module? Also need to consider whether this should be exposed to the end user, or require them to enable some kind of developer mode.

[I/O+Conf] Need to ensure that Unicode is handled correctly when strings are pattern-matched. LÖVE accepts UTF-8 strings, but strings in Lua itself are not really Unicode-aware.

  • 27/Sept/2019: In the codebase, string operations are limited to parsing the config files and command line arguments, and processing internal error messages. This is probably something to revisit later on once the engine has more substance.
  • 28/Sept/2019: LÖVE has a copy of the Lua 5.3 utf8 library which can return the correct offset for a UTF-8 character. I added this Lua UTF-8 string library to the external libs as well.

Off-limits for now

[Audio] I'm really interested in sound synthesis through queueable sources. Maybe next time.

[Audio] Music / ambiance cross-fading, same as above.

[Tools] Asset editors for animations, terrains, envelopes and other engine constructs. They would be nice to have, but I can get by with defining them in code for now.

[GFX/Windowing] The multiple viewport stuff, as mentioned above. Though, it would be fun to give each viewport its own canvas and do zooms / rotations / stuff like that.

[GFX/Windowing] The drawing code should probably use to position draw calls, but the game seems to be running well enough right now. Revisit if this is determined to be a performance bottleneck or causing some other problem.


[GFX/Windowing] Shaders. Not sure if I need them right now, or if I should completely hold off. Will revisit when I have more work done.

[Scenes/Actors] Need some kind of space partitioning to limit the number of collision checks between actors.

  • 28/Sept/2019: Don't go after this until there's a clear performance need to do so. The engine is running fine with 100 actors right now.