Skip to content

Fix slayer assignment names and silent mausoleum gates - #1154

Merged
GregHib merged 3 commits into
GregHib:mainfrom
HarleyGilpin:bugs/bug-fixes-8-10-26
Aug 11, 2026
Merged

Fix slayer assignment names and silent mausoleum gates#1154
GregHib merged 3 commits into
GregHib:mainfrom
HarleyGilpin:bugs/bug-fixes-8-10-26

Conversation

@HarleyGilpin

Copy link
Copy Markdown
Contributor

Fixes two reported bugs.

Slayer assignment names showing underscores (#1153)

The enchanted gem and ring of slaying "Kills-left" option printed slayerTask.lowercase(), which is the raw variable key, so the message read "moss_giants". Uses toLowerSpaceCase() now, the same conversion the slayer master dialogue already applies.

While in there: the reassign/block panel of the slayer rewards interface read slayer_assignment, a key nothing writes, so both lines always showed "You must have an assignment to use this." even with a task active. It reads slayerTask now and formats with toSentenceCase(), matching the blocked task list above it.

No gate sound in the mausoleum (#1140)

Two problems, both silent.

The sound name never existed. Door.sound builds ${material}_${gate|door}_${suffix}, so the two gates below the mausoleum (objects 3444 and 3445, material = "grate", named "Gate") asked for grate_gate_open. Nothing defines that, and Character.sound returns silently on an unknown id.

Material names follow two conventions: some name the door type (iron_door_open, barrows_door_open), others name the sound itself (grate_open). The lookup falls back through ${material}_${type}_$suffix, ${material}_$suffix, then the generic ${type}_$suffix, so a material without a dedicated sound plays the plain door or gate sound instead of nothing. Only grate changes behaviour; iron and barrows already resolved on the first candidate.

Also adds the missing grate_close, sfx 68, next to the existing grate_open 67, and sets the material on the opened variants of both gates so closing matches opening.

Reverting a temporary object played nothing. Doors opened by enterDoor revert after a few ticks, and the 5 minute reset does the same for doors left open, so the gate was silent again the moment the player stepped past it.

GameObjects.replace and Replace.objects take an optional onRevert callback, invoked once the original objects are back. Door passes the opposite sound to whichever transition it made, as an area sound at the door tile so anyone nearby hears it rather than only the player who opened it. Threaded through DoubleDoor and Gate so double doors behave the same.

resetExisting fires that same timer early when a player manually closes a door that was going to reset on its own, so the explicit sound in that branch is dropped; the revert plays it now, and keeping both would play it twice.

Sfx ids verified against the rev 634 sound table (GRATE_CLOSE 68, GRATE_OPEN 69).

Testing

DoorSoundTest walks a player through the first mausoleum gate and asserts a grate_close zone sound lands once the gate reverts. Full ./gradlew test passes.

Closes #1153
Closes #1140

The enchanted gem and ring of slaying "Kills-left" option printed
`slayerTask.lowercase()`, which is the raw variable key, so the chat
message read "moss_giants" instead of "moss giants". Use
`toLowerSpaceCase()`, the same conversion the slayer master dialogue
already applies.

The reassign/block panel in the slayer rewards interface read
`slayer_assignment`, a key nothing writes, so both lines always showed
"You must have an assignment to use this." even with a task active.
Read `slayerTask` instead and format it with `toSentenceCase()`, so the
lines read "Cancel task of Moss giants." and "Never assign Moss giants
again." matching the blocked task list above them.

Closes GregHib#1153
`Door.sound` builds the sound name as `${material}_${gate|door}_${suffix}`,
so the two underground gates below the mausoleum (objects 3444 and 3445,
`material = "grate"`, named "Gate") asked for `grate_gate_open`. No such
sound is defined, and `Character.sound` returns silently on an unknown
id, so opening or closing them played nothing.

Material names follow two conventions: some name the door type
(`iron_door_open`, `barrows_door_open`), others name the sound itself
(`grate_open`). Fall back through `${material}_${type}_$suffix`,
`${material}_$suffix`, then the generic `${type}_$suffix`, so a material
without a dedicated sound plays the plain door or gate sound instead of
nothing.

Add the missing `grate_close`, sfx 68, next to the existing `grate_open`
67, and set the material on the opened variants of both gates so closing
matches opening. Only `grate` changes behaviour; `iron` and `barrows`
already resolved on the first candidate.

Reverting a temporary object still plays no sound, so a gate that shuts
itself after `enterDoor` is silent. That affects every door in the game
and needs a revert callback through `GameObjects.replace`, left for a
separate change.

Closes GregHib#1140
Doors opened by `enterDoor` revert after a few ticks, and the 5 minute
reset does the same for doors left open. Neither played a sound, so
walking through the mausoleum gates was silent from the moment the
player stepped past them.

`GameObjects.replace` and `Replace.objects` take an optional `onRevert`
callback, invoked once the original objects are back. `Door` passes the
opposite sound to whichever transition it made, as an area sound at the
door tile so anyone nearby hears it rather than only the player who
opened it.

`resetExisting` fires that same timer early when a player manually
closes a door that was going to reset on its own, so the explicit sound
in that branch is dropped; the revert now plays it, and keeping both
would play it twice.
@GregHib
GregHib merged commit 7497a7a into GregHib:main Aug 11, 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.

Slayer assignment names should not contain underscores. No metal gate sound

2 participants