
About this image
Hey everyone,
First off, huge thanks to the modders who have already been creating and sharing content for FATE: Reawakened! Seeing quickly released modshas been really encouraging, and I appreciate the work that’s gone into figuring out the game’s file structure and mechanics.
I’m looking to modify player movement speed but haven’t been able to locate where it’s defined in the game’s files. In older FATE games, this was fairly simple, but since Reawakened runs on Unity, I’m unsure whether this value is stored in:
- Assembly-CSharp.dll (as a hardcoded value or method calculation)
- Sharedassets0.assets (as a serialized value in a prefab, scriptable object, or config file)
What I’ve Learned So Far
- Mods have successfully altered sharedassets0.assets (e.g., making all inventory items single-slot).
- Assembly-CSharp.dll has been modified to adjust RNG mechanics, suggesting gameplay logic is stored there.
- Player movement speed could be a static float, a multiplier, or a dynamically calculated value rather than a simple variable.
What I’m Trying to Achieve
I want to slightly increase my character’s base movement speed while keeping gameplay balanced. My main question is where this value is controlled—whether it's a hardcoded constant, an adjustable multiplier, or an external config.
If anyone has experience modifying movement speed or has worked with FATE: Reawakened’s game logic and asset files, I’d love to hear your thoughts. Also, if there are specific tools or workflows that have helped with similar modifications, I’d really appreciate any recommendations!
Thanks in advance for any help! Looking forward to learning from the community.
8 comments
it was hidden under Assembly => Cleverous Prodigy => Agent => Prodigy Agent Locomotion
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Emit;
using UnityEngine;
namespace AdjustPlayerSpeed
{
[BepInPlugin("adjustplayerspeed", "Adjust Player Speed", "1.0.0")]
public class AdjustPlayerSpeedPlugin : BaseUnityPlugin
{
internal static ConfigEntry<float> SpeedMultiplier = null!;
internal static AdjustPlayerSpeedPlugin Instance = null!;
private void Awake()
{
Instance = this;
SpeedMultiplier = Config.Bind("Movement", "SpeedMultiplier", 1.5f,
"Multiplier for player movement speed. 1 = normal, 2 = double, 0.5 = half.");
Harmony.CreateAndPatchAll(typeof(AdjustPlayerSpeedPlugin));
Logger.LogInfo($"[AdjustPlayerSpeed] Loaded. Speed multiplier = {SpeedMultiplier.Value}");
}
[HarmonyPatch(typeof(Cleverous.Prodigy.ProdigyAgentLocomotion), "Motion")]
[HarmonyTranspiler]
static IEnumerable<CodeInstruction> MultiplyMoveSpeedTranspiler(IEnumerable<CodeInstruction> instructions)
{
var codes = new List<CodeInstruction>(instructions);
var injected = false;
for (int i = 0; i < codes.Count - 1; i++)
{
if (!injected &&
codes[i].opcode == OpCodes.Callvirt &&
codes[i].operand is MethodInfo m &&
m.Name == "get_Definition")
{
// After: this.currentSpeed = this.AgentOwner.Definition.MoveSpeed;
// Inject: this.currentSpeed *= SpeedMultiplier.Value;
// Look for the next "stfld currentSpeed" after MoveSpeed is loaded
for (int j = i + 1; j < codes.Count; j++)
{
if (codes[j].opcode == OpCodes.Stfld &&
codes[j].operand.ToString().Contains("currentSpeed"))
{
// Inject:
// this.currentSpeed = this.currentSpeed * SpeedMultiplier.Value;
codes.Insert(j + 1, new CodeInstruction(OpCodes.Ldarg_0)); // this
codes.Insert(j + 2, new CodeInstruction(OpCodes.Ldarg_0)); // this
codes.Insert(j + 3, new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(Cleverous.Prodigy.ProdigyAgentLocomotion), "currentSpeed")));
codes.Insert(j + 4, new CodeInstruction(OpCodes.Ldsfld, AccessTools.Field(typeof(AdjustPlayerSpeedPlugin), nameof(SpeedMultiplier))));
codes.Insert(j + 5, new CodeInstruction(OpCodes.Callvirt, typeof(ConfigEntry<float>).GetProperty("Value")!.GetGetMethod()!));
codes.Insert(j + 6, new CodeInstruction(OpCodes.Mul));
codes.Insert(j + 7, new CodeInstruction(OpCodes.Stfld, AccessTools.Field(typeof(Cleverous.Prodigy.ProdigyAgentLocomotion), "currentSpeed")));
injected = true;
Instance.Logger.LogInfo("[AdjustPlayerSpeed] Speed multiplier injected into Motion()");
break;
}
}
}
}
if (!injected)
{
Instance.Logger.LogWarning("[AdjustPlayerSpeed] Failed to inject speed multiplier.");
}
return codes;
}
}
}
the assbilies for it are:
BepInEx.dll
0Harmony.dll
UnityEngine.dll
Hope this helps.
1 Strength Point
2 Dex Point
3 Vitality Point
4 Magic Point
5 Mana Point
6 Life Point
7 Stamina point
8 Defense point
9 attack Point
10 Damage dealt point
11 Damage Taken point
12 Knockback
13 Sword skill
14 Club & Mace skill
15 Hammer skill
16 Axe Skill
17Spear Skill
18 Staff Skill
19 Polearm Skill
20 Bow & Crossbow
21 Dual-Weilding
22 Sheild Skill
23 Sheild Battle skill
24 Defence Magic
25 Charm Magic Skill
26 All skill
27 Strength %
28 Dex %
29 Vitality %
30 Magic %
31 Mana %
32 Life %
33 Stamina %
34 Move Speed %
35 Attack Speed %
36 Defense %
37 Attack %
38 Damage Dealt %
39 Damage Taken %
40 Chance find Magic %
41 Gold Droped %
42 Faster Casting %
43 Life Stolen %
44 Mana Stolen %
45 Damage Reflected %
46 Improved Chance Of Block %
47 Reduced item Rquierment %
48 Piercing resistance %
49 Slashing resistance %
50 Crushing Resistance %
51 Magical Resistance %
52 Fire Resistance %
53 Ice
54 Electric
55 All Resistences %
56 Poisonis attack %
57 Knock Back (negative)
58 Identify item of identification level 4 and Below (unitended)
do you know where the random fishing time is located between cast and hook? I know its between 1-60 seconds, I was wondering if anyone knew where that would be located to change the rates to something less as in 1-30'ishA good tool for this is dnSpyEx, which is an updated version of dnSpy. It’s commonly used for modding Unity-based games because it lets you open the game’s main code file, Assembly-CSharp.dll, and view the actual scripts that control mechanics like movement speed, combat, or inventory.
How to Use dnSpyEx for FATE: Reawakened
https://github.com/dnSpyEx/dnSpy/releases
Is dnSpyEx Safe?
Yes! dnSpyEx is open-source and maintained by the modding community. You can verify its credibility by checking the source code, updates, and discussions on GitHub. It’s a widely used tool for Unity modding and has been proven reliable for games like this.
If you need help navigating it, feel free to ask! My first recommendation would be Youtube videos or asking an AI you're familiar with.