Latest Updates
Stay informed about the latest news and changes in Primal Conquer.
Primal Launcher Release 1.0.1
Primal Launcher Release 1.0.0
docs: add whole-codebase modernization plan (14 phases + DI + event bus)
- MODERNIZATION_PLAN: master doc (Parts A-F) — stratified-legacy map, target
modular-monolith, 6 design principles, Managers/partial folder convention,
the 4 proven in-repo templates, 14-phase roadmap, feedback/sacred-cows
- MODERNIZATION_BUS: spec for a source-generated, sync, zero-alloc domain-
event bus (struct messages, [DomainEventHandler] + [Order], Roslyn
generator emitting PublishCore dispatch; full event catalog; async
side-effects via background channels; when-NOT-to-bus discipline)
- MODERNIZATION_FILE_MAP: strict per-file responsibility map for all 1,240
files (becomes / DI lifetime / bus role / owning phase)
- MODERNIZATION_SAFETY: production rollout protocol — baseline stabilization,
dual-crypto-mode test gate (UseTQCrypto drives 18 branch sites), deploy
gate via update-primal-dev, per-phase rollback, no-behavior-change invariant
- PHASE_0..14: per-phase detail (generic host + MS.DI scaffolding, dead-code
purge, clock unification, Pipelines network, MySqlConnector async DB,
AssemblyLoadContext scripts, Kernel split into 5 DI services, WorldClient
partials, ReceiveDamage via the bus, Vision spatial index, combat/inventory/
social/scripting vertical slices, nullable+polish)
feat: add /stars GM command to test perfection/legendary glow
- Sets the equipped weapon's Stars field (MsgItemInfo offset 72 = CItem+0x1E4,
the client StoredQualityValue / perfection tier) and re-sends item-info
- Client renders the glow client-side: >=9 Sacred, >=27 Legendary, plus the
Star->King tier plate; no client patch or asset needed
- Transient test only (not persisted) to confirm the legendary-glow mechanism
feat: add Fire of Hell legendary hidden attribute (Effect 205)
- Add ItemEffect.FireOfHell = 205 plus Equipment.HasEquippedEffect, a
deterministic all-slots check (this passive attribute can sit on any item,
unlike the weapon-only chance-based GetItemEffect)
- Gate Fire of Hell's wide monster-only AoE behind an equipped 205 item:
radius reads from magictype 10205 (in-memory Kernel.Spells), falls back to
12, and non-legendary casts fall through to the normal spell.Range path
- Finish the Shield/Stigma split: the Shield reborn case now casts 10203
(MagicShield) in both MeleeHandler and MagicHandler instead of the Stigma
spell 10204, so the two effects no longer collide
refactor: drop Stigma-to-Shield reborn-effect workaround
- Remove the Stigma->Shield Effect swap and the +1 spell bump in both
EquipItem paths so Shield(203) injects spell 10203 and Stigma(204) injects
spell 10204 cleanly, instead of being conflated onto 10204
- Remove the matching 10203->10204 bump in GetItemEffect's spell lookup
- The client tooltip now maps each effect value to its own hidden-attribute
string, so 204 no longer needs to masquerade as 203 to render a line
fix: default seasonal master gates to false so they don't auto-start on boot
- Halloween/Xmas/ThanksGiving/Valentine/Anniversary/Easter Enabled flags were true,
and seasonals are flag-gated ONLY (no date schedule), so ProcessWorldWide started
all six WorldWide instances immediately on every boot — regressing the legacy
dormant-by-default behaviour where a GM had to /createpve
- Flip all six to false; seasonals now stay dormant until a GM runs /createpve
(ForceStartScheduled ignores the gate) or sets the flag true at runtime
- The scheduled wars (GWEnabled/CWEnabled/CPKEnabled) stay true: they have a weekly
schedule window too, so a true flag is harmlessly inert until the window opens —
the two-layer (flag AND window) gating the comment now documents
- Updated the comment to record the flag-only-vs-flag-and-window distinction
docs: refresh event_framework.md for the north-star refactor
- Status banner: Phases 0-5 done, Phase 6 N/A (Arena aligned-by-design)
- Phase 5 section: seasonals + all 4 wars moved fully out of World (Map.ActiveEvent dispatch, Seasonal/War seams, state on Tag)
- Roadmap table updated
refactor: route Item non-droppable check through Seasonal
- Valentine.Items.Contains -> Seasonal.Config("valentine")?.Items for the non-droppable quest-item check
refactor: make EventEngine the sole driver of all events in WorldTask
- Remove the direct Anniversary/Easter/Xmas/Halloween/ThanksGiving OnTick calls (engine drives them via ProcessWorldWide)
- TournamentOfPower keeps its direct tick (left dormant, not an engine citizen)
refactor: route ArenaGuard through War
- ClassPKs.Active/StartDate -> War.ClassPkActive/War.ClassPkStartDate (reload-safe ClassPkState)
refactor: route City War TCCaptain through War
- CityWars.Active/Captain roster -> War.CityWarActive + War.CityWarHasClient(1505, CPUHash)
refactor: read GuildWar gate SOBs directly in MsgAction gate-walk
- Fetch LeftGate/RightGate SOBs by UID and read their Lookface/HP instead of the GuildWar static gate handles
- Keeps the anti-cheat gate-walk block working with no GuildWar class reference
feat: add reload-safe war state containers (PoleWarState/DisCityState/ClassPkState)
- PoleWarState: GuildWar/CityWar runtime state (Scores/Stats/Winner/gates/round flags/CityWar client roster) parked on EventInstance.Tag
- DisCityState: 4-stage raid state (sign-up/Pluto/stage counts/PlutoSlayer)
- ClassPkState + ClassPkArena: per-profession arena battle-royale state
- Declared in World (not a script) so the TYPE identity survives a ruleset hot-reload — live state isn't orphaned when the war script recompiles mid-siege