# techtastic/tis-vs architecture

> Architecture diagram of the GitHub repository techtastic/tis-vs, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/techtastic/tis-vs
- Repository: https://github.com/techtastic/tis-vs

## Overview

TIS-VS is a TIS-3D addon for Valkyrien Skies 2. A player installs a sensor module, which reads ship motion or raycast/map state and sends encoded values through TIS-3D ports; the Framed Map protocol exposes map-relative coordinates over serial. The common module registry and Fabric/Forge entry points register these features. README-listed altitude, distance, gyroscopic, omega, velocity, and Framed Map capabilities are preserved. Wiring for unsampled module implementations is limited to documented feature membership and known registry structure.

Main entry points: [`common/src/main/kotlin/io/github/techtastic/tisvs/module/TISVSModules.kt`](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/TISVSModules.kt) (Module registry), [`common/src/main/kotlin/io/github/techtastic/tisvs/module/distance/DistanceModule.kt`](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/distance/DistanceModule.kt) (Distance sensor), [`common/src/main/kotlin/io/github/techtastic/tisvs/module/gyroscopic/GyroscopicModule.kt`](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/gyroscopic/GyroscopicModule.kt) (Gyroscopic sensor), [`common/src/main/kotlin/io/github/techtastic/tisvs/module/omega/OmegaModule.kt`](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/omega/OmegaModule.kt) (Omega sensor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Common Runtime"]
  node_runtime["Mod initialization<br/>[TISVS.kt]"]
  node_modules["Module registry<br/>[TISVSModules.kt]"]
  node_gamerules["Game rules<br/>[TISVSGameRules.kt]"]
  node_half["Half-float encoding<br/>[HalfFloat.kt]"]
  node_manualcontent["Manual providers<br/>[TISVSManual.kt]"]
end

subgraph group_sensors["TIS-3D Modules"]
  node_altitude["Altitude sensor<br/>[AltitudeModule.kt]"]
  node_distance["Distance sensor<br/>[DistanceModule.kt]"]
  node_gyroscopic["Gyroscopic sensor"]
  node_omega["Omega sensor<br/>[OmegaModule.kt]"]
  node_velocity["Velocity sensor<br/>[VelocityModule.kt]"]
  node_raycast["Raycast helper<br/>[RaycastHelper.java]"]
end

subgraph group_protocol["Serial Protocol"]
  node_framedmap["Framed Map interface"]
  node_serialregistry["Serial registry"]
end

subgraph group_platform["Loader Registration"]
  node_fabric["Fabric entry point<br/>[TISVSFabric.kt]"]
  node_forge["Forge entry point<br/>[TISVSForge.kt]"]
end

node_player(("Player"))
node_vs2["Valkyrien Skies 2"]
node_tis3d["TIS-3D"]
node_manual["Manual content"]

node_player -->|"installs/configures"| node_altitude
node_player -->|"configures"| node_distance
node_player -->|"configures"| node_gyroscopic
node_player -->|"configures"| node_omega
node_player -->|"configures"| node_velocity
node_modules -->|"provides"| node_altitude
node_modules -->|"provides"| node_distance
node_modules -->|"provides"| node_gyroscopic
node_modules -->|"provides"| node_omega
node_modules -->|"provides"| node_velocity
node_runtime -->|"registers items"| node_modules
node_runtime -->|"registers"| node_gamerules
node_gyroscopic -->|"reads rotation"| node_vs2
node_velocity -->|"reads velocity"| node_vs2
node_omega -->|"reads angular rate"| node_vs2
node_distance -->|"builds ray"| node_raycast
node_distance -->|"reads limit"| node_gamerules
node_altitude -.->|"reads ship state"| node_vs2
node_gyroscopic -->|"encodes values"| node_half
node_velocity -->|"encodes values"| node_half
node_omega -->|"encodes values"| node_half
node_distance -->|"decodes input"| node_half
node_altitude -.->|"writes ports"| node_tis3d
node_distance -->|"reads/writes ports"| node_tis3d
node_gyroscopic -->|"writes ports"| node_tis3d
node_omega -->|"writes ports"| node_tis3d
node_velocity -->|"writes ports"| node_tis3d
node_framedmap -->|"transforms position"| node_vs2
node_framedmap -->|"encodes coordinates"| node_half
node_tis3d -->|"requests interface"| node_framedmap
node_serialregistry -->|"registers provider"| node_framedmap
node_manualcontent -->|"registers documentation"| node_manual
node_fabric -->|"initializes"| node_runtime
node_fabric -->|"registers providers"| node_modules
node_fabric -->|"registers providers"| node_serialregistry
node_fabric -->|"registers providers"| node_manualcontent
node_forge -->|"initializes"| node_runtime
node_forge -->|"registers providers"| node_modules
node_forge -->|"registers providers"| node_serialregistry
node_forge -->|"registers providers"| node_manualcontent

click node_runtime "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/TISVS.kt"
click node_modules "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/TISVSModules.kt"
click node_gamerules "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/TISVSGameRules.kt"
click node_half "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/util/HalfFloat.kt"
click node_altitude "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/altitude/AltitudeModule.kt"
click node_distance "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/distance/DistanceModule.kt"
click node_gyroscopic "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/gyroscopic/GyroscopicModule.kt"
click node_omega "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/omega/OmegaModule.kt"
click node_velocity "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/velocity/VelocityModule.kt"
click node_raycast "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/java/io/github/techtastic/tisvs/util/RaycastHelper.java"
click node_framedmap "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/serial/custom/FramedMapSerialInterfaceProvider.kt"
click node_serialregistry "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/serial/TISVSSerialInterfaces.kt"
click node_manualcontent "https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/manual/TISVSManual.kt"
click node_fabric "https://github.com/techtastic/tis-vs/blob/1.20.x/main/fabric/src/main/kotlin/io/github/techtastic/tisvs/fabric/TISVSFabric.kt"
click node_forge "https://github.com/techtastic/tis-vs/blob/1.20.x/main/forge/src/main/kotlin/io/github/techtastic/tisvs/forge/TISVSForge.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_runtime,node_modules,node_gamerules,node_half,node_manualcontent toneBlue
class node_altitude,node_distance,node_gyroscopic,node_omega,node_velocity,node_raycast toneAmber
class node_framedmap,node_serialregistry toneMint
class node_fabric,node_forge toneRose
class node_player,node_vs2,node_tis3d,node_manual toneIndigo
```

## Components

### Common Runtime

- [Mod initialization](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/TISVS.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/TISVS.kt`
- [Module registry](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/TISVSModules.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/module/TISVSModules.kt`
- [Game rules](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/TISVSGameRules.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/TISVSGameRules.kt`
- [Half-float encoding](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/util/HalfFloat.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/util/HalfFloat.kt`
- [Manual providers](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/manual/TISVSManual.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/manual/TISVSManual.kt`

### TIS-3D Modules

- [Altitude sensor](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/altitude/AltitudeModule.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/module/altitude/AltitudeModule.kt`
- [Distance sensor](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/distance/DistanceModule.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/module/distance/DistanceModule.kt`
- [Gyroscopic sensor](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/gyroscopic/GyroscopicModule.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/module/gyroscopic/GyroscopicModule.kt`
- [Omega sensor](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/omega/OmegaModule.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/module/omega/OmegaModule.kt`
- [Velocity sensor](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/module/velocity/VelocityModule.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/module/velocity/VelocityModule.kt`
- [Raycast helper](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/java/io/github/techtastic/tisvs/util/RaycastHelper.java): `common/src/main/java/io/github/techtastic/tisvs/util/RaycastHelper.java`

### Serial Protocol

- [Framed Map interface](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/serial/custom/FramedMapSerialInterfaceProvider.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/serial/custom/FramedMapSerialInterfaceProvider.kt`
- [Serial registry](https://github.com/techtastic/tis-vs/blob/1.20.x/main/common/src/main/kotlin/io/github/techtastic/tisvs/serial/TISVSSerialInterfaces.kt): `common/src/main/kotlin/io/github/techtastic/tisvs/serial/TISVSSerialInterfaces.kt`

### Loader Registration

- [Fabric entry point](https://github.com/techtastic/tis-vs/blob/1.20.x/main/fabric/src/main/kotlin/io/github/techtastic/tisvs/fabric/TISVSFabric.kt): `fabric/src/main/kotlin/io/github/techtastic/tisvs/fabric/TISVSFabric.kt`
- [Forge entry point](https://github.com/techtastic/tis-vs/blob/1.20.x/main/forge/src/main/kotlin/io/github/techtastic/tisvs/forge/TISVSForge.kt): `forge/src/main/kotlin/io/github/techtastic/tisvs/forge/TISVSForge.kt`

### Other components

- **Player**
- **Valkyrien Skies 2**
- **TIS-3D**
- **Manual content**

## Connections

- Player → Altitude sensor: installs/configures
- Player → Distance sensor: configures
- Player → Gyroscopic sensor: configures
- Player → Omega sensor: configures
- Player → Velocity sensor: configures
- Module registry → Altitude sensor: provides
- Module registry → Distance sensor: provides
- Module registry → Gyroscopic sensor: provides
- Module registry → Omega sensor: provides
- Module registry → Velocity sensor: provides
- Mod initialization → Module registry: registers items
- Mod initialization → Game rules: registers
- Gyroscopic sensor → Valkyrien Skies 2: reads rotation
- Velocity sensor → Valkyrien Skies 2: reads velocity
- Omega sensor → Valkyrien Skies 2: reads angular rate
- Distance sensor → Raycast helper: builds ray
- Distance sensor → Game rules: reads limit
- Altitude sensor → Valkyrien Skies 2: reads ship state
- Gyroscopic sensor → Half-float encoding: encodes values
- Velocity sensor → Half-float encoding: encodes values
- Omega sensor → Half-float encoding: encodes values
- Distance sensor → Half-float encoding: decodes input
- Altitude sensor → TIS-3D: writes ports
- Distance sensor → TIS-3D: reads/writes ports
- Gyroscopic sensor → TIS-3D: writes ports
- Omega sensor → TIS-3D: writes ports
- Velocity sensor → TIS-3D: writes ports
- Framed Map interface → Valkyrien Skies 2: transforms position
- Framed Map interface → Half-float encoding: encodes coordinates
- TIS-3D → Framed Map interface: requests interface
- Serial registry → Framed Map interface: registers provider
- Manual providers → Manual content: registers documentation
- Fabric entry point → Mod initialization: initializes
- Fabric entry point → Module registry: registers providers
- Fabric entry point → Serial registry: registers providers
- Fabric entry point → Manual providers: registers providers
- Forge entry point → Mod initialization: initializes
- Forge entry point → Module registry: registers providers
- Forge entry point → Serial registry: registers providers
- Forge entry point → Manual providers: registers providers
