Advertisement
KarinaSnow

Woo, Danmaku Code.

Mar 11th, 2015
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. #TouhouDanmakufu[Single]
  2. #ScriptVersion[3]
  3. #Title["My First Danmakufu Script!"]
  4. #Text["By Karina"]
  5. #BGM[""]
  6.  
  7. #include"script/default_system/Default_ShotConst.txt"
  8.  
  9. let objBoss;
  10. let objScene=GetEnemyBossSceneObjectID();
  11. let count = 0;
  12.  
  13. @Event{
  14. alternative(GetEventType())
  15. case(EV_REQUEST_LIFE){
  16. SetScriptResult(2500);
  17. }
  18. case(EV_REQUEST_TIMER){
  19. SetScriptResult(60);
  20. }
  21. case(EV_REQUEST_SPELL_SCORE){
  22. SetScriptResult(30000000);
  23. }
  24. }
  25.  
  26. @Initialize{
  27.  
  28. task TDrawLoop {
  29. let imgExRumia = GetCurrentScriptDirectory ~ "ExRumia.png";
  30. ObjPrim_SetTexture(objBoss, imgExRumia);
  31. ObjSprite2D_SetSourceRect(objBoss, 64, 1, 127, 64);
  32. }
  33. objBoss = ObjEnemy_Create(OBJ_ENEMY_BOSS);
  34. ObjEnemy_Regist(objBoss);
  35. let imgExRumia = GetCurrentScriptDirectory ~ "ExRumia.png";
  36. ObjPrim_SetTexture(objBoss, imgExRumia);
  37. ObjSprite2D_SetSourceRect(objBoss, 64, 1, 127, 64);
  38. ObjSprite2D_SetDestCenter(objBoss);
  39. ObjMove_SetDestAtFrame(objBoss, GetCenterX, 60, 60);
  40.  
  41. ObjEnemyBossScene_StartSpell(objScene);
  42. if(count==0){movement;}
  43. TFinalize;
  44. }
  45.  
  46. @MainLoop{
  47. ObjEnemy_SetIntersectionCircleToShot(objBoss, ObjMove_GetX(objBoss), ObjMove_GetY(objBoss), 32);
  48. ObjEnemy_SetIntersectionCircleToPlayer(objBoss, ObjMove_GetX(objBoss), ObjMove_GetY(objBoss), 24);
  49.  
  50. if(count%15==0){
  51. fireB;
  52. }
  53. if(count%20==0){
  54. fire;
  55. }
  56. count++;
  57. yield;
  58. }
  59.  
  60. task fire{
  61. if(ObjEnemy_GetInfo(objBoss, INFO_LIFE) <= 0){return;}
  62. let angleT = GetAngleToPlayer(objBoss);
  63. ascent(i in 0..8){
  64. CreateShotA1(ObjMove_GetX(objBoss)-35, ObjMove_GetY(objBoss), 1.1+i, angleT+5*i, DS_BALL_S_RED+i, 5);
  65. CreateShotA1(ObjMove_GetX(objBoss)+35, ObjMove_GetY(objBoss), 1.1+i, angleT-5*i, DS_BALL_S_RED+i, 5);
  66. CreateShotA1(ObjMove_GetX(objBoss)-35, ObjMove_GetY(objBoss), 2.1+1, angleT+5, DS_BALL_S_RED+i, 5);
  67. CreateShotA1(ObjMove_GetX(objBoss)+35, ObjMove_GetY(objBoss), 2.1, angleT-5, DS_BALL_S_RED+i, 5);
  68. }
  69. angleT+=360/180;
  70. }
  71.  
  72. task fireB{
  73. let n=1;
  74. let angleT = GetAngleToPlayer(objBoss);
  75.  
  76. loop(13){
  77. ascent(i in 0..8){
  78. CreateShotA1(ObjMove_GetX(objBoss), ObjMove_GetY(objBoss), 2.5, angleT+count, DS_RICE_S_WHITE, 5);
  79. n++;
  80. }
  81. angleT+=360/13;
  82. }
  83. }
  84. task fireC{
  85. }
  86.  
  87. task movement{
  88. while(ObjEnemy_GetInfo(objBoss,INFO_LIFE)>0){
  89. ObjMove_SetDestAtFrame(objBoss, rand(GetCenterX+120,GetCenterX-120), rand(GetCenterY-120,GetCenterY-120), 60);
  90. wait(300);
  91. }
  92. }
  93. task TFinalize {
  94. while(ObjEnemy_GetInfo(objBoss,INFO_LIFE)>0){yield;}
  95. if(ObjEnemyBossScene_GetInfo(objScene, INFO_PLAYER_SHOOTDOWN_COUNT)
  96. +ObjEnemyBossScene_GetInfo(objScene, INFO_PLAYER_SPELL_COUNT) == 0){
  97. AddScore(ObjEnemyBossScene_GetInfo(objScene,INFO_SPELL_SCORE));
  98. }
  99. Obj_Delete(objBoss);
  100. DeleteShotAll(TYPE_ALL,TYPE_IMMEDIATE);
  101. SetAutoDeleteObject(true);
  102. CloseScript(GetOwnScriptID());
  103. return;
  104. }
  105.  
  106. function GetCenterX{
  107. return GetStgFrameWidth/2;
  108. }
  109. function GetCenterY{
  110. return GetStgFrameHeight/2;
  111. }
  112.  
  113. function wait(n){
  114. loop(n){yield;}
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement