Skip to content
Merged
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
2 changes: 1 addition & 1 deletion NewMod/Buttons/Overload/OverloadButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public void Absorb(CustomActionButton target)
absorbedCooldown = target.Cooldown;
absorbedMaxUses = target.MaxUses;
absorbedSprite = target.Sprite;
absorbedKeybind = target.Keybind;
absorbedKeybind = (MiraKeybind)target.Keybind;
absorbedOnClick = () => target.GetType().GetMethod("OnClick", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
?.Invoke(target, null);

Expand Down
3 changes: 3 additions & 0 deletions NewMod/Components/Toast.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using UnityEngine;
using Reactor.Utilities.Attributes;
using NewMod;
using Il2CppInterop.Runtime.Attributes;

[RegisterInIl2Cpp]
public class Toast(IntPtr ptr) : MonoBehaviour(ptr)
Expand Down Expand Up @@ -39,6 +40,8 @@ public void ShowToast(string title, string text, Color color, float displayDurat

Coroutines.Start(CoAnimateToast(displayDuration));
}

[HideFromIl2Cpp]
public IEnumerator CoAnimateToast(float duration)
{
Vector3 visiblePos = new Vector3(-0.0527f, 2.7741f, 0f);
Expand Down
3 changes: 2 additions & 1 deletion NewMod/DebugWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,8 @@ private static bool AllowDebug()
}
if (GUILayout.Button("Show Toast") && LobbyBehaviour.Instance)
{
Toast.CreateToast().ShowToast(string.Empty, "NewMod v1.2.6", Color.red, 5f);
var toast = Toast.CreateToast();
toast.ShowToast(string.Empty, "NewMod v1.2.6", Color.red, 5f);
}
/*if (GUILayout.Button("Spawn General NPC") && allow)
{
Expand Down
36 changes: 36 additions & 0 deletions NewMod/LocalSettings/NewModLocalSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using BepInEx.Configuration;
using MiraAPI.LocalSettings;
using MiraAPI.LocalSettings.Attributes;
using UnityEngine;

namespace NewMod.LocalSettings
{
public class NewModLocalSettings(ConfigFile config) : LocalSettingsTab(config)
{
public override string TabName => "NewMod";
public override LocalSettingTabAppearance TabAppearance { get; } = new()
{
TabButtonColor = Color.cyan,
TabButtonHoverColor = Color.magenta,
TabIcon = NewModAsset.NMIcon,
};

[LocalSliderSetting("Frame Rate Limit", min: 30f, max: 240f, "Lock your framerate (FPS)", displayValue: true, formatString: "0", roundValue: true)]
public ConfigEntry<float> FrameRateLimit { get; } = config.Bind(
"Performance",
"FrameRateLimit",
165f,
"Frames per second limit"
);

public override void OnOptionChanged(ConfigEntryBase configEntry)
{
base.OnOptionChanged(configEntry);

if (configEntry == FrameRateLimit)
{
Application.targetFrameRate = (int)FrameRateLimit.Value;
}
}
}
}
30 changes: 30 additions & 0 deletions NewMod/Modifiers/AdrenalineModifier.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using MiraAPI.Modifiers.Types;
using MiraAPI.GameOptions;
using NewMod.Options.Modifiers;
using NewMod.Options;

namespace NewMod.Modifiers
{
public class AdrenalineModifier : GameModifier
{
public override string ModifierName => "Adrenaline";
public override bool HideOnUi => false;
public override int GetAssignmentChance() => (int)OptionGroupSingleton<ModifiersOptions>.Instance.AdrenalineChance.Value;
public override int GetAmountPerGame() => (int)OptionGroupSingleton<ModifiersOptions>.Instance.AdrenalineAmount;

public override void OnActivate()
{
Player.MyPhysics.Speed *= OptionGroupSingleton<AdrenalineModifierOptions>.Instance.SpeedMultiplier;
}

public override void OnDeactivate()
{
Player.MyPhysics.Speed /= OptionGroupSingleton<AdrenalineModifierOptions>.Instance.SpeedMultiplier;
}

public override void OnDeath(DeathReason reason)
{
Player.MyPhysics.Speed /= OptionGroupSingleton<AdrenalineModifierOptions>.Instance.SpeedMultiplier;
}
}
}
38 changes: 38 additions & 0 deletions NewMod/Modifiers/DrowsyModifier.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using MiraAPI.GameOptions;
using MiraAPI.Modifiers;
using MiraAPI.Modifiers.Types;
using MiraAPI.Utilities;
using NewMod.Options;
using NewMod.Options.Modifiers;
using UnityEngine;

namespace NewMod.Modifiers
{
public sealed class DrowsyModifier : GameModifier
{
public override string ModifierName => "Drowsy";
public override bool ShowInFreeplay => true;
public override Color FreeplayFileColor => new(0.6f, 0.7f, 1f);
public override string GetDescription() =>
$"Move slower (x{OptionGroupSingleton<ModifiersOptions>.Instance.DrowsyAmount:0.##}).";

public override int GetAssignmentChance() => (int)OptionGroupSingleton<ModifiersOptions>.Instance.DrowsyChance.Value;

public override int GetAmountPerGame() => (int)OptionGroupSingleton<ModifiersOptions>.Instance.DrowsyAmount;

public override void OnActivate()
{
Player.MyPhysics.Speed *= OptionGroupSingleton<DrowsyModifierOptions>.Instance.SpeedMultiplier;
}

public override void OnDeactivate()
{
Player.MyPhysics.Speed /= OptionGroupSingleton<DrowsyModifierOptions>.Instance.SpeedMultiplier;
}

public override void OnDeath(DeathReason reason)
{
Player.MyPhysics.Speed /= OptionGroupSingleton<DrowsyModifierOptions>.Instance.SpeedMultiplier;
}
}
}
14 changes: 10 additions & 4 deletions NewMod/Modifiers/FalseFormModifier.cs
Original file line number Diff line number Diff line change
@@ -1,21 +1,27 @@
using MiraAPI.GameOptions;
using MiraAPI.Modifiers.Types;
using MiraAPI.Utilities;
using NewMod.Options;
using NewMod.Options.Modifiers;
using UnityEngine;

namespace NewMod.Modifiers
{
public class FalseFormModifier : TimedModifier
public class FalseFormModifier : GameModifier
{
public override string ModifierName => "FalseForm";
public override bool AutoStart => OptionGroupSingleton<FalseFormModifierOptions>.Instance.EnableModifier;
public override float Duration => (int)OptionGroupSingleton<FalseFormModifierOptions>.Instance.FalseFormDuration;
public override bool ShowInFreeplay => true;
public override bool HideOnUi => false;
public override bool RemoveOnComplete => true;
private float timer;
private AppearanceBackup oldAppearance;
public override int GetAssignmentChance()
{
return OptionGroupSingleton<ModifiersOptions>.Instance.FalseFormChance;
}
public override int GetAmountPerGame()
{
return (int)OptionGroupSingleton<ModifiersOptions>.Instance.FalseFormAmount;
}
public override void OnActivate()
{
oldAppearance = new AppearanceBackup
Expand Down
20 changes: 12 additions & 8 deletions NewMod/Modifiers/StickyModifier.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,27 @@
using System.Collections.Generic;
using MiraAPI.GameOptions;
using MiraAPI.Modifiers.Types;
using NewMod.Options;
using NewMod.Options.Modifiers;
using Reactor.Utilities;
using UnityEngine;

namespace NewMod.Modifiers
{
public class StickyModifier : TimedModifier
public class StickyModifier : GameModifier
{
public override string ModifierName => "Sticky";
public override bool AutoStart => OptionGroupSingleton<StickyModifierOptions>.Instance.EnableModifier;
public override float Duration => (int)OptionGroupSingleton<StickyModifierOptions>.Instance.StickyDuration;
public override bool HideOnUi => false;
public override bool ShowInFreeplay => true;
public override bool RemoveOnComplete => true;
public static List<PlayerControl> linkedPlayers = new();
public static List<PlayerControl> linkedPlayers = [];
public override int GetAmountPerGame()
{
return (int)OptionGroupSingleton<ModifiersOptions>.Instance.StickyAmount;
}
public override int GetAssignmentChance()
{
return OptionGroupSingleton<ModifiersOptions>.Instance.StickyChance;
}
public override bool? CanVent()
{
return Player.Data.Role.CanVent;
Expand Down Expand Up @@ -49,8 +55,6 @@ public override void FixedUpdate()
}
public IEnumerator CoFollowStickyPlayer(PlayerControl player)
{
float duration = Duration;

var info = new StickyState
{
StickyOwner = Player,
Expand All @@ -59,7 +63,7 @@ public IEnumerator CoFollowStickyPlayer(PlayerControl player)
};

yield return HudManager.Instance.StartCoroutine(
Effects.Overlerp(duration, new System.Action<float>((t) =>
Effects.Overlerp(0.5f, new System.Action<float>((t) =>
{
Vector3 targetPos = info.LinkedPlayer.transform.position;
Vector3 currentPos = info.StickyOwner.transform.position;
Expand Down
10 changes: 6 additions & 4 deletions NewMod/NewMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
using MiraAPI.Events;
using NewMod.Patches.Compatibility;
using NewMod.Buttons.Overload;
using MiraAPI.LocalSettings;

namespace NewMod;

Expand All @@ -36,11 +37,11 @@ namespace NewMod;
public partial class NewMod : BasePlugin, IMiraPlugin
{
public const string Id = "com.callofcreator.newmod";
public const string ModVersion = "1.2.6";
public const string ModVersion = "1.2.7";
public Harmony Harmony { get; } = new Harmony(Id);
public static BasePlugin Instance;
public static Minigame minigame;
public const string SupportedAmongUsVersion = "2025.6.10";
public const string SupportedAmongUsVersion = "2025.9.9";
public static ConfigEntry<bool> ShouldEnableBepInExConsole { get; set; }
public ConfigFile GetConfigFile() => Config;
public string OptionsTitleText => "NewMod";
Expand All @@ -58,9 +59,10 @@ public override void Load()
Harmony.PatchAll(typeof(LaunchpadCompatibility));
Harmony.PatchAll(typeof(LaunchpadHackTextPatch));
}
ShouldEnableBepInExConsole = Config.Bind("NewMod", "Console", false, "Whether to enable BepInEx Console for debugging");
ShouldEnableBepInExConsole = Config.Bind("NewMod", "Console", true, "Whether to enable BepInEx Console for debugging");
if (!ShouldEnableBepInExConsole.Value) ConsoleManager.DetachConsole();
Instance.Log.LogMessage($"Loaded Successfully NewMod v{ModVersion} With MiraAPI Version : {MiraApiPlugin.Version} with ID : {MiraApiPlugin.Id}");

Instance.Log.LogMessage($"Loaded Successfully NewMod v{ModVersion} With MiraAPI Version : {MiraApiPlugin.Version}");
}
public static void CheckVersionCompatibility()
{
Expand Down
6 changes: 3 additions & 3 deletions NewMod/NewMod.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<VersionPrefix>1.2.6</VersionPrefix>
<VersionPrefix>1.2.7</VersionPrefix>
<VersionSuffix>dev</VersionSuffix>
<Description>NewMod is a mod for Among Us that introduces a variety of new roles, unique abilities</Description>
<Authors>CallofCreator</Authors>
Expand All @@ -21,8 +21,8 @@

<ItemGroup>
<PackageReference Include="Reactor" Version="2.3.1" />
<PackageReference Condition="'$(Configuration)' == 'Debug' Or '$(Configuration)' == 'Release' " Include="AmongUs.GameLibs.Steam" Version="2025.4.15" PrivateAssets="all" />
<PackageReference Condition="'$(Configuration)' == 'ANDROID' " Include="AmongUs.GameLibs.Android" Version="2025.6.10" PrivateAssets="all" />
<PackageReference Condition="'$(Configuration)' == 'Debug' Or '$(Configuration)' == 'Release' " Include="AmongUs.GameLibs.Steam" Version="2025.9.9" PrivateAssets="all" />
<PackageReference Condition="'$(Configuration)' == 'ANDROID' " Include="AmongUs.GameLibs.Android" Version="2025.9.9" PrivateAssets="all" />
<PackageReference Include="BepInEx.AutoPlugin" Version="1.1.0" PrivateAssets="all" />
<PackageReference Include="BepInEx.IL2CPP.MSBuild" Version="2.1.0-rc.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.735" />
Expand Down
1 change: 1 addition & 0 deletions NewMod/NewModAsset.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public static class NewModAsset
public static LoadableResourceAsset Banner { get; } = new("NewMod.Resources.optionImage.png");
public static LoadableResourceAsset Arrow { get; } = new("NewMod.Resources.Arrow.png");
public static LoadableResourceAsset ModLogo { get; } = new("NewMod.Resources.Logo.png");
public static LoadableResourceAsset NMIcon { get; } = new("NewMod.Resources.nm.png");
public static LoadableResourceAsset CustomCursor { get; } = new("NewMod.Resources.cursor.png");
public static LoadableAsset<GameObject> Toast { get; } = new LoadableBundleAsset<GameObject>("Toast", Bundle);
public static LoadableAsset<GameObject> SlashTray { get; } = new LoadableBundleAsset<GameObject>("SlashTray", Bundle);
Expand Down
16 changes: 16 additions & 0 deletions NewMod/Options/Modifiers/AdrenalineModifierOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using MiraAPI.GameOptions;
using MiraAPI.Utilities;
using MiraAPI.GameOptions.Attributes;
using MiraAPI.GameOptions.OptionTypes;
using NewMod.Modifiers;

namespace NewMod.Options.Modifiers
{
public class AdrenalineModifierOptions : AbstractOptionGroup<AdrenalineModifier>
{
public override string GroupName => "Adrenaline Settings";

[ModdedNumberOption("Speed Multiplier", min: 1.1f, max: 3f, increment: 0.1f, MiraNumberSuffixes.Multiplier)]
public float SpeedMultiplier { get; set; } = 1.5f;
}
}
16 changes: 16 additions & 0 deletions NewMod/Options/Modifiers/DrowsyModifierOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using MiraAPI.GameOptions;
using MiraAPI.Utilities;
using MiraAPI.GameOptions.Attributes;
using MiraAPI.GameOptions.OptionTypes;
using NewMod.Modifiers;

namespace NewMod.Options.Modifiers
{
public class DrowsyModifierOptions : AbstractOptionGroup<DrowsyModifier>
{
public override string GroupName => "Drowsy Settings";

[ModdedNumberOption("Speed Multiplier", min: 0.2f, max: 0.9f, increment: 0.05f, MiraNumberSuffixes.Multiplier)]
public float SpeedMultiplier { get; set; } = 0.5f;
}
}
1 change: 0 additions & 1 deletion NewMod/Options/Modifiers/FalseFormModifierOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ namespace NewMod.Options.Modifiers
public class FalseFormModifierOptions : AbstractOptionGroup<FalseFormModifier>
{
public override string GroupName => "FalseForm Settings";
public ModdedToggleOption EnableModifier { get; } = new("Enable FalseForm", true);
public ModdedNumberOption FalseFormDuration { get; } =
new(
"Duration of the FalseForm effect",
Expand Down
1 change: 0 additions & 1 deletion NewMod/Options/Modifiers/StickyModifierOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ namespace NewMod.Options.Modifiers
public class StickyModifierOptions : AbstractOptionGroup<StickyModifier>
{
public override string GroupName => "Sticky Settings";
public ModdedToggleOption EnableModifier { get; } = new("Enable StickyModifier", true);
public ModdedNumberOption StickyDuration { get; } =
new(
"Duration of Sticky Effect",
Expand Down
47 changes: 47 additions & 0 deletions NewMod/Options/ModifiersOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using MiraAPI.GameOptions;
using MiraAPI.GameOptions.Attributes;
using MiraAPI.GameOptions.OptionTypes;
using MiraAPI.Utilities;
using UnityEngine;

namespace NewMod.Options;

public class ModifiersOptions : AbstractOptionGroup
{
public override string GroupName => "Modifiers Settings";
public override Color GroupColor => Color.blue;
public override bool ShowInModifiersMenu => true;

[ModdedNumberOption("Sticky Amount", min:0f, max:6)]
public float StickyAmount { get; set; } = 10f;

public ModdedNumberOption StickyChance { get; } = new("Sticky Chance", 50f, 0, 100f, 10f, MiraNumberSuffixes.Percent)
{
Visible = () => OptionGroupSingleton<ModifiersOptions>.Instance.StickyAmount > 0
};

[ModdedNumberOption("FalseForm Amount", min:0, max:6)]
public float FalseFormAmount { get; set; } = 10f;

public ModdedNumberOption FalseFormChance { get; } = new("FalseForm Chance", 50f, 0, 100f, 10f, MiraNumberSuffixes.Percent)
{
Visible = () => OptionGroupSingleton<ModifiersOptions>.Instance.FalseFormAmount > 0
};

[ModdedNumberOption("Drowsy Amount", min:0f, max:6f)]
public float DrowsyAmount { get; set; } = 10f;

public ModdedNumberOption DrowsyChance { get; } =new("Drowsy Chance", 50f, 0, 100f, 10f, MiraNumberSuffixes.Percent)
{
Visible = () => OptionGroupSingleton<ModifiersOptions>.Instance.DrowsyAmount > 0f
};

[ModdedNumberOption("Adrenaline Amount", min:0f, max:6f)]
public float AdrenalineAmount { get; set; } = 10f;

public ModdedNumberOption AdrenalineChance { get; } =new("Adrenaline Chance", 50f, 0, 100f, 10f, MiraNumberSuffixes.Percent)
{
Visible = () => OptionGroupSingleton<ModifiersOptions>.Instance.AdrenalineAmount > 0f
};

}
Binary file added NewMod/Resources/nm.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading