// Constants int difficulty = 0; int STAGE_LENGTH = 90; int BOSS_LENGTH = 30; int HP_MAX = 4500; int PHASE1_LIMIT = 2250; int PHASE2_LIMIT = 0; int PHASE3_LIMIT = 0; // Rank min/max local{ alternative(GetCommonData("Difficulty", "Standard")) case("Novice"){difficulty = 0;} case("Standard"){difficulty = 1;} case("Extra"){difficulty = 2;} others{difficulty = 0;} } float RANK_MIN = [1, 1, 9][difficulty]; float RANK_MAX = 9; // Since Novice locks Rank to a lower level, this distinction is necessary float RANK_MAX_TRUE = [6, 9, 9][difficulty]; // Can be changed SetCommonData("MinRank", RANK_MIN); SetCommonData("MaxRank", RANK_MAX_TRUE); // Enemy parameters int smallEnemyHitbox = 32; int medEnemyHitbox = 64; int largeEnemyHitbox = 100; int spiritHitbox = 48; float smallEnemyHP = 45; float mediumEnemyHP = 80; float largeEnemyHP = 120; float largeEnemyAltHP = 150; float popcornHP = 25; float smallEnemyScale = 1; float largeEnemyScale = 1; float popcornScale = 1; // Enemy rects int[] smallfairyRect = [0, 128, 128, 256]; int[] spiritRect = [0, 0, 128, 128]; int[] mushroomfairyRect = [0, 256, 192, 448]; int[] yukionnaRect = [0, 448, 192, 640]; int[] bossRect = [192, 448, 384, 704]; // Universal // MOVEMENT SPEED RELATED // Very low speed (ground, large enemies) float baseMoveSpeedVL = 5.5; // Low speed (ground, large enemies) float baseMoveSpeed1L= 7; // Medium speed float baseMoveSpeedM = 8; // High speed float baseMoveSpeedH = 10; // Very high speed float baseMoveSpeedVH = 11.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.015; float MoveSpeedRankMultiplierL = 0.025; float MoveSpeedRankMultiplierH = 0.035; float MoveSpeedRankMultiplierVH = 0.05; // ITEM RELATED float smallFlyingEnm_itemPointMin = 8; float smallFlyingEnm_itemPointMax = 12; float medFlyingEnm_itemPointMin = 12; float medFlyingEnm_itemPointMax = 18; float largeFlyingEnm_itemPointMin = 20; float largeFlyingEnm_itemPointMax = 30; float verylargeFlyingEnm_itemPointMin = 35; float verylargeFlyingEnm_itemPointMax = 45; // 1 ammo item = 2 ammo float smallGroundEnm_itemAmmoMin = 2; float smallGroundEnm_itemAmmoMax = 4; float medGroundEnm_itemAmmoMin = 4; float medGroundEnm_itemAmmoMax = 6; float largeGroundEnm_itemAmmoMin = 12; float largeGroundEnm_itemAmmoMax = 18; float verylargeGroundEnm_itemAmmoMin = 40; float verylargeGroundEnm_itemAmmoMax = 60; float smallEnm_itemChainMin = 6; float smallEnm_itemChainMax = 12; float mediumEnm_itemChainMin = 9; float mediumEnm_itemChainMax = 16; float largeEnm_itemChainMin = 12; float largeEnm_itemChainMax = 20; float itemMultiplier = 0.03; // For point items only // INVINCIBILITY TIME // Short, medium, long int[] invinTimeArr = [20, 40, 60]; int[] invinTimeDecrease = [1, 2, 3]; // Per rank increase // Wave 1 // Graphic: fairy // Uses high speed, fires aimed bullets int W1_spawnDelayMin = 4; int W1_spawnDelayMax = 8; int W1_fairyNumMin = 5; int W1_fairyNumMax = 8; int W1_decelTimeMin = 20; int W1_decelTimeMax = 30; int W1_bulletDelayMin = 40; int W1_bulletDelayMax = 50; float W1_bulletSpdMin = 9; float W1_bulletSpdMax = 12; // Wave 2 // Graphic: spirit // Sin-wave movement, fires aimed small-fire fans int W2_fairyNumMin = 3; int W2_fairyNumMax = 5; int W2_bulletDelayMin = 65; int W2_bulletDelayMax = 90; float W2_bulletSpdMin = 10; float W2_bulletSpdMax = 13; float W2_rangeMin = 2; float W2_rangeMax = 3.25; int W2_bulletfanNumMin = 3; int W2_bulletfanNumMax = 5; int W2_spawnDelayMin = 10; int W2_spawnDelayMax = 15; // Wave 3: Mushroom fairy, fires large fireballs int W3_spawnDelayMin = 15; int W3_spawnDelayMax = 30; int W3_fairyNumMin = 3; int W3_fairyNumMax = 9; float W3_rangeMin = 1; float W3_rangeMax = 2.5; int W3_bulletfanNumMin = 1; int W3_bulletfanNumMax = 1; int W3_bulletDelayMin = 15; int W3_bulletDelayMax = 20; float W3_bulletSpdMin = 11; float W3_bulletSpdMax = 13; // Wave 4: Mushroom fairy, fires small fireball lines int W4_spawnDelayMin = 18; int W4_spawnDelayMax = 35; int W4_fairyNumMin = 2; int W4_fairyNumMax = 5; int W4_bulletNumMin = 3; int W4_bulletNumMax = 5; int W4_bulletDelayMin = 2; int W4_bulletDelayMax = 4; int W4_stopTimeMin = 20; int W4_stopTimeMax = 30; float W4_bulletSpdMin = 10; float W4_bulletSpdMax = 12.25; // Wave 5: Clumped small fairy lines come from both sides to attack you. int W5_spawnDelayMin = 20; int W5_spawnDelayMax = 40; int W5_fairyNumMin = 3; int W5_fairyNumMax = 6; // Angles int W5_moveTimeMin = 40; int W5_moveTimeMax = 50; float W5_bulletSpdMin = 11; float W5_bulletSpdMax = 13; // Wave 6: Alt mushroom fairies (2 OR 3) spawns sparse rings (counts as ground) int WG1_ringDenseMin = 10; int WG1_ringDenseMax = 14; float WG1_bulletSpdMin = 8; float WG1_bulletSpdMax = 11; int WG1_bulletDelayMin = 30; int WG1_bulletDelayMax = 45; // Wave 7: Yukionna with spiral (counts as ground) int WG2_spiralDenseMin = 6; int WG2_spiralDenseMax = 9; int WG2_spiralNumMin = 3; int WG2_spiralNumMax = 5; float WG2_spiralSpdMin = 7.5; float WG2_spiralSpdMax = 9.5; int WG2_spiralDelayMax = 40; int WG2_spiralDelayMin = 25; /* // Wave Ground 1 int[] sign1Rect = [1024, 512, 1280, 768]; int[] platformRect = [1536, 256, 2304, 768]; int WG1_invinTimeMin = 15; int WG1_invinTimeMax = 25; // Wave Ground 2 int[] cannonRect = [2048, 768, 2304, 1024]; int[] bushRect = [512, 1024, 1280, 1536]; int WG2_bulletNumMin = 3; int WG2_bulletNumMax = 5; float WG2_angRangeMin = 1.4; float WG2_angRangeMax = 2; float WG2_bulletSpdMin = 9; float WG2_bulletSpdMax = 11; int WG2_bulletDelayMin = 30; int WG2_bulletDelayMax = 40; int WG2_invinTimeMin = 45; int WG2_invinTimeMax = 60; // Wave Ground 1A // Graphic: fairy // Uses high speed int WG1A_bulletNumMin = 1; int WG1A_bulletNumMax = 3; int WG1A_bulletDelayMin = 45; int WG1A_bulletDelayMax = 60; float WG1A_bulletSpdMin = 12; float WG1A_bulletSpdMax = 15; int[] sign2Rect = [1280, 512, 1536, 768]; int WG1A_invinTimeMin = 25; int WG1A_invinTimeMax = 40; // Wave Ground 3 (Rybb) -> orange line spirals int WG3_spiralDenseMin = 5; int WG3_spiralDenseMax = 8; int WG3_spiralNumMin = 3; int WG3_spiralNumMax = 6; float WG3_spiralSpdMin = 7.5; float WG3_spiralSpdMax = 9.5; int WG3_spiralDelayMax = 40; int WG3_spiralDelayMin = 30; int[] rybbRect = [1280, 1024, 1792, 1536]; // Wave Ground 4 (ITS THE FUCKING BUSSY FAIRIES) // Number of fairies affected by RANK and KILL SPEED int[] bush2Rect = [512, 1536, 1280, 2048]; int[] bush2ARect = [256, 1536, 512, 1792]; int WG4_enmNumMin = 4; int WG4_enmNumMax = 6; int WG4_bulletDelayMin = 45; int WG4_bulletDelayMax = 60; float WG4_bulletSpdMin = 11; float WG4_bulletSpdMax = 14; int WG4_invinTimeMin = 100; int WG4_invinTimeMax = 120; // Wave Ground 5 (Decker) -> Line bullets. int WG5_bulletNumMin = 4; int WG5_bulletNumMax = 6; int WG5_bulletDelayMin = 12; int WG5_bulletDelayMax = 15; float WG5_bulletSpdMin = 7; float WG5_bulletSpdMax = 9; int[] deckerRect = [1792, 1024, 1792+512, 1536]; // Wave Ground 6 -> Your ass is our base */ task UpdateDrops(){ // According to rank while(true){ smallFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(12, 18, rank/RANK_MAX); medFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(16, 24, rank/RANK_MAX); largeFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(30, 40, rank/RANK_MAX); verylargeFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(45, 60, rank/RANK_MAX); smallGroundEnm_itemAmmoMax = FUNC_LERP_LINEAR(4, 6, rank/RANK_MAX); medGroundEnm_itemAmmoMax = FUNC_LERP_LINEAR(6, 8, rank/RANK_MAX); largeGroundEnm_itemAmmoMax = FUNC_LERP_LINEAR(18, 25, rank/RANK_MAX); verylargeGroundEnm_itemAmmoMax = FUNC_LERP_LINEAR(60, 75, rank/RANK_MAX); smallEnm_itemChainMax = FUNC_LERP_LINEAR(12, 16, rank/RANK_MAX); mediumEnm_itemChainMax = FUNC_LERP_LINEAR(16, 20, rank/RANK_MAX); largeEnm_itemChainMax = FUNC_LERP_LINEAR(20, 24, rank/RANK_MAX); wait(5); } } /* Reference: task SpawnSpiral(float angStart, int spinDir){ async{ ascent(i in -1..linespiralNum[diff]){ if(ObjEnemy_GetInfo(bossObj, INFO_LIFE) <= 0){break;} int shot = CreateFan(bossObj, 1, KEV_LEAF_ORANGE, linespiralLineCount[diff], angStart+i*spinDir*linespiralAngOffset[diff], 0, linespiralSpd2[diff], linespiralSpd1[diff], 0.6, 0, 0, PATTERN_FAN, false ); int shot2 = CreateFan(bossObj, 1, KEV_LEAF_ORANGE, linespiralLineCount[diff], angStart+(180+angStart)-i*spinDir*linespiralAngOffset[diff], 0, linespiralSpd2[diff], linespiralSpd1[diff], 0.6, 0, 0, PATTERN_FAN, false ); if(ObjEnemy_GetInfo(bossObj, INFO_LIFE) <= 0){Obj_Delete(shot); Obj_Delete(shot2);} else{Shoot1;} wait([4, 4, 3, 3][diff]); } } } */