A UDP mock sender for Forza racing games. Broadcasts fake telemetry packets in the Forza UDP format so that apps consuming Forza telemetry (dashboards, data loggers, etc.) can be tested without a running game.
At startup, the tool sends zero-valued telemetry packets at a configurable rate. You can type RPM values at any time to update CurrentEngineRpm live; all other fields stay at zero unless hardcoded in Program.cs.
Packets are sent in FH4/FH5/FH6 format (324 bytes).
dotnet build # Debug build
dotnet build -c Release # Release build
dotnet run # Run with defaults (127.0.0.1:5300, 60 Hz)
dotnet publish -c Release # Create release distribution| Flag | Default | Description |
|---|---|---|
--ip <address> |
127.0.0.1 |
Target IP address |
--port <number> |
5300 |
Target UDP port |
--hz <number> |
60 |
Send rate in packets per second |
--max-rpm <number> |
10000 |
Engine max RPM |
Example:
dotnet run -- --ip 192.168.1.10 --port 5300 --hz 30 --max-rpm 18000Once running, type an RPM value and press Enter to update the engine RPM live:
Sending FH4 packets to 127.0.0.1:5300 at 60 Hz.
Type an RPM value and press Enter, or 'q' to quit.
3500
CurrentEngineRpm => 3500
q
| File | Purpose |
|---|---|
Program.cs |
Entry point — CLI parsing, sender loop, console input |
Message.cs |
Telemetry packet model — serialization and deserialization |
Supports both directions:
- Deserialize —
Message(string ip, string playerName, byte[] rawTelemetryData)parses a raw UDP packet. Auto-detects game by packet length (FM7 = 311 bytes, FH4/FH5/FH6 = 324 bytes). - Serialize —
GetPacket()returns the wire-format byte array (311 or 324 bytes depending onGame).
Properties cover: engine RPM, acceleration, velocity, angular velocity, yaw/pitch/roll, suspension travel, tire slip/angle/temperature, wheel rotation speed, car metadata, position, speed/power/torque, race state, and driver inputs.
| Value | Game |
|---|---|
FM7 |
Forza Motorsport 7 |
FH4 |
Forza Horizon 4 |
FH5 |
Forza Horizon 5 |
FH6 |
Forza Horizon 6 |