thanks hosts for 24hr extension uwu owo
|
@ -117,13 +117,13 @@ string DATA_DIFFICULTY = "";
|
||||||
|
|
||||||
InitiateData();
|
InitiateData();
|
||||||
|
|
||||||
ObjSound_Load(objBGM, "script/Jam10/resourceLib/StageTheme.mp3");
|
ObjSound_Load(objBGM, "script/Jam10/resourceLib/StageTheme.ogg");
|
||||||
ObjSound_SetSoundDivision(objBGM, SOUND_BGM);
|
ObjSound_SetSoundDivision(objBGM, SOUND_BGM);
|
||||||
ObjSound_SetResumeEnable(objBGM, true);
|
ObjSound_SetResumeEnable(objBGM, true);
|
||||||
ObjSound_SetLoopEnable(objBGM, true);
|
ObjSound_SetLoopEnable(objBGM, true);
|
||||||
ObjSound_SetLoopTime(objBGM, 22.72, 79.52);
|
ObjSound_SetLoopTime(objBGM, 22.72, 79.52);
|
||||||
|
|
||||||
ObjSound_Load(objBGMBoss, "script/Jam10/resourceLib/BossTheme.mp3");
|
ObjSound_Load(objBGMBoss, "script/Jam10/resourceLib/BossTheme.ogg");
|
||||||
ObjSound_SetSoundDivision(objBGMBoss, SOUND_BGM);
|
ObjSound_SetSoundDivision(objBGMBoss, SOUND_BGM);
|
||||||
ObjSound_SetResumeEnable(objBGMBoss, true);
|
ObjSound_SetResumeEnable(objBGMBoss, true);
|
||||||
ObjSound_SetLoopEnable(objBGMBoss, false);
|
ObjSound_SetLoopEnable(objBGMBoss, false);
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
int difficulty = 0;
|
int difficulty = 0;
|
||||||
|
|
||||||
int STAGE_LENGTH = 90;
|
int STAGE_LENGTH = 120;
|
||||||
|
int MIDBOSS_LENGTH = 75;
|
||||||
int BOSS_LENGTH = 30;
|
int BOSS_LENGTH = 30;
|
||||||
|
|
||||||
int HP_MAX = 4500;
|
int HP_MAX = 4500;
|
||||||
|
@ -10,6 +11,8 @@ int PHASE1_LIMIT = 2250;
|
||||||
int PHASE2_LIMIT = 0;
|
int PHASE2_LIMIT = 0;
|
||||||
int PHASE3_LIMIT = 0;
|
int PHASE3_LIMIT = 0;
|
||||||
|
|
||||||
|
int MIDBOSS_HP = 1800;
|
||||||
|
|
||||||
// Rank min/max
|
// Rank min/max
|
||||||
|
|
||||||
local{
|
local{
|
||||||
|
@ -24,9 +27,9 @@ local{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
float RANK_MIN = [1, 1, 9][difficulty];
|
float RANK_MIN = [1, 1, 12][difficulty];
|
||||||
float RANK_MAX = 9; // Since Novice locks Rank to a lower level, this distinction is necessary
|
float RANK_MAX = 12; // Since Novice locks Rank to a lower level, this distinction is necessary
|
||||||
float RANK_MAX_TRUE = [6, 9, 9][difficulty]; // Can be changed
|
float RANK_MAX_TRUE = [6, 12, 12][difficulty]; // Can be changed
|
||||||
|
|
||||||
SetCommonData("MinRank", RANK_MIN);
|
SetCommonData("MinRank", RANK_MIN);
|
||||||
SetCommonData("MaxRank", RANK_MAX_TRUE);
|
SetCommonData("MaxRank", RANK_MAX_TRUE);
|
||||||
|
@ -70,25 +73,23 @@ int[] bossRect = [192, 448, 384, 704];
|
||||||
float baseMoveSpeedM = 8;
|
float baseMoveSpeedM = 8;
|
||||||
|
|
||||||
// High speed
|
// High speed
|
||||||
float baseMoveSpeedH = 10;
|
float baseMoveSpeedH = 9;
|
||||||
|
|
||||||
// Very high speed
|
// Very high speed
|
||||||
float baseMoveSpeedVH = 11.5;
|
float baseMoveSpeedVH = 10.5;
|
||||||
|
|
||||||
// Speed multiplier per rank - speed increases by 0.02/0.03x per rank increase up to a max of 0.18/0.27x
|
float MoveSpeedRankMultiplierVL = 0.01;
|
||||||
|
float MoveSpeedRankMultiplierL = 0.015;
|
||||||
float MoveSpeedRankMultiplierVL = 0.015;
|
float MoveSpeedRankMultiplierH = 0.02;
|
||||||
float MoveSpeedRankMultiplierL = 0.025;
|
float MoveSpeedRankMultiplierVH = 0.03;
|
||||||
float MoveSpeedRankMultiplierH = 0.035;
|
|
||||||
float MoveSpeedRankMultiplierVH = 0.05;
|
|
||||||
|
|
||||||
// ITEM RELATED
|
// ITEM RELATED
|
||||||
|
|
||||||
float smallFlyingEnm_itemPointMin = 8;
|
float smallFlyingEnm_itemPointMin = 8;
|
||||||
float smallFlyingEnm_itemPointMax = 12;
|
float smallFlyingEnm_itemPointMax = 12;
|
||||||
|
|
||||||
float medFlyingEnm_itemPointMin = 12;
|
float medFlyingEnm_itemPointMin = 14;
|
||||||
float medFlyingEnm_itemPointMax = 18;
|
float medFlyingEnm_itemPointMax = 21;
|
||||||
|
|
||||||
float largeFlyingEnm_itemPointMin = 20;
|
float largeFlyingEnm_itemPointMin = 20;
|
||||||
float largeFlyingEnm_itemPointMax = 30;
|
float largeFlyingEnm_itemPointMax = 30;
|
||||||
|
@ -177,8 +178,8 @@ int[] bossRect = [192, 448, 384, 704];
|
||||||
int W3_spawnDelayMin = 15;
|
int W3_spawnDelayMin = 15;
|
||||||
int W3_spawnDelayMax = 30;
|
int W3_spawnDelayMax = 30;
|
||||||
|
|
||||||
int W3_fairyNumMin = 3;
|
int W3_fairyNumMin = 2;
|
||||||
int W3_fairyNumMax = 9;
|
int W3_fairyNumMax = 6;
|
||||||
|
|
||||||
float W3_rangeMin = 1;
|
float W3_rangeMin = 1;
|
||||||
float W3_rangeMax = 2.5;
|
float W3_rangeMax = 2.5;
|
||||||
|
@ -194,8 +195,8 @@ int[] bossRect = [192, 448, 384, 704];
|
||||||
|
|
||||||
// Wave 4: Mushroom fairy, fires small fireball lines
|
// Wave 4: Mushroom fairy, fires small fireball lines
|
||||||
|
|
||||||
int W4_spawnDelayMin = 18;
|
int W4_spawnDelayMin = 15;
|
||||||
int W4_spawnDelayMax = 35;
|
int W4_spawnDelayMax = 30;
|
||||||
|
|
||||||
int W4_fairyNumMin = 2;
|
int W4_fairyNumMin = 2;
|
||||||
int W4_fairyNumMax = 5;
|
int W4_fairyNumMax = 5;
|
||||||
|
@ -209,8 +210,8 @@ int[] bossRect = [192, 448, 384, 704];
|
||||||
int W4_stopTimeMin = 20;
|
int W4_stopTimeMin = 20;
|
||||||
int W4_stopTimeMax = 30;
|
int W4_stopTimeMax = 30;
|
||||||
|
|
||||||
float W4_bulletSpdMin = 10;
|
float W4_bulletSpdMin = 8;
|
||||||
float W4_bulletSpdMax = 12.25;
|
float W4_bulletSpdMax = 10;
|
||||||
|
|
||||||
// Wave 5: Clumped small fairy lines come from both sides to attack you.
|
// Wave 5: Clumped small fairy lines come from both sides to attack you.
|
||||||
|
|
||||||
|
@ -228,7 +229,7 @@ int[] bossRect = [192, 448, 384, 704];
|
||||||
float W5_bulletSpdMin = 11;
|
float W5_bulletSpdMin = 11;
|
||||||
float W5_bulletSpdMax = 13;
|
float W5_bulletSpdMax = 13;
|
||||||
|
|
||||||
// Wave 6: Alt mushroom fairies (2 OR 3) spawns sparse rings (counts as ground)
|
// Wave 6: Alt mushroom fairies (2 OR 3) spawns sparse rings (NOT GROUND)
|
||||||
|
|
||||||
int WG1_ringDenseMin = 10;
|
int WG1_ringDenseMin = 10;
|
||||||
int WG1_ringDenseMax = 14;
|
int WG1_ringDenseMax = 14;
|
||||||
|
@ -239,7 +240,7 @@ int[] bossRect = [192, 448, 384, 704];
|
||||||
int WG1_bulletDelayMin = 30;
|
int WG1_bulletDelayMin = 30;
|
||||||
int WG1_bulletDelayMax = 45;
|
int WG1_bulletDelayMax = 45;
|
||||||
|
|
||||||
// Wave 7: Yukionna with spiral (counts as ground)
|
// Wave 7 (S2): Yukionna with spiral (counts as ground)
|
||||||
|
|
||||||
int WG2_spiralDenseMin = 6;
|
int WG2_spiralDenseMin = 6;
|
||||||
int WG2_spiralDenseMax = 9;
|
int WG2_spiralDenseMax = 9;
|
||||||
|
@ -253,6 +254,40 @@ int[] bossRect = [192, 448, 384, 704];
|
||||||
int WG2_spiralDelayMax = 40;
|
int WG2_spiralDelayMax = 40;
|
||||||
int WG2_spiralDelayMin = 25;
|
int WG2_spiralDelayMin = 25;
|
||||||
|
|
||||||
|
// Wave 8 (S2): Medium fairies with W3 movements leave large fireball walls. Uses W4 parameters
|
||||||
|
// Wave 9 (S2): Large number of small fairies come in from both sides (with W3 movements) firing aimed bullets.
|
||||||
|
|
||||||
|
int W9_spawnDelayMin = 5;
|
||||||
|
int W9_spawnDelayMax = 10;
|
||||||
|
|
||||||
|
int W9_fairyNumMin = 8;
|
||||||
|
int W9_fairyNumMax = 12;
|
||||||
|
|
||||||
|
int W9_bulletDelayMin = 30;
|
||||||
|
int W9_bulletDelayMax = 50;
|
||||||
|
|
||||||
|
float W9_bulletSpdMin = 7.5;
|
||||||
|
float W9_bulletSpdMax = 9.5;
|
||||||
|
|
||||||
|
// Wave 10 (S2): Clumped medium fairy (3 per line) come in from the right to fire large fireball lines.
|
||||||
|
|
||||||
|
int W10_spawnDelayMin = 35;
|
||||||
|
int W10_spawnDelayMax = 50;
|
||||||
|
|
||||||
|
int W10_fairyNumMin = 2;
|
||||||
|
int W10_fairyNumMax = 4;
|
||||||
|
|
||||||
|
int W10_bulletLineNumMin = 3;
|
||||||
|
int W10_bulletLineNumMax = 5;
|
||||||
|
|
||||||
|
// Angles
|
||||||
|
|
||||||
|
int W10_moveTimeMin = 55;
|
||||||
|
int W10_moveTimeMax = 70;
|
||||||
|
|
||||||
|
float W10_bulletSpdMin = 8;
|
||||||
|
float W10_bulletSpdMax = 9.5;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// Wave Ground 1
|
// Wave Ground 1
|
||||||
|
|
||||||
|
@ -359,7 +394,7 @@ task UpdateDrops(){
|
||||||
while(true){
|
while(true){
|
||||||
|
|
||||||
smallFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(12, 18, rank/RANK_MAX);
|
smallFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(12, 18, rank/RANK_MAX);
|
||||||
medFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(16, 24, rank/RANK_MAX);
|
medFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(21, 28, rank/RANK_MAX);
|
||||||
largeFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(30, 40, rank/RANK_MAX);
|
largeFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(30, 40, rank/RANK_MAX);
|
||||||
verylargeFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(45, 60, rank/RANK_MAX);
|
verylargeFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(45, 60, rank/RANK_MAX);
|
||||||
|
|
||||||
|
|
|
@ -273,8 +273,8 @@ function <int> _MushroomFairy(
|
||||||
|
|
||||||
_EnemyItemDrop(
|
_EnemyItemDrop(
|
||||||
enm, true,
|
enm, true,
|
||||||
smallFlyingEnm_itemPointMin, smallEnm_itemChainMin,
|
medFlyingEnm_itemPointMin, smallEnm_itemChainMin,
|
||||||
smallFlyingEnm_itemPointMax, smallEnm_itemChainMax,
|
medFlyingEnm_itemPointMax, smallEnm_itemChainMax,
|
||||||
invinTime*5, smallEnemyHitbox*2
|
invinTime*5, smallEnemyHitbox*2
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -65,8 +65,12 @@ let POINTER_CHAIN = LoadAreaCommonDataValuePointer("PIV", "ChainAmount", 1);
|
||||||
ObjEnemy_SetDamageRate(bossObj, 0, 0);
|
ObjEnemy_SetDamageRate(bossObj, 0, 0);
|
||||||
|
|
||||||
_RenderBossFight(bossObj);
|
_RenderBossFight(bossObj);
|
||||||
|
|
||||||
|
_MagicCircle(bossObj);
|
||||||
|
|
||||||
SetEnemyAutoDeleteClip(160, 160, 160, 160);
|
SetEnemyAutoDeleteClip(160, 160, 160, 160);
|
||||||
|
|
||||||
|
|
||||||
//testTask();
|
//testTask();
|
||||||
|
|
||||||
//groundTask();
|
//groundTask();
|
||||||
|
@ -124,6 +128,7 @@ let POINTER_CHAIN = LoadAreaCommonDataValuePointer("PIV", "ChainAmount", 1);
|
||||||
|
|
||||||
// This array contains ONLY FLYING ENEMIES
|
// This array contains ONLY FLYING ENEMIES
|
||||||
|
|
||||||
|
|
||||||
task groundTask(){
|
task groundTask(){
|
||||||
|
|
||||||
wait(90);
|
wait(90);
|
||||||
|
@ -134,7 +139,7 @@ task groundTask(){
|
||||||
wait(max(5, 15-rank));
|
wait(max(5, 15-rank));
|
||||||
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
||||||
|
|
||||||
if(GetCommonData("Ground Loops Cleared", 0)/3 == 0 && rank > 3){
|
if(GetCommonData("Ground Loops Cleared", 0) % 3 == 0 && rank > 3){
|
||||||
|
|
||||||
WaveGround2(playerX);
|
WaveGround2(playerX);
|
||||||
wait(max(5, 15-rank));
|
wait(max(5, 15-rank));
|
||||||
|
@ -156,10 +161,56 @@ task flyingTask(){
|
||||||
|
|
||||||
wait(30);
|
wait(30);
|
||||||
|
|
||||||
while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > BOSS_LENGTH){
|
// Stage 1
|
||||||
|
|
||||||
|
while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > MIDBOSS_LENGTH){
|
||||||
|
|
||||||
Wave1();
|
Wave1();
|
||||||
wait(max(5, 20-4*rank));
|
wait(max(5, 20-4*rank));
|
||||||
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= MIDBOSS_LENGTH){break;}
|
||||||
|
|
||||||
|
Wave2();
|
||||||
|
wait(max(5, 20-4*rank));
|
||||||
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= MIDBOSS_LENGTH){break;}
|
||||||
|
|
||||||
|
if(rank > 4 || GetCommonData("Flying Loops Cleared", 0) > 3){
|
||||||
|
WaveGround1();
|
||||||
|
wait(max(5, 20-4*rank));
|
||||||
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= MIDBOSS_LENGTH){break;}
|
||||||
|
}
|
||||||
|
|
||||||
|
Wave3();
|
||||||
|
wait(max(5, 20-4*rank));
|
||||||
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= MIDBOSS_LENGTH){break;}
|
||||||
|
|
||||||
|
Wave5();
|
||||||
|
wait(max(5, 20-4*rank));
|
||||||
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= MIDBOSS_LENGTH){break;}
|
||||||
|
|
||||||
|
SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+0.5, 1, RANK_MAX));
|
||||||
|
|
||||||
|
Wave4();
|
||||||
|
wait(max(5, 20-4*rank));
|
||||||
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= MIDBOSS_LENGTH){break;}
|
||||||
|
|
||||||
|
Wave1();
|
||||||
|
wait(max(5, 20-4*rank));
|
||||||
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= MIDBOSS_LENGTH){break;}
|
||||||
|
|
||||||
|
SetCommonData("Flying Loops Cleared", GetCommonData("Flying Loops Cleared", 0)+1);
|
||||||
|
SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+0.5, 1, RANK_MAX));
|
||||||
|
|
||||||
|
yield;
|
||||||
|
}
|
||||||
|
|
||||||
|
_MidbossFight();
|
||||||
|
|
||||||
|
// Stage 2
|
||||||
|
|
||||||
|
while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > BOSS_LENGTH){
|
||||||
|
|
||||||
|
Wave9();
|
||||||
|
wait(max(5, 20-4*rank));
|
||||||
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
||||||
|
|
||||||
Wave2();
|
Wave2();
|
||||||
|
@ -172,25 +223,25 @@ task flyingTask(){
|
||||||
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
||||||
}
|
}
|
||||||
|
|
||||||
Wave3();
|
Wave5();
|
||||||
wait(max(5, 20-4*rank));
|
wait(max(5, 20-4*rank));
|
||||||
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
||||||
|
|
||||||
Wave5();
|
Wave10();
|
||||||
wait(max(5, 20-4*rank));
|
wait(max(5, 20-4*rank));
|
||||||
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
||||||
|
|
||||||
SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+0.5, 1, RANK_MAX));
|
SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+0.5, 1, RANK_MAX));
|
||||||
|
|
||||||
Wave4();
|
Wave8();
|
||||||
wait(max(5, 20-4*rank));
|
wait(max(5, 20-4*rank));
|
||||||
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
||||||
|
|
||||||
Wave1();
|
Wave9();
|
||||||
wait(max(5, 20-4*rank));
|
wait(max(5, 20-4*rank));
|
||||||
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
||||||
|
|
||||||
if(rank > 7 || GetCommonData("Flying Loops Cleared", 0) > 5){
|
if(rank > 7 || GetCommonData("Flying Loops Cleared", 0) > 4){
|
||||||
WaveGround2(playerX);
|
WaveGround2(playerX);
|
||||||
wait(max(5, 20-4*rank));
|
wait(max(5, 20-4*rank));
|
||||||
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;}
|
||||||
|
@ -204,7 +255,6 @@ task flyingTask(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
task curEnmManage(){
|
task curEnmManage(){
|
||||||
|
|
||||||
SetCommonData("Flying Loops Cleared", 0);
|
SetCommonData("Flying Loops Cleared", 0);
|
||||||
|
@ -284,6 +334,64 @@ task _BossExplosion(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _MidbossExplosion(int enmID, float x, float y){
|
||||||
|
|
||||||
|
bool explosionEnd = false;
|
||||||
|
|
||||||
|
async{
|
||||||
|
|
||||||
|
int timer = ObjEnemyBossScene_GetInfo(objScene, INFO_TIMERF);
|
||||||
|
|
||||||
|
while(!explosionEnd){
|
||||||
|
|
||||||
|
ObjEnemyBossScene_SetSpellTimer(objScene, timer);
|
||||||
|
yield;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//NotifyEventAll(EV_DROP_POINT_ENEMY, [enmX, enmY], timer, maxTimer, minPoint, maxPoint);
|
||||||
|
|
||||||
|
DeleteShotAll(TYPE_ALL, TYPE_ITEM);
|
||||||
|
SetPlayerInvincibilityFrame(90);
|
||||||
|
ObjSound_Play(bossBoom);
|
||||||
|
Obj_SetRenderPriorityI(enmID, 30);
|
||||||
|
NotifyEvent(GetCommonDataPtr(SYSTEMID_PTR, 0), EV_EXPLODE, [x, y]);
|
||||||
|
|
||||||
|
_ObjShake(enmID, 60, 45);
|
||||||
|
|
||||||
|
async{
|
||||||
|
|
||||||
|
loop(15){
|
||||||
|
//LoadEx(bossBoom, "script/game/resourceLib/bigBoom.ogg", 30 * SFXVol);
|
||||||
|
ObjSound_Play(bossBoom);
|
||||||
|
NotifyEvent(GetCommonDataPtr(SYSTEMID_PTR, 0), EV_EXPLODE, [x+rand(-90, 90), y+rand(-125, 125)]);
|
||||||
|
wait(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjMove_SetDestAtFrame(enmID, x, STG_HEIGHT+256, 60, LERP_ACCELERATE);
|
||||||
|
|
||||||
|
float ang = ObjRender_GetAngleZ(enmID);
|
||||||
|
|
||||||
|
ascent(i in 0..60){
|
||||||
|
ObjRender_SetAngleZ(enmID, Interpolate_Accelerate(ang, ang+180, i/60));
|
||||||
|
yield;
|
||||||
|
}
|
||||||
|
|
||||||
|
explosionEnd = true;
|
||||||
|
ObjSound_Play(bossBoom);
|
||||||
|
Obj_Delete(enmID);
|
||||||
|
|
||||||
|
return;
|
||||||
|
//_ScorePopup(float enmX, float enmY, int pointNum, int pivNum);
|
||||||
|
|
||||||
|
// NotifyEvent is faster than NotifyEventAll, considering how the item event will be called many times.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
task EndBonus(){
|
task EndBonus(){
|
||||||
|
|
||||||
while(ObjEnemy_GetInfo(bossObj, INFO_LIFE) > 0){
|
while(ObjEnemy_GetInfo(bossObj, INFO_LIFE) > 0){
|
||||||
|
@ -445,7 +553,9 @@ task testTask(){
|
||||||
|
|
||||||
while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > 20){
|
while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > 20){
|
||||||
|
|
||||||
Wave5();
|
Wave8();
|
||||||
|
Wave9();
|
||||||
|
Wave10();
|
||||||
|
|
||||||
SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+1, 1, RANK_MAX));
|
SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+1, 1, RANK_MAX));
|
||||||
SetCommonData("Ground Loops Cleared", GetCommonData("Ground Loops Cleared", 0)+1);
|
SetCommonData("Ground Loops Cleared", GetCommonData("Ground Loops Cleared", 0)+1);
|
||||||
|
@ -480,6 +590,110 @@ task bossFight(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _MidbossFight(){
|
||||||
|
|
||||||
|
while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMERF) > MIDBOSS_LENGTH*60){
|
||||||
|
|
||||||
|
yield;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stacked rings (2 to 3)
|
||||||
|
// Every 2 ring waves, fire an aimed bullet ring (large fireballs)
|
||||||
|
|
||||||
|
int ringNum = FUNC_LERP_LINEAR(2, 4, rank/RANK_MAX);
|
||||||
|
int ringDense = FUNC_LERP_LINEAR(16, 21, rank/RANK_MAX);
|
||||||
|
int ringMaxSpd = FUNC_LERP_LINEAR(9, 11, rank/RANK_MAX);
|
||||||
|
int aimedRingStopTime = FUNC_LERP_LINEAR(45, 30, rank/RANK_MAX);
|
||||||
|
int aimedRingSpd = FUNC_LERP_LINEAR(11, 13, rank/RANK_MAX);
|
||||||
|
int ringDel = FUNC_LERP_LINEAR(70, 45, rank/RANK_MAX);
|
||||||
|
|
||||||
|
int waveNum = 0;
|
||||||
|
int timer = 20*60; // Boss auto-dies if not killed within 20 seconds.
|
||||||
|
|
||||||
|
int midbossObj =
|
||||||
|
|
||||||
|
_CreateEnemy(
|
||||||
|
STG_WIDTH+128, STG_HEIGHT/2, STG_WIDTH-128, STG_HEIGHT/2, 30,
|
||||||
|
1, 1,
|
||||||
|
MIDBOSS_HP, 64, 0,
|
||||||
|
texEnm,
|
||||||
|
192, 176*4, 96*4, 240*4);
|
||||||
|
|
||||||
|
_MagicCircle(midbossObj);
|
||||||
|
|
||||||
|
wait(60);
|
||||||
|
|
||||||
|
ObjEnemy_SetAutoDelete(midbossObj, false);
|
||||||
|
_FadeInvincibility(midbossObj, 90, 90, 0.5);
|
||||||
|
|
||||||
|
PhaseBonusCalculation(midbossObj, 0, "[font oc=(98, 0, 164) wg=800]Frozen Yogurt Toss");
|
||||||
|
|
||||||
|
async{
|
||||||
|
|
||||||
|
while(ObjEnemy_GetInfo(midbossObj, INFO_LIFE) > 0){
|
||||||
|
|
||||||
|
float baseAng = GetAngleToPlayer(midbossObj);
|
||||||
|
|
||||||
|
ascent(i in 0..ringNum){
|
||||||
|
|
||||||
|
float ang = baseAng + 24 * i;
|
||||||
|
|
||||||
|
Shoot2;
|
||||||
|
|
||||||
|
ascent(k in 0..ringDense){
|
||||||
|
int bullet = CreateShotA1(ObjMove_GetX(midbossObj), ObjMove_GetY(midbossObj), ringMaxSpd * (1-i/(ringNum*2)), ang + k * 360/ringDense, KEV_BALL_AQUA, 10);
|
||||||
|
_Delay(bullet, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (waveNum % 2 <= 0){
|
||||||
|
|
||||||
|
ascent(k in 0..ringDense*1.5){
|
||||||
|
int bullet = CreateShotA2(ObjMove_GetX(midbossObj), ObjMove_GetY(midbossObj), aimedRingSpd*2, k * 360/(ringDense*1.5), -aimedRingSpd*2/20, 0, 0, KEV_FIRELARGE_AQUA, 10);
|
||||||
|
ObjMove_AddPatternA4(bullet, ringDel, NO_CHANGE, 0, aimedRingSpd/30, aimedRingSpd, 0, NO_CHANGE, GetPlayerObjectID());
|
||||||
|
_Delay(bullet, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
waveNum++;
|
||||||
|
|
||||||
|
wait(ringDel-30);
|
||||||
|
|
||||||
|
ObjMove_SetDestAtFrame(midbossObj, STG_WIDTH*3/4 + rand(-64, 64), playerY, 30, LERP_DECELERATE);
|
||||||
|
|
||||||
|
wait(30);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
DeleteShotAll(TYPE_ALL, TYPE_ITEM);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async{
|
||||||
|
while(timer > 0){
|
||||||
|
timer--;
|
||||||
|
yield;
|
||||||
|
}
|
||||||
|
ObjEnemy_SetLife(midbossObj, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
float x = 0, y = 0;
|
||||||
|
|
||||||
|
while(ObjEnemy_GetInfo(midbossObj, INFO_LIFE) > 0 && !Obj_IsDeleted(midbossObj)){
|
||||||
|
x = ObjMove_GetX(midbossObj);
|
||||||
|
y = ObjMove_GetY(midbossObj);
|
||||||
|
yield;
|
||||||
|
}
|
||||||
|
|
||||||
|
_MidbossExplosion(midbossObj, x, y);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function <void> BossIntro(){
|
function <void> BossIntro(){
|
||||||
|
|
||||||
bool bossCurrentlyIntro = true;
|
bool bossCurrentlyIntro = true;
|
||||||
|
@ -518,15 +732,16 @@ function <void> BossPhase1(){
|
||||||
|
|
||||||
_FadeInvincibility(bossObj, 90, 90, 0.5);
|
_FadeInvincibility(bossObj, 90, 90, 0.5);
|
||||||
|
|
||||||
int dense = FUNC_LERP_LINEAR(12, 15, rank/RANK_MAX);
|
int dense = FUNC_LERP_LINEAR(18, 23, rank/RANK_MAX);
|
||||||
int del1 = FUNC_LERP_LINEAR(5, 3, rank/RANK_MAX);
|
int del1 = FUNC_LERP_LINEAR(5, 3, rank/RANK_MAX);
|
||||||
int del2 = FUNC_LERP_LINEAR(80, 60, rank/RANK_MAX);
|
int del2 = FUNC_LERP_LINEAR(60, 45, rank/RANK_MAX);
|
||||||
int ringNum = FUNC_LERP_LINEAR(6, 9, rank/RANK_MAX);
|
int ringNum = FUNC_LERP_LINEAR(6, 10, rank/RANK_MAX);
|
||||||
int accelTime = FUNC_LERP_LINEAR(30, 25, rank/RANK_MAX);
|
int accelTime = FUNC_LERP_LINEAR(30, 25, rank/RANK_MAX);
|
||||||
float spd = FUNC_LERP_ACCEL(10, 13, rank/RANK_MAX);
|
float spd = FUNC_LERP_ACCEL(10, 13, rank/RANK_MAX);
|
||||||
|
float range = FUNC_LERP_LINEAR(60, 100, rank/RANK_MAX);
|
||||||
float angStart = rand(0, 360);
|
float angStart = rand(0, 360);
|
||||||
|
|
||||||
PhaseBonusCalculation(PHASE1_LIMIT, "[font oc=(98, 0, 164) wg=800]Withering Flower");
|
PhaseBonusCalculation(bossObj, PHASE1_LIMIT, "[font oc=(98, 0, 164) wg=800]Withering Flower");
|
||||||
|
|
||||||
async{
|
async{
|
||||||
|
|
||||||
|
@ -537,7 +752,7 @@ function <void> BossPhase1(){
|
||||||
ascent(i in 0..ringNum){
|
ascent(i in 0..ringNum){
|
||||||
|
|
||||||
float ang = baseAng + 180/ringNum * i;
|
float ang = baseAng + 180/ringNum * i;
|
||||||
float[] ringPos = [bossX + sin(ang) * 60, bossY + cos(ang) * 60];
|
float[] ringPos = [bossX + sin(ang) * range, bossY + cos(ang) * range];
|
||||||
|
|
||||||
Shoot2;
|
Shoot2;
|
||||||
|
|
||||||
|
@ -578,24 +793,26 @@ function <void> BossPhase1(){
|
||||||
function <void> BossPhase2(){
|
function <void> BossPhase2(){
|
||||||
|
|
||||||
int fanDense = FUNC_LERP_LINEAR(3, 6, rank/RANK_MAX);
|
int fanDense = FUNC_LERP_LINEAR(3, 6, rank/RANK_MAX);
|
||||||
int fanStack = FUNC_LERP_LINEAR(2, 4, rank/RANK_MAX);
|
int fanStack = FUNC_LERP_LINEAR(1, 3, rank/RANK_MAX);
|
||||||
int fanRange = FUNC_LERP_LINEAR(4, 7, rank/RANK_MAX);
|
int fanRange = FUNC_LERP_LINEAR(3, 5, rank/RANK_MAX);
|
||||||
int del = FUNC_LERP_LINEAR(45, 60, rank/RANK_MAX);
|
int del = FUNC_LERP_LINEAR(50, 65, rank/RANK_MAX);
|
||||||
float spd = FUNC_LERP_ACCEL(8, 11, rank/RANK_MAX);
|
float spd = FUNC_LERP_ACCEL(8, 11, rank/RANK_MAX);
|
||||||
float moveSpd = FUNC_LERP_ACCEL(3, 6, rank/RANK_MAX);
|
float moveSpd = FUNC_LERP_ACCEL(1.5, 3, rank/RANK_MAX);
|
||||||
|
|
||||||
float ang = 180;
|
float ang = 180;
|
||||||
|
|
||||||
ObjMove_SetDestAtFrame(bossObj, STG_WIDTH * 5/6, STG_HEIGHT/2, 60, LERP_DECELERATE);
|
ObjMove_SetDestAtFrame(bossObj, STG_WIDTH * 5/6, STG_HEIGHT/2, 45, LERP_DECELERATE);
|
||||||
|
|
||||||
_FadeInvincibility(bossObj, 90, 90, 0.5);
|
_FadeInvincibility(bossObj, 90, 90, 0.5);
|
||||||
|
|
||||||
PhaseBonusCalculation(PHASE2_LIMIT, "[font oc=(98, 0, 164) wg=800]Travelers Clad in White");
|
PhaseBonusCalculation(bossObj, PHASE2_LIMIT, "[font oc=(98, 0, 164) wg=800]Travelers Clad in White");
|
||||||
|
|
||||||
async{
|
async{
|
||||||
|
|
||||||
|
wait(45);
|
||||||
|
|
||||||
while(ObjEnemy_GetInfo(bossObj, INFO_LIFE) > PHASE2_LIMIT){
|
while(ObjEnemy_GetInfo(bossObj, INFO_LIFE) > PHASE2_LIMIT){
|
||||||
ObjMove_SetY(bossObj, STG_HEIGHT/2 + STG_HEIGHT/5 * sin(ang));
|
ObjMove_SetY(bossObj, STG_HEIGHT/2 + STG_HEIGHT/3 * sin(ang));
|
||||||
ang += moveSpd;
|
ang += moveSpd;
|
||||||
yield;
|
yield;
|
||||||
}
|
}
|
||||||
|
@ -604,6 +821,7 @@ function <void> BossPhase2(){
|
||||||
DeleteShotAll(TYPE_ALL, TYPE_ITEM);
|
DeleteShotAll(TYPE_ALL, TYPE_ITEM);
|
||||||
|
|
||||||
_BossExplosion();
|
_BossExplosion();
|
||||||
|
CollectAllItems();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -790,11 +1008,11 @@ function <void> BossPhase3(){
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
task PhaseBonusCalculation(int HPthreshold, string spellName){
|
task PhaseBonusCalculation(int enm, int HPthreshold, string spellName){
|
||||||
|
|
||||||
int curRank = rank;
|
int curRank = rank;
|
||||||
int scoreBase = 1000000 * curRank;
|
int scoreBase = 1000000 * curRank;
|
||||||
int scoreBonus = GetAreaCommonData("PIV", "currentvalue", 1000)*100;
|
int scoreBonus = GetAreaCommonData("PIV", "currentvalue", 1000)*250;
|
||||||
int i = 0; // 20 seconds
|
int i = 0; // 20 seconds
|
||||||
|
|
||||||
function _CreateBonusText(float x, y, fontSize, int colorBorder, string text){
|
function _CreateBonusText(float x, y, fontSize, int colorBorder, string text){
|
||||||
|
@ -817,14 +1035,14 @@ task PhaseBonusCalculation(int HPthreshold, string spellName){
|
||||||
|
|
||||||
let scoreText = _CreateBonusText(STG_WIDTH-12, STG_HEIGHT/9+36, 24, 0x000000, "");
|
let scoreText = _CreateBonusText(STG_WIDTH-12, STG_HEIGHT/9+36, 24, 0x000000, "");
|
||||||
|
|
||||||
while(ObjEnemy_GetInfo(bossObj, INFO_LIFE) > HPthreshold){
|
while(ObjEnemy_GetInfo(enm, INFO_LIFE) > HPthreshold){
|
||||||
|
|
||||||
scoreBase = trunc(Interpolate_Smooth(1000000 * curRank, 100000 * curRank, i/1200)/10)*10;
|
scoreBase = trunc(Interpolate_Smooth(1000000 * curRank, 100000 * curRank, i/1200)/10)*10;
|
||||||
i = min(1200, i+1);
|
i = min(1200, i+1);
|
||||||
|
|
||||||
scoreBonus = scoreBase * GetCommonDataPtr(POINTER_CHAIN, 1);
|
scoreBonus = scoreBase * GetCommonDataPtr(POINTER_CHAIN, 1);
|
||||||
|
|
||||||
ObjText_SetText(scoreText, spellName ~ "[r][font sz=16]BONUS: [font oc=(255, 136, 0)]" ~ IntToString(scoreBonus));
|
ObjText_SetText(scoreText, spellName ~ "[r][font sz=16]BONUS: [font oc=(255, 136, 0)]" ~ DigitToCommaArray(trunc(scoreBonus/10)*10));
|
||||||
|
|
||||||
yield;
|
yield;
|
||||||
|
|
||||||
|
@ -846,7 +1064,6 @@ task PhaseBonusCalculation(int HPthreshold, string spellName){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////// ENEMY HANDLING (NOT BOSS) /////////////
|
///////////// ENEMY HANDLING (NOT BOSS) /////////////
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1380,7 +1597,6 @@ function Wave2(){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function Wave3(){
|
function Wave3(){
|
||||||
|
|
||||||
int num = FUNC_LERP_ACCEL(W3_fairyNumMin, W3_fairyNumMax, rank/RANK_MAX);
|
int num = FUNC_LERP_ACCEL(W3_fairyNumMin, W3_fairyNumMax, rank/RANK_MAX);
|
||||||
|
@ -1531,7 +1747,7 @@ function Wave4(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wait(del*3);
|
wait(del*bulletnum);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1634,7 +1850,7 @@ function WaveGround1(){
|
||||||
task CreateEnemyA(float startX, float startY, float angle){
|
task CreateEnemyA(float startX, float startY, float angle){
|
||||||
|
|
||||||
int enm = _MushroomFairyAlt(
|
int enm = _MushroomFairyAlt(
|
||||||
36, del*3,
|
39, del*3,
|
||||||
startX, startY
|
startX, startY
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1694,7 +1910,7 @@ function WaveGround1(){
|
||||||
CreateEnemyA(STG_WIDTH+128, STG_HEIGHT * 4/5, 180);
|
CreateEnemyA(STG_WIDTH+128, STG_HEIGHT * 4/5, 180);
|
||||||
}
|
}
|
||||||
|
|
||||||
while(length(enmGround) > 1){yield;}
|
while(length(enmFly) > 1){yield;}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1755,6 +1971,259 @@ function <void> WaveGround2(float pos){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Wave8(){
|
||||||
|
|
||||||
|
int num = FUNC_LERP_ACCEL(W4_fairyNumMin, W4_fairyNumMax, rank/RANK_MAX);
|
||||||
|
int del = FUNC_LERP_ACCEL(W4_bulletDelayMax, W4_bulletDelayMin, rank/RANK_MAX);
|
||||||
|
int bulletnum = FUNC_LERP_ACCEL(W4_bulletNumMin, W4_bulletNumMax, rank/RANK_MAX) - 1;
|
||||||
|
int spawndel = FUNC_LERP_ACCEL(W4_spawnDelayMax, W4_spawnDelayMin, rank/RANK_MAX) * 1.1;
|
||||||
|
float spd = FUNC_LERP_ACCEL(W4_bulletSpdMin, W4_bulletSpdMax, rank/RANK_MAX);
|
||||||
|
float movespd = baseMoveSpeedH * (1 + MoveSpeedRankMultiplierL*rank);
|
||||||
|
int stoptime = FUNC_LERP_LINEAR(W4_stopTimeMax, W4_stopTimeMin, rank/RANK_MAX);
|
||||||
|
|
||||||
|
int counter = 1;
|
||||||
|
|
||||||
|
task CreateEnemyA(float startX, float startY, float angle){
|
||||||
|
|
||||||
|
int enm = _MushroomFairy(
|
||||||
|
40, del*3,
|
||||||
|
startX, startY
|
||||||
|
);
|
||||||
|
|
||||||
|
ObjMove_AddPatternA1(enm, 0, movespd, rand(angle-5, angle+5));
|
||||||
|
ObjMove_SetAngularVelocity(enm, [rand(-0.4, -0.25), rand(0.25, 0.4)][rand_int(0, 1)]);
|
||||||
|
|
||||||
|
async{
|
||||||
|
|
||||||
|
while(!Obj_IsDeleted(enm)){
|
||||||
|
|
||||||
|
if(ObjMove_GetY(enm) > STG_HEIGHT+128 || ObjMove_GetY(enm) < -128){
|
||||||
|
Obj_Delete(enm);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
yield;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async{
|
||||||
|
|
||||||
|
while(!Obj_IsDeleted(enm)){
|
||||||
|
|
||||||
|
if(ObjMove_GetY(enm) < STG_HEIGHT && ObjMove_GetY(enm) > 0){
|
||||||
|
|
||||||
|
ascent(i in 0..bulletnum){
|
||||||
|
|
||||||
|
int bullet = CreateShotA1(ObjMove_GetX(enm), ObjMove_GetY(enm), 0, 180, KEV_FIRELARGE_PURPLE, 10);
|
||||||
|
//ObjRender_SetAngleZ(bullet, 180);
|
||||||
|
_Delay(bullet, 10);
|
||||||
|
|
||||||
|
ObjMove_AddPatternA2(bullet, stoptime, NO_CHANGE, NO_CHANGE, spd/stoptime, spd, 0);
|
||||||
|
|
||||||
|
Shoot1;
|
||||||
|
wait(del);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
wait(del*bulletnum);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ascent(i in 0..num){
|
||||||
|
|
||||||
|
CreateEnemyA(rand(STG_WIDTH*6.5/8, STG_WIDTH*7/8), counter >= 1 ? -128 : STG_HEIGHT+128, counter >= 1 ? 90 : 270);
|
||||||
|
|
||||||
|
counter *= -1;
|
||||||
|
|
||||||
|
if(i != num){wait(spawndel);}
|
||||||
|
else{}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
while(length(enmFly) > 1){yield;}
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function Wave9(){
|
||||||
|
|
||||||
|
int num = FUNC_LERP_ACCEL(W9_fairyNumMin, W9_fairyNumMax, rank/RANK_MAX);
|
||||||
|
int del = FUNC_LERP_ACCEL(W9_bulletDelayMax, W9_bulletDelayMin, rank/RANK_MAX);
|
||||||
|
int spawndel = FUNC_LERP_ACCEL(W9_spawnDelayMax, W9_spawnDelayMin, rank/RANK_MAX);
|
||||||
|
|
||||||
|
float spd = FUNC_LERP_ACCEL(W9_bulletSpdMin, W9_bulletSpdMax, rank/RANK_MAX);
|
||||||
|
float movespd = baseMoveSpeedH * (1 + MoveSpeedRankMultiplierVL*rank);
|
||||||
|
|
||||||
|
float[] rangemove = [3, 6];
|
||||||
|
|
||||||
|
int counter = 1;
|
||||||
|
|
||||||
|
task CreateEnemyA(float startX, float startY, float spd){
|
||||||
|
|
||||||
|
float ang = rand(0, 180);
|
||||||
|
float spdMax = rand(rangemove[0], rangemove[1]);
|
||||||
|
|
||||||
|
int enm = _SmallFairy(
|
||||||
|
40, del*3,
|
||||||
|
startX, startY
|
||||||
|
);
|
||||||
|
|
||||||
|
async{
|
||||||
|
|
||||||
|
while(!Obj_IsDeleted(enm)){
|
||||||
|
|
||||||
|
//ObjMove_SetSpeed(enm, )
|
||||||
|
|
||||||
|
ObjMove_AddPatternB1(enm, 0, sin(ang) * spdMax, spd);
|
||||||
|
ang += 3;
|
||||||
|
yield;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async{
|
||||||
|
|
||||||
|
wait(spawndel);
|
||||||
|
|
||||||
|
while(!Obj_IsDeleted(enm)){
|
||||||
|
|
||||||
|
if(ObjMove_GetY(enm) > STG_HEIGHT+128 || ObjMove_GetY(enm) < -128){
|
||||||
|
Obj_Delete(enm);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ObjMove_GetY(enm) < STG_HEIGHT && ObjMove_GetY(enm) > 0){
|
||||||
|
|
||||||
|
if (spd < 0){
|
||||||
|
|
||||||
|
ascent(i in 0..3){
|
||||||
|
int bullet = CreateShotA1(ObjMove_GetX(enm), ObjMove_GetY(enm), spd - i * spd/15, GetAngleToPlayer(enm)+180, KEV_BALL_PURPLE, 10);
|
||||||
|
ObjRender_SetAngleZ(bullet, 180);
|
||||||
|
_Delay(bullet, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
else{
|
||||||
|
|
||||||
|
ascent(i in 0..3){
|
||||||
|
int bullet = CreateShotA1(ObjMove_GetX(enm), ObjMove_GetY(enm), spd - i * spd/15, GetAngleToPlayer(enm), KEV_BALL_PURPLE, 10);
|
||||||
|
_Delay(bullet, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//_Delay(bullet, 5);
|
||||||
|
Shoot1;
|
||||||
|
wait(del);
|
||||||
|
}
|
||||||
|
|
||||||
|
yield;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ascent(i in 0..num){
|
||||||
|
|
||||||
|
CreateEnemyA(rand(STG_WIDTH*6.5/8, STG_WIDTH*6.75/8), counter >= 1 ? -128 : STG_HEIGHT+128, movespd*counter);
|
||||||
|
|
||||||
|
counter *= -1;
|
||||||
|
|
||||||
|
if(i != num){wait(spawndel);}
|
||||||
|
else{}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
while(length(enmFly) > 1){yield;}
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function Wave10(){
|
||||||
|
|
||||||
|
int num = FUNC_LERP_LINEAR(W10_fairyNumMin, W10_fairyNumMax, rank/RANK_MAX);
|
||||||
|
int spawndel = FUNC_LERP_ACCEL(W10_spawnDelayMax, W10_spawnDelayMin, rank/RANK_MAX);
|
||||||
|
int bulletnum = FUNC_LERP_ACCEL(W10_bulletLineNumMin, W10_bulletLineNumMax, rank/RANK_MAX);
|
||||||
|
float spd = FUNC_LERP_ACCEL(W10_bulletSpdMin, W10_bulletSpdMax, rank/RANK_MAX);
|
||||||
|
float movetime = FUNC_LERP_LINEAR(W10_moveTimeMin, W10_moveTimeMax, rank/RANK_MAX);
|
||||||
|
float movespeed = FUNC_LERP_LINEAR(12, 15, rank/RANK_MAX);
|
||||||
|
|
||||||
|
task CreateEnemyA(float startX, float startY, float movespeed){
|
||||||
|
|
||||||
|
int enm = _MushroomFairyAlt(
|
||||||
|
40, 30,
|
||||||
|
startX, startY
|
||||||
|
);
|
||||||
|
|
||||||
|
ObjEnemy_SetDamageRate(enm, 0, 0);
|
||||||
|
ObjMove_AddPatternB2(enm, 0, movespeed, 0, -movespeed/movetime, 0, -movespeed, 0);
|
||||||
|
|
||||||
|
async{
|
||||||
|
|
||||||
|
while(!Obj_IsDeleted(enm)){
|
||||||
|
|
||||||
|
if(ObjMove_GetY(enm) > STG_HEIGHT+128 || ObjMove_GetY(enm) < -128){
|
||||||
|
Obj_Delete(enm);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
yield;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async{
|
||||||
|
|
||||||
|
wait(movetime/2);
|
||||||
|
|
||||||
|
ObjEnemy_SetDamageRate(enm, 100, 100);
|
||||||
|
|
||||||
|
while(!Obj_IsDeleted(enm)){
|
||||||
|
|
||||||
|
ascent(i in 0..bulletnum){
|
||||||
|
int bullet = CreateShotA1(ObjMove_GetX(enm), ObjMove_GetY(enm), spd - i * (spd/(bulletnum*2)), GetAngleToPlayer(enm), KEV_LEAF_AQUA, 5);
|
||||||
|
Shoot1;
|
||||||
|
_Delay(bullet, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
wait(spawndel/2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ascent(k in 0..num){
|
||||||
|
CreateEnemyA(STG_WIDTH + 96, 96 + k * 84, -movespeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
wait(spawndel);
|
||||||
|
|
||||||
|
ascent(k in 0..num){
|
||||||
|
CreateEnemyA(STG_WIDTH + 96, STG_HEIGHT - 96 - k * 84, -movespeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
while(length(enmFly) > 1){yield;}
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
function Wave3(){
|
function Wave3(){
|
||||||
|
@ -2157,5 +2626,21 @@ task _ObjShake(objID, shaketime, intensity){
|
||||||
yield;
|
yield;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task _MagicCircle(int enmID){
|
||||||
|
|
||||||
|
int circle = _Create2DImage(texEnm, [96*4, 112*4, 176*4, 192*4]);
|
||||||
|
Obj_SetRenderPriorityI(circle, 39);
|
||||||
|
ObjRender_SetScaleXYZ(circle, 2);
|
||||||
|
|
||||||
|
while(ObjEnemy_GetInfo(enmID, INFO_LIFE) > 0){
|
||||||
|
|
||||||
|
ObjRender_SetPosition(circle, ObjRender_GetX(enmID), ObjRender_GetY(enmID), 1);
|
||||||
|
ObjRender_SetAngleZ(circle, ObjRender_GetAngleZ(circle)+3);
|
||||||
|
|
||||||
|
yield;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Obj_Delete(circle);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 373 KiB |
After Width: | Height: | Size: 99 KiB |
|
@ -0,0 +1,84 @@
|
||||||
|
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
|
||||||
|
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 7.1-c000 79.b0f8be9, 2021/12/08-19:11:22 ">
|
||||||
|
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<rdf:Description rdf:about=""
|
||||||
|
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
|
||||||
|
xmlns:xmpDM="http://ns.adobe.com/xmp/1.0/DynamicMedia/"
|
||||||
|
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
|
||||||
|
xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
|
||||||
|
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<xmp:CreateDate>2023</xmp:CreateDate>
|
||||||
|
<xmp:MetadataDate>2023-01-30T18:08:26+07:00</xmp:MetadataDate>
|
||||||
|
<xmp:ModifyDate>2023-01-30T18:08:26+07:00</xmp:ModifyDate>
|
||||||
|
<xmpDM:Tracks>
|
||||||
|
<rdf:Bag>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<xmpDM:trackName>CuePoint Markers</xmpDM:trackName>
|
||||||
|
<xmpDM:trackType>Cue</xmpDM:trackType>
|
||||||
|
<xmpDM:frameRate>f48000</xmpDM:frameRate>
|
||||||
|
</rdf:li>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<xmpDM:trackName>CD Track Markers</xmpDM:trackName>
|
||||||
|
<xmpDM:trackType>Track</xmpDM:trackType>
|
||||||
|
<xmpDM:frameRate>f48000</xmpDM:frameRate>
|
||||||
|
</rdf:li>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<xmpDM:trackName>Subclip Markers</xmpDM:trackName>
|
||||||
|
<xmpDM:trackType>InOut</xmpDM:trackType>
|
||||||
|
<xmpDM:frameRate>f48000</xmpDM:frameRate>
|
||||||
|
</rdf:li>
|
||||||
|
</rdf:Bag>
|
||||||
|
</xmpDM:Tracks>
|
||||||
|
<xmpMM:InstanceID>xmp.iid:ee759497-91c4-e549-9cd3-eb5dc35ca7c0</xmpMM:InstanceID>
|
||||||
|
<xmpMM:DocumentID>xmp.did:ee759497-91c4-e549-9cd3-eb5dc35ca7c0</xmpMM:DocumentID>
|
||||||
|
<xmpMM:OriginalDocumentID>xmp.did:ec36adcb-d4b8-a648-9da4-f79adf813889</xmpMM:OriginalDocumentID>
|
||||||
|
<xmpMM:History>
|
||||||
|
<rdf:Seq>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<stEvt:action>saved</stEvt:action>
|
||||||
|
<stEvt:instanceID>xmp.iid:ec36adcb-d4b8-a648-9da4-f79adf813889</stEvt:instanceID>
|
||||||
|
<stEvt:when>2023-01-30T18:08:26+07:00</stEvt:when>
|
||||||
|
<stEvt:softwareAgent>Adobe Audition 23.0 (Windows)</stEvt:softwareAgent>
|
||||||
|
<stEvt:changed>/metadata</stEvt:changed>
|
||||||
|
</rdf:li>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<stEvt:action>saved</stEvt:action>
|
||||||
|
<stEvt:instanceID>xmp.iid:ee759497-91c4-e549-9cd3-eb5dc35ca7c0</stEvt:instanceID>
|
||||||
|
<stEvt:when>2023-01-30T18:08:26+07:00</stEvt:when>
|
||||||
|
<stEvt:softwareAgent>Adobe Audition 23.0 (Windows)</stEvt:softwareAgent>
|
||||||
|
<stEvt:changed>/</stEvt:changed>
|
||||||
|
</rdf:li>
|
||||||
|
</rdf:Seq>
|
||||||
|
</xmpMM:History>
|
||||||
|
<xmpMM:DerivedFrom rdf:parseType="Resource">
|
||||||
|
<stRef:instanceID>xmp.iid:ec36adcb-d4b8-a648-9da4-f79adf813889</stRef:instanceID>
|
||||||
|
<stRef:documentID>xmp.did:ec36adcb-d4b8-a648-9da4-f79adf813889</stRef:documentID>
|
||||||
|
<stRef:originalDocumentID>xmp.did:ec36adcb-d4b8-a648-9da4-f79adf813889</stRef:originalDocumentID>
|
||||||
|
</xmpMM:DerivedFrom>
|
||||||
|
<dc:format>audio/ogg; codec="vorbis"</dc:format>
|
||||||
|
</rdf:Description>
|
||||||
|
</rdf:RDF>
|
||||||
|
</x:xmpmeta>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<?xpacket end="w"?>
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 34 KiB |
|
@ -0,0 +1,84 @@
|
||||||
|
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
|
||||||
|
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 7.1-c000 79.b0f8be9, 2021/12/08-19:11:22 ">
|
||||||
|
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||||
|
<rdf:Description rdf:about=""
|
||||||
|
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
|
||||||
|
xmlns:xmpDM="http://ns.adobe.com/xmp/1.0/DynamicMedia/"
|
||||||
|
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
|
||||||
|
xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
|
||||||
|
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||||
|
<xmp:CreateDate>2023</xmp:CreateDate>
|
||||||
|
<xmp:MetadataDate>2023-01-30T18:08:06+07:00</xmp:MetadataDate>
|
||||||
|
<xmp:ModifyDate>2023-01-30T18:08:06+07:00</xmp:ModifyDate>
|
||||||
|
<xmpDM:Tracks>
|
||||||
|
<rdf:Bag>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<xmpDM:trackName>CuePoint Markers</xmpDM:trackName>
|
||||||
|
<xmpDM:trackType>Cue</xmpDM:trackType>
|
||||||
|
<xmpDM:frameRate>f44100</xmpDM:frameRate>
|
||||||
|
</rdf:li>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<xmpDM:trackName>CD Track Markers</xmpDM:trackName>
|
||||||
|
<xmpDM:trackType>Track</xmpDM:trackType>
|
||||||
|
<xmpDM:frameRate>f44100</xmpDM:frameRate>
|
||||||
|
</rdf:li>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<xmpDM:trackName>Subclip Markers</xmpDM:trackName>
|
||||||
|
<xmpDM:trackType>InOut</xmpDM:trackType>
|
||||||
|
<xmpDM:frameRate>f44100</xmpDM:frameRate>
|
||||||
|
</rdf:li>
|
||||||
|
</rdf:Bag>
|
||||||
|
</xmpDM:Tracks>
|
||||||
|
<xmpMM:InstanceID>xmp.iid:a92e0057-5a6e-4d4d-be15-5837f8b9ea9d</xmpMM:InstanceID>
|
||||||
|
<xmpMM:DocumentID>xmp.did:a92e0057-5a6e-4d4d-be15-5837f8b9ea9d</xmpMM:DocumentID>
|
||||||
|
<xmpMM:OriginalDocumentID>xmp.did:bc8b308b-79c6-374a-a9d0-2248d15c4871</xmpMM:OriginalDocumentID>
|
||||||
|
<xmpMM:History>
|
||||||
|
<rdf:Seq>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<stEvt:action>saved</stEvt:action>
|
||||||
|
<stEvt:instanceID>xmp.iid:bc8b308b-79c6-374a-a9d0-2248d15c4871</stEvt:instanceID>
|
||||||
|
<stEvt:when>2023-01-30T18:08:06+07:00</stEvt:when>
|
||||||
|
<stEvt:softwareAgent>Adobe Audition 23.0 (Windows)</stEvt:softwareAgent>
|
||||||
|
<stEvt:changed>/metadata</stEvt:changed>
|
||||||
|
</rdf:li>
|
||||||
|
<rdf:li rdf:parseType="Resource">
|
||||||
|
<stEvt:action>saved</stEvt:action>
|
||||||
|
<stEvt:instanceID>xmp.iid:a92e0057-5a6e-4d4d-be15-5837f8b9ea9d</stEvt:instanceID>
|
||||||
|
<stEvt:when>2023-01-30T18:08:06+07:00</stEvt:when>
|
||||||
|
<stEvt:softwareAgent>Adobe Audition 23.0 (Windows)</stEvt:softwareAgent>
|
||||||
|
<stEvt:changed>/</stEvt:changed>
|
||||||
|
</rdf:li>
|
||||||
|
</rdf:Seq>
|
||||||
|
</xmpMM:History>
|
||||||
|
<xmpMM:DerivedFrom rdf:parseType="Resource">
|
||||||
|
<stRef:instanceID>xmp.iid:bc8b308b-79c6-374a-a9d0-2248d15c4871</stRef:instanceID>
|
||||||
|
<stRef:documentID>xmp.did:bc8b308b-79c6-374a-a9d0-2248d15c4871</stRef:documentID>
|
||||||
|
<stRef:originalDocumentID>xmp.did:bc8b308b-79c6-374a-a9d0-2248d15c4871</stRef:originalDocumentID>
|
||||||
|
</xmpMM:DerivedFrom>
|
||||||
|
<dc:format>audio/ogg; codec="vorbis"</dc:format>
|
||||||
|
</rdf:Description>
|
||||||
|
</rdf:RDF>
|
||||||
|
</x:xmpmeta>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<?xpacket end="w"?>
|
|
@ -206,7 +206,7 @@ task TExtendSystem(){
|
||||||
// NARUMISTG
|
// NARUMISTG
|
||||||
|
|
||||||
req = [
|
req = [
|
||||||
10, 20, 40, 80, 120
|
10, 30, 60, 120, 250
|
||||||
];
|
];
|
||||||
|
|
||||||
loop{
|
loop{
|
||||||
|
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 64 KiB |
|
@ -3,7 +3,7 @@
|
||||||
int PetalEffect = ObjParticleList_Create(OBJ_PARTICLE_LIST_2D);
|
int PetalEffect = ObjParticleList_Create(OBJ_PARTICLE_LIST_2D);
|
||||||
|
|
||||||
task InitEffect(){
|
task InitEffect(){
|
||||||
_EffectListPreRender(PetalEffect, imgEffect, [0, 0, 256, 256]);
|
_EffectListPreRender(PetalEffect, imgEffect, [240, 0, 240+192, 192]);
|
||||||
}
|
}
|
||||||
|
|
||||||
let imgEffect = dirCurrent ~ "./img/Kevin_Effect.png";
|
let imgEffect = dirCurrent ~ "./img/Kevin_Effect.png";
|
||||||
|
@ -88,7 +88,7 @@ task _ExplosionEffect(float enmX, float enmY, int targetList){
|
||||||
let z_add = prand(-5, 5);
|
let z_add = prand(-5, 5);
|
||||||
|
|
||||||
ascent(i in 0..effectLength){
|
ascent(i in 0..effectLength){
|
||||||
_PetalMovement(Interpolate_Decelerate(1.5, 0.5, i/effectLength), Interpolate_Decelerate(255, 0, i/effectLength));
|
_PetalMovement(Interpolate_Decelerate(2, 1, i/effectLength), Interpolate_Decelerate(255, 0, i/effectLength));
|
||||||
yield;
|
yield;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
//Package Script Path
|
//Package Script Path
|
||||||
// Upon starting the game, the specified package script will be run.
|
// Upon starting the game, the specified package script will be run.
|
||||||
package.script.main = script/GayGunner_Package.dnh
|
//package.script.main = script/GayGunner_Package.dnh
|
||||||
|
|
||||||
//--------------------------------------------------------------
|
//--------------------------------------------------------------
|
||||||
//Window Title
|
//Window Title
|
||||||
|
|