219 lines
4.4 KiB
Plaintext
219 lines
4.4 KiB
Plaintext
#TouhouDanmakufu[Single]
|
||
#ScriptVersion[3]
|
||
#Title["Remilia Spell 4 (Meiling Card)"]
|
||
#Text["yassification"]
|
||
#System["script/KevinSystem/Kevin_System.txt"]
|
||
|
||
int difficultySelect = 0;
|
||
|
||
let objScene = GetEnemyBossSceneObjectID();
|
||
let csd = GetCurrentScriptDirectory();
|
||
|
||
let bossObj;
|
||
|
||
float bossX = 0;
|
||
float bossY = 0;
|
||
float playerY = 0;
|
||
float playerX = 0;
|
||
|
||
let aniframe = 0;
|
||
let aniframe2 = 0;
|
||
|
||
let spellsnd = ObjSound_Create();
|
||
let bossdiesnd = ObjSound_Create();
|
||
|
||
/*Parameters:
|
||
|
||
// Trail Burst
|
||
|
||
- Density of red bubble spiral
|
||
- Angular velocity of bubbles
|
||
- Speed of bubbles
|
||
|
||
- Density of each bullet curve left behind
|
||
- Delay between each bullet in curve
|
||
- Delay between each bullet curve
|
||
- Movement speed of bullet curve
|
||
|
||
- Delay between trail and aimed burst
|
||
*/
|
||
|
||
int[] denseTrailSpiral = [7, 8, 10];
|
||
float[] wvelTrailBubble = [3, 4, 5];
|
||
float[] spdTrailBubble = [13, 14, 16];
|
||
|
||
int[] denseTrailCurve = [1, 1, 1];
|
||
int[] delayCurveIndividual = [0, 0, 0];
|
||
int[] delayCurve = [8, 7, 6];
|
||
float[] speedCurve = [5, 6, 7];
|
||
|
||
int[] delayTrailAimed = [110, 100, 90];
|
||
|
||
/*
|
||
// Aimed Burst
|
||
|
||
- Density of red bubble spiral
|
||
- Angular velocity of bubbles
|
||
- Speed of bubbles
|
||
|
||
- Delay between each bullet left behind
|
||
- Bullet acceleration
|
||
- Bullet max speed
|
||
|
||
// Final Trail Burst
|
||
|
||
See trail burst above but x2.
|
||
- Delay between the two trail burst
|
||
*/
|
||
|
||
int[] denseAimedSpiral = [9, 10, 11];
|
||
float[] wvelAimedBubble = [1.25, 1.4, 1.75];
|
||
float[] spdAimedBubble = [12, 14, 16];
|
||
|
||
int[] delayAimed = [11, 9, 7];
|
||
float[] accelAimed = [6/60, 8/50, 10/40];
|
||
float[] maxspdAimed = [7, 8, 9];
|
||
|
||
int[] delayBeforeAim = [40, 30, 20];
|
||
int[] delayFinalBurst = [45, 35, 30];
|
||
int[] thresholdStopSpin = [80, 70, 60];
|
||
|
||
// Includes ahoy
|
||
|
||
#include "script/KevinSystem/Universal_Lib.txt" // The library to include all libraries :sans: :nail_care:
|
||
|
||
@Initialize {
|
||
|
||
//SetIntersectionVisualization(true);
|
||
|
||
SetAutoDeleteObject(true);
|
||
|
||
difficultySelect = _InitDifficulty(difficultySelect);
|
||
|
||
//difficultySelect = 1; // debug
|
||
|
||
SetShotAutoDeleteClip(64, 64, 64, 64);
|
||
|
||
if(!IsCommonDataAreaExists("PIV")){
|
||
CreateCommonDataArea("PIV");
|
||
SetAreaCommonData("PIV", "currentvalue", 10000);
|
||
}
|
||
else{}
|
||
|
||
// Create the boss object itself
|
||
bossObj = ObjEnemy_Create(OBJ_ENEMY_BOSS);
|
||
ObjEnemy_Regist(bossObj);
|
||
|
||
ObjMove_SetPosition(bossObj, GetCommonData("Boss Position X", STG_WIDTH/2), GetCommonData("Boss Position Y", STG_HEIGHT/2));
|
||
ObjEnemy_SetMaximumDamage(bossObj, 999);
|
||
|
||
// PLACEHOLDER!
|
||
let imgExRumia = GetModuleDirectory() ~ "script/ExRumia/ExRumia.png";
|
||
ObjPrim_SetTexture(bossObj, imgExRumia);
|
||
ObjSprite2D_SetSourceRect(bossObj, 64, 1, 127, 64);
|
||
ObjSprite2D_SetDestCenter(bossObj);
|
||
ObjRender_SetScaleXYZ(bossObj, 2, 2, 1);
|
||
ObjRender_SetColor(bossObj, 0xB93C3C);
|
||
ObjMove_SetDestAtFrame(bossObj, STG_WIDTH/2, 550, 1);
|
||
// PLACEHOLDER!
|
||
|
||
/*_SoloCutin(
|
||
"script/invalid.png",
|
||
0, 0, 1, 1,
|
||
bossObj, objScene, "\"Euphoric Blooming of a New Market\"",
|
||
40, 4, 0x2868B9, 0x1D115D,
|
||
10, STG_HEIGHT*1/10-30, 41
|
||
);*/
|
||
|
||
//WriteLog(spellPIV);
|
||
WriteLog(ObjEnemyBossScene_GetInfo(objScene, INFO_SPELL_SCORE));
|
||
|
||
mainTask();
|
||
_FadeInvincibility(bossObj, 150, 150, 1);
|
||
endingnew();
|
||
}
|
||
|
||
@Event {
|
||
|
||
alternative(GetEventType())
|
||
|
||
case(EV_REQUEST_LIFE) {
|
||
SetScriptResult(3000);
|
||
}
|
||
|
||
case(EV_REQUEST_TIMER) {
|
||
SetScriptResult(25);
|
||
}
|
||
|
||
}
|
||
|
||
@MainLoop {
|
||
|
||
playerY = GetPlayerY();
|
||
playerX = GetPlayerX();
|
||
//The player position is ALWAYS UPDATED
|
||
|
||
bossX = ObjMove_GetX(bossObj);
|
||
bossY = ObjMove_GetY(bossObj);
|
||
|
||
ObjEnemy_SetIntersectionCircleToShot(bossObj, ObjMove_GetX(bossObj), ObjMove_GetY(bossObj), 180);
|
||
|
||
yield;
|
||
|
||
}
|
||
|
||
@Finalize {
|
||
|
||
}
|
||
|
||
/*
|
||
|
||
Red rain bullets start falling from above in an oscillating/sine wave pattern. Remilia herself fires rainbow bullet bursts that are gravity-manipulated (see Chimata’s first or third spell in my Pride Jam script)
|
||
|
||
Parameters:
|
||
|
||
// Red Rain
|
||
|
||
- Number of rain spawners
|
||
- Start x
|
||
- End x
|
||
- Angle offset value for oscillation
|
||
- Delay between bullet spawns
|
||
- Bullet acceleration
|
||
- Bullet maxspeed
|
||
|
||
// Rainbow Burst (see Meiling's Colorful Light Chaos Dance) -> how the hell do I do this?????
|
||
|
||
- Spiral density
|
||
- Number of spiral "arms"
|
||
- y speed acceleration
|
||
- max y speed
|
||
|
||
*/
|
||
|
||
task mainTask {
|
||
|
||
while(ObjEnemy_GetInfo(bossObj, INFO_LIFE) > 0){
|
||
|
||
yield;
|
||
|
||
}
|
||
|
||
}
|
||
|
||
task endingnew(){
|
||
|
||
while(ObjEnemy_GetInfo(bossObj, INFO_LIFE)>0){
|
||
yield;
|
||
}
|
||
|
||
_GoToBrazil(objScene, bossObj, 12, 24);
|
||
wait(120);
|
||
ObjSound_SetVolumeRate(fire2, 20);
|
||
|
||
CloseScript(GetOwnScriptID);
|
||
|
||
}
|
||
|
||
|