Skip to content

Add unlockable/equippable player titles - #2827

Closed
Yorudan210 wants to merge 67 commits into
AscensionGameDev:mainfrom
Yorudan210:feature/player-titles
Closed

Yorudan210 wants to merge 67 commits into
AscensionGameDev:mainfrom
Yorudan210:feature/player-titles

Conversation

@Yorudan210

Copy link
Copy Markdown
  • TitleDescriptor shared model + resources/titles.json catalog (TitleManager)
  • Player: UnlockedTitleIds/EquippedTitleId (persisted), UnlockTitle/EquipTitle/RemoveTitle
  • Reuses the existing HeaderLabel mechanism for above-the-head display/sync
  • New packets: UnlockedTitlesPacket (server->client), EquipTitlePacket (client->server)
  • Admin console commands: unlocktitle, equiptitle
  • Client: Titles window (Y key) to equip/remove unlocked titles

NOTE: not compiled (no NuGet access in this environment). An EF Core migration still needs to be generated for the new Player columns:
dotnet ef migrations add AddPlayerTitles --project Intersect.Server

Claude and others added 30 commits September 19, 2026 05:45
- TitleDescriptor shared model + resources/titles.json catalog (TitleManager)
- Player: UnlockedTitleIds/EquippedTitleId (persisted), UnlockTitle/EquipTitle/RemoveTitle
- Reuses the existing HeaderLabel mechanism for above-the-head display/sync
- New packets: UnlockedTitlesPacket (server->client), EquipTitlePacket (client->server)
- Admin console commands: unlocktitle, equiptitle
- Client: Titles window (Y key) to equip/remove unlocked titles

NOTE: not compiled (no NuGet access in this environment). An EF Core
migration still needs to be generated for the new Player columns:
  dotnet ef migrations add AddPlayerTitles --project Intersect.Server
…fixes

Titles
- Titles are now game objects (Title Editor) instead of a JSON file;
  unlock/equip via console commands, titles window (Y), header label sync

Pets
- Pet game object + Pet Editor; "Change Pet" event command
- Server-side Pet entity that follows its owner and fetches loot
  (passable, invulnerable, respects loot ownership)

Dungeons
- Dungeon game object + Dungeon Editor (entrance, access type, players,
  level, time limit, lives, cooldown, rewards)
- Dungeon runs on dedicated shared map instances: shared lives, timer,
  objective banner, cooldowns, personal records, party invitations,
  end-of-run result screen; dungeons window (J)
- Event commands: Enter/Complete/Fail Dungeon, Set Dungeon Objective
- Condition: Is in Dungeon

Instance variables
- New variable type shared by everyone on a map instance (editor,
  Set Variable / Input Variable / conditions / event text, change trigger)

Engine fixes
- Texture eviction loop unloaded every texture each frame when free VRAM
  was under 1 GiB (missing break) -> huge FPS drop
- Continuous tile movement (carry-over between tiles, chained move timer
  with a matching server rule) and smoothed camera

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…cross-PC dev

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Boss support: per-spell announcements (top alert) and phase announcements
  (center) for NPCs filed in a "Boss..." folder, phase change fallbacks,
  boss death event forwarding for player summons, dungeon completion
  despawns remaining NPCs.
- Summon spells: ring placement (hit radius) and staggered "rain" mode
  (cast range) dropping pinned hazards on players one after the other;
  Static NPCs can cast; hostile AoE spares the caster's summon team.
- Houses: Indoor / Indoor Door map attributes (roof layers hide, inside
  blocked except through doors), RoofLayers option, editor support.
- Staff ranks [GM]/[M]/[G] before player names, new Guide access level.
- Item tooltips show required level / stats from usage requirements.
- Combat feel: spell queue, crit screen shake, hit sounds,
  double-click to start auto-attack.
- Editor: spell editor tolerates Summon/Companion/PassiveBond types;
  item description guards against missing equipment slots.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- Dungeons: three difficulties (Easy 10 / Normal 30 / Hard 60) scaling every
  monster of a run through SpawnNpc, scaled rewards, records/cooldown/leaderboard
  kept per dungeon and difficulty; procedural generation removed (server + editor).
- UI: dungeon, titles and achievements windows rebuilt (docked layout, dark button
  lists, enlarged skins), item tooltip shows rune enchantment level.
- Enchantment runes 1-10 stored on the weapon (ItemProperties.EnchantLevel), sent
  with the equipment packet, drawn as a flame aura from the weapon silhouette.
- Combat: /level admin command, bullet-hell projectile patterns for the boss
  (rotating spirals via per-wave rotation), target marker, window skins.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nd Professions window

- 11 professions (5 gathering, 6 crafting), skill 1-300, max 2 crafting professions per player
- Recipes: profession + orange/yellow/green/grey thresholds, trainable flag; profession recipes never fail
- Player skills and known recipes persisted (hand-written Game/Player migrations)
- ProfessionsPacket, Profession event command (editor form), recipe fields in the craft editor
- Client: Professions window (key N), coloured recipe list in the crafting window

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…tigation

- Narrated story intro before the main menu (skippable, remembered via registry preference)
- Main menu redesigned: fullscreen background, top-left logo, vertical text list
- Launcher: two-panel layout with patch notes and log
- Server maintenance mode (admin-only login) and monster-vs-player level damage mitigation (bosses exempt)
- Debug and Release builds now share the same Hail/Approval packet format
- Longer release disconnect timeout (120s)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…shing

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
When the map exists but is not loaded yet (empty map cache), AddEvent silently dropped
the event packets, so NPCs never appeared on first connection.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…awing

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…on, ingredient names, empty message

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…equirement, components, stats line)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…char per line)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ide the frame

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…items

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…t grid against zero columns

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Yorudan210 and others added 29 commits October 3, 2026 11:21
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ely on the hovered control staying the source slot)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…emove drag diagnostics

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e); migrate E off Attack/Interact once

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…eract control

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…y on visible pixels, bubble above the real top

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…g-sort])

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…rol did not handle it (player client spells)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… weapon (client + server, with a warning)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…rc next to the player)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ine of sight, diagonal corners), flee controlled only by the editor's Flee Health %

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ble-click auto-attack chases

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ability collisions and furniture, not only map Blocked attributes

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…r cannot spin the thread and fill the disk

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ests, resources, tilesets and other editor definitions

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…by the pre-publish check)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@Yorudan210 Yorudan210 closed this Oct 3, 2026
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