Tecnología de videojuegos de código abierto

TiP-Recomp input layer

Agregar mouse no fue una tarea de asignar teclas. El runtime de recompilación, la memoria guest, la propagación de cámara, el foco de ventana y las API de plataforma debían coordinarse.

Mergedestado upstream
7archivos modificados
Win/Linuxrutas de plataforma

Problema

La cámara orientada a control y el runtime de entrada no exponían una ruta confiable para control de cámara y zoom nativos de PC.

Enfoque de ingeniería

  • Implementar captura de entrada cruda de Win32 con un listener multiplataforma alternativo.
  • Revertir la propagación del estado de cámara y escribir valores almacenados y renderizados sin romper el uso de control.
  • Gestionar confinamiento del cursor, cambios de foco, configuración y limpieza al cerrar como parte del ciclo de vida de la funcionalidad.

Resultado

  • La contribución fue revisada e integrada upstream como un cambio de sistemas distribuido en siete archivos.
  • Contribuciones posteriores ampliaron la propiedad de entrada y el comportamiento de foco, en vez de dejar el primer parche aislado.

El problema más difícil

El desafío

Darle control de cámara real con mouse a una cámara de la era del control dentro de una recompilación estática.

La restricción

El estado de la cámara fluye por la memoria guest en un orden fijo: escribir solo el valor renderizado deja que el juego sobrescriba el mouse cada frame, escribir solo el valor almacenado no cambia nada visible, y el camino del control debía seguir funcionando intacto.

La salida

Revertir la cadena de propagación para encontrar cada punto de escritura, alimentar los deltas de entrada cruda al estado almacenado y al renderizado, y tratar el confinamiento del cursor, la pérdida de foco y la limpieza al cerrar como parte de la función, no como añadidos.

Cómo lo resolví

El lado de entrada tenía su propia división de plataforma: la entrada cruda de Win32 entrega deltas sin aceleración en Windows, pero el port también apunta a Linux, así que un listener multiplataforma alternativo transporta los mismos eventos, con el zoom de la rueda enrutado por el mismo camino de cámara en vez de un hack aparte.

La revisión upstream moldeó el resultado tanto como el código: el cambio integrado abarca siete archivos porque los mantenedores pidieron que la capa de entrada viviera en la estructura del runtime, no como un parche pegado, y PRs posteriores extendieron la propiedad de entrada y el comportamiento de foco en los mismos términos.

Tecnologías

  • C++
  • Win32 Raw Input
  • Static recompilation
  • Reverse engineering
  • CMake
  • SDL

Siguiente caso de estudio

GameMaker patching pipelines

Trabajo en GM3P y Deltamod para hacer cooperar múltiples formatos y herramientas de parcheo sin producir resultados parciales de forma silenciosa.