Documento de Punteros de Xcalibur Versión 1.1 (traducción de Ereza) Copyright 2000 Excalibur Translations ========== Versiones ========== 1.1 - Más amistosa para el usuario, diseñada para dar menos confusión 1.0 - Versión inicial ========== Introducción ========== De acuerdo, aquí está mi explicación sobre punteros. Algunos documentos no tienen ningún sentido, así que estoy escribiendo el mío. Este documento es exclusivamente para punteros de Low-ROMs de SNES y relacionados. Te sugiero que te familiarices con el hacking de roms básico antes de que leas más. Si empiezas a leer este documento y no lo entiendes, vuelve a los documentos generales de hacking de roms y reléelos. ========== ¿Qué es un puntero? ========== Un puntero es una secuencia de números hexadecimales (normalmente 2 bytes) que le dice a la ROM que salte a un lugar diferente en el código. Tiene un parecido con la orden GoTo en Visual Basic, pero no tan fácil. Cambiando el valor de un puntero, puedes cambiar dónde la ROM busca la información, que puede ser útil para hackear y traducir juegos. ========== Cómo funcionan los punteros ========== Un puntero simplemente hace lo que su nombre dice: apunta a un lugar en la ROM y lee desde este punto hasta que llega al byte final, que le dice que pare de leer. Un ejemplo de esto podría ser: * * * Stick[FF]Club[FF]Copper[FF] El * representa el lugar de lectura del puntero y FF representa el byte final. Nótese que FF no siempre será el byte final en todas las roms. También nótese que debe haber más bytes hex entre los bloques de texto. Un bloque de texto, en caso de que no lo sepas, es el texto entre el puntero y el byte final. Un puntero normalmente apunta a la primera letra de la primera palabra en una secuencia de texto. Digamos que si el puntero apuntara a la "o" en Copper en lugar de la "C", el juego lo leería como "opper", saltándose la C, dejándola ilegible. Esto posiblemente puede darte un espacio extra con el que jugar, permitiéndote hacer algunos de tus bloques de texto más largos. ========== Encontrando un puntero para el texto en la ROM ========== Ahora, antes de que sepas encontrar un puntero, debes saber que el header [cabezal] de una rom de SNES es de 200 bytes hex. Esto es muy importante, como verás. Un header, en caso de que no lo sepas, es los 200 primeros bytes hex de la ROM. Ahora, para encontrar un puntero para el texto en tu rom, es necessario que sepas dónde está el texto en la rom y qué hex significa el byte final. Sabiendo esto puedes encontrar el inicio de un bloque de texto. Cuando hayas encontrado el inicio del bloque de texto, lee el offset [posición]. Un ejemplo podría ser 02A840. Ahora, réstale el header al offset. 02A840 - 200 = 02A640. Ahora elimina los dos primeros dígitos, que debería darte A640. Ahora divídelos en dos bytes hex e inviértelos, dándote 40A6. 40A6 es tu puntero. Busca en la rom 40A6 hasta que encuentres lo que parece una tabla de punteros. Debería ser varios punteros juntos; repitiendo los últimos dos dígitos (A6) e incrementando los dos primeros dígitos. (40, 4A, 4F, 57, etc.) Tiene sentido si lo piensas. Nota: Los dos últimos dígitos DEBEN ser diferentes. Los primeros dos dígitos son siempre los mismos que el offset, pero si tienes una rom mala, los dos últimos deben ser diferentes, y tendrás que encontrarlo tú mismo. Ahora, todos los punteros, antes de que gires los bytes, DEBEN estar entre 8000 y FFFF bytes hex. Un ejemplo podría ser 016438. Digamos que haces el trabajo en 6238. Oh oh, es menos que 8000. Así que, simplemente añádele 8000. 6238 + 8000 = E238. Ahora gira los dos bytes para obtener 38E2. 38E2 es el puntero a buscar. ========== Expansión física en ROMs de SNES ========== Las roms de SNES son, de todas formas, fáciles de expandir. Todo lo que necesitas hacer es abrir un editor hex cualquiera y hacerla más grande añadiendo el byte FF. Claro que el espacio que añadas TIENE que ser un múltiple de 32KB, o $8000 bytes hex, o 1 banco. Aun así, las roms son normalmente más estables si las mantienes en un múltiple de 80.000 bytes hex. Aquí abajo hay una pequeña relación que te muestra los tamaños de archivo estables en los que mantener tu rom: (Las siguientes direcciones hex incluyen el header de 200 bytes) Offset en Hex Megabytes 0801FF 0.5 1001FF 1.0 1801FF 1.5 2001FF 2.0 2801FF 2.5 3001FF 3.0 ========== De acuerdo, esto es todo por ahora a no ser que quiera escribir más. Espero que esto ayude a alguien, sólo porque sé qué es leer un documento de hacking de roms, y entonces decirte a ti mismo, "¿Eh? Pensaba que los documentos estaban hechos para ayudarte a aprender, no para confundirte.". Así que os doy este corto y entendible documento de punteros. Con unas palabras buenas, hace las cosas mucho más entendibles. ¡Buenas noches! ~Xcalibur