Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
UniversalSurvivorUnlocks
Automatically adds configurable unlock requirements to modded Risk of Rain 2 survivors that do not provide their own character unlock.
| Date uploaded | a month ago |
| Version | 0.1.8 |
| Download link | Shleidericks-UniversalSurvivorUnlocks-0.1.8.zip |
| Downloads | 148 |
| Dependency string | Shleidericks-UniversalSurvivorUnlocks-0.1.8 |
This mod requires the following mods to function
bbepis-BepInExPack
Unified BepInEx all-in-one modding pack - plugin framework, detour library
Preferred version: 5.4.2121RiskofThunder-R2API_Language
API for modifying the language localisation of the game
Preferred version: 1.1.0RiskofThunder-R2API_Unlockable
API for adding custom achievements and unlockables
Preferred version: 1.0.2RiskofThunder-R2API_Networking
Networking API around the Unity UNet Low Level API (LLAPI)
Preferred version: 1.0.4README
Universal Survivor Unlocks
Universal Survivor Unlocks (USU) adds configurable unlock challenges to modded survivors in Risk of Rain 2.
The mod automatically detects installed modded survivors, respects characters that already have their own unlock system, and can assign USU challenges to survivors that do not.
AI Usage Notice
Universal Survivor Unlocks has been developed with assistance from artificial intelligence tools during parts of the programming, design, writing, debugging, and documentation process. Some visual resources may also be created or assisted with AI tools.
This notice is included for transparency so that players who prefer to avoid AI-assisted content can make an informed decision before installing the mod.
Aviso sobre uso de IA: Universal Survivor Unlocks ha sido desarrollado con asistencia de herramientas de inteligencia artificial durante parte del proceso de programación, diseño, redacción, depuración y documentación. Algunos recursos visuales también pueden haber sido creados o asistidos mediante IA. Este aviso se incluye por transparencia para quienes prefieran evitar contenido desarrollado con estas herramientas.
What does USU do?
USU creates unlock challenges for modded survivors that would otherwise be available immediately.
Its main goals are:
- Automatically detect installed modded survivors.
- Respect survivors that already have their own native unlock requirements.
- Lock compatible survivors when USU assigns them a challenge.
- Unlock them by completing configurable missions.
- Store challenge configuration in an editable JSON file.
- Preserve survivor configuration when character mods are temporarily uninstalled.
- Support multiplayer with host-authoritative challenge configuration.
- Allow both shared-progress and per-player challenge designs.
- Keep vanilla and DLC survivor unlocks untouched.
Important behavior
Vanilla and DLC survivors
USU does not replace or interfere with the normal unlock requirements of vanilla or DLC survivors.
Characters such as Commando, Huntress, Loader, Railgunner, etc. keep their original Risk of Rain 2 progression.
Survivors with their own unlock system
If a modded survivor already defines its own unlockable, USU respects it and does not replace it.
Survivors without an unlock system
USU can automatically give these survivors a configurable challenge and lock them until the requirement is completed.
Current built-in challenges
The following survivor presets are currently included in the project.
Sora — Elegido de la Llave Espada
Apply 100 valid simultaneous status effects during a single run.
Valid effects are counted across the team and living entities:
- Negative effects on enemies.
- Positive effects on allies.
- Stackable effects count by stack.
- Non-stackable effects count once per affected entity.
- Expired effects and effects on dead entities stop contributing.
Progress: Shared
Reward: Session-wide
Ralsei — Oración de Esperanza
Restore a total of 10,000 health to your team during a single run.
The challenge uses valid non-regeneration healing and can include healing received by allied entities such as players, drones, turrets, and other friendly units.
Progress: Shared
Reward: Session-wide
The healing target was increased from 5,000 to 10,000 after multiplayer testing showed that healing drones and other allied healing sources could accumulate progress quickly.
Jhin — El Cuarto Acto
Deliver the final blow to a boss with a sufficiently powerful critical hit.
The exact damage threshold can be configured in Survivors.json.
Spy — Sin que me veas venir
Kill a boss with a valid fatal backstab.
Scout — Sed Termonuclear
Accumulate the required number of Bebidas energéticas during a run.
The current preset uses 15 Energy Drinks.
Rocket / Soldier — La gravedad es opcional
Kill enemies with explosions while airborne.
This challenge tracks lethal explosion damage and is designed around Rocket/Soldier-style explosive combat.
HUNK — La Parca No Falla
Complete one of the following individual streaks:
- Land 24 consecutive Railgunner M99 weak-point hits, or
- Score 24 consecutive kills with Bandit's Luces fuera.
Important multiplayer rule:
- Streaks belong to individual players.
- Two players cannot combine partial streaks.
- Any one player who completes a valid route completes the challenge for the session.
Example:
Railgunner A = 12 weak points
Railgunner B = 12 weak points
Result: 12 / 24 for each player
NOT 24 / 24 combined
Other Bandit abilities do not reset the Lights Out streak.
Only an actual use of Luces fuera that fails to kill resets that player's Bandit streak.
Progress: Per-player
Reward: Session-wide
Tinkaton — Forjada en Chatarra
Recicla 6 objetos; obtén Justicia demoledora y derriba
a la Unidad de Aleación con Bote explosivo de MUL-T.
The challenge is designed around Tinkaton's themes of scrap, metal, a massive hammer, and bringing down a flying metallic target.
Current requirements:
- Play as MUL-T.
- Convert at least 6 items into Scrap during the same run.
- Have Justicia demoledora (
Shattering Justice) in your inventory. - Defeat the Alloy Worship Unit.
- The final hit must come from Bote explosivo (
Blast Canister) or a valid child bomblet from the same skill.
Scrap progress is remembered for the run even if the Scrap is later consumed in a 3D Printer or another interaction.
The requirements belong to the same player. Different players cannot combine them.
Progress: Per-player
Reward: Session-wide
Multiplayer
USU is designed around host-authoritative multiplayer.
Challenge configuration
The host's configuration determines the effective mission parameters for the session.
A client may have different values in their local JSON, but the host's challenge configuration is the authoritative one for that lobby.
Progress types
USU supports two conceptual progress styles.
Shared progress
The whole team contributes to a single session total.
Examples:
- Sora
- Ralsei
Per-player progress
Each player has an independent counter or streak.
Examples:
- HUNK
- Tinkaton
If any single player completes a valid per-player route, the challenge is completed for the session.
Configuration
USU stores survivor challenge information in:
BepInEx/config/UniversalSurvivorUnlocks/Survivors.json
The file contains detected modded survivors and their challenge definitions.
Example:
{
"Challenge": {
"enabled": true,
"name": "Forjada en Chatarra",
"description": "Recicla 6 objetos; obtén Justicia demoledora y derriba\na la Unidad de Aleación con Bote explosivo de MUL-T.",
"type": "ScrapItemBossFinisher",
"parameters": {
"scrapAmount": 6,
"requiredBody": "ToolbotBody",
"requiredItem": "ArmorReductionOnHit",
"bossBody": "SuperRoboBallBossBody",
"finalDamageSource": "Secondary",
"requiredSecondarySkillToken": "TOOLBOT_SECONDARY_NAME",
"singleRun": true
}
}
}
Authoring Mode
During development, USU currently uses an internal Authoring Mode.
When enabled:
- Built-in source presets are treated as the development source of truth.
- Known survivor challenge entries can be automatically synchronized into
Survivors.json. - Changes made directly to a known preset inside JSON may be overwritten on startup.
This behavior is useful while developing and testing the built-in challenge library.
A future public customization workflow is planned so users can freely edit challenges without source presets overwriting them.
Planned configuration system
The long-term configuration system is intended to have three main parts.
Preset library
A library of ready-made challenge presets that can be assigned or imported to compatible modded survivors.
Presets should not be permanently tied to only the survivor they were originally designed for.
Per-survivor challenge editor
An in-game interface for editing:
- Challenge name
- Description
- Challenge type
- Objective
- Parameters
Survivors.json will remain the editable persistence layer.
Reusable challenge types
USU challenges are being built as reusable systems rather than one-off character-specific scripts whenever practical.
Examples include:
ApplyStatusEffectsHealHealthBossCriticalKillBackstabBossKillHoldItemStackAirborneExplosionKillsPrecisionExecutionStreakScrapItemBossFinisher
Locked survivor presentation
USU modifies the survivor selection presentation for survivors currently locked by the mod.
The intended presentation includes:
- Darkened survivor portrait.
- Vanilla-like locked framing.
- Challenge information on hover.
- Unlock notification when the challenge is completed.
- Normal full-color portrait after unlocking.
Vanilla and DLC survivor presentation is left untouched.
Persistence
Challenge configuration is stored separately from the survivor mod itself.
This allows USU to remember configuration for a survivor even if that character mod is temporarily removed and installed again later.
USU automatically reconciles the detected survivor catalog with the JSON configuration when the game starts.
Dependencies
USU is built for the BepInEx / R2API Risk of Rain 2 modding ecosystem.
Current development dependencies include:
- BepInExPack
- R2API
- R2API Networking
- HookGenPatcher
Exact dependency versions should be taken from the Thunderstore package manifest for each release.
Installation
Thunderstore Mod Manager / r2modman
- Install Universal Survivor Unlocks.
- Install the required dependencies automatically through Thunderstore.
- Install any supported modded survivors you want to use.
- Launch the game once so USU can generate or reconcile
Survivors.json. - Restart the game if required after modifying configuration.
Manual installation
Manual installation is intended for users already familiar with BepInEx.
Place the USU DLL and required package files in the appropriate BepInEx plugin directory and install all dependencies listed in the package manifest.
Using a mod manager is recommended.
Compatibility
USU is designed to coexist with:
- Vanilla survivor unlocks.
- DLC survivor unlocks.
- Modded survivors with their own unlock systems.
- Modded survivors without unlock systems.
- Multiplayer sessions where all players use compatible mod profiles.
Because Risk of Rain 2 mods can heavily modify skills, damage behavior, UI, networking, and unlockables, compatibility with every third-party mod cannot be guaranteed.
If another mod changes the exact behavior of a skill or survivor used by a USU challenge, that mission may need a compatibility adjustment.
Debugging
USU writes detailed information to the BepInEx log while the project is under active development.
Useful log prefixes include:
[HUNK]
[HealHealth]
[ApplyStatusEffects]
[ExplosionKill]
[TINKATON]
These logs are used to validate:
- Multiplayer ownership.
- Per-player streaks.
- Shared totals.
- Skill origin.
- Damage source.
- Healing behavior.
- Scrap conversion.
- Boss final-hit detection.
Known development notes
Some systems are still undergoing multiplayer and edge-case testing.
In particular:
- Bandit's remote Lights Out route has recently been redesigned to avoid fragile host-side shot/death timing correlation.
- Tinkaton's Scrap and Blast Canister requirements are being validated against real runs.
- Healing from allied drones and other friendly entities is intentionally visible during Ralsei balance testing.
- Explosion-origin classification may be tightened further for challenges that require specific explosive abilities.
- Dynamic localization for challenge text is planned for a future version.
Localization
Current built-in challenge text is primarily authored in Spanish.
When vanilla skill or item names are referenced, the project aims to use the names shown by the current Spanish Latin American (es-419) localization whenever confirmed.
A future localization system is planned so challenge text can automatically support multiple game languages.
Contributing / bug reports
When reporting a challenge problem, please include:
- USU version.
- Risk of Rain 2 version.
- Whether you were host or client.
- Survivor used.
- Challenge being attempted.
- Relevant mod list.
LogOutput.logfrom the affected session.- Clear description of what happened and what you expected to happen.
For multiplayer issues, logs from both host and client are especially useful.
Credits
Universal Survivor Unlocks is an independent Risk of Rain 2 modding project.
Risk of Rain 2 and its original characters, items, skills, and assets belong to their respective owners.
Third-party modded survivors belong to their respective mod authors.
USU does not claim ownership over those characters or their original assets.
AI Transparency
USU uses AI-assisted tools as part of its development workflow.
This can include assistance with:
- Programming
- Debugging
- Refactoring
- Challenge design
- Documentation
- Writing
- Visual resource ideation or generation
Final implementation decisions, testing, balancing, packaging, and project direction remain part of the project's human-led development process.
This disclosure is intentionally included so users can decide for themselves whether they are comfortable installing AI-assisted content.
License
See the included LICENSE file for the project's license terms.
Current project direction
USU is evolving from a collection of unlock challenges into a general-purpose configurable framework for modded survivor progression.
The long-term goal is to let players:
- Detect any compatible modded survivor.
- Assign a challenge preset.
- Edit it in-game.
- Share presets.
- Keep configuration between installs.
- Use the same system in multiplayer.
- Build custom progression without modifying the survivor mod itself.
If you find a modded survivor that USU does not handle correctly, logs and reproduction steps are highly valuable for improving compatibility.
CHANGELOG
Changelog
All notable changes to Universal Survivor Unlocks are documented here for Thunderstore and GitHub releases.
0.3.0 — Adaptive Generated Missions & Runtime Authority
Highlights
- Added the first public adaptive Generated mission pipeline for modded survivors that do not currently have an applicable Original, Official USU, or player CUSTOM mission.
- Generated missions are temporary runtime fallbacks: they are rebuilt from the currently installed survivor/profile context and are not persisted as player CUSTOM content.
- Added survivor gameplay/profile analysis, local power assessment, challenge-tier resolution, template compatibility scoring, deterministic candidate generation, and runtime mission materialization.
- Preserved creator-owned unlock content: vanilla/DLC progression and mod-author Original unlocks remain authoritative when present. USU Generated content does not replace them.
- Kept the 10 Official Mission v2 presets authoritative over Generated candidates and retained the 12 Legacy recipes as hidden reusable compatibility/editor assets.
Generated mission system
- Added
MissionProfileAnalyzerand related profile models to classify survivor bodies, skills, effects, usage patterns, and mission-relevant capabilities. - Added local power/complexity assessment plus ChallengeTier resolution used to scale generated mission difficulty without hardcoding individual survivor names.
- Added compatibility-scored reusable mission template families and a deterministic generator that selects temporary mission candidates from the local installed/unlocked context.
- Added runtime materialization for the currently supported Generated families:
ExecutionHealingSupportResourceMasteryMeleeCombatProjectileCombat
- Generated missions use compatible alternative performers rather than requiring the target survivor itself, and the generated target is never used to unlock itself.
- Added generated presentation formatting with compact vanilla-style text, including the existing two-line / 50-character-per-line presentation rule. Generic mechanic missions no longer expose internal performer counts such as
+7; character suffixes are reserved for missions that actually require specific characters. - Retained the historical 100-kill challenge only as an emergency compatibility fallback. Its presence is not used as a reason to replace Original creator content.
Runtime, authority, and presentation
- Added a runtime Generated materialization bridge into
SessionMissionRegistryso Generated candidates become real Mission v2 definitions without writing them intoSurvivors.json. - Added effective mission routing so Mission v2 Generated content is used for challenge evaluation instead of accidentally progressing the historical fallback in parallel.
- Added
AllowedPerformerSkillruntime condition support and generalized skill-token/internal-skill matching for generated performer constraints. - Added Mission v2 objective support used by the new generated families for healing and compatible skill/resource actions.
- Added an effective presentation bridge for Character Select / achievement-facing text so Generated and Official USU missions present the mission that is actually active.
- Original providers now explicitly bypass USU EFFECTIVE token refresh, preserving the creator's own presentation for Artillerist, Shock Trooper, Aurelion Sol, Auriel, Enforcer, Nemesis Enforcer, Miner while Original is selected, and future compatible Original providers.
- Miner remains the intentional curated exception where the player can explicitly choose between the creator's Original unlock and USU's separate
Excavación / Excavationpreset.
Multiplayer/session groundwork
- Generated missions participate in the same host-authoritative session snapshot model as other effective missions.
- Host Character Select snapshots include Generated/Official/selected mission data without persisting host choices into a client's local configuration.
- Generated progress scopes are materialized as shared session progress where required by the current generated templates.
- Host-side lobby snapshot construction and fragmented dispatch were validated with the current 23-survivor test profile. Broader client/run validation continues during the public release test cycle.
Validation
- Current test profile: 7 Generated candidates → 7 materialized, with
Unsupported families: 0andInvalid materializations: 0. - Confirmed that Original provider presentation is preserved while Generated/Official USU presentation continues to refresh normally.
- Confirmed that generated mission data remains temporary (
Persistencia: no) and does not become a stored CUSTOM mission.
0.2.2 — Mission Authority & Persistence Foundation
Highlights
- Separated the 10 current official Mission System v2 presets from the 12 hidden Legacy recipes. Legacy recipes remain preserved for compatibility, future CUSTOM missions, and later editor/generator work.
- Added Miner's independent USU preset Excavación / Excavation while preserving MinerUnearthed's native Original unlock. Miner remains Original by default and can explicitly switch Original ↔ USU.
- Added stable survivor identity using
ContentPack + Body(survivor:<source>:<body>) so persisted mission ownership no longer depends only on a transient runtime entry. - Upgraded
Survivors.jsonto schema v2 withdormantMissionsand the explicitPendingContentstate for survivor mods that are temporarily absent. - Reinstalled survivors now rehydrate the same persisted mission/configuration by stable identity while rebuilding runtime metadata from the currently installed mod.
Persistence and compatibility
- Absent survivor mods persist only the minimum required data: stable identity, Body/Source, challenge/Mission v2 configuration, provider/selection state, preset relationship, CUSTOM data, and forward-compatible mission metadata.
- Runtime character snapshots such as skills, skins, prefabs, lore, stats, Unity objects, and ContentProfile data are not stored as dormant truth.
- Added migration from the previous
MissingContentpersistence model to mission-only dormant records. - Official USU missions may remain prepared while their referenced survivor mod is not installed.
Provider,SelectionMode,BasePresetId,CustomMission, Mission v2 data, and unknown forward-compatible fields are preserved during normalization.- Future unsupported
schemaVersionvalues put persistence into read-only mode instead of allowing an older build to overwrite newer data. - Saves continue to use a temporary file before replacement and keep a previous-version backup.
Mission authority and provider handling
- Added centralized authority validation for the fixed current set of 10 Official / 12 Legacy presets, stable IDs, Body/Source bindings, Mission v2 metadata, localization bindings, reward ranges, and Legacy isolation.
- Centralized provider policy and provider selection so the embedded Risk Of Options UI, fallback UI, persistence, and runtime assignment paths share the same Original/USU/CUSTOM precedence rules.
- Preserved the global Original-first policy. Explicit
UserSelectedchoices are not silently replaced by automatic fallback logic. - Miner is the current curated direct Original ↔ USU exception and targets
creator.official.miner.excavation.
Runtime and maintenance
- Consolidated gameplay bootstrap, Mission v2 run lifecycle, Legacy run lifecycle, shared gameplay event hooks, polling tiers, and duplicated scrapper handling without intentionally changing mission semantics.
- Reduced duplicated high-frequency engine subscriptions and retained full-rate polling only where mission behavior requires it.
- Removed closed development-only migration/dead-code paths and reorganized survivor, persistence, provider, UI, Mission preset, and runtime files by responsibility.
- Public release builds now keep preset
AuthoringModedisabled; official assigned snapshots continue to refresh through their stableBasePresetIdpath.
Release validation
- Mission Authority runtime validation: 10 Official / 12 Legacy / Miner direct Original ↔ USU.
- Miner persistence workflow validated through installed → absent/PendingContent → reinstalled, preserving the same stable identity,
Excavación,Provider=USU, andSelectionMode=UserSelectedwithout leaving a duplicate dormant record. - This release does not introduce adaptive mission generation, power scoring, ChallengeTier resolution, or random template generation; those remain future work.
0.2.1 — Survivor Definitions & Mission Library Update
Release focus
- Closed the current curated survivor presentation/localization pass for the installed/tested survivor set.
- Added the first public Mission Library/provider-management interface while keeping the full mission editor for a later release.
- Kept the nine creator-made unlock missions on the existing Mission System v2 backend; this release does not migrate native/legacy unlock logic into Survivor Definitions.
Added
- Added the central
SurvivorDefinition/SurvivorDefinitionRegistrysystem. - Added curated Definitions for 15 survivor integrations:
- Aurelion Sol
- Auriel
- Enforcer
- Ralsei
- Sora
- Wooper
- Tinkaton
- HUNK
- Jhin
- Miner
- Rocket
- Scout
- Spy
- Heretic
- Nemesis Enforcer
- Added manual curated Spanish localization (
es-419/es-ES) plus English repairs for visible modded-survivor content where needed. - Added survivor content profiles covering overview/details, skills, keywords, skins, unlock information, and Logbook-facing lore/Notes.
- Added runtime content catalog services for survivors, items, equipment, skills, bodies, and stages, including discovery-aware presentation support.
- Added Mission Library UI with an optional embedded Risk Of Options integration.
- Added a Character Select launcher fallback when Risk Of Options is not installed.
- Added provider/assignment services for Original/USU/Custom state, preset assignment, restore-original behavior, preset snapshot refresh, and runtime mission refresh.
- Added centralized
UsuLogpolicy withLogging.VerboseLogging=falseby default. - Added runtime context tracking used by mission/content systems.
Changed
- Updated Jhin's active El Cuarto Acto requirement to 4,444+ lethal critical damage in the current preset/configuration source.
- Expanded survivor detection/content-profile handling so curated Definitions can activate without hard references to external survivor DLLs.
- Heretic now uses a special Definition path compatible with Moffein-Heretic exposing the vanilla
HereticBody/SurvivorDef instead of registering a separate modded SurvivorDef. - Updated locked-survivor presentation, browser/profile refresh behavior, and configuration reconciliation for the new profile/Definition layers.
- Improved runtime refresh and assignment handling so provider changes can be reflected without replacing the player's unrelated personal configuration.
- Risk Of Options is now a soft dependency/integration, not a required package dependency.
Localization / survivor presentation
- Curated visible-content coverage now includes character overview/details, skills, keyword panels, skins, achievements/requirements, and lore where available for the registered Definitions.
Notescontinues to represent Logbook lore only and follows the real native Logbook discovery state instead of a separate USU-known flag.- Removed the runtime automatic-translation direction from the current release path; 0.2.1 uses curated manual localization.
Compatibility and release metadata
- Bumped plugin, assembly project metadata, source manifest, and Thunderstore staging manifest to
0.2.1. - Updated README documentation for the current Mission Library, optional Risk Of Options integration, Definitions, and provider behavior.
- Preserved native survivor unlock providers when they exist; Definitions do not replace creator-owned unlock logic.
- Full visual mission authoring/editing remains planned for a later release.
0.2.0 — Creator Challenges Update
Release focus
- This release is focused on public testing and balance feedback for the current 9 creator-made survivor unlock challenges.
- The in-game preset library, preset reassignment UI, editable copies, and full mission editor are not included yet.
- Internal preset/library architecture is included so future releases can build on the same stable mission definitions without reverting the current challenge work.
Added
- Added/finished the current official Mission System v2 presets for:
- Sora — Elegido de la Llave Espada
- Ralsei — El poder de la bondad
- Jhin — El Cuarto Acto
- Spy — Sin que me veas venir
- Scout — Sed Termonuclear
- Rocket — La gravedad es opcional
- HUNK — La Parca No Falla
- Tinkaton — Forjada en Chatarra
- Wooper — De vuelta al agua
- Added localized official challenge names/descriptions for English and Spanish (
es-419/es-ES), with English fallback. - Added Lunar Coin rewards to the official generated achievements:
- Sora:
+4 - Ralsei:
+3 - Jhin:
+4 - Spy:
+3 - Scout:
+2 - Rocket:
+4 - HUNK:
+5 - Tinkaton:
+5 - Wooper:
+2
- Sora:
- Added
MissionConfig/ preset-origin metadata so official missions can retain a stable source preset identity for the upcoming library/editor workflow. - Added the read-only
MissionPresetLibraryServicelayer over the built-in preset catalog. - Added internal library access for assignable missions, official missions, legacy missions, Objective templates, and Condition templates.
- Added/expanded reusable Mission v2 runtime handlers for current official mission compositions, including:
KillHoldItemStackPickupItem/ no-item-pickup trackingCompleteTeleporterScrapItemsBombingRunCarryEquipmentCompleteEndingRecruitMinionsDefeatUmbraWavesLeaveStage
- Added reusable tracking/evaluation support for skill history and pre-damage target status so conditions can validate actions such as Wooper's poisoned Ravenous Bite requirement.
- Added global Mission v2 progress logging with milestone-based output to reduce log spam while retaining useful progress diagnostics.
Current official challenge changes
- Sora — Elegido de la Llave Espada
- Replaced the old 100-status-effect challenge with a Bulwark's Ambry / Artifact of Vengeance mission.
- Requires Mercenary to be represented in the party, the Vengeance Umbra encounter to be completed, and the Ambry to be exited successfully.
- Uses Shared mission progress.
- Ralsei — El poder de la bondad
- Replaced the old 10,000-healing challenge with a Devotion-focused mission.
- Requires Captain or Seeker, recruiting 3 Lemurian allies, and completing the teleporter route.
- Jhin — El Cuarto Acto
- Preserves the lethal boss critical-hit concept at 44,444+ damage.
- Added a dedicated
JhinOfficialpreset identity so Jhin is consistent with the other official creator presets.
- Spy — Sin que me veas venir
- Requires Bandit, Serrated Dagger, a valid boss backstab, and a fatal finishing hit.
- Removed the older Smoke Bomb prerequisite.
- Scout — Sed Termonuclear
- Reworked into two alternative routes:
- Hold 8 Energy Drinks, OR
- Complete the first-stage teleporter within 4 minutes without picking up items.
- Reworked into two alternative routes:
- Rocket — La gravedad es opcional
- Reworked into 3 successful bombing runs.
- Each bombing run requires 5 qualifying explosion kills before landing, with landing required between successful runs.
- HUNK — La Parca No Falla
- Replaced the old 24-hit / 24-kill execution streak challenge.
- Requires continuously protecting the Fuel Array and either escaping the Moon or obliterating at the Obelisk.
- Losing the required equipment or dying invalidates the route.
- Tinkaton — Forjada en Chatarra
- Reworked into a three-objective Mission v2 composition:
- Scrap 6 items.
- Hold Shattering Justice.
- Defeat a valid mechanical Eye boss target.
- Removed the old mandatory MUL-T + Blast Canister finishing-hit requirement.
- Reworked into a three-objective Mission v2 composition:
- Wooper — De vuelta al agua
- Reworked to require Acrid in Wetland Aspect.
- Requires 20 kills with Ravenous Bite against enemies that were already poisoned before the qualifying bite.
- Removed the old Bison Steak and stage-completion requirements.
Multiplayer
- Continued the host-authoritative session mission model.
- Mission snapshots are frozen/synchronized for the active multiplayer session instead of replacing each client's personal configuration.
- Shared and PerPlayer mission scopes are represented explicitly in Mission v2.
- Improved multiplayer completion routing and session unlock delivery.
- Preserved independent personal progress for PerPlayer mission routes.
Performance and diagnostics
- Added runtime activity planning so inactive legacy/runtime trackers can avoid unnecessary work.
- Added runtime budgets/throttling for periodic mission scans.
- Reduced repetitive progress/status/healing/kill logging.
- Added milestone-based progress output based on objective size.
- Prevented completed mission routes from continuing to emit unnecessary progress logs.
- Suppressed normal local progress/reward logging when all local profiles already own the survivor unlock, while preserving required network/session processing.
- Prevented repeated
Unlock temprano asignadomessages when the same generated unlock is revisited during ContentPack construction. - Hardened Ralsei's Devotion recruitment detection:
LemurianHarnessis resolved through the item catalog when available and falls back toDevotedLemurianControllerwhen the static marker asset is unavailable.
Preset catalog cleanup
- Normalized the internal built-in preset catalog before exposing it to players.
- The current library reports:
- 9 assignable official missions
- 12 hidden legacy mission recipes
- 26 Objective templates
- 35 Condition templates
- Legacy mission recipes remain available internally for compatibility/history but are no longer treated as new assignable missions.
- Official missions are returned as fresh copies from catalog factories so source presets are not mutated.
Changed
- Bumped the public release version to
0.2.0. - Updated README documentation to match the actual current nine official mission designs.
- Updated README multiplayer examples/scopes to match the Mission v2 definitions.
- Updated HUNK attribution to the current
rob-HUNKpackage and added Wooper to survivor credits. - Clarified that Risk Of Options and the in-game mission editor are not dependencies/features of 0.2.0.
- Clarified that current official presets are still source-synchronized and that permanent editable copies are a future feature.
Known validation focus
- Public testing is especially useful for balance/theme feedback across all nine official challenges.
- HUNK, Tinkaton, Sora, and Ralsei benefit from additional end-to-end testing across different mod profiles/multiplayer sessions.
- Devotion/Lemurian content can produce asset-assignment warnings in some profiles; reports should include
LogOutput.logso compatibility issues can be separated from unrelated third-party warnings.
Planned after 0.2.0
- Preset assignment service for assigning an official mission to another compatible detected survivor.
- In-game preset library entry point/configuration.
- Safe editable copies of official presets.
- Full Mission System v2 editor.
- User-created/shareable presets.
0.1.9
Added
- Added the first foundation of the new Mission System v2.
- Added reusable mission models for:
MissionDefinitionMissionRouteMissionObjectiveMissionConditionMissionRulesMissionTargetMissionPreset
- Added support in the new mission model for alternative mission routes:
- Conditions inside a route use
AND. - Different routes can work as
ORalternatives.
- Conditions inside a route use
- Added mission progress scope definitions for:
SharedPerPlayer
- Added the creator-preset / custom-mission ownership model.
- Creator presets are treated as original source definitions and are not intended to be edited directly.
- Added groundwork for player-created custom missions based on creator presets without replacing the original preset.
- Added initial
Killobjective evaluation for Mission System v2. - Added initial reusable mission conditions:
AirborneGroundedRequiredSurvivor
- Added reusable mission target categories:
AnyEnemyBossEliteSpecificBodySpecificBoss
- Added support for identifying specific enemies and bosses through stable internal body IDs such as
BrotherBodyorSuperRoboBallBossBody. - Added runtime
KillEnemieschallenge tracking. - Added GitHub Sponsors integration through
.github/FUNDING.yml. - Added bilingual project support and donation information to the README.
- Added Discord community sections for questions, bug reports, survivor requests, preset ideas and suggestions.
- Added detailed credits for the third-party survivor mods referenced by USU presets.
Multiplayer
- Reworked challenge completion routing around a centralized multiplayer-aware completion system.
- Improved session-wide unlock delivery.
- Preserved the host-authoritative challenge model.
- The host's effective challenge configuration remains authoritative during multiplayer sessions.
- Shared challenges can receive valid progress from multiple players.
- Per-player challenges continue to maintain independent player progress.
- A valid individual route can complete its challenge for the session without combining invalid partial player progress.
- The mission architecture now explicitly represents
SharedandPerPlayerprogress scopes. - Player-local configuration is intended to remain separate from the host's effective session configuration.
Changed
- Bumped Universal Survivor Unlocks to version
0.1.9. - Updated package metadata for Thunderstore.
- Updated the Thunderstore website link to the project's GitHub Sponsors page.
- Reworked the README to better explain:
- Built-in creator presets.
- Multiplayer behavior.
- Configuration persistence.
- Mission System v2.
- Support and donations.
- Discord/community support.
- Survivor mod attribution.
- AI usage transparency.
- Updated Jhin documentation to match the current preset requirement of 44,444 critical damage.
- Updated Scout documentation to match the current preset name Energía Atómica.
- Documented Rocket's current requirement of 15 airborne explosion kills.
- Clarified that Ralsei's challenge ignores passive regeneration.
- Improved separation between currently functional challenge trackers and the next-generation universal mission architecture.
Fixed
- Fixed outdated project version metadata that was still reporting
0.1.6in the.csproj. - Fixed inconsistent package version metadata between the plugin and Thunderstore manifests.
- Corrected outdated README and CHANGELOG information that no longer matched current preset values.
- Removed outdated documentation implying that all multiplayer challenge tracking was still experimental.
- Improved documentation around creator presets so users are not encouraged to directly overwrite source presets.
Development
- Existing challenge trackers remain functional while presets are progressively migrated to Mission System v2.
- Mission System v2 currently provides architectural groundwork and initial event evaluation; not every planned objective or condition is exposed to players yet.
- The future in-game mission editor will operate on custom mission copies instead of directly modifying creator presets.
0.1.8
Added
- Added Tinkaton preset: Forjada en Chatarra.
- Added the new
ScrapItemBossFinisherchallenge type. - Added tracking for items converted into Scrap during a run.
- Added final-hit validation for MUL-T's Bote explosivo against the Alloy Worship Unit.
- Added an AI usage transparency notice to the README.
Changed
- Increased Ralsei's Oración de Esperanza healing requirement from 5,000 to 10,000.
- Updated Bandit's multiplayer HUNK route to reduce false streak resets for remote clients.
- Shortened Tinkaton's challenge description to fit correctly in the survivor selection UI.
Testing
- Continued multiplayer validation for HUNK.
- Added diagnostic logging for Tinkaton's Scrap and final-hit conditions.
0.1.6
Added
-
Added built-in unlock presets for additional supported modded survivors:
- Sora —
Elegido de la Llave Espada - Ralsei —
Oración de Esperanza - Jhin —
El Cuarto Acto - Scout —
Sed Termonuclear - Spy —
Sin que me veas venir - Rocket —
La gravedad es opcional - HUNK —
La Parca No Falla
- Sora —
-
Added the
descriptionfield to survivor challenge configuration. -
Added support for custom challenge descriptions displayed by generated unlocks.
-
Added the
HealHealthchallenge type.- Tracks actual health restored to Player-team entities during a run.
- Supports players, allied summons, drones and turrets.
- Does not count barrier, shields or overhealing.
-
Added the
BossCriticalKillchallenge type.- Supports boss kills requiring a minimum critical-hit damage value.
- The current Jhin preset requires a lethal critical hit of at least 4444 damage.
-
Added the
HoldItemStackchallenge type.- Tracks item stacks independently for each player.
- Player inventories are never combined.
- The current Scout preset requires one player to hold 15 Energy Drinks.
-
Added the
BackstabBossKillchallenge type.- Uses Risk of Rain 2's backstab detection.
- The current Spy preset requires Bandit's Serrated Dagger to deliver the lethal backstab to a boss.
-
Added the
AirborneExplosionKillschallenge type.- Tracks lethal explosion / blast kills while the owning player remains airborne.
- Touching the ground resets that player's streak.
- Supports blast and shockwave kills.
- Supports player-owned explosive drones and minions.
- Drone or minion airborne state does not affect progress; only the owning player's airborne state is checked.
- Damage-over-time kills occurring after an explosion do not count.
-
Added the
PrecisionExecutionStreakchallenge type.- Supports consecutive Railgunner M99 weak-point hits.
- Supports consecutive Bandit Lights Out kills.
- The current HUNK preset requires either 24 consecutive Railgunner weak-point hits or 24 consecutive Lights Out kills.
-
Added player ownership resolution for gameplay events generated by drones and minions.
-
Added server-side tracking systems for the new challenge types.
-
Added built-in preset authoring synchronization support for development.
Changed
- Renamed Sora's built-in challenge from
Guerrero de la llavetoElegido de la Llave Espada. - Updated built-in survivor presets to use explicit challenge descriptions.
- Expanded gameplay challenge architecture to support multiple reusable server-tracked challenge types.
- Improved individual-player tracking so challenge progress from different players is not incorrectly combined.
- Improved handling of current Risk of Rain 2 APIs for item counts, damage sources and bullet hit information.
Development / Validation
- The new gameplay challenge implementations compile successfully.
- A general gameplay validation pass is still pending for the newly added survivor presets.
- Full multiplayer behavior remains experimental and requires additional validation.
0.1.3
- Added the built-in default unlock preset for Dragonyck's Sora.
- Sora now automatically receives the
Guerrero de la llavechallenge when first detected by Universal Survivor Unlocks. - The default Sora challenge uses
ApplyStatusEffectsand requires 100 valid active status effects simultaneously during a single run. - Added automatic migration for Sora configurations using the legacy default
KillEnemies 100challenge. - Existing customized Sora challenge configurations are preserved and are not overwritten.
0.1.1
- Added initial support for configurable survivor challenges.
- Added
ApplyStatusEffectschallenge tracking. - Status effect progress is calculated from effects currently active during a run.
- Negative status effects are counted only on enemies.
- Positive status effects are counted only on allies.
- Stackable effects contribute once per active stack.
- Non-stackable effects contribute once per affected entity.
- Multiple enemies and allies can contribute to the total simultaneously.
- Status effects stop contributing when they expire, are removed, or the affected entity dies.
- Added server-side tracking groundwork for multiplayer-compatible challenges.
- Improved dynamic survivor unlock handling and challenge configuration.
[0.1.0] - Initial Public Release
Added
- Automatic detection of modded survivors.
- Support for modded survivors loaded through different ContentPack implementations.
- Automatic creation of unlock requirements for modded survivors that do not provide their own character unlock.
- Automatic locking of newly detected supported modded survivors on first startup.
- Preservation of unlock requirements created by original survivor mod authors.
- Vanilla and official DLC survivors are excluded from the custom unlock system.
- Automatic generation of
Survivors.json. - Automatic preservation of unavailable survivor configurations.
- Automatic creation of
Survivors.backup.jsonwhen updating an existing configuration. - Default challenge configuration for newly detected supported survivors:
type:KillEnemiesamount:100
- Custom
UnlockableDefgeneration for supported modded survivors. - Custom achievement definitions used by generated survivor unlocks.
- Modded survivor portrait support for generated achievement icons.
- Locked survivor portrait handling in the character selection screen.
- Compatibility with RealerCheatUnlocks for manually granting and revoking generated unlocks.
- Logging for survivor detection, source identification, unlock generation and configuration synchronization.
Tested Compatibility
The detection and locking system has been tested with several modded survivors using different loading implementations, including:
- Sora
- Ralsei
- HUNK
These survivor mods are not dependencies.
Configuration
The generated configuration file is located at:
BepInEx/config/UniversalSurvivorUnlocks/Survivors.json
When using r2modman or Thunderstore Mod Manager, the file is located inside the selected profile.
Known Limitations
- Gameplay challenge progress tracking is not yet implemented.
- Challenge definitions such as
KillEnemiesare currently stored in the JSON and used to define generated unlock requirements, but they do not yet automatically complete through gameplay. - Additional challenge types are planned for future versions.
Planned
- Functional gameplay challenge tracking.
- Additional challenge types.
- Boss-related unlock conditions.
- Elite enemy challenges.
- Stage progression challenges.
- Difficulty-based challenges.
- Run completion challenges.
- Custom challenge presets for exceptionally powerful modded survivors.
- Additional compatibility testing with survivor frameworks and character packs.