Capítulo 1: Eventos Básicos

Edición, fanfics, o ilustraciones y creaciones hechas por ti.
Responder
Lord Solrac
Bard
Bard
Mensajes: 2040
Registrado: 13 May 2010, 21:45

Mensaje por Lord Solrac »

¡Saludos aspirante a Romhacking!
Muy bien, este capítulo tratará sobre la modificación de eventos ya existentes. Esto es para poder familiarizarte con la estructura de un evento además ¿Quién mejor maestro que el juego mismo? Ya que si en un cap x vez un evento interesante como el de “Transportación” que hace Nergal ó las batallas predeterminadas, solo desensambla su evento y revisa como se hace.
¿Qué aprenderás? Bueno, lo que se espera que aprendas es:
-Ensamblar eventos
-Desensamblar eventos
-Modificar eventos existentes

No aprenderás a hacer eventos desde cero por la sencilla razón de que no se me antoja xD no, es porque primero hay que saber la estructura de los eventos para poder hacer los propios.

Requerimientos:
-Event Assembler (Obvio para el Des/ensamblaje de eventos )
-Nightmare/Nightmare 2.0 (Informativo) y sus módulos
-Documento de Texto (cualquier programa que haga documentos en .txt, en este tutorial se usará el MS Bloc de Notas)
-Emulador (Para probar los cambios, VBA de preferencia)
-ROM 1235 - Fire Emblem (U)
-Net Frameworks 3.5 o superior (Para que se ejecute el programa)

¡Comencemos con esto ya!
Lo primero es ver el programa en sí y todas sus partes:


Imagen

Text:
Aquí seleccionas el documento de texto donde Ensamblaras/Desensamblaras los eventos.

ROM:
Aquí selecciona el ROM 1235 - Fire Emblem (U) a editar y el que recibirá los eventos.

The Game:
Esta parte es importante pues le indica al programa que juego estas modificando, como ya dije me basaré en el FE7 pero es casi lo mismo para los otros dos (FE6/FE8).

Disassembling options:
Tiene dos campos y son muy útiles puesto que te sirven para determinar qué vas a desensamblar.
Offset: Aquí se coloca el puntero de donde se encuentra el evento.
Length: Aquí determinas la longitud del evento. Se usa para los Eventos WorldMap.
Disassembly mode:
Posee tres botones de radio y determina la forma en la que se desensamblará el evento.
Whole length: El evento se desensamblará hasta la longitud que se le asigno en Length.
To end code: El evento será desensamblado cuando llegue al final de código.
Whole chapter: De desensamblará todo el evento del capítulo.
Add end guards:
Casilla verificadora para… solo déjalo marcado y ya.
Botón Reload raws:
Un botón que se usa para cuando modifiques un Raw y quieras volver a cargarlos.
Botón Assemble:
Se usa para ensamblar los eventos en la ROM.
Botón Dissassemble:
Se usa para desensamblar los eventos en la ROM.
Botón Exit:
Cierra el programa. xD

Esto es todo el programa y la verdad es que es bastante simple sin embargo sus efectos son espectaculares, el programa en si casi no será usado pues lo único que hace es ensamblar/desensamblar eventos y nada más, no los crea. Para crearlos usaremos un simple editor de texto, en mi caso, el MS Bloc de Notas tan sencillo y útil pero ya basta de tanta palabrería y desensamblemos un evento.

Desensamblando Eventos:
Para desensamblar un evento necesitaremos el offset del evento, el Length (si es Evento WorldMap) y el documento de texto. Para obtener el offset, que es lo más importante, haremos uso del módulo FE7 Event References, una vez abierto tendremos esto:


Imagen

Desplegamos la lista y buscamos el puntero del evento a desensamblar, yo desensamblaré el evento del Prólogo, para eso, necesito buscar el 0x06 Eventos Prologo y abajo del encabezado aparece el offset 0x8CA0720 aquí hare un paréntesis “()” xD
Los offset de GBA esta formados por 4 bytes, el caso de este es 08 CA 07 20 pero la verdad es que este offset solo es de 3 bytes y el cuarto es agregado el cual es 08 entonces solo usaremos el offset “real” que sería CA0720 omitiendo el 08, aclarado eso continuemos.

Ya que tenemos el offset del evento solo hay que colocarlo en su lugar (que es la caja Offset del Disassembling options), llenamos las cajas de Text y ROM y viene una decisión importante, la forma del des ensamblaje, para obtener todo el contenido del evento usaremos la opción Whole chapter. Una vez todo en orden solo se necesita pulsar el botón Dissassemble y esperar a que el evento sea desensamblado.


Imagen

Si aparece el texto:
“Finish
No error or warnings.
Please continue being awesome. ”
Significa que todo ha salido bien y que el evento ha sido desensamblado correctamente. Ahora solo hay que ver que se ha generado en el documento de texto. Busca el documento de texto y ábrelo.


Imagen

¿Pero qué demonios es esto? Si, ¡Bienvenido al Infierno! Esta parte será la más extensa, dolorosa, frustrante y divertida de los eventos aquí demostraras si en verdad quieres crear un Hack espectacular o solo otro del montón. Errores, aciertos, accidentes, exploraciones, jaquecas y demás te esperan a partir de este punto si te sientes capaz de hacerlo pues sigue leyendo si no solo pulsa Alt + F4.
SPOILER:

Código: Seleccionar todo

////////////////////////////////////////////////////
//                                                //
// Disassembled with Nintenlord's Event Assembler //
// Version: 9.1.4270.36371                        //
// Game: FE7                                      //
// File: FE7x - El Regreso de Lord Nergal.GBA     //
// Offset: $CA0720                                //
//                                                //
////////////////////////////////////////////////////



ORG $CA0540
TurnBasedEvents:
TURN 0x0 BeginningScene [1,0] 0x0 0x0
TURN 0x0 label12 [1,0] 0x0 0x0
TURN 0x0 label13 [2,0] 0x8 0x0
TURN 0x0 label14 [4,0] 0x8 0x0
CHARASM

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA0584 and the new ending offset is CURRENTOFFSET

ORG $CA05C8
CharacterBasedEvents:
CHARASM

LocationBasedEvents:
LOCA 0x3 [3,2] 0xF
CHARASM

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA05DC and the new ending offset is CURRENTOFFSET

ORG $CA06D4
MiscBasedEvents:
AFEV 0x14 label15 0xC
AFEV 0x15 label16 0xD
AFEV 0x16 label17 0xE
AFEV 0x17 label18 0xF
AFEV 0x18 label19 0x10
AFEV 0x0 label20 0x65
CHARASM

PointerList:
POIN TurnBasedEvents
POIN CharacterBasedEvents
POIN LocationBasedEvents
POIN MiscBasedEvents
POIN TrapsEliwoodMode TrapsHectorMode
POIN EnemyUnitsENM EnemyUnitsENM EnemyUnitsENM EnemyUnitsENM
POIN AllyUnitsENM AllyUnitsENM AllyUnitsENM AllyUnitsENM
POIN BeginningScene EndingScene

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA0760 and the new ending offset is CURRENTOFFSET

ORG $CA71A8
TrapsEliwoodMode:
ENDTRAP

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA71A9 and the new ending offset is CURRENTOFFSET

ORG $CA730A
TrapsHectorMode:
ENDTRAP

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA730B and the new ending offset is CURRENTOFFSET

ORG $CA749C
label20:
_0x87
STAL 30
ASMC 0x7A455
STAL 10
ASMC 0x13FA5
STAL 80
ASMC 0x6CCB9
IFAT 0x1 0x7A47D
ASMC 0x20479
ENIF 0x1
ASMC 0xB2F95
ENDA

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA74F0 and the new ending offset is CURRENTOFFSET

ORG $CA79FC
label21:
MOMA 0x0

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA79FD and the new ending offset is CURRENTOFFSET

ORG $CA7A10
label22:
BLDT 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0
BLDT 0b 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 0b 0b 0b 0b 0
BLDT 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 0b 0b 0b 0b 0
BLDT

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA7A20 and the new ending offset is CURRENTOFFSET

ORG $CA7A30
label23:
BLDT 0b 1b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0
BLDT 0b 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 0b 0b 0b 0b 0
BLDT 1b 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 1b 1b 0b 0b 0b 0b 0
BLDT

BeginningScene:
CMOF
LOU1 EnemyUnitsENM
ENUN
ASMC 0x7A939 0x7A9D5

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA7A58 and the new ending offset is CURRENTOFFSET

ORG $CA7A60
FADUCG 2
SHOWMAP
TEXTCG 0x813 0x1
FADICG 0
HIDEMAP
SHCG 0x0
MUS1 0x3F
FADUCG 2
SHOWMAP
STAL 60
TEXTCG 0x814 0x1
CGSTAL 16
FADI 4
HIDEMAP
ASMC 0x7A95D
STAL 32
BACG 0x0
FADU 4
SHOWMAP
TEX1 0x815
REBU
MUEN 4
REMA
STAL 32
LOU1 AllyUnitsENM
ENUN
STAL 64
MOVE 0x3 [14,9]
ENUN
REPA 0x3
FADI 16
HIDEMAP
BACG 0x0
FADU 16
SHOWMAP
MUS1 0x32
TEX1 0x816
REMA
LOU1 AllyUnitsENM
ENUN
LOEV 0xCD 0x51 [14,9]
ENDA

label12:
SHOWMAP
MOVE 0xCD [14,7]
ENUN
TEX1 0x817
REMA
IFTT 0x32
_0x8A
STAL 8
TEX6 0x5 [0,0] 0x818
_ASM0x42 0x83181
ENIF 0x32
MOVE 0xCD label21
ENUN
DISA 0xCD
_IFTT2 0x1 0x63
ENUT 0x6
_0xA3
_0xA4 0x71
ENIF 0x63
ENDA

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA7BD0 and the new ending offset is CURRENTOFFSET

ORG $CA7C28
label13:
_IFTT2 0x1 0x63
_0x8A
_0xA2 label22
ENIF 0x63
ENDA

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA7C4C and the new ending offset is CURRENTOFFSET

ORG $CA7CDC
label14:
_IFTT2 0x1 0x63
_0x8A
_0xA2 label23
ENIF 0x63
ENDA

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA7D00 and the new ending offset is CURRENTOFFSET

ORG $CA8154
label15:
_0x8A
_0xA1 0x0
TEX1 0x81E
REMA
_0xA3
ENDA

label16:
_0x8A
_0xA1 0x0
_0xA3
ENDA

label17:
_0x8A
_0xA1 0x0
_0xA3
ENDA

label18:
_0x8A
_0xA1 0x0
TEX1 0x82E
REMA
_0xA3
ENDA

label19:
_0x8A
_0xA1 0x0
_0xA3
ENDA

EndingScene:
_0xA3
MUS1 0x38
TEX1 0x833
REMA
MUEN 6
FADICG 3
HIDEMAP
ASMC 0x7A939 0x7A8B9 0x7A9D5

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA8214 and the new ending offset is CURRENTOFFSET

ORG $CA821C
STAL 30
MUS1 0x3AB
FADUCG 2
SHOWMAP
STAL 60
TEXTCG 0x834 0x1
MUEN 4
FADI 16
HIDEMAP
ASMC 0x7A95D
BACG 0x0
MUS1 0x3F
FADU 16
SHOWMAP
TEX1 0x835
MUEN 2
STAL 32
MUS3 0x51 0x4
MORETEXT 0x836
MUEN 2
STAL 32
MUS1 0x3F
MORETEXT 0x837
STAL 64
MORETEXT 0x838
IFTT 0x33
FADI 4
HIDEMAP
BACG 0x5B
FADU 4
SHOWMAP
STAL 8
TEX6 0x5 [0,0] 0x839
_ASM0x42 0x83181
ELSE 0x34
ENIF 0x33
FADI 4
HIDEMAP
BACG 0x5B
ENIF 0x34
MNCH 0x1
STAL 1
_0x1
ENDA

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA830C and the new ending offset is CURRENTOFFSET

ORG $CC5B50
AllyUnitsENM:
UNIT 0x3 0x2 0x0 0x8 [14,9] [13,7] [0x1,0x6B,0x6B,0x0] [0x0,0x0,0x0,0x0]
UNIT

EnemyUnitsENM:
UNIT 0x87 0x39 0x0 0x14 [3,2] [3,2] [0x1F,0x0,0x0,0x0] [0x3,0x3,0x9,0x20]
UNIT 0x88 0x39 0x87 0xC [2,6] [2,6] [0x1F,0x0,0x0,0x0] [0x0,0x0,0x9,0x0]
UNIT

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CC5BA0 and the new ending offset is CURRENTOFFSET
¿Qué te parece? Esto es un evento, pero una ADVERTENCIA aquí no podrás agregar más cosas solo modificar las existentes o quitar pero solo eso, para crear eventos se necesita otra cosa, una plantilla. Entonces ¿Qué podemos hacer?
Como estoy editando el evento del prologo pues puedo hacer que no sea Lyn el personaje que aparezca, lo mismo va para los enemigos pero no puedo agregar más. O sea que solo se puede trabajar con 3 unidades, moverlas, cambiarles el arma, cambiar los textos o suprimirlos. La verdad no se puede hacer mucho pero así aprenderás ya que aquí podrás ver la sintaxis de un evento.

Pero para comprender más, hablare un poco de cada línea que aquí se muestra:

Código: Seleccionar todo

////////////////////////////////////////////////////
//                                                //
// Disassembled with Nintenlord's Event Assembler //
// Version: 9.1.4270.36371                        //
// Game: FE7                                      //
// File: FE7x - El Regreso de Lord Nergal.GBA     //
// Offset: $CA0720                                //
//                                                //
////////////////////////////////////////////////////
Este es el encabezado del evento y solo muestra información como la versión del programa, el juego usado, el archivo o ROM y el offset de inicio. Si ves que todos estos datos están entre plecas “//” no creas que es para crear un borde mal hecho xD ya que toda línea que este después de dos plecas “//” son comentarios y el programa no las leerá.

Código: Seleccionar todo

ORG $CA0540 // Offset que contiene la sección del evento.
TurnBasedEvents: //Etiqueta principal que contiene los eventos de Turno.
TURN 0x0 BeginningScene [1,0] 0x0 0x0
 //TURN  = Código
// 0x0 = Identificador del evento
//BeginningScene = Etiqueta del evento
//[1,0] = Turno de inicio , Turno de finalización
//0x0 = Momento del turno (Jugador, enemigo ó NPC)
//0x0 = Condiciones extras
TURN 0x0 label12 [1,0] 0x0 0x0
TURN 0x0 label13 [2,0] 0x8 0x0
TURN 0x0 label14 [4,0] 0x8 0x0
CHARASM // Fin de la etiqueta principal (TurnBasedEvents)

//The next line is for re-assembling purposes. Do not delete!
MESSAGE Original ending offset is $CA0584 and the new ending offset is CURRENTOFFSET
Los TurnBasedEvent son eventos que se desarrollan en cierto turno, por el momento no los tocaremos ya que no hay nada que hacer.

Código: Seleccionar todo

ORG $CA05C8 // offset
CharacterBasedEvents: //Etiqueta principal que contiene los eventos de personaje
CHARASM// Fin de la etiqueta principal. (CharacterBasedEvents)
Los CharacterBasedEvents son eventos que ocurren entre los personajes, aquí tampoco hay nada que hacer.

Código: Seleccionar todo

LocationBasedEvents: // Etiqueta principal que contiene los eventos de zona
LOCA 0x3 [3,2] 0xF
//LOCA = Código
//0x3  =  Identificador del evento
//[3,2] = Coordenadas X,Y estas coordenadas son contadas desde la esquina superior izquierda del mapa, y se comienza desde 0,1,2,3…n. “X” son coordenadas horizontales y “Y” son coordenadas verticales.
//0xF = Comando a utilizar
CHARASM //Fin de la etiqueta principal (LocationBasedEvents)
Estos eventos de localización se usan para crear eventos de zonas tales como: pueblos, tronos, armerías y demás. Aquí si podemos modificar algo pero solo las coordenadas, ya que si quieres que el trono aparezca en otro lugar pues solo cambias esas coordenadas, claro está que el jugador buscará el Tile del trono para usarlo.

Código: Seleccionar todo

ORG $CA06D4// offset
MiscBasedEvents: // Etiqueta principal de eventos Varios
AFEV 0x14 label15 0xC
//AFEV = Código
// 0x14 = Identificador del evento.
// label15 = Etiqueta del evento.
// 0xC = Indicador del evento enlazado a este.
AFEV 0x15 label16 0xD
AFEV 0x16 label17 0xE
AFEV 0x17 label18 0xF
AFEV 0x18 label19 0x10
AFEV 0x0 label20 0x65
CHARASM // Fin de la etiqueta principal. (MiscBasedEvents)
Los MiscBasedEvents son eventos varios que no están clasificados en una etiqueta principal, aquí se determinan eventos como los de finalización de capítulos, trampas y otros como los AFEV que serán de los más usados.

Código: Seleccionar todo

PointerList:
POIN TurnBasedEvents
POIN CharacterBasedEvents
POIN LocationBasedEvents
POIN MiscBasedEvents
POIN TrapsEliwoodMode TrapsHectorMode
POIN EnemyUnitsENM EnemyUnitsENM EnemyUnitsENM EnemyUnitsENM
POIN AllyUnitsENM AllyUnitsENM AllyUnitsENM AllyUnitsENM
POIN BeginningScene EndingScene
Las 16 etiquetas principales, que no usaremos de esta manera pero es bueno verlas.

Código: Seleccionar todo

ORG $CA71A8// Offset
TrapsEliwoodMode: // Etiqueta principal de Ballestas Modo Eliwood
ENDTRAP// Fin de etiqueta principal de Ballestas Modo Eliwood (TrapsEliwoodMode)
Aquí se colocan las ballestas, solo en el modo de Eliwood.

Código: Seleccionar todo

ORG $CA730A // offset
TrapsHectorMode: // Etiqueta principal de Ballestas Modo Hector
ENDTRAP// Fin de la etiqueta principal de Ballestas Modo Hector
Lo mismo que la anterior, se colocan las ballestas pero para el modo de Hector.

Código: Seleccionar todo

ORG $CA749C //offset
label20: //Etiqueta que contiene el evento asignado en MiscBasedEvents.
_0x87// Código experimental (No se sabe que hace)
STAL 30 // Pausa entre la transición de un suceso. 
ASMC 0x7A455 //Una hermosa subrutina ASM 
STAL 10 //Pausa
ASMC 0x13FA5 //Una linda subrutina
STAL 80// Pausa
ASMC 0x6CCB9//Una linda subrutina
IFAT 0x1 0x7A47D // Código condicional
ASMC 0x20479//Una linda subrutina
ENIF 0x1 //Fin de la condición
ASMC 0xB2F95//Una linda subrutina
ENDA //Fin de la etiqueta label20
Esto es un evento suelto que no está asignado a una etiqueta principal, pero está regida por el offset que se le asigna. No te preocupes ya que nosotros no usaremos los eventos de esta manera, todo estará en un mejor orden.

Código: Seleccionar todo

ORG $CA79FC// offset
label21: //Etiqueta
MOMA 0x0 // Código de movimiento manual.
Los códigos MOMA sirven para mover una unidad manualmente, pero aquí no veremos eso.

Código: Seleccionar todo

ORG $CA7A10 //offset
label22: // Etiqueta
BLDT 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0
BLDT 0b 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 0b 0b 0b 0b 0
BLDT 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 0b 0b 0b 0b 0
BLDT
Si te preguntas ¿Por qué en el prologo el primer forajido que aparece siempre golpea a Lyn en el turno dos? Pues aquí esta tu respuesta. Este código es una batalla preestablecida que hace que Lyn sea golpeada para poder usar su poción en el siguiente turno. ¿Qué pasa si no existiera? Bien, si el forajido no golpea a Lyn, en el siguiente turno el tutorial te obliga a usar una poción pero si Lyn tiene su vida al máximo (pues el forajido no la golpeo) la poción no puede ser usada y el juego no puede seguir pues mientras no se use la poción el menú de objetos no se quitara. Debes tener ese cuidado, cuando crees tus eventos debes de evaluar todas las posibilidades.

Código: Seleccionar todo

ORG $CA7A30// offset
label23: // Etiqueta
BLDT 0b 1b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0
BLDT 0b 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 0b 0b 0b 0b 0
BLDT 1b 0b 0b 1b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 1b 1b 1b 0b 0b 0b 0b 0
BLDT
Imagen

Igual que el de arriba, pero este es de Batta, que extraño que Lyn siempre es golpeada por Batta en su turno y luego evade y milagrosamente con un 1% de critico ataca a Batta y siempre será Golpe Critico, si dijiste que eres el tipo/a mas suertudo/a del mundo pues te equivocas ya que todo fue planeado para que Lyn siempre gane. Has vivido engañado/a xD

Código: Seleccionar todo

BeginningScene: //Etiqueta Principal de Eventos de Inicio
CMOF //Ubicación de cámara.
LOU1 EnemyUnitsENM //Carga de unidades
ENUN// Pausa entre códigos
ASMC 0x7A939 0x7A9D5 //Las hermosas subrutinas.
Esta etiqueta es la que contendrá los eventos de inicio, ¿Cuáles son? Pues son aquellos que ocurren antes de que puedas mover a tus unidades.

Código: Seleccionar todo

ORG $CA7A60 //offset
FADUCG 2 //Transición de escena
SHOWMAP// Muestra el mapa
TEXTCG 0x813 0x1 //Texto con un CG (Un fondo negro)
FADICG 0 //Transición de escena
HIDEMAP //Oculta el mapa
SHCG 0x0 //Cortes de escena
MUS1 0x3F //Música a tocar
FADUCG 2 //Transición de escena
SHOWMAP //Mostrar mapa
STAL 60 // Pausa
TEXTCG 0x814 0x1 //Texto en CG (Lyn con un tazón)
CGSTAL 16 // Pausa
FADI 4 // Transición de escena
HIDEMAP // Ocultar mapa
ASMC 0x7A95D //Otra hermosa subrutina
STAL 32 //Pausa
BACG 0x0 //Fondo de pantalla (Adentro del Ger de Lyn)
FADU 4 // Transición de escena
SHOWMAP // Muestra el mapa
TEX1 0x815 // Diálogos entre personajes
REBU //Remueve la burbuja de texto
MUEN 4 //Restaura música
REMA // Fin de texto
STAL 32 // Pausa
LOU1 AllyUnitsENM // Carga de unidades
ENUN // Pausa
STAL 64 //Pausa
MOVE 0x3 [14,9] // Mueve unidades (Lyn sale del Ger)
ENUN // Pausa
REPA 0x3 // Reaparece unidades (Lyn aparece)
FADI 16 // Transición de escena
HIDEMAP// Oculta mapa
BACG 0x0 //Muestra fondo de pantalla (Interior del Ger de Lyn)
FADU 16 // Transición de escena
SHOWMAP // Muestra mapa
MUS1 0x32 // Cambia música
TEX1 0x816 // Muestra texto entre personajes
REMA // Fin del texto
LOU1 AllyUnitsENM // Carga unidades
ENUN //Pausa
LOEV 0xCD 0x51 [14,9] // Carga unidad (Aparece Táctico Mark)
ENDA // Fin de la etiqueta
Eso es la programación para el evento de Lyn en el prologo, primero habla con Mark luego sale a ver a los forajidos, regresa donde Mark y vuelve a salir.

Código: Seleccionar todo

label12: // Etiqueta
SHOWMAP //Muestra mapa
MOVE 0xCD [14,7] //Mueve a Mark
ENUN  // Pausa
TEX1 0x817 // Muestra texto
REMA // Fin del texto
IFTT 0x32 //Condición de Tutorial
_0x8A // Código Experimental
STAL 8 // Pausa
TEX6 0x5 [0,0] 0x818 // Texto en cuadro (como las instrucciones del tutorial)
_ASM0x42 0x83181 //Hermosa subrutina
ENIF 0x32 //Fin de la condición 
MOVE 0xCD label21 // Movimiento manual
ENUN // Pausa
DISA 0xCD // Desaparecer unidades (Mark sale del mapa)
_IFTT2 0x1 0x63 //Condición del tutorial
ENUT 0x6 //Marcador de ID
_0xA3  // Código Experimental (Quita el comando FIN)
_0xA4 0x71 // Código Experimental
ENIF 0x63 //Fin de la condición
ENDA //Fin de la etiqueta
Esto sucede en el turno 1 pero al inicio es por eso que el label12 esta en el TurnBasedEvents, ¿Qué hay aquí? El tutorial te dice que los azules son buenos y que los rojos son malos y que Mark o sea tu, no tendrá ninguna importancia en el juego, solo eres simbólico xD y Mark será “absorbido” por Lyn xD y cuando quieras darle al comando FIN pues no estará en el menú. Si quieres quitar eso solo ponle dos plecas “//” después de _IFTT2 0x1 0x63 y antes del ENDA y el comando FIN aparecerá aunque sea el tutorial.

Código: Seleccionar todo

ORG $CA7CDC
label14:
_IFTT2 0x1 0x63
_0x8A
_0xA2 label23
ENIF 0x63
ENDA

ORG $CA8154
label15:
_0x8A
_0xA1 0x0
TEX1 0x81E
REMA
_0xA3
ENDA

label16:
_0x8A
_0xA1 0x0
_0xA3
ENDA

label17:
_0x8A
_0xA1 0x0
_0xA3
ENDA

label18:
_0x8A
_0xA1 0x0
TEX1 0x82E
REMA
_0xA3
ENDA

label19:
_0x8A
_0xA1 0x0
_0xA3
ENDA
Igual que los de arriba, no hay comando FIN en ningún capitulo. Bórralos y no habrá problema.

Código: Seleccionar todo

EndingScene: //Etiqueta principal de Eventos Finales
_0xA3 //Experimental
MUS1 0x38 //Cambia música
TEX1 0x833 // Muestra texto
REMA // Fin del texto
MUEN 6 // Restaura la música
FADICG 3 //Transición de escena
HIDEMAP // Oculta mapa
ASMC 0x7A939 0x7A8B9 0x7A9D5 //Las bellas subrutinas

ORG $CA821C // offset
STAL 30 // pausa
MUS1 0x3AB // Música
FADUCG 2 //Transición de escena
SHOWMAP // Muestra mapa
STAL 60 // Pausa
TEXTCG 0x834 0x1 // Texto en CG (Fondo negro)
MUEN 4 // Restaura música
FADI 16 // Transición de escena
HIDEMAP // Oculta mapa
ASMC 0x7A95D //Una linda subrutina
BACG 0x0 // Fondo de pantalla (Ger de Lyn)
MUS1 0x3F // Música
FADU 16 // Transición de escena
SHOWMAP //Muestra mapa
TEX1 0x835 // Muestra textos
MUEN 2 // Restaura música
STAL 32 // Pausa
MUS3 0x51 0x4 //Cambia música
MORETEXT 0x836 // Muestra texto consecutivo
MUEN 2 //Restaura música
STAL 32 // Pausa
MUS1 0x3F // Cambia música
MORETEXT 0x837 //Texto consecutivo
STAL 64 // Pausa
MORETEXT 0x838 // Texto consecutivo
IFTT 0x33 //Condición de Tutorial
FADI 4 // Transición
HIDEMAP // Oculta Mapa
BACG 0x5B // Muestra CG
FADU 4 // Transición
SHOWMAP // Muestra mapa
STAL 8 // Pausa
TEX6 0x5 [0,0] 0x839 // Texto en cuadro
_ASM0x42 0x83181 // Una hermosa subrutina
ELSE 0x34 // condición 
ENIF 0x33 // Fin de la condición
FADI 4 // Transición
HIDEMAP //Oculta mapa
BACG 0x5B // Muestra CG
ENIF 0x34 // Fin de condición
MNCH 0x1 // Cambio de capitulo (Ir al capitulo 1)
STAL 1 // Pausa
_0x1 //Experimental
ENDA // Fin de evento
¿Qué hay aquí? Después de matar a Batta (Cruelmente con un crítico seguro xD) Lyn habla con Mark y le dice que se vayan juntos.

Código: Seleccionar todo

ORG $CC5B50
AllyUnitsENM: // Etiqueta principal de unidades aliadas
UNIT 0x3 0x2 0x0 0x8 [14,9] [13,7] [0x1,0x6B,0x6B,0x0] [0x0,0x0,0x0,0x0]
//UNIT  = Código
// 0x3 = Unidad (En este caso Lyn)
//0x2 = Clase (Lord Lyn)
//0x0 = Liderazgo (inservible)
//0x8 = Nivel
//[14,9] = Coordenadas de carga [XX,YY]
//[13,7] = Coordenadas de inicio [XX,YY]
//[0x1,0x6B,0x6B,0x0] = Items (solo 4)
//[0x0,0x0,0x0,0x0] = Inteligencia Artificial (Solo enemigos y NPC)
UNIT// Fin de la etiqueta.
Aquí si puedes modificar todo, si no quieres a Lyn cambia la Unidad, la Clase, sus Items, su posición. De donde sacar los datos. Usa el módulo Chapter Unit Editor en cualquier capítulo.

Imagen

Ahí se encuentran los datos, solo recuerda que no puedes agregar mas unidades, solo modificar la que esta. Despliega la lista y solo coloca el hex donde corresponde. Claro esta que si haces eso tienes que modificar 2 códigos más si no habrá un error fatal.

Código: Seleccionar todo

UNIT 0x1 0x1 0x0 0x8 [14,9] [13,7] [0x1,0x9,0x3B,0x0] [0x0,0x0,0x0,0x0]//Eliwood
Sustituye esta línea por la de Lyn con esto ya podrás usar a Eliwood pero se producirá un error después de cargar a Eliwood, para resolverlo busca esta línea: MOVE 0x3 [14,9]
Esta línea hace que Lyn se mueva en la escena de inicio cuando sale a ver a los bandidos, el problema es que como Eliwood está en lugar de Lyn, cuando la memoria lee los datos que dicen “…mueve a Lyn a [14,9]” pero Lyn no existe ya que Eliwood la sustituye, por eso se produce el error. Para corregirlo solo sustituye la línea por esta: MOVE 0x1 [14,9]

Luego busca esta línea: REPA 0x3
Esto hace que Lyn reaparezca luego de regresar al Ger (en la escena de inicio), pasa lo mismo, la memoria lee “…reaparece a Lyn” pero Lyn nunca fue cargada si no que Eliwood. Corrige el error colocando esta línea: REPA 0x1

Código: Seleccionar todo

EnemyUnitsENM: //Etiqueta de las unidades enemigas.
UNIT 0x87 0x39 0x0 0x14 [3,2] [3,2] [0x1F,0x0,0x0,0x0] [0x3,0x3,0x9,0x20] //Batta
UNIT 0x88 0x39 0x87 0xC [2,6] [2,6] [0x1F,0x0,0x0,0x0] [0x0,0x0,0x9,0x0] // Forajido
UNIT //Fin de la etiqueta
Lo mismo que Lyn, solo que para los enemigos. Haz los cambios que quieras siempre sin insertar otra unidad.

Bien, esto son todos los evento que hay en Prologo, una vez que hemos visto y modificado todo, solo falta volver a ensamblar el evento. ¿Cómo hacerlo?
Asegurate que tengas el documento de texto (*****.txt) y la ROM en la misma carpeta donde esta el Event Assembler, llena los campos del Text y ROM y solo pulsa el botón Assemble.

Creo que ahora tendrás mas dudas que antes… xD Por el momento no hemos creado un evento desde cero pero ahora tienes la idea de cómo te quedará, no te desanimes ya que los eventos determinarán si tu Hack quedará en la historia o solo será olvidado. Recuerda que usando eventos no hay limite en lo que puedas hacer (claro, cosas reales).

Si quieres aprender que significan los códigos de algunos eventos (ya que en el Prologo no esta no la mitad de los códigos existentes o.O) pues revisa el documento llamado Event assembler language.txt se encuentra en la misma carpeta donde esta el Event Assembler, por desgracia para los de habla hispana (si estas leyendo este tutorial eres hispano xD) el documento esta en ingles, pero un buen traductor soluciona eso. Cuando revises un evento (que hayas desensamblado) y veas un código que no sabes que hace, entonces, búscalo (Ctrl + B en el Bloc de Notas) y así sabrás su utilidad. En teoría, ese documento (Event assembler language.txt) es un excelente tutorial, salvo por el problema que… No te dice donde colocar los códigos, a que etiqueta corresponden o la sintaxis consecutiva de cada uno.

En el próximo capítulo ya hablare de cómo crear un evento desde cero y por ende la creación de eventos 100% personalizados. Esto solo acaba de empezar.

Whodao
Diabolistic
Diabolistic
Mensajes: 4802
Registrado: 03 Ago 2010, 20:07

Mensaje por Whodao »

Eeeeeeeh... SÍ puedes hacer que aparezcan más unidades en un mapa, es más, yo lo hago fácilmente, hay una etiqueta (label) dedicada para ello, una para cada modo y varias más para los refuerzos, sólo tienes que insertar más unidades siguiendo el patrón de las otras y listo xD

Mikey_Séregon
Oracle of yaoi
Oracle of yaoi
Mensajes: 7571
Registrado: 04 Ene 2008, 15:15

Mensaje por Mikey_Séregon »

^
Si haces eso sin modificar el Offset lo mas probable es que afecte otros eventos, no solo del mismo capitulo, sino que tambien del siguiente.

Seto
Pupilo
Pupilo
Mensajes: 109
Registrado: 17 May 2010, 13:38

Mensaje por Seto »

Lord_Solrac puedes subir EventAsambler otra vez?? esta estupida S.O.P.A
bloqueo la descarga

saludos

master
Soldado
Soldado
Mensajes: 16
Registrado: 01 Mar 2011, 13:14

Mensaje por master »

Grasias Lord Solrac asia falta este tema. pero abisame cuando ases el tuto de crear eventos desde sero.

Lord Solrac
Bard
Bard
Mensajes: 2040
Registrado: 13 May 2010, 21:45

Mensaje por Lord Solrac »

^ Por el momento estoy haciendo un tutorial para hacer mapas ya que antes de generar tus eventos desde cero primero tienes que generar el "suelo" próximamente estará el tutorial y después de el de los mapas crearé el de los eventos desde cero.

Whodao
Diabolistic
Diabolistic
Mensajes: 4802
Registrado: 03 Ago 2010, 20:07

Mensaje por Whodao »

^ Pues yo espero impaciente el de eventos desde 0, que es lo que me falta :D

Ahri-NineTailsFox
Diabolistic
Diabolistic
Mensajes: 4837
Registrado: 28 Jun 2009, 14:25

Mensaje por Ahri-NineTailsFox »

Tengo miedo de que aprenda a hacer esto y me vuelva adicto con los hacks o.o en serio

blazt01
Bard
Bard
Mensajes: 2164
Registrado: 16 Ene 2011, 22:28

Mensaje por blazt01 »

Valla un tuto que me a servido mucho para entender mas o menos el sistemita básico, esta súper bien espero con ansias el siguiente tutoríal :3

JuanM
Gran Ejemplo De Estupidez
Gran Ejemplo De Estupidez
Mensajes: 4062
Registrado: 15 Feb 2012, 13:39

Mensaje por JuanM »

Como siempre mi Lord Solrac y sus super tutos :alaba:

JuanM
Gran Ejemplo De Estupidez
Gran Ejemplo De Estupidez
Mensajes: 4062
Registrado: 15 Feb 2012, 13:39

Mensaje por JuanM »

Aun sigo sin saber donde coloco, para desactivar el tutorial, todo me va bién incluso me aparece el documento .txt pero cuando voy a el emulador el puto tutorial sigue y no se por que :S

Ax Tenryuu
Wood Shooter
Wood Shooter
Mensajes: 4246
Registrado: 23 Dic 2010, 13:20

Mensaje por Ax Tenryuu »

Tienes que reinsertar el evento una vez modificado... No sirve de nada estando fuera.

Rakidian
Recluta
Recluta
Mensajes: 58
Registrado: 23 Ago 2012, 16:21

Mensaje por Rakidian »

._. q hagan los hacks otros, yo seré actor de peliculas para mayores de 21 xD aun no entiendo muy bien, pero, le puedo cambiar la apariencia a los personajes? y cambiarle el nombre, por supuesto ._.

madigan
Bard
Bard
Mensajes: 1979
Registrado: 18 Jul 2012, 09:30

Mensaje por madigan »

^
pueessss
apariencia? si hablas de faces si con el Feditor, si hablas de animaciones de batalla... tambien FEditor con ayuda de GBAGE, si hablas de map sprite.... ay si
nose como pero si se puede
para cambiar nombres pues con el FEditor puedes cambiar nombres de personajes,n0mbre de objetos,explicacion (la informacion que sale cuand aprietas R), ect todo lo que son palabras

blazt01
Bard
Bard
Mensajes: 2164
Registrado: 16 Ene 2011, 22:28

Mensaje por blazt01 »

los graficos de mapas se pueden encontrar en el graphic editor creo que treast iso un tutorial sobre como cambiar los chibisprites de mapa :yoshi:

Responder