We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS

es/SpriteCreationWithDyzen: Difference between revisions

From SnesLab
Jump to: navigation, search
No edit summary
Line 4: Line 4:
En el siguiente tutorial se explicara como crear Sprites utilizando Dyzen. Este tutorial cubre no solo el como utilizar el tool, sino que además, cubre diversos comportamientos recurrentes en la creación de sprites normales, clusters y extended.
En el siguiente tutorial se explicara como crear Sprites utilizando Dyzen. Este tutorial cubre no solo el como utilizar el tool, sino que además, cubre diversos comportamientos recurrentes en la creación de sprites normales, clusters y extended.


Para este tutorial se presume que el desarrollador tiene conocimientos previos de ASM como el uso de comandos basicos, branching e indexación. Este tutorial esta basado más en como construir la logica de un sprite.
Para este tutorial se presume que el desarrollador tiene conocimientos previos de ASM como el uso de comandos básicos, branching e indexación. Este tutorial esta basado más en como construir la lógica de un sprite.
 
También debe notarse que este tutorial también puede servir para sprites que no son creados con Dyzen aunque el foco este basado en este ultimo.
== Creando un CFG/JSON con CFG Editor ==
== Creando un CFG/JSON con CFG Editor ==
== Estructura de un sprite ==
== Estructura de un sprite ==
Line 65: Line 67:
</pre>
</pre>
Donde podemos notar 2 zonas principales:
Donde podemos notar 2 zonas principales:
* '''.AlwaysExecutedZone''' que comprende el sector desde el inicio de la rutina hasta el primer chequeo <pre>LDA !SpriteStatus,x</pre>. Esta zona ocurre siempre, incluso si el juego esta en pausa o las animaciones bloqueadas, normalmente no pondremos mucho codigo en esta zona salvo por la rutina gráfica.
* '''.AlwaysExecutedZone''' que comprende el sector desde el inicio de la rutina hasta el primer chequeo <code>LDA !SpriteStatus,x</code>. Esta zona ocurre siempre, incluso si el juego esta en pausa o las animaciones bloqueadas, normalmente no pondremos mucho codigo en esta zona salvo por la rutina gráfica.
*'''.ExecutedIfNotLocked''' que comprende el sector despues del chequeo <pre>LDA !LockAnimationFlag</pre>, esta zona ocurre cuando las animaciones no estan bloqueadas, o sea cuando el juego no esta pausado o el player no esta en animación de muerte o similares, tambien. Tambien debe aclararse que este sector solo es ejecutado si el <pre>!SpriteStatus,x</pre> tiene el valor 8, esto significa que el el sprite esta con el status "Rutina Normal", esta dirección de RAM corresponde con la tabla $14C8, cabe destacar que modificando el chequeo del <pre>!SpriteStatus,x</pre> se puede hacer que el sprite ejecute el codigo en otros status, siendo uno de los más comunes el 2 que ocurre cuando el sprite esta muriendo. En este sector podemos notar que se llaman a otras rutinas que iremos detallando a lo largo del tutorial, lo importante que debemos saber aca es que debajo de la del llamado <pre>JSR InteractMarioSprite</pre> es donde ejecutaremos el codigo de la lógica del sprite.
*'''.ExecutedIfNotLocked''' que comprende el sector despues del chequeo <code>LDA !LockAnimationFlag</code>, esta zona ocurre cuando las animaciones no estan bloqueadas, o sea cuando el juego no esta pausado o el player no esta en animación de muerte o similares, tambien. Tambien debe aclararse que este sector solo es ejecutado si el <code>!SpriteStatus,x</code> tiene el valor 8, esto significa que el el sprite esta con el status "Rutina Normal", esta dirección de RAM corresponde con la tabla $14C8, cabe destacar que modificando el chequeo del <code>!SpriteStatus,x</code> se puede hacer que el sprite ejecute el codigo en otros status, siendo uno de los más comunes el 2 que ocurre cuando el sprite esta muriendo. En este sector podemos notar que se llaman a otras rutinas que iremos detallando a lo largo del tutorial, lo importante que debemos saber aca es que debajo de la del llamado <code>JSR InteractMarioSprite</code> es donde ejecutaremos el codigo de la lógica del sprite.
</li>
</li>
</ol>
</ol>

Revision as of 00:39, 22 March 2021

English Português Español 日本語

En el siguiente tutorial se explicara como crear Sprites utilizando Dyzen. Este tutorial cubre no solo el como utilizar el tool, sino que además, cubre diversos comportamientos recurrentes en la creación de sprites normales, clusters y extended.

Para este tutorial se presume que el desarrollador tiene conocimientos previos de ASM como el uso de comandos básicos, branching e indexación. Este tutorial esta basado más en como construir la lógica de un sprite.

También debe notarse que este tutorial también puede servir para sprites que no son creados con Dyzen aunque el foco este basado en este ultimo.

Creando un CFG/JSON con CFG Editor

Estructura de un sprite

Un sprite se estructura de la siguiente manera:

  1. Sprite Init: Es la rutina que ocurre cuando el sprite es creado. En Pixi esta rutina inicia con la linea:
    print "INIT ",pc
    

    Y debe terminar con un RTL.

  2. Sprite Main: Esta rutina es llamada en cada logic loop del juego y se utiliza para actualizar al sprite y su logica. En pixi esta rutina inicia con la linea:
    print "MAIN ",pc
    

    Y debe debe terminar con un RTL. Usualmente esta rutina sera de esta manera:

    print "MAIN ",pc
    	PHB
    	PHK
    	PLB
    	JSR SpriteCode
    	PLB
    RTL
    

    Llamando a una rutina llamada SpriteCode que sera el contenido real de esta rutina. Se realiza esto con el fin de mantener un mejor orden en el codigo y además setear el Program Bank para que se puedan indexar las tablas con indexación corta ($XXXX,x o $XXXX,y), en ves de usar indexación larga y asi disminuir la cantidad de ciclos en el codigo.

  3. SpriteCode: Es basicamente el contenido de la rutina Main previamente descrita. Esta rutina llamara a otras que haran la logica del sprite, separaremos estas rutinas en DynamicRoutine, GraphicRoutine, InteractionWithPlayer, InteractionWithSprites, StateMachine, AnimationRoutine, entre otras, dependiendo de que requiera el sprite. Una estructura basica de esta rutina es:
    SpriteCode:
    
    .AlwaysExecutedZone
    	JSR GraphicRoutine                  ;Calls the graphic routine and updates sprite graphics
    
    	;Here you can put code that will be excecuted each frame even if the sprite is locked
    
    	LDA !SpriteStatus,x			        
    	CMP #$08                            ;if sprite dead return
    	BNE Return	
    
    	LDA !LockAnimationFlag				    
    	BNE Return			                    ;if locked animation return.
    
    .ExecutedIfNotLocked
    	%SubOffScreen()
    
    	JSR InteractMarioSprite
    	;After this routine, if the sprite interact with mario, Carry is Set.
    
    	;Here you can write your sprite code routine
    	;This will be excecuted once per frame excepts when 
    	;the animation is locked or when sprite status is not #$08
    
    	JSR AnimationRoutine                ;Calls animation routine and decides the next frame to draw
    RTS
    Return:
    RTS
    

    Donde podemos notar 2 zonas principales:

    • .AlwaysExecutedZone que comprende el sector desde el inicio de la rutina hasta el primer chequeo LDA !SpriteStatus,x. Esta zona ocurre siempre, incluso si el juego esta en pausa o las animaciones bloqueadas, normalmente no pondremos mucho codigo en esta zona salvo por la rutina gráfica.
    • .ExecutedIfNotLocked que comprende el sector despues del chequeo LDA !LockAnimationFlag, esta zona ocurre cuando las animaciones no estan bloqueadas, o sea cuando el juego no esta pausado o el player no esta en animación de muerte o similares, tambien. Tambien debe aclararse que este sector solo es ejecutado si el !SpriteStatus,x tiene el valor 8, esto significa que el el sprite esta con el status "Rutina Normal", esta dirección de RAM corresponde con la tabla $14C8, cabe destacar que modificando el chequeo del !SpriteStatus,x se puede hacer que el sprite ejecute el codigo en otros status, siendo uno de los más comunes el 2 que ocurre cuando el sprite esta muriendo. En este sector podemos notar que se llaman a otras rutinas que iremos detallando a lo largo del tutorial, lo importante que debemos saber aca es que debajo de la del llamado JSR InteractMarioSprite es donde ejecutaremos el codigo de la lógica del sprite.

Maquinas de Estado

Estructura de un Estado

Condiciones y Transiciones

Movimiento

Movimiento Básico

Movimiento Avanzado

Interacción

Interacción con Player

Vanilla

Custom

Interacción con Dyzen

Interacción con Otros Sprites

Vanilla

Custom

Interacción con Dyzen

Rutina Gráfica

Trucos en la Rutina Gráfica

Animación

Trucos en la Rutina de Animación

Sonido y Música

Comportamientos Comunes

Comportamientos durante el Funcionamiento Normal

Comportamientos durante la Interacción con el Player

Comportamientos durante la Interacción con otros Sprites

Creación de Clusters y Extended Sprites

Sprites Dinamicos

Instalación

Utilizando DRAdder

Cambios en la Animación

Trucos con paletas de colores