Dungeon Expansion 2.0
Curse Maven Snippet
What's new
## [2.0] - Major Update
Three things happened over those three days. The guild system was removed and SoloCraft 1.3.3
became the floor. Then one player's report - at level 150, SoloCraft's default cap, watching SS
gates appear from level 100 and break beside them at a certainty, letting out creatures of 165 to
220, having stopped levelling without knowing why - rewrote how gates are offered and how they
break. And then the God rank, which was a level-265 walk-through for anybody holding the System,
whose hundredfold softening made every God blow harmless: God gates now open at level 300 and bow
only to a **complete Shadow Monarch**, whose own tools - the Legion, the Black Heart, the plate,
the job itself - had a long list of ways to lose what a player had earned.
Run in game on a local server: 115 unit tests, 55 GameTests and 14 in-game checks pass; see
`docs/PLAYTEST.md`.
### Added
#### The God rank and the complete Shadow Monarch
- **The complete Shadow Monarch.** SoloCraft's Shadow Monarch (job 1, or the Shadow Monarch
vessel), holding this addon's System, with a second heart: this addon's Black Heart, held
and allowed, or SoloCraft's own black heart from the Cartenon finale. The Monarch plate is
not required. `/slrdungeons dev monarch tier [player]` shows the three pieces.
- **God dominion** (`slrGodDominion`, on), one handler for every God-only damage rule:
- a God blow takes at least 45% of the maximum health of a hunter who is not complete from
a boss or mini-boss, 22.5% from other God creatures (`slrGodFloorPercent`, 45), and the
Monarch's softening does not apply to it;
- such a hunter, or their shadows, can take at most 2% of a God boss's or mini-boss's
maximum health per blow, 5% of other God creatures' (`slrGodHitCapPercent`, 2) - a God boss
in a dungeon refuses such a blow outright instead, see *Invincible God bosses*;
- a complete Shadow Monarch's blow, or their shadows', is a **divine strike** on a God boss:
8-12% of its maximum health whatever it was, so a God boss falls in 9 to 13 blows. On other
God creatures it lands whole after armour, with no endurance share. Written after the first
fight at four times the health, where the Monarch's blows barely scratched a God boss;
- a complete Shadow Monarch takes at most 8% of their maximum health from a God blow
(`slrGodMonarchCapPercent`, 8; 0 removes the cap), and a God blow that would still kill
them leaves them at 1 health without spending the Black Heart;
- a hunter who is not complete is told so on the action bar, at most once every 30 seconds.
- **God endurance** (`slrGodEndurancePercent`, 100): inside a dungeon a God creature keeps
only part of each blow after armour - 40% ordinary, 30% elite, 18% mini-boss, 8% boss -
divided further by the party's size. 200 doubles effective health, 0 turns it off. `/kill`,
the void, shadows as victims, God creatures outside dungeons (Break escapees) and
ability-summoned adds are exempt, and so is every blow that holds a divine key.
- **Invincible God bosses** (`slrGodInvincible`, on). Inside a dungeon a God boss refuses every
blow without a key: no damage, no knockback, a burst of light, and the striker is told so at
most every 5 seconds. `/kill` and the void always land; mini-bosses and ordinary God creatures
are never invincible. Three keys, each a band of the boss's maximum health instead of the
endurance share and the per-blow cap:
- **a complete Shadow Monarch** - 8-12% per blow (9 to 13 blows);
- **the Divine Blade** in the main hand, in melee - 2-5% per blow after the boss's ward (20 to
50 blows);
- **the altars**: four glowing beacons stand on the diagonals seven blocks out, each tied to
the boss by a thread of light. `slrGodAltarHits` (5) hits break one; when the last falls the
boss glows and any blow from anybody takes 1-4% of its bar for `slrGodVulnerableSeconds`
(20), then four new altars rise. Altars are vanilla block display and interaction entities:
no new model or texture.
`/slrdungeons dev god status` shows the nearest divine boss's altars, window and the caller's
key; `dev god altars break` and `dev god altars restore` open and close the window.
- **Divine Shards and the Divine Blade.** God creatures below boss drop Divine Shards when a
hunter or their shadow kills them in a dungeon: ordinary 10%, elite 25%, mini-boss always 1-2;
never ability adds; off with `slrMaterialDrops`. Three shards around a Monarch's Sigil over a
netherite sword craft the Divine Blade: netherite-sword stats, fire resistant, always glinting.
Both items borrow vanilla textures (amethyst shard, netherite sword).
- **God damage**: ordinary God creatures hit for 262-292 and bosses for 520-550 (were 78-98
and 128-160); elites and mini-bosses scale from those as at every rank.
`slrGodDamagePercent` (150) multiplies the finished hit on top: a God boss's designed hit of
548.5 becomes about 822.
- **God health** (`slrGodHealthPercent`, 400): a God creature's finished maximum health is
multiplied on top of every other rule, and it spawns full. A God boss at level 310 stands at
about 3,680 health instead of about 920. To make room, the engine's 1024 ceiling on
`generic.max_health` is raised to 1,000,000 at start-up on server and client
(`util/HealthCeiling`); if that fails the log says so and God creatures stay clamped at 1024.
The ceiling is global, so other health bonuses that used to be clamped at 1024 (health rules
above 100 on S bosses, party scaling, a player's own bonuses) now count in full. A complete
Shadow Monarch is still capped at 8% per God blow and cannot die to one.
- **God door level check** (`slrGodDoorLevelCheck`, on): a God gate refuses a hunter below
its minimum less `slrGateLevelMargin` - level 285 - even with a party. Creative and spectator
pass.
- **A start-up warning** when `soloLevelingLevelCap` keeps every God gate out of reach: God
gates need level 285, SoloCraft's default cap is 150. Set it to 300 or 0.
- **God rooms**: 36 room structures of their own for the three God dungeons, generated by
`tools/gen_god_rooms.py` - quartz and gold palaces with sky ceilings, painted sky walls and
cloud-sea floors, and a 31x14x31 throne hall with a dais for each boss. Cloud, light and ash
particles drift around hunters during a God run. No other structure changed.
- **Only a complete Shadow Monarch gets a soul from a God creature.** SS and National are
unchanged.
#### The Monarch's own tools
- **Keep the Shadow Monarch job** (`slrKeepMonarchJob`, on): a Shadow Monarch whose job was
wiped by a SoloCraft reset, with their shadow roster still there, gets the job back - only
from no job at all, never over another vessel, within the server's Monarch limit.
`/slrdungeons dev monarch forget <player>` clears the memory.
- **G opens the Shadow Legion**, whether or not SoloCraft's System flag is on. The Legion's
"< Page 1" opens SoloCraft's own summon menu instead of closing the screen.
- **`/slrdungeons legion all summon|dismiss`**, one summary line for the whole army.
- **`/slrdungeons heart`** for players, and op-only `/slrdungeons dev heart
grant|revoke|wake|reset|reissue`. `dev authority revoke` also takes the heart.
- **The Legion shows how a shadow is progressing.** Each card carries the shadow's grade
(Elite, Knight, General, Marshal) in its own colour, its kill count and a bar toward the next
grade. SoloCraft's own level stays on the card, separately: its XP keeps rising, only its rank
stops at Elite Knight.
#### Gates, breaks and Jeju
- **A Dungeon Break needs a hunter who can face it.** If no hunter within 160 blocks of the
gate has the level for its dungeon - its minimum less `slrGateLevelMargin` - the gate
expires quietly: nothing gets out, nothing reaches the journal, nobody famous comes.
- **`slrGateLevelMargin`**, default 15. Fifteen puts the first SS dungeon, Demon Kingdom's
Deep (minimum 165), exactly at SoloCraft's default cap of 150; a server that raises
`soloLevelingLevelCap` meets the rest as its hunters climb. Below S the same fifteen means
A gates from level 55 and S gates from 85.
- **`/slrdungeons jeju`**, for every player: where Jeju stands, whether the Ant King sleeps,
is awake or is dead, and how long until the colony comes.
- **A warning at SoloCraft's level cap**, once per player: its finale at the Cartenon Temple
ends all XP gain for good. A Shadow Monarch without Beru's shadow is also told where he
comes from; other jobs cannot Arise, so they are not sent after him.
#### Campaign, tooling and text
- **`/slrdungeons dev story step <n>`** puts a hunter on any step of the campaign without
paying or announcing anything, and **`/slrdungeons dev gate seed`** runs the real gate
generation beside the caller, skipping only the random roll and saying which condition
refused when one does.
- **Finishing a chapter is announced**, including the last one, which used to end in
silence.
- **The first GameTests** (`gradlew runGameTestServer`) and a unit test that holds every
creature to a valid shadow archetype. The suite has grown to 55 tests and 115 unit tests.
- **French** for the game rules, the Black Heart and rebirth scene, the System's authority
lines, the finale warning, the Legion page and commands, Arise and shadow grades.
### Changed
- **God dungeons open at level 300**: The Fragment of Brilliant Light 300-330 (was 265-310),
The Rulers' Vigil 300-340 (was 280-325), The Absolute Being 300-350.
- **God chests roll the standard S tables.** The Rulers' Vigil paid A-rank Fallen God Temple
loot.
- **The God boss's rotating ward applies after armour**, so its phase slows a one-trick build
by the intended amount instead of 5 to 16 times.
- **Only the Shadow Monarch, or whoever holds the System, can summon from the Legion.**
Anybody can still dismiss.
- **The Legion page sends its own packets** instead of chat commands, and refreshes itself
every two seconds. Network version 3: client and server must both be 0.30.0.
- **Holding the Black Heart satisfies the Awakened Vessel and Ruler Candidate rungs**, and the
heart can be earned with `slrDungeonQuests` off.
- **`slrBlackHeartRefusalSeconds` 0 refuses every killing blow**; any other value less the
plate's 45 seconds never goes below 5 (the floor was 20, which swallowed the plate's cut).
- **S-rank dungeons start close to S rank.** Minimums are now `demon_kingdom` 100,
`void_city` 102, `primordial_dragon_tomb` 104, `legion_of_the_dead` 106,
`corrupted_celestial_citadel` 108 and `worlds_end` 110 - they ran from 100 to 125.
Maximums and the three S-rank Red Gate exclusives are unchanged. A hunter who has just made
S walks into dungeons whose own level is at most ten above theirs, where it used to be
twenty-five; the usual spread of up to three levels and the boss's ten come on top, as they
always have.
- **SoloCraft 1.3.3 is required** (`[1.3.3,1.4)`). Datapack gates book their dungeon site
from SoloCraft's `DungeonSiteAllocator`, and the statue trial's three teleports go through
`DungeonArrival`, which protects the hunter while the destination loads.
- **Every quest description was rewritten** to open with what to do - the verb, the count,
the rank, the place. "Still Standing" now follows "The First Door" instead of asking for
a flawless clear before any clear, and four payouts were raised where they sat below an
easier step. **The four licence quests say where a licence is raised**, since levels lift
SoloCraft's rank but never rewrite the licence those quests read; "A Seat at the Table" no
longer mentions guilds.
- **A famous hunter who does not come now says why**, with `debugMode` on: nobody answers
this rank, the one-in-four roll missed, the entity could not be made, or there was no
clear ground. Before, a run of breaks with nobody arriving could not be told apart from a
fault.
- **Lighter on the client and the server**, with nothing drawn or decided differently:
- **Screens** - System, Legion, Codex, Campaign, Journal, Court, Skills, Exchange, Trade and
every addon button - build and wrap their text when it changes instead of every frame.
- **Shadows** find their model through a cached lookup.
- **God altars** read their last hit without saving the whole entity every 2 ticks.
- **The boss bar title** is rebuilt only when the level changes.
- **The System panel** is not resent when nothing on it changed.
- **Debug-only log lines** no longer build names while debug is off.
- `mod_version` 0.30.0.
### Fixed
#### Gates, breaks and the campaign
- **The campaign stopped for good at "Rank Up", in chapter III.** That quest - a C licence -
and the three licence quests after it read a SoloCraft field, `rankingnum`, that neither
SoloCraft 1.3.1 nor 1.3.3 ever writes, so the number was 0 on every world and the quest
could never complete. The campaign serves one quest at a time, so nothing after it could
either. The rank is now read from the licence itself; a hunter already stuck there with a
C licence or better moves on within two seconds of logging in.
- **SS, National and God gates broke at a certainty** on any server with one S-rank hunter
online. SoloCraft has no rank above S, so these gates are presented to it as S, and its
break roll always breaks a gate at or below the best rank online. They now roll from
SoloCraft's own gap table against the best-ranked hunter near the gate - ranked as
SoloCraft's own roll ranks them, by the rank levelling raises rather than the letter on
the licence: 65 %, 45 % and 30 % against an S-rank hunter. Gates from E to S keep
SoloCraft's roll unchanged.
- **Gates arrived before the hunter could face them.** Gates above S were offered from level
100 to every S-rank hunter, though their creatures start at 165; and at every rank the
seeder offered a rank or two above the licence without a look at level - an A-rank hunter
at 75 met S gates starting at 100. Now a gate of any rank but E is offered only to a hunter
within `slrGateLevelMargin` levels of that dungeon's minimum. A gate SoloCraft's own spawner
binds to one of our dungeons - Red Gate exclusives included - is rebound to one the nearest
hunter can take when they lack the level. E gates always appear, so a new hunter is never
left with nothing.
- **Gate sites leaked.** A gate removed by `/kill`, another mod or SoloCraft's own cleanup
never returned its slot, and a full pool evicts a live booking instead of refusing - so a
leak surfaced much later as two dungeons built in one place. Released now, on real
removals only.
- **The entered-gate countdown could show half the real delay** when its rule could not be
read: the readout fell back to 30 minutes and the sweep to 60.
- **SoloCraft's own Beru gates were closed for good** once Jeju had risen. They are held back
now only while the Ant King lives or an invasion is underway.
- **Jeju could take a living Ant King for dead.** An awake King left in a chunk that had
unloaded was written off as soon as a hunter loaded the island's centre - and with Beru
gates now reopening once he is dead, that could have let a second Beru boss in. The island
remembers where he was last seen (saved as `KingSeen`; older saves simply start without it)
and counts him gone only when that ground is actually loaded and he is not on it.
- **The Ant King came back 0.7 seconds after `dev jeju fall` killed him**, `dev jeju wake`
and `reset` did nothing from any distance, and the island's site search could settle on a
cliff for a coast.
#### The Monarch, the Legion and the Black Heart
- **The Legion refused a hunter with the full Monarch panel** - "Only the Shadow Monarch can
call a soldier out" - when SoloCraft's job had been reset. Holding the System is enough to
summon now; dismissing was never refused.
- **The Monarch plate and keepsake were duplicated on every death** with keepInventory off.
They are bound to their owner, kept out of the death drops and handed back on respawn; a
piece bound to somebody else is taken off whoever wears it. Duplicates already in a world
stay inert rather than deleted, and a heart holder's plate is bound once on the first login.
- **A shadow's grade and kills were lost on every removal but the Legion's own dismiss** -
SoloCraft's Dismiss Shadows, logout, a dimension change. The roster entry now keeps them.
- **Raising a creature could take over a promoted soldier's slot.** Each raise gets a fresh
entry.
- **Summon All got non-operators kicked for spam**, and card clicks failed with chat hidden.
- **Shadows summoned back through SoloCraft's page arrived unscaled and gradeless**, and lost
Dominion and Legion's Reach.
- **Dismissing from the Legion destroyed the mana stones a shadow carried.**
- **Two souls within two blocks could raise the wrong creature, or one twice.**
- **The Legion summoned inside Cartenon, in the survival dimension, while dead or as a
spectator**, and for a hunter who was neither the Shadow Monarch nor holding the System.
- **Stale duplicate shadows were never removed.** A shadow no longer bound to its entry
disappears, dropping what it carried.
- **Promotion kills could be farmed** on chickens, players or other shadows. Only enemies count.
- **"Put Them Away" cleared a run in which SoloCraft's own shadows were called.**
- **Legion summons charged mana in Creative, and before the shadow existed.**
- **The Legion page** kept a stale list between worlds and could scroll past its end; its
buttons were English-only.
- **The two Black Hearts did not see each other.** SoloCraft's black heart counts as a second
heart and turns the System's voice silent, and `/slrdungeons heart` says so.
- **Health from the System and the heart was lost on relog.**
- **Sovereign's Return fired on the void and `/kill`, and ignored absorption.** It also
recharged on any dimension change instead of only on a new dungeon.
- **The Jeju ascension rung could lock** once the island was gone or its rule was off.
- **The rebirth scene was lost on disconnect.** It now resumes on login.
#### Creatures, screens and text
- **God bosses spawned wounded**, at about 87% of their bar: the late level raise above the
room lifted their maximum health, multiplied by `slrGodHealthPercent`, without filling it. A
creature's health share is kept across that raise.
- **The Architect's awakened form never showed.** Its phase was never sent to the client,
which always drew phase 1; the phase is synced now.
- **The Codex page opened on the previous world's list** after changing server.
- **`/kill` did nothing to a boss sealed by Rally**, and the void did not hurt it until the
seal ended.
- **The Unclosed Scar's chest stopped loading** once the guild flare it listed was removed.
- **The journal drew its widgets twice** on an empty page.
- **The skill-point message misreported the count.** It read *"A skill point. You have 1."*
with 1,212 points unspent, and *"A skill point"* when 999 arrived at once: its first number
was the amount just gained. It now reads *"Skill points +1. You have 1212 unspent."*
- **Twenty-seven game rules had no name or description** on the Create World screen.
- **Ascension and game-rule texts disagreed with the code** (the Monarch multiplier does not
touch health; three ladder rungs now mention the Black Heart).
- **Texts still said a broken Beru gate raises Jeju.** Jeju is a timed invasion.
- **The dungeon catalog had three Red Gates wrong.** Blood Moon Forest was listed as B 90-115
(it is A 90-110), The Abyssal Prison as A (it is S), and Throne of the Fallen Monarch as
170-200 (it is 165-180). `tools/gen_docs.py` now matches the dungeons, and
`docs/DUNGEON_CATALOG.md` and `docs/MOB_CATALOG.md` were regenerated from it.
### Removed
- **The guild system, entirely.** Solo Leveling: Hunter Society (`hunter_society`) does
guilds better, and carrying two of them made any collaboration impossible. Gone: guild
halls, guild teams booking gates and answering Dungeon Breaks, the guild league and its
screen, retinues and expeditions, standing directives, and the guild flare - 21 Java
files and about 5,100 lines, ten game rules (`slrNpcHunters`, `slrGuildDirectives`,
`slrGuildClaims`, `slrGuildClaimMinutes`, `slrGuildClaimPercent`, `slrGuildGateTeams`,
`slrGuildHalls`, `slrGuildHallCount`, `slrExpeditions`, and the league's G key), the five
datapack guilds and every translation key that described them.
- **Six campaign quests** that read that system, so the campaign is 59 steps rather than
65. A player's progress is an index into the list: anyone mid-campaign on an older save
lands on a neighbouring quest. Chapter IV kept its four dungeon quests and is now
"IV. The Proving Ground".
- **Four journal categories** - claimed gates, league moves, expeditions, claim teams.
Existing worlds drop those entries silently on load and the save rewrites itself once
without them; gate, Red Gate, break and Jeju entries are untouched.
- **What that removal left behind in text.** The names and descriptions of the game rules
that no longer exist (`slrGuildHalls`, `slrGuildHallCount`, `slrGuildClaims`,
`slrGuildClaimPercent`, `slrGuildDirectives`, and `slrNpcHunters` with them) and the sixteen
lines of the Association directives, which nothing reads any more. The six humans kept below
are grouped as "Hunters" rather than "The Hunters' Guilds", and the trade screen's rate is
the quartermaster's rather than the guild's. `verify_content.py` loses a guild hall check
that called commands which no longer exist, and the unused Legion "empty" text is gone.
### Kept on purpose
- **The six `guild_*` creatures stay registered.** Two things that are not guild features
depend on them: `guild_quartermaster` is the addon's only merchant, and the Proving Yard
draws its instructor from three of the others. Deleting them would have removed trading
and the landmark's instructor in silence. Note that nothing places a merchant any more -
its only spawn was the guild hall.
- **Famous hunters.** Cha Hae-In, Baek Yoonho, Choi Jong-In, Thomas Andre, Kang Taeshik and
Esil Radiru were swept out with the guild response code, which is where their trigger
lived, and restored the same day. They are now summoned by the Dungeon Break itself.
### Known
- A Shadow Monarch who kills another player's shadow gets a soul that can be raised again as
a duplicate (`ShadowExtractionBridge` also fires on our shadows' deaths). Not fixed.
This mod has no additional files

