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.
Decompiled source of dgoslings Samus Mod v2.2.3
SamusMod.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EmotesAPI; using EntityStates; using MonoMod.RuntimeDetour.HookGen; using On.RoR2; using On.RoR2.UI; using R2API; using R2API.ScriptableObjects; using R2API.Utils; using Rewired; using Rewired.Data; using Rewired.Data.Mapping; using RoR2; using RoR2.ContentManagement; using RoR2.PostProcessing; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using SamusMod.Misc; using SamusMod.Modules; using SamusMod.SkillStates.BaseStates; using TMPro; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; using VRAPI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] namespace SamusMod { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.dgosling.Samus", "Samus", "2.2.3")] public class SamusPlugin : BaseUnityPlugin { public const string MODUID = "com.dgosling.Samus"; public const string MODNAME = "Samus"; public const string MODVERSION = "2.2.3"; public const string developerPrefix = "DG"; public static bool debug; public static bool cancel; public static float jumps; public static SamusPlugin instance; public static ManualLogSource logger { get { SamusPlugin samusPlugin = instance; if (samusPlugin == null) { return null; } return ((BaseUnityPlugin)samusPlugin).Logger; } } private void Awake() { instance = this; Config.ReadConfig(); Assets.Init(); if (!cancel) { Shaders.init(); Tokens.Init(); Prefabs.Init(); Buffs.Init(); Unlockables.Init(); ExtraInputs.AddActionsToInputCatalog(); HookEndpointManager.Add((MethodBase)typeof(UserData).GetMethod("wVZZKoPFwEvodLvLcYNvVAPKpUj", BindingFlags.Instance | BindingFlags.NonPublic), (Delegate)new Action<Action<UserData>, UserData>(ExtraInputs.AddCustomActions)); if (debug) { Helpers.AwakeDebug(); } ContentPackProvider.Initialize(); Hook(); } } private void Start() { if (debug) { Helpers.StartDebug(); } } private void Hook() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Expected O, but got Unknown //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected O, but got Unknown //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Expected O, but got Unknown //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected O, but got Unknown //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Expected O, but got Unknown //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown CharacterBody.FixedUpdate += new hook_FixedUpdate(CharacterBody_FixedUpdate); DamageTrail.DoDamage += new hook_DoDamage(DamageTrail_DoDamage); CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); DotController.InflictDot_GameObject_GameObject_DotIndex_float_float_Nullable1 += new hook_InflictDot_GameObject_GameObject_DotIndex_float_float_Nullable1(DotController_InflictDot_GameObject_GameObject_DotIndex_float_float_Nullable1); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); CharacterMotor.FixedUpdate += new hook_FixedUpdate(CharacterMotor_FixedUpdate); CharacterMotor.OnLanded += new hook_OnLanded(CharacterMotor_OnLanded); CharacterMaster.OnBodyDamaged += new hook_OnBodyDamaged(CharacterMaster_OnBodyDamaged); UserProfile.LoadDefaultProfile += new hook_LoadDefaultProfile(ExtraInputs.OnLoadDefaultProfile); SaveSystem.LoadUserProfiles += new hook_LoadUserProfiles(ExtraInputs.OnLoadUserProfiles); SettingsPanelController.Start += new hook_Start(SettingsPanelControllerStart); if (EmoteAPICompatibility.enabled) { SurvivorCatalog.Init += new hook_Init(EmoteAPICompatibility.SurvivorCatalog_Init); } } private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.inventory) && Object.op_Implicit((Object)(object)self.skillLocator) && self.baseNameToken == "DG_SAMUS_NAME") { SkillLocator skillLocator = self.skillLocator; if (Object.op_Implicit((Object)(object)skillLocator.secondary) && !BaseSamus.morphBall) { int num = skillLocator.secondary.bonusStockFromBody - self.inventory.GetItemCount(Items.SecondarySkillMagazine); int itemCount = self.inventory.GetItemCount(Items.SecondarySkillMagazine); skillLocator.secondary.SetBonusStockFromBody(itemCount * 5 + num); } } } private void GenericSkill_SetBonusStockFromBody(orig_SetBonusStockFromBody orig, GenericSkill self, int newBonusStockFromBody) { if (!Object.op_Implicit((Object)(object)self)) { return; } if ((Object)(object)self.characterBody.skillLocator.secondary == (Object)(object)self && self.characterBody.baseNameToken == "DG_SAMUS_NAME") { if (!BaseSamus.morphBall) { newBonusStockFromBody *= 5; orig.Invoke(self, newBonusStockFromBody); } else if (BaseSamus.morphBall) { newBonusStockFromBody = Mathf.FloorToInt((float)(self.characterBody.skillLocator.primary.maxStock / 3)) - 1; orig.Invoke(self, newBonusStockFromBody); } } else { orig.Invoke(self, newBonusStockFromBody); } } private void DotController_InflictDot_GameObject_GameObject_DotIndex_float_float_Nullable1(orig_InflictDot_GameObject_GameObject_DotIndex_float_float_Nullable1 orig, GameObject victimObject, GameObject attackerObject, DotIndex dotIndex, float duration, float damageMultiplier, uint? maxStacksFromAttacker) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 //IL_004e: Unknown result type (might be due to invalid IL or missing references) if ((victimObject.gameObject.GetComponent<CharacterBody>().baseNameToken == "DG_SAMUS_NAME" || attackerObject.gameObject.GetComponent<CharacterBody>().baseNameToken == "DG_SAMUS_NAME") && (int)dotIndex == 3) { duration = 0f; damageMultiplier = 0f; } orig.Invoke(victimObject, attackerObject, dotIndex, duration, damageMultiplier, maxStacksFromAttacker); } private void CustomBind() { } internal static void SettingsPanelControllerStart(orig_Start orig, SettingsPanelController self) { orig.Invoke(self); if (((Object)self).name == "SettingsSubPanel, Controls (M&KB)" || ((Object)self).name == "SettingsSubPanel, Controls (Gamepad)") { Transform buttonToCopy = ((Component)self).transform.Find("Scroll View/Viewport/VerticalLayout/SettingsEntryButton, Binding (Jump)"); uiHooks.AddActionBindingToSettings(RewiredAction.autoFire.Name, buttonToCopy); } } private void CharacterMaster_OnBodyDamaged(orig_OnBodyDamaged orig, CharacterMaster self, DamageReport damageReport) { if (Object.op_Implicit((Object)(object)self)) { if (self.GetBody().baseNameToken == "DG_SAMUS_NAME") { Util.PlaySound("Hurt", self.GetBodyObject()); } orig.Invoke(self, damageReport); } } private void CharacterMotor_OnLanded(orig_OnLanded orig, CharacterMotor self) { if (Object.op_Implicit((Object)(object)self)) { if (self.body.baseNameToken == "DG_SAMUS_NAME" && jumps > 0f) { jumps = 0f; } orig.Invoke(self); } } private void CharacterMotor_FixedUpdate(orig_FixedUpdate orig, CharacterMotor self) { if (!Object.op_Implicit((Object)(object)self)) { return; } if (self.body.baseNameToken == "DG_SAMUS_NAME") { if (self.jumpCount == 1 && jumps == 0f) { jumps = 1f; Util.PlaySound("Jump", ((Component)self).gameObject); } else if (self.jumpCount >= 2 && jumps + 1f == (float)self.jumpCount) { jumps += 1f; Util.PlaySound("DJump", ((Component)self).gameObject); } } orig.Invoke(self); } private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)self != (Object)null && (Object)(object)damageInfo.inflictor != (Object)null && (Object)(object)self.body != (Object)null && self.body.baseNameToken == "DG_SAMUS_NAME" && (((Object)damageInfo.inflictor).name == "bombExplosion(Clone)" || ((Object)damageInfo.inflictor).name == "SamusMorphBomb(Clone)")) { damageInfo.damage = 0f; if (self.body.characterMotor.isGrounded || self.body.characterMotor.velocity.y > -10f) { damageInfo.force = new Vector3(0f, 1200f, 0f); } else { damageInfo.force = new Vector3(0f, 3000f, 0f); } } orig.Invoke(self, damageInfo); } private void DamageTrail_DoDamage(orig_DoDamage orig, DamageTrail self) { if (Object.op_Implicit((Object)(object)self) && ((Object)self.segmentPrefab).name == "FireTrailSegment") { self.damagePerSecond = 0f; AkSoundEngine.StopPlayingID(3193947170u); } orig.Invoke(self); } private void CharacterBody_FixedUpdate(orig_FixedUpdate orig, CharacterBody self) { if (Object.op_Implicit((Object)(object)self) && Object.op_Implicit((Object)(object)self.skillLocator.secondary) && Object.op_Implicit((Object)(object)self.skillLocator.special) && self.baseNameToken == "DG_SAMUS_NAME" && !BaseSamus.morphBall) { if (self.skillLocator.secondary.stock >= 5) { self.skillLocator.special.stock = 1; } else { self.skillLocator.special.RemoveAllStocks(); } } orig.Invoke(self); } } } namespace SamusMod.SkillStates.Samus { public class AutoFireBeam : BaseSkillState { private GameObject projectilePrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerNoSmoke"); [SerializeField] public GameObject muzzleFlashPrefab; [SerializeField] public GameObject hitEffectPrefab; [SerializeField] public float baseDuration; private float duration; private float force = 5f; private string muzzleName = "gunCon"; private Ray aimRay; private float timer; public override void OnEnter() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; aimRay = ((BaseState)this).GetAimRay(); } private void Fire() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { aimRay = MotionControls.dominantHand.aimRay; EntityState.PlayAnimationOnAnimator(MotionControls.dominantHand.animator, "Base Layer", "shoot", "Shoot.playbackRate", 0.1f); } else { ((EntityState)this).PlayAnimation("Gesture, Override", "Beam", "Charge.playbackRate", 0.05f); } if (Object.op_Implicit((Object)(object)muzzleFlashPrefab)) { EffectManager.SimpleMuzzleFlash(muzzleFlashPrefab, ((EntityState)this).gameObject, muzzleName, false); } float num = 0.1f * force; if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { Util.PlayAttackSpeedSound("beam", ((Component)MotionControls.dominantHand.muzzle).gameObject, ((BaseState)this).attackSpeedStat); } else { Util.PlayAttackSpeedSound("beam", ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); } new BulletAttack { owner = ((EntityState)this).gameObject, weapon = ((EntityState)this).gameObject, origin = ((Ray)(ref aimRay)).origin, aimVector = ((Ray)(ref aimRay)).direction, minSpread = 0f, maxSpread = 0f, damage = ((BaseState)this).damageStat * Config.pBeamMult, force = num, tracerEffectPrefab = projectilePrefab, muzzleName = muzzleName, hitEffectPrefab = hitEffectPrefab, isCrit = ((BaseState)this).RollCrit(), radius = 0.1f, smartCollision = true }.Fire(); } } public override void FixedUpdate() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); aimRay = ((BaseState)this).GetAimRay(); timer += Time.fixedDeltaTime; if (timer >= duration) { timer = 0f; Fire(); } if (((EntityState)this).isAuthority && !((BaseSkillState)this).IsKeyDownAuthority()) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class ChargeBeam : ChargeBeamBase { private GameObject chargeEffect; private Vector3 originalScale; public Vector3 newSize; public override void OnEnter() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) crosshairOverridePrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Crosshair/ToolbotGrenadeLauncherCrosshair"); maxBloomRadius = 0.1f; minBloomRadius = 1f; originalScale = chargeEffectPrefab.transform.localScale; base.OnEnter(); ChildLocator modelChildLocator = ((EntityState)this).GetModelChildLocator(); if (Object.op_Implicit((Object)(object)modelChildLocator)) { chargeEffect = ((Component)modelChildLocator.FindChild("chargeEffect")).gameObject; chargeEffect.SetActive(false); } } public override void FixedUpdate() { //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdate(); if (!chargeEffect.activeSelf && calcCharge() > 0.15f) { chargeEffect.SetActive(true); } if (!Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { newSize = new Vector3(calcCharge() * 10f, calcCharge() * 10f, calcCharge() * 10f); } else { newSize = new Vector3(calcCharge() / 2f, calcCharge() / 2f, calcCharge() / 2f); } base.chargeEffectInstance.transform.localScale = newSize; } public override void OnExit() { base.OnExit(); if (Object.op_Implicit((Object)(object)chargeEffect)) { chargeEffect.SetActive(false); } } public override BaseFireBeam GetNextBase() { return new FireBeam(); } } public class ExitMorphBall : BaseSkillState { private static float baseDuration = 0.42f; private float duration; private ChildLocator childLocator; private GameObject ball; [SerializeField] public SkillDef bomb; [SerializeField] public SkillDef exitMorph; private static float recharge; private static int pstock; public static float BaseDuration { get { return baseDuration; } set { baseDuration = value; } } public static float Recharge { get { return recharge; } set { recharge = value; } } public static int Pstock { get { return pstock; } set { pstock = value; } } public override void OnEnter() { ((BaseState)this).OnEnter(); duration = BaseDuration / ((BaseState)this).attackSpeedStat; childLocator = ((EntityState)this).GetModelChildLocator(); ball = ((Component)childLocator.FindChild("Ball2")).gameObject; if (NetworkServer.active) { ((EntityState)this).characterBody.RemoveBuff(Buffs.ArmorBoost); } Collider component = ball.GetComponent<Collider>(); ball.GetComponent<Rigidbody>(); component.enabled = false; ((Component)childLocator.FindChild("Ball2")).gameObject.SetActive(false); ((Component)childLocator.FindChild("Body")).gameObject.SetActive(true); ((EntityState)this).PlayAnimation("Body", "transformOut", "Roll.playbackRate", duration); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!(((EntityState)this).fixedAge < duration) && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { //IL_00e1: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnExit(); ((EntityState)this).characterBody.baseMoveSpeed = morphBallEnter.NormalSpeed; ((EntityState)this).characterBody.baseJumpCount = morphBallEnter.NormalJumps; ((EntityState)this).characterBody.sprintingSpeedMultiplier = morphBallEnter.NormalSprint; ((EntityState)this).characterBody.RecalculateStats(); ((EntityState)this).skillLocator.primary.UnsetSkillOverride((object)((EntityState)this).skillLocator.primary, bomb, (SkillOverridePriority)4); ((EntityState)this).skillLocator.utility.UnsetSkillOverride((object)((EntityState)this).skillLocator.utility, exitMorph, (SkillOverridePriority)4); ((EntityState)this).skillLocator.secondary = BaseSamus.MissileSkill; if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { SkinnedMeshRenderer[] dsMR = morphBallEnter.DsMR; for (int i = 0; i < dsMR.Length; i++) { ((Renderer)dsMR[i]).enabled = true; } dsMR = morphBallEnter.NDsMR; for (int i = 0; i < dsMR.Length; i++) { ((Renderer)dsMR[i]).enabled = true; } morphBallEnter.VRCamera.localPosition = morphBallEnter.CameraPOS; } BaseSamus.morphBall = false; } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)4; } } public class FireBeam : BaseFireBeam { public Vector3 sizes; public override void OnEnter() { baseDuration = 0.05f; force = 5f; maxDamageCoefficient = StaticValues.cshootDamageCoefficient; minDamageCoefficient = StaticValues.shootDamageCoefficient; selfForce = 0f; speed = 200f; ResizeProjectile(); tracerPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/TracerNoSmoke"); muzzleName = "gunCon"; if (charge <= 0.4f) { projSound = "cShoot25"; } else if (charge <= 0.7f) { projSound = "cShoot50"; } else if (charge <= 0.9f) { projSound = "cShoot75"; } else { projSound = "cShoot100"; } tracerSound = "beam"; base.OnEnter(); } public override void OnExit() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) projectilePrefab.transform.localScale = Vector3.one; projectilePrefab.GetComponent<ProjectileController>().ghostPrefab.transform.localScale = Vector3.one; projectilePrefab.GetComponent<SphereCollider>().radius = 0.6f; base.OnExit(); } } public class Missile : BaseMissile { public override void OnEnter() { baseDuration = 0.1f; damageCoef = StaticValues.missileDamageCoefficient; recoil = 0.5f; smissleObject = null; Sound = "Missile"; sMissile = false; base.OnEnter(); } } public class MorphBallBomb : BaseSkillState { public float baseDuration = 0.1f; public string bombSound; [SerializeField] public GameObject projectilePrefab; private bool hasFired; private ChildLocator childLocator; public float damageCoef = 3f * Config.pBombMult; public override void OnEnter() { ((BaseState)this).OnEnter(); bombSound = "morphBomb"; childLocator = ((EntityState)this).GetModelChildLocator(); hasFired = false; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!hasFired) { Fire(); } if (!(((EntityState)this).fixedAge < baseDuration) && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void Fire() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); if ((Object)(object)projectilePrefab != (Object)null) { FireProjectileInfo val = default(FireProjectileInfo); val.projectilePrefab = projectilePrefab; val.owner = ((EntityState)this).gameObject; val.position = ((EntityState)this).GetModelChildLocator().FindChild("Ball2").position; val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); val.damage = damageCoef * ((BaseState)this).damageStat; val.force = 0f; val.crit = ((BaseState)this).RollCrit(); FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); hasFired = true; } } } public override void OnExit() { ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)4; } } public class MorphBallPBomb : BaseSkillState { public float baseDuration = 0.5f; public string bombSound; [SerializeField] public GameObject projectilePrefab; private bool hasFired; private ChildLocator childLocator; public float damageCoef = 10f * Config.pPowerBombMult; public override void OnEnter() { ((BaseState)this).OnEnter(); bombSound = "Powerbomb"; childLocator = ((EntityState)this).GetModelChildLocator(); hasFired = false; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!hasFired) { Fire(); } if (!(((EntityState)this).fixedAge < baseDuration) && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void Fire() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { Ray aimRay = ((BaseState)this).GetAimRay(); if ((Object)(object)projectilePrefab != (Object)null) { FireProjectileInfo val = default(FireProjectileInfo); val.projectilePrefab = projectilePrefab; val.owner = ((EntityState)this).gameObject; val.position = ((EntityState)this).GetModelChildLocator().FindChild("Ball2").position; val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); val.damage = damageCoef * ((BaseState)this).damageStat; val.force = 0f; val.crit = ((BaseState)this).RollCrit(); FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); hasFired = true; } } } public override void OnExit() { ((EntityState)this).skillLocator.primary.RemoveAllStocks(); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)4; } } public class Roll : BaseState { public float duration; private float initialSpeedCoefficient; private float finalSpeedCoefficient; public string dodgeSoundString; public string bombSoundString; [SerializeField] public GameObject projectilePrefab; public float damageCoefficient; public float dodgeFOV; private float rollSpeed; private Vector3 forwardDirection; private Animator animator; private Vector3 previousPosition; private bool hasFired; public SkinnedMeshRenderer[] DmeshRenderers; public SkinnedMeshRenderer[] NDmeshRenderers; private bool vrCheck; public override void OnEnter() { //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_02f7: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_030e: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = 0.8f; dodgeFOV = 110f; bombSoundString = "Bomb"; dodgeSoundString = "Roll"; if (VR.enabled) { DmeshRenderers = ((Component)MotionControls.dominantHand.transform).gameObject.GetComponentsInChildren<SkinnedMeshRenderer>(); NDmeshRenderers = ((Component)MotionControls.nonDominantHand.transform).gameObject.GetComponentsInChildren<SkinnedMeshRenderer>(); } damageCoefficient = StaticValues.dashDamageCoefficient; initialSpeedCoefficient = StaticValues.rollSpeedCoefficientIni; finalSpeedCoefficient = StaticValues.rollSpeedCoefficientFin; if (dodgeSoundString != null) { Util.PlaySound(dodgeSoundString, ((EntityState)this).gameObject); } animator = ((EntityState)this).GetModelAnimator(); ((Component)animator).GetComponent<ChildLocator>(); if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) && !Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector); forwardDirection = ((Vector3)(ref val)).normalized; } else if (((EntityState)this).isAuthority && Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { forwardDirection = ((Component)Camera.main).transform.forward; vrCheck = true; SkinnedMeshRenderer[] dmeshRenderers = DmeshRenderers; for (int i = 0; i < dmeshRenderers.Length; i++) { ((Renderer)dmeshRenderers[i]).enabled = false; } dmeshRenderers = NDmeshRenderers; for (int i = 0; i < dmeshRenderers.Length; i++) { ((Renderer)dmeshRenderers[i]).enabled = false; } } Vector3 val2 = (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) ? ((EntityState)this).characterDirection.forward : forwardDirection); Vector3 val3 = Vector3.Cross(Vector3.up, val2); float num = Vector3.Dot(forwardDirection, val2); float num2 = Vector3.Dot(forwardDirection, val3); animator.SetFloat("forwardSpeed", num, 0.1f, Time.fixedDeltaTime); animator.SetFloat("rightSpeed", num2, 0.1f, Time.fixedDeltaTime); if (Mathf.Abs(num) > Mathf.Abs(num2)) { ((EntityState)this).PlayAnimation("Body", (num > 0f) ? "Roll" : "Roll", "Roll.playbackRate", duration); } else { ((EntityState)this).PlayAnimation("Body", (num2 > 0f) ? "Roll" : "Roll", "Roll.playbackRate", duration); } RecalculateRollSpeed(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { ((EntityState)this).characterMotor.velocity.y = 0f; ((EntityState)this).characterMotor.velocity = forwardDirection * rollSpeed; } previousPosition = ((EntityState)this).transform.position - (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) ? ((EntityState)this).characterMotor.velocity : Vector3.zero); } private void RecalculateRollSpeed() { rollSpeed = base.moveSpeedStat * Mathf.Lerp(initialSpeedCoefficient, finalSpeedCoefficient, ((EntityState)this).fixedAge / duration); } public override void FixedUpdate() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); RecalculateRollSpeed(); if (((EntityState)this).fixedAge >= duration / 2f && !hasFired) { Fire(); } if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams)) { ((EntityState)this).cameraTargetParams.fovOverride = Mathf.Lerp(dodgeFOV, 60f, ((EntityState)this).fixedAge / duration); } Vector3 val = ((EntityState)this).transform.position - previousPosition; Vector3 normalized = ((Vector3)(ref val)).normalized; if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) && normalized != Vector3.zero) { Vector3 val2 = normalized * rollSpeed; float y = val2.y; val2.y = 0f; Vector3 velocity = forwardDirection * Mathf.Max(Vector3.Dot(val2, forwardDirection), 0f); velocity.y += Mathf.Max(y, 0f); ((EntityState)this).characterMotor.velocity = velocity; } previousPosition = ((EntityState)this).transform.position; if (!(((EntityState)this).fixedAge < duration) && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } private void Fire() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) if (!((EntityState)this).isAuthority) { return; } Ray aimRay = ((BaseState)this).GetAimRay(); if ((Object)(object)projectilePrefab != (Object)null) { FireProjectileInfo val = default(FireProjectileInfo); val.projectilePrefab = projectilePrefab; val.owner = ((EntityState)this).gameObject; val.position = ((Ray)(ref aimRay)).origin; val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); val.damage = damageCoefficient * base.damageStat; val.force = 0f; val.crit = ((BaseState)this).RollCrit(); FireProjectileInfo val2 = val; if (bombSoundString != null) { Util.PlaySound(bombSoundString, ((EntityState)this).gameObject); } ProjectileManager.instance.FireProjectile(val2); hasFired = true; } } public override void OnExit() { ((Component)animator).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams)) { ((EntityState)this).cameraTargetParams.fovOverride = -1f; } if (hasFired) { hasFired = false; } if (Utils.IsUsingMotionControls(((EntityState)this).characterBody) && vrCheck) { SkinnedMeshRenderer[] dmeshRenderers = DmeshRenderers; for (int i = 0; i < dmeshRenderers.Length; i++) { ((Renderer)dmeshRenderers[i]).enabled = true; } dmeshRenderers = NDmeshRenderers; for (int i = 0; i < dmeshRenderers.Length; i++) { ((Renderer)dmeshRenderers[i]).enabled = true; } } ((EntityState)this).OnExit(); } public override void OnSerialize(NetworkWriter writer) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnSerialize(writer); writer.Write(forwardDirection); } public override void OnDeserialize(NetworkReader reader) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnDeserialize(reader); forwardDirection = reader.ReadVector3(); } } public class SMissile : BaseMissile { public override void OnEnter() { damageCoef = StaticValues.smissileDamageCoefficient; baseDuration = 0.1f; recoil = 0.5f; Sound = "SMissile"; sMissile = true; base.OnEnter(); } public override void OnExit() { ((EntityState)this).skillLocator.secondary.DeductStock(5); ((EntityState)this).skillLocator.secondary.RecalculateMaxStock(); base.OnExit(); } } public class morphBallEnter : BaseSkillState { private ChildLocator ChildLocator; public float speedMult = 1.2f; public float baseDuration = 0.42f; private float duration; private GameObject ball; private GameObject armature; private GameObject mesh; private GameObject bone; private static float normalSpeed; private Transform tran; private float velx; private float vely; private float velz; private static int normalJumps; private static float normalSprint; [SerializeField] public SkillDef bomb; [SerializeField] public SkillDef powerBomb; [SerializeField] public SkillDef exitMorph; private static SkinnedMeshRenderer[] nDsMR; private static Vector3 cameraPOS; private static Transform vRCamera; private static Animator vR; private static SkinnedMeshRenderer[] dsMR; public static int NormalJumps { get { return normalJumps; } set { normalJumps = value; } } public static float NormalSprint { get { return normalSprint; } set { normalSprint = value; } } public static SkinnedMeshRenderer[] DsMR { get { return dsMR; } set { dsMR = value; } } public static SkinnedMeshRenderer[] NDsMR { get { return nDsMR; } set { nDsMR = value; } } public static Vector3 CameraPOS { get { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return cameraPOS; } set { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) cameraPOS = value; } } public static Transform VRCamera { get { return vRCamera; } set { vRCamera = value; } } public static Animator VR { get { return vR; } set { vR = value; } } public static float NormalSpeed { get { return normalSpeed; } set { normalSpeed = value; } } public override void OnEnter() { //IL_019a: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; ((EntityState)this).skillLocator.primary.SetSkillOverride((object)((EntityState)this).skillLocator.primary, bomb, (SkillOverridePriority)4); ((EntityState)this).skillLocator.utility.SetSkillOverride((object)((EntityState)this).skillLocator.utility, exitMorph, (SkillOverridePriority)4); ((EntityState)this).skillLocator.secondary = BaseSamus.PowerBallskill; ChildLocator = ((EntityState)this).GetModelChildLocator(); ball = ((Component)ChildLocator.FindChild("Ball2")).gameObject; armature = ((Component)ChildLocator.FindChild("armature")).gameObject; mesh = ((Component)ChildLocator.FindChild("Body")).gameObject; bone = ((Component)ChildLocator.FindChild("Ball2Bone")).gameObject; if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { VR = MotionControls.dominantHand.animator; VRCamera = ((EntityState)this).characterBody.transform.Find("VRCamera"); DsMR = ((Component)MotionControls.dominantHand.transform).gameObject.GetComponentsInChildren<SkinnedMeshRenderer>(); NDsMR = ((Component)MotionControls.nonDominantHand.transform).gameObject.GetComponentsInChildren<SkinnedMeshRenderer>(); VRStuff.SamusHUD.inMorphBall = true; SkinnedMeshRenderer[] array = DsMR; for (int i = 0; i < array.Length; i++) { ((Renderer)array[i]).enabled = false; } array = NDsMR; for (int i = 0; i < array.Length; i++) { ((Renderer)array[i]).enabled = false; } CameraPOS = VRCamera.localPosition; VRCamera.Translate(0f, -0.5f, 0f); } ((EntityState)this).PlayAnimation("Body", "transformIn", "Roll.playbackRate", duration); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!(((EntityState)this).fixedAge < duration) && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); ball.GetComponent<Rigidbody>().constraints = (RigidbodyConstraints)94; ball.GetComponent<Rigidbody>().detectCollisions = false; NormalSpeed = ((EntityState)this).characterBody.baseMoveSpeed; ((EntityState)this).characterBody.baseMoveSpeed = NormalSpeed * 2f; NormalJumps = ((EntityState)this).characterBody.baseJumpCount; ((EntityState)this).characterBody.baseJumpCount = 0; NormalSprint = ((EntityState)this).characterBody.sprintingSpeedMultiplier; ((EntityState)this).characterBody.sprintingSpeedMultiplier = 1.2f; if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.ArmorBoost); } ball.SetActive(true); mesh.SetActive(false); BaseSamus.morphBall = true; } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)4; } } public class trackingMissile : BaseMissile { protected SamusTracker SamusTracker; public override void OnEnter() { SamusTracker = ((EntityState)this).gameObject.GetComponent<SamusTracker>(); target = SamusTracker.GetTrackingTarget(); baseDuration = 0.1f; damageCoef = StaticValues.missileDamageCoefficient; recoil = 0.5f; smissleObject = null; Sound = "Missile"; sMissile = false; base.OnEnter(); } } } namespace SamusMod.SkillStates.BaseStates { public class BaseFireBeam : BaseSkillState { [SerializeField] public GameObject projectilePrefab; [SerializeField] public GameObject muzzleflashEffectPrefab; public float baseDuration; public float minDamageCoefficient; public float maxDamageCoefficient; public float force; public string muzzleName; public GameObject tracerPrefab; [SerializeField] public GameObject bulletHitEffect; private float duration; public float selfForce; public float charge; public float speed; private GameObject guncon; public Vector3 size; public string tracerSound; public string projSound; public Vector3 csize; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; Transform val = ((EntityState)this).GetModelChildLocator().FindChild("gunCon"); guncon = ((Component)val).gameObject; if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { Animator animator = MotionControls.dominantHand.animator; if (charge <= 0.15f) { EntityState.PlayAnimationOnAnimator(animator, "Base Layer", "shoot", "Shoot.playbackRate", duration * 2f); } else if (charge > 0.15f) { EntityState.PlayAnimationOnAnimator(animator, "Base Layer", "chargeShoot", "Charge.playbackRate", ((BaseState)this).attackSpeedStat * 0.4585f); } } else if (charge == 1f) { ((EntityState)this).PlayAnimation("Gesture, Override", "chargeMaxShoot", "Charge.playbackRate", duration); } else { ((EntityState)this).PlayAnimation("Gesture, Override", "Beam", "Charge.playbackRate", duration); } if (Object.op_Implicit((Object)(object)muzzleflashEffectPrefab)) { EffectManager.SimpleMuzzleFlash(muzzleflashEffectPrefab, ((EntityState)this).gameObject, "gunCon", false); } Fire(); } public virtual void ResizeProjectile() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) projectilePrefab.transform.localScale = projectilePrefab.transform.localScale * charge + new Vector3(0.1f, 0.1f, 0.1f); ProjectileController component = projectilePrefab.GetComponent<ProjectileController>(); component.ghostPrefab.transform.localScale = component.ghostPrefab.transform.localScale * charge; } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); } private void Fire() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02af: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) if (!((EntityState)this).isAuthority) { return; } if (charge <= 0.15f) { SphereCollider[] componentsInChildren = projectilePrefab.GetComponentsInChildren<SphereCollider>(); for (int i = 0; i < componentsInChildren.Length; i++) { _ = componentsInChildren[i].radius; } charge = 0.1f; } Ray aimRay = ((BaseState)this).GetAimRay(); if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { aimRay = MotionControls.dominantHand.aimRay; } _ = (Object)(object)projectilePrefab != (Object)null; if ((Object)(object)projectilePrefab != (Object)null && charge > 0.15f) { float num = Util.Remap(charge, 0f, 1f, minDamageCoefficient, maxDamageCoefficient); float num2 = charge * force; if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { Util.PlaySound(projSound, ((Component)MotionControls.dominantHand.muzzle).gameObject); } else { Util.PlaySound(projSound, ((EntityState)this).gameObject); } projectilePrefab.GetComponent<colision_test>().inTransform = guncon.transform; FireProjectileInfo val = default(FireProjectileInfo); val.projectilePrefab = projectilePrefab; val.position = ((Ray)(ref aimRay)).origin; val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction); val.owner = ((EntityState)this).gameObject; val.damage = ((BaseState)this).damageStat * num; val.force = num2; val.crit = ((BaseState)this).RollCrit(); ((FireProjectileInfo)(ref val)).speedOverride = speed; FireProjectileInfo val2 = val; ProjectileManager.instance.FireProjectile(val2); } else if (((EntityState)this).isAuthority) { Util.Remap(0.1f, 0.1f, 1f, minDamageCoefficient, maxDamageCoefficient); float num3 = charge * force; if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { Util.PlaySound(projSound, ((Component)MotionControls.dominantHand.muzzle).gameObject); } else { Util.PlaySound(tracerSound, ((EntityState)this).gameObject); } new BulletAttack { owner = ((EntityState)this).gameObject, weapon = ((EntityState)this).gameObject, origin = ((Ray)(ref aimRay)).origin, aimVector = ((Ray)(ref aimRay)).direction, minSpread = 0f, maxSpread = 0f, damage = ((BaseState)this).damageStat * Config.pBeamMult, force = num3, tracerEffectPrefab = tracerPrefab, muzzleName = muzzleName, hitEffectPrefab = bulletHitEffect, isCrit = ((BaseState)this).RollCrit(), radius = 0.1f, smartCollision = true }.Fire(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class BaseMissile : BaseSkillState { public float damageCoef; public float baseDuration; public float recoil; [SerializeField] public GameObject projectilePrefab; [SerializeField] public GameObject muzzleEffectPrefab; [SerializeField] public GameObject smissleObject; public GameObject sMissileExtraMissiles; protected static int secStock; public bool sMissile; public string Sound; private float duration; private float fireDuration; private bool hasFired; private Animator animator; private string muzzleString; private Transform muzzleTransform; public HurtBox target; private Ray gunRay; public override void OnEnter() { ((BaseState)this).OnEnter(); sMissileExtraMissiles = (((Object)(object)smissleObject != (Object)null) ? smissleObject : null); duration = baseDuration / ((BaseState)this).attackSpeedStat; fireDuration = 0.5f * duration; ((EntityState)this).characterBody.SetAimTimer(2f); animator = ((EntityState)this).GetModelAnimator(); muzzleString = "gunCon"; ((EntityState)this).PlayAnimation("Gesture, Override", "Missile", "Missile.playbackRate", duration); secStock = ((EntityState)this).skillLocator.secondary.stock; muzzleTransform = ((EntityState)this).GetModelChildLocator().FindChild(muzzleString); } public override void OnExit() { if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { VRStuff.SamusHUD.setMissileActive(active: true); } ((EntityState)this).OnExit(); } private void fireMissile() { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) if (!hasFired) { hasFired = true; if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { Util.PlaySound(Sound, ((Component)MotionControls.dominantHand.muzzle).gameObject); } else { Util.PlaySound(Sound, ((EntityState)this).gameObject); } ((EntityState)this).characterBody.AddSpreadBloom(0.75f); Ray aimRay = ((BaseState)this).GetAimRay(); gunRay = new Ray(muzzleTransform.position, ((Ray)(ref aimRay)).direction); if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { aimRay = MotionControls.dominantHand.aimRay; } if ((Object)(object)muzzleEffectPrefab != (Object)null) { EffectManager.SimpleMuzzleFlash(muzzleEffectPrefab, ((EntityState)this).gameObject, muzzleString, false); } if (((EntityState)this).isAuthority && (Object)(object)target != (Object)null) { MissileUtils.FireMissile(((Ray)(ref gunRay)).origin, ((EntityState)this).characterBody, default(ProcChainMask), ((Component)target).gameObject, damageCoef * ((BaseState)this).damageStat, ((BaseState)this).RollCrit(), projectilePrefab, (DamageColorIndex)0, ((Ray)(ref gunRay)).direction + Random.insideUnitSphere * 0.1f, 100f, true); } else if (((EntityState)this).isAuthority && (Object)(object)target == (Object)null && !sMissile) { MissileUtils.FireMissile(((Ray)(ref gunRay)).origin, ((EntityState)this).characterBody, default(ProcChainMask), (GameObject)null, damageCoef * ((BaseState)this).damageStat, ((BaseState)this).RollCrit(), projectilePrefab, (DamageColorIndex)0, ((Ray)(ref gunRay)).direction + Random.insideUnitSphere * 0.25f, 100f, true); } else if (((EntityState)this).isAuthority && (Object)(object)target == (Object)null && sMissile) { SuperMissileICBMLaunch(((Ray)(ref gunRay)).origin, ((EntityState)this).characterBody, default(ProcChainMask), null, damageCoef * ((BaseState)this).damageStat, ((BaseState)this).RollCrit(), projectilePrefab, (DamageColorIndex)0); } } } private void SuperMissileICBMLaunch(Vector3 position, CharacterBody attacker, ProcChainMask procChainMask, GameObject victim, float missileDamage, bool isCrit, GameObject projectilePrefab, DamageColorIndex damageColorIndex) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) Vector3 val = Vector3.up + Random.insideUnitSphere * 0.1f; float force = 200f; Inventory inventory = ((EntityState)this).characterBody.inventory; int num = ((inventory != null) ? inventory.GetItemCount(Items.MoreMissile) : 0); float num2 = Mathf.Max(1f, 1f + 0.5f * (float)(num - 1)); InputBankTest inputBank = ((EntityState)this).inputBank; ProcChainMask procChainMask2 = procChainMask; if (true) { ((ProcChainMask)(ref procChainMask2)).AddProc((ProcType)1); } FireProjectileInfo val2 = default(FireProjectileInfo); val2.projectilePrefab = projectilePrefab; val2.position = position; val2.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref gunRay)).direction); val2.procChainMask = procChainMask2; val2.target = victim; val2.owner = ((Component)attacker).gameObject; val2.damage = missileDamage * num2; val2.crit = isCrit; val2.force = force; val2.damageColorIndex = damageColorIndex; FireProjectileInfo val3 = val2; ProjectileManager.instance.FireProjectile(val3); if (num > 0) { Vector3 val4 = (Object.op_Implicit((Object)(object)inputBank) ? inputBank.aimDirection : attacker.transform.position); FireProjectileInfo val5 = val3; val5.rotation = Util.QuaternionSafeLookRotation(Quaternion.AngleAxis(45f, val4) * val); val5.projectilePrefab = sMissileExtraMissiles; val5.damage = StaticValues.missileDamageCoefficient * ((BaseState)this).damageStat; FireProjectileInfo val6 = val3; val6.rotation = Util.QuaternionSafeLookRotation(Quaternion.AngleAxis(-45f, val4) * val); val6.projectilePrefab = sMissileExtraMissiles; val6.damage = StaticValues.missileDamageCoefficient * ((BaseState)this).damageStat; ProjectileManager.instance.FireProjectile(val5); ProjectileManager.instance.FireProjectile(val6); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireDuration) { fireMissile(); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)1; } public void calculateSMissiles() { int maxStock = 0; if (secStock % 5 == 0) { maxStock = secStock / 5; } else if (secStock / 5 > 1) { maxStock = secStock / 5; } else if (secStock < 1) { maxStock = 0; } ((EntityState)this).skillLocator.special.maxStock = maxStock; } } public class BaseMorphBall : BaseSkillState { private ChildLocator ChildLocator; private bool onEnter; [SerializeField] public float speedMult = 1.2f; private GameObject ball; private GameObject armature; private GameObject mesh; private GameObject bone; private float normalSpeed; private Transform tran; private float velx; private float vely; private float velz; [SerializeField] public SkillDef bomb; [SerializeField] public SkillDef powerBomb; [SerializeField] public SkillDef exitMorph; public override void OnEnter() { ((BaseState)this).OnEnter(); onEnter = true; ((EntityState)this).skillLocator.utility.SetSkillOverride((object)((EntityState)this).skillLocator.utility, exitMorph, (SkillOverridePriority)4); ChildLocator = ((EntityState)this).GetModelChildLocator(); ((Component)((EntityState)this).characterBody).gameObject.GetComponent<Collider>().enabled = false; ball = ((Component)ChildLocator.FindChild("Ball2")).gameObject; armature = ((Component)ChildLocator.FindChild("armature")).gameObject; mesh = ((Component)ChildLocator.FindChild("Body")).gameObject; bone = ((Component)ChildLocator.FindChild("Ball2Bone")).gameObject; ball.GetComponent<Rigidbody>().constraints = (RigidbodyConstraints)14; normalSpeed = ((BaseState)this).moveSpeedStat; ((BaseState)this).moveSpeedStat = normalSpeed * 2f; if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.ArmorBoost); } ball.SetActive(true); armature.SetActive(false); mesh.SetActive(false); } private Vector3 IdealVelocity() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) return ((EntityState)this).characterDirection.forward * ((EntityState)this).characterBody.moveSpeed * speedMult; } public override void FixedUpdate() { //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= 0.5f && onEnter) { onEnter = false; } if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { Collider component = ball.GetComponent<Collider>(); Rigidbody component2 = ball.GetComponent<Rigidbody>(); component.enabled = true; component2.isKinematic = false; component2.interpolation = (RigidbodyInterpolation)1; component2.collisionDetectionMode = (CollisionDetectionMode)1; component2.AddForce(((EntityState)this).characterMotor.velocity * 100f, (ForceMode)0); } } public override void Update() { ((EntityState)this).Update(); velx = ((EntityState)this).characterMotor.velocity.x; vely = ((EntityState)this).characterMotor.velocity.y; velz = ((EntityState)this).characterMotor.velocity.z; } public override void OnExit() { if (NetworkServer.active) { ((EntityState)this).characterBody.RemoveBuff(Buffs.ArmorBoost); } ((Component)((EntityState)this).characterBody).gameObject.GetComponent<Collider>().enabled = true; Collider component = ball.GetComponent<Collider>(); Rigidbody component2 = ball.GetComponent<Rigidbody>(); component.enabled = false; component2.isKinematic = true; component2.interpolation = (RigidbodyInterpolation)0; component2.collisionDetectionMode = (CollisionDetectionMode)0; ((Component)ChildLocator.FindChild("Ball2")).gameObject.SetActive(false); ((Component)ChildLocator.FindChild("armature")).gameObject.SetActive(true); ((Component)ChildLocator.FindChild("Body")).gameObject.SetActive(true); ((EntityState)this).OnExit(); } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class BaseSamus : GenericCharacterMain { private ChildLocator ChildLocator; private Animator Animator; private static bool noPowerBomb; private bool filled; private Collision collision; private Collider collider; private GameObject ball; private Rigidbody BallRigidBody; private Vector3 velocity; private Vector3 direction; public Vector3 camera; private float horizontalInput; private Vector3 forwardDir; private static float stopwatch; private static float stopwatch2; private static float cacheStopwatch; private static float cacheStopwatch2; private static float maxStopwatch; private static float maxStopwatch2; private static bool powerBombInit; private static bool vrCheck; private static CharacterBody body; [SerializeField] public SkillDef morphBallRef; [SerializeField] public SkillDef autoFireSkill; private static GenericSkill powerBallskill; private static GenericSkill missileSkill; private bool effectiveAuth; private PlayerCharacterMasterController PlayerCharacterMasterController; private Player player; public static bool morphBall { get; set; } public static CharacterBody Body { get { return body; } set { body = value; } } public static bool VrCheck { get { return vrCheck; } set { vrCheck = value; } } public static float Stopwatch { get { return stopwatch; } set { stopwatch = value; } } public static float Stopwatch2 { get { return stopwatch2; } set { stopwatch2 = value; } } public static bool PowerBombInit { get { return powerBombInit; } set { powerBombInit = value; } } public static GenericSkill PowerBallskill { get { return powerBallskill; } set { powerBallskill = value; } } public static GenericSkill MissileSkill { get { return missileSkill; } set { missileSkill = value; } } public override void OnEnter() { ChildLocator = ((EntityState)this).GetModelChildLocator(); ball = ((Component)ChildLocator.FindChild("Ball2")).gameObject; collider = ball.GetComponent<Collider>(); BallRigidBody = ball.GetComponent<Rigidbody>(); PlayerCharacterMasterController = ((EntityState)this).characterBody.master.playerCharacterMasterController; LocalUser val = default(LocalUser); CameraRigController val2 = default(CameraRigController); PlayerCharacterMasterController.CanSendBodyInput(PlayerCharacterMasterController.networkUser, ref val, ref player, ref val2); if ((Object)(object)((EntityState)this).skillLocator.utility.skillDef == (Object)(object)morphBallRef) { MissileSkill = ((EntityState)this).skillLocator.FindSkillByFamilyName("SamusSecondary"); powerBallskill = ((EntityState)this).skillLocator.FindSkillByFamilyName("SamusSecondary2"); } else { ((Behaviour)((EntityState)this).skillLocator.FindSkillByFamilyName("SamusSecondary2")).enabled = false; } Stopwatch = 0f; Stopwatch2 = 0f; powerBombInit = false; Body = ((EntityState)this).characterBody; if (VR.enabled) { VrCheck = Utils.IsUsingMotionControls(Body); if (VrCheck) { VRStuff.setupVR(Body); Camera.main.nearClipPlane = 0.05f; ((Component)ChildLocator.FindChild("chargeEffect")).gameObject.SetActive(false); if (Config.enableHud.Value) { VRStuff.SamusHUD.initSamusHUD(Body); } } } ((GenericCharacterMain)this).OnEnter(); } public override void Update() { ((GenericCharacterMain)this).Update(); if ((Object)(object)DotController.FindDotController(((EntityState)this).gameObject) != (Object)null) { DotController val = DotController.FindDotController(((EntityState)this).gameObject); switch (val.activeDotFlags) { case 3u: val.RemoveDotStackAtServer(3); break; case 1u: val.RemoveDotStackAtServer(1); break; case 2u: val.RemoveDotStackAtServer(2); break; } } if (effectiveAuth && !morphBall && player.GetButtonDown(RewiredAction.autoFire.ActionId)) { if ((Object)(object)((EntityState)this).skillLocator.primary.skillDef == (Object)(object)autoFireSkill) { ((EntityState)this).skillLocator.primary.UnsetSkillOverride((object)((EntityState)this).skillLocator.primary, autoFireSkill, (SkillOverridePriority)4); } else { ((EntityState)this).skillLocator.primary.SetSkillOverride((object)((EntityState)this).skillLocator.primary, autoFireSkill, (SkillOverridePriority)4); } } } public override void FixedUpdate() { //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0442: Unknown result type (might be due to invalid IL or missing references) //IL_0447: Unknown result type (might be due to invalid IL or missing references) //IL_045e: Unknown result type (might be due to invalid IL or missing references) ((GenericCharacterMain)this).FixedUpdate(); effectiveAuth = ((EntityState)this).characterBody.master.hasEffectiveAuthority; if (Object.op_Implicit((Object)(object)Animator)) { Animator.SetFloat("sprintValue", (float)(((EntityState)this).characterBody.isSprinting ? (-1) : 0), 0.2f, Time.fixedDeltaTime); Animator.SetBool("inCombat", !((EntityState)this).characterBody.outOfCombat || !((EntityState)this).characterBody.outOfDanger); } if (!((EntityState)this).healthComponent.alive) { EntityState.Destroy((Object)(object)VRStuff.hudHandle); } if (((EntityState)this).healthComponent.isInFrozenState && ChildLocator.FindChild("Ball").localScale != new Vector3(0.5f, 0.5f, 0.5f)) { ChildLocator.FindChild("Ball").localScale = new Vector3(0.5f, 0.5f, 0.5f); } if (stopwatch2 < maxStopwatch2) { stopwatch2 += Time.fixedDeltaTime; } if (!morphBall) { return; } if (stopwatch < maxStopwatch) { stopwatch += Time.fixedDeltaTime; } velocity = ((EntityState)this).characterMotor.velocity; direction = ((EntityState)this).inputBank.moveVector; Quaternion rotation = ((EntityState)this).cameraTargetParams.cameraPivotTransform.rotation; camera = ((Quaternion)(ref rotation)).eulerAngles; Vector3.Scale(velocity, direction); collider.enabled = true; BallRigidBody.isKinematic = false; BallRigidBody.interpolation = (RigidbodyInterpolation)1; BallRigidBody.collisionDetectionMode = (CollisionDetectionMode)1; float num; if (((EntityState)this).characterBody.isSprinting) { num = ((velocity.x < 0f && velocity.z < 0f) ? (0f - velocity.x + (0f - velocity.z)) : ((velocity.x < 0f && velocity.z > 0f) ? (0f - velocity.x + velocity.z) : ((velocity.x > 0f && velocity.z < 0f) ? (velocity.x + (0f - velocity.z)) : ((!(velocity.x > 0f) || !(velocity.z > 0f)) ? (velocity.x + velocity.z) : (velocity.x + velocity.z))))); if (num > 16.8f || num < -16.8f) { num = 16.8f; } } else { num = ((velocity.x < 0f && velocity.z < 0f) ? (0f - velocity.x + (0f - velocity.z)) : ((velocity.x < 0f && velocity.z > 0f) ? (0f - velocity.x + velocity.z) : ((velocity.x > 0f && velocity.z < 0f) ? (velocity.x + (0f - velocity.z)) : ((!(velocity.x > 0f) || !(velocity.z > 0f)) ? (velocity.x + velocity.z) : (velocity.x + velocity.z))))); if (num > 14f || num < -14f) { num = 14f; } } if (((EntityState)this).characterMotor.velocity != Vector3.zero) { ball.transform.Rotate(Vector3.up, 0f - num); } } private void DotController_onDotInflictedServerGlobal(DotController dotController, ref InflictDotInfo inflictDotInfo) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Invalid comparison between Unknown and I4 if ((inflictDotInfo.victimObject.gameObject.GetComponent<CharacterBody>().baseNameToken == "DG_SAMUS_NAME" || inflictDotInfo.attackerObject.gameObject.GetComponent<CharacterBody>().baseNameToken == "DG_SAMUS_NAME") && (int)inflictDotInfo.dotIndex == 3) { inflictDotInfo.duration = 0f; inflictDotInfo.damageMultiplier = 0f; } } public override void OnExit() { ((GenericCharacterMain)this).OnExit(); EntityState.Destroy((Object)(object)VRStuff.hudHandle); } } public class ChargeBeamBase : BaseSkillState { [SerializeField] public GameObject chargeEffectPrefab; [SerializeField] public string chargeSoundString; [SerializeField] public GameObject chargeMuzzle; public float baseDuration = 1.15f; [SerializeField] public float minBloomRadius; [SerializeField] public float maxBloomRadius; public GameObject crosshairOverridePrefab; protected static readonly float minChargeDuration; protected static Vector3 size; private GameObject defaultCrosshairPrefab; private uint loopSoundInstanceId; private OverrideRequest crosshairOverrideRequest; private bool isPlayingSound; private float duration { get; set; } private Animator animator { get; set; } private ChildLocator childLocator { get; set; } [SerializeField] public GameObject chargeEffectInstance { get; set; } public virtual BaseFireBeam GetNextBase() { return new BaseFireBeam(); } public override void OnEnter() { //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; animator = ((EntityState)this).GetModelAnimator(); childLocator = ((EntityState)this).GetModelChildLocator(); Transform val = childLocator.FindChild("gunCon"); crosshairOverrideRequest = CrosshairUtils.RequestOverrideForBody(((EntityState)this).characterBody, crosshairOverridePrefab, (OverridePriority)1); if (!Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)chargeEffectPrefab)) { chargeEffectInstance = Object.Instantiate<GameObject>(chargeEffectPrefab, val.position, val.rotation); chargeEffectInstance.transform.parent = val; } } else { chargeEffectInstance = Object.Instantiate<GameObject>(chargeEffectPrefab, val); chargeEffectInstance.transform.Rotate(90f, 0f, 0f); } ((EntityState)this).PlayAnimation("Gesture, Override", "chargeLoop", "Charge.playbackRate", duration); defaultCrosshairPrefab = ((EntityState)this).characterBody.defaultCrosshairPrefab; ((BaseState)this).StartAimMode(duration + 2f, false); } public override void OnExit() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) OverrideRequest obj = crosshairOverrideRequest; if (obj != null) { obj.Dispose(); } AkSoundEngine.StopPlayingID(loopSoundInstanceId); if (!((EntityState)this).outer.destroying) { ((EntityState)this).PlayAnimation("Gesture, Override", "BufferEmpty"); } size = chargeEffectInstance.transform.localScale; EntityState.Destroy((Object)(object)chargeEffectInstance); ((EntityState)this).OnExit(); } protected virtual float calcCharge() { if (((EntityState)this).age <= Time.fixedDeltaTime) { return Mathf.Clamp01(Time.fixedDeltaTime / duration); } return Mathf.Clamp01(((EntityState)this).fixedAge / duration); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); float charge = calcCharge(); TryNextState(charge); } public override void Update() { ((EntityState)this).Update(); float charge = calcCharge(); TryNextState(charge); ((EntityState)this).characterBody.SetSpreadBloom(Util.Remap(calcCharge(), 0f, 1f, minBloomRadius, maxBloomRadius), true); } private void TryNextState(float charge) { if (((EntityState)this).isAuthority && !isPlayingSound && (double)charge > 0.15) { if (Utils.IsUsingMotionControls(((EntityState)this).characterBody)) { loopSoundInstanceId = Util.PlayAttackSpeedSound(chargeSoundString, ((Component)MotionControls.dominantHand.muzzle).gameObject, duration - 0.15f); } else { loopSoundInstanceId = Util.PlayAttackSpeedSound(chargeSoundString, ((EntityState)this).gameObject, duration - 0.15f); } isPlayingSound = true; } if (((EntityState)this).isAuthority && !((BaseSkillState)this).IsKeyDownAuthority() && ((EntityState)this).age >= minChargeDuration) { BaseFireBeam nextBase = GetNextBase(); nextBase.charge = charge; ((EntityState)this).outer.SetNextState((EntityState)(object)nextBase); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)2; } } public class DeathState : GenericCharacterDeath { private Vector3 previousPosition; private float upSpeedVelocity; private float upSpeed; private Animator modelAnimator; public override bool shouldAutoDestroy => false; public override void OnEnter() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) ((GenericCharacterDeath)this).OnEnter(); Vector3 val = Vector3.up * 3f; if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { val += ((EntityState)this).characterMotor.velocity; ((Behaviour)((EntityState)this).characterMotor).enabled = false; } if (Object.op_Implicit((Object)(object)((GenericCharacterDeath)this).cachedModelTransform)) { RagdollController component = ((Component)((GenericCharacterDeath)this).cachedModelTransform).GetComponent<RagdollController>(); if (Object.op_Implicit((Object)(object)component)) { component.BeginRagdoll(val); } } } public override void PlayDeathAnimation(float crossfadeDuration = 0.1f) { } public override void FixedUpdate() { ((GenericCharacterDeath)this).FixedUpdate(); if (NetworkServer.active && ((EntityState)this).fixedAge > 4f) { EntityState.Destroy((Object)(object)((EntityState)this).gameObject); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)6; } } public class SpawnState : BaseState { [SerializeField] public float duration; private Transform modelTransform; private Animator animator; public override void OnEnter() { ((BaseState)this).OnEnter(); animator = ((EntityState)this).GetModelAnimator(); modelTransform = ((EntityState)this).GetModelTransform(); if (NetworkServer.active) { ((EntityState)this).characterBody.AddBuff(Buffs.HiddenInvincibility); } ((EntityState)this).PlayAnimation("Body", "Spawn", "Spawn.playbackRate", duration); if (Object.op_Implicit((Object)(object)animator)) { animator.SetFloat(AnimationParameters.aimWeight, 0f); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (Object.op_Implicit((Object)(object)animator)) { animator.SetBool("inCombat", true); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); if (Object.op_Implicit((Object)(object)animator)) { animator.SetFloat(AnimationParameters.aimWeight, 1f); } if (NetworkServer.active) { ((EntityState)this).characterBody.RemoveBuff(Buffs.HiddenInvincibility); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)6; } } } namespace SamusMod.Misc { internal enum EHudState { Combat, Ball, None } internal class SamusHUD : MonoBehaviour { private GameObject baseHUD; private GameObject damageLight; private GameObject camFilter; [SerializeField] private hudHealthInterface energyIntf; [SerializeField] private hudThreat threatIntf; [SerializeField] private hudMissiles missileIntf; [SerializeField] private hudDeco decoIntf; [SerializeField] private hudHelmet helmetIntf; [SerializeField] private hudBall ballIntf; public hudBossEnergy bossEnergyIntf; private hudColors hudcolors; private hudColors combatHudColors; private hudColors ballHudColors; private hudColors.EnergyBarColors energyBar; private hudColors.EnergyBarColors combatEnergyBar; private hudColors.EnergyBarColors ballEnergyBar; private float tempHealth; private float cachedBossHealth; public bool currInit; private EHudState curState; private bool envDamage; private float bossAlpha = 1f; private List<Color> frameColorTest; private List<Color> baseFrame; private float playerHealth; private float maxPlayerHealth = 100f; private uint totalEnergyTanks = 6u; private uint missileAmount; private uint missileCapacity; private uint rendertimings; private uint filledEnergyTanks; private bool energyLow; private bool missileActive; private Material localMat; private List<Text> texts; private float hudDamagePracticalsInit; private float hudDamagePracticals; private float hudDamagePracticalsGain; private float damageTime; private float damageLightPulser; private float damageFilterAmt; private float damageFilterAmtInit = 1f; private float damageFilterAmtGain; private float energyLowTimer; private float energyLowPulse; private float missileActiveTimer; private bool wasDamaged; public static float DamageAm; public bool inMorphBall; private bool allInit; private hudTimer timer; private float timerV; private CharacterBody character; public GameObject bossHealthBarRoot; private BossGroup bossInfo; private Material damageMat; private static uint[] playingIds = new uint[50]; private void OnDestroy() { bossEnergyIntf.reset(); } private void Start() { //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Expected O, but got Unknown //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) baseHUD = ((Component)this).gameObject; decoIntf.SetSize(); helmetIntf.SetSize(); combatHudColors = new hudColors(combatVisor: true); combatEnergyBar = combatHudColors.GetEnergyBarColors(combatMode: true); ballHudColors = new hudColors(combatVisor: false); ballEnergyBar = ballHudColors.GetEnergyBarColors(combatMode: false); timer = new hudTimer(); texts = new List<Text>(); Transform[] componentsInChildren = ((Component)((Component)this).gameObject.transform).GetComponentsInChildren<Transform>(true); foreach (Transform val in componentsInChildren) { if ((Object)(object)((Component)val).gameObject.GetComponent<Text>() != (Object)null) { texts.Add(((Component)val).gameObject.GetComponent<Text>()); } } foreach (Text text in texts) { localMat = new Material(((Graphic)text).material); ((Graphic)text).material = localMat; } baseFrame = new List<Color> { new Color(0.156863f, 0.156863f, 0.156863f), new Color(0.4f, 0.4f, 0.4f), new Color(0.8f, 0.8f, 0.8f) }; Color val2 = default(Color); ((Color)(ref val2))..ctor(0.294118f, 0.494118f, 0.639216f, 32f / 51f); frameColorTest = new List<Color> { baseFrame[0] * val2, baseFrame[1] * val2, baseFrame[2] * val2 }; updateHudState(); } private void FixedUpdate() { timerV = timer.solveFTimer(); if (missileActive) { missActiveTimer(); } updateHudState(); if (!allInit) { checkInits(Time.fixedDeltaTime); } HUDUpdate(Time.fixedDeltaTime, HudVis: true); } private void checkInits(float dt) { int num = 4; if (!hudcolors.init) { updateHudState(); num--; } if (!energyIntf.initHealth) { UpdateEnergy(dt, init: true); num--; } if (!bossEnergyIntf.bossIni) { bossEnergyIntf.SetBossParams(Visible: false, "", "", 0f, 0f, hudcolors, energyBar); num--; } if (!ballIntf.ballini) { UpdateBallMode(init: true); num--; } if (num == 4) { allInit = true; } } private void updateHudState() { if (character.skillLocator.utility.skillNameToken == "DG_SAMUS_UTILITY_DASH_NAME") { curState = EHudState.Combat; hudcolors = combatHudColors; energyBar = combatEnergyBar; return; } inMorphBall = BaseSamus.morphBall; if (inMorphBall) { curState = EHudState.Ball; } else { curState = EHudState.Combat; } switch (curState) { case EHudState.Combat: hudcolors = combatHudColors; energyBar = combatEnergyBar; break; case EHudState.Ball: hudcolors = ballHudColors; energyBar = ballEnergyBar; break; case EHudState.None: break; } } private void UpdateEnergy(float dt, bool init) { float num = Mathf.Max(0f, Mathf.Ceil(character.healthComponent.combinedHealth)); float num2 = Mathf.Ceil(character.healthComponent.fullCombinedHealth); uint num3 = 6u; uint num4 = 0u; num4 = (uint)character.inventory.GetItemCount(Items.ExtraLife); if (!init) { energyLow = isEnergyLow(); } if (init || num != playerHealth || num3 != totalEnergyTanks || num2 != maxPlayerHealth || num4 != filledEnergyTanks) { if (energyIntf.checkEnergyBarIsActive(init)) { if (init) { energyIntf.initValues(hudTypes.combat, num, num2, (int)num3, (int)num4, character.healthComponent, EnergyLow: false); } energyIntf.SetCurrEnergy(num, num2, wrapped: false); energyIntf.SetEnergyLow(energyLow); } playerHealth = num; maxPlayerHealth = num2; filledEnergyTanks = num4; } if (Object.op_Implicit((Object)(object)bossEnergyIntf)) { bossInfo = bossHealthBarRoot.GetComponent<HUDBossHealthBarController>().currentBossGroup; if ((Object)(object)bossInfo != (Object)null && bossEnergyIntf.loaded) { bossAlpha = ((bossEnergyIntf.GetCurrentHealth() > 0f) ? 1 : 0); HUDBossHealthBarController component = bossHealthBarRoot.GetComponent<HUDBossHealthBarController>(); string parsedText = ((TMP_Text)component.bossNameLabel).GetParsedText(); string parsedText2 = ((TMP_Text)component.bossSubtitleLabel).GetParsedText(); ((Behaviour)bossHealthBarRoot.GetComponent<Canvas>()).enabled = false; bossEnergyIntf.SetBossParams(Visible: true, parsedText, parsedText2, bossInfo.totalObservedHealth, bossInfo.totalMaxObservedMaxHealth, hudcolors, energyBar); } else { bossEnergyIntf.SetBossParams(Visible: false, "", "", 0f, 0f, hudcolors, energyBar); } } } private void UpdateMissile(float dt, bool init) { uint stock = (uint)character.skillLocator.secondary.stock; uint maxStock = (uint)character.skillLocator.secondary.maxStock; int num = character.skillLocator.secondary.stock / 5; bool isMissilesActive = missileIntf.GetIsMissilesActive(); if (missileIntf.isActive(init)) { missileIntf.setHasAlt(num >= 1); } if (init) { missileIntf.missInit((int)maxStock, (int)stock, MissilesActive: false, character.skillLocator); } if (stock == missileAmount && missileActive == isMissilesActive && maxStock == missileCapacity) { return; } if (missileIntf.isActive(init)) { if (maxStock != missileCapacity) { missileIntf.SetMissileCapacity((int)maxStock); } if (stock != missileAmount) { missileIntf.SetNumMissiles((int)stock); } if (missileActive != isMissilesActive) { missileIntf.SetIsMissilesActive(isMissilesActive); } } missileAmount = stock; missileActive = isMissilesActive; missileCapacity = maxStock; } private void UpdateThreatAssessment(float dt) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Invalid comparison between Unknown and I4 //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Invalid comparison between Unknown and I4 float num = 1000f; float num2 = 100f; float num3 = float.PositiveInfinity; Collider[] array = Physics.OverlapSphere(character.transform.position, 100f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)); Collider[] array2 = Physics.OverlapSphere(character.transform.position, 25f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.projectile)).mask)); if (array.Length > 30 || array2.Length > 30) { num = 0f; } else { Collider[] array3 = array; foreach (Collider val in array3) { float num4 = Vector3.Distance(character.transform.position, ((Component)val).transform.position); if (!(num4 < num3)) { continue; } HurtBox component = ((Component)val).GetComponent<HurtBox>(); if (!Object.op_Implicit((Object)(object)component)) { continue; } HealthComponent healthComponent = component.healthComponent; if (!Object.op_Implicit((Object)(object)healthComponent) || (!((Object)(object)((Component)healthComponent).gameObject == (Object)(object)((Component)character).gameObject) && (int)healthComponent.body.teamComponent.teamIndex > 1)) { if (num4 == 0f) { num = 0f; break; } num3 = num4; } } if (num != 0f) { array3 = array2; foreach (Collider val2 in array3) { float num5 = Vector3.Distance(character.transform.position, ((Component)val2).transform.position); if (!(num5 < num3)) { continue; } ProjectileController componentInChildren = ((Component)((Component)val2).transform.root).GetComponentInChildren<ProjectileController>(); if (!Object.op_Implicit((Object)(object)componentInChildren) || ((int)componentInChildren.teamFilter.teamIndex > 1 && !((Object)(object)componentInChildren.owner == (Object)(object)((Component)character).gameObject))) { if (num5 == 0f) { num = 0f; break; } num3 = num5; } } } num = (float.IsPositiveInfinity(num3) ? num2 : num3); } if (threatIntf.isActive(init: false)) { threatIntf.SetThreatDistance(num); } } private void UpdateEnergyLow(float dt) { _ = energyLowTimer; energyLowTimer = Mathf.Abs(fmod(GetSecondsMod900(), 0.5f)); if (energyLowTimer < 0.25f) { energyLowPulse = energyLowTimer / 0.25f; } else { energyLowPulse = (0.5f - energyLowTimer) / 0.25f; } if (energyLow) { playSound(1631926714u, ((Component)this).gameObject); } } private void InitializeDamageLight() { GameObject gameObject = ((Component)((Component)((Component)this).gameObject.transform.parent).GetComponentInChildren<HUD>()).gameObject; damageMat = ((Component)gameObject.GetComponent<CameraRigController>()).GetComponentInChildren<ScreenDamage>().mat; } private void UpdateBallMode(bool init) { if (ballIntf.isActive(init) && inMorphBall) { uint stock = (uint)character.skillLocator.secondary.stock; uint maxStock = (uint)chara