Au, acabat
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
===========================================
|
||||
DOCUMENTACIÓN DEL SISTEMA DE ARMARIOS
|
||||
===========================================
|
||||
|
||||
Juego: [Nombre del juego]
|
||||
Autor del análisis: Sergio
|
||||
Colaborador técnico: Copilot
|
||||
Fecha: [poner fecha]
|
||||
|
||||
===========================================
|
||||
1. INTRODUCCIÓN
|
||||
===========================================
|
||||
|
||||
Este documento resume todo lo descubierto durante el análisis del sistema
|
||||
de guardado relacionado con los armarios (contenedores) del juego.
|
||||
|
||||
Incluye:
|
||||
|
||||
- Localización del contador global de armarios abiertos
|
||||
- Identificación de flags de evento relacionados
|
||||
- Confirmación de qué offsets NO son armarios
|
||||
- Estado actual de la investigación
|
||||
- Próximos pasos recomendados
|
||||
|
||||
El objetivo final es permitir manipular el save para:
|
||||
- abrir o cerrar armarios individualmente
|
||||
- forzar el logro de “abrir todos los armarios”
|
||||
- depurar el comportamiento del juego
|
||||
|
||||
===========================================
|
||||
2. CONTADOR GLOBAL DE ARMARIOS ABIERTOS
|
||||
===========================================
|
||||
|
||||
Offset: 0x0295C
|
||||
Tipo: contador simple (1 byte)
|
||||
Función: almacena cuántos armarios ha abierto el jugador
|
||||
|
||||
Ejemplo:
|
||||
- 0x3B = 59 armarios abiertos
|
||||
- 0x3C = 60 armarios abiertos
|
||||
- 0x50 = 80 armarios abiertos (valor máximo para el logro)
|
||||
|
||||
Este contador:
|
||||
- aumenta en +1 cada vez que se abre un armario
|
||||
- NO depende del guardado
|
||||
- NO es un bitfield
|
||||
- NO controla si un armario está abierto o cerrado
|
||||
- solo refleja el total acumulado
|
||||
|
||||
IMPORTANTE:
|
||||
Modificar este contador NO abre ni cierra armarios reales.
|
||||
Solo afecta al número que muestra el juego y a la lógica del logro
|
||||
(si el logro depende únicamente del contador).
|
||||
|
||||
===========================================
|
||||
3. FLAG DE EVENTO RELACIONADO (NO ES ARMARIO)
|
||||
===========================================
|
||||
|
||||
Offset: 0x02934
|
||||
Cambio observado: EE → FE al abrir un armario concreto
|
||||
Bit afectado: bit 7 (0x80)
|
||||
|
||||
Este byte:
|
||||
- cambia al abrir el armario de prueba
|
||||
- revertirlo hace que el armario vuelva a aparecer cerrado
|
||||
- PERO no forma parte del bloque real de armarios
|
||||
- es un flag de evento o script asociado al acto de abrir ese armario
|
||||
|
||||
Conclusión:
|
||||
0x02934 NO es el bitfield de armarios.
|
||||
Es un flag de evento que se activa al abrir ese armario concreto.
|
||||
|
||||
===========================================
|
||||
4. BLOQUE REAL DE ARMARIOS (AÚN NO LOCALIZADO)
|
||||
===========================================
|
||||
|
||||
El juego tiene 80 armarios → se necesitan 80 bits → 10 bytes.
|
||||
|
||||
El bloque real:
|
||||
- NO está en 0x02930–0x0293F
|
||||
- NO incluye 0x02934
|
||||
- NO se ve afectado al poner FF en ese rango
|
||||
- debe contener exactamente 59 bits activos en el save analizado
|
||||
- debe cambiar un solo bit al abrir un armario
|
||||
- debe permanecer estable al guardar sin abrir nada
|
||||
|
||||
Estado actual:
|
||||
El bloque real aún no ha sido identificado, pero sabemos que:
|
||||
- está cerca del rango 0x02800–0x02B00
|
||||
- debe ser un bloque compacto de 10 bytes
|
||||
- debe tener valores tipo: 00, 01, 03, 07, 0F, 1F, 3F, 7F, FF
|
||||
- debe contener 59 bits activos en el save actual
|
||||
|
||||
===========================================
|
||||
5. RESUMEN DE HALLAZGOS
|
||||
===========================================
|
||||
|
||||
✔ 0x0295C = contador global de armarios abiertos
|
||||
✔ 0x02934 = flag de evento asociado al armario de prueba
|
||||
✔ revertir 0x02934 cierra el armario visualmente
|
||||
✔ el contador global NO depende de 0x02934
|
||||
✔ poner FF en 0x02920–0x0293F NO abre armarios reales
|
||||
✔ el bloque real de armarios NO está en esa zona
|
||||
✔ el contador global coincide exactamente con el número mostrado por el juego
|
||||
|
||||
===========================================
|
||||
6. PRÓXIMOS PASOS RECOMENDADOS
|
||||
===========================================
|
||||
|
||||
1. Volcar el rango 0x02800–0x02A00 para localizar el bloque real.
|
||||
2. Buscar un bloque de 10 bytes con ~59 bits activos.
|
||||
3. Confirmar qué byte cambia al abrir un armario nuevo.
|
||||
4. Mapear los 80 bits → 80 armarios.
|
||||
5. Crear un editor que:
|
||||
- abra/cierre armarios individualmente
|
||||
- actualice el contador global
|
||||
- recalcule el checksum automáticamente
|
||||
|
||||
===========================================
|
||||
7. CHECKSUM
|
||||
===========================================
|
||||
|
||||
El checksum del save se encuentra en:
|
||||
- 0x2270 (LSB)
|
||||
- 0x2271 (MSB)
|
||||
|
||||
Se calcula sumando:
|
||||
- todos los bytes desde 0x2200 hasta 0x3FFF
|
||||
- excepto los dos bytes del propio checksum
|
||||
- más un offset fijo de 3328
|
||||
|
||||
===========================================
|
||||
8. ESTADO FINAL
|
||||
===========================================
|
||||
|
||||
El sistema de armarios está parcialmente resuelto:
|
||||
|
||||
- Contador global: ✔ localizado y confirmado
|
||||
- Flag de evento del armario de prueba: ✔ localizado
|
||||
- Bloque real de armarios: ❌ pendiente de localizar
|
||||
|
||||
Una vez identificado el bloque real, se podrá:
|
||||
- abrir/cerrar armarios a voluntad
|
||||
- fabricar saves para logros
|
||||
- documentar completamente el formato
|
||||
|
||||
===========================================
|
||||
FIN DEL DOCUMENTO
|
||||
===========================================
|
||||
Reference in New Issue
Block a user