# π CRM64Pro GDK β Changelog
Copyright (C) 2013β2026
Developed by Roberto Prieto β MegaStorm Systems
https://www.megastormsystems.com
Full development history of CRM64Pro from 2013β2025.
This document lists all notable changes, features, fixes, migrations, and module updates.
---
## π 2026-01-15 β v0.14.0 β Major update and pre-release v1.0.0 (II)
### Added
- CMem:
- Added post-mortem safety mechanism to allow global/static STL containers to exist without crashes at exit.
- Added context-aware reporting to `info()` to automatically distinguish between actual memory leaks and pending global object destruction.
- Log:
- Added ANSI color support for `LM_STDOUT` logging:
- Critical errors: bold red
- Errors: red
- Warnings: yellow
- Debug messages: cyan
- Homogenized logging output by adding indentation and prefix control APIs:
- `pushIndent()`, `popIndent()`, `resetIndent()`, `getIndent()`
- `setPrefix()`, `clearPrefix()`
- TileEngine:
- Added support for Tiled Collection of Images tilesets:
- The engine now correctly parses `<tile>` elements containing individual `<image>` sources, allowing a single TileSet to be composed of multiple standalone files.
- Refactored loading API:
- `load()` now only loads from CDC files.
- Added `load(Sint32 idCDC)` to load from an open CDC.
- Added `loadFromFile()` to load from external files.
- Config:
- Refactored loading API:
- `load()` now only loads from CDC files.
- Added `load(Sint32 idCDC)` to load from an open CDC.
- Added `loadFromFile()` to load from external files.
- Timer:
- Microbenchmark system improved with:
- New LATENCY / THROUGHPUT metric types with configurable units (ms, MB/s, ops/s, etc.).
- `benchStop()` now accepts an optional `workAmount` parameter for throughput calculations.
- New `benchInfoEx()` generating interactive HTML reports with Highcharts graphs and CSV export.
- Sprite:
- Added `renderEx()` with scaling, rotation, and sub-pixel precision.
- Decoupled sprite animation logic from rendering into a centralized update system.
### Changed
- CMem:
- Optimized statistics tracking using static arrays for O(1) performance and zero-allocation overhead.
- Refactored `destroy()` and `free()` logic to prevent deadlocks during reporting and ensure safe shutdown.
- Log:
- Consolidated `eLogMessageLevel` and the previous `eLogLevel` into a single standardized `eLogLevel` enum used for both initialization and message logging.
- Font:
- Added scaling support to `renderEx()`. Scaling is applied per-call and does not modify the font's internal state.
- TileEngine:
- Refactored the entire internal architecture.
- Updated copyright year to 2026.
- Updated dependencies:
- SDL 3.5.0 (Jan 2026)
- SDL3_mixer 3.1.0 (Jan 2026)
- dr_mp3 - v0.7.3 (Jan 2026)
### Fixed
- Improved iterator safety and robustness by replacing global iterators with local `auto` iterators.
- Fixed an issue with `messageBox()` alpha blending.
### Breaking Changes
#### Logging API
- Removed `eLogMessageLevel` enum.
- Renamed and remapped log levels to a standardized linear severity hierarchy (0β6):
- `LL_OFF`, `LL_CRITICAL`, `LL_ERROR`, `LL_WARNING`, `LL_INFO`, `LL_DEBUG`, `LL_TRACE`
- Deprecated and removed previous constants:
- `LL_HIGH`, `LL_NORMAL`, `LL_LOW` (initialization parameters)
- `LML_*` (message parameters)
#### TileEngine API
- Renamed `eTileEngineTilesetType` to `eTileEngineTileSetType`.
- Updated enum members to:
- `TETT_TILESET`
- `TETT_COLLECTION`
- Standardized nomenclature:
- **TileSet** refers to the engine logical container.
- **Tile** refers to the underlying CRM64Pro graphical resource.
- Renamed methods:
- `loadTileSet()`
- `setTileSetSource()`
- `getTileSetSource()`
- Renamed TMX import/export API:
- `exportTMX()` β `save()`
- `importTMX()` β `load()`
- Both methods now support CDC archives.
- Renamed `TE_LAYERFLAG_*` constants to `TE_LAYERFEATURE_*`.
- Replaced `allocateLayers()` with:
- `setLayerCount()`
- `getLayerCount()`
#### Microbenchmark API
- Refactored API flow:
- `benchCreate()` for creation
- `benchStart()` / `benchStop()` for measurements
- `benchInfo()` / `benchInfoEx()` for reporting
#### Resource Loading
- AudioTrack:
- `load()` from memory buffer renamed to `loadFromBuffer()`
- Image:
- `load()` from memory buffer renamed to `loadFromBuffer()`
#### Renamed Methods
- Tile:
- `getNumTiles()` β `getTileCount()`
- Archive:
- `getUsedBlocks()` β `getBlockCount()`
- `getMaxBlocks()` β `getBlockLimit()`
#### save() Enhancements
- Added optional `sResourceName` parameter to `save()` methods (`XML`, `AudioTrack`, `Image`, `Cursor`, `Font`, `Tile`, `Sprite`) to allow custom CDC naming without affecting internal state.
#### Feature Flag Standardization
- Replaced:
- `Widget::features()` β `setFeatures()` / `getFeatures()`
- `TileEngine::setLayerFlags()` / `getLayerFlags()` β `setLayerFeatures()` / `getLayerFeatures()`
#### Refactored APIs (Return type change)
Several methods were refactored to return `bool` instead of `Sint32`.
Previous behavior: `0` on success, `< 0` on failure
New behavior: `true` on success, `false` on failure
##### Affected Modules
- All Modules:
- `exist()`, `close()`
- Log Interface:
- `init()`, `msg()`
- Tool Interface:
- File & directory utilities:
- `dirExists()`, `dirCreate()`, `fileExists()`, `fileRemove()`, `fileCheckExtension()`
- `fileOpenDialog()`, `fileSaveDialog()`
- `fileGetAbsolutePath()`, `fileGetExePath()`, `fileGetName()`, `fileGetDir()`, `fileGetExtension()`
- String & conversion utilities:
- `strCompare()`, `strToLowerCase()`, `strToUpperCase()`, `strTovStr()`
- `intToStrDec()`, `intToStrHex()`, `szCopy()`
- Misc:
- `vStrToFile()`, `fileTovStr()`, `getDateStamp()`
- `decodeBase64()`, `decompressZlib()`
- `getKeyState()`
- XML Manager:
- Navigation:
- `nodeNext()`, `nodePrev()`, `nodeParent()`, `nodeChild()`, `nodeFirst()`
- Manipulation:
- `nodePointTo()`, `nodeStore()`, `nodeRestore()`, `nodeRemove()`, `nodeCreate()`, `nodeRename()`
- Attributes & content:
- `nodeGetName()`, `setAttribute()`, `getAttribute()`, `removeAttribute()`
- `setText()`, `getText()`, `removeText()`
- `setComment()`, `getComment()`
- AudioTrack Manager:
- Playback control:
- `play()`, `stop()`, `pause()`, `resume()`
- Parameters:
- `setPosition()`, `setPanning()`, `setPitch()`, `setLoopPoints()`, `setDistance()`
- Global control:
- `stopAll()`, `fadeOutAll()`, `pauseAll()`, `resumeAll()`
- `stopTag()`, `fadeOutTag()`, `pauseTag()`, `resumeTag()`
- Initialization:
- `audioInit()`, `setDriver()`, `setMode()`, `setSize()`
- `setPosition3D()`, `setTag()`
- Misc:
- `setKeepSourceData()`, `getKeepSourceData()`, `getInfo()`
- Image Manager:
- `isBMP()`, `isPNG()`, `assignSurface()`
- `saveToBMP()`, `saveToPNG()`
- `rebuild()`, `setBlendMode()`, `setAlphaMod()`, `setColorMod()`
- Screen:
- `setVSync()`, `setLogicalPresentation()`, `getLogicalPresentation()`
- `setClipRect()`, `getClipRect()`
- `setTitle()`, `setBorder()`, `setIcon()`
- `show()`, `hide()`, `clear()`
- `setRenderCallback()`
- `fadeToColor()`, `fadeToImage()`
- `getSnapshot()`
- Config:
- `audioStatus()`, `audioClose()`
- `audioSetDriver()`, `audioSetMasterGain()`, `audioSetTagGain()`
- Timer Interface:
- `init()`, `setRate()`
- `benchStart()`, `benchStop()`, `benchClose()`
- `benchStats()`, `benchInfo()`, `benchInfoEx()`
- Cursor Manager:
- `setPosition()`, `show()`, `hide()`
- `setHotSpot()`, `getHotSpot()`
- Tile Manager:
- `setOffset()`, `getOffset()`
- `setPosition()`
- Sprite Manager:
- Animation control:
- `pause()`, `resume()`, `setSpeed()`
- `selectAnim()`, `setAnimType()`, `setAnimState()`, `orderAnimState()`
- Animation parameters:
- `setAnimHotSpot()`, `setAnimRange()`, `setFrameTime()`
- Frame control:
- `selectFrame()`
- Positioning:
- `setOffset()`, `setPosition()`
- Getters:
- `getOffset()`, `getAnimType()`, `getAnimState()`
- `getAnimHotSpot()`, `getAnimRange()`, `getFrameTime()`
- Font Manager:
- `setCursor()`, `setKerning()`, `setPosition()`
- GFX Interface:
- Drawing primitives:
- `setSurfacePixel()`, `setPixel()`
- `lineH()`, `lineV()`, `line()`
- `rect()`, `rectFilled()`, `rectRound()`, `rectFilledRound()`
- `arc()`, `circle()`, `circleFilled()`
- `ellipse()`, `ellipseFilled()`
- `polygon()`, `polygonFilled()`
- Color space conversions:
- `RGBtoHSV()`, `HSVtoRGB()`
- `RGBtoYUV()`, `YUVtoRGB()`
- `RGBtoCMYK()`, `CMYKtoRGB()`
- `RGBtoYCC()`, `YCCtoRGB()`
- TileEngine:
- `TE_MapData`:
- `create()`, `free()`, `clone()`, `check()`
- `setCellWidth()`, `setCellHeight()`, `setValue()`
- `A2DtoCSV()`, `CSVtoA2D()`, `stringToA2D()`
- Layers & viewport:
- `freeLayer()`, `freeLevel()`
- `setViewport()`, `setBackgroundColor()`
- `setLayerAlphaMod()`, `setLayerParallaxRatio()`
- `setLayerAutoScroll()`, `setLayerMapData()`
- `setLayerOnUpdateEnd()`, `setLayerOnRenderEnd()`
- `getLayerName()`, `setLayerName()`, `setLayerGridColor()`
- TileSet handling:
- `unloadTileSet()`
- `getTileSetSource()`, `setTileSetSource()`
- Coordinate helpers:
- `screen2LayerCell()`, `screen2LayerAbsolute()`
- `screen2LayerCell()`, `screen2LayerAbsolute()`.
## π 2025-12-20 β v0.13.0 β Major update and pre-release v1.0.0
### Added
- GUI: Introduced `Position` struct to handle widget coordinates, combining float precision offsets with `ePositionHelpers` anchors.
- GUI: Added specialized API for `WidgetTextBox` to handle text manipulation: `appendText()`, `appendLine()`, `insertLine()`, `removeLine()`, `setLine()`, and `getLine()`.
- GUI: Added specialized API for `WidgetListBox` to handle item management: `addItem()`, `insertItem()`, `removeItem()`, `selectItem()`, and `clearItems()`.
- Added `AudioTrack` module providing modern, unified audio playback features.
- Added Vulkan and GPU-accelerated renderer backends.
- Integrated `dr_mp3` 0.7.2 (Sept 2025) for MP3 playback.
- Integrated `libxmp` 4.6.3 (Nov 2025) for module/tracker playback.
- Windows deployment support using Inno Setup.
- Added CHANGELOG.md for tracking project changes (replacing History.txt).
- Added README.md for project overview and setup instructions.
### Changed
- Migrated all projects to Visual Studio 2026.
- Updated copyright year to 2025.
- Updated dependencies:
- xxHash 0.8.3 (Nov 2025)
- TinyXML2 11.0.0 (Nov 2025)
- zlib-ng 2.3.2 (Dec 2025)
- libpng 1.6.53 (Dec 2025)
- SDL 3.4.0 (Nov 2025)
- SDL3_mixer 3.1.0 (Nov 2025)
- dr_flac 0.13.2 (Sept 2025)
- Updated documentation to Doxygen 1.15.0.
- Moved Doxygen documentation into CRM64Pro header files for direct IDE integration.
- Unified formatting across all Doxygen documentation.
- `fileRemove()` now supports wildcard patterns.
- GUI: Updated `ePositionHelpers`: Deprecated "Decrement" flags (e.g., `PH_RIGHTD`) in favor of using standard flags with negative float offsets in the `Position` struct.
### Removed
- Removed `AudioSound` and `AudioMusic` modules (fully replaced by `AudioTrack`).
- Removed minimp3 (no longer supported under SDL3).
- Removed libmodplug (deprecated and unsupported under SDL3).
### Fixed
- Fixed multiple issues in `ConfigMgr::setup()` functionality.
- Fixed colorkey and palette handling issues when loading images.
- Fixed a memory leak when loading images from a CDC archive.
- Fixed issues with the Memory Manager on Linux and macOS when no custom memory manager is enabled.
- Fixed `ImageMgr::renderEx()` flip operations when rendering to an Image.
- Fixed `Screen::fadeToColor()` and `Screen::fadeToImage()` behavior.
### Breaking Changes
- Configuration: System updated to comply with SDL3 and SDL3_mixer API changes.
- Audio: Modernized audio system. `AudioMusic` and `AudioSound` classes have been removed; use the new `AudioTrack` module instead.
- API:
- `msg(...)` signature changed: `msg(eLogMessageLevel level, const char *fmt, ...)` (added `const`).
- All `render()` and `renderEx()` methods now use `SDL_FRect` instead of `SDL_Rect`, and `SDL_FPoint` instead of `SDL_Point`.
- `CursorMgr::setPosition()` and `getPosition()` now use `float` parameters.
- GFX module methods for drawing primitives now use `float` instead of `Sint32`.
- Sprite `setPosition()` and `getPosition()` methods now use `float` instead of `Sint32`.
..
## π 2024-12-28 β v0.12.1 β Maintenance
- ABI is not compatible with the previous version due to migration to SDL 3.1.7.
- Updated dependencies:
- libpng 1.6.44 (Sept 2024)
- zlib-ng 2.2.2 (Dec 2024)
- TinyXML2 10.0.0 (Jul 2024)
- SDL3_mixer 3.0.0 (Dec 2024)
- SDL 3.1.7 (Dec 2024)
## π 2024-05-15 β v0.12.0 β TileEngine III
Main
- Added `intro()` method for showing MegaStorm and CRM64Pro intro screens.
Audio Manager
- Added `load()` method for loading sound from a memory buffer.
Config Manager
- `fadeToImage()` and `fadeToColor()` now process events.
- Fixed bug #0029: `fadeToImage()` issues on Direct3D renderers.
Cursor Manager
- Added `status()` method to check whether the cursor is visible.
- Fixed issues caused by increased SDL3 system cursor types.
TileEngine
- Removed TEL native format; now only Tiled maps are supported (custom props for C64TE).
- Updated TileEngine integration with Tiled maps.
- Tiled Support: improved loader and exporter and added support for image layers.
Build systems
- Linux build available via installation script.
- macOS build available via DMG + PKG installers.
## π 2024-02-22 β v0.11.0 β Maintenance
- ABI not compatible with previous version due to SDL3-related changes.
- Updated dependencies:
- libpng 1.6.42 (Jan 2024)
- zlib-ng 2.1.6 (Feb 2024)
- TinyXML2 10.0.0 (Dec 2023)
- xxHash 0.8.2 (Feb 2024)
- SDL3_mixer 3.0.0 (Feb 2024)
- SDL 3.0.0 (Feb 2024)
Other changes
- Visual Studio 2022 build no longer generates AVX instructions.
SDL3 Migration
- Updated codebase for SDL3 + SDL3_mixer API changes.
- Removed Config Manager methods for enabling/disabling 2D batching (always enabled now).
## π 2023-09-19 β v0.10.0 β TileEngine II
TileEngine
- Improved Tiled importer and viewport handling.
- Added support for Tiled v1.10.
- Added support for:
- Tile special effects
- Animated tiles
- Tilesets now stored as external `.tsx`.
- Tileset creation preserves proportional tile size.
- Deduplication system now uses OpenMP for parallelism.
- Color values now stored as `#RGB(A)` hexadecimal.
Tile Manager
- Added `renderEx()` method.
Tool Interface
- Added `strHexToInt()` method.
## π 2023-06-30 β v0.9.0 β Migration to SDL3
- Adopted semantic versioning.
- ABI is not compatible with previous version.
- Updated dependencies:
- libpng 1.6.40 (Jun 2023)
- zlib-ng 2.1.2 (Jun 2023)
Other improvements
- Cleaned Windows/Visual Studio 2022 projects.
- Fixed bug #0031: screen clipping restoration corruption.
SDL3 Migration
- Removed `Screen::eConfigScreenAspectRatio`, replaced with SDL_RendererLogicalPresentation.
- Renamed:
- `setLogicalSize()` β `setLogicalPresentation()`
- `getLogicalSize()` β `getLogicalPresentation()`
- Screen reworked for SDL3 fullscreen model.
- Updated ConfigMgr::Setup() for new SDL3 logical presentation options.
- Reworked CursorMgr for SDL3.
- Timer now returns 64-bit values.
- Audio:
- Added FLAC + MP3 support.
- Removed AIFF support.
- Enabled Direct3D12 renderer on Windows.
- Removed WinMM audio driver.
## π 2023-06-13 β v0.981 β General Improvements
- Last version supporting SDL2.
- STL `std::map` is now supported by CMem.
Config Manager
- Fixed bug in `load()` method (mtfriendly loading).
- Fixed incorrect CPU name display.
- Fixed issues with sound/music volume settings.
- Fixed issues when generating screen snapshots (Direct3D11 issues remain).
GUI Manager
- Fixed bug #0015: panel removal issues when using images/sprites with parentβchild relationships.
- Improved `ProgressBar` widget when using an image or sprite as background.
- Background image/sprite alpha is now inherited automatically.
- Fixed issues with `TextBox` widgets.
Memory Manager
- Fixed issues when the custom memory manager is not enabled.
Image Manager
- Added `exist()` method for checking if a given image is present.
Audio Manager
- Added `exist()` method for checking if a given music/sound is present.
Tool Interface
- Added `strTovStr()` and `strDecToInt()` methods.
## π 2023-05-04 β v0.980 β Documentation
- Updated to Doxygen 1.9.6 and fixed several documentation issues.
- Added automatic deployment scripts.
Config Manager
- Added detailed documentation for the `setup()` method (layout customization).
## π 2023-04-30 β v0.975 β Config Manager III
Config Manager
- Added `setup()` method for opening a configuration screen. A default layout is provided and can be customized.
- Updated `audioClose()` and calls to `audioInit()` so that reinitializing audio removes all previously loaded music resources.
- Fixed a bug in `setLogicalSize()`.
GUI Manager
- Fixed issues with panel size and position when using non-default screens.
Tool Interface
- Updated `messageBox()` method with a new optional parameter for selecting the screen to attach the dialog to.
XML Manager
- Added `loadFromBuffer()` method for loading XML files directly from memory buffers.
## π 2023-04-01 β v0.973 β Maintenance
- All projects migrated to Visual Studio 2022.
- Windows build now uses Windows SDK 10.0.22621.
- Removed joystick, haptic, and sensor modules from SDL2.
- Disabled Direct3D12 renderer due to lower performance compared to Direct3D11.
- Updated dependencies:
- TinyXML2 9.0.0 (Jan 2023)
- libpng 1.6.39 (Nov 2022)
- SDL 2.26.4 (Mar 2023)
- SDL2_net 2.3.1 (Mar 2023)
TileEngine
- Fixed an issue when exporting a map loaded from a CDC file into Tiled format.
## π 2022-02-12 β v0.972 β Memory Manager II
Memory Manager
- Fixed stats system (Bug #0030).
- Fixed histogram value issues.
- Added `setMsgOutput()` to expose user-controlled memory statistics output.
- Added `setModuleName()` to assign custom names to memory modules.
- Updated **ltalloc** configuration to reduce fragmentation (slightly higher memory usage).
SDL2 Memory Leak Fixes
- Freed local thread storage (220 bytes) at termination (Bug #0030).
- Applied SDL mouse-related memory-leak fix later included in SDL 2.0.22+.
## π 2022-01-31 β v0.971 β Maintenance
- Updated dependencies:
- SDL 2.0.20 (Jan 2022)
- TinyXML2 9.0.0 (Feb 2022)
- SDL2_mixer 2.0.5 (Jan 2022)
- MikMod 3.3.12 (Jan 2022) with SSE2
- libogg 1.3.5 (Jun 2020)
- xxHash 0.8.1 (Jan 2022)
- ltalloc 2.0.2 (Apr 2019) with C64 customizations
## π 2021-05-14 β v0.970 β Config Manager II
General
- Updated Linux build scripts.
- Updated to C++17.
- Replaced **zlib** with **zlib-ng**, improving compression/decompression speed and ratio.
- Added static structure-size checks at compile time.
- Displayed CPU name, core count, CPU features, and system memory.
- Fixed issue with `SDL_windows_main.c`.
- Fixed issue when merging all static libraries into **crm64pro.dll**.
Config Manager
- Initial version of `setup()` (not yet complete).
- Added enable/disable methods for 2D batching system (enabled by default).
Memory Manager
- Histogram & evolution CSV files now include a separator header (improves Excel display).
- Histogram now tags Direct_OS_Call entries.
GUI Manager
- Fixed WIDGETv1_IO_Block size issue (incompatible with previous saved widgets).
- Added checkbox groups: `setGroup()`, `getGroup()`, `getValueGroup()`.
## π 2021-02-06 β v0.969 β Maintenance
- All projects migrated to Visual Studio 2019.
- Only 64-bit builds enabled by default (32-bit still possible).
- Updated dependencies:
- SDL 2.0.14 (Feb 2021)
- SDL2_mixer 2.0.5 (Feb 2021)
- MikMod 3.3.11 (Jun 2020) with SSE2
- libogg 1.3.4 (Aug 2019)
- libvorbis 1.3.7 (Jul 2020)
- SDL2_net 2.0.1 (Jan 2020)
- AES (Sept 2020)
- TinyXML2 8.0.0 (Oct 2020)
- libpng 1.6.37 (Apr 2019) with SSE2
## π 2018-03-29 β v0.967 β Maintenance
- Updated dependencies:
- xxHash 0.6.4 (Feb 2018)
- AES (Feb 2018)
- TinyXML2 6.1.0 (Feb 2018)
- zlib 1.2.11 (Jan 2017)
- SDL 2.0.8 (Mar 2018)
- SDL2_mixer 2.0.3 (Mar 2018)
- libogg 1.3.3 (Nov 2017)
- MikMod 3.3.11 (Jun 2017) with SSE2 enabled
- SDL2_net 2.0.1 (Mar 2018)
- libpng 1.6.34 (Sept 2017) with SSE2 enabled
- Timer
- Increased the maximum Logic Frame Rate to **20,000**.
- Tool Interface
- Updated `randRealWELL()` to accept `pSeedState` and `pSeedTable`.
- Sprite Manager
- Improved `setAnimState()` low-level validations.
- Fixed `getAnimCurrent()` behavior.
- Added new `orderAnimState()` for sorting low-level animation states.
- Audio Backend
- Replaced XAudio2 backend with **WASAPI** on Windows systems.
## π 2017-06-30 β v0.966 β Config Manager I
- All projects migrated to Visual Studio 2017.
- Config Manager
- Added `save()` and `load()` for storing and loading audio and screen configuration.
- Cursor Manager
- Fixed incorrect mouse coordinates on screens where logical and physical sizes differ.
## π 2017-04-30 β v0.965 β Memory Manager
- Memory Manager
- Improved statistics system.
- Added CSV export for memory evolution and histograms.
- Integrated `ltalloc` as low-level allocator.
- Documentation improvements and general cleanup.
## π 2017-03-29 β v0.96 β General Improvements
- Updated dependencies:
- TinyXML2 4.0.1 (migrated from TinyXML)
- xxHash 0.6.2
- libpng 1.6.29 RC
- SDL_mixer 2.0.1 (Jan 2017)
- MikMod 3.3.10 (Aug 2016) with SSE2 enabled
- Memory Manager
- Added CMem (C64 Memory Manager) to all interfaces.
- Hooked CMem into all external libraries.
- STL containers under CRM64Pro namespace now use CMem.
- Added a basic statistics system (to be expanded later).
- Currently still uses default memory allocator.
- Position Helpers
- Unified position helpers for Cursors, Sprites, Fonts, and GUI Widgets.
- Timer
- Added `getHiResTime()` and microbenchmark utilities.
- Config Manager
- Added `getSnapshot()` method to save screen snapshots to PNG.
- `setRenderCallback()` now accepts a pointer to the associated object.
- Network Manager
- `setCoreServerCallback()` now accepts a third parameter (relevant object pointer).
- Moved `ClientInfo` struct into the `NetTCP` class.
## π 2017-02-28 β v0.95 β TileEngine
- ABI changes applied across all objects: removed the "Obj" suffix for simplicity.
- TileEngine
- Migrated and improved from MSTE.
- Fully integrated inside the C64 core.
- Added support for Tiled v1.0 (orthogonal maps).
- GUI
- Added widget feature flag for disabling background rendering.
- Fixed issues when loading `WT_TEXTBOX` and `WT_LISTBOX`.
- Sprite Manager
- `status()` now returns `C64_STATUS_END` when a one-shot animation finishes.
- Config Manager
- Fixed a bug in `getClipRect()`.
- Tile Manager
- Fixed an issue in `render()`.
- Tool Interface
- Added `decodeBase64()` and `decompressZlib()` utilities.
## π 2016-12-30 β v0.946 β Maintenance
- Updated dependencies:
- libpng 1.6.27
- SDL 2.0.5 (Dec 2016)
## π 2016-07-30 β v0.945 β EditorC64
- EditorC64 updated to version 0.85.
- Audio Manager
- Fixed an issue in `AudioInfo` methods.
## π 2016-06-30 β v0.94 β EditorC64
- EditorC64 updated to version 0.8.
- GUI
- Added `getScroll()` and `getVisibleItems()` for ListBox widgets.
- Improved drag-and-drop system.
- Added new panel type `PT_EPHEMERAL` with configurable TTL.
- Added built-in fonts: white and black.
- Added built-in icons: info, warning, error.
- Tool Interface
- `messageBox()` now uses the CRM64Pro GUI system.
- Audio Manager
- Fixed multiple issues in Music and Sound managers.
- Updated dependencies:
- MikMod 3.3.8 (Nov 2015)
## π 2016-05-31 β v0.936 β EditorC64
- EditorC64 updated to version 0.5.
- Managers
- Improved `setName()` and `assignImage()` methods.
- GUI
- Added widget feature flag for reporting lost-focus events.
- Added `WT_TEXTBOX` flag for read-only mode.
- Fixed issues in TextBox and ListBox widgets.
- Tool Interface
- Added `fileGetAbsolutePath()` and `fileGetExePath()` utilities.
## π 2016-04-30 β v0.93 β EditorC64
- EditorC64 updated to version 0.3, the first working version of the new resource manager.
- Managers
- Managers that save objects to CDC files now also include a `remove()` method.
- Unified error codes across modules.
- GUI
- Reworked event-handling logic and fixed all known issues.
- Added widget feature flag for mouse-over event reporting.
- Updated `WT_LISTBOX`: add/select items, guarantees unique entries.
- Fixed issues with TextBox widgets on `PT_MODAL` panels.
- Minimum widget size set to 8Γ8; default set to 15Γ15.
- Tool Interface
- Added `fileOpenDialog()`, `fileSaveDialog()`, and `messageBox()` using native dialogs (Windows, Linux, macOS).
## π 2016-03-29 β v0.91 β General Improvements
- Updated dependencies:
- xxHash 0.5.1
- SDL 2.0.4 (Mar 2016)
- Archive CDC v1.1
- Improved `blockAdd()` to properly detect identical or replaceable data blocks.
- Added `blockUndelete()` for soft-deleted blocks.
- Number of data blocks is now configurable; `defrag()` can resize the structure.
- Config Manager
- Added support for XAudio2 2.7 on Windows.
- Major improvements to screen management:
- Runtime changes to VSync, resolution, mode, and GPU driver.
- Methods for switching between windowed, fullscreen, and fullscreen-window modes.
- Added toggle for window border visibility.
- Added logical-size handling supporting letterbox and overscan.
- Fixed known bugs #0016 and #0018.
- Codebase
- Static code analysis performed.
## π 2016-03-19 β v0.90 β GUI Improvements
- GUI
- Added `Panel::save()` to store a panel and all widgets.
- Added `GUI::load()` for loading saved panels.
- Default debug console enabled in debug builds.
- Rendering
- Direct3D11 backend now uses triple buffering.
- Documentation
- Updated using Doxygen 1.8.11 and fixed several issues.
## π 2016-02-29 β v0.898 β GUI Improvements
- Updated dependencies:
- SDL 2.0.4 (Dec 2015)
- libpng 1.6.20
- GUI
- Added a console object with commands `con`, `dw`, and `help`.
- Tool Interface
- Added `vStrToFile()` and `fileTovStr()` utilities.
- Rendering
- Added support for Direct3D11 (Windows 8+).
## π 2015-11-30 β v0.896 β General Improvements
- Unified error codes across modules.
- Fixed an issue when loading unsupported object versions across all modules.
## π 2015-10-31 β v0.895 β General Improvements
- SDK signed using MegaStorm Systems CA.
- All projects migrated to Visual Studio 2015 with unified settings.
- Updated dependencies:
- SDL 2.0.4 (Aug 2015)
- libpng 1.6.18
- SDL_net 2.0 (Jun 2015)
- SDL_mixer 2.0 (Aug 2015)
- MikMod 3.3.7 (Aug 2014)
- libvorbis 1.3.5
- AES (Sept 2015)
## π 2015-07-21 β v0.89 β GUI Improvements
- GUI Manager:
- Added autofocus support.
- Added fading effects for GUI objects.
- Panels can now be modal or modeless.
- GUI objects now support multiscreen configurations.
- Added DebugWindow widget.
## π 2015-06-29 β v0.888 β GUI Improvements
- GUI:
- Fixed a bug in the event filtering system when using mouse wheel.
- Improved TextBox widget: better scrolling and mouse click handling.
- Added ListBox widget.
- Font Manager:
- Added `getCharacterByPixel()` method.
## π 2015-05-31 β v0.886 β GUI Improvements
- GUI:
- Updated mouse click logic: only left-click triggers actions; right-click is reserved.
- Improved drag & drop behavior.
- Fixed minor issues in mouse click detection logic.
- Added HSlider and VSlider widgets.
- Image Manager:
- Fixed an issue when loading images with alpha transparency.
## π 2015-03-29 β v0.884 β GUI Improvements
- Updated dependencies:
- SDL 2.0.4 (Mar 2015)
- libpng 1.6.16
- GUI:
- Fixed a bug in the event filtering system.
## π 2014-09-27 β v0.883 β Android Support
- Updated dependency:
- SDL 2.0.4 (Sept 2014)
- Android support added:
- First working Android implementation (some tasks pending).
- GUI:
- Added TextBox and ProgressBar widgets.
## π 2014-08-31 β v0.88 β Linux Support
- Cross-Platform:
- Unified Makefiles and Visual Studio 2010 configuration settings.
- Ensured SDL 2.0.3 or newer is available.
- Linux 64-bit:
- Added complete Linux support.
- Makefile supports build / install / uninstall.
- Provided script to build all external libraries.
- Added validation tests.
- File handling now accepts both '/' and '\' separators.
- Fixed bug #0011.
## π 2014-08-22 β v0.87 β GUI Improvements
- GUI:
- Added Button and CheckBox widgets.
- Border width now renders correctly.
- State-associated functions are executed when present.
- Action events use C64_EVENT_WIDGET (data1 = ID, data2 = value).
- Keyboard shortcuts now activate widget actions.
- Improved deactivate-state behavior.
- Improved general event handling.
- Image backgrounds supported:
- normal (used for normal, hover, deactivate)
- pressed (used for pressed and action)
- Sprite backgrounds supported (most efficient method).
- Tool:
- Added `intToStrDec()` and `intToStrHex()` utilities.
## π 2014-07-31 β v0.85 β GUI Foundation
- GUI:
- Added GUI Manager.
- Added Panel object.
- Added Label and Image widgets.
- Image Manager:
- Added `load()` method for loading images from memory.
- Font Manager:
- Fixed issues in `render()` and `renderEx()`.
- Config Manager:
- Added `setClipRect()` and `getClipRect()`.
- Managers:
- Unified `status()` methods across modules.
- Updated internal signatures to 8-bit indices (24 bits reserved for objects).
## π 2014-07-07 β v0.81 β Audio Tuning & General Improvements
- Updated dependencies:
- libpng 1.6.12
- MikMod 3.3.6 (replacing libmodplug)
- SDL_mixer 2.0 (Jun 2014)
- SDL 2.0.4 (Jul 2014)
- Image Manager:
- Fixed bugs #0000 and #0001.
- Audio Manager:
- Fixed bugs #0006, #0007, #0008.
- Updated `info()` methods.
- Improved audio type detection for load/save.
- Added sound effects: panning, position, distance.
- Known bug #0009: WAV/OGG playback at 48 kHz produces glitches as music (OK as sound).
- Config Manager:
- Added `audioMixingChannels()` for controlling number of mixing channels.
- Added `audioHook()` callback.
## π 2014-06-30 β v0.80 β Audio Module
- Updated dependencies:
- SDL_mixer 2.0 (Jun 2014)
- Audio Manager
- Implemented core audio system: Sound, Music, and validation tests
- Known bug #0006: OGG playback not supported at 48 kHz
- Known bug #0007: Module playback not supported at 32 bits
- Known bug #0008: libmodplug does not function in DLL mode
- Config Manager
- Added basic audio support
- info() now displays audio and system information
- Tool Interface
- Added new file/directory utilities
- Added strCompare(), strToLowerCase(), and strToUpperCase()
- Managers
- Normalized create() methods across all managers
## π 2014-05-29 β v0.76 β Network Tuning
- NetTCP Interface
- Fixed known bug #0004
- Fixed known bug #0005
- Improved security with xxHash + sequencer
- Added documentation and diagrams
- Tool Interface
- Added xxHash functions
## π 2014-05-15 β v0.75 β Network Module
- Updated dependencies:
- SDL_net 2.0 (Feb 2014)
- NetTCP Interface
- Robust and stable server architecture (supports up to 8 clients)
- High-performance client architecture
- Based on CRM32Pro INetwork but significantly improved
- Validation tests including torture tests
- Tool Interface
- Replaced Mersenne Twister with MWC and WELL512 RNGs
- Added XOR() method
- Runtime
- Added runtime struct-size checks in debug and release modes
- Memory
- Uses void* for memory buffers
## π 2014-04-30 β v0.70 β Sprite Module
- Sprite Manager
- First fully working prototype
- Added validation tests
- Font Manager
- Position-setting logic moved to dedicated method (consistent with Tile and Sprite)
- Known bug #0002: disabling colorkey on stand-alone fonts renders garbage
## π 2014-03-29 β v0.65 β GFX Module & General Improvements
- Image Manager
- render() and renderEx() can now render to screen or to another image
- Added findTex() for rendering into textures
- Added applyFilter() with effects: noise, blur, negative, grayscale, black & white, wiggle, pixelate
- Added rebuild() for regenerating textures
- Defines replaced by enums (GDK coding standard v1.2)
- Config Manager
- Added getSnapshot() for saving PNG screenshots
- Added fadeToColor() and fadeToImage()
- GFX Interface
- First working prototype
- Includes validation tests
- Uses ImageManager::findTex() for texture rendering
## π 2014-03-20 β v0.60 β Tile & Font Modules
- Updated dependencies:
- SDL 2.0.2
- libpng 1.6.9
- AES (Feb 2014)
- Image Manager
- Added documentation diagrams
- Improved documentation
- Known bug #0000: SDL bug #2424; RLE disabled
- Known bug #0001: Direct3D target textures not working
- Tile Manager
- First working prototype
- Added documentation diagrams
- Added validation tests
- Font Manager
- First working prototype
- Added documentation diagrams
- Added validation tests
- Config Manager
- Added render callback system
- Main Interface
- Added preliminary keyboard input handling
- update() implements fixed virtual logic frame rate with interpolation
- Added basic and advanced rendering methods
## π 2014-02-22 β v0.55 β Image & Cursor Modules
- Updated dependencies:
- SDL 2.0.2 (build 8147)
- Image Manager
- Redesigned for better functionality
- Added validation tests
- Cursor Manager
- Fully adapted to new Image Manager
- Codebase
- Integrated _C64RET() macro across all modules
- Documentation
- Added global GDK architecture diagram
- Added Main Interface diagram
## π 2014-01-31 β v0.54 β Class Hierarchy Improvements
- Updated dependencies:
- SDL 2.0.1 (build 8054)
- Architecture
- Reworked entire class hierarchy
- API rewritten to follow new structure
- Clear distinction between Interface modules and Manager/Object modules
- Internal replacement of map with unordered_map in all modules
- Documentation
- General documentation improvements
## π 2013-09-15 β v0.53 β Image & Cursor Modules
- Image Manager
- Completed module (texture management pending)
- Cursor Manager
- Completed module
- Resource Handling
- Image and Cursor managers reuse already-opened resources
## π 2013-08-31 β v0.50 β Image & Cursor Modules (Development Stage)
- Updated dependencies:
- SDL 2.0 (build 7635)
- libpng 1.5.17
- Image Manager
- Module in active development
- Cursor Manager
- Module in active development
- Managers
- Improved info() reporting
- Shutdown warns if resources remain open
- Config Manager
- Allows creating multiple screens with the same name
- Rewritten internal structure to use map
- XML Manager
- Can open the same file multiple times
- Log Manager
- Only one Logger per unique name
- Archive Manager
- Reuses resources if the same file is loaded again
- Codebase
- Applied GDK coding standard v1.2
## π 2013-08-03 β v0.41 β 64-bit Support
- Architecture
- GDK now built in 64-bit mode by default
- External libraries ported to both 32-bit and 64-bit
- All modules tested under both architectures
- Stability
- Fixed multiple DLL-related issues across modules
## π 2013-07-31 β v0.40 β Archive, Tool & XML Modules
- Updated dependencies:
- zlib 1.2.8
- TinyXML 2.6.2
- Archive Module
- Implemented using new CDC file format
- Tool Module
- Added true RNG
- Added CRC32 functions
- Added filesystem utilities (exists, extension checks, etc.)
- Added rounding utilities
- Added string-zero functions
- XML Module
- Fully implemented XML Manager
- Validation
- Added first validation tests
- Codebase
- Improved main library header
## π 2013-04-30 β v0.30 β Config Module
- Config Manager
- Fully implemented
- Documentation
- All modules documented and tested
- All known bugs fixed
## π 2013-04-19 β v0.20 β Timer Module
- Timer Module
- Completed module
- Added fixed-time and variable-time support
- Codebase
- Created and applied first GDK coding standard
## π 2013-04-11 β v0.10 β API Definition
- Architecture
- Designed main API components
- Logging
- Initial LogSystem module implemented
## π 2013-04-01 β v0.01 β First Prototype
- Updated dependencies:
- SDL 2.0
- First prototype of CRM64Pro GDK