Bug Fixes:
- Prevented errors when creature or player positions are unavailable during looting.
- Improved handling of malformed loot and waste messages with safer fallback text.
- Prevented loot processing when message data is incomplete.
Improvements:
- Money exchange now recognizes additional Magic Gold Converter items.
- Supports numeric or structured money item entries.
- Uses the appropriate converter when available and handles multi-use currency items correctly.
- Retains direct money-item exchange when no converter is found.
Bug Fixes
- Improved mini-window placement when moving widgets between containers.
- Prevented widgets from remaining attached to an outdated parent during scheduled insertion.
- Preserved reliable insertion as target positions become available.
Bug Fixes:
- Improved input-method initialization on X11 by retrying with a fallback backend when the initial connection fails.
- Preserved clear error handling if both connection attempts are unsuccessful.
New Features:
- Added notifications for bounty tasks, weekly tasks, and spell unlocks.
- Added support for displaying these new event types in the game client.
Bug Fixes:
- Unknown event types are now safely ignored and logged instead of interrupting event processing.
Bug Fixes:
- Improved tile rendering order for more consistent visual layering.
- Ground elements, creatures, items, and visual effects now appear in the correct sequence.
- Updated scenes should display overlapping objects more naturally, reducing visual inconsistencies during gameplay.
Bug Fixes:
- Improved map floor visibility updates when no tiles are available.
- Prevented invalid floor-range calculations during map refreshes.
- Ensured cached visible tiles are cleared consistently across all floors.
Document the repository AGENTS.md loading budget and keep detailed workflows outside the always-loaded instruction file.
Main changes:
- Add an AGENTS.md Loading Budget section.
- Keep the root AGENTS.md focused on repository-wide invariants and precise routing gates.
- Direct detailed workflows to versioned documentation or reusable skills instead of expanding the root instruction file.
- Document that Codex applies a combined instruction budget across global, root, and nested guidance.
- Record the default 32 KiB instruction limit and recommend preserving headroom for narrower scoped instructions.
- Keep mandatory gates near the beginning of the instruction chain.
- Recommend removing duplicated guidance and routing conditional details before increasing project_doc_max_bytes.
- Preserve the existing client-assets routing contract and documentation reference unchanged.
Validation:
- Audited the effective global and repository instruction chain at 11,106 bytes.
- Verified the instruction chain remains below the 24 KiB maintenance target and default Codex limit.
- Verified the existing client-assets documentation route remains valid.
- Reviewed the complete committed diff.
- Ran Git whitespace validation successfully.
- No build was run because this is a documentation-only change.
This keeps repository instructions concise and scalable while preserving room for nested guidance and avoiding unnecessary duplication in the always-loaded AGENTS.md.
ci(vcpkg): keep baseline updates synchronized and auto-mergeable
Improve the vcpkg baseline updater so automated dependency PRs stay synchronized with main and can be queued for native GitHub auto-merge.
Main changes:
- Fetch full repository history before updating the baseline branch.
- Synchronize the updater branch with the latest origin/main before applying baseline changes.
- Rebase existing updater branches onto main.
- Create missing updater branches directly from origin/main.
- Use force-with-lease when refreshing bot-managed branches.
- Restrict existing PR lookup to open baseline PRs targeting main.
- Queue both existing and newly created baseline PRs for native GitHub squash auto-merge.
- Set a consistent squash commit subject and body for automated baseline merges.
- Validate PR numbers before attempting to enable auto-merge.
- Warn and leave the PR open when auto-merge cannot be queued.
- Continue triggering CI when the requested baseline is already present.
- Update CI path filters so changes to update_vcpkg_baseline.yml trigger Windows, macOS, Android, Docker, and browser validation.
Safety:
- The updater does not approve reviews.
- The updater does not bypass branch protection.
- Auto-merge remains subject to required reviews and status checks.
- Branch rewrites use force-with-lease instead of an unconditional force push.
Validation:
- actionlint passed.
- YAML parsing passed.
- Extracted updater shell script passed bash -n.
- git diff --check passed.
This makes automated vcpkg baseline maintenance more reliable by preventing stale update branches and allowing GitHub to complete the merge once all repository requirements are satisfied.
fix(cache): canonicalize vcpkg manifest line endings
Normalize manifest line endings when generating shared build-cache fingerprints so equivalent vcpkg configurations use the same dependency pool regardless of Git checkout settings.
Root cause:
- Equivalent Git content can be checked out using CRLF or LF depending on core.autocrlf and local Git configuration.
- The previous shared-cache resolver hashed raw manifest bytes.
- Two otherwise equivalent worktrees could therefore resolve to different dependency fingerprints and separate vcpkg pools.
Main changes:
- Normalize CRLF and LF when fingerprinting vcpkg.json.
- Normalize CRLF and LF when fingerprinting vcpkg-configuration.json.
- Keep registry, overlay, port, patch, and arbitrary payload trees byte-signatured because their contents may be line-ending-sensitive.
- Advance the shared-cache contract from schema v3 to schema v4.
- Retain recognition of schemas v1 through v3 for auditing and transient cleanup.
- Require an exact full-fingerprint metadata match before cleaning fingerprint-specific transient data.
- Keep shortened cache directory names backed by full SHA-256 identity metadata.
- Update shared-cache setup and cleanup tooling for the v4 layout.
- Update documentation with v4 fingerprinting behavior, migration rules, cleanup procedures, and cache paths.
Windows build updates:
- Move Windows CI to the Visual Studio 2026 hosted runner.
- Verify that Visual Studio 2026 provides the native C++ v145 toolset.
- Configure MSBuild discovery specifically for the Visual Studio 18.x prerelease range.
- Remove the previous Chocolatey-based Visual Studio toolset installation path.
Validation:
- Reproduced the Release x64 dependency contract in two worktrees with different manifest line endings.
- Verified both worktrees now resolve to the same schema v4 dependency fingerprint.
- Ran SharedBuildCache.cmake in CMake script mode.
- Verified the windows-release preset listing.
- Ran PowerShell parser checks.
- Ran JSON parsing checks.
- Ran documentation portability checks.
- Ran git diff --check.
This keeps shared vcpkg cache identity stable across CRLF and LF checkouts while preserving byte-sensitive hashing for dependency content where physical file representation can affect behavior.
Add shared vcpkg dependency cache for CMake and Visual Studio builds
This commit adds a content addressed vcpkg dependency cache that can be reused across compatible Git worktrees independent forks CMake presets and Visual Studio Solution builds.
The goal is to reduce repeated dependency installation and rebuild time while keeping build outputs isolated per worktree. The cache only shares dependency artifacts that are proven compatible through a complete dependency contract. Project build outputs such as object files PCH files PDB files generated sources intermediate files and executables remain local to each checkout.
The shared cache is opt in. When the cache is not configured or when the resolver cannot prove that reuse is safe both CMake and Visual Studio fall back to local worktree specific vcpkg roots.
Main behavior added
• Shares vcpkg downloads globally
• Shares vcpkg binary packages globally
• Shares expanded vcpkg installed trees only when the dependency fingerprint matches
• Shares vcpkg buildtrees and packages only when the dependency fingerprint matches
• Keeps CMake build trees local to each worktree
• Keeps Visual Studio output directories local to each worktree
• Keeps generated files intermediate files executables PCH files PDB files and object files local
• Allows compatible Git worktrees to reuse dependency artifacts
• Allows compatible forks to reuse dependency artifacts
• Allows compatible CMake presets and Visual Studio configurations to converge on the same dependency cache
• Falls back to local vcpkg storage when shared cache safety cannot be verified
CMake integration
The new CMake shared cache module runs before project initialization and resolves the vcpkg dependency contract before the normal configure flow continues.
The resolver validates the manifest registries overlays triplets features vcpkg revision compiler toolset SDK and cache implementation before selecting fingerprinted dependency roots. This prevents incompatible configurations from sharing the same expanded dependency tree.
If the CMake version is too old for the shared cache module and shared cache variables are present the build warns and continues with build local vcpkg storage instead.
CMake preset changes
• Removes hardcoded VCPKG_INSTALLED_DIR values from presets
• Lets the shared cache resolver select the installed root when safe
• Keeps local fallback behavior available
• Replaces the previous preset binary source override with clean packages and clean buildtrees options
• Prevents Visual Studio CMake presets from inheriting Ninja compiler overrides where they should not
• Keeps CMake build outputs under their configured build preset directories
Visual Studio integration
The Visual Studio bridge uses the same dependency resolver as CMake. It evaluates each Solution configuration through MSBuild, generates a machine local ignored SharedVcpkgCache props file and revalidates the complete contract before vcpkg manifest installation.
Different Visual Studio configurations receive separate consumer fingerprints. They can still share an expanded dependency tree when their dependency inputs are identical, but their consumer contracts remain separate so MSBuild specific details cannot corrupt CMake or another Solution configuration.
The Visual Studio project now imports vcpkg props more reliably, supports the generated shared cache props, and validates the generated contract through SharedVcpkgCache targets before dependency installation and build preparation.
Visual Studio changes included
• Adds SharedVcpkgCache targets
• Adds generated SharedVcpkgCache props support
• Adds vcpkg bootstrap property resolution from VCPKG ROOT
• Keeps local fallback when the shared Solution cache is inactive
• Validates manifest root target triplet host triplet configuration toolset SDK and install options before using the shared cache
• Pins the Visual Studio instance used by vcpkg for the shared Solution contract
• Requires the dependency CMake tool used by the generated contract
• Revalidates the generated contract before vcpkg manifest install
• Uses fingerprinted installed buildtrees and packages roots for compatible Solution builds
• Keeps Solution outputs local
Shared cache safety boundaries
The shared cache is intentionally conservative. It only activates when the environment and contract can be fully validated.
Safety rules enforced
• The shared pool must be on a verified local fixed filesystem
• The shared pool must live outside every registered checkout
• UNC paths are rejected for the shared cache root
• Reparse points and symlink escapes are rejected in sensitive paths
• Mutable dependency roots are isolated by full contract fingerprint
• vcpkg and shared cache operation locks protect mutable cache operations
• Existing authenticated VCPKG BINARY SOURCES values are preserved
• Existing authenticated binary source values are never printed
• Existing authenticated binary source values are never persisted by the helper
• Cleanup fails closed when validation is incomplete
• Cleanup refuses to run while build related processes are active
• Cleanup validates repositories configure trees generated contracts paths identities and locks before removing transient data
• CI containers runtime data deployment paths and release behavior remain unchanged unless shared cache is explicitly enabled
PowerShell tooling
This commit adds setup audit cleanup repository registration and Solution contract generation tools.
The main shared cache setup script configures the cache root registers the current Git repository family manages relevant user environment variables configures vcpkg downloads and binary cache locations updates managed sccache base directories and can invoke the Solution bridge when applicable.
The Solution cache script evaluates MSBuild properties resolves the shared dependency contract through the CMake resolver writes the generated props file and supports audit only and validate only modes.
Both PowerShell tools require PowerShell 7 2 and run under strict mode.
Tooling added
• tools configure shared build cache ps1
• tools configure shared solution cache ps1
• setup mode for shared cache configuration
• audit only mode for validating existing shared cache state
• guarded transient vcpkg cleanup
• guarded fingerprint specific transient cleanup
• repository registration and unregister support
• generated Solution props creation
• generated Solution props validation
• generated Solution props audit
• MSBuild property based contract evaluation
• local fixed filesystem validation
• active build process protection before cleanup
Protobuf and Solution build fixes
This branch also includes follow up fixes around protobuf generation and Solution build behavior.
Protobuf and Solution changes
• Fixes Solution protobuf generation by using one normalized absolute proto root
• Uses the host triplet protoc path for protobuf generation
• Adds incremental inputs and outputs to the ProtoCompile target
• Excludes generated protobuf compile items when protobuf support is disabled
• Keeps protobuf generated source handling tied to RunProtoCompile
• Lets both CMake and Solution builds honor configured global vcpkg binary sources
• Avoids leaking Ninja compiler overrides into Visual Studio CMake presets
Documentation and repository updates
• Adds shared build cache documentation
• Documents setup and migration flow
• Documents CMake and Visual Studio integration
• Documents cache contract rules
• Documents concurrency and locking behavior
• Documents fallback behavior
• Documents recovery and cleanup procedures
• Documents cross fork compatibility rules
• Updates README with shared cache guidance
• Updates gitignore for generated local shared cache files
• Updates CI path filters so vcpkg configuration overlay and cache related changes trigger the correct workflows
Validation performed
• PowerShell parser validation for both cache tools
• PowerShell 5 1 prerequisite failure verified
• CMake preset validation
• JSON validation
• Visual Studio project XML validation
• Evaluated MSBuild property and item checks
• Checked protobuf enabled mode
• Checked protobuf disabled mode
• Local shared cache Solution build validation
• GitHub Actions Windows CMake matrix
• GitHub Actions Windows Solution matrix
Overall this commit adds a safe content addressed shared dependency cache for OTClient builds. It lets compatible CMake and Visual Studio configurations reuse expensive vcpkg dependency artifacts while keeping all build outputs local and falling back to worktree local storage whenever the shared contract cannot be fully validated.
New Features:
- Added a Magical Archives spell browser with search and vocation filtering.
- Added alphabetical spell sorting and support for promoted vocations.
- Added detailed spell information, including icon, name, formula, vocation, group, and cooldown.
- Added localized labels and improved spell list and detail presentation.
Bug Fixes:
- Improved experience and level progress accuracy when handling level-change updates.
- Prevented analyser updates when no local player is available.
- Normalized level percentages for newer protocols, ensuring progress bars and tooltips display correct values.
Bug Fixes:
- Corrected fragment resource tracking to use the proper resource identifiers.
- Improved accuracy when checking lesser and greater fragment balances in the game wheel and workshop.
Bug Fixes:
- Improved diagonal pathfinding accuracy by applying the configured diagonal movement speed when calculating routes.
- Ensured path costs consistently reflect player movement settings.
New Features:
- Added a visual OTUI editor for previewing and editing .otui files, including live preview, widget selection, and editing of properties, anchors, geometry and states.
- Supports adding/removing widgets and properties, creating new screens, and saving back with safety checks and backups.
- Included file/style/anchor pickers and a style gallery with live samples.
- Added an OTML parser/writer to preserve and apply line-accurate edits.
Documentation:
- Added comprehensive editor documentation, workflows and operational notes.
New Features:
• Added support for a new game protocol mode that allows tactics
settings to function without transmitting fight mode.
• Updated compatibility handling for supported client versions.
Bug Fixes:
• Improved reading and sending of chase, safe-fight, and PvP mode
settings when the new protocol mode is enabled.
Bug Fixes:
- Improved handling of monk virtue data so multiple virtues are read and processed correctly.
- Prevented incorrect parsing of game messages containing multiple virtue entries.
Bug Fixes:
- Improved the positioning of creature information during rendering, including diagonal movement and elevated areas.
- Ensured creature details align correctly with the creature’s visual elevation.
Performance:
- Reduced unnecessary foreground redraws when attached widgets have not changed.
- Improved rendering efficiency during map and interface updates.
Bug Fixes:
- Improved coordination between map rendering and foreground interface elements.
- Adjusted rendering behavior while the game is offline to prevent unnecessary draw and preload activity.
- Improved handling of foreground UI rendering during map display.
Bug Fixes:
- Improved rendering of diagonally moving creatures (NE/SW) with corrected draw order and smoother transitions.
- Updated walking-creature rendering so diagonal walkers aren’t double-drawn and tile/object layering remains consistent, including for the local player.
- Reworked floor rendering for walking tiles to batch/flush them at map edges and when appropriate upper-right tiles have no walking creatures.
- Preserved per-tile transparency behavior while rendering queued walking tiles.
Bug Fixes:
- Fixed trade selection after the list is re-sorted or refreshed, ensuring the correct item is selected.
- Selling now defaults to the full available stack instead of a single item.
- Automatically clears selections for items that are no longer available to sell.
- Updated the amount control to reflect the selected selling quantity.
New Features:
- Added temporary chat mode while walking or using WASD controls.
- Chat now indicates when it will automatically turn off after sending a message.
- Pressing Enter can send the message and immediately return to movement controls.
Bug Fixes:
- Temporary chat indicators are cleared when chat is manually disabled or exited.
Bug Fixes:
- Improved creature information rendering across map tiles, including scaled display modes.
- Ensured creature names, health, mana, and harmony indicators render according to map display settings.
- Improved lighting and elevation handling for creature visuals.
- Prevented map rendering conflicts while creature information is being displayed.
Bug Fixes:
- Fixed an issue where peeking for more than 255 bytes could return an incorrectly sized result.
- Peek operations now correctly clamp requested sizes to the amount of data actually available, ensuring returned buffers match the available data and avoiding edge-case miscalculations.
Bug Fixes:
- Improved release archive selection by scoring candidate assets against the client version for more accurate matches.
- Added macOS-archive-path detection to exclude incompatible .app.zip/macos-variant archives from selection.
- Refined the no-match behavior so the system cleanly falls back to the standard zip download when no best archive is available.
Bug Fixes:
- Improved NPC trading quantity calculations for items with active imbuements.
- Prevented equipped imbuement items from being counted twice when determining sellable quantities.
- Ensured sellable item quantities never display as negative.
- Improved tracking cleanup when closing NPC trade windows.
New Features:
- Added the ability to pause and resume statistics collection.
- While paused, new statistics are no longer recorded; previously gathered statistics remain intact.
- Lua scripts can now control statistics collection using new pause and resume commands.
Bug Fixes:
- Improved rendering sequencing so preload work runs before any foreground interface draw tasks, reducing timing-related inconsistencies.
- Refined foreground UI rendering logic: it now renders immediately only when appropriate for offline play, and otherwise enqueues foreground UI updates when map rendering is available—removing the prior fallback that could render at the wrong time.
Bug Fixes:
- Improved animation timing for creatures with attached animators.
- Ensured animator-driven phases are used when available, while preserving existing behavior for other creatures.
Style:
- Updated the NPC trade and chat window layout for improved positioning.
- Adjusted console sizing and spacing for a more balanced appearance.
- Centered the trade window and refined chat mode toggle placement.
Bug Fixes:
- Improved compatibility when using inventory items on older client versions, reducing silent failures.
- The game now correctly identifies the matching inventory item and uses accurate slot/stack information for the action.
- If the item isn’t found in the player’s inventory, the game will check nearby containers and proceed when available.
New Features:
- Added a new target danger readout, making the current danger value available during gameplay.
- Danger information now tracks consistently with each macro cycle, improving real-time visibility into risk level.
Bug Fixes:
- Fixed client message parsing when encountering unknown or unsupported opcodes, so the client correctly stops at the end of the current message instead of continuing to read.
- Prevented cases where malformed/unknown data could cause the client to loop indefinitely and degrade performance or memory usage.
Bug Fixes:
- Updated the browser/WebAssembly build to use a fixed heap size instead of growable memory.
- Improves compatibility with newer Chrome versions and helps prevent WebGL upload failures and related runtime issues.
Bug Fixes:
- Adjusted tile interaction behavior so certain items on a tile can now be selected more consistently.
- Improved the fallback selection logic to better recognize eligible multi-use objects, including some items that were previously skipped.
Bug Fixes:
- Improved stability and consistency in wheel, gem, workshop, and action selection flows.
- Fixed UI behavior so graph-related controls are now available in all supported builds.
- Updated glow rendering to work reliably across more graphics environments.
Bug Fixes:
- Improved daily reward collection behavior so shrine rewards are handled correctly.
- Shrine-based rewards now collect immediately for free and return users to the reward wall UI.
- Non-shrine reward confirmations now send the proper reward flag, preventing incorrect reward requests.
Bug Fixes:
- Mouse movement input now reports the correct movement delta when the cursor moves, improving responsiveness and accuracy for pointer-based interactions.