thanks hosts for 24hr extension uwu owo

This commit is contained in:
Kevinmonitor 2023-01-30 21:54:27 +07:00
parent d3ada59252
commit cb4d9d0881
24 changed files with 749 additions and 61 deletions

Binary file not shown.

View File

@ -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);

View File

@ -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);

View File

@ -273,8 +273,8 @@ function <int> _MushroomFairy(
_EnemyItemDrop(
enm, true,
smallFlyingEnm_itemPointMin, smallEnm_itemChainMin,
smallFlyingEnm_itemPointMax, smallEnm_itemChainMax,
medFlyingEnm_itemPointMin, smallEnm_itemChainMin,
medFlyingEnm_itemPointMax, smallEnm_itemChainMax,
invinTime*5, smallEnemyHitbox*2
);

View File

@ -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 <void> BossIntro(){
bool bossCurrentlyIntro = true;
@ -518,15 +732,16 @@ function <void> 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 <void> 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 <void> BossPhase1(){
function <void> 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 <void> BossPhase2(){
DeleteShotAll(TYPE_ALL, TYPE_ITEM);
_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 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 <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(){
@ -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);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
script/Jam10/config.dat Normal file

Binary file not shown.

BIN
script/Jam10/data_Pl0.dat Normal file

Binary file not shown.

BIN
script/Jam10/data_Pl1.dat Normal file

Binary file not shown.

Binary file not shown.

View File

@ -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"?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

View File

@ -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"?>

View File

@ -206,7 +206,7 @@ task TExtendSystem(){
// NARUMISTG
req = [
10, 20, 40, 80, 120
10, 30, 60, 120, 250
];
loop{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -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;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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