#TouhouDanmakufu[Single]
#ScriptVersion[3] //Esto es necesario para los scrips de ph3
#Title["SampleA01"]
#Text["SampleA01:Shooting Bullets Straight Down"]
//Load the default shotsheet
#include "script/default_system/Default_ShotConst.txt"
//----------------------------------------------------
//Declarando las variables globales
//Las variables declaradas aquí pueden ser usadas durante todo el script
//Sin embargo, las varialbes declaradas aquí sin estáticas
//(Se pueden modificar, pero no por su cuenta, ya que no están en el loop principal)
//(Ya que el orden de ejecución no se puede garantizar, no se pueden utilizar números aleatorios (?))
//----------------------------------------------------
let objEnemy; //Enemy object
let frame = 0; //Contador para sincronizar los ataques del enemigo (irá incrementando de a uno en @MainLoop)
//----------------------------------------------------
//Movimiento del enemigo
//----------------------------------------------------
@Event
{
alternative(GetEventType())
case(EV_REQUEST_LIFE)
{
//El script pide la vida del enemigo
SetScriptResult(500); //Configurando la vida del enemigo en 500
}
}
@Initialize
{
//Creando y registrando los enemy objects
objEnemy = ObjEnemy_Create(OBJ_ENEMY_BOSS);
ObjEnemy_Regist(objEnemy);
//Configurando la imagen del enemigo
let imgExRumia = GetCurrentScriptDirectory() ~ "ExRumia.png"; //Ruta al archivo de imagen del enemigo
ObjPrim_SetTexture(objEnemy, imgExRumia);
//Configurando la imagen de arriba como textura para el enemy object (objEnemy)
ObjSprite2D_SetSourceRect(objEnemy, 64, 1, 127, 64);
//Confugurando las coordenadas del rectángulo a usar en la imagen del enemigo (izquierda, arriba, derecha, abajo)
ObjSprite2D_SetDestCenter(objEnemy);
//Posicionando el centro del rectangulo en el (0,0) de la pantalla (arriba a la izquierda)
//Moviéndolo a las coordenadas (cx, 60) en 60 frames
let cx = GetStgFrameWidth() / 2;
//Definimos la variable "cx" como el centro horizontal de la pantalla (ancho de la pantalla / 2)
ObjMove_SetDestAtFrame(objEnemy, cx, 60, 60);
}
@MainLoop
{
//Obteniendo las corrdenadas del enemigo
let ex = ObjMove_GetX(objEnemy);
let ey = ObjMove_GetY(objEnemy);
if(frame == 60)
{
//executed when frame is equal to 60
//Se ejecuta cuando "frame" es igual a 60
//・Dispara una bala derecho hacia abajo desde la posición del enemigo
//・Velocidad: 3 píxeles por frame
//・Ángulo: 90 (hacia abajo) (0 = a la derecha, 180 = izquierda, 270 = arriba)
//・Delay: 30 frames (retraso, demora)
CreateShotA1(ex, ey, 3, 90, DS_BALL_S_RED, 30);
frame = 0;
//Una vez que la bala es disparada, "frame" vuelve a 0 para que vuelva a contar a 60 y pueda disparar una bala otra vez
}
//Configurando el hitbox del enemigo (área en la que las balas le pegan)
ObjEnemy_SetIntersectionCircleToShot(objEnemy, ex, ey, 32); //hitbox donde las balas le pegan. 32 es el radio.
ObjEnemy_SetIntersectionCircleToPlayer(objEnemy, ex, ey, 24); //hitbox donde el player muere al hacer contacto. 24 es el radio.
//Agregándole +1 a "frame". "frame++" equivale a "frame = frame +1;" o "frame += 1;"
frame++;
//Si la vida del enemigo llega a 0
if(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) <= 0)
{
//el enemigo muere inmediatamente cuando la vida llega a 0
//Ya que este es un script para principiantes,
//el script termina inmediatamente sin esperar por un efecto de explosión
Obj_Delete(objEnemy);
CloseScript(GetOwnScriptID());
return;
}
}