Latest Updates

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

🔄

docs: add trade dialog RE findings and remove-from-trade documentation

•By Moh
changelog @ dawn

- Add section 50 to reverse_engineered.md: CDlgTrade grid owner IDs, trade data

structure at hero+0x1920, CMsgTrade action dispatch table, MsgItemInfo action 7

partner-view remove mechanism, trade grid UID-vs-index gotcha

- Update Trade.md with removing items section covering packet flow and dual-packet

design (ReturnItem to owner, TradeRemove to partner)

🔄

feat: add JumpSpeed action for server-controlled jump animation speed

•By Moh
changelog @ dawn

- Introduced MsgAction 507 to allow server-side control of jump speed for entities.

- Updated reverse engineering documentation to include details on JumpSpeed handling and its integration with existing jump mechanics.

- Adjusted constants for elite items to correct values.

🔄

PrimalLauncher 0.9.4: Release Notes

•By Uni
launcher @ main

Features:
- Concurrent Download of clients
- New PrimalOG theme
- Release Notes (About page)
- UI Updates

Fixes:
- Extended effectschanger for Dawn
- Patch logic
- Favorites toggle

🔄

docs: update away/afk RE with mining command transitions and dead code

•By Moh
changelog @ dawn

- Mining command cycles through 7 (animation loop), 10 (active cycle),

11 (init) — not just 11 as initially documented

- AutoAFK_Timer condition 5 (sub_754BA5/IsWalking) is dead code:

ForbidFollow trashes ECX before the call, so it reads garbage

- Document the two-hook fix: call-site redirect at 0x77038C (primary)

and SetAwayAnimation prolog hook (safety net)

- Add sub_8E826F (command 10 handler) and sub_754BA5 annotations

🔄

refactor: clean up code in GeneralQing.cs

•By Moh
changelog @ dawn

Signed-off-by: Moh

🔄

docs: document MsgMagicEffect 1105 visual pipeline RE

•By Moh
changelog @ dawn

- Add reverse_engineered.md section 47 covering the full

CMsgMagicEffect_Process -> CMsgMagicEffect_DispatchVisual ->

CMagicEffectNewArrow_ctor pipeline. Twelve subsections:

packet field layout, the Process call flow with the

CMagicData_FindSpell gate, the caster-only PlaySpellAnimationOnSelf

hot path, the full ClientRepresent (property 10) -> effect file

case dispatch table for sub_95B2DD, the case 97 NewArrow observer

filter root cause + 1-byte fix, why MagicEffect.ini edits did not

fix it, the off_CC8B08 property name table dump (46 entries),

the IsAOEHaloSpell hardcoded allowlist, an SQL cross-check showing

LevelHu2 is universally 0 in the reference DB so matching it is

parity-only and not a fix for observer-blindness, and a complete

binary address table

- Rewrite PACKET_MIGRATION_6609.md section 2.3 (MsgMagicEffect 1105)

with the binary-verified layout. Document the per-target stride

bug, the Eff2 typo, and the SpellEffect = 1 footgun that were

fixed during the RE work. Note the new IReadOnlyList

API. Cross-link to reverse_engineered.md section 47 for the

case 97 client patch

- Rewrite the stale 03_PACKETS/Combat.md MsgMagicEffect section

(was: 12-byte targets, max 55, count at offset 16) with the

actual 6609 layout, the per-target slot table, the new MagicTarget

struct API note, and warnings about the SoulLevel byte and the

case-97 filter

🔄

docs: add re notes for case 25 invisibility bug, sell price, tab hide retarget

•By Moh
changelog @ dawn

- Add reverse_engineered.md section 29.7 documenting the BatchHideUnhide retargeting: sub_771FB8 has two paths (a2=1 smart filter via CheckEntityHide, a2=0 unconditional SetEntityVisible(entity, 0) loop), the Tab key handler at 0x6EFB60 calls both based on master state, and the previous ReadHidePlayerFlag patch only neutralized the a2=1 path leaving Tab broken from master-ON state

- Add SetEntityVisible caller inventory (only 3 callers, all tab-hide-related) proving invisibility status does NOT route through entity[0x64]

- Add new section 45 with the full CMsgUserAttrib case 25 dispatch walkthrough: jump table at 0x8F667B (not the IDA label 0x8F265C which is the JMP instruction), case 25 idx 0x18 -> handler 0x8F401C, self path at 0x8F4051+ with hardcoded buff bit checks (102, 104, 106, ...), non-self path at loc_8F4888 with sub_7527D6 + vtable[51], convergence point and the asymmetric vtable[51] alpha-fade-only-on-set bug

- Document entity layout: +0x28-0x2B color RGBA bytes, +0xAC 28-byte status flag buffer, +0xD5C buff list head

- Document the invis_unstuck.cpp hook strategy including why writing alpha before vtable[51] runs is safe and why a single hook on sub_7527D6 covers both self and non-self via the convergence

- Add new section 46 with the CItem::GetSellPrice (sub_85A12B) decompile, field offsets (+0x4C Price, +0x64 AmountLimit, +0x258 Amount via sub_8596F0), the sole caller in sub_683EFB at 0x6841E4 (item tooltip via string ID 10103), the server-vs-client formula mismatch, and the single-byte patch

- Update the Index with entries for the three new sections

🔄

fix: ensure client vision updates after equipment load for TQ mode on login

•By Moh
changelog @ dawn
🔄

fix: improve experience messaging for killer and team members

•By Moh
changelog @ dawn
🔄

fix: award killer their own kill-bonus exp on monster death

•By Moh
changelog @ dawn

- Uncomment Creature.HandleKillerBonus to grant the killer 5%-of-MaxHP bonus

exp (color-adjusted via AdjustCharExperienceGain) on top of the

damage exp from the final blow

- Rewire it into Creature.Die after the team-share loop so it runs for

both solo and team killers, and for both melee and magic kills

- Send a "You got X exp points by killing a monster." sysmsg mirroring

the original STR_KILL_EXPERIENCE notice

🔄

fix: update MsgAction to use Union32 for coordinates in mining interaction

•By Moh
changelog @ dawn
🔄

chore: probe Chop interact for mine animation

•By Moh
changelog @ dawn

- Change WorldClient.Mine() interact value from (InteractActionType)28 to InteractActionType.Chop after observing that 28 plays the attack-with-weapon animation in 6609 (the value was renumbered between 5095 and 6609 — 5095 had INTERACT_MINE=28, 6609 maps 28 to a Shoot2 attack variant)

- Chop is the next probe candidate because UpdateJar uses it successfully for jar smashing in 6609, the closest functional analog of mine (player swings tool against an object)

- Document the probe history in the comment so the next iteration knows which values have been ruled out

🔄

fix: GM/World chat channels

•By Moh
changelog @ dawn
🔄

fix: send MsgInteract with mine action so 6609 plays mining animation

•By Moh
changelog @ dawn

- Add a Vision.SendToScreen of MsgInteract.Create(UID, UID, X, Y, (InteractActionType)28, 0) inside WorldClient.Mine() alongside the existing MsgAction(Mine) broadcast

- The 6609 client's mining animation is triggered by MsgInteract with action 28 (the old 5095 INTERACT_MINE slot, named Shoot2 in FrostEmu's enum because the surrounding values were renumbered) — without the interact the player got sound + ore but no visible animation

- Also populate the existing MsgAction(Mine) X and Y instead of (0,0) so the client receive handler at loc_86FE89 has packet coords if it gates animation on them

- Cast through (InteractActionType) on the literal 28 because the FrostEmu enum's Shoot2 name no longer reflects the original semantics

🔄

fix: add new chat types and update world chat to use the correct channel

•By Moh
changelog @ dawn
1/119