diff --git a/script/GayGunner_Package.dnh b/script/GayGunner_Package.dnh index 89002d6..5a203e5 100644 Binary files a/script/GayGunner_Package.dnh and b/script/GayGunner_Package.dnh differ diff --git a/script/Jam10/Game_Plural.dnh b/script/Jam10/Game_Plural.dnh index 7694a18..3fe9fb2 100644 --- a/script/Jam10/Game_Plural.dnh +++ b/script/Jam10/Game_Plural.dnh @@ -117,13 +117,13 @@ string DATA_DIFFICULTY = ""; InitiateData(); - ObjSound_Load(objBGM, "script/Jam10/resourceLib/StageTheme.mp3"); + ObjSound_Load(objBGM, "script/Jam10/resourceLib/StageTheme.ogg"); ObjSound_SetSoundDivision(objBGM, SOUND_BGM); ObjSound_SetResumeEnable(objBGM, true); ObjSound_SetLoopEnable(objBGM, true); 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_SetResumeEnable(objBGMBoss, true); ObjSound_SetLoopEnable(objBGMBoss, false); diff --git a/script/Jam10/GunnerParade_ConstLib.dnh b/script/Jam10/GunnerParade_ConstLib.dnh index 3c17df7..2cbf3f7 100644 --- a/script/Jam10/GunnerParade_ConstLib.dnh +++ b/script/Jam10/GunnerParade_ConstLib.dnh @@ -2,7 +2,8 @@ int difficulty = 0; -int STAGE_LENGTH = 90; +int STAGE_LENGTH = 120; +int MIDBOSS_LENGTH = 75; int BOSS_LENGTH = 30; int HP_MAX = 4500; @@ -10,6 +11,8 @@ int PHASE1_LIMIT = 2250; int PHASE2_LIMIT = 0; int PHASE3_LIMIT = 0; +int MIDBOSS_HP = 1800; + // Rank min/max local{ @@ -24,9 +27,9 @@ local{ } -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 +float RANK_MIN = [1, 1, 12][difficulty]; +float RANK_MAX = 12; // Since Novice locks Rank to a lower level, this distinction is necessary +float RANK_MAX_TRUE = [6, 12, 12][difficulty]; // Can be changed SetCommonData("MinRank", RANK_MIN); SetCommonData("MaxRank", RANK_MAX_TRUE); @@ -70,25 +73,23 @@ int[] bossRect = [192, 448, 384, 704]; float baseMoveSpeedM = 8; // High speed - float baseMoveSpeedH = 10; + float baseMoveSpeedH = 9; // 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 baseMoveSpeedVH = 10.5; - float MoveSpeedRankMultiplierVL = 0.015; - float MoveSpeedRankMultiplierL = 0.025; - float MoveSpeedRankMultiplierH = 0.035; - float MoveSpeedRankMultiplierVH = 0.05; + float MoveSpeedRankMultiplierVL = 0.01; + float MoveSpeedRankMultiplierL = 0.015; + float MoveSpeedRankMultiplierH = 0.02; + float MoveSpeedRankMultiplierVH = 0.03; // ITEM RELATED float smallFlyingEnm_itemPointMin = 8; float smallFlyingEnm_itemPointMax = 12; - float medFlyingEnm_itemPointMin = 12; - float medFlyingEnm_itemPointMax = 18; + float medFlyingEnm_itemPointMin = 14; + float medFlyingEnm_itemPointMax = 21; float largeFlyingEnm_itemPointMin = 20; float largeFlyingEnm_itemPointMax = 30; @@ -177,8 +178,8 @@ int[] bossRect = [192, 448, 384, 704]; int W3_spawnDelayMin = 15; int W3_spawnDelayMax = 30; - int W3_fairyNumMin = 3; - int W3_fairyNumMax = 9; + int W3_fairyNumMin = 2; + int W3_fairyNumMax = 6; float W3_rangeMin = 1; float W3_rangeMax = 2.5; @@ -194,8 +195,8 @@ int[] bossRect = [192, 448, 384, 704]; // Wave 4: Mushroom fairy, fires small fireball lines - int W4_spawnDelayMin = 18; - int W4_spawnDelayMax = 35; + int W4_spawnDelayMin = 15; + int W4_spawnDelayMax = 30; int W4_fairyNumMin = 2; int W4_fairyNumMax = 5; @@ -209,8 +210,8 @@ int[] bossRect = [192, 448, 384, 704]; int W4_stopTimeMin = 20; int W4_stopTimeMax = 30; - float W4_bulletSpdMin = 10; - float W4_bulletSpdMax = 12.25; + float W4_bulletSpdMin = 8; + float W4_bulletSpdMax = 10; // 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_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_ringDenseMax = 14; @@ -239,7 +240,7 @@ int[] bossRect = [192, 448, 384, 704]; int WG1_bulletDelayMin = 30; 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_spiralDenseMax = 9; @@ -253,6 +254,40 @@ int[] bossRect = [192, 448, 384, 704]; int WG2_spiralDelayMax = 40; 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 @@ -359,7 +394,7 @@ task UpdateDrops(){ while(true){ 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); verylargeFlyingEnm_itemPointMax = FUNC_LERP_LINEAR(45, 60, rank/RANK_MAX); diff --git a/script/Jam10/GunnerParade_EnmLib.dnh b/script/Jam10/GunnerParade_EnmLib.dnh index e96cb82..794b2bf 100644 --- a/script/Jam10/GunnerParade_EnmLib.dnh +++ b/script/Jam10/GunnerParade_EnmLib.dnh @@ -273,8 +273,8 @@ function _MushroomFairy( _EnemyItemDrop( enm, true, - smallFlyingEnm_itemPointMin, smallEnm_itemChainMin, - smallFlyingEnm_itemPointMax, smallEnm_itemChainMax, + medFlyingEnm_itemPointMin, smallEnm_itemChainMin, + medFlyingEnm_itemPointMax, smallEnm_itemChainMax, invinTime*5, smallEnemyHitbox*2 ); diff --git a/script/Jam10/NarumiSTG.dnh b/script/Jam10/NarumiSTG.dnh index a27663f..d376e0a 100644 --- a/script/Jam10/NarumiSTG.dnh +++ b/script/Jam10/NarumiSTG.dnh @@ -65,7 +65,11 @@ let POINTER_CHAIN = LoadAreaCommonDataValuePointer("PIV", "ChainAmount", 1); ObjEnemy_SetDamageRate(bossObj, 0, 0); _RenderBossFight(bossObj); + + _MagicCircle(bossObj); + SetEnemyAutoDeleteClip(160, 160, 160, 160); + //testTask(); @@ -124,6 +128,7 @@ let POINTER_CHAIN = LoadAreaCommonDataValuePointer("PIV", "ChainAmount", 1); // This array contains ONLY FLYING ENEMIES + task groundTask(){ wait(90); @@ -134,7 +139,7 @@ task groundTask(){ wait(max(5, 15-rank)); 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); wait(max(5, 15-rank)); @@ -156,10 +161,56 @@ task flyingTask(){ wait(30); - while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > BOSS_LENGTH){ + // Stage 1 + + while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > MIDBOSS_LENGTH){ Wave1(); 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;} Wave2(); @@ -172,25 +223,25 @@ task flyingTask(){ if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;} } - Wave3(); + Wave5(); wait(max(5, 20-4*rank)); if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;} - Wave5(); + Wave10(); wait(max(5, 20-4*rank)); if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;} SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+0.5, 1, RANK_MAX)); - Wave4(); + Wave8(); wait(max(5, 20-4*rank)); if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;} - Wave1(); + Wave9(); wait(max(5, 20-4*rank)); 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); wait(max(5, 20-4*rank)); if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= BOSS_LENGTH){break;} @@ -204,7 +255,6 @@ task flyingTask(){ } - task curEnmManage(){ 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(){ while(ObjEnemy_GetInfo(bossObj, INFO_LIFE) > 0){ @@ -445,7 +553,9 @@ task testTask(){ while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > 20){ - Wave5(); + Wave8(); + Wave9(); + Wave10(); SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+1, 1, RANK_MAX)); 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 BossIntro(){ bool bossCurrentlyIntro = true; @@ -518,15 +732,16 @@ function BossPhase1(){ _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 del2 = FUNC_LERP_LINEAR(80, 60, rank/RANK_MAX); - int ringNum = FUNC_LERP_LINEAR(6, 9, rank/RANK_MAX); + int del2 = FUNC_LERP_LINEAR(60, 45, rank/RANK_MAX); + int ringNum = FUNC_LERP_LINEAR(6, 10, rank/RANK_MAX); int accelTime = FUNC_LERP_LINEAR(30, 25, 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); - 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{ @@ -537,7 +752,7 @@ function BossPhase1(){ ascent(i in 0..ringNum){ 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; @@ -578,24 +793,26 @@ function BossPhase1(){ function BossPhase2(){ int fanDense = FUNC_LERP_LINEAR(3, 6, rank/RANK_MAX); - int fanStack = FUNC_LERP_LINEAR(2, 4, rank/RANK_MAX); - int fanRange = FUNC_LERP_LINEAR(4, 7, rank/RANK_MAX); - int del = FUNC_LERP_LINEAR(45, 60, rank/RANK_MAX); + int fanStack = FUNC_LERP_LINEAR(1, 3, rank/RANK_MAX); + int fanRange = FUNC_LERP_LINEAR(3, 5, rank/RANK_MAX); + int del = FUNC_LERP_LINEAR(50, 65, 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; - 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); - 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{ + wait(45); + 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; yield; } @@ -604,6 +821,7 @@ function BossPhase2(){ DeleteShotAll(TYPE_ALL, TYPE_ITEM); _BossExplosion(); + CollectAllItems(); } @@ -790,11 +1008,11 @@ function BossPhase3(){ } */ -task PhaseBonusCalculation(int HPthreshold, string spellName){ +task PhaseBonusCalculation(int enm, int HPthreshold, string spellName){ int curRank = rank; int scoreBase = 1000000 * curRank; - int scoreBonus = GetAreaCommonData("PIV", "currentvalue", 1000)*100; + int scoreBonus = GetAreaCommonData("PIV", "currentvalue", 1000)*250; int i = 0; // 20 seconds 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, ""); - 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; i = min(1200, i+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; @@ -846,7 +1064,6 @@ task PhaseBonusCalculation(int HPthreshold, string spellName){ } - ///////////// ENEMY HANDLING (NOT BOSS) ///////////// /* @@ -1380,7 +1597,6 @@ function Wave2(){ return; } - function Wave3(){ 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){ int enm = _MushroomFairyAlt( - 36, del*3, + 39, del*3, startX, startY ); @@ -1694,7 +1910,7 @@ function WaveGround1(){ CreateEnemyA(STG_WIDTH+128, STG_HEIGHT * 4/5, 180); } - while(length(enmGround) > 1){yield;} + while(length(enmFly) > 1){yield;} } @@ -1755,6 +1971,259 @@ function 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(){ @@ -2157,5 +2626,21 @@ task _ObjShake(objID, shaketime, intensity){ 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); +} diff --git a/script/Jam10/PackageLib/ImgTitle.png b/script/Jam10/PackageLib/ImgTitle.png new file mode 100644 index 0000000..c7a9cde Binary files /dev/null and b/script/Jam10/PackageLib/ImgTitle.png differ diff --git a/script/Jam10/PackageLib/title.png b/script/Jam10/PackageLib/title.png new file mode 100644 index 0000000..ce2eea2 Binary files /dev/null and b/script/Jam10/PackageLib/title.png differ diff --git a/script/Jam10/config.dat b/script/Jam10/config.dat new file mode 100644 index 0000000..2aae69b Binary files /dev/null and b/script/Jam10/config.dat differ diff --git a/script/Jam10/data_Pl0.dat b/script/Jam10/data_Pl0.dat new file mode 100644 index 0000000..5188f50 Binary files /dev/null and b/script/Jam10/data_Pl0.dat differ diff --git a/script/Jam10/data_Pl1.dat b/script/Jam10/data_Pl1.dat new file mode 100644 index 0000000..567ae9c Binary files /dev/null and b/script/Jam10/data_Pl1.dat differ diff --git a/script/Jam10/resourceLib/BossTheme.ogg b/script/Jam10/resourceLib/BossTheme.ogg new file mode 100644 index 0000000..9c08675 Binary files /dev/null and b/script/Jam10/resourceLib/BossTheme.ogg differ diff --git a/script/Jam10/resourceLib/BossTheme.xmp b/script/Jam10/resourceLib/BossTheme.xmp new file mode 100644 index 0000000..bdd2802 --- /dev/null +++ b/script/Jam10/resourceLib/BossTheme.xmp @@ -0,0 +1,84 @@ + + + + + 2023 + 2023-01-30T18:08:26+07:00 + 2023-01-30T18:08:26+07:00 + + + + CuePoint Markers + Cue + f48000 + + + CD Track Markers + Track + f48000 + + + Subclip Markers + InOut + f48000 + + + + xmp.iid:ee759497-91c4-e549-9cd3-eb5dc35ca7c0 + xmp.did:ee759497-91c4-e549-9cd3-eb5dc35ca7c0 + xmp.did:ec36adcb-d4b8-a648-9da4-f79adf813889 + + + + saved + xmp.iid:ec36adcb-d4b8-a648-9da4-f79adf813889 + 2023-01-30T18:08:26+07:00 + Adobe Audition 23.0 (Windows) + /metadata + + + saved + xmp.iid:ee759497-91c4-e549-9cd3-eb5dc35ca7c0 + 2023-01-30T18:08:26+07:00 + Adobe Audition 23.0 (Windows) + / + + + + + xmp.iid:ec36adcb-d4b8-a648-9da4-f79adf813889 + xmp.did:ec36adcb-d4b8-a648-9da4-f79adf813889 + xmp.did:ec36adcb-d4b8-a648-9da4-f79adf813889 + + audio/ogg; codec="vorbis" + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/script/Jam10/resourceLib/Jam10.png b/script/Jam10/resourceLib/Jam10.png index df70a52..1b9730f 100644 Binary files a/script/Jam10/resourceLib/Jam10.png and b/script/Jam10/resourceLib/Jam10.png differ diff --git a/script/Jam10/resourceLib/StageTheme.ogg b/script/Jam10/resourceLib/StageTheme.ogg new file mode 100644 index 0000000..d441a6e Binary files /dev/null and b/script/Jam10/resourceLib/StageTheme.ogg differ diff --git a/script/Jam10/resourceLib/StageTheme.xmp b/script/Jam10/resourceLib/StageTheme.xmp new file mode 100644 index 0000000..0f477f6 --- /dev/null +++ b/script/Jam10/resourceLib/StageTheme.xmp @@ -0,0 +1,84 @@ + + + + + 2023 + 2023-01-30T18:08:06+07:00 + 2023-01-30T18:08:06+07:00 + + + + CuePoint Markers + Cue + f44100 + + + CD Track Markers + Track + f44100 + + + Subclip Markers + InOut + f44100 + + + + xmp.iid:a92e0057-5a6e-4d4d-be15-5837f8b9ea9d + xmp.did:a92e0057-5a6e-4d4d-be15-5837f8b9ea9d + xmp.did:bc8b308b-79c6-374a-a9d0-2248d15c4871 + + + + saved + xmp.iid:bc8b308b-79c6-374a-a9d0-2248d15c4871 + 2023-01-30T18:08:06+07:00 + Adobe Audition 23.0 (Windows) + /metadata + + + saved + xmp.iid:a92e0057-5a6e-4d4d-be15-5837f8b9ea9d + 2023-01-30T18:08:06+07:00 + Adobe Audition 23.0 (Windows) + / + + + + + xmp.iid:bc8b308b-79c6-374a-a9d0-2248d15c4871 + xmp.did:bc8b308b-79c6-374a-a9d0-2248d15c4871 + xmp.did:bc8b308b-79c6-374a-a9d0-2248d15c4871 + + audio/ogg; codec="vorbis" + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/script/KevinSystem/Kevin_System.txt b/script/KevinSystem/Kevin_System.txt index 94d48cb..d4965ed 100644 --- a/script/KevinSystem/Kevin_System.txt +++ b/script/KevinSystem/Kevin_System.txt @@ -206,7 +206,7 @@ task TExtendSystem(){ // NARUMISTG req = [ - 10, 20, 40, 80, 120 + 10, 30, 60, 120, 250 ]; loop{ diff --git a/script/KevinSystem/img/HUD1.png b/script/KevinSystem/img/HUD1.png index 833188e..79d8600 100644 Binary files a/script/KevinSystem/img/HUD1.png and b/script/KevinSystem/img/HUD1.png differ diff --git a/script/KevinSystem/img/Kevin_Effect.png b/script/KevinSystem/img/Kevin_Effect.png index 7a31427..7d7c1ff 100644 Binary files a/script/KevinSystem/img/Kevin_Effect.png and b/script/KevinSystem/img/Kevin_Effect.png differ diff --git a/script/KevinSystem/kevin_system/Kevin_EffectLib.dnh b/script/KevinSystem/kevin_system/Kevin_EffectLib.dnh index 986a95f..da0409a 100644 --- a/script/KevinSystem/kevin_system/Kevin_EffectLib.dnh +++ b/script/KevinSystem/kevin_system/Kevin_EffectLib.dnh @@ -3,7 +3,7 @@ int PetalEffect = ObjParticleList_Create(OBJ_PARTICLE_LIST_2D); task InitEffect(){ - _EffectListPreRender(PetalEffect, imgEffect, [0, 0, 256, 256]); + _EffectListPreRender(PetalEffect, imgEffect, [240, 0, 240+192, 192]); } 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); 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; } diff --git a/script/Package_FuncLib.dnh b/script/Package_FuncLib.dnh index f81a6ae..ddcdabf 100644 Binary files a/script/Package_FuncLib.dnh and b/script/Package_FuncLib.dnh differ diff --git a/script/Package_MenuLib.dnh b/script/Package_MenuLib.dnh index bf343d8..e034a11 100644 Binary files a/script/Package_MenuLib.dnh and b/script/Package_MenuLib.dnh differ diff --git a/script/replay/GayGunner_Package_replay02.dat b/script/replay/GayGunner_Package_replay02.dat new file mode 100644 index 0000000..825f679 Binary files /dev/null and b/script/replay/GayGunner_Package_replay02.dat differ diff --git a/script/replay/GayGunner_Package_replay03.dat b/script/replay/GayGunner_Package_replay03.dat new file mode 100644 index 0000000..1a682c2 Binary files /dev/null and b/script/replay/GayGunner_Package_replay03.dat differ diff --git a/th_dnh.def b/th_dnh.def index 109ba9b..c7cb55f 100644 --- a/th_dnh.def +++ b/th_dnh.def @@ -1,7 +1,7 @@ //-------------------------------------------------------------- //Package Script Path // 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