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.
Doppelganger
Deceptive Tier 3 player mimic with hard void avoidance, safe traversal, real respawn timer and player-attributed hostility.
| Last updated | 5 hours ago |
| Total downloads | 50 |
| Total rating | 0 |
| Categories | Mods Monsters Client-side Server-side AI Generated |
| Dependency string | GGProductions-Doppelganger-0.4.12 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2305Rune580-REPO_SteamNetworking_Lib
API/Library for networking using Steamworks socket relays. Very much WIP, but still usable, mostly.
Preferred version: 0.1.2README
Doppelganger for R.E.P.O. — alpha 0.4.12
A Tier 3 enemy that disguises itself as a player to lure and attack the group.
Implemented
- One configurable 70% roll per natural Tier 3 selection, starting on numbered level 3. At most one Doppelganger can be selected naturally in a level; explicit test/command spawns remain unlimited.
- Waits for player colors and cosmetics to synchronize, then copies one random player's body, skin, cosmetics and display name on every client.
- Runs as its own registered enemy entity. No Huntsman behaviour, model, animation, attack, weapon or audio component remains on the live prefab.
- Uses its own forward vision. Walls and objects block sight, and an unseen player is not attacked.
- Crouches to look under furniture and can detect a crouched or crawling player when the lowered sight line is clear.
- Sprints after close targets, can jump low obstacles, and investigates voice, TTS chat, footsteps and other noises recognized by the game.
- Draws a visual clone of the real Handgun item. Its shots have distance-based spread, can miss or hit another player, and deal 20 damage on actual impact.
- Uses the copied player's real eye bones to look toward nearby speakers, investigated noises and combat targets, with player-style idle eye darts.
- Procedurally moves the copied player's head, upper body, lean, tilt and legs while looking and moving. Navigation uses short lateral variations, occasional jumps and strafing instead of following one perfectly straight bot path.
- Can stop during a peaceful search or follow, open an independent visual copy of the player's map with its arm pose and spatial sounds, look down at it and scan the room before closing it and continuing. It never controls the real player's TAB map.
- Its first spawn is moved to the valid level point farthest from every player. It starts without knowing any player position, sprints through one room at a time and scans with real line of sight until someone enters its view.
- Keeps one stable search route, validates complete paths and changes rooms only after a sustained path failure. It disables risky lateral offsets near stairs, catwalks and holes; after 2.25 seconds without progress it tries a safe detour or returns to its last stable NavMesh point.
- Validates solid ground and death-pit triggers across the immediate walking corridor, physically blocking movement before an unsupported edge. It first retries without lateral variation, then stops and seeks another route if the floor is still unsafe. Random jumps, obstacle jumps and landings also require validated ground; a failed managed gap jump is recovered to a safe platform before it can fall. Sprinting is suspended near voids. Stair ascent can use a short assisted jump, while guided stair descent no longer repeatedly enters Tumble or resets its route.
- Starts peaceful, hides its enemy grab label, follows a player only after finding them naturally and answers nearby speech from its recorded voice pool. Prolonged close interaction or being held builds aggression; taking damage from a player makes it hostile immediately. Damage from monsters, lasers, stairs, falls and unrelated physics does not break its disguise. Wall and floor impacts caused by a player's recent Grab throw retain that player attribution and do trigger hostility.
- Remembers the last visible position for 10 seconds. Losing an aggressive target returns it to its room-search route and resets a 90-second hostile search window; if that expires without finding anyone, it becomes peaceful.
- While peaceful, approaches a nearby cart from behind before using its real Strong mode. Carts stay directly ahead with stabilized physics. A carried valuable is kept under direct host control at head height in front of the body, with collision sweeps preventing it from crossing or becoming wedged in walls.
- After a cooldown of at least three minutes, it can fake a quick player tumble and ground hit. At impact, every enemy is secretly redirected to the followed player's current position.
- During a peaceful search it may stage an innocent scene: it chooses a loose valuable, ignores players, carries it slowly to the active extraction point or a cart, deposits it carefully, then resumes searching rooms. It cannot jump while holding the valuable; an unsafe floor segment stops the delivery and releases the object on the safe platform instead of following it into the void.
- Enters the player's tumble animation while grabbed, stunned or airborne and follows the grabbable body's full physical position and rotation.
- Uses the real sprint transition, flashes red when hurt, and plays a short player-style tumble/death sequence with both buildup and death sounds.
- Carries a visual copy of the player's real flashlight in its left hand. It uses the native flashlight arm pose and aims its independent beam with the procedural gaze without controlling the copied player's light.
- Crouching presses the visual switch, plays the spatial off click, lowers the left arm, retracts the flashlight and extinguishes the beam. Standing plays the inverse switch-on animation and sound.
- Has 1000 health, deals 10 damage with a close strike and 20 on a gun hit.
- Can pull nearby physics objects with the copied player's grab material, endpoint effect, arm/claw animation and spatial audio.
- Does not naturally despawn.
- Drops a grabbable, non-valuable player-style physical head with copied collider material, visible renderers, mass and impact audio. One player-head-sized spherical collider shares the exact object used by Grab; void recovery preserves a safe floor/NavMesh point for respawn after 120 seconds.
- Drops the large native enemy Soul Orb beside its head with an exact value of $10,000. The orb remains indestructible for at least seven seconds so its normal death-pit bounce can return it safely.
- Can retain short phrases from the copied player in memory and replay them from its moving mouth with randomized pitch/speed, distance falloff, wall muffling and mouth animation.
- Repairs Hauler/Scout mounting when RepoAdminMenu's
No Tumbleoption would otherwise leave the driver standing and the grab state orange. - Works around the null-unsafe
loaforcsSoundAPI_REPOloop prefix without disabling SoundAPI or sound packs, restoring looping vehicle audio. - Integrates with
TimerMod: its enemy panel displays the head's real remaining respawn time (120 seconds by default), not the long internal timer used only to prevent natural despawning. - As host, press
F7beside the idle cosmetic machine to redeem all stored skin Tax Tokens quickly. Cosmetic rewards and vanilla surplus-currency conversion are preserved.
Installation
Install BepInExPack 5.4.2305, REPOLib 4.2.0 and REPO SteamNetworking Lib 0.1.2,
then copy REPO.Doppelganger.dll into:
BepInEx/plugins/Doppelganger/
All multiplayer peers must use the same version.
Test key
The host can press F9 during a generated level to spawn a Doppelganger
nearby. Change or disable the key in:
BepInEx/config/com.codex.repo.doppelganger.cfg
The fast Tax Token key defaults to F7 and is configurable in the same file.
Full debug telemetry defaults to F6. It opens a live panel with state,
objective, sight, heard sounds, hostility percentage, cooldowns, Grab and
position. While enabled, major transitions are also written to
LogOutput.log. The option is off by default.
Alpha limitations
- The copied body is still a visual replica rather than a real
PlayerAvatar, so fine procedural head and arm movements can differ. - The weapon uses the real Handgun item visual, while the AI controls firing directly for consistent multiplayer behaviour.
- Grab reproduces the player's presentation and front-held movement, but the AI still does not perform free mouse rotation or throws like a human player.
- Voice replay waits until the selected player has spoken a useful phrase.
Credits
The in-memory voice design was informed by the MIT-licensed ToxesFoxes/Repo-Mimics project. REPOLib is by ZehsTeam and RepoSteamNetworking is by Rune580.