All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Native Unified Template Library Plan (Local Pending Patch): The pending native editor notes now track a unified "Template Library" surface mixing built-ins, saved slots, and history, so the C++ editor can mirror the newly shipped web and Java template-ecosystem workflow once the lock clears.
- Bumped local version to
2.0.27.
- Native repo is still waiting on the existing workspace submodule lock before these unified-library follow-ups can be committed.
- Native Template-to-Slot Shortcut Plan (Local Pending Patch): The pending native editor notes now track direct built-in-template slot saves so the C++ editor can mirror the newly shipped web and Java workflow once the lock clears.
- Bumped local version to
2.0.26.
- Native repo is still waiting on the existing workspace submodule lock before these template-slot follow-ups can be committed.
- Native Template Browser Plan (Local Pending Patch): The pending native editor notes now track a browsable built-in template catalog so the C++ editor can mirror the newly shipped web and Java preset-summary workflow once the lock clears.
- Bumped local version to
2.0.25.
- Native repo is still waiting on the existing workspace submodule lock before these template-browser follow-ups can be committed.
- Native Compact Preset Family Plan (Local Pending Patch): The pending native editor notes now track grouped preset families plus curated starter templates so the C++ editor can mirror the newly shipped web and Java preset-browsing workflow once the lock clears.
- Bumped local version to
2.0.24.
- Native repo is still waiting on the existing workspace submodule lock before these preset-family follow-ups can be committed.
- Native Saved Template Slot Summary Plan (Local Pending Patch): The pending native editor notes now track compact saved-template slot summaries so the C++ editor can match the newly shipped web and Java template-recognition workflow once the lock clears.
- Bumped local version to
2.0.23.
- Native repo is still waiting on the existing workspace submodule lock before these saved-template UX follow-ups can be committed.
- Native Conversion-Pair Editing Plan (Local Pending Patch): The pending native editor notes now track focused first-pass touching-block conversion authoring so the C++ editor can align with the newly shipped web and Java workflow once the lock clears.
- Bumped local version to
2.0.22.
- Native repo is still waiting on the existing workspace submodule lock before these conversion-pair follow-ups can be committed.
- Native Advanced Field-Effect Toggle Plan (Local Pending Patch): The pending native editor notes now track engine-backed field-effect toggles for gravity-ignore and field-wide color effects so the C++ editor can align with the newly shipped web and Java workflow once the lock clears.
- Bumped local version to
2.0.21.
- Native repo is still waiting on the existing workspace submodule lock before these field-effect follow-ups can be committed.
- Native Block Gameplay Hooks Plan (Local Pending Patch): The pending native editor notes now track reward-piece assignment plus focused chain-behavior hooks for selected blocks so the C++ editor can align with the newly shipped web and Java workflow once the lock clears.
- Bumped local version to
2.0.20.
- Native repo is still waiting on the existing workspace submodule lock before these gameplay-hook follow-ups can be committed.
- Native Richer Block Color Set Editing Plan (Local Pending Patch): The pending native editor notes now track multi-color block palette authoring so the C++ editor can align with the newly shipped web and Java workflow once the lock clears.
- Bumped local version to
2.0.19.
- Native repo is still waiting on the existing workspace submodule lock before these richer block palette follow-ups can be committed.
- Native Deeper Block Rule Editing Plan (Local Pending Patch): The pending native editor notes now track focused second-pass block-rule controls like special colors, special chance/frequency, flashing, match-any-color, and counter behavior so the C++ editor can align with the newly shipped web and Java workflow once the lock clears.
- Bumped local version to
2.0.18.
- Native repo is still waiting on the existing workspace submodule lock before these deeper block-rule follow-ups can be committed.
- Native Block Type / Color Controls Plan (Local Pending Patch): The pending native editor notes now track focused block authoring controls and piece block override assignment so the C++ editor can align with the newly shipped web and Java workflow once the lock clears.
- Bumped local version to
2.0.17.
- Native repo is still waiting on the existing workspace submodule lock before these block-authoring follow-ups can be committed.
- Native Recent Action Breadcrumbs Plan (Local Pending Patch): The pending native editor notes now track a bounded recent-action panel for meaningful editor operations so the C++ editor can align with the newly shipped web and Java workflow once the lock clears.
- Bumped local version to
2.0.16.
- Native repo is still waiting on the existing workspace submodule lock before these breadcrumb-workflow follow-ups can be committed.
- Native Center-All Helper Plan (Local Pending Patch): The pending native editor notes now track one-click centering of every rotation in the selected piece so the C++ editor can align with the newly shipped web and Java geometry workflow once the lock clears.
- Bumped local version to
2.0.15.
- Native repo is still waiting on the existing workspace submodule lock before these center-all follow-ups can be committed.
- Native Recent Share / Import History Plan (Local Pending Patch): The pending native editor notes now track bounded recent-history recall for imported/shared rulesets so the C++ editor can align with the newly shipped web and Java workflow once the lock clears.
- Bumped local version to
2.0.14.
- Native repo is still waiting on the existing workspace submodule lock before these history-workflow follow-ups can be committed.
- Native Empty Rotation Cleanup Plan (Local Pending Patch): The pending native editor notes now track one-click empty-rotation cleanup so the C++ editor can align with the newly shipped web and Java cleanup workflow once the lock clears.
- Bumped local version to
2.0.12.
- Native repo is still waiting on the existing workspace submodule lock before these cleanup follow-ups can be committed.
- Native Preset Shortcut Plan (Local Pending Patch): The pending native editor notes now track one-click classic preset buttons so the C++ editor can align with the newly shipped web and Java shortcut workflow once the lock clears.
- Bumped local version to
2.0.8.
- Native repo is still waiting on the existing workspace submodule lock before these shortcut-workflow follow-ups can be committed.
- Native Preset Slot Plan (Local Pending Patch): The pending native editor notes now track quick preset save/load slots so the C++ editor can stay aligned with the newly shipped web and Java iteration workflow once the lock clears.
- Bumped local version to
2.0.7.
- Native repo is still waiting on the existing workspace submodule lock before these editor workflow follow-ups can be committed.
- Native Movement / Randomizer Toggle Plan (Local Pending Patch): The pending native editor notes now track parity for next-piece, hold-piece, bag/randomizer, hard-drop punch-through, and movement/kick rule toggles so the C++ port can align with the newly shipped web and Java editors once the lock clears.
- Bumped local version to
2.0.6.
- Native repo is still waiting on the existing workspace submodule lock before these editor-authoring follow-ups can be committed.
- Native Advanced Rule Toggle Plan (Local Pending Patch): The pending native editor notes now track parity for advanced gameplay-rule toggles so the C++ port can align with the newly shipped web and Java editors once the lock clears.
- Bumped local version to
2.0.5.
- Native repo is still waiting on the existing workspace submodule lock before these editor-authoring follow-ups can be committed.
- Native Rotation Overview (Local Pending Patch): The pending native custom editor patch is now documented to include direct rotation-overview navigation so it can stay aligned with the web and Java editors once the lock clears.
- Bumped local version to
2.0.4.
- Native repo is still waiting on the existing workspace submodule lock before these follow-up editor UX changes can be committed.
- Native Duplication Workflow (Local Pending Patch): The local native custom editor patch now includes duplicate-piece and duplicate-rotation controls so parity stays aligned with the web and Java editors.
- Bumped local version to
2.0.3.
- Native git remains blocked by the existing workspace submodule lock, so this duplication patch is documented locally and waiting to be committed.
- Native Delete Controls: The local native custom editor patch now includes remove-piece and remove-rotation controls alongside the earlier add/clear/navigation actions.
- Bumped local version to
2.0.2. - Native editor state now recovers selection after destructive edits.
- Ran
git diff --checkon the custom editor source files after the follow-up patch.
- Native Custom Piece Editing:
src/Puzzle/CustomGameEditor.cppnow supports live piece creation, rotation creation, rotation clearing, piece/rotation navigation, and an interactive 4x4 cell grid for editing rotation block offsets. - Editor State Summary: Added native labels showing current piece, current rotation, total piece count, total rotation count, current filled-cell count, and key rule summary fields.
- Header / Implementation Drift:
src/Puzzle/CustomGameEditor.hnow correctly declaresCustomGameEditorControl, matching the existing implementation and references inBobsGame.h/OKGame.h.
- Bumped version to
2.0.1.
- Ran
git diff --checkagainstsrc/Puzzle/CustomGameEditor.handsrc/Puzzle/CustomGameEditor.cppwith no whitespace/errors reported.
- Visualizer Shaders Modernization: Restored the
projectMsubmodule to the C++ build. - SDL3 Compatibility: Modernized internal
projectMshader source generation to use#version 330 core(replacing the deprecated#version 330), satisfying the strict requirements of modern OpenGL context profiles requested by SDL3.
- Bumped version to 1.7.0.
- Re-enabled
add_subdirectory(lib/projectm)and linked theprojectMtarget inokgame/CMakeLists.txt.
- C++ Network Engine: Integrated
Poco::Net::WebSocketandPoco::JSONto build a native C++NetworkManagercompatible with the Node.jssocket.ioserver. - C++ Matchmaking UI: Created
GameSelectorMenuPanelandLobbyMenuPanelusing the nativeBobMenuUI system. - Unified Multiplayer: C++ engine now natively supports querying the server for active rooms, creating rooms, and joining rooms across platforms.
- Bumped version to 1.6.0.
okgame/CMakeLists.txtupdated to linkPoco::Net,Poco::JSON,Poco::Util, andPoco::Foundation.- Refactored
NDButtonin C++ to open the newGameSelectorrather than directly launching the offline engine.
- Java Lobby Leaderboard:
LobbyScreen.javain the Java fork now displays real-time high scores for Marathon mode, matching the Web client's functionality. - Improved Matchmaking: Upgraded
NetworkManager.javato support fetching leaderboards and handling overloaded room management methods. - Aesthetic Polish: Added emoji icons (🔒) to password-protected rooms in the Java lobby list for better visual feedback.
- Improved thread safety in Java network callbacks by ensuring all UI updates are posted to the main application thread.
- Bumped version to 1.5.0.
- Matchmaking UI Polish: Added support for creating and joining private rooms with passwords across both Java and Web clients.
- Node.js Server: Server now properly parses stringified objects when receiving
createRoomandjoinRoomevents to support multiple client architectures.
- Bumped version to 1.4.0.
- Java Lobby Screen: Implemented a full-featured
LobbyScreenin Java usingScene2D, featuring dynamic room listing, joining, and creation. - Improved Engine Accessors: Added static accessors (
Engine.GUIManager(),Engine.ND()) to the baseEngineclass for cleaner inter-component communication in Java. - Global Network Manager: Refactored the Java client to use a persistent, global
NetworkManagerinstance, enabling cross-scene multiplayer state.
- Resolved circular dependency issues in Java UI initialization by lazy-loading components in
GUIManager. - Corrected button routing in Java
GameSelectorto point to the newLobbyScreen. - Fixed initialization bugs in Java
BlockandBobColorserialization.
- Bumped version to 1.3.0.
LobbyScreenin Java now polls for room updates every 5 seconds, matching the Web fork's behavior.
- Client Settings UI: Added
SettingsScene.tsto the Web fork to allow users to customize their display name. - LocalStorage Persistence: Web client now saves and loads the
playerNamevia the browser'slocalStorageAPI. - Java Player Identity: The Java client now appends a pseudo-random identifier (
JavaPlayer_XXX) to distinguish multiple instances when reporting scores.
- Bumped version to 1.2.0.
- Web
MainMenuScene.tsupdated to route the "Settings" button to the newSettingsScene.
- Matchmaking Persistence: Implemented robust JSON-based file persistence for leaderboards (
leaderboards.json) in the Node.js server. - Web Lobby Leaderboard:
LobbyScene.tsin the Web fork now requests and displays real-time top scores for Marathon mode next to the active room list. - Cross-Platform Score Reporting: Both Java and Web clients now automatically send telemetry (
score,lines,time) to the server'sreportScoreendpoint when a game over event triggers. - Audio Polish (C++): Updated
AudioManager.cppvisualizer callbacks to correctly utilize the newSDL3_mixersignature (MIX_PostMixCallback) and correctly convert float streams to 16-bit integers.
- Fixed C++
AudioManagerbuffer iteration handling forprojectMaudio data injections. - Addressed potential parsing failures in Node.js server when handling stringified JSON payloads from Java's Gson library.
- Bumped version to 1.1.0.
- Full Multiplayer Cross-Play: Java and Web clients can now play in the same rooms with synchronized PRNG seeds and real-time board visualization.
- Java Opponent Board: Implemented real-time opponent board rendering in the Java fork, side-by-side with the player board.
- Java GameSelector Menu: Created a new
Scene2Dmenu in Java to choose between local and network play. - Synchronized Room Lifecycle: Java client now correctly handles
gameStartandjoinedRoomevents from the Node.js server. - High-Frequency Sync (Java): Java
BobsGamenow sends state frames every 5 frames, matching the Web fork's performance.
- Re-added
removeListenerand optimizedNetworkManagerlifecycle in Java to prevent event duplication. - Fixed
NullPointerExceptionrisks in JavaBlockandGridstate application. - Cleaned up Java
BobsGameinitialization flow to support async network events.
- Bumped version to 1.0.0.
- Unified the "Multiplayer Lobby" experience across both primary forks.
- Complete API parity in Java
NetworkManagerincludinglistRooms,createRoom,joinRoom,sendFrame, and customizableonevent listeners. - Implemented
GameStateDataPOJOs in JavaGameLogicfor robust JSON serialization via Gson. - Java
GridandGameLogicnow support fullgetState()andapplyState()operations matching the Web fork. BobColorutility in Java now supportstoInt()andfromInt(int)static parsers for compact color serialization.
- Re-added
NetworkManagerconstructor andremoveListenercleanup inGameLogicto prevent memory leaks during state transitions. - Adjusted
Blockinitialization inGrid.applyStateto match correct constructor signatures. - Cleaned up obsolete test directories in
bobsgameonlinejavathat referenced missing/refactored internal packages.
- Bumped version to 0.9.0.
NetworkManagernow maintains a HashMap of listeners internally, allowing event subscriptions before socket connection is fully established.
- Real-time opponent board rendering in Web fork (
isOpponentconfig inPuzzleRenderer). - High-frequency "Frame Synchronization" in Web multiplayer via
getState/applyState. - Web
NetworkManagernow extendsEventEmitterfor robust internal event handling. - Integrated
BobColorserialization intoGridstate for accurate cross-client board visualization.
- Multiple TypeScript type errors in
Grid.ts,Block.ts, andNetworkManager.ts. - Resolved
EventEmitteroverride conflicts in Web networking layer. - Corrected
Blockinstantiation inapplyStateto use propergridandblockTypereferences.
- Bumped version to 0.8.0.
PuzzleScenelayout updated to side-by-side boards in multiplayer mode.
- Mock business logic in Java
LoginScreenandCreateNewAccountfor immediate state transitions. - Fully simulated Steamworks SDK linking with local stubs (
lib/steam) sookgamecan compile withHAVE_STEAMWORKS=1. - Web Lobby transition logic:
LobbyScenenow correctly waits for agameStartserver event before pushing thePuzzleScene. - Full room lifecycle in Node.js server (creates room, waits for max players, then emits
gameStartwith synced seed).
- Bumped version to 0.7.0.
NetworkManagerconnect method safely ignores redundant connection attempts, allowing seamlessLobbyScenetoPuzzleScenetransitions.
- Completed Java UI migration from legacy TWL to modern LibGDX Scene2D.
- Ported all core menus (
LoginScreen,StuffMenu,GameStore,PlayerEditMenu, etc.) toScene2DPanelarchitecture. - Fully implemented interactive
LobbyScenein Web fork with dynamic room list and room creation. - Unified UI lifecycle management in Java
Engineclass usingStageandSkin. - Added compatibility stubs for legacy Java menus to ensure stable build during migration.
- Resolved multiple TypeScript errors in
bobsgamewebrelated to scene management and networking. - Fixed
StateManagertype reference in Web fork by exportingStateManagerClass. - Corrected various layout and theme issues in the Java fork.
- Bumped version to 0.6.0.
- Modernized base
Sceneclass in Web fork to store configuration and manager references.
- Integrated LibGDX
StageandSkininto the baseEngineclass for modern UI support in Java. - Created
Scene2DPanelbase class in Java to replace legacyMenuPanelwith LibGDXScene2D. - Modernized
CreateNewAccountscreen in Java usingTextField,Label, andTextButton. - Enhanced Node.js
socket.ioserver with room creation, joining, and listing logic. - Added
LobbyScene.tsshell to Web fork for multiplayer room management.
- Fixed UI layout consistency in Java fork by centralizing
Skinmanagement inGLUtils.
- Bumped version to 0.5.2.
SteamManagerin C++ fork (stubbed implementation for Steamworks SDK).NetworkManagerin Java fork usingsocket.io-client-javafor unified multiplayer.GameLogicListenerinterface in Java to match TypeScriptEventEmitterpatterns.
- Fixed missing
SpriteManagerinBobsGameStadium.java. - Restored missing
GLUtils.javadrawing methods for broad codebase compatibility. - Fixed
SDL_SetWindowFullscreenparameter change in SDL3.
- Bumped version to 0.5.1.
- Updated
BobsGame.javato support optional network initialization.
- Advanced Java Renderer with Sprite support in LibGDX.
- Automatic batch/shape state switching in
GLUtils.javafor optimized Java rendering. NetworkManagerin TypeScript fork usingsocket.io-client.- Simple WebSocket server in
bobsgameweb/serverfor multiplayer testing. garbageSentevent inGameLogicfor multiplayer synchronization.
- Fixed 10+ TypeScript compilation errors in
bobsgameweb. - Corrected SDL3 Gamepad button/axis constants in
ControlsManager.cpp. - Fixed performance-heavy state switching in Java renderer.
- Bumped version to 0.5.0.
- Modernized
LibretroGame.cppto useSDL_AudioStreamfor better audio quality and compatibility.
GameManagerinterface in Java fork to unifyBobsGameandBobsGameStadiumengines.- SDL3 support in C++ fork (modernized
main.cppandControlsManager). - Parity fields in Java
BlockTypeto match TypeScript and C++ expectations.
- All compilation errors in
bobsgameonlinejava. - Redundant enum definitions in Java fork (unified into
GameType.java). - SDL3 event and gamepad constant naming in C++ fork.
- Bumped version to 0.4.0.
- Modernized
ControlsManagerto useSDL_GamepadAPI.
- Synchronized Puzzle logic across C++, Java, and TypeScript forks.
- Ported
GameLogic,Grid,Block,Piece, andGameTypeproperties and methods to Java and TS. - Implemented full chain detection logic using
GameTyperules in all forks. - Added 25+ standard easing functions to
Easingclass.
- Modernized Java version to Java 21 and LibGDX 1.12.1.
- Consolidated Java source tree into
src/main/java. - Upgraded C++ version to SDL3 (In Progress).
- Refactored
Piecearchitecture to use static inner classes forRotationandBlockOffset.
- Initial consolidation of Java fork.
- Modernized Networking to Netty 4.
- Added LibGDX dependency foundation.
- GitHub Actions CI/CD pipeline (.github/workflows/build.yml)
- Windows build with VS2022, Ninja, MSVC
- Linux build with GCC, Ninja, ccache
- Submodule and build caching for faster CI runs
- Concurrency control to cancel stale builds
- Comprehensive AGENTS.md with full project documentation (architecture, conventions, code map).
- Subdirectory AGENTS.md files for src/Engine/, src/Puzzle/, src/Utility/.
- Complete SUBMODULES.md dashboard documenting all 89 submodules with versions.
- Created .github/copilot-instructions.md for VS Code Copilot integration.
- Rewrote CLAUDE.md, GEMINI.md, GPT.md to reference LLM_INSTRUCTIONS.md as master.
- Standardized LLM instruction files with role-specific focus areas.
- Updated all submodules to latest versions (merged upstream changes).
- Fixed
lib/SDL,lib/SDL_image,lib/SDL_mixer,lib/SDL_ttf,lib/SDL_netto trackSDL2branch to avoid conflicts with SDL3. - Updated
SUBMODULES.mdwith detailed version and date information. - Merged feature branches into main.
- Refactored
EnginePart::getCurrentMapandEntity::getCurrentMapto returnstd::shared_ptr<Map>. - Updated
BobEvent,Cameraman,RandomCharacterto match the newgetCurrentMapsignature. - Updated
RamioGuy::renderandScreenSprite::renderto usestd::shared_ptr<BobTexture>. - Fixed
GwenGetModuleFileNameWerror by usingGetModuleFileNameA. - Fixed
Map.hinclude path forCTPL.
- Fixed build error in
ProjectM.hpp(missing includeRenderer/RenderContext.hpp). - Fixed build error in
Entity.h(covariant return type mismatch). - Fixed
ControlsManager.hsyntax error. - Fixed
BobSprite.hinclude path.
- Refactored
BobsGamestatic texture members to usestd::shared_ptr. - Updated
Grid.cppto use.get()for texture rendering calls. - Centralized versioning to
VERSION.md. - Updated
version.phpto read fromVERSION.md. - Consolidated LLM instructions into
LLM_INSTRUCTIONS.md. - Updated
ROADMAP.mdandSUBMODULES.md.
- Implemented preset loading for
projectMvisualizer inBobsGame::init(). - Completed visualizer integration (Build, Render, Input, Preset Loading).
- Integrated
projectMbuild configuration inCMakeLists.txt. - Updated
AGENTS.mdto referenceLLM_INSTRUCTIONS.md.
- Initial changelog creation.
- Added
VERSION.mdandversion.txtfor centralized versioning. - Added
LLM_INSTRUCTIONS.mdfor unified AI agent instructions. - Added
SUBMODULES.mddashboard for submodule management. - Added
ROADMAP.mdto track project progress.
- Consolidated LLM instructions into
LLM_INSTRUCTIONS.md. - Updated
AGENTS.mdto reference the central instructions.