Add editor support for exporting Cyclopedia and CipSoft protobuf assets from the currently loaded map.
Main changes:
- Add File > Client Assets actions for Static House Data export, Cyclopedia minimap and satellite export, and restoring timestamped client asset backups.
- Keep generic minimap and tileset exports under File > Export.
- Export staticdata, staticmapdata, and mapdata protobuf files with content-hashed filenames.
- Update catalog-content.json so generated assets are picked up by the client.
- Merge compatible CipSoft templates when they match the loaded map.
- Fall back to generated data for custom maps instead of failing the export.
- Support filtered house exports.
- Report warnings for missing or failed static map entries.
- Emit aligned MINIMAP and sprite-based SATELLITE assets for the documented scales, including the 1/16 layer.
- Keep Cyclopedia export progress in the status bar instead of using a blocking modal progress dialog.
Performance:
- Precompute floor and chunk plans for global map exports.
- Write BMP output directly.
- Reuse minimap renders for matching satellite assets.
- Parallelize asset hash and LZMA encoding through a bounded worker queue.
- Remove modal progress overhead from the export path.
- Revert the tile-grid satellite optimization after profiling showed it shifted cost without improving total export time.
Documentation:
- Document the export contract in docs/static-data.md.
- Add docs/cyclopedia-export-roadmap.md with deferred optimization candidates and follow-up notes.
Scope:
- Focus this change on the Cyclopedia/staticdata protobuf export path and the export-specific performance work needed for practical global map exports.
- Move unrelated runtime, performance, and UI experiments out of this branch.
Validation:
- Ran static inspection and git diff checks during the export changes.
- Reviewed Visual Studio CPU profiles after each global map export performance pass.
- Verified hash and LZMA work moved into bounded async workers.
- Verified the restore action is labeled as restore and grouped under File > Client Assets, not File > Export.
This adds the editor-side pipeline needed to generate client Cyclopedia assets from a loaded map while keeping the export flow recoverable, documented, and practical for large maps.
New Features:
- Per-sprite UV and blit options for precise partial/atlas-based sprite rendering, including improved editor sprite blits.
Graphics & Performance:
- Lazy atlas texture upload with atlas-managed lifecycle to reduce memory/GPU churn.
- Rate-limited automatic cleanup of unused textures.
Behavior Changes:
- More accurate texture mapping: sprites, outfits and indicators now render using per-sprite atlas coordinates.
New Features:
- Added a modern OpenGL renderer with batched 2D drawing, textured bitmap text, stippled lines, polygons and a baked font atlas.
Refactor:
- App-wide rendering switched to the new renderer.
- Map and lighting now draw via renderer primitives and sprite lookups use stable sprite IDs.
Bug Fixes:
- Improved texture allocation/invalidation/cleanup and sprite bounds safety.
- Restored/normalized keyboard shortcut behavior (Q/B remap, SHOW_NPCS → Shift+N, Linux shortcut dispatch).
Chores:
- Replaced legacy GLUT with a GL loader and integrated stb.
- Updated build configuration and project files.
## What was changed
Fixes an assertion failure in the `Animator` constructor caused by
`start_frame`
receiving the value `255` (uint32) from protobuf `default_start_phase`,
instead of
`-1` (int8) as expected.
## Why
The `.dat` loading path reads `start_frame` as `int8_t`, so the byte
`255` becomes
`-1`, which is a valid sentinel value for the `Animator`. However, the
protobuf
loading path stores `default_start_phase` as `uint32_t`,
preserving the value `255`, which fails the assertion
`ASSERT(start_frame >= -1 && start_frame < frame_count)`.
## Changes
- `source/items.h`: Changed `start_frame` type from `uint32_t` to
`int32_t`
- `source/items.cpp`: Added `static_cast<int8_t>` when reading
`default_start_phase` from protobuf
- `source/graphics.cpp`: Added `static_cast<int8_t>` in
`loadOutfitSpriteMetadata` and `static_cast<int>` in
`loadItemSpriteMetadata` when creating `Animator`
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Bug Fixes**
* Fixed animation frame value handling for items and sprite metadata to
ensure consistent initialization and proper animation playback
sequences.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
feat: migrate Remeres to 12.x assets system and modernized item handling
• Migrated old Remeres .dat/.spr system to new 12.x client /assets/ appearance & sprite format
• Removed OTB dependency and outdated client version structures
• Integrated Protobuf-based sprite reader (credit: @nekiro)
• Major refactor on graphics.cpp structure and brush icon handling
• Updated brushes and tags system
• Fixed top order drawing bugs and missing brushes icons
• Fixed outfit color paint and correct offset handling for non-32x32 sprites
• Re-enabled map saving and loading
• Improved creature sprite rendering and brush previews
• Added new item properties window with toggle for legacy/new layout
Co-authored-by: Marcos <66353315+marcosvf132@users.noreply.github.com>
Co-authored-by: Pedro Henrique Alves Cruz <phac@cin.ufpe.br>
* Show indicators for pickupable and moveable items
* Fix: drawing always refreshing ui
* Fix crash on invalid friend for wallbrush
* Option to remove empty spawns
* Draws position indicator, some code cleanup
* Teleport copy/paste improvements
* Fix flood fill
* Add function to get minimap/8bit color
* Small code cleanup
* Cleanup Position
* Code cleanup and small optimizations
* Code cleanup
* Code cleanup and small optimizations (#406)
* Cleanup and cast functions.
* Avoid adding a new Unique ID if it already exists
* Code cleanup and small optimizations
* More changes and cleanup
* Changes and cleanup
* Some changes
* Fix copy position.
* Only show uid/aid alert if it really changed
* Add actions history panel
* Does not draw tooltips on minimap mode
* Use constexpr
* Replace items fix (#408)
* Draw grid small optimization
* Small change in selection box and Fix#409
* Fix some xpm
* Ingame box improvements, add lights support.
* Fix go to previous position (#410)
* Fix depot crash (#411)
* Fix XPMs
* Export minimap as .otmm (otclient format) or .png (#413)
* Fix glitch after drawing secondary map
* fix
* Update about_window.cpp
* sonar
* fix Minimap and progress bar
* fix erro load items.xml
* fix
* fix doodad brush
* fix: slightly more accurate house size estimation
* feat: update items.otb and items.xml
* fix: bad merge
* Revert "feat: update items.otb and items.xml"
This reverts commit 40f1edc70f.
---------
Co-authored-by: Nailson <Mignari@users.noreply.github.com>
Co-authored-by: wtver <51377408+maattch@users.noreply.github.com>
Co-authored-by: Majesty <32709570+majestyotbr@users.noreply.github.com>
Co-authored-by: Luan Santos <github@luan.sh>
This only works with the canary server: https://github.com/opentibiabr/canary
Added support only for client .dat and .spr 11.00 outdated (10x), signature: data format="11" dat="0x4A10" spr="0x59E48E02"
Otb cllient 11, version 3, id 62
In addition to the ids being converted to client id (for compatibility with canary), the data folder has been completely reorganized for ease of understanding.
The organization of tilesets was also started, which will be further improved in other pulls.
Created the complete organization of npcs, that way, it is possible to create own files for npcs, no longer depending on being together with the monsters
this pull request was made to be worked together with the canary project: https://github.com/opentibiabr/canary
The spawns npcs is "yellow" and spawns monsters is "red" (the old)
With this change, the map will automatically create an "npc.xml" the first time it is saved.
It is possible to edit only the xml, it is not necessary to add or modify the npc by opening the editor map
Thus, there is a script for npcs, similar to how it works with old spawns
OTFI is an OTML file with information about the features enabled in the
dat/spr.
This commit removes the extended and transparency options in
preferences. Please use an otfi file along with the dat / spr to inform
the required features.
It's not necessary to regular files.
Rewrote RME Live to use boost asio instead of wxSocket, this seemed to
fix random stops when using the function, some other things were fixed
aswell when using this.
Added 10.10 & 10.21+ (I have not added the otbs and such yet.)
Bug fix and some small cleanups.
Removed libxml2 to use pugixml.
Fixed a bug with the progress bar.
Changed some things in most xml files that pugixml did not like.
Updated the Visual Studio project.
Any NULL symbol has been changed to nullptr.
This most probably broke the CMake that was recently added.
And probably some other things.