File information

Last updated

Original upload

Created by

Mikjaw and Al-An

Uploaded by

Mikjaw

Virus scan

Safe to use

50 comments

  1. Marked04
    Marked04
    • supporter
    • 1 kudos
    Such a fan with Roll Control mod that I can't play it without the vehicles having attitudes. You won't even know if your seamoth is angry at you for leaving it upside down without this XD
    1. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      I'm glad you like my mods so much!😂
  2. joebobman
    joebobman
    • member
    • 0 kudos
    Hell yeah, seamoths with attitude!
    1. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      😎
  3. fiskin1
    fiskin1
    • premium
    • 219 kudos
    Works great for me.  Should have been in the vanilla game but you got it done.  Endorsed.
  4. gagaziml
    gagaziml
    • member
    • 0 kudos
    wich vezrsion for legacy? thanks
    1. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      I believe 2.2 will work for legacy.
  5. Xunnamius
    Xunnamius
    • member
    • 1 kudos
    Hello and thanks for your work on this! I haven't actually loaded in yet, but I'm getting the following error when configuring the Attitude Indicators mod (via Options > Mods at the starting menu). Seems to happen when changing the "Auto-position" options. Also, all of the sliders for the X/Y/Z position options keep moving around, and/or are not at what seems to be the defaults, though I'm not sure if they're actually being changed when they move since it's a binary 0<-->1 choice...

    [Error  : Unity Log] NullReferenceException: Object reference not set to an instance of an object                    Stack trace:                                                                                                         AttitudeIndicator.SubnauticaConfig.moveSeamothIndicator (Nautilus.Options.ChoiceChangedEventArgs`1[T] e) (at <04dacf50ff1743d99a5c67a5b9bb6744>:0)                                                                                        System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <eae584ce26bc40229c1b1aa476bfa589>:0)                                                                                                            Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.                      System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <eae584ce26bc40229c1b1aa476bfa589>:0)                                                                                                            System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <eae584ce26bc40229c1b1aa476bfa589>:0)                                                                                                             HarmonyLib.Traverse.GetValue (System.Object[] arguments) (at <474744d65d8e460fa08cd5fd82b5d65f>:0)                   Nautilus.Options.Attributes.MemberInfoMetadata`1[T].InvokeMethod (T config, System.Object[] arguments) (at <8a11983d5aa5454ca88a174e477b38d1>:0)                                                                                          Nautilus.Options.Attributes.ConfigFileMetadata`1[T].InvokeEvent[TSource] (Nautilus.Options.Attributes.MemberInfoMetadata`1[T] memberInfoMetadata, System.Object sender, TSource e) (at <8a11983d5aa5454ca88a174e477b38d1>:0)              Nautilus.Options.Attributes.ConfigFileMetadata`1[T].InvokeOnChangeEvents[TSource] (Nautilus.Options.Attributes.ModOptionAttributeMetadata`1[T] modOptionMetadata, System.Object sender, TSource e) (at <8a11983d5aa5454ca88a174e477b38d1>:0)                                                                                                                   Nautilus.Options.Attributes.ConfigFileMetadata`1[T].HandleChoiceChanged[Any] (System.Object sender, Nautilus.Options.ChoiceChangedEventArgs`1[T] e) (at <8a11983d5aa5454ca88a174e477b38d1>:0)                                             System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <eae584ce26bc40229c1b1aa476bfa589>:0)                                                                                                            Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.                      System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <eae584ce26bc40229c1b1aa476bfa589>:0)                                                                                                            System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <eae584ce26bc40229c1b1aa476bfa589>:0)                                                                                                             Nautilus.Options.Attributes.OptionsMenuBuilder`1[T].RouteEventHandler (System.Object sender, System.EventArgs e) (at <8a11983d5aa5454ca88a174e477b38d1>:0)                                                                                Nautilus.Options.Attributes.OptionsMenuBuilder`1[T].EventHandler (System.Object sender, System.EventArgs e) (at <8a11983d5aa5454ca88a174e477b38d1>:0)                                                                                     Nautilus.Options.ModOptions.OnChange[T,E] (System.String id, T value) (at <8a11983d5aa5454ca88a174e477b38d1>:0)      Nautilus.Options.ModChoiceOption`1[T].<AddToPanel>b__17_0 (System.Int32 index) (at <8a11983d5aa5454ca88a174e477b38d1>:0)                                                                                                                  UnityEngine.Events.InvokableCall`1[T1].Invoke (T1 args0) (at <bd0d47c27bd84106afaaecc2c74cdb94>:0)                   UnityEngine.Events.UnityEvent`1[T0].Invoke (T0 arg0) (at <bd0d47c27bd84106afaaecc2c74cdb94>:0)                       uGUI_Choice.set_value (System.Int32 value) (at <9ec6c1b62c324758b9c2d79021505be6>:0)                                 uGUI_Choice.NextChoice () (at <9ec6c1b62c324758b9c2d79021505be6>:0)                                                  UnityEngine.Events.InvokableCall.Invoke () (at <bd0d47c27bd84106afaaecc2c74cdb94>:0)                                 UnityEngine.Events.UnityEvent.Invoke () (at <bd0d47c27bd84106afaaecc2c74cdb94>:0)                                    UnityEngine.UI.Button.Press () (at <ce6ecc2ca9f24767b31663d408ff6f4f>:0)                                             UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at <ce6ecc2ca9f24767b31663d408ff6f4f>:0)                                                                                                      UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at <ce6ecc2ca9f24767b31663d408ff6f4f>:0)                                        UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at <ce6ecc2ca9f24767b31663d408ff6f4f>:0)                                                                                                              UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1)                           FPSInputModule:ProcessMousePress(MouseButtonEventData)                                                               FPSInputModule:ProcessMouseEvent()                                                                                   FPSInputModule:OnUpdate()                                                                                            ManagedUpdate:Execute(Queue)                                                                                         ManagedUpdate:ExecuteRange(Queue, Queue)                                                                             ManagedUpdate:LateUpdate()   
    1. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      Hi, thanks for the comments. I just uploaded a new version that fixes the errors you mentioned in the config menu.

      When you have "use autoposition for seamoth" toggled, then the sliders will not do anything. If you toggle that checkbox off, then the default position of the sliders (the middle, where the slider locks in), should place the instrument in the center of the screen.

      Sorry for the weird UI.
  6. RayRobertson
    RayRobertson
    • member
    • 1 kudos
    Hi Mikjaw. Ray here from Subnautica Modding Discord. https://docs.bepinex.dev/articles/dev_guide/plugin_tutorial/2_plugin_start.html#specifying-dependencies-on-other-plugins 

    This attribute ensures the mod you depend on is loaded first, and also prints a nice helpful error message in the logs if the user doesn't have it installed.
    1. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      Hello Ray. Neat syntax. Glad you like my mod.
    2. RayRobertson
      RayRobertson
      • member
      • 1 kudos
      Don’t use your mods, but do help users on the server and elsewhere that are experiencing issues. On occasion a mod would load before Nautilus has loaded. Adding Nautilus as a hard dependency stops this from happening and also indicates in the log if they don’t have Nautilus installed.
    3. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      I've added Nautilus as a hard dependency on all my mods that require Nautilus.
      Go in peace, Ray Robertson.
  7. Futurityau
    Futurityau
    • premium
    • 0 kudos
    I'm not sure what's happening here. Vortex has installed this mod into the QMods folder even though the dependencies list a BepInEx file.
    1. ProudPunk75
      ProudPunk75
      • member
      • 0 kudos
      it must've been set to download to Qmods. you can manually set the location for it in the games section and the three dots by subnautica. then you can click the BepInEx folder.

      edit: so it did the same thing for me, but you can grab the file and but it in the BepInEx folder, and in the plugins folder
    2. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      Hi, I've made the mod a proper BepInEx plugin, so you should be able to use it with Vortex normally now.
  8. deleted112569083
    deleted112569083
    • account closed
    • 2 kudos
    nice idea, how about slowly returning back to level position ? also would be nice if he does that fast when on the waters surface. looks weird now.
    sorry should've post this on roll control page 
    1. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      account,

      I figure you might mean one of two things:

      • Returning the instrument to a "level" reading more slowly after rapidly leveling at the surface. I'm not going to do that. This instrument accurately tracks the vehicle movements.
      • Returning the vehicle to a "level" position at whim. You can use my submarines (one or two) from Vehicle Framework if you'd like this feature. I could add such a feature to the seamoth, but that's quite low on my priority list.
    2. deleted112569083
      deleted112569083
      • account closed
      • 2 kudos
      yes my English is really rusty. the instrument is already fine. what i meant is closer to no.2 :  
      we have total control over our rolls while swimming, using seaglide or seamoth, but by remaining still, we'd slowly go back to level position . also when we get to surface, its better if the camera gets back to level position quickly (now even when the head is out of water the camera remains tilted, which is unnatural)
      this is about "roll Control" mod actually :-) .thanks again
    3. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      account,

      If you toggle Roll Control using the configured button (Right Alt by default, I think), then your vehicle will smoothly go back to zero roll. In other words, by switching Roll Control off while in a seamoth, you will transition into the normal control scheme in about 1 second. I don't want to add any kind of "auto pilot" to Roll Control, however, because that mod is all about giving control and not taking away control.

      Concerning "breaching the surface," I had to make the natural, physical choice when deciding what to do with the camera. The design of Subnautica is to snap-to-level on breach, which is unnatural. The result with Roll Control was that breaching the surface like a dolphin resulted in jarring camera experiences, in which the camera would snap to one direction in order for you to fly through the air. So I repeat: I chose the natural implementation over Subnautica's stylized version of physics because it felt awful when breaching. In this case as well, I advise you to simply toggle Roll Control off and let it smoothly put you back to normal.

      Please if you'd like to continue this conversation, leave a new comment on Roll Control. Thank you for your interest.
  9. Yuki900
    Yuki900
    • member
    • 4 kudos
    Great mod!
    Would it be possibly to enable the pitch indicator? That darker lower half of the display should have its line exactly on zero, and keep at 0 even when it moves. Imagine it as being a sphere, with the upper half a bright colour, and the lower half a dark colour (that's how an analogue attitude indicator works). The lower half is always the heavier half, so it's always pointing down. That works well for both roll and pitch.

    With that, i think this would be absolutely perfect!
    1. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      Yuki,

      Thank you for your interest!

      I certainly took some liberties with the way I implemented this gadget, and I know it's not a perfect representation of the real-world gadget. I reserve the right to make this gadget match the western implementation, but for right now I think it's okay that it measures roll and pitch in an idiosyncratic way (in the trappings of a real-world gadget).

      In other words, the pitch measurement lines are decoupled from the artificial horizon here. I did this in order to be able to represent an attitude indicator conveniently in only 2 dimensions. In the future, I might re-make the instrument in 3 dimensions, at which point I could perfectly replicate the behavior of the same-named instrument in a western airplane.
    2. Yuki900
      Yuki900
      • member
      • 4 kudos
      Well Mikjaw, As of today's update, I think it works perfectly on the Seamoth! The artificial horizon is working correctly, and I love it!
      I can't see it anymore in the Cyclops, but that might be due to way too many Cyclops mods on my part :p

      Thank you for your work!
    3. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      Yuki,

      I'm glad you love it. :)
      I actually chose to remove it from the Cyclops since the Cyclops neither rolls nor pitches. It would be easy to add back in if someone said it were useful.

      Cheers
    4. Yuki900
      Yuki900
      • member
      • 4 kudos
      On occasion it can be useful on the cyclops. If it's pitch black and you don't have a sonar for example, you sometimes get stuck on a rock with the stern of the ship, causing the whole ship to roll or tilt without the pilot noticing. That's moments when I wish I had one on the Cyclops xD
      But that's more quality of life instead of a necessity.

      A must-have on the Seamoth though!
    5. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      Alright, I find that example relatable and meaningful. Perhaps I was too quick to do away with the cyclops instrument. Expect it to come back in an update before too long.
  10. jatskan
    jatskan
    • premium
    • 10 kudos
    I would change the name to "Pitch\Role Indicator" because a gyroscope is for pitch i.e. climb\sink\Role rates not to show altitude, anyway thanks for the useful mod, really need some thing like this in the dark or at night!
    1. Mikjaw
      Mikjaw
      • premium
      • 146 kudos
      Please read again: "attitude indicator" not "altitude indicator"
    2. jatskan
      jatskan
      • premium
      • 10 kudos
      Ah, never heard of that, interesting, sorry about that, and thanks for pointing it out! ;)