#TouhouDanmakufu[Single] #ScriptVersion[3] #Title["Remilia Spell 1 (Remilia Card)"] #Text["yassification"] #System["script/KevinSystem/Kevin_System.txt"] int difficultySelect = 0; let objScene = GetEnemyBossSceneObjectID(); let csd = GetCurrentScriptDirectory(); let bossObj; float bossX = 0; float bossY = 0; float playerY = 0; float playerX = 0; let aniframe = 0; let aniframe2 = 0; let spellsnd = ObjSound_Create(); let bossdiesnd = ObjSound_Create(); /* Parameters: - Remilia wait time - Spiral density - Spiral angle offset per frame - Ring density - Ring (max) speed - Delays between rings */ int denseSpiral = [12, 15, 18]; int angleoffsetSpiral = [3, 4, 6]; int[] denseRing = [10, 12, 14]; float[] maxspeedRing = [8, 9, 11]; int[] deceltimeRing = [20, 30, 40]; int[] acceltimeRing = [60, 45, 35]; // Remilia takes 36 frames. Preferably, pick a number 36 can divide with. int[] delayRing = [9, 6, 5]; // How much time Remilia takes to charge her attack and you get to GTFO. int[] waittimeRemi = [75, 60, 50]; string tex = "script/game/resourceLib/Spritesheet_StationJam.png"; //LoadTextureEx(tex, true, true); // Includes ahoy #include "script/KevinSystem/Universal_Lib.txt" // The library to include all libraries :sans: :nail_care: @Initialize { //SetIntersectionVisualization(true); SetAutoDeleteObject(true); _InitDifficulty(difficultySelect); difficultySelect = 0; // debug SetShotAutoDeleteClip(64, 64, 64, 64); if(!IsCommonDataAreaExists("PIV")){ CreateCommonDataArea("PIV"); SetAreaCommonData("PIV", "currentvalue", 10000); } else{} // Create the boss object itself bossObj = ObjEnemy_Create(OBJ_ENEMY_BOSS); ObjEnemy_Regist(bossObj); ObjMove_SetPosition(bossObj, GetCommonData("Boss Position X", STG_WIDTH/2), GetCommonData("Boss Position Y", STG_HEIGHT/2)); ObjEnemy_SetMaximumDamage(bossObj, 999); _RenderBoss(bossObj); //WriteLog(spellPIV); WriteLog(ObjEnemyBossScene_GetInfo(objScene, INFO_SPELL_SCORE)); mainTask(); _FadeInvincibility(bossObj, 150, 150, 1); endingnew(); } @Event { alternative(GetEventType()) case(EV_REQUEST_LIFE) { SetScriptResult(4000); } case(EV_REQUEST_TIMER) { SetScriptResult(40); } } @MainLoop { playerY = GetPlayerY(); playerX = GetPlayerX(); //The player position is ALWAYS UPDATED bossX = ObjMove_GetX(bossObj); bossY = ObjMove_GetY(bossObj); ObjEnemy_SetIntersectionCircleToShot(bossObj, ObjMove_GetX(bossObj), ObjMove_GetY(bossObj), 100); yield; } @Finalize { } /* Remi Spell 1 Remi moves to your current position (takes 36 frames), fires a dense star of stars (lol) that fades away quickly, and waits a set number of frames before repeating. After 3 waves of this, she moves to the middle and shoots a thick spiral of fireballs that requires you to spin around the screen for a bit. She also leaves behind trails of rings with every dash. Remilia takes 36 frames to move to you each time. -> delay between rings: 9, 6, 5 Parameters: - Remilia wait time - Spiral density - Spiral speed - Spiral angle offset per frame - Ring density - Ring speed - Delays between rings */ task mainTask { } function _VampireChase(){ ObjMove_SetDestAtFrame(bossObj, playerX, playerY, 36, LERP_DECELERATE); loop(36/delayRing){ ascent(i in 0..denseRing[difficultySelect]){ int shot = CreateShotA2(bossX, bossY, maxspeedRing[difficultySelect], ang + 360/denseRing[difficultySelect] * i, -maxspeedRing[difficultySelect]/deceltimeRing[difficultySelect], 0, 0, color, 10); if(ObjEnemy_GetInfo(bossObj, INFO_LIFE) <= 0){Obj_Delete(shot);} else{ _Delay(shot, 10); ObjMove_AddPatternA2(shot, 30, NO_CHANGE, NO_CHANGE, maxspeedRing[difficultySelect]/acceltimeRing[difficultySelect], maxspeedRing[difficultySelect], 0); _BulletRescale(shot, 0.65, true, 1); //Shoot1; } } wait(delayRing); } } task endingnew(){ while(ObjEnemy_GetInfo(bossObj, INFO_LIFE)>0){ yield; } _GoToBrazil(objScene, bossObj, 12, 24); wait(120); ObjSound_SetVolumeRate(fire2, 20); CloseScript(GetOwnScriptID); }