35 lines
2.5 KiB
Markdown
35 lines
2.5 KiB
Markdown
# Add Poison Wing & Poison Cape — Design
|
|
|
|
**Date:** 2026-07-19
|
|
**Status:** Approved
|
|
**Scope:** Add TWO wing items (basic: render + equippable + base defense). Source pack: `C:\Users\efpa\Downloads\asa devilzmu\asa devilzmu\6` (Wing241, Wing242).
|
|
|
|
## Items
|
|
|
|
| Item | Slot (group/number) | Model | Name | Classes |
|
|
|------|---------------------|-------|------|---------|
|
|
| Wing241 | 12 / 240 | MODEL_WING+240 | Poison Wing | Dark Knight |
|
|
| Wing242 | 12 / 241 | MODEL_WING+241 | Poison Cape | Dark Lord + Rage Fighter |
|
|
|
|
Wings are item group 12; `MODEL_WING = MODEL_ITEM + ITEM_WING (12*512)`, so item (12, N) auto-maps to model `MODEL_WING + N`. Numbers 240/241 are high/free in standard S6. Model files `Wing241.bmd`/`Wing242.bmd` load at `MODEL_WING+240`/`+241` (filename `Wing{N}` where N=number+1).
|
|
|
|
## Client (vendor/MuMain → D:\AdaMu\AdaMu)
|
|
|
|
1. `ZzzOpenData.cpp OpenItems()`: `AccessModel(MODEL_WING+240, L"Data\\Item\\", L"Wing", 241)` and `+241 → "Wing242"`. `OpenItemTextures()`: `OpenTexture(MODEL_WING+240/241, L"Item\\")`.
|
|
2. Copy `Wing241.bmd` + its texture, `Wing242.bmd` + its texture → `Data\Item\`. Extract the BMD's referenced texture names (decrypt) and copy the matching files (the pack ships `.ozt`/`.tga`; the engine loads the encrypted `.OZT`/`.OZJ`, so provide those; missing effect textures now log instead of blocking).
|
|
3. `Item_eng.bmd`: add name/stat records at slots 12/240 ("Poison Wing", DK) and 12/241 ("Poison Cape", DL+RF), via the 84-byte-record binary patcher (see `android-add-new-weapon-item`). Slot field = wing slot.
|
|
4. Rebuild `main.exe` + deploy.
|
|
|
|
## Server (AdamuSw)
|
|
|
|
5. `VersionSeasonSix/Items/Wings.cs`: new method `CreatePoisonWings()` with two `CreateWing` calls — `CreateWing(240, W, H, "Poison Wing", ...DK flag...)` and `CreateWing(241, W, H, "Poison Cape", ...DL+RF flags...)`, basic defense + level table, minimal options. W/H from the item icon size (default 12x12 or per pack).
|
|
6. Register in `Wings.Initialize()` (fresh seed) + update-plugin `AddPoisonWingsUpdateSeason6.cs` (UpdateVersion=98, idempotency guard on 12/240).
|
|
7. `docker build` + apply via AdminPanel → Updates (existing DB) / auto on fresh seed.
|
|
|
|
## Verify
|
|
|
|
Give the wings to a character (AdminPanel/inventory edit), equip in the wing slot, confirm: correct name/stats in tooltip (from Item_eng.bmd), 3D model renders on the character's back, class restriction enforced.
|
|
|
|
## Out of scope
|
|
Wing options (excellent), flight, per-level ancient/socket bonuses, balance. Just render + equip + base defense.
|