Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #東方弾幕風[Player]
- #ScriptVersion[3]
- #ID["REIMU"]
- #Title["Reimu Hakurei"]
- #Text["Movement Speed: *** [r] Shot Damage: *** [r] Shot Range: ****"]
- #ReplayName["Reimu Hakurei"]
- let objPlayer = GetPlayerObjectID();
- let objSlowShot = ID_INVALID;
- function findClosestEnemyAngle(dataArr, objShot)
- {
- let max = 0;
- let resultAngle = 0;
- ascent(i in 0..length(dataArr))
- {
- let distData = GetObjectDistance(objShot, dataArr[i]);
- if(distData > max)
- {
- if(i > 0 && GetObjectDistance(objShot, dataArr[i - 1]) == distData)
- {
- return 270;
- }
- else
- {
- max = distData;
- resultAngle = atan2(ObjMove_GetY(dataArr[i]) - ObjMove_GetY(objShot), ObjMove_GetX(dataArr[i]) - ObjMove_GetX(objShot));
- }
- }
- }
- if(length(dataArr) > 0)
- {
- return resultAngle;
- }
- else
- {
- return 270;
- }
- }
- function findClosestEnemyDist(dataArr, objShot)
- {
- let max = 0;
- ascent(i in 0..length(dataArr))
- {
- let distData = GetObjectDistance(objShot, dataArr[i]);
- if(distData > max)
- {
- max = distData;
- }
- }
- if(length(dataArr) > 0)
- {
- return max;
- }
- else
- {
- return -1;
- }
- }
- function spawnAmulet(x, y, a, p)
- {
- let obj = CreatePlayerShotA1(x, y, 10, 270, p, p, 1);
- TManageAmulet(obj);
- }
- @Initialize
- {
- LoadPlayerShotData("script/player/Reimu Hakurei/Reimu_ShotData.txt");
- ObjPlayer_AddIntersectionCircleA1(objPlayer, 0, 0, 1, 20);
- SetPlayerPower(0);
- TImage;
- TShot;
- }
- @Event
- {
- alternative(GetEventType())
- case(EV_REQUEST_SPELL)
- {
- let spell = GetPlayerSpell();
- if(spell >= 1)
- {
- SetScriptResult(true);
- SetPlayerSpell(spell - 1);
- TSpell;
- }
- else
- {
- SetScriptResult(false);
- }
- }
- case(EV_HIT)
- {
- TPlayerDeath;
- }
- case(EV_PLAYER_REBIRTH)
- {
- SetPlayerSpell(3);
- SetPlayerInvincibilityFrame(180);
- }
- case(EV_GET_ITEM)
- {
- let itemType = GetEventArgument(0);
- alternative(itemType)
- case(ITEM_1UP)
- {
- SetPlayerLife(GetPlayerLife() + 1);
- }
- case(ITEM_SPELL)
- {
- SetPlayerSpell(GetPlayerSpell() + 1);
- }
- case(ITEM_POWER)
- {
- SetPlayerPower(GetPlayerPower() + 1);
- }
- case(ITEM_POINT)
- {
- AddPoint(1);
- if(GetStgFrameHeight() - GetPlayerY() <= GetStgFrameHeight() / 10)
- {
- AddScore(1000);
- }
- else if(GetStgFrameHeight() - GetPlayerY() <= GetStgFrameHeight() / 5)
- {
- AddScore(10000);
- }
- else if(GetStgFrameHeight() - GetPlayerY() <= GetStgFrameHeight() / 2)
- {
- AddScore(20000);
- }
- else if(GetStgFrameHeight() - GetPlayerY() <= GetStgFrameHeight() / 1.2)
- {
- AddScore(100000);
- }
- }
- }
- }
- @MainLoop
- {
- yield;
- }
- task TImage
- {
- ObjPrim_SetTexture(objPlayer, "script/player/Reimu Hakurei/Reimu_Sprite.png");
- loop
- {
- if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH || GetVirtualKeyState(VK_LEFT) == KEY_HOLD)
- {
- ObjSprite2D_SetSourceRect(objPlayer, 2, 131, 47, 188);
- }
- else if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH || GetVirtualKeyState(VK_RIGHT) == KEY_HOLD)
- {
- ObjSprite2D_SetSourceRect(objPlayer, 2, 67, 47, 124);
- }
- else
- {
- ObjSprite2D_SetSourceRect(objPlayer, 4, 3, 54, 58);
- }
- ObjSprite2D_SetDestCenter(objPlayer);
- yield;
- }
- }
- task TShot
- {
- let shotCount = -1;
- let bNextShot = false;
- loop
- {
- if((GetVirtualKeyState(VK_SHOT)==KEY_PUSH || GetVirtualKeyState(VK_SHOT)==KEY_HOLD || bNextShot==true) && shotCount==-1)
- {
- shotCount = 0;
- bNextShot = false;
- }
- if(GetVirtualKeyState(VK_SHOT)==KEY_HOLD && shotCount>0)
- {
- bNextShot = true;
- }
- if(GetVirtualKeyState(VK_SLOWMOVE) == KEY_PUSH || GetVirtualKeyState(VK_SLOWMOVE) == KEY_HOLD)
- {
- if(shotCount % 5 == 0)
- {
- if(GetPlayerPower() <= 8)
- {
- CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1, 1, 2);
- }
- if(GetPlayerPower() <= 16)
- {
- CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1.25, 1.25, 2);
- }
- if(GetPlayerPower() <= 32)
- {
- CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 270, 1.5, 1.5, 2);
- CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1.5, 1.5, 2);
- CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 270, 1.5, 1.5, 2);
- }
- if(GetPlayerPower() <= 64)
- {
- CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 270, 2, 2, 2);
- CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 2, 2, 2);
- CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 270, 2, 2, 2);
- }
- if(GetPlayerPower() == 255)
- {
- CreatePlayerShotA1(GetPlayerX() - 20, GetPlayerY(), 15, 270, 3, 3, 2);
- CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 270, 3, 3, 2);
- CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 3, 3, 2);
- CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 270, 3, 3, 2);
- CreatePlayerShotA1(GetPlayerX() + 20, GetPlayerY(), 15, 270, 3, 3, 2);
- }
- }
- }
- else
- {
- if(shotCount % 5 == 0)
- {
- if(GetPlayerPower() <= 8)
- {
- CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 0.75, 0.75, 2);
- }
- if(GetPlayerPower() <= 16)
- {
- CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1, 1, 2);
- }
- if(GetPlayerPower() <= 32)
- {
- CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 265, 1.25, 1.25, 2);
- CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1.25, 1.25, 2);
- CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 275, 1.25, 1.25, 2);
- }
- if(GetPlayerPower() <= 64)
- {
- CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 270, 1.5, 1.5, 2);
- CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1.5, 1.5, 2);
- CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 270, 1.5, 1.5, 2);
- }
- if(GetPlayerPower() == 256)
- {
- CreatePlayerShotA1(GetPlayerX() - 20, GetPlayerY(), 15, 260, 2, 2, 2);
- CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 265, 2, 2, 2);
- CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 2, 2, 2);
- CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 275, 2, 2, 2);
- CreatePlayerShotA1(GetPlayerX() + 20, GetPlayerY(), 15, 280, 2, 2, 2);
- }
- }
- if(shotCount % 15 == 0)
- {
- THoming;
- }
- }
- if(shotCount >= 0)
- {
- shotCount++;
- }
- if(shotCount == 30)
- {
- shotCount = -1;
- }
- yield;
- }
- }
- task TSpell
- {
- let manager = GetSpellManageObject();
- SetPlayerInvincibilityFrame(300);
- let obj = ObjSpell_Create();
- ObjPrim_SetTexture(obj, "script/player/Reimu Hakurei/Reimu_Bomb.png");
- ObjSprite2D_SetSourceRect(obj, 18, 17, 242, 239);
- ObjSprite2D_SetDestCenter(obj);
- Obj_SetRenderPriorityI(obj, 1000);
- ObjSpell_Regist(obj);
- ObjMove_SetPosition(obj, GetPlayerX(), GetPlayerY());
- ObjMove_SetDestAtFrame(obj, GetPlayerX(), (GetStgFrameHeight() / 2) + 50, 100);
- loop(100)
- {
- let ox = ObjMove_GetX(obj);
- let oy = ObjMove_GetY(obj);
- ObjSpell_SetIntersectionCircle(obj, ox, oy, 256);
- ObjSpell_SetDamage(obj, 2.5);
- yield;
- }
- Obj_Delete(obj);
- Obj_Delete(manager);
- }
- task TPlayerDeath
- {
- let obj = ObjPrim_Create(OBJ_SPRITE_2D);
- ObjPrim_SetTexture(obj, "script/player/Reimu Hakurei/Reimu_Sprite.png");
- ObjSprite2D_SetSourceRect(obj, 8, 207, 54, 251);
- ObjSprite2D_SetDestCenter(obj);
- let alpha = 255;
- let scale = 0;
- loop(30)
- {
- scale += 0.2;
- alpha -= 8;
- ObjRender_SetColor(obj, alpha, alpha, alpha);
- ObjRender_SetPosition(obj, GetPlayerX, GetPlayerY, 0);
- ObjRender_SetScaleXYZ(obj, scale, scale, 1);
- yield;
- }
- Obj_Delete(obj);
- }
- task THoming
- {
- if(GetPlayerPower() <= 8)
- {
- spawnAmulet(GetPlayerX(), GetPlayerY(), 270, 1);
- }
- if(GetPlayerPower() <= 16)
- {
- spawnAmulet(GetPlayerX(), GetPlayerY(), 270, 1.5);
- }
- if(GetPlayerPower() <= 32)
- {
- spawnAmulet(GetPlayerX(), GetPlayerY(), 265, 1.5);
- spawnAmulet(GetPlayerX(), GetPlayerY(), 275, 1.5);
- }
- if(GetPlayerPower() <= 64)
- {
- spawnAmulet(GetPlayerX(), GetPlayerY(), 265, 1.75);
- spawnAmulet(GetPlayerX(), GetPlayerY(), 270, 1.75);
- spawnAmulet(GetPlayerX(), GetPlayerY(), 275, 1.75);
- }
- if(GetPlayerPower() == 256)
- {
- spawnAmulet(GetPlayerX(), GetPlayerY(), 260, 2);
- spawnAmulet(GetPlayerX(), GetPlayerY(), 265, 2);
- spawnAmulet(GetPlayerX(), GetPlayerY(), 270, 2);
- spawnAmulet(GetPlayerX(), GetPlayerY(), 275, 2);
- spawnAmulet(GetPlayerX(), GetPlayerY(), 280, 2);
- }
- }
- task TManageAmulet(obj)
- {
- while(!Obj_IsDeleted(obj))
- {
- let data = GetIntersectionRegistedEnemyID();
- ObjMove_SetAngle(obj, findClosestEnemyAngle(data, obj));
- yield;
- if(findClosestEnemyDist(data, obj) == 0)
- {
- Obj_Delete(obj);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement