Nativo / Caso práctico interactivo / 22 min de lectura

TH04: ¿cómo saben 16 balas dónde estás?

Explora los anillos de balas de TH04 con REA. Sigue los ángulos de un byte, la puntería y la rotación, y prueba una pequeña reconstrucción en un diagrama interactivo.

En esta página

01. Probar antes de desmontar

Arrastra el rombo alrededor del centro y dispara un anillo. El rayo claro marca la primera bala. Cambia la cantidad de 16 a 12: los pasos angulares enteros ya no dividen el círculo uniformemente. Usa los controles deslizantes si prefieres el teclado.

El experimento de punteríaJUGAR / OBSERVAR / EXPLICAR
ÁNGULO DE UN BYTE 32VUELTA COMPLETA 256
ARRASTRA EL ROMBO PARA APUNTAR0 → / 64 ↓

16 direcciones, separadas por 16 unidades angulares.

Diagrama de ángulos, no imágenes del juego. La puntería con ratón usa una conversión atan2 aproximada; el original utiliza iatan2.

Qué vas a construir

Un diagrama interactivo de ángulos y un pequeño cálculo de anillos con comprobaciones explícitas de redondeo y desbordamiento circular.

Antes de la investigación

El diagrama funciona de inmediato. Para repetir la inspección del binario, usa tu propio TH04 MAIN.EXE de la versión correspondiente y un proveedor Ghidra configurado. También necesitas el código de reconstrucción con versión fijada enlazado más abajo. Configurar REA →

02. Entender bien el sistema de direcciones del ejecutable

TH04 es un programa DOS para PC-98. Antes de seguir la dirección de una función, determina cómo asigna el cargador el archivo a la memoria. Guarda con tus notas el hash del ejecutable, el segmento de carga, el modo de código y la correspondencia entre direcciones y archivo. Una dirección sin su perfil de carga puede llevarte a los bytes equivocados.

El informe oficial proporciona una función auxiliar conocida y una reconstrucción con versión fijada para orientar la investigación. Usar esa referencia es un ejercicio guiado; no demuestra que un agente haya descubierto por sí solo todo el programa.

Copiar esta instrucción de investigación
Usa REA para abrir mi TH04 MAIN.EXE con Ghidra. Verifica el perfil de carga DOS MZ y la identidad del artefacto frente al informe de pruebas de TH04 enlazado. Si coinciden, inspecciona la función auxiliar bullet_velocity_and_angle_set documentada y relaciona su dirección con los bytes del archivo. Si el artefacto o el perfil de carga difieren, deja de usar las direcciones históricas y explica cómo localizar una función auxiliar equivalente.

03. Recuperar una dirección antes de dibujar un anillo

La cuestión clave es el orden de las operaciones. Examina por separado el índice, la cantidad, la puntería y la rotación. Para esta rama del anillo, el modelo legible es floor(index × 256 / count), más la puntería y la rotación, ajustado circularmente a un byte. Los ángulos aumentan en sentido horario en la pantalla.

Prueba doce balas. Multiplicar primero y dividir después da desplazamientos de 0, 21, 42, 64… Multiplicar el índice por floor(256 / count) daría 0, 21, 42, 63… Ambos caminos coinciden al principio y después se separan. Un círculo visualmente plausible puede ocultar el error.

  • 16 balas, sin puntería: 0, 16, 32, …, 240.
  • 12 balas: el índice 3 debe ser 64, no 63.
  • Una puntería de 250 más un desplazamiento de 16 vuelve circularmente a 10.
  • Derecha es 0, abajo es 64, izquierda es 128 y arriba es 192.

04. Separar la regla del anillo de la función auxiliar de puntería

Sigue dónde entran las coordenadas del jugador y del origen en la función auxiliar de dirección. Encuentra después dónde se suma la rotación de la plantilla y dónde se almacena el byte final. Conserva estos hallazgos por separado para poder probar cada etapa.

Nuestro diagrama utiliza atan2 de JavaScript, redondeado al ángulo de un byte más cercano, para apuntar con el ratón. El original usa iatan2. Lograr una coincidencia exacta en cada coordenada del jugador exigiría recuperar y probar también esa función auxiliar; este diagrama demuestra la aritmética del anillo sin afirmar esa equivalencia.

Copiar esta instrucción de investigación
Recupera solo la rama del anillo dirigido. Muestra la secuencia de instrucciones que multiplica antes de dividir, la llamada que calcula la puntería, la suma de la rotación de la plantilla y el almacenamiento del byte final. Implementa la aritmética del anillo de forma independiente. Usa en el diagrama una función de puntería aproximada claramente identificada hasta establecer por separado el comportamiento de iatan2 original. Prueba 12 y 16 balas, rotación negativa y desbordamiento circular.

05. Probar los ángulos antes de juzgar la imagen

Exporta ángulos numéricos para algunas entradas deliberadamente difíciles. Una captura puede hacer que un error de una unidad parezca correcto. Prueba cantidades que no dividan uniformemente el círculo, una puntería cercana a 255 y una rotación que cruce cero. Comprueba el intervalo del byte final, además de la separación.

Si el primer rayo no alcanza exactamente el puntero, inspecciona la cuantización del ángulo antes de cambiar el cálculo del anillo. Si el diagrama aparece invertido verticalmente, comprueba la convención de coordenadas. Si el grafo de llamadas nativo parece incoherente, inspecciona la asignación de segmentos en modo real y las instrucciones que la respaldan.

06. Comparar resultados conocidos

Úsalos como puntos de comprobación explícitos. Coincidir con ellos respalda esta pequeña regla; no demuestra compatibilidad con toda la aplicación.

EntradasÁngulos esperadosQué detecta
cantidad 16; puntería 0; rotación 00, 16, 32, …, 240Separación uniforme
cantidad 12; puntería 0; rotación 00, 21, 42, 64, …, 234Multiplicar antes de dividir
cantidad 16; puntería 250; rotación 0250, 10, 26, …, 234Desbordamiento circular del byte
cantidad 4; puntería 0; rotación −1255, 63, 127, 191Normalización de la rotación negativa

Guarda ambos archivos en la misma carpeta. Ejecuta las comprobaciones con Node.js; no es necesario instalar paquetes.

Terminal
node check-case-labs.mjs

07. ¿Qué se verificó realmente?

Este sitio prueba la aritmética extraída del anillo y representa un diagrama nuevo. No ejecuta el programa DOS original, no reproduce su función auxiliar iatan2 ni repite las comprobaciones históricas del compilador. Dieciséis es la cantidad elegida para enseñar, no una garantía sobre todas las dificultades o estados de disparo del juego.

Consultar los resultados numéricos de pruebas registrados por este sitio →

Fuentes: Informe de pruebas de TH04 de REA · Macro de anillo de la reconstrucción con versión fijada. Tutorial, ilustraciones y experimentos de navegador de autoría independiente.

Siguiente experimento¿Puedes oír a qué lado está el ladrillo? →

¿Acabas de conocer la herramienta? ¿Qué es REA? · Cómo revisamos nuestras guías