Skip to content

Job buffs, foreign buffs, Shadow Partner and party buffs - #505

Merged
neeerp merged 3 commits into
v83/movement-pathsfrom
v83/buffs
Oct 17, 2026
Merged

neeerp merged 3 commits into
v83/movement-pathsfrom
v83/buffs

Conversation

@neeerp

@neeerp neeerp commented Oct 17, 2026 •

Copy link
Copy Markdown
Owner

Job buff skills now give their full stats, the stats others see go out as foreign buffs, and party skills reach the party.

What changed

  • Buff skills give their level's stats plus their own (Booster, Combo, charges, Hyper Body, Maple Warrior, Dark Sight, Shadow Partner...), with their MP, cooldown and item costs. GIVE_BUFF carries every stat in the client's bit order with the exact tail.
  • Foreign buffs: the stats others see go out as GIVE/CANCEL_FOREIGN_BUFF (0xC7/0xC8) on use, cancel, expiry and death, and in SPAWN_PLAYER. HeavenClient's BuffParser reads both encodings in v83's order (FUN_00781d0e, FUN_00788156) and keeps remote buffs on OtherChar.
  • Damage: damage caps count attack buffs, and Soul Arrow needs no arrows.
  • Shadow Partner: a ranged attack has twice the hits (at most 15) and throws a second set of bullets from 30 px behind. Other users' shots read their Shadow Partner foreign buff.
  • Party skills: USE_SKILL's party mask reaches the members it names on the caster's map. Each live member within the skill's area plus 100 px gets the buffs (or Heal's share) and the skill's affected animation.

Not covered

  • Drawing Dark Sight, Shadow Partner's shadow and Soul Arrow.
  • Hyper Body's MaxHP/MP on the server's stats.

Verification

  • Server unit tests cover the buff packets' bit order and tails, the foreign buffs and the party mask.
  • Client tests cover the buff parser.

Reviewed with sol-loop: 2 rounds with gpt-6.1-sol on high.

Stacked on #504

Server: buff skills give their level's stats plus their own (Booster,
Combo, charges, Hyper Body, Maple Warrior, Dark Sight, Shadow Partner,
...), with MP, cooldown and item costs. GIVE_BUFF carries every stat in
the client's bit order with the exact tail. The stats others see go out
as GIVE/CANCEL_FOREIGN_BUFF (0xC7/0xC8) on use, cancel, expiry and death,
and in SPAWN_PLAYER. Damage caps count attack buffs; Shadow Partner
doubles a shot's lines and Soul Arrow needs no arrows. A player leaving
a field is shown before mob/NPC control passes on.

HC: BuffParser reads the flags in the v83 decode order (FUN_00781d0e)
and the remote encoding (FUN_00788156, two-state blocks). Buffstat::by_bit
replaces the unordered maps. New 199/200 handlers and the spawn block
keep remote buffs on OtherChar.

Harness: strict packet loops skip NPC control (0x103).
Locally a ranged attack with Shadow Partner (not Taunt or Vampire) has
twice the hits, at most 15, and throws its bullets again from 30 px
behind the user, below the first set. Other users' shots read their
Shadow Partner foreign buff: twice the bullets and shown hits, the
client's start choice by mob index, and a miss's ends 30 px short.
USE_SKILL's party mask now reaches the members it names: the directory maps
slot bits to party members on the caster's map, and each applies the buffs
(or Heal's share) when alive and within the skill's lt/rb plus 100 px, with
user effect 2 showing the skill's affected animation. HC plays that effect
on 0xC6 and 0xCE type 2 instead of the use effect.
@neeerp
neeerp added this pull request to stack #515 October 17, 2026 23:30
@neeerp
neeerp merged commit 7383437 into v83/skill-and-mob-details Oct 17, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant