Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.50 KB | None | 0 0
  1. #東方弾幕風[Player]
  2. #ScriptVersion[3]
  3. #ID["REIMU"]
  4. #Title["Reimu Hakurei"]
  5. #Text["Movement Speed: *** [r] Shot Damage: *** [r] Shot Range: ****"]
  6. #ReplayName["Reimu Hakurei"]
  7. let objPlayer = GetPlayerObjectID();
  8. let objSlowShot = ID_INVALID;
  9. function findClosestEnemyAngle(dataArr, objShot)
  10. {
  11.     let max = 0;
  12.     let resultAngle = 0;
  13.     ascent(i in 0..length(dataArr))
  14.     {
  15.         let distData = GetObjectDistance(objShot, dataArr[i]);
  16.         if(distData > max)
  17.         {
  18.             if(i > 0 && GetObjectDistance(objShot, dataArr[i - 1]) == distData)
  19.             {
  20.                 return 270;
  21.             }
  22.             else
  23.             {
  24.                 max = distData;
  25.                 resultAngle = atan2(ObjMove_GetY(dataArr[i]) - ObjMove_GetY(objShot), ObjMove_GetX(dataArr[i]) - ObjMove_GetX(objShot));
  26.             }
  27.         }
  28.     }
  29.     if(length(dataArr) > 0)
  30.     {
  31.         return resultAngle;
  32.     }
  33.     else
  34.     {
  35.         return 270;
  36.     }
  37. }
  38. function findClosestEnemyDist(dataArr, objShot)
  39. {
  40.     let max = 0;
  41.     ascent(i in 0..length(dataArr))
  42.     {
  43.         let distData = GetObjectDistance(objShot, dataArr[i]);
  44.         if(distData > max)
  45.         {
  46.             max = distData;
  47.         }
  48.     }
  49.     if(length(dataArr) > 0)
  50.     {
  51.         return max;
  52.     }
  53.     else
  54.     {
  55.         return -1;
  56.     }
  57. }
  58. function spawnAmulet(x, y, a, p)
  59. {
  60.     let obj = CreatePlayerShotA1(x, y, 10, 270, p, p, 1);
  61.     TManageAmulet(obj);
  62. }
  63. @Initialize
  64. {
  65.     LoadPlayerShotData("script/player/Reimu Hakurei/Reimu_ShotData.txt");
  66.     ObjPlayer_AddIntersectionCircleA1(objPlayer, 0, 0, 1, 20);
  67.     SetPlayerPower(0);
  68.     TImage;
  69.     TShot;
  70. }
  71. @Event
  72. {
  73.     alternative(GetEventType())
  74.     case(EV_REQUEST_SPELL)
  75.     {
  76.         let spell = GetPlayerSpell();
  77.         if(spell >= 1)
  78.         {
  79.             SetScriptResult(true);
  80.             SetPlayerSpell(spell - 1);
  81.             TSpell;
  82.         }
  83.         else
  84.         {
  85.             SetScriptResult(false);
  86.         }
  87.     }
  88.     case(EV_HIT)
  89.     {
  90.         TPlayerDeath;
  91.     }
  92.     case(EV_PLAYER_REBIRTH)
  93.     {
  94.         SetPlayerSpell(3);
  95.         SetPlayerInvincibilityFrame(180);
  96.     }
  97.     case(EV_GET_ITEM)
  98.     {
  99.         let itemType = GetEventArgument(0);
  100.         alternative(itemType)
  101.         case(ITEM_1UP)
  102.         {
  103.             SetPlayerLife(GetPlayerLife() + 1);
  104.         }
  105.         case(ITEM_SPELL)
  106.         {
  107.             SetPlayerSpell(GetPlayerSpell() + 1);
  108.         }
  109.         case(ITEM_POWER)
  110.         {
  111.             SetPlayerPower(GetPlayerPower() + 1);
  112.         }
  113.         case(ITEM_POINT)
  114.         {
  115.             AddPoint(1);
  116.             if(GetStgFrameHeight() - GetPlayerY() <= GetStgFrameHeight() / 10)
  117.             {
  118.                 AddScore(1000);
  119.             }
  120.             else if(GetStgFrameHeight() - GetPlayerY() <= GetStgFrameHeight() / 5)
  121.             {
  122.                 AddScore(10000);
  123.             }
  124.             else if(GetStgFrameHeight() - GetPlayerY() <= GetStgFrameHeight() / 2)
  125.             {
  126.                 AddScore(20000);
  127.             }
  128.             else if(GetStgFrameHeight() - GetPlayerY() <= GetStgFrameHeight() / 1.2)
  129.             {
  130.                 AddScore(100000);
  131.             }
  132.         }
  133.     }
  134. }
  135. @MainLoop
  136. {
  137.     yield;
  138. }
  139. task TImage
  140. {
  141.     ObjPrim_SetTexture(objPlayer, "script/player/Reimu Hakurei/Reimu_Sprite.png");
  142.     loop
  143.     {
  144.         if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH || GetVirtualKeyState(VK_LEFT) == KEY_HOLD)
  145.         {
  146.             ObjSprite2D_SetSourceRect(objPlayer, 2, 131, 47, 188);
  147.         }
  148.         else if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH || GetVirtualKeyState(VK_RIGHT) == KEY_HOLD)
  149.         {
  150.             ObjSprite2D_SetSourceRect(objPlayer, 2, 67, 47, 124);
  151.         }
  152.         else
  153.         {
  154.             ObjSprite2D_SetSourceRect(objPlayer, 4, 3, 54, 58);
  155.         }
  156.         ObjSprite2D_SetDestCenter(objPlayer);
  157.         yield;
  158.     }
  159. }
  160. task TShot
  161. {
  162.     let shotCount = -1;
  163.     let bNextShot = false;
  164.     loop
  165.     {
  166.         if((GetVirtualKeyState(VK_SHOT)==KEY_PUSH || GetVirtualKeyState(VK_SHOT)==KEY_HOLD || bNextShot==true) && shotCount==-1)
  167.         {
  168.             shotCount = 0;
  169.             bNextShot = false;
  170.         }
  171.         if(GetVirtualKeyState(VK_SHOT)==KEY_HOLD && shotCount>0)
  172.         {
  173.             bNextShot = true;
  174.         }
  175.         if(GetVirtualKeyState(VK_SLOWMOVE) == KEY_PUSH || GetVirtualKeyState(VK_SLOWMOVE) == KEY_HOLD)
  176.         {
  177.             if(shotCount % 5 == 0)
  178.             {
  179.                 if(GetPlayerPower() <= 8)
  180.                 {
  181.                     CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1, 1, 2);
  182.                 }
  183.                 if(GetPlayerPower() <= 16)
  184.                 {
  185.                     CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1.25, 1.25, 2);
  186.                 }
  187.                 if(GetPlayerPower() <= 32)
  188.                 {
  189.                     CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 270, 1.5, 1.5, 2);
  190.                     CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1.5, 1.5, 2);
  191.                     CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 270, 1.5, 1.5, 2);
  192.                 }
  193.                 if(GetPlayerPower() <= 64)
  194.                 {
  195.                     CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 270, 2, 2, 2);
  196.                     CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 2, 2, 2);
  197.                     CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 270, 2, 2, 2);
  198.                 }
  199.                 if(GetPlayerPower() == 255)
  200.                 {
  201.                     CreatePlayerShotA1(GetPlayerX() - 20, GetPlayerY(), 15, 270, 3, 3, 2);
  202.                     CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 270, 3, 3, 2);
  203.                     CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 3, 3, 2);
  204.                     CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 270, 3, 3, 2);
  205.                     CreatePlayerShotA1(GetPlayerX() + 20, GetPlayerY(), 15, 270, 3, 3, 2);
  206.                 }
  207.             }
  208.         }
  209.         else
  210.         {
  211.             if(shotCount % 5 == 0)
  212.             {
  213.                 if(GetPlayerPower() <= 8)
  214.                 {
  215.                     CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 0.75, 0.75, 2);
  216.                 }
  217.                 if(GetPlayerPower() <= 16)
  218.                 {
  219.                     CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1, 1, 2);
  220.                 }
  221.                 if(GetPlayerPower() <= 32)
  222.                 {
  223.                     CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 265, 1.25, 1.25, 2);
  224.                     CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1.25, 1.25, 2);
  225.                     CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 275, 1.25, 1.25, 2);
  226.                 }
  227.                 if(GetPlayerPower() <= 64)
  228.                 {
  229.                     CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 270, 1.5, 1.5, 2);
  230.                     CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 1.5, 1.5, 2);
  231.                     CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 270, 1.5, 1.5, 2);
  232.                 }
  233.                 if(GetPlayerPower() == 256)
  234.                 {
  235.                     CreatePlayerShotA1(GetPlayerX() - 20, GetPlayerY(), 15, 260, 2, 2, 2);
  236.                     CreatePlayerShotA1(GetPlayerX() - 10, GetPlayerY(), 15, 265, 2, 2, 2);
  237.                     CreatePlayerShotA1(GetPlayerX(), GetPlayerY(), 15, 270, 2, 2, 2);
  238.                     CreatePlayerShotA1(GetPlayerX() + 10, GetPlayerY(), 15, 275, 2, 2, 2);
  239.                     CreatePlayerShotA1(GetPlayerX() + 20, GetPlayerY(), 15, 280, 2, 2, 2);
  240.                 }
  241.             }
  242.             if(shotCount % 15 == 0)
  243.             {
  244.                 THoming;
  245.             }
  246.         }
  247.         if(shotCount >= 0)
  248.         {
  249.             shotCount++;
  250.         }
  251.         if(shotCount == 30)
  252.         {
  253.             shotCount = -1;
  254.         }
  255.         yield;
  256.     }
  257. }
  258. task TSpell
  259. {
  260.     let manager = GetSpellManageObject();
  261.     SetPlayerInvincibilityFrame(300);
  262.     let obj = ObjSpell_Create();
  263.     ObjPrim_SetTexture(obj, "script/player/Reimu Hakurei/Reimu_Bomb.png");
  264.     ObjSprite2D_SetSourceRect(obj, 18, 17, 242, 239);
  265.     ObjSprite2D_SetDestCenter(obj);
  266.     Obj_SetRenderPriorityI(obj, 1000);
  267.     ObjSpell_Regist(obj);
  268.     ObjMove_SetPosition(obj, GetPlayerX(), GetPlayerY());
  269.     ObjMove_SetDestAtFrame(obj, GetPlayerX(), (GetStgFrameHeight() / 2) + 50, 100);
  270.     loop(100)
  271.     {
  272.         let ox = ObjMove_GetX(obj);
  273.         let oy = ObjMove_GetY(obj);
  274.         ObjSpell_SetIntersectionCircle(obj, ox, oy, 256);
  275.         ObjSpell_SetDamage(obj, 2.5);
  276.         yield;
  277.     }
  278.     Obj_Delete(obj);
  279.     Obj_Delete(manager);
  280. }
  281. task TPlayerDeath
  282. {
  283.     let obj = ObjPrim_Create(OBJ_SPRITE_2D);
  284.     ObjPrim_SetTexture(obj, "script/player/Reimu Hakurei/Reimu_Sprite.png");
  285.     ObjSprite2D_SetSourceRect(obj, 8, 207, 54, 251);
  286.     ObjSprite2D_SetDestCenter(obj);
  287.     let alpha = 255;
  288.     let scale = 0;
  289.     loop(30)
  290.     {
  291.         scale += 0.2;
  292.         alpha -= 8;
  293.         ObjRender_SetColor(obj, alpha, alpha, alpha);
  294.         ObjRender_SetPosition(obj, GetPlayerX, GetPlayerY, 0);
  295.         ObjRender_SetScaleXYZ(obj, scale, scale, 1);
  296.         yield;
  297.     }
  298.     Obj_Delete(obj);
  299. }
  300. task THoming
  301. {
  302.     if(GetPlayerPower() <= 8)
  303.     {
  304.         spawnAmulet(GetPlayerX(), GetPlayerY(), 270, 1);
  305.     }
  306.     if(GetPlayerPower() <= 16)
  307.     {
  308.         spawnAmulet(GetPlayerX(), GetPlayerY(), 270, 1.5);
  309.     }
  310.     if(GetPlayerPower() <= 32)
  311.     {
  312.         spawnAmulet(GetPlayerX(), GetPlayerY(), 265, 1.5);
  313.         spawnAmulet(GetPlayerX(), GetPlayerY(), 275, 1.5);
  314.     }
  315.     if(GetPlayerPower() <= 64)
  316.     {
  317.         spawnAmulet(GetPlayerX(), GetPlayerY(), 265, 1.75);
  318.         spawnAmulet(GetPlayerX(), GetPlayerY(), 270, 1.75);
  319.         spawnAmulet(GetPlayerX(), GetPlayerY(), 275, 1.75);
  320.     }
  321.     if(GetPlayerPower() == 256)
  322.     {
  323.         spawnAmulet(GetPlayerX(), GetPlayerY(), 260, 2);
  324.         spawnAmulet(GetPlayerX(), GetPlayerY(), 265, 2);
  325.         spawnAmulet(GetPlayerX(), GetPlayerY(), 270, 2);
  326.         spawnAmulet(GetPlayerX(), GetPlayerY(), 275, 2);
  327.         spawnAmulet(GetPlayerX(), GetPlayerY(), 280, 2);
  328.     }
  329. }
  330. task TManageAmulet(obj)
  331. {
  332.     while(!Obj_IsDeleted(obj))
  333.     {
  334.         let data = GetIntersectionRegistedEnemyID();
  335.         ObjMove_SetAngle(obj, findClosestEnemyAngle(data, obj));
  336.         yield;
  337.         if(findClosestEnemyDist(data, obj) == 0)
  338.         {
  339.             Obj_Delete(obj);
  340.         }
  341.     }
  342. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement