Jerelo-ShrinesOfTheTarnished icon

ShrinesOfTheTarnished

Four new shrines: duel your own Reflection, gamble items at Corruption, slay the Swarm, or betray your friends in The Invasion (multiplayer). At least one every stage. Bugs or ideas: message Jerelo on Discord.

By Jerelo

CHANGELOG

Changelog

0.1.8

  • Fixed: the Shrine of Reflection's clone turned on your teammates. The reflection now duels only the player who bought the shrine. If that player dies, the reflection fades instead of going after the rest of the team.
  • Bigger shrine descriptions. The text that explains a shrine when you look at it is now 40% larger.
  • Shrine of the Swarm rebalanced (it was handing out a legendary every stage).
    • You have to kill every wave monster to win. It used to pay out on a timer even if nobody fought. You get 30 seconds after the last wave arrives. If time runs out, the hoard is lost.
    • New reward: 80% white, 9.5% green, 9.5% boss item, 1% red (was a guaranteed red).
    • Costs 80 gold (was 40), scaled with difficulty.
    • Its monsters fight one stage ahead: waves are picked as if the run were a stage further, and every monster gets the levels that stage would add (about +1 early on, +2 or +3 later).
  • Shrine of Corruption: more outcomes, no more guaranteed red. Every offering now rolls 20% red, 10% void item, 10% lunar item, 5% boss item, 25% white, 10% curse (about 10% less max health until the next stage) and 20% nothing. The "3 failures and the next one is a red" rule is gone. It also stays usable after the teleporter starts.
  • The Invasion revives its dead. Anyone who dies during the event, the traitor included, comes back where they fell, 2 seconds after it ends (with 3 seconds of immunity), and the run can't end while they wait. The traitor no longer gets the team's 150-gold reward for their own defeat.
  • Shrine rewards no longer get stuck inside the statues. Items now pop out from the side of the shrine and land a few metres away, towards the player who used it.
  • Fewer shrines per stage. At least 1 guaranteed (was 2), and the director picks them about as often as vanilla shrines (weight 10, was 40). Existing configs keep their old values; change them in com.jerelo.ShrinesOfTheTarnished.cfg.

0.1.7

First Thunderstore release.

  • Fixed: the Shrine of Corruption took your lunar coin and did nothing. It never found an item to sacrifice (its item scan was empty in the current game version), so every use ate a coin. It now takes a random white or green item as described. If you have none, your coin is refunded.
  • The Shrine of Corruption stays open until it pays out a red, so its "3 failures guarantee a red" rule actually works (it used to close after one offering). Each offering costs a coin and an item.
  • Fixed: the Shrine of Reflection never paid out. Beating your reflection now drops a copy of a random item you own (not the first player's), even after the clone's corpse is cleaned up.
  • Shrine of the Swarm waves come from the stage's own monsters, bosses excluded. They used to be any AI in the game, so a stage 1 Swarm could send Mithrix, Voidling, drones or turrets, dropped in mid-air. Monsters now spawn on the ground (or in the air for flyers) around the shrine and scale with difficulty. Winning no longer also prints "disperses, unrewarded".
  • Every player now sees the shrine chat messages. They used to show on the host's screen only.
  • The Invasion's payout message shows the real (difficulty-scaled) gold.
  • New icon showing the four shrines.

0.1.6

  • New model for the Shrine of Corruption. A violet crystal throne split by glowing magenta cracks, two duelling figures on top. All four shrines now use their own models.
  • Shrines are no longer rare. Every regular stage gets at least 2 different shrines (the director's own picks count). The director also rolls them far more often: weight 40, where vanilla chests are ~45 and vanilla shrines ~10. They cost 20 director credits instead of 25-30. You'll usually see 2-4 per stage, never two of the same kind.
  • The Invasion is multiplayer-only. It's a PvP shrine: in a solo run nobody could fight the "traitor", who just farmed gold and lunar coins. It now only appears with 2+ players.
  • New config file com.jerelo.ShrinesOfTheTarnished.cfg (host's settings apply): MinShrinesPerStage (2), DirectorWeight (40), InvasionInSolo (false).
  • Fixed: the Shrine of Reflection never spawned your reflection. It copied your player master, which has no AI and no body, and left a stray "player" in the run. That stray also made a solo run count as multiplayer. It now spawns the AI version of your survivor with your items (as Artifact of Vengeance does), hostile and hunting you. If it can't, you get your gold back.
  • Fixed: the shrine models lay on their side or tilted up to 60 degrees. The models are now exported upright, and the 5 m statues always stand straight (no floor tilt, no random tilt), sunk slightly into the ground so the plinth never floats.
  • Tested in game on 9 stages: 2-4 shrines on every one, all four interactable, Reflection and Swarm bought and working.

0.1.5

  • New model for The Invasion. A 5 m stone throne with two duelling warriors on top and a glowing gold emblem (made in Meshy), replacing the placeholder obelisk. It is solid: you can stand on its steps, and shots hit it. It only spawns where there is room for its 4 m base.
  • New model for the Shrine of the Swarm. The same throne overrun by the hive: winged insect guardians, red roots, and glowing green and cyan egg sacs. 5 m tall, solid, roomy spots only.
  • New model for the Shrine of Reflection. A pale silver throne crowned by two mirror-image winged figures over a starry pool, with glowing pale-cyan orbs and runes. 5 m tall, solid, roomy spots only.
  • Fixed: the shrines could not be used at all. The game only lets you interact with an object whose collider carries an EntityLocator, and no shrine had one, so you got no prompt even when you walked right up to one. All four now have it, plus the white outline vanilla shrines show when you look at them. Aiming anywhere on the model works.
  • Shrine glow (the Invasion emblem, the runes and seams on the others) now survives the switch to the game's shader; it used to be dropped.

0.1.4

  • Fixed: the "at least one shrine per stage" guarantee never fired. 0.1.3 kept each shrine's template alive by parking it, active, 1000 m under the map. Every stage therefore had four hidden, live shrines. The guarantee saw them, decided "one of ours is already here" and never spawned anything. The templates now sit under an inactive holder: they no longer exist in the stage, and every regular stage gets at least one shrine (the moon, void stages, Prime Meridian and hidden realms are skipped).
  • The guarantee now picks from all four shrines, The Invasion included, and tries every shrine several times before giving up. Each stage logs which shrine it placed and where.
  • Fixed: Reflection, Corruption and Swarm had a second network identity ("multiple NetworkIdentity components"). Their logic sat on a child object with its own unspawned identity, so it never ran as the host. It now lives on the shrine itself.
  • Code-built shrines also initialise onDetailedPurchaseServer, which the game fires right after every purchase.

0.1.3

  • Real 3D models for all four shrines. The primitives are gone: each shrine now carries a modelled, low-poly mesh (invasion iron obelisk with red runes, mirror column with a cyan seam, twisted lunar column with green fissures, chitin cage with an amber core), built in Blender and packed into shrinesbundle by HenryUnityProject/Assets/Editor/ShrinesBuilder.cs. The bundle is embedded in the dll; the interaction logic is untouched and primitives remain as a fallback.

0.1.2

  • Fixed: shrines still never spawned in a run. The prefabs are built in code, so they were ordinary scene objects: the first stage load destroyed them, the spawn card was left pointing at a dead object and every placement died with a NullReferenceException inside Object.Instantiate (logged as "Guaranteed shrine spawn failed"). The templates now live in the DontDestroyOnLoad scene, parked away from the world and left active so spawned copies come out active.
  • Confirmed in a live log: the prefabs build cleanly and the cards are injected (Invasion shrine injected into interactable selection, Shrines injected: 3).

0.1.1

  • Fixed: the shrines never spawned at all. The prefab builder created its materials with Shader.Find("Standard"), but RoR2 has no Standard shader — the lookup throws (No GUID record is available for shader name), the exception aborted the whole prefab build in Awake, and the shrine was never registered. Now the pieces use the game's own Hopoo Games/Deferred/Standard shader, with the emissive bands set through _EMISSION / _EmissionColor.
  • Affects all four shrines (Reflection, Corruption, Swarm and The Invasion), since they share the same prefab kit.
  • Fixed: a second startup crash. A PurchaseInteraction created in code has a null onPurchase event (vanilla prefabs get it serialized), so AddListener threw a NullReferenceException in every controller's Awake. The event is now created when the component is built, with a guard in the controllers.

0.1.0

  • First release. Four shrines: Reflection, Corruption, Swarm and The Invasion.
  • Shrines are injected into every stage's interactable selection through its own director category, so they never eat vanilla shrine slots.
  • At least one modded shrine is guaranteed on every classic stage, starting from stage 1: if the director doesn't roll one, one is placed directly. Bazaar, Void and arena scenes are skipped.
  • All four shrines are registered as network prefabs, so they spawn correctly for every player in multiplayer.
  • The Invasion is eligible on all stages (it used to be pinned to stage 1 by a one-shot injection flag).