Site Logo


Tutoriales de Danmakufu ph3 de Sparen Lección 3 - El entorno de trabajo de Danmakufu

El video de esta lección es la entrada de Talos Mistake para el concurso de RaNGE 10. Ganó el primer lugar y fue hecho hace bastante tiempo, pero todavía es uno de los scripts más hermosos (en mi opinión) que hay para ph3.

Parte 1: ¿Cuáles son los diferentes tipos de scripts en Danmakufu?

En la última lección aprendimos que el menú de Danmakufu tenía opciones para cosas como "Single" y "Plural". Hoy vamos a aprender qué son estas cosas en realidad y cómo las usan los scripters. En esta lección también exploraremos las partes fundamentales de cualquier script de Danmakufu ph3 y comenzaremos a estudiar los Singles, que son las piezas fundamentales de toda batalla con un boss.

Primero iremos con el Single, que suele contener un solo ataque, aunque se pueden modificar para que incluyan más o menos que uno dependiendo de los objetivos del scripter. Por lo general, será una parte de la barra de la vida del boss y contendrá, ya sea una spell o no-spell.

Los singles son sorprendentemente versátiles. Ya que el ph3 te deja controlar gran parte del sistema, puedes hacer que una no-spell se convierta en una spell a mitad de camino, usar bosses múltiples, entre otras cosas, dependiendo de tus necesidades.

Ahora vamos con el Plural. Un script "plural" tiene como función principal hacer referencia a los scripts singles para poner todos los ataques juntos en una batalla con un boss. En el 0.12m, básicamente esta era la única forma de hacer un boss (la excepción aquí es Miransu Uwabami/Victini, que usaba un sistema personalizado que se salteaba los scripts plurales todos juntos). Si bien el ph3 permite poner en un script de stage lo que normalmente iría en un script plural, recomiendo usar plurals para las batallas con bosses, ya que esto permite acceder más fácilmente a los script singles. Además es recomendable que domines bien los scripts plurals antes de pasar a aprender los stages – los scripters novatos solo podrán darle un uso limitado a los scripts de stages, cosa que discutiremos más adelante.

Los scripts de Stage son los cimientos de los juegos completos y también se usan en scripts donde solo hay una batalla con un boss pero que tienen para seleccionar dificultad y otras cosas. Los stages pueden cargar scripts plurals y vienen con una variedad de opciones de personalización. Una vez que hayas dominado el uso de los plurals, querrás ir directo a los stages. Sin embargo eso es para mucho más adelante, así que no te centres en esto todavía.

Los Packages son nuevos en el ph3. En el 0.12m no había una forma fácil de crear menús y permitir el acceso a los replays. Sin embargo en el ph3 se agregaron los packages, que funciona como una especie de menú para tus juegos. Son 100% personalizables, aunque tienen algunas limitaciones en cuanto a las funciones que se pueden usar. Los packages se usan en juegos completos y en proyectos donde se necesite un menú principal.

Si bien los anteriores son los principales tipos de scripts, hay algunos tipos de archivos puntuales a tener en cuenta: Archivos de fondo (background) y de sistema (system). Discutiremos esos archivos en detalle en el futuro, pero solo digamos que por ahora usarás los archivos default hasta que estés acostumbrado a usar "tasks" y a manipular texto e imágenes en Danmakufu.

Examen: Tipos de scripts

Suika quiere hacer una no-spell para una batalla con un boss en Danmakufu. ¿Cuál de los siguientes scripts debería usar?

A. Stage
B. Single
C. Plural

Parte 2: ¿Cuáles son los componentes de un script de Danmakufu?

Clic aquí para abrir una masiva cantidad de código en una ventana separada

Si no tienes experiencia con las ciencias de la computación, probablemente estés abrumado por esta cantidad de código. Este single en particular es la traducción (del japonés) de SampleA01, ubicado en la carpeta “sample” dentro de la carpeta “script” de tu ph3. Este código está hecho para que los scripters lo usen como base, y como tal, es lo que usaré de ejemplo. Para futuras referencias, dale uso a los scripts de ejemplo (y al player y boss ExRumia), son un recurso bastante útil.

Ahora vamos a echarle un vistazo al texto y lo desglosaremos parte por parte.

Parte 3: ¿Cuáles son los componentes de la cabecera (header) de Danmakufu?

Primero, hay cosas arriba de todo con un # de prefijo. Estos (no el include, solo la parte de arriba) conforman el header de Danmakufu. La primera línea es #TouhouDanmakufu[Single]. Esto designa el script como un script de Touhou Danmakufu – sin esta línea, el Danmakufu no leerá el archivo como uno ejecutable y por consiguiente no se mostrará en las búsquedas (como por ejemplo en All, Directory, etcétera). En el lugar de Single también se puede poner “Plural”, “Stage” y “Package”, los tipos de scripts explicados en la parte 1.

Lo siguiente es #ScriptVersion[3]. Como se indica en el comentario (lo que le sigue a los //), esto es necesario para todos los scripts de ph3. #ScriptVersion[2] se refiere a Danmakufu 0.12m y #ScriptVersion[1] a algo que se usaba desde antes de que el Touhou 10 siquiera exista. Solo digamos que simplemente necesitas tener un #ScriptVersion[3] para que el ph3 corra bien.

Luego de la versión del script hay dos campos rotulados #Title y #Text, con una cadena (string) dentro que contiene la información usada para describir los campos. Lo que va en #Title será la etiqueta del script mientras navegas por la lista de scripts en Danmakufu. #Text es el texto que aparece abajo a la izquierda en la pantalla de selección de scripts. Sugiero nunca dejar #Title en blanco, ya que podría confundir a la gente que de repente aparezca un script sin título mientras navegan por la lista – si no quieres que el script aparezca en la lista de scripts de Danmakufu, es comentar la línea #TouhouDanmakufu[TipoDeScript]. Cómo manipular cadenas en el ph3 y cómo comentar será discutido en otro tutorial.

Por ejemplo, hay un poquito de código. Usamos [r] para saltos de línea.

#Title["Descent of the Mochi Hammer - Stage 6"]
#Text["Descent of the Mochi Hammer[r]Stage 6[r]By Sparen"]

Adicionalmente, hay algunos campos que no se muestran aquí: #Image, #BGM, #Player, #Background y #System. Estas son partes opcionales en el header.

Primero explicaré #Image y #BGM. #Image controla si aparecerá o no una imagen en la parte inferior derecha de la pantalla cuando seleccionas el script en el menú de Danmakufu. Si quieres incluir una imagen, tienes que poner la ruta (file path) a la imagen dentro de los corchetes, pero la mayoría de la gente no se molesta en hacer esto. Así que está bien no ponerle nada. Puedes incluir una ruta a un archivo de música en #BGM para que se reproduzca. Esto es bastante útil si no quieres cargar y reproducir el archivo manualmente, pero ambos métodos tienen varios usos.

#Player se puede usar para limitar los personajes jugables que pueden ser elegidos. Esto se usa principalmente para especificar un personaje en particular (generalmente incluido con el script). Si no quieres indicar un personaje específico, simplemente omite esta línea. Para especificar varios jugadores, debes tener una coma entre las rutas de archivos. Por ejemplo:

#Player["./player/A2MarisaSparen/A2Marisa.txt", "./player/Ultima's DDC Reimu B player/ReimuH.dnh"]

#Background y #System se usan para un fondo personalizado y para utilizar archivos de sistema diferentes a los que vienen por defecto.

CHECKPOINT: ¿Qué campos son requeridos en el header? ¿Por qué?

Parte 4: ¿Cuáles son las rutinas principales utilizadas en un single?

Ahora nos vamos a enfocar en algo más. Vamos a ignorar todos los comentarios y las sentencias (statements) “let” y en su lugar nos centraremos en los ítems que comienzan con un @. Estas son las rutinas de un script Single. Como se ve en la página, están @Event, @Initialize y @MainLoop; también están @Loading y @Finalize, que se supone, están pensados para usarse en conjunto mientras cargan los recursos. Los principiantes pueden ignorar @Loading y @Finalize hasta que empiecen a crear proyectos más grandes. Ten en cuenta que la L de @MainLoop está en mayúscula. Danmakufu diferencia mayúsculas y minúsculas (case sensitive). No uses @Mainloop o tu script no funcionará porque MainLoop y Mainloop son dos cosas totalmente distintas.

Primero vamos a explicar @Initialize, que se ejecuta solo una vez el comienzo del script. Los comandos entre llaves {} se ejecutan en orden. Aquí vas a registrar a los enemigos, preparar recursos y a veces mover el boss a la posición inicial deseada. Todavía no entraré en mucho detalle en este apartado, pero gradualmente irás aprendiendo qué es lo que va aquí mientras desarrollas tu propio estilo.

El siguiente es @MainLoop. Por defecto, esta rutina se ejecuta una vez por frame (cuadro). Hay 60 frames en un segundo, como se muestra (en teoría), en el medidor de FPS. Ya que @MainLoop se ejecuta cada frame, se usa para cosas que necesitan ejecutarse cada cuadro, como indicar dónde está el hitbox del boss. Puedes controlar bastantes cosas aquí, pero muchos scripters prefieren usar tasks en conjunto con @MainLoop o a veces completamente independiente de esta. Veremos esto con detalle más adelante.

El siguiente es @Event, que fue introducido en el ph3. Aquí se controlan varios 'eventos', y se configuran cosas como los spell bonus, la vida del boss, entre otras. Hablaremos brevemente acerca de @Event cuando hagamos nuestro primer single, pero como puede volverse complicado, la mayor parte de los detalles serán abarcados en tutoriales más avanzados.

Por último, @Finalize, que ya estaba presente en el 0.12m. Y @Loading, que fue introducido en el ph3. @Loading se ejecuta una vez, antes de @Initialize y solo debería usarse para cargar recursos. En un futuro muy, muy lejano, tal vez explique mejor qué es lo que hace @Loading, pero por ahora, solo ten en cuenta que existe. @Finalize se ejecuta una vez al finalizar el script y se usa para borrar los recursos cargados. Estas dos rutinas son opcionales y pueden obviarse en el script.

En la siguiente lección aprenderemos sobre los comentarios, variables y una cantidad de otros componentes de lenguajes de programación y scripting, así como también la sintaxis del Danmakufu. Sin embargo, por ahora... un examen.

Examen: Entorno de trabajo de Danmakufu

Reimu está muy enojada. Mueve la cabeza de un lado a otro. Sin embargo, no puede darse cuenta por qué su script no se muestra en la lista de scripts de Danmakufu ph3 en la parte de Directory. Ya ha recargado, se aseguró de que el archivo está en la carpeta “script” y hasta consideró llamar a Nitori. El header de su script se muestra a continuación, y las líneas siguientes líneas están incluidas en su header.

#ScriptVersion[3]
#Title["Rojo y Blanco"]
#Text["¿Quiénes son los ladrones robando mi caja de donaciones?"] 

¿Por qué no aparece su script?

A. Está usando #ScriptVersion[3] en lugar de #ScriptVersion[2].
B. Olvidó poner #TouhouDanmakufu[Single].
C. No puso la versión del script.
D. Es culpa de Yukari.

Fuentes y recursos externos

[ 弾幕風 PH3 Tutorial ] Introduction to Danmakufu (Helepolis)
-->Todavía no es particularmente relevante, pero lo será en las siguientes lecciones.