Back to Page
Revision 6 (current)
Edited by adelikat on 8/14/2022 6:15 PM
----
Puedes directamente editar un archivo de entrada de película. Puedes cambiar cosas como la información del encabezado, o puedes directamente cambiar la entrada. La idea es cambiar alguna entrada anterior en la película sin cambiar lo que sea que venga después de ello.
Aquí esta el retén: No siempre funciona. De hecho, usualmente no funciona.
Dado que los juegos suelen depender de entradas o condiciones anteriores, cambiar algo del pasado puede causar que el resto de la película [ES/DesyncHelpTAS|no se sincronice]. Puedes corregir las desincronizaciones caso por caso, pero a menudo habrán muchos y tomaría demasiado tiempo hacerlo.
Algunos formatos de película, como [http://fceux.com/web/FM2.html|FM2], están en forma de texto plano. Puedes usar un editor de texto como [http://sourceforge.net/projects/notepad-plus/|Notepad++] para editarlo. Por otra parte, algunos formatos, como [http://code.google.com/p/vba-rerecording/wiki/VBM|VBM], están en binario. En este caso, puedes usar un editor Hexadecimal como [http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm|Xvi32] o un editor de archivos ejemplo [http://sourceforge.net/projects/tas-editor|TAS Movie Editor] hecho para ese propósito (mira el [Forum/Topics/4448|tema en el foro (en inglés)] para más información).
__Tu eres responsable de tu propia película. Haz copias de seguridad antes de editar. Por favor lee [ES/DesyncHelpTAS|Ayuda de desincronización de TAS], ya que cubre las precauciones necesarias en caso de que algo vaya mal.__
%%TOC%%
! Formatos de película
Por favor lee las especificaciones del formato de película apropiado para el emulador que estás usando, bajo los [ES/EmulatorResources|Recursos de Emuladores]. Es posible que necesites referirse a ello varias veces. Te explica como son grabados los archivos de película y así puedes intentar editarlo directamente.
! Cuándo usar la edición de entrada
* La edición de entrada puede ser usado para copiar entrada (por decirlo de un TAS anterior) a tu TAS. Editar la entrada no te asegurará de que la nueva película modificada se [ES/Desync Help|reproduzca como debería]; puede o no hacerlo.
* La edición de entrada también podría ser usado para intentar corregir desincronizaciones añadiendo o eliminando entradas del archivo de película. Desafortunadamente, esto tomaría demasiado tiempo.
* La edición de entrada incluso puede ser usado para insertar entradas repetitivas, aunque si el emulador lo soporta, el scripteo de Lua es mejor usado para esta tarea.
La edición del archivo de película se puede hacer solo para cambiar la información del encabezado. Esto es fácil de hacer así que no se cubrirá en esta página.
!! Archivos de texto plano
[https://files.tasvideos.org/1853/site_images/InputFileEditing1.png|right]
Los archivos de texto plano son archivos que contienen texto plano, eso es, texto que es fácil de leer en un editor de texto. Para cambiar la entrada, el editor de texto debe enumerar las líneas y tener la habilidad de saltarse a una línea deseada. Notepad++ hace esto.
La mayoría de los formatos de película en texto plano empiezan con un encabezado de algunos números de líneas, seguido por el primer fotograma de entrada (fotograma 0). Así la línea actual mostrada (línea 1929) corresponde al fotograma 1910 (1929 - 19).
Generalmente, si quieres ir al fotograma N, y B es el número de líneas de encabezado, entonces el fotograma N está en la siguiente línea:
N + B
Para cambiar la entrada, solo edítalo directamente. Revisa la especificación del formato de la película en cuanto a como funciona. En la imagen de la derecha, la línea actual muestra que en el fotograma 1910, izquierda (L), B y el gatillo derecho (E) están pulsados. De acuerdo al [EmulatorResources/Desmume/DSM|DSM], si quieres cambiar la entrada de modo que el gatillo derecho no esté pulsado, cambia la E por un punto (.) . Luego, si quieres presionar el gatillo izquierdo, cambia el punto justo antes de que el E solía ser un W. (Puede ser cambiado a cualquier cosa que un espacio o punto, pero por consistencia...)
Para insertar entrada puedes simplemente copiar y pegar de otro archivo. Lleva un registro de donde empieza. También, Lleva un registro de donde termina a no ser que no te importe la entrada después de ese punto. Debes también cambiar la duración de la película para que sea más largo. Si no sabes, hazlo más largo de lo normal. Si es muy largo, puedes arreglarlo en el emulador fácilmente y si es muy corto, no reproducirá toda la entrada.
Un incorporada herramienta [EmulatorResources/TASEditor|Editor TAS] de FCEUX también es bastante útil.
!! Archivos en binario
Los archivos en binario, por otra parte, consiste en un conjunto de bytes no intencionados en la lectura humana. Cuando se ve en un editor de texto, uno solo vería basura (aunque podría verse algo de texto plano si el archivo almacena algo de texto plano, como los campos de comentarios y autor). Para verlos adecuadamente, requiere un editor hexadecimal.
Debido a que los archivos en binario son difíciles de editar y el tamaño de texto plano ya no es un factor hoy en día (de todos modos las subidas están puestas en archivos .ZIP), futuras especificaciones de formato fomentan el uso de archivos de texto plano completos. Sin embargo, aún hay formatos en binario para los emuladores más antiguos.
! Bytes
Los bytes son siempre mostrados como números hexadecimales de dos-dígitos. Los números hexadecimales usan la base 16, a diferencia de los números decimales que usan la base 10. Los dígitos van de la siguiente manera: 0, 1, 2, ..., 9, 10=A, 11=B, 12=C, 13=D, 14=E, 15=F. El siguiente número es el número hexadecimal 10, que es 1*16 + 0 = 16 en decimal. Por ejemplo, el número hexadecimal de 1234 es 1*16^3 + 2*16^2 + 3*16 + 4 = 4660 en decimal. Los números hexadecimales con dos o mas dígitos usualmente están prefijados con 0x para evitar confusiones.
Cualquier número de bytes pueden representar lo que sea que quieras representarlo. Por ejemplo, un byte puede representar un número de 0 a 255 (sin signo), o puede representar un número de -128 a 127 (con signo), pueden representar un byte de texto plano o pueden representar entradas. Bytes como esos que representan entradas son campos de bits. Cada byte tienen 8 bits y cada bit representa si algo está encendido o apagado. Los campos de bits son más fáciles de demostrar en binario (base 2). Un bit es ya sea encendido (1) o apagado (0).
76543210
bit 0: 0x01
bit 1: 0x02
bit 2: 0x04
bit 3: 0x08
bit 4: 0x10
bit 5: 0x20
bit 6: 0x40
bit 7: 0x80
Por ejemplo, el campo de bits 01101001 quiere decir que los bits 0, 3, 5 y 6 están apagados y los bits 1, 2, 4 y 7 están encendidos. Tiene el valor hexadecimal 69 (0x01+0x08+0x20+0x40).
Los números (más grandes que 255) que requieran dos o mas bytes para almacenar están típicamente almacenados en un formato de extremidad-baja (little-endian). Eso es, el orden de bytes está invertido cuando se ve en un editor hexadecimal. Por ejemplo, la secuencia de bytes 00 AB CD 12 representa el número hexadecimal 12CDAB00 (si representa un número en lo absoluto). Para evitar confusiones, las secuencias de bytes están dadas con espacios entre los bytes. Los formatos de extremidad-alta (big-endian, lo opuesto) están usados ocasionalmente en otros sistemas. En todos los formatos de película, se usan los formatos de extremidad-baja.
Los bytes en un archivo están direccionados empezando con 0. Los bytes pueden mantener valores que son usadas como punteros (números indicando las direcciones en el comienzo de algo, como la entrada). Esto es importante cuando se almacenan conjuntos de información que no tienen una longitud fija. A diferencia de los archivos en texto plano, el comienzo de la entrada puede no ser reconocida a no ser que esté declarado.
! Formatos de película en binario
[https://files.tasvideos.org/1853/site_images/InputFileEditing2.png|right]
Los formatos de película en binario comienzan con un encabezado, seguido de la entrada. En la mayoría de los casos, el encabezado contiene un puntero hacia los datos del control (entrada), a pesar de que en algunos casos, el comienzo de la entrada se establece como alguna dirección, por ejemplo, el byte 0x200. Por ejemplo, en archivos [http://code.google.com/p/snes9x-rr/w/list|SMV], los bytes de 0x1C a 0x1F contienen un puntero al inicio de la entrada. En la imagen de la derecha, de 0x1C a 0x1F contienen B0 00 01 00, así que el inicio de la entrada comienza en el byte 0x100B0.
Para encontrar un fotograma en particular donde la entrada está almacenada, necesitamos encontrar
* donde está el comienzo de la entrada
* cuantos bytes por fotograma.
La especificación del formato de la película debería decirte cuantos bytes por fotograma y donde se ubica el puntero hacia los datos del control si hay uno, o el comienzo de la entrada si no.
A*N + B
Recuerda que tienes que convertir todos los números a ya sea decimal o hexadecimal. Puedes usar una calculadora como la Calculadora de Windows para hacer la conversión y el cálculo por ti. También recuerda que si estás grabando con dos o más controles, los bytes por fotogramas serán diferentes que lo normal.
En la imagen de la derecha, [http://code.google.com/p/snes9x-rr/w/list|SMV] dice que A es 2 y sabemos que B es 0x100B0. Digamos que queremos ir al fotograma 32856. 32856=0x8058, así que usando el modo hexadecimal de una calculadora, 2*0x8058 + 0x100B0 = 0x20160. Selecciona {{Address -> Goto...}} y escribe 20160 como la dirección en hexadecimal. Dará como resultado la imagen de abajo.
Para cambiar la entrada, mira la especificación del formato cuidadosamente y luego haz los cambios. Recuerda que las entradas están almacenadas como campos de bit, así que para alternar el pulsado de un botón, necesitas cambiar el bit correspondiente
En la imagen de abajo, el fotograma 32856 (dirección 0x20160) contiene la secuencia de byte 00 20 (recuerda, ya que A=2, hay dos bytes por fotograma). De acuerdo al [http://code.google.com/p/snes9x-rr/w/list|SMV] (que lo da en una forma de extremidad-alta, como se muestra), quiere decir que la tecla seleccionada (0x0020) está presionada, y solo esa tecla. Para añadir el pulso de la tecla derecha a la entrada, cambia 00 20 a 00 21 (ya que derecha es 0x0001). Si en vez de eso quisiste añadir B, cambia 00 20 a A0 (ya que B es 0x0080).
Para insertar entrada, copia y pega de otro archivo. Mira Xvi32 ya que no es intuitivo (tienes que marcar primero un bloque, luego afirma el bloqueo de copia o el bloqueo de pegado). Mantén un registro de donde comienza. Luego, mantén un registro de donde termina a no ser que no te importe la entrada después de ese punto. Debes también cambiar la duración de la película (en el encabezado) para hacerlo más largo. Si no estás seguro, hazlo más largo de lo normal. Si es muy largo, puedes arreglarlo fácilmente en el emulador. Si es muy corto, no reproducirá toda la entrada. Mira las especificaciones de donde está la duración de la película y recuerda que son 4 bytes y de extremidad-baja.
[https://files.tasvideos.org/1853/site_images/InputFileEditing3.png|right]
!! Formatos en binario que no tienen constantes bytes por fotograma.
[http://code.google.com/p/mupen64-rr/wiki/M64|M64] es un poco diferente ya que ignora los fotogramas con lag. Así que el archivo de película cuenta por entradas que no tengan lag en vez de por fotogramas. Es fácil de resolver dado que la ventana del emulador incluye el recuento de entradas que no tienen lag.
[http://code.google.com/p/fceu/wiki/FCM|FCM] (un antiguo formato en binario usado por FCEU) usa una forma comprimida en vez de una base por fotograma, lo que hace que sea muy difícil de editar. Puedes convertirlo a [EmulatorResources/Famtasia/FMV|FMV] (un formato aún más viejo de un emulador obsoleto) usando [http://bisqwit.iki.fi/source/nesmock.html|Nesmock], edítalo y conviértelo de vuelta.
!! Funciona?
Funciona si lo que pensabas hacer ocurre cuando lo reproduces en el emulador. Este es un problema cuando cambias la entrada anteriormente en la película.
Si no funciona, ríndete o sigue editando. Por supuesto, deberías mantener el editor abierto hasta que termines. Cuando termines, cierra el editor de inmediato. Esto previene una sobre-escritura por accidente.
__Siempre recrea estados que ocurren antes de donde editaste la película.__ Si no lo haces y usas esos estados, podrías ya sea:
* Borrar todo el duro trabajo que habías hecho editando la película, o
* Terminar con una película destrozada después de enterarse 5 horas más tarde.
Mira la [ES/DesyncHelpTAS|Ayuda de desincronización de TAS].
!! Estudio de caso: SNES Mega Man X: Eliminando un tiro errado
En el fotograma 58090 o cercano, [user:DeHackEd] descubrió un tiro errado en el último segmento de la etapa de Boomer Kuwanger. El enemigo apuntado fue destruido en 3 golpes, pero se dispararon 4 tiros. Después de haber hecho una batalla contra del jefe y comenzando el siguiente nivel, DeHackEd no quería volver a grabar sobre su trabajo para arreglarlo, pero aún así el tiro errado tenía que ser eliminado.
El primer paso es encontrar donde se almacena el tiro. Aquí está el encabezado para el SMV. Es el mismo que el de la sección del formato SMV.
53 4D 56 1A 01 00 00 00 77 77 77 77 69 29 00 00
2B B0 01 00 01 01 00 00 20 00 00 00 C3 00 00 00
1F 8B 08 00 00 00 00 00 00 03 ED C1 31 01 00 00
La compensación del control es {{0xC3}} (195 bytes). El número de fotogramas es cercano a 58090 y hay 2 bytes por fotograma, así que nuestro punto de inicio será {{195 + 2*58090 = 116375}} ({{0x1C697}}). Aquí hay algunos de los contenidos del archivo alrededor de esa área como se ve desde un editor hexadecimal.
(Posición hexadecimal) (bytes)
0001C670 81 80 81 80 81 80 81 80 81 80 81 80 81 80 81 80
0001C680 81 00 81 00 81 30 81 __00 C1 00 81 00 C1 00 81 00__
0001C690 __C1 00 81 00 41__ c0 81 80 81 80 81 80 81 80 81 80
0001C6A0 81 80 80 80 81 80 82 80 82 80 82 80 82 80 82 80
{{00 40}}
Recuerda que cada línea es un número par de bytes, pero nuestra compensación inicial es un número impar. La porción en negrita es encontrada en nuestros 7 fotogramas que consisten en disparos. Esto se debe a que disparar es tener un fotograma presionando Disparar (Y), un fotograma sin disparar, un fotograma con el Disparo mantenido, y así sucesivamente. El código para Y es {{00 40}} que aparecen en fotogramas alternos en la sección en negrita.
0001C690 C1 00 81 00 __4__1 c0 81 80 81 80 81 80 81 80 81 80
se convierte en
0001C690 C1 00 81 00 __0__1 c0 81 80 81 80 81 80 81 80 81 80
Después de ver la película otra vez para asegurarse de que el disparo se eliminó y no hay desincronizaciones (no hubo), se sigue grabando.