Latest Updates

Stay informed about the latest news and changes in Primal Conquer.

🔄

chore: update warden dlls for dev

•By Moh
changelog @ dawn
🔄

feat: add garmentunlock gm command

•By Moh
changelog @ dawn

- /garmentunlock drops a garment straight into CoatWardrobe

- Mirrors /wingunlock for the 3300/3305 wardrobe path, no inventory round-trip

- Resolves item by ID first, falls back to name lookup filtered to garment slot

- Enforces wardrobe capacity and per-typeId dedup (matches HandleStore)

- FullSync via CoatWardrobe.SendContents so the item appears without relog

🔄

chore: remove test title flag from pm char

•By Moh
changelog @ dawn
🔄

docs: document arena qualifier (2205-2211) and verified packet layouts

•By Moh
changelog @ dawn

- Add reverse_engineered.md section 57 with vtable map, Process/Create addresses (0x8C0743/0x8C0AAB/0x8C0B85/0x8C0D04/0x8C0ED0/0x8C0FB6/0x876C96), full field layout for all 7 packets, ActionType+ActionInfo tables, match lifecycle protocol trace, and UI message ID catalogue (0xC13/0xC19/0xC1A/0xC1D/0xC1F/0xC20/0xC26/0xBE7)

- Update ALL_PACKET_STRUCTURES_6609.txt with named fields for 2205/2206/2207/2208/2209/2210/2211 (previously marked as anonymous uint32 slots)

- Add migration table rows #49-55 for arena packets (DONE)

- Add Arena Qualifier row to systems.md under PvP subsystems

🔄

docs: document cmsgflower (1150) and refresh nobility board path

•By Moh
changelog @ dawn

- reverse_engineered.md: new section 56 covering CMsgFlower::Process @ 0x92D075, sub_8A11EB counter layout, buff 46/104 aura attach, gender-aliased 4-slot model, item ID ranges, and the FrostEmu implementation map

- Index entries added for sections 55 (CMsgPeerage) and 56 (CMsgFlower)

- Fix NobilityBoard path in section 55.8 after the Core -> Structures move

- PACKET_MIGRATION_6609.md: MsgFlower row marked DONE

- ALL_PACKET_STRUCTURES_6609.txt: fill in CMsgFlower field names for both the inbound send layout (0/1) and the server-sync layout (2/3) with interleaved today/lifetime counters

🔄

chore: batch discord webhook posts under size/count limits

•By Moh
changelog @ dawn

- Group embeds greedily up to 10 per request or ~5500 chars total

- Flush earlier when next embed would overflow either limit

- Keeps tiny chore commits in one POST while long feat bodies get their own

🔄

docs: document nobility system architecture and packet layout

•By Moh
changelog @ dawn

- reverse_engineered.md gains section 55 with the CMsgPeerage function table, per-action layouts, entry format, MoneyType values, rank table, and the FrostEmu file map

- ALL_PACKET_STRUCTURES_6609.txt replaces the sparse 2064 stub with a full spec: all reversed entry points, per-action offsets, list entry stride, QueryRemainingSilver slot layout, rank values

- systems.md rewrites the Nobility bullet to point at NobilityBoard, the Interlocked donation shadow, the Volatile snapshot, and the WorldTask-driven Tick cadence

- database.md notes the new DBNobility column shape in the repository table

- tasks.md adds NobilityBoard.Tick to the WorldTask row so the sort pass appears in the canonical periodic-task inventory

- TODO.md checks off Nobility under the Systems list

🔄

docs: add warden_server build and deploy procedure to ciphers doc

•By Moh
changelog @ dawn

- New 'Building libwarden_server from source' section covering layout, fresh-clone submodule init, Linux build steps, Windows preset, deploy refresh script, and a when-new-source-drops playbook

- Gotchas section documents the CPU instruction mismatch trap, Ubuntu non-PIC static archive, CMake not stripping Release debug info, and the --recursive submodule init footgun

🔄

chore: vendor libsodium via in-tree submodule for cross-platform builds

•By Moh
changelog @ dawn

- Add warden_server/external/libsodium as a git submodule pointing at the CMake wrapper repo (pulls libsodium source as its own nested submodule)

- Rewrite warden_server/cmake/sodium.cmake to add_subdirectory the wrapper instead of depending on a system install or the retired neighbour submodule

- Builds libsodium in-tree alongside warden_server on every platform; no apt/vcpkg setup required on dev machines

🔄

feat: warden_server src

•By Moh
changelog @ dawn
🔄

feat: new Warden bindings

•By Moh
changelog @ dawn
🔄

docs: record DataPacket ownership model and lifecycle changes

•By Moh
changelog @ dawn

- networking.md: add PacketFraming ctor overload, Ownership rules (5 rules), Outbound construction convention; rewrite Send (World) for the serialize-at-enqueue model; rewrite Receive (World) for the framing-mode branch split; drop stale IN PROGRESS / KNOWN LIMITATION warnings

- in_progress.md: mark DataPacket framing design STABILIZED with the ownership-rules summary; mark span API rollout DONE

- packets.md: add Outbound construction convention pointing at the outbound ctor + WriteBytes(proto, 4) pattern and flag the hand-rolled byte[] + inbound ctor anti-pattern

- tasks.md: update QueuedPacket shape (Owner, Wire, PacketId, PayloadLength) and describe the SendWire broadcast fast path

- entities.md: note Entity.Interaction is now an InteractionState POCO

🔄

chore: remove warden_srv submodule

•By Moh
changelog @ dawn

- Deleted the warden_srv submodule from .gitmodules

- Clean up the repository, removing unnecessary dependencies and old un-used code

🔄

refactor: merge logon server into world process

•By Moh
changelog @ dawn

- Convert FrostEmu.Logon from Exe to library; drop Main, icon, and standalone console loop

- Expose Start/ReloadConfig/Restart entry points on FrostEmu.Logon.Program for in-process hosting

- Add Stop() on LogonServer for graceful socket shutdown via Restart

- Add ProjectReference from FrostEmu.World to FrostEmu.Logon and wire LogonServer into Program.Main after config/DB init

- Add LogonServer property on World.Program alongside Server

- Add /logon restart and /logon reloadconfig console commands for managing the Logon listener from the World console

🔄

fix: set RoleType again

•By Moh
changelog @ dawn
1/121