Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# TrollMod Changelog

## v1.5.4 - Among Us 2025.11.18 (v17.1.0)

**Updated for Among Us v17.1.0** - Full compatibility with the latest game version.

### New Roles
- **Medic** (Crewmate) - Revive dead crewmates with synchronized RPC abilities
- **Jester** (Neutral) - Win by getting voted out during meetings

### New Abilities
- **Medic Revive Button** - Synchronized revive system (30s cooldown, 2 uses max)
- Target validation with visual outline feedback
- Full RPC synchronization across all clients

### All Roles (9 Total)
**Crewmate Roles:**
- Guardian - Protects allies with timely shields
- Medic - Revives dead crewmates (NEW)

**Neutral Roles:**
- Troll - Win when someone kills you
- Jester - Win by getting voted out (NEW)
- Trickster - Sow chaos with smoke abilities
- Bard - Musical manipulation abilities
- Illusionist - Create visual illusions

**Impostor Roles:**
- Shadow - Strike from darkness with stealth
- Warden - Lock doors to control the battlefield

### Technical Features
- Full RPC synchronization for all abilities
- Android compatibility through MiraAPI IL2CPP support
- Custom action buttons with cooldown management
- Visual feedback with target highlighting

Built with MiraAPI and Reactor frameworks.
75 changes: 75 additions & 0 deletions DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# TrollMod - Mod Description

## Short Description

TrollMod adds 9 unique custom roles to Among Us with synchronized abilities and full RPC support. Features crewmates like Guardian and Medic with revive capabilities, neutral roles like Troll and Jester with unique win conditions, and impostors like Shadow and Warden. Compatible with Among Us v17.1.0.

---

## Long Description

**TrollMod** is a comprehensive Among Us mod that introduces 9 custom roles with unique synchronized abilities, custom action buttons, and diverse win conditions, bringing fresh gameplay mechanics and strategic depth to your Among Us sessions.

### Custom Roles

**Crewmate Roles:**
- **Guardian** - Protect your fellow crewmates with timely shields, keeping them safe from impostor attacks.
- **Medic** - Revive dead crewmates with synchronized RPC abilities. Bring fallen allies back to life with limited uses for strategic gameplay.

**Neutral Roles:**
- **Troll** - A unique neutral role that wins when killed by an impostor. Play mind games and try to get yourself eliminated!
- **Jester** - Win by getting voted out during meetings. Act suspicious without getting killed to achieve victory.
- **Trickster** - Sow chaos with smoke abilities and manipulate situations for personal gain.
- **Bard** - Use musical manipulation abilities to influence the game state and player actions.
- **Illusionist** - Create visual illusions to confuse and mislead other players.

**Impostor Roles:**
- **Shadow** - Strike from the darkness with enhanced stealth capabilities and precision kills.
- **Warden** - Control the battlefield by locking doors. Create safe zones or trap suspects with strategic door control.

### Custom Abilities & Buttons

**Synchronized Abilities:**
- **Medic Revive** - RPC-synchronized revive system (30s cooldown, 2 uses max)
- **Guardian Shield** - Protective barriers with duration management
- **Shadow Cloak** - Enhanced stealth abilities with visual effects
- **Warden Lock** - Strategic door control for map dominance
- **Trickster Smoke** - Chaos creation with area effects
- **Bard Tune** - Musical manipulation of game state
- **Illusionist Glimmer** - Visual illusion creation

### Features

**Advanced Synchronization:**
- Full RPC synchronization across all clients
- Android compatibility through MiraAPI IL2CPP support
- Real-time ability synchronization for multiplayer

**Technical Excellence:**
- Built with MiraAPI and Reactor frameworks
- Custom action button system with visual feedback
- Target validation with outline highlighting
- Cooldown management and limited uses system
- Effect duration with automatic cleanup

**Balanced Gameplay:**
- Each role carefully designed with unique strengths
- Multiple win conditions for strategic variety
- Seamless integration with vanilla Among Us mechanics
- Configurable role counts and ability parameters

**Technical Details:**
- Compatible with Among Us v17.1.0 (2025.11.18)
- Requires BepInEx 6.0.0+
- Optimized for both PC and Android platforms
- Full multiplayer synchronization support

### Perfect For

- Players seeking advanced Among Us experiences
- Communities wanting synchronized multiplayer gameplay
- Streamers needing engaging content with visual effects
- Competitive players looking for strategic depth
- Anyone wanting to elevate Among Us beyond vanilla

Transform your Among Us games with TrollMod - where every round brings synchronized abilities, strategic decisions, and unforgettable moments!
50 changes: 49 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,55 @@ TrollMod is an Among Us Mod Bundle built with MiraAPI and Reactor

| AU Version | TM Version | Link |
|---|---|---|
| 17.1.0+ | 1.5.4 | [Download](https://github.com/TechDevOfficial/TrollMod17/releases/tag/1.5.4) |
| 17.0.0 | 1.5.1 | [Download](https://github.com/TechDevOfficial/TrollMod17/releases/tag/1.5.1) |
| 17.0.0 | 1.5.0 | [Download](https://github.com/TechDevOfficial/TrollMod17/releases/tag/1.5.0) |
| 17.0.0 | 1.4.9 | [Download](https://github.com/TechDevOfficial/TrollMod17/releases/tag/1.4.9) |
| 17.0.0 | 1.4.6 | [Download](https://github.com/TechDevOfficial/TrollMod17/releases/tag/1.4.6) |
| 17.0.0 | 1.4.6 | [Download](https://github.com/TechDevOfficial/TrollMod17/releases/tag/1.4.6) |

<img width="410" height="200" alt="image" src="https://github.com/user-attachments/assets/914c57db-30b1-41d2-ba9e-668fe479e0bc" />

### Now available on Starlight Android Launcher: [Starlight Web Page](https://starlight.yanplahosting.com/mods/manu.trollmod) download now on Google Play [Download](https://play.google.com/store/apps/details?id=dev.allofus.starlight)

## Roles (9 Total)

**Crewmate Roles:**
- **Guardian** - Protects allies with timely shields
- **Medic** - Revives dead crewmates with synchronized abilities

**Neutral Roles:**
- **Troll** - Win when someone kills you
- **Jester** - Win by getting voted out during meetings
- **Trickster** - Sow chaos with smoke abilities
- **Bard** - Musical manipulation abilities
- **Illusionist** - Create visual illusions

**Impostor Roles:**
- **Shadow** - Strike from darkness with stealth
- **Warden** - Lock doors to control the battlefield

## Features

- **Custom Action Buttons** - Each role has unique abilities
- **RPC Synchronization** - All abilities work correctly on all clients
- **Android Compatibility** - Full IL2CPP support
- **Visual Feedback** - Outline highlighting for targets
- **Configurable Options** - Customize role counts and abilities

## Documentation

- [**Changelog**](CHANGELOG.md) - Version history and updates
- [**Description**](DESCRIPTION.md) - Detailed mod description and features

## Installation

1. Download TrollMod v1.5.4 from the releases page
2. Install BepInEx for Among Us
3. Place the mod DLL in `BepInEx/plugins/`
4. Launch Among Us and enjoy!

## Requirements

- Among Us v17.0.0 (2025.1.17)
- BepInEx 6.0.0+
- MiraAPI and Reactor dependencies (included)
91 changes: 91 additions & 0 deletions TrollMod17/Buttons/MedicReviveButton.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
using MiraAPI.Hud;
using MiraAPI.Utilities.Assets;
using TrollMod17.Roles;
using UnityEngine;
using Reactor.Networking.Attributes;
using System.Linq;

namespace TrollMod17.Buttons;

public class MedicReviveButton : CustomActionButton<DeadBody>
{
public override string Name => "Revive";
public override float Cooldown => 30f;
public override float EffectDuration => 0f;
public override int MaxUses => 2;
public override LoadableAsset<Sprite> Sprite => null!;

public override bool IsTargetValid(DeadBody? target)
{
return target != null;
}

public override DeadBody? GetTarget()
{
DeadBody? closestBody = null;
float closestDistance = float.MaxValue;

foreach (var body in Object.FindObjectsOfType<DeadBody>())
{
if (body == null) continue;

float distance = Vector2.Distance(PlayerControl.LocalPlayer.GetTruePosition(), body.TruePosition);
if (distance < 2f && distance < closestDistance)
{
closestDistance = distance;
closestBody = body;
}
}

return closestBody;
}

protected override void OnClick()
{
if (Target == null) return;
RpcRevivePlayer(Target.ParentId);
}

[MethodRpc((uint)RpcCalls.SetName)]
public void RpcRevivePlayer(byte playerId)
{
var playerInfo = GameData.Instance.GetPlayerById(playerId);

if (playerInfo != null && playerInfo.IsDead)
{
playerInfo.IsDead = false;
playerInfo.Disconnected = false;

if (playerInfo.Object != null)
{
playerInfo.Object.Revive();
}

var body = Object.FindObjectsOfType<DeadBody>().FirstOrDefault(b => b.ParentId == playerId);
if (body != null)
{
Object.Destroy(body.gameObject);
}
}
}

public override void SetOutline(bool active)
{
if (Target != null)
{
foreach (var renderer in Target.bodyRenderers)
{
renderer.material.SetFloat("_Outline", active ? 1f : 0f);
if (active)
{
renderer.material.SetColor("_OutlineColor", Color.green);
}
}
}
}

public override bool Enabled(RoleBehaviour? role)
{
return role is MedicRole;
}
}
12 changes: 12 additions & 0 deletions TrollMod17/Options/JesterOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using MiraAPI.GameOptions;
using MiraAPI.GameOptions.Attributes;
using MiraAPI.Utilities;
using UnityEngine;

namespace TrollMod17.Options;

public class JesterOptions : AbstractOptionGroup<TrollMod17.Roles.JesterRole>
{
public override string GroupName => "Jester Options";
public override Color GroupColor => new Color32(140, 30, 200, 255);
}
15 changes: 15 additions & 0 deletions TrollMod17/Options/MedicOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using MiraAPI.GameOptions;
using MiraAPI.GameOptions.Attributes;
using MiraAPI.Utilities;
using UnityEngine;

namespace TrollMod17.Options;

public class MedicOptions : AbstractOptionGroup<TrollMod17.Roles.MedicRole>
{
public override string GroupName => "Medic Options";
public override Color GroupColor => new Color32(200, 30, 30, 255);

[ModdedEnumOption("Medic Max Uses", typeof(MaxUses), new[] { "1", "2", "3", "4", "5", "Infinite" })]
public MaxUses MedicMaxUses { get; set; } = MaxUses.Two;
}
26 changes: 26 additions & 0 deletions TrollMod17/Roles/JesterRole.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using MiraAPI.Roles;
using MiraAPI.GameOptions;
using TrollMod17.Options;
using UnityEngine;
using Il2CppInterop.Runtime.Attributes;

namespace TrollMod17.Roles;

public class JesterRole : CrewmateRole, ICustomRole
{
public string RoleName => "Jester";
public string RoleLongDescription => "Wins by getting voted out during meetings.";
public string RoleDescription => RoleLongDescription;
public Color RoleColor => new Color32(140, 30, 200, 255);
public ModdedRoleTeams Team => ModdedRoleTeams.Custom;

public CustomRoleConfiguration Configuration => new(this)
{
CanUseSabotage = false,
MaxRoleCount = 1,
UseVanillaKillButton = false,
CanUseVent = false,
TasksCountForProgress = false,
CanGetKilled = true,
};
}
25 changes: 25 additions & 0 deletions TrollMod17/Roles/MedicRole.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using MiraAPI.Roles;
using MiraAPI.GameOptions;
using TrollMod17.Options;
using UnityEngine;
using Il2CppInterop.Runtime.Attributes;

namespace TrollMod17.Roles;

public class MedicRole : CrewmateRole, ICustomRole
{
public string RoleName => "Medic";
public string RoleLongDescription => "Revives dead crewmates with synchronized abilities.";
public string RoleDescription => RoleLongDescription;
public Color RoleColor => new Color32(200, 30, 30, 255);
public ModdedRoleTeams Team => ModdedRoleTeams.Crewmate;

public CustomRoleConfiguration Configuration => new(this)
{
CanUseSabotage = false,
MaxRoleCount = 1,
UseVanillaKillButton = false,
CanUseVent = false,
TasksCountForProgress = true,
};
}
6 changes: 3 additions & 3 deletions TrollMod17/TrollMod17.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@
<LangVersion>latest</LangVersion>
<DebugType>embedded</DebugType>

<VersionPrefix>1.5.1</VersionPrefix>
<VersionPrefix>1.5.4</VersionPrefix>
<VersionSuffix>dev</VersionSuffix>
<Description>TrollMod</Description>
<Authors>AUMods_IT, Manu</Authors>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="AllOfUs.MiraAPI" Version="0.3.1" />
<PackageReference Include="AllOfUs.MiraAPI" Version="0.3.4" />
<PackageReference Include="Reactor" Version="2.3.1" />
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.735" Private="false" ExcludeAssets="runtime;native" />
<PackageReference Include="AmongUs.GameLibs.Steam" Version="2025.9.9" PrivateAssets="all" />
<PackageReference Include="AmongUs.GameLibs.Steam" Version="2025.11.18" PrivateAssets="all" />

<PackageReference Include="BepInEx.AutoPlugin" Version="1.1.0" PrivateAssets="all" />
<PackageReference Include="BepInEx.IL2CPP.MSBuild" Version="2.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
Expand Down
2 changes: 1 addition & 1 deletion TrollMod17/TrollMod17Plugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public partial class TrollModPlugin : BasePlugin, IMiraPlugin
public Harmony Harmony { get; } = new(Id);
public string OptionsTitleText => "Troll\nMod";
public ConfigFile GetConfigFile() => Config;
public static string ModVersion = "1.5.1";
public static string ModVersion = "1.5.4";

public override void Load()
{
Expand Down
Loading