Patch note
V 0.1 : August 1, 2026
First public release of RE:MAKE 2D. All core engine functionality is included below, organized by module.
Core
Signal<Args...>— connect/join, priority slots, one-shot slots, condition-based auto emission (bind,bindRising,bindFalling,bindChange)EventManager(event) — 300+ signals covering keyboard, mouse, gamepad, touch, window and application eventsCroutine<Args...>— coroutine-based concurrency with a 3-lane thread pool (engine,heavy,user),rmk_pause/rmk_await/rmk_lockedPausePauseGuard/SharedPause— coroutine-safe locks for use acrossrmk_pause()System(system) —Setup/Toggle/Infosub-interfaces for engine configuration and host platform infoErrorand per-module error subtypes,rmk_dynamicAssert
Graphics
Window— multi-window support, viewports, blend modes, draw/fill for shapes, textures, tilemaps, parallaxMainRenderLoop(loop) — main loop driving event polling, physics, and (as of this patch) animation updatesShape<POINT_COUNT>/Geometry— regular polygon shapes, SAT collision,Point,Line,Triangle,Rectangle,Square,Circle,Losange,Hexagone,EllipseCamera— smoothing, zoom, boundary limits, follow (Vec2d,Geometry,PhysicBody)
Texture
Texture<S>— image mapped onto an arbitraryIsShapegeometry's actual contour, not just its bounding boxSprite—Texture<Rectangle>alias for the common rectangular caseText/FontManager(font) — font loading, anchoring, wrapping, formatting tokens (fmt::nl,tab,endl,flush)Animation— sprite-sheet playback with loop count and FPS control; frame advancement is now handled automatically by the engine's main loop rather than requiring a manual per-frame call
Sound
Music/SFX(Soundbase) — OGG/MP3/FLAC music, WAV effects, per-channelSFXplayback,onFinishsignal
Physics
PhysicBody/StaticBody/DynamicBody(Box2D-backed) — mass, friction, bounce, gravity toggle, bullet mode, warp/limit zonesPhysicManager(physics) — world bounds, gravity, pixels-per-meter ratio, body registry- Contact signals —
onContact,onContactStart,onContactEnd - Movement signals —
onMove,onMoveUp,onMoveDown,onMoveLeft,onMoveRight
Maps
TileMap— tile layout loading, tagging, async physics build, camera-aware culling and rescaling via linked viewportTileGrid— lightweight cell-only grid, no texture/physics overheadParallax— multi-layer scrolling backgrounds with per-layer speed quotients
Time
DeltaTime(delta) — frame delta, FPS tracking, configurable frame rate capTimer/TimerManager(timer) — countdown withonTimeout, pause/resume, repeatChronometer— free-running elapsed time counter with pause/resumeDate/Clock— parseable/formattable calendar date and time-of-day types
Tools
math— full arithmetic operator set (+ - / * %) forVec2d,Dim2d,Fact2d,Grid2d,Area,Color; comparison operators forDate/Clockstream—ostream/istreamsupport for base types, chainableTextbuilding via<<concept—IsShape,IsTexture,IsPhysic,IsActor,IsSignal,IsSavable,IsBasicTypeutility—Nil/nil, angle conversion + literals, physics unit conversion, layer helpers,file::jump, color/HSL conversionRandom(random) — seeded Mersenne Twister,rand<T>for numeric/Vec2d/Dim2d/Color(HSL-interpolated),choice,chance,dice,mixColorScene/Act— layered actor/function updates, scene grouping and focus switching
Data & Script
Data— variant container for all base types plus nested lists/mapsISavable—sdata/ldatainterface for custom savable typesDataFile/SaveManager(data) — JSON persistence,<</>>streamingScript/SolState(script) — Lua hot-reload via sol2,registerType,loadVar, full engine type exposure to Lua
V 0.2 : August 2, 2026
First patch of RE:MAKE 2D beta version.
Texture
Text and animations now render correctly
Text and Animation could remain invisible on screen despite loading their resources successfully. This is now fixed — both display properly, including after being moved, rotated, or resized.
Color tinting now works on text and sprites
The color passed to Window::draw(...) previously had no visible effect on text or animated sprites — they always kept their original color. This is now fixed, including for Parallax and TileMap.
Testing notes
Snake demo: high score is now saved correctly In the sample game, the best score wasn't being kept after a restart. It's now properly saved and persists between sessions.