Разработать навигатор для игры? Смотрите! (часть 2.1 )

Всем привет! Чуть подробнее расскажу про то, как был реализован шаг по приёму телеметрии из игры с технической точки зрения и беру далее на себя обязательство писать с уклоном именно в то, как это было сделано.

Forza, телефон и UDP: я начал делать навигатор не с карты, а с байтов В первом посте я показал идею: выключить HUD в Forza, оставить вид из кабины, а карту вынести на телефон. Теперь - подкапотка.

Я ожидал худшего: искать координаты в памяти процесса, ловить адреса, бояться обновлений и потом объяснять, что это не чит. Но тут случился редкий случай, когда разработчик игры уже оставил нормальную дверь.

В Forza есть Data Out - телеметрия по UDP. Включаешь передачу данных, указываешь 127.0.0.1 и порт, например 5700, и игра сама начинает слать пакеты наружу.

Самый красивый хак в этом проекте - вовремя не хакать то, что уже работает официально.

Дальше архитектура стала простой: - игра шлет бинарную телеметрию; - Python на ПК слушает UDP; - сервер превращает байты в нормальный state; - телефон открывает локальную веб-страницу по Wi-Fi.

Примерно так начинается схема пакета: ```python def build_fh6_fields(): fields = [] def add(name, fmt): fields.append((name, fmt)) add("IsRaceOn", "i") add("TimestampMS", "I") for name in [ "EngineMaxRpm", "CurrentEngineRpm", "AccelerationX", "AccelerationY", "AccelerationZ", "VelocityX", "VelocityY", "VelocityZ", "Yaw", "Pitch", "Roll", ]: add(name, "f") for name in ["PositionX", "PositionY", "PositionZ", "Speed"]: add(name, "f") return fields ``` Это не красивый JSON. Это бинарный пакет, где важно не перепутать float, int и byte. Зато в нем уже есть все вкусное: скорость, координаты, направление, обороты, передачи, педали.

На этом этапе проект перестал быть фантазией. Если байты пришли и координаты распаковались - значит, телефонный навигатор уже можно строить не на вере, а на данных.

Если вам интересно посмотреть проект целиком - ссылка на мой GitHub в описании профиля.