Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- script_spell FantasySeal {
- let imgSpell = GetCurrentScriptDirectory~"reimu-spell.png";
- let SfxSpell1 = GetCurrentScriptDirectory~"spell1.wav";
- let SfxSpell2 = GetCurrentScriptDirectory~"spell2.wav";
- @Initialize {
- LoadGraphic(imgSpell);
- LoadSE(SfxSpell1);
- LoadSE(SfxSpell2);
- SetPlayerInvincibility(240);
- ForbidShot(true);
- // SetSpeed(3, 3);
- Tmain;
- }
- task TBexplosion(x, y, color) {
- let object = Obj_Create(OBJ_SPELL);
- let radius = 0;
- Obj_SetAlpha(object, 200);
- ObjEffect_SetTexture(object, imgSpell);
- ObjEffect_SetRenderState(object, ALPHA);
- ObjEffect_CreateVertex(object, 4);
- ObjEffect_SetPrimitiveType(object,PRIMITIVE_TRIANGLEFAN);
- ObjEffect_SetVertexUV(object, 0, 128, 0 + 128 * color);
- ObjEffect_SetVertexUV(object, 1, 256, 0 + 128 * color);
- ObjEffect_SetVertexUV(object, 2, 256,128 + 128 * color);
- ObjEffect_SetVertexUV(object, 3, 128,128 + 128 * color);
- let slide = 50;
- ascent(i in 0..slide) {
- radius += 8;
- let alpha = 200 * (slide - i) / slide;
- ObjEffect_SetVertexColor(object, 0, alpha, 255, 255, 255);
- ObjEffect_SetVertexColor(object, 1, alpha, 255, 255, 255);
- ObjEffect_SetVertexColor(object, 2, alpha, 255, 255, 255);
- ObjEffect_SetVertexColor(object, 3, alpha, 255, 255, 255);
- ObjEffect_SetVertexXY(object, 0, x - radius, y - radius);
- ObjEffect_SetVertexXY(object, 1, x + radius, y - radius);
- ObjEffect_SetVertexXY(object, 2, x + radius, y + radius);
- ObjEffect_SetVertexXY(object, 3, x - radius, y + radius);
- yield;
- SetIntersectionCircle(x, y, radius, 3, true);
- }
- }
- task TBorb(angle, color, target) {
- let object = Obj_Create(OBJ_SPELL);
- let x = GetPlayerX;
- let y = GetPlayerY;
- let shotAngle = angle;
- let imgAngle = 0;
- let radius = 1;
- Obj_SetAlpha(object, 200);
- ObjEffect_SetTexture(object, imgSpell);
- ObjEffect_SetRenderState(object, ADD);
- ObjEffect_CreateVertex(object, 4);
- ObjEffect_SetPrimitiveType(object,PRIMITIVE_TRIANGLEFAN);
- ObjEffect_SetVertexUV(object, 0, 1, 0 + 128 * color);
- ObjEffect_SetVertexUV(object, 1, 127, 0 + 128 * color);
- ObjEffect_SetVertexUV(object, 2, 127,128 + 128 * color);
- ObjEffect_SetVertexUV(object, 3, 1,128 + 128 * color);
- let slide = 40;
- ascent(i in 0..slide) {
- let speed = 6 * (slide - i) / slide;
- x += speed * cos(shotAngle);
- y += speed * sin(shotAngle);
- radius += (64 - radius) * 0.05;
- ObjEffect_SetVertexXY(object, 0, x - radius, y - radius);
- ObjEffect_SetVertexXY(object, 1, x + radius, y - radius);
- ObjEffect_SetVertexXY(object, 2, x + radius, y + radius);
- ObjEffect_SetVertexXY(object, 3, x - radius, y + radius);
- SetIntersectionCircle(x, y, radius, 0.3, true);
- yield;
- }
- let enemyTarget = -1;
- let enemyDist = 100000;
- let enemyAngle = angle + 180;
- let targetBoss = false;
- // Find nearest enemy
- if(IsBossExisting()) {
- targetBoss = true;
- } else {
- ascent(i in EnumEnemyBegin..EnumEnemyEnd) {
- let testEnemyTarget = EnumEnemyGetID(i);
- if(GetEnemyInfo(testEnemyTarget, ENEMY_LIFE) > 0 && GetEnemyInfo(testEnemyTarget, ENEMY_LIFE) < 9000) {
- let testDist = ((GetEnemyInfo(testEnemyTarget, ENEMY_X) - GetPlayerX) *
- (GetEnemyInfo(testEnemyTarget, ENEMY_X) - GetPlayerX)) +
- ((GetEnemyInfo(testEnemyTarget, ENEMY_Y) - GetPlayerY) *
- (GetEnemyInfo(testEnemyTarget, ENEMY_Y) - GetPlayerY));
- if(testDist < enemyDist) {
- enemyTarget = testEnemyTarget;
- enemyDist = testDist;
- }
- }
- }
- }
- let speed = 0;
- loop(120) {
- // Aim at enemy
- if(targetBoss || enemyTarget != -1) {
- if(targetBoss) {
- enemyAngle = atan2(GetEnemyY - y, GetEnemyX - x);
- } else {
- enemyAngle = atan2(GetEnemyInfo(enemyTarget, ENEMY_Y) - y, GetEnemyInfo(enemyTarget, ENEMY_X) - x);
- }
- let angleDifference = shotAngle - enemyAngle;
- while(angleDifference < -180) {
- angleDifference += 360;
- }
- while(angleDifference > 180) {
- angleDifference -= 360;
- }
- if(angleDifference < 0) {
- shotAngle += 24;
- } else if(angleDifference > 0) {
- shotAngle -= 24
- }
- }
- speed += 0.05;
- x += speed * cos(shotAngle);
- y += speed * sin(shotAngle);
- ObjEffect_SetVertexXY(object, 0, x - radius * sin(-angle) - radius * cos(angle), y - radius * cos(-angle) - radius * sin(angle));
- ObjEffect_SetVertexXY(object, 1, x + radius * sin(-angle) - radius * cos(angle), y + radius * cos(-angle) - radius * sin(angle));
- ObjEffect_SetVertexXY(object, 2, x + radius * sin(-angle) + radius * cos(angle), y + radius * cos(-angle) + radius * sin(angle));
- ObjEffect_SetVertexXY(object, 3, x - radius * sin(-angle) + radius * cos(angle), y - radius * cos(-angle) + radius * sin(angle));
- SetIntersectionCircle(x, y, 64, 0.3, true);
- yield;
- }
- TBexplosion(x, y, color);
- PlaySE(SfxSpell2);
- Obj_Delete(object);
- }
- task Tmain {
- loop(50){yield}
- // Orb
- ascent(i in 0..4) {
- TBorb(i * 45, i, 2*i);
- TBorb(180 + i * 45, i, 2*i+1);
- PlaySE(SfxSpell1);
- loop(10){yield}
- }
- loop(180){yield}
- ForbidShot(false);
- End();
- }
- @MainLoop {
- CollectItems();
- yield;
- }
- @Finalize {
- DeleteGraphic(imgSpell);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment