150 lines
4.8 KiB
Plaintext
150 lines
4.8 KiB
Plaintext
===========================================
|
||
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
|
||
===========================================
|