diff --git a/LogWindow.dat b/LogWindow.dat index 10aa769..478cd61 100644 Binary files a/LogWindow.dat and b/LogWindow.dat differ diff --git a/config.dat b/config.dat index aaba845..a8eb42c 100644 Binary files a/config.dat and b/config.dat differ diff --git a/script/ExRumia/ExRumia_Package_ReplaySelectScene.txt b/script/ExRumia/ExRumia_Package_ReplaySelectScene.txt index 65f508b..7c57bce 100644 Binary files a/script/ExRumia/ExRumia_Package_ReplaySelectScene.txt and b/script/ExRumia/ExRumia_Package_ReplaySelectScene.txt differ diff --git a/script/Gay_Package.dnh b/script/Gay_Package.dnh index 7fd4c5a..e900b9d 100644 Binary files a/script/Gay_Package.dnh and b/script/Gay_Package.dnh differ diff --git a/script/KevinSystem/Kevin_System.txt b/script/KevinSystem/Kevin_System.txt index ef84267..eda516b 100644 --- a/script/KevinSystem/Kevin_System.txt +++ b/script/KevinSystem/Kevin_System.txt @@ -100,7 +100,7 @@ let pointerPIV = LoadAreaCommonDataValuePointer("PIV", "currentvalue", 10000); float[] pos = GetEventArgument(0); //int listTarget = GetEventArgument(1); - if(GetAreaCommonData("Config", "EffectCut", 0) >= 2){ObjSound_Play(sfxBoom);} + if(GetCommonDataPtr(EFFECTCUT_PTR, 0) >= 2){ObjSound_Play(sfxBoom);} //_EffectListPreRender(PetalEffect, imgEffect, [0, 0, 256, 256]); else{_ExplosionEffect(pos[0], pos[1], PetalEffect);} diff --git a/script/KevinSystem/Universal_EnemyLib.dnh b/script/KevinSystem/Universal_EnemyLib.dnh index 1be82d0..be58fd6 100644 --- a/script/KevinSystem/Universal_EnemyLib.dnh +++ b/script/KevinSystem/Universal_EnemyLib.dnh @@ -195,18 +195,11 @@ function _CreateEnemy( task _HandleEnemyWellbeing(int enemyID, float sizeHitbox, float sizeHurtbox){ - float enmX = 0, enmY = 0; + //float enmX = 0, enmY = 0; while(ObjEnemy_GetInfo(enemyID, INFO_LIFE) > 0){ - enmX = ObjMove_GetX(enemyID); - enmY = ObjMove_GetY(enemyID); - - if(ObjEnemy_GetInfo(enemyID, INFO_LIFE) <= 0){break;} - - else{ - ObjEnemy_SetIntersectionCircleToShot(enemyID, enmX, enmY, sizeHitbox); - } + ObjEnemy_SetIntersectionCircleToShot(enemyID, ObjMove_GetX(enemyID), ObjMove_GetY(enemyID), sizeHitbox); //ObjEnemy_SetIntersectionCircleToPlayer(enemyID, ObjMove_GetX(enemyID), ObjMove_GetY(enemyID), sizeHurtbox); yield; diff --git a/script/KevinSystem/Universal_Lib.txt b/script/KevinSystem/Universal_Lib.txt index 49c7ae5..d3e1043 100644 --- a/script/KevinSystem/Universal_Lib.txt +++ b/script/KevinSystem/Universal_Lib.txt @@ -22,16 +22,9 @@ // Convenience constants -let ITEMID_PTR = LoadAreaCommonDataValuePointer("ScriptID", "ItemID", 0); -let SYSTEMID_PTR = LoadAreaCommonDataValuePointer("ScriptID", "SystemID", 0); - -let FLYINGENM_PTR = LoadCommonDataValuePointer("Flying Defeated", 0); -let GROUNDENM_PTR = LoadCommonDataValuePointer("Ground Defeated", 0); - const STG_WIDTH = GetStgFrameWidth(); const STG_HEIGHT = GetStgFrameHeight(); -let texEnm = "script/game/resourceLib/EnmTexture.png"; let blipVol = GetAreaCommonData("Config", "SEVol", 100) * 0.01; InstallFont("script/KevinSystem/font/Connecting Chain Handserif.ttf"); diff --git a/script/KevinSystem/kevin_system/KevinSystem_Item.txt b/script/KevinSystem/kevin_system/KevinSystem_Item.txt index 2b74692..542b902 100644 --- a/script/KevinSystem/kevin_system/KevinSystem_Item.txt +++ b/script/KevinSystem/kevin_system/KevinSystem_Item.txt @@ -194,7 +194,7 @@ task _DropPIVItemEnemy(int IDPlayer, float[] posEnm, int pointMin, int pointMax, } - if(GetAreaCommonData("Config", "EffectCut", 0) >= 1){} + if(GetCommonDataPtr(EFFECTCUT_PTR, 0) >= 1){} else{_ScorePopup(posEnm[0], posEnm[1], "PIV", pointFinal);} return; diff --git a/script/KevinSystem/kevin_system/Kevin_ItemLib.txt b/script/KevinSystem/kevin_system/Kevin_ItemLib.txt index 5152988..1321123 100644 --- a/script/KevinSystem/kevin_system/Kevin_ItemLib.txt +++ b/script/KevinSystem/kevin_system/Kevin_ItemLib.txt @@ -9,7 +9,7 @@ function CreatePIVItem(itemtype, x, y){ ObjItem_SetAutoDelete(PIVItem, false); ObjMove_SetAngle(PIVItem, 90); - ObjMove_SetSpeed(PIVItem, -20); + ObjMove_SetSpeed(PIVItem, -10); ObjMove_SetAcceleration(PIVItem, 1); ObjMove_SetMaxSpeed(PIVItem, 0); diff --git a/script/KevinSystem/kevin_system/Lib_Const.dnh b/script/KevinSystem/kevin_system/Lib_Const.dnh index f1ed333..020983e 100644 --- a/script/KevinSystem/kevin_system/Lib_Const.dnh +++ b/script/KevinSystem/kevin_system/Lib_Const.dnh @@ -7,5 +7,13 @@ const EV_DROP_EXTEND = EV_USER + 203i; const EV_EXPLODE = EV_USER + 300i; +const EFFECTCUT_PTR = LoadAreaCommonDataValuePointer("Config", "EffectCut", 0); + +const ITEMID_PTR = LoadAreaCommonDataValuePointer("ScriptID", "ItemID", 0); +const SYSTEMID_PTR = LoadAreaCommonDataValuePointer("ScriptID", "SystemID", 0); + +const FLYINGENM_PTR = LoadCommonDataValuePointer("Flying Defeated", 0); +const GROUNDENM_PTR = LoadCommonDataValuePointer("Ground Defeated", 0); + //const SYSTEMID_PTR = LoadAreaCommonDataValuePointer("ScriptID", "SystemID", 0); //const ITEMID_PTR = LoadAreaCommonDataValuePointer("ScriptID", "ItemID", 0); \ No newline at end of file diff --git a/script/default_system/Default_Effect.txt b/script/default_system/Default_Effect.txt index ba67736..8645b1f 100644 Binary files a/script/default_system/Default_Effect.txt and b/script/default_system/Default_Effect.txt differ diff --git a/script/game/99Sec.dnh b/script/game/99Sec.dnh index 6090a20..cdef819 100644 --- a/script/game/99Sec.dnh +++ b/script/game/99Sec.dnh @@ -31,7 +31,7 @@ int[] enmGround = []; int[] rankAvg = []; -let SYSTEMID_PTR_2 = LoadAreaCommonDataValuePointer("ScriptID", "SystemID", 0); +//let SYSTEMID_PTR_2 = LoadAreaCommonDataValuePointer("ScriptID", "SystemID", 0); // Includes ahoy @@ -69,6 +69,7 @@ let SYSTEMID_PTR_2 = LoadAreaCommonDataValuePointer("ScriptID", "SystemID", 0); bossTask(); mainTask(); groundTask(); + curEnmManage(); //SetCommonData("Rank", 9); @@ -134,8 +135,9 @@ task curEnmManage(){ enmFly = []; allEnm = GetIntersectionRegistedEnemyID(); for each (int enm in ref allEnm){ - if(Obj_GetRenderPriorityI(enm) <= 34){enmGround ~= [enm];} - else if(Obj_GetRenderPriorityI(enm) >= 35){enmFly ~= [enm];} + if(Obj_GetRenderPriorityI(enm) <= 35){enmGround ~= [enm];} + else if(Obj_GetRenderPriorityI(enm) >= 36 && Obj_GetRenderPriorityI(enm) < 41){enmFly ~= [enm];} + else{} } wait(30); } @@ -559,13 +561,18 @@ task _BossExplosion( //NotifyEventAll(EV_DROP_POINT_ENEMY, [enmX, enmY], timer, maxTimer, minPoint, maxPoint); + SetPlayerInvincibilityFrame(300); ObjSound_Play(bossBoom); - NotifyEvent(GetCommonDataPtr(SYSTEMID_PTR_2, 0), EV_EXPLODE, [enmX, enmY]); + NotifyEvent(GetCommonDataPtr(SYSTEMID_PTR, 0), EV_EXPLODE, [enmX, enmY]); + + _ObjShake(IDship, 190, 120); + + ObjSprite2D_SetSourceRect(IDship, [1280, 1536, 2048, 2048]); loop(30){ //LoadEx(bossBoom, "script/game/resourceLib/bigBoom.ogg", 30 * SFXVol); ObjSound_Play(bossBoom); - NotifyEvent(GetCommonDataPtr(SYSTEMID_PTR_2, 0), EV_EXPLODE, [shipX+rand(-240, 240), shipY+rand(-150, 150)]); + NotifyEvent(GetCommonDataPtr(SYSTEMID_PTR, 0), EV_EXPLODE, [shipX+rand(-240, 240), shipY+rand(-150, 150)]); wait(6); } @@ -582,7 +589,7 @@ task _BossExplosion( _EndShake(120, 120); loop(120){ - NotifyEvent(GetCommonDataPtr(SYSTEMID_PTR_2, 0), EV_EXPLODE, [shipX+rand(-240, 240), STG_HEIGHT+rand(0, -150)]); + NotifyEvent(GetCommonDataPtr(SYSTEMID_PTR, 0), EV_EXPLODE, [shipX+rand(-240, 240), STG_HEIGHT+rand(0, -150)]); } ObjSound_Play(bossBoom); @@ -640,6 +647,7 @@ task EndBonus(int ID, int IDship){ rankAvgFinal = rankSum/length(rankAvg); + _CreateBonusText(STG_WIDTH/2, STG_HEIGHT/2-220, 30, 0xFF5555, "LIVES REMAINING: " ~ IntToString(GetPlayerLife())); _CreateBonusText(STG_WIDTH/2, STG_HEIGHT/2-180, 30, 0x397FFF, "TIME REMAINING: " ~ vtos("5.2f", timer/60)); _CreateBonusText(STG_WIDTH/2, STG_HEIGHT/2-140, 30, 0x00CC00, "GROUND ENEMIES DEFEATED: " ~ IntToString(GetCommonDataPtr(GROUNDENM_PTR, 0))); _CreateBonusText(STG_WIDTH/2, STG_HEIGHT/2-100, 30, 0x8400CC, "FLYING ENEMIES DEFEATED: " ~ IntToString(GetCommonDataPtr(FLYINGENM_PTR, 0))); @@ -650,7 +658,7 @@ task EndBonus(int ID, int IDship){ wait(120); - float multiplierBonus = timer/60 * 5 + GetCommonDataPtr(GROUNDENM_PTR, 0)/5 + GetCommonDataPtr(FLYINGENM_PTR, 0)/5 + rankAvgFinal * 5; + float multiplierBonus = GetPlayerLife() * 5 + timer/60 * 5 + GetCommonDataPtr(GROUNDENM_PTR, 0)/5 + GetCommonDataPtr(FLYINGENM_PTR, 0)/5 + rankAvgFinal * 5; int scoreBonus = trunc ( (multiplierBonus * GetAreaCommonData("PIV", "currentvalue", 0)) / 10 ) * 10; @@ -692,6 +700,18 @@ task RankManagement(){ } } + async{ + while(true){ + if(ObjMove_GetY(GetPlayerObjectID()) < GetStgFrameHeight()/6){ + ObjRender_SetAlpha(textRank, 60); + } + else{ + ObjRender_SetAlpha(textRank, 255); + } + yield; + } + } + async{ while(ObjEnemy_GetInfo(bossObj, INFO_LIFE) > 0){ rankAvg ~= [rank]; @@ -708,10 +728,10 @@ task testTask(){ while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > 20){ //Wave4(); - WaveGround1(); + Wave6(); wait(15); - //SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+1, 1, 9)); + SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+1, 1, 9)); //SetCommonData("Ground Loops Cleared", GetCommonData("Ground Loops Cleared", 0)+1); yield; } @@ -722,16 +742,55 @@ task groundTask(){ wait(15); while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > 20){ + WaveGround1(); wait(max(0, 16-4*rank)); if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= 20){break;} + WaveGround2(); wait(max(0, 16-4*rank)); if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= 20){break;} - WaveGround3(); + + if(GetCommonData("Ground Loops Cleared", 0) % 2 != 0){ + + WaveGround3(); + wait(max(0, 16-4*rank)); + + } + + else{ + + WaveGround6(); + wait(max(0, 16-4*rank)); + + } + + //if (rank < 3) {SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+1, 1, 9));} + + if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= 20){break;} + + if((GetCommonData("Ground Loops Cleared", 0) % 3 == 0 && GetCommonData("Ground Loops Cleared", 0) != 0)){ + + if(rank > 6){ + + WaveGround5(); + wait(max(0, 16-4*rank)); + + } + + else{ + + WaveGround4(); + wait(max(0, 16-4*rank)); + + } + + } + wait(max(0, 16-4*rank)); SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+1, 1, 9)); SetCommonData("Ground Loops Cleared", GetCommonData("Ground Loops Cleared", 0)+1); + yield; } @@ -747,20 +806,16 @@ task mainTask { task Flying(){ while(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > 20){ Wave1(); - //wait(max(0, 5-1*rank)); if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= 20){break;} Wave2(); - //wait(max(0, 5-1*rank)); if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= 20){break;} - //SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+1, 1, 9)); Wave3(); - //wait(max(0, 5-1*rank)); if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= 20){break;} Wave4(); - //wait(max(0, 5-1*rank)); if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= 20){break;} Wave5(); - //wait(max(0, 5-1*rank)); + if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= 20){break;} + Wave6(); SetCommonData("Rank", clamp(GetCommonData("Rank", 1)+1, 1, 9)); SetCommonData("Flying Loops Cleared", GetCommonData("Flying Loops Cleared", 0)+1); yield; @@ -769,10 +824,6 @@ task mainTask { } -function GetReady(){ - -} - /* Enemy Waves (Ground): @@ -908,6 +959,84 @@ function WaveGround3(){ } +function WaveGround4(){ + + ascent(i in 0..2){ + _LilyWithFairy( + 35, KEV_AURABALL_GREEN, + STG_WIDTH/7 + i*5*STG_WIDTH/7, -256, 6.25+0.2*rank, + 10-(1+rank/5), 7+0.25*rank, 25-rank, 0.9 + ); + } + + wait(max(25, 75-8*rank)); + + while(length(enmGround) > 1){yield;} + + return; + +} + +function WaveGround5(){ + + ascent(i in 0..2){ + _LilyWithFairy( + 35, KEV_AURABALL_GREEN, + STG_WIDTH/7 + i*5*STG_WIDTH/7, -256, 6.25+0.2*rank, + 10-(1+rank/5), 7+0.4*rank, 25-rank, 0.9 + ); + } + + wait(max(25, 45-5*rank)); + + _LilyWithFairy( + 35, KEV_AURABALL_GREEN, + STG_WIDTH/2, -256, 6.25+0.2*rank, + 10-(1+rank/5), 7+0.4*rank, 25-rank, 0.9 + ); + + wait(max(25, 45-5*rank)); + + ascent(i in 0..2){ + _LilyWithFairy( + 35, KEV_AURABALL_GREEN, + STG_WIDTH/7 + i*5*STG_WIDTH/7, -256, 6.25+0.2*rank, + 10-(1+rank/5), 7+0.4*rank, 25-rank, 0.9 + ); + } + + while(length(enmGround) > 1){yield;} + + return; + +} + +function WaveGround6(){ + + float spd = 6.2*(1.4+rank/9); + + ascent(i in 0..max(6, rank+2)){ + + ascent(i in 0..2){ + _LilypodWith1Frog( + 34, KEV_BALL_GREEN, + STG_WIDTH/7+5*i*STG_WIDTH/7, -256, + [1, 1.25, 1.65][clamp((rank/2)-1, 0, 2)], 7*(1.25+rank/10), 7*(1.25+rank/10)/4, [1, 3][clamp((rank/2)-1, 0, 1)], 1, max(15, trunc(35-(3*rank))), 0.6, + spd + ); + } + + wait(max(12, 26-4*rank)); + + } + + //wait(max(20, 40-8*rank)); + + while(length(enmGround) > 1){yield;} + return; + +} + function Wave1(){ task SpawnLine(x){ @@ -1070,6 +1199,67 @@ function Wave5(){ } +function Wave6(){ + + async{ + + wait(max(12*2, (24-4*rank)*2)); + + if(rank > 5){ + + _LargeDragonGuy( + 39, [0, 512, 256, 768], + STG_WIDTH/5, -128, 8+0.7*rank, 90, max(25, 45-5*rank), 150-10*rank, KEV_LEAF_PURPLE, + [3, 4, 5][clamp((rank/2)-1, 0, 2)], 1.15624*4+(1.15624*rank), 6+rank, 6*(1.25+rank/10), 30, 0.9 + ); + + _LargeDragonGuy( + 39, [256, 512, 512, 768], + 4*STG_WIDTH/5, -128, 8+0.7*rank, 90, max(25, 45-5*rank), 150-10*rank, KEV_LEAF_ORANGE, + [3, 4, 5][clamp((rank/2)-1, 0, 2)], 1.15624*4+(1.15624*rank), 6+rank, 6*(1.25+rank/10),30, 0.9 + ); + + } + + else{ + + _LargeDragonGuy( + 39, [0, 512, 256, 768], + STG_WIDTH/2, -128, 8+0.7*rank, 90, max(25, 45-5*rank), 150-10*rank, KEV_LEAF_PURPLE, + [3, 4, 5][clamp((rank/2)-1, 0, 2)], 1.15624*4+(1.15624*rank), 12+rank, 7.25*(1.25+rank/9), max(15, 40-5*rank), 0.9 + ); + + } + + } + + loop(4){ + + _SmallFairyRing( + 40, KEV_BALL_PINK, + -128, 2.5*STG_HEIGHT/8, + round(5+1.5*rank), trunc(61.5-(2.5*rank)), 7.5*(1.25+rank/10), + 6.4*(1.15+rank/9), 0, 0.6 + ); + + _SmallFairyRing( + 40, KEV_BALL_PINK, + STG_WIDTH+128, 2.5*STG_HEIGHT/8, + round(5+1.5*rank), trunc(61.5-(2.5*rank)), 6.5*(1.25+rank/10), + 6.4*(1.15+rank/9), 180, 0.6 + ); + + wait(max(24, 48-4*rank)); + + } + + wait(max(12, 24-4*rank)); + + while(length(enmFly) > 1){yield;} + return; + +} + task _EndShake(shaketime, intensity){ float baseintensity = intensity; @@ -1090,4 +1280,25 @@ task _EndShake(shaketime, intensity){ yield; } +task _ObjShake(objID, shaketime, intensity){ + + float baseX = ObjMove_GetX(objID); + float baseY = ObjMove_GetY(objID); + float baseintensity = intensity; + float shakeno = shaketime; + + ascent(i in 0..shakeno){ + ObjMove_SetPosition(objID, baseX + rand(-intensity, intensity), baseY + rand(-intensity, intensity)/2); + intensity = Interpolate_Decelerate(0, baseintensity, 1-i/shakeno); + shaketime--; + yield; + } + + while(shaketime > 0){yield;} + + ObjMove_SetPosition(objID, baseX, baseY); + + yield; +} + diff --git a/script/game/99Sec_EnmLib.dnh b/script/game/99Sec_EnmLib.dnh index 2612ba2..f86aee7 100644 --- a/script/game/99Sec_EnmLib.dnh +++ b/script/game/99Sec_EnmLib.dnh @@ -1,3 +1,5 @@ +let texEnm = "script/game/resourceLib/EnmTexture.png"; +LoadTextureEx(texEnm, true, true); /* @@ -385,6 +387,8 @@ task _CreateFrog( } + + task _CreateKingFrog( int renderPriority, int[] rect, int graphicBullet, float angSpiral, float delaySpiral, float speedSpiral, @@ -429,7 +433,7 @@ task _CreateKingFrog( float x, y; - wait(60); + wait(60-GetCommonDataPtr(RANK_PTR, 1)*4); while(ObjEnemy_GetInfo(enm, INFO_LIFE) > 0){ x = ObjMove_GetX(enm); @@ -437,14 +441,21 @@ task _CreateKingFrog( yield; } - DeleteShotInCircle(TYPE_SHOT, TYPE_ITEM, x, y, 384); - ObjSound_Play(bossBoom); - if(GetCommonData("Ground Loops Cleared", 0) % 2 == 0 && GetCommonData("Ground Loops Cleared", 0) != 0){CreateExtendItem(EXTEND_SPELL, x, y);} - TExplosionA(x, y, 10, 0.5); + if( + (-128 < x && x < STG_WIDTH+128) + && + (-128 < y && y < STG_HEIGHT+128) + ) + { + DeleteShotInCircle(TYPE_SHOT, TYPE_ITEM, x, y, 384); + ObjSound_Play(bossBoom); + if(GetCommonData("Ground Loops Cleared", 0) % 2 == 0 && GetCommonData("Ground Loops Cleared", 0) != 0){CreateExtendItem(EXTEND_SPELL, x, y);} + TExplosionA(x, y, 10, 0.5); + } } - wait(60); + wait(60-GetCommonDataPtr(RANK_PTR, 1)*4); ObjEnemy_SetAutoDelete(enm, true); @@ -540,7 +551,7 @@ task _LilypodWithKingFrog( ObjEnemy_SetDamageRate(lilypad, 0, 0); - wait(15); + wait(15-GetCommonDataPtr(RANK_PTR, 1)-1); ObjEnemy_SetAutoDelete(lilypad, true); @@ -556,6 +567,220 @@ task _LilypodWithKingFrog( } +function _CreateLilyFairy( + int renderPriority, int[] rect, int graphicBullet, + float delayBullet, float speedBullet, float acceltimeBullet, + float frogX, frogY, speedMoveFrog, scaleBullet + ){ + + // Enemy has NO GRAPHIC + + int enm = _CreateEnemy( + frogX, frogY, frogX, frogY, 5, + largeEnemyScale, largeEnemyScale, + smallEnemyHP, largeEnemyHitbox, 0, + texEnm, + 0, 0, 0, 0); + + Obj_SetRenderPriorityI(enm, renderPriority); + + ObjMove_SetSpeed(enm, speedMoveFrog); + ObjMove_SetAngle(enm, 90); + + ObjEnemy_SetDamageRate(enm, 0, 0); + + async{ + + async{ + + float x = 0, y = 0; + + wait(max(25, 60-GetCommonData("Rank", 1)*5)); + + while(ObjEnemy_GetInfo(enm, INFO_LIFE) > 0){ + x = ObjMove_GetX(enm); + y = ObjMove_GetY(enm); + yield; + } + + if( + (-128 < x && x < STG_WIDTH+128) + && + (-128 < y && y < STG_HEIGHT+128) + ) + { + DeleteShotInCircle(TYPE_SHOT, TYPE_ITEM, x, y, 384); + ObjSound_Play(bossBoom); + //if(GetCommonData("Ground Loops Cleared", 0) % 2 == 0 && GetCommonData("Ground Loops Cleared", 0) != 0){CreateExtendItem(EXTEND_SPELL, x, y);} + TExplosionA(x, y, 10, 0.5); + } + + } + + wait(max(25, 60-GetCommonData("Rank", 1)*5)); + + ObjEnemy_SetAutoDelete(enm, true); + + async{ + + wait(5); + + while(ObjEnemy_GetInfo(enm, INFO_LIFE) > 0){ + + if(ObjMove_GetY(enm) < 11*STG_HEIGHT/12 && ObjMove_GetY(enm) > STG_HEIGHT/12){ + + float xspd = rand(-(2+GetCommonDataPtr(RANK_PTR, 1)*0.5), 2+GetCommonDataPtr(RANK_PTR, 1)*0.5); + int bullet = CreateShotB2(ObjMove_GetX(enm), ObjMove_GetY(enm), xspd, -speedBullet, 0, speedBullet/(acceltimeBullet/2), xspd, speedBullet*1.5, graphicBullet, 10); + + if(Obj_IsDeleted(enm)){Obj_Delete(bullet); break;} + + else{ + + Shoot1; + _BulletRescale(bullet, scaleBullet, true, 1); + _Delay(bullet, 10); + + } + + wait(delayBullet); + + } + + else{yield;} + + yield; + + } + + } + + _EnemyItemDrop( + enm, false, + 4, 6, + round(5+(GetCommonDataPtr(RANK_PTR, 1)-1)*1.25), round(8+(GetCommonDataPtr(RANK_PTR, 1)-1)*2), + 180, largeEnemyHitbox*2.5 + ); + + } + + return enm; + //ObjEnemy_SetDamageRate(enm, 100, 150); + +} + + +task _LilyWithFairy( + int renderFrog, int graphicBullet, + float lilyX, lilyY, speedMove, + float delayBullet, float speedBullet, float acceltimeBullet, float scaleBullet + ){ + + float offsetX = 80; + float offsetY = 70; + + int lilypad = _CreateEnemy( + false, + lilyX, lilyY, lilyX, lilyY, 5, + 0.75, 0.75, + largeEnemyAltHP, 0, 0, + texEnm, + 2304, 0, 2880, 512); + + Obj_SetRenderPriorityI(lilypad, renderFrog-4); + + ObjMove_SetSpeed(lilypad, speedMove); + ObjMove_SetAngle(lilypad, 90); + + ObjEnemy_SetDamageRate(lilypad, 0, 0); + + wait(15-GetCommonDataPtr(RANK_PTR, 1)-1); + + ObjEnemy_SetAutoDelete(lilypad, true); + + async{ + + float x = 0, y = 0; + + wait(60); + + while(ObjEnemy_GetInfo(lilypad, INFO_LIFE) > 0){ + x = ObjMove_GetX(lilypad); + y = ObjMove_GetY(lilypad); + yield; + } + + DeleteShotInCircle(TYPE_SHOT, TYPE_ITEM, x, y, 384); + ObjSound_Play(bossBoom); + //if(GetCommonData("Ground Loops Cleared", 0) % 2 == 0 && GetCommonData("Ground Loops Cleared", 0) != 0){CreateExtendItem(EXTEND_SPELL, x, y);} + TExplosionA(x, y, 10, 0.5); + + } + + async{ + + int fairy = _CreateLilyFairy( + renderFrog, [0, 0, 0, 0], graphicBullet, + delayBullet, speedBullet, acceltimeBullet, + lilyX, lilyY, speedMove, scaleBullet + ); + + float x = 0, y = 0; + + while(!Obj_IsDeleted(fairy)){ + x = ObjMove_GetX(fairy); + y = ObjMove_GetY(fairy); + yield; + } + + if( + (-128 < x && x < STG_WIDTH+128) + && + (-128 < y && y < STG_HEIGHT+128) + ) + + { + _PostDeath(); + + ObjMove_AddPatternA2(lilypad, 0, -speedMove*2, NO_CHANGE, speedMove/30, speedMove*1.25, 0); + ObjSprite2D_SetSourceRect(lilypad, 2304, 512, 2880, 1024); + _HandleEnemyWellbeing(lilypad, largeEnemyHitbox*2, 0); + ObjEnemy_SetDamageRate(lilypad, 100, 100); + } + + } + + task _PostDeath(){ + + async{ + float spinRate = 9; + int i = 0; + while(!Obj_IsDeleted(lilypad)){ + ObjRender_SetAngleZ(lilypad, ObjRender_GetAngleZ(lilypad)+spinRate); + spinRate = Interpolate_Decelerate(9, 4, i/240); + i = max(240, i+1); + yield; + } + } + + ObjMove_AddPatternA2(lilypad, 0, -speedMove*3, NO_CHANGE, speedMove/15, speedMove*1.25, 0); + ObjSprite2D_SetSourceRect(lilypad, 2304, 512, 2880, 1024); + Obj_SetRenderPriorityI(lilypad, 41); + + wait(90); + + _HandleEnemyWellbeing(lilypad, largeEnemyHitbox*2, 0); + ObjEnemy_SetDamageRate(lilypad, 100, 100); + + } + + _EnemyItemDrop( + lilypad, false, + 6, 12, + round(12+(GetCommonDataPtr(RANK_PTR, 1)-1)*1.25), round(14+(GetCommonDataPtr(RANK_PTR, 1)-1)), + 180, largeEnemyHitbox*3 + ); + +} task _LilypodWith4Frogs( int renderFrog, int graphicBullet, @@ -614,7 +839,6 @@ task _LilypodWith4Frogs( } - task _LilypodWith2Frog( int renderFrog, int graphicBullet, float lilyX, float lilyY, @@ -658,6 +882,44 @@ task _LilypodWith2Frog( } +task _LilypodWith1Frog( + int renderFrog, int graphicBullet, + float lilyX, float lilyY, + float angspaceFan, float speedFan1, float speedFan2, int widthFan, int stackFan, int delayFan, float scaleBullet, + float speedMove + ){ + + int lilypad = _CreateEnemy( + false, + lilyX, lilyY, lilyX, lilyY, 5, + 0.6, 0.6, + 999, 0, 0, + texEnm, + 1536, 256, 2048, 768); + + Obj_SetRenderPriorityI(lilypad, renderFrog-4); + + ObjMove_SetSpeed(lilypad, speedMove); + ObjMove_SetAngle(lilypad, 90); + + ObjEnemy_SetDamageRate(lilypad, 0, 0); + + wait(1); + + ObjEnemy_SetAutoDelete(lilypad, true); + + async{ + + _CreateFrog( + renderFrog, [1280, 512, 1536, 768], graphicBullet, + angspaceFan, speedFan1, speedFan2, widthFan, stackFan, delayFan, + lilyX, lilyY, speedMove, scaleBullet + ); + + } + +} + // Leave this for the boss. task _CreateRybbShip( @@ -817,10 +1079,18 @@ task _LargeFairyAimedFan( yield; } - DeleteShotInCircle(TYPE_SHOT, TYPE_ITEM, x, y, 256); - ObjSound_Play(bossBoom); - if(checkBomb){if(GetCommonData("Flying Loops Cleared", 0) % 4 == 0 && GetCommonData("Flying Loops Cleared", 0) != 0){CreateExtendItem(EXTEND_SPELL, x, y);}} - TExplosionA(x, y, 10, 0.5); + if( + (-128 < x && x < STG_WIDTH+128) + && + (-128 < y && y < STG_HEIGHT+128) + ) + + { + DeleteShotInCircle(TYPE_SHOT, TYPE_ITEM, x, y, 256); + ObjSound_Play(bossBoom); + if(checkBomb){if(GetCommonData("Flying Loops Cleared", 0) % 4 == 0 && GetCommonData("Flying Loops Cleared", 0) != 0){CreateExtendItem(EXTEND_SPELL, x, y);}} + TExplosionA(x, y, 10, 0.5); + } } @@ -866,6 +1136,114 @@ task _LargeFairyAimedFan( } +task _LargeDragonGuy( + int renderPriority, int[] rect, + float enmX, float enmY, float spdMove, float angMove, int timeDecel, int timeStay, int graphicBullet, + int stackLine, float angOffset, float denseRing, float speedBullet, int delayRing, float scaleBullet + ){ + + // Spawns enemy. + + int enm = _CreateEnemy( + enmX, enmY, enmX, enmY, 5, + largeEnemyScale*1.1, largeEnemyScale*1.1, + largeEnemyHP*1.25, largeEnemyHitbox*1.1, 0, + texEnm, + rect[0], rect[1], rect[2], rect[3]); + + Obj_SetRenderPriorityI(enm, renderPriority); + + ObjMove_SetSpeed(enm, spdMove*2); + ObjMove_SetAngle(enm, angMove); + + ObjEnemy_SetDamageRate(enm, 0, 0); + + async{ + + ObjMove_AddPatternA2(enm, 0, NO_CHANGE, NO_CHANGE, -spdMove*2/timeDecel, 0, 0); + wait(30+timeStay); + ObjMove_AddPatternA2(enm, 0, NO_CHANGE, NO_CHANGE, spdMove/timeDecel, spdMove, 0); + + } + + async{ + float x = 0, y = 0; + + wait(max(10, 30-GetCommonData("Rank", 0)*5)); + + while(ObjEnemy_GetInfo(enm, INFO_LIFE) > 0){ + x = ObjMove_GetX(enm); + y = ObjMove_GetY(enm); + yield; + } + + if( + (-128 < x && x < STG_WIDTH+128) + && + (-128 < y && y < STG_HEIGHT+128) + ) + + { + DeleteShotAll(TYPE_SHOT, TYPE_ITEM); + ObjSound_Play(bossBoom); + TExplosionA(x, y, 10, 0.5); + } + + } + + wait(max(10, 30-GetCommonData("Rank", 0)*5)); + + ObjEnemy_SetAutoDelete(enm, true); + + async{ + + //wait(5); + float baseAng = GetAngleToPlayer(enm); + int delay = 0; + + while(ObjEnemy_GetInfo(enm, INFO_LIFE) > 0){ + + int delay = 10; + + if(ObjMove_GetY(enm) < 10*STG_HEIGHT/12-100 && ObjMove_GetY(enm) > 1*STG_HEIGHT/12-100){ + + ascent(i in 0..stackLine){ + ascent(j in 0..denseRing){ + int bullet = CreateShotA1(ObjMove_GetX(enm), ObjMove_GetY(enm), speedBullet, baseAng+j*360/denseRing, graphicBullet, delay); + + _BulletRescale(bullet, scaleBullet, true, 1); + _Delay(bullet, 10+delay); + + if(ObjEnemy_GetInfo(enm, INFO_LIFE) <= 0){Obj_Delete(bullet);} + else{ + Shoot2; + } + } + delay += 3; + } + + wait(delayRing); + baseAng += angOffset; + + } + + else{yield;} + + } + + } + + _EnemyItemDrop( + enm, true, + 15, 6, + round(20+(GetCommonDataPtr(RANK_PTR, 1)-1)*2.25), round(12+(GetCommonDataPtr(RANK_PTR, 1)-1)*2), + 210, largeEnemyHitbox*3 + ); + + //ObjEnemy_SetDamageRate(enm, 100, 150); + +} + task _WaitForAutoDelete(int shot, int timeWait){ ObjShot_SetAutoDelete(shot, false); wait(timeWait); diff --git a/script/game/PackageLib/Manual_JP.png b/script/game/PackageLib/Manual_JP.png new file mode 100644 index 0000000..359e419 Binary files /dev/null and b/script/game/PackageLib/Manual_JP.png differ diff --git a/script/game/config.dat b/script/game/config.dat index 347d771..add635a 100644 Binary files a/script/game/config.dat and b/script/game/config.dat differ diff --git a/script/game/data.dat b/script/game/data.dat index fbeb41b..7e766d9 100644 Binary files a/script/game/data.dat and b/script/game/data.dat differ diff --git a/script/game/resourceLib/EnmTexture.png b/script/game/resourceLib/EnmTexture.png index fadde8d..d2b5df2 100644 Binary files a/script/game/resourceLib/EnmTexture.png and b/script/game/resourceLib/EnmTexture.png differ diff --git a/script/player/Chimata/Chimata_Main.dnh b/script/player/Chimata/Chimata_Main.dnh index 9103507..fead979 100644 --- a/script/player/Chimata/Chimata_Main.dnh +++ b/script/player/Chimata/Chimata_Main.dnh @@ -8,6 +8,8 @@ #ReplayName["Cirno"] +#include "script/KevinSystem/kevin_system/Lib_Const.dnh" + #include "script/KevinSystem/Kevin_PlayerLib.txt" #include "script/KevinSystem/PlayerSoundLib.dnh" @@ -96,6 +98,7 @@ const EV_PIV_2000 = EV_USER + 103i; // What. //SetPlayerSpell(99); + _Countdown(); _CAVELaser(); _ShotType(); //UniversalAlphaHandle(_shotArray); @@ -120,7 +123,7 @@ const EV_PIV_2000 = EV_USER + 103i; // What. // Delete effect case(EV_DELETE_SHOT_PLAYER){ - if(GetAreaCommonData("Config", "EffectCut", 0) >= 3){} + if(GetCommonDataPtr(EFFECTCUT_PTR, 0) >= 3){} else{ let graphic = GetEventArgument(2); @@ -182,6 +185,7 @@ const EV_PIV_2000 = EV_USER + 103i; // What. case(EV_PLAYER_REBIRTH){ ripplayer = false; SetPlayerInvincibilityFrame(180); + //_Countdown(); _SigilCall(false, teamimg, 768+256, 512, 768+512, 768, objPlayer, 150); } @@ -466,7 +470,7 @@ task _ShotType(){ task UpdateParam(){ loop{ shotDamage = 2.4+(GetCommonData("Rank", 1)*0.3); - shotScale = 0.6+(GetCommonData("Rank", 1)*0.125); + shotScale = 0.55+(GetCommonData("Rank", 1)*0.1); shotSpeed = 50+(GetCommonData("Rank", 1)*1.25); wait(60); } @@ -692,7 +696,7 @@ task parameterrender(){ SetPlayerDownStateFrame(60); SetPlayerAutoItemCollectLine(GetStgFrameHeight/3); SetPlayerRebirthLossFrame(0); - ObjPlayer_AddIntersectionCircleA1(objPlayer, 0, 0, 1.25, 40); + ObjPlayer_AddIntersectionCircleA1(objPlayer, 0, 0, 0, 40); } @@ -762,17 +766,19 @@ task _Bomb(){ // Preparation SetForbidPlayerShot(true); SetForbidPlayerSpell(true); - SetPlayerInvincibilityFrame(240); + SetPlayerInvincibilityFrame(270); // Spell object let manageObj = GetSpellManageObject(); // SPELL BEGINS ObjSpell_Regist(manageObj); //ObjSound_Play(bombsfx); - SetPlayerSpeed(PlayerSpd[0]*1.5, PlayerSpd[1]*1.5); + SetPlayerSpeed(PlayerSpd[0]*2, PlayerSpd[1]*2); // 180 seconds DEATH LASER //SetCommonData("IsBomb", true); + //_Countdown(270); + async{ loop(90){ Fire(); @@ -782,7 +788,7 @@ task _Bomb(){ } task Fire(){ - let shotA = CreatePlayerShotA1(playerX, playerY, 25, rand(-15, 195), shotDamage/10, 25, 2); + let shotA = CreatePlayerShotA1(playerX, playerY, 25, rand(-15, 195), shotDamage/20, 25, 2); _BulletRescalePlayer(shotA, 1.25, true, 1); ObjRender_SetAlpha(shotA, 255); Fading(shotA); @@ -811,15 +817,41 @@ task _Bomb(){ SetPlayerSpeed(PlayerSpd[0], PlayerSpd[1]); SetForbidPlayerShot(false); - //SetCommonData("IsBomb", false); + Obj_Delete(manageObj); // !!! IMPORTANT !!! wait(60); SetForbidPlayerSpell(false); - Obj_Delete(manageObj); // !!! IMPORTANT !!! } // Screenshake function for bomb's duration - adapted from Sparen's tutorials +task _Countdown(){ + + //int timer = time; + int counter = CreateTextObject( + playerX, playerY, 58, + "", "Origami Mommy", + 0xFFFFFF, 0xFFFFFF, + 0x1AEC8C, 10, + Obj_GetRenderPriorityI(objPlayer)+1 + ); + + ObjText_SetHorizontalAlignment(counter, ALIGNMENT_CENTER); + + while(true){ + + if(GetPlayerInvincibilityFrame() <= 0){Obj_SetVisible(counter, false);} + else{Obj_SetVisible(counter, true);} + ObjRender_SetPosition(counter, playerX, playerY - 140, 1); + ObjText_SetText(counter, IntToString(GetPlayerInvincibilityFrame())); + yield; + + } + + //Obj_Delete(counter); + +} + task _BombShake(shaketime, intensity){ float baseintensity = intensity; @@ -840,3 +872,27 @@ task _BombShake(shaketime, intensity){ yield; } +function CreateTextObject( + float mx, my, size, + string text, font, + int colorTop, colorBottom, + int borderColor, borderWidth, + int renderPriority + ){ + + let obj = ObjText_Create(); + ObjText_SetText(obj, text); + ObjText_SetFontSize(obj, size); + ObjText_SetFontType(obj, font); + ObjText_SetFontColorTop(obj, colorTop); + ObjText_SetFontColorBottom(obj, colorBottom); + ObjText_SetFontBorderType(obj, BORDER_FULL); + ObjText_SetFontBorderColor(obj, borderColor); + ObjText_SetFontBorderWidth(obj, borderWidth); + Obj_SetRenderPriorityI(obj, renderPriority); + ObjRender_SetX(obj, mx); + ObjRender_SetY(obj, my); + return obj; + +} + diff --git a/script/replay/Gay_Package_replay01.dat b/script/replay/Gay_Package_replay01.dat index 9131b98..311b448 100644 Binary files a/script/replay/Gay_Package_replay01.dat and b/script/replay/Gay_Package_replay01.dat differ diff --git a/th_dnh_ph3sx.log b/th_dnh_ph3sx.log deleted file mode 100644 index fa1aad1..0000000 Binary files a/th_dnh_ph3sx.log and /dev/null differ