Advertisement
Guest User

Untitled

a guest
Jun 19th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.61 KB | None | 0 0
  1. #TouhouDanmakufu
  2. #Title["Purple Sun of Xereus"]
  3. #Text[]
  4. #Player[MARISA]
  5. #ScriptVersion[2]
  6.  
  7. script_enemy_main
  8. {
  9.  
  10. let ImgBoss = GetCurrentScriptDirectory~"system/Moon.png";
  11.  
  12. let CSD = GetCurrentScriptDirectory;
  13. let ShotData = CSD ~ "system/supershot.txt";
  14.  
  15. let bg = CSD ~ "system/arapbg.png";
  16. let s = 0;
  17.  
  18. let phase;
  19. let phasecounter = 0;
  20.  
  21. @Initialize
  22. {
  23. SetLife(450);
  24. SetDamageRateEx(8,5,5,3);
  25. SetTimer(125);
  26. SetScore(100000);
  27. SetInvincibility(120);
  28. SetMovePosition01(GetCenterX, 120,3);
  29. SetEffectForZeroLife(120, 140, 1);
  30.  
  31. LoadGraphic(ImgBoss);
  32. LoadGraphic(bg);
  33. LoadUserShotData(ShotData);
  34.  
  35. ForbidBomb(true);
  36. MagicCircle(false);
  37.  
  38. activity;
  39. }
  40.  
  41. @MainLoop
  42. {
  43. if(OnPlayerMissed==true) { DeleteEnemyShotInCircle(ALL,GetPlayerX,GetPlayerY,112); }
  44. phasecounter++;
  45.  
  46. if (phasecounter >= 0 && phasecounter < 600) { phase = 0; }
  47. if (phasecounter >= 600 && phasecounter < 1800) { phase = 1; }
  48. if (phasecounter >= 1800 && phasecounter < 3050) { phase = 2; }
  49. if (phasecounter >= 3050 && phasecounter < 3890) { phase = 2.5; }
  50. if (phasecounter >= 3890 && phasecounter < 6890) { phase = 3; }
  51. if (phasecounter >= 6990) { phase = 4; }
  52.  
  53. /*if (phasecounter >= 0 && phasecounter < 600) { phase = 0; }
  54. if (phasecounter >= 600 && phasecounter < 1800) { phase = 1; }
  55. if (phasecounter >= 1800 && phasecounter < 4400) { phase = 2; }
  56. if (phasecounter >= 4400 && phasecounter < 5600) { phase = 2.5; }
  57. if (phasecounter >= 5600 && phasecounter < 8100) { phase = 3; }
  58. if (phasecounter >= 8700) { phase = 4; }*/
  59. if (GetTimer < 4) { AddLife(-450); }
  60. yield;
  61. }
  62.  
  63. @DrawLoop
  64. {
  65. SetTexture(ImgBoss);
  66. SetRenderState(ALPHA);
  67. if (phasecounter > 180) { SetAlpha(1); }
  68. else { SetAlpha(255); }
  69. SetGraphicRect(0,0,218,214);
  70. SetGraphicScale(0.2,0.2);
  71. SetGraphicAngle(0,0,0);
  72. DrawGraphic(GetX,GetY);
  73. DrawText("Placeholder Boss",35,30,12,255);
  74. }
  75.  
  76. @BackGround
  77. {
  78. SetTexture(bg);
  79. SetRenderState(ALPHA);
  80. SetAlpha(255);
  81. SetGraphicRect(0,0,10240,448);
  82. SetGraphicScale(1,1);
  83. SetGraphicAngle(0,0,0);
  84. DrawGraphic(GetCenterX-s,GetCenterY);
  85. s+=0.05;
  86. }
  87.  
  88. @Finalize
  89. {
  90. if(GotSpellCardBonus) { PlaySE(CSD ~ "sfx/se_cardget.wav"); }
  91. DeleteGraphic(ImgBoss);
  92. DeleteGraphic(bg);
  93. }
  94.  
  95. task activity
  96. {
  97. wait(120);
  98. sunspawn;
  99. movement;
  100. time;
  101. hitNoise;
  102. }
  103.  
  104. task sunspawn
  105. {
  106. CreateEnemyFromScript("purplesun",GetEnemyX,GetEnemyY,0,0,0);
  107. }
  108.  
  109. task movement
  110. {
  111. let x = 0;
  112. let speed = 0;
  113. let playerX;
  114. let playerY;
  115. Concentration01(30);
  116. wait(20);
  117. Concentration01(90);
  118. while(x == 0)
  119. {
  120. if(phase == 0)
  121. {
  122. SetMovePosition03(GetEnemyX,75,10,0.5);
  123. }
  124. while(phase == 4)
  125. {
  126. if(phasecounter == 6990) { playerX = GetPlayerX; playerY = GetPlayerY; }
  127. SetMovePosition03(playerX,playerY+300,200,speed);
  128. speed+=0.01;
  129. yield;
  130. }
  131. yield;
  132. }
  133. }
  134.  
  135. task hitNoise
  136. {
  137. let enemyhp = GetEnemyLife / 100 * 10;
  138. loop
  139. {
  140. let currenthp = GetEnemyLife;
  141. wait(3);
  142. let newhp = GetEnemyLife;
  143. if(newhp<currenthp && newhp>enemyhp) { PlaySE(GetCurrentScriptDirectory~"sfx\se_damage00.wav"); }
  144. if(newhp<currenthp && newhp<enemyhp) { PlaySE(GetCurrentScriptDirectory~"sfx\se_damage01.wav"); }
  145. yield;
  146. }
  147. }
  148.  
  149. task time
  150. {
  151. loop {
  152. wait(60);
  153. if(GetTimer<=10) { PlaySE(CSD~"sfx\se_timeout.wav"); }
  154. if(GetTimer<=5){ PlaySE(CSD~"sfx\se_timeout2.wav"); }
  155. yield;
  156. }
  157.  
  158. }
  159.  
  160. function wait(w)
  161. {
  162. loop(w)
  163. {
  164. yield;
  165. }
  166. }
  167.  
  168. }
  169.  
  170. ///////////////////////////////////////
  171. //The Purple Sun of Xereus
  172. ///////////////////////////////////////
  173.  
  174. script_enemy purplesun
  175. {
  176. let CSD = GetCurrentScriptDirectory;
  177. let suntop = CSD ~ "system/PurpleSun.png";
  178. let sunmiddle = CSD ~ "system/PurpleSun2.png";
  179. let sunbottom = CSD ~ "system/PurpleSunAlpha.png";
  180. let skull = CSD ~ "system/cautionskull.png";
  181. let phasecounter = 0;
  182. let phase;
  183.  
  184. @Initialize
  185. {
  186. LoadGraphic(sunspawn);
  187. LoadGraphic(suntop);
  188. LoadGraphic(sunmiddle);
  189. LoadGraphic(sunbottom);
  190. SetLife(10000);
  191. SetInvincibility(60);
  192.  
  193. activity;
  194. }
  195.  
  196. @MainLoop
  197. {
  198. SetCollisionA(GetX,GetY,32);
  199. //SetCollisionB(GetX,GetY,6);
  200. phasecounter++;
  201. if (phasecounter >= 0 && phasecounter < 600) { phase = 0; }
  202. if (phasecounter >= 600 && phasecounter < 1800) { phase = 1; }
  203. if (phasecounter >= 1800 && phasecounter < 3050) { phase = 2; }
  204. if (phasecounter >= 3050 && phasecounter < 3890) { phase = 2.5; }
  205. //if (phasecounter == 4250) { PlaySE(CSD ~ "sfx\se_caution.wav"); }
  206. if (phasecounter >= 3890 && phasecounter < 6890) { phase = 3; }
  207. if (phasecounter >= 6890) { phase = 4; }
  208. yield;
  209. }
  210.  
  211. @DrawLoop
  212. {
  213. SetTexture(sunspawn);
  214. SetRenderState(ALPHA);
  215. SetAlpha(1);
  216. SetGraphicScale(1,1);
  217. SetGraphicRect(0,0,62,65);
  218. DrawGraphic(GetX,GetY);
  219. }
  220.  
  221. @Finalize
  222. {
  223. DeleteGraphic(sunspawn);
  224. yield;
  225. }
  226.  
  227. task activity
  228. {
  229. forming;
  230. wait(180);
  231. //caution;
  232. //gravity;
  233. creation;
  234. movement;
  235. growing;
  236. }
  237.  
  238. task forming
  239. {
  240. Concentration01(120);
  241. SetMovePosition03(GetEnemyX,GetEnemyY+85,20,0.5);
  242. wait(60);
  243. SetColor(255,0,255);
  244. Concentration01(180);
  245. wait(120);
  246. loop(4)
  247. {
  248. Concentration01(240);
  249. SetColor(255,255,255);
  250. wait(200);
  251. Explosion01(GetX,GetY,0,0.1,180);
  252. Concentration01(30);
  253. SetColor(255,0,255);
  254. yield;
  255. }
  256. }
  257.  
  258. task creation
  259. {
  260. purplesun("ADD",suntop,2,"clockwise",0.05);
  261. purplesun("ADD",sunmiddle,1,"clockwise",0.05);
  262. purplesun("ADD",sunmiddle,1,"counterclockwise",0.1);
  263. purplesun("ALPHA",sunbottom,1,"counterclockwise",0.05);
  264.  
  265. }
  266.  
  267. task gravity
  268. {
  269. let x = 0;
  270. while(x == 0)
  271. {
  272. while(phase == 0)
  273. {
  274. if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+2); wait(1); SetPlayerX(GetPlayerX-0.4); }
  275. if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-2); wait(1); SetPlayerX(GetPlayerX+0.4); }
  276. if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+2); wait(1); SetPlayerY(GetPlayerY-0.4); }
  277. if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-2); wait(1); SetPlayerY(GetPlayerY+0.4); }
  278.  
  279. yield;
  280. }
  281.  
  282. while(phase == 1 || phase == 2)
  283. {
  284. if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+1); wait(2); SetPlayerX(GetPlayerX-0.2); }
  285. if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-1); wait(2); SetPlayerX(GetPlayerX+0.2); }
  286. if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+1); wait(2); SetPlayerY(GetPlayerY-0.2); }
  287. if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-1); wait(2); SetPlayerY(GetPlayerY+0.2); }
  288. yield;
  289. }
  290.  
  291. /*while(phase == 1.5)
  292. {
  293. if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+2); wait(1); SetPlayerX(GetPlayerX-0.4); }
  294. if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-2); wait(1); SetPlayerX(GetPlayerX+0.4); }
  295. if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+2); wait(1); SetPlayerY(GetPlayerY-0.4); }
  296. if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-2); wait(1); SetPlayerY(GetPlayerY+0.4); }
  297. yield;
  298. }
  299.  
  300. while(phase == 2)
  301. {
  302. if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+1.5); wait(2); SetPlayerX(GetPlayerX-0.3); }
  303. if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-1.5); wait(2); SetPlayerX(GetPlayerX+0.3); }
  304. if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+1.5); wait(2); SetPlayerY(GetPlayerY-0.3); }
  305. if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-1.5); wait(2); SetPlayerY(GetPlayerY+0.3); }
  306. yield;
  307. }*/
  308. yield;
  309. }
  310. }
  311.  
  312. task movement
  313. {
  314. let x = 0;
  315. let speed = 0;
  316. while(x == 0)
  317. {
  318. while(phase == 2)
  319. {
  320. SetMovePosition03(GetPlayerX,GetPlayerY,200,3);
  321. wait(450);
  322. yield;
  323. }
  324. while(phase == 2.5)
  325. {
  326. SetMovePosition03(GetEnemyX,GetEnemyY,200,1);
  327. yield;
  328. }
  329. /*while(phase == 4)
  330. {
  331. SetMovePosition03(GetEnemyX,GetEnemyY+800,200,speed);
  332. speed+=0.01;
  333. yield;
  334. }*/
  335. yield;
  336. }
  337. }
  338.  
  339. task growing
  340. {
  341. let x = 0;
  342. while(x == 0)
  343. {
  344. if(phasecounter == 3890)
  345. {
  346. SetColor(255,0,255);
  347. Concentration01(180);
  348. wait(120);
  349. loop(5)
  350. {
  351. Concentration01(300);
  352. SetColor(255,255,255);
  353. wait(260);
  354. Explosion01(GetX,GetY,0,0.1,180);
  355. Concentration01(30);
  356. SetColor(255,0,255);
  357. yield;
  358. }
  359. }
  360.  
  361. yield;
  362. }
  363. }
  364.  
  365. task purplesun(render,graphic,layer,spindir,pulse)
  366. {
  367. let obj = Obj_Create(OBJ_EFFECT);
  368.  
  369. let counter = 0;
  370. let x = 0;
  371. let frame = 0;
  372. let spin = 0;
  373.  
  374. if (render == "ADD") { ObjEffect_SetRenderState(obj,ADD); }
  375. if (render == "ALPHA") { ObjEffect_SetRenderState(obj,ALPHA); }
  376.  
  377. ObjEffect_SetTexture(obj,graphic);
  378.  
  379. Obj_SetPosition(obj,GetX,GetY);
  380. ObjEffect_SetLayer(obj,layer);
  381.  
  382. ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
  383. ObjEffect_CreateVertex(obj,4);
  384.  
  385. ObjEffect_SetVertexXY(obj,0,-128,-128);
  386. ObjEffect_SetVertexXY(obj,1,128,-128);
  387. ObjEffect_SetVertexXY(obj,2,-128,128);
  388. ObjEffect_SetVertexXY(obj,3,128,128);
  389.  
  390. ObjEffect_SetVertexUV(obj,0,0,0);
  391. ObjEffect_SetVertexUV(obj,1,256,0);
  392. ObjEffect_SetVertexUV(obj,2,0,256);
  393. ObjEffect_SetVertexUV(obj,3,256,256);
  394.  
  395. while(!Obj_BeDeleted(obj))
  396. {
  397. if (spindir == "clockwise") { ObjEffect_SetAngle(obj,0,0,spin); }
  398. if (spindir == "counterclockwise") { ObjEffect_SetAngle(obj,0,0,-spin); }
  399.  
  400. if (phase == 0 || phase == 1)
  401. {
  402. Obj_SetPosition(obj,GetX,GetY);
  403. //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),44);
  404. if (x > 0.9){ x = 0.9; }
  405. ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
  406. frame++;
  407. }
  408.  
  409. if (phase == 2 || phase == 2.5)
  410. {
  411. Obj_SetPosition(obj,GetX,GetY);
  412. //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),44);
  413. if (x > 1){ x = 1; }
  414. ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
  415. frame++;
  416. }
  417. if (phase == 3)
  418. {
  419. Obj_SetPosition(obj,GetX,GetY);
  420. //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),96);
  421. if (x > 2.5){ x = 2.5; }
  422. ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
  423. frame++;
  424. }
  425. if (phase == 4)
  426. {
  427. Obj_SetPosition(obj,GetEnemyX,GetEnemyY);
  428. //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),96);
  429. ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
  430. if(counter == 180)
  431. {
  432. //Explosion01(GetX,GetY,0,0.1,120);
  433. }
  434. if(counter == 520)
  435. {
  436. Obj_Delete(obj);
  437. }
  438. frame++;
  439. counter++;
  440. }
  441.  
  442. if(phase != 4)
  443. {
  444. x+=0.001;
  445. }
  446. else
  447. {
  448. x-=0.005;
  449. }
  450.  
  451. spin++;
  452. yield;
  453. }
  454. }
  455.  
  456. task caution
  457. {
  458. PlaySE(CSD ~ "sfx\se_caution.wav");
  459. let obj = Obj_Create(OBJ_EFFECT);
  460. Obj_SetPosition(obj,GetCenterX,GetCenterY-100);
  461. ObjEffect_SetTexture(obj,skull);
  462. ObjEffect_SetRenderState(obj,ALPHA);
  463. ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
  464. ObjEffect_SetLayer(obj,7);
  465. ObjEffect_CreateVertex(obj,4);
  466. ObjEffect_SetScale(obj,0.8,0.8);
  467.  
  468. ObjEffect_SetVertexXY(obj,0,-128,-128);
  469. ObjEffect_SetVertexXY(obj,1,128,-128);
  470. ObjEffect_SetVertexXY(obj,2,-128,128);
  471. ObjEffect_SetVertexXY(obj,3,128,128);
  472.  
  473. ObjEffect_SetVertexUV(obj,0,0,0);
  474. ObjEffect_SetVertexUV(obj,1,256,0);
  475. ObjEffect_SetVertexUV(obj,2,0,256);
  476. ObjEffect_SetVertexUV(obj,3,256,256);
  477.  
  478.  
  479. let x = Obj_GetX(obj);
  480. let alpha = 0;
  481. loop(15) {
  482. Obj_SetPosition(obj, x, GetCenterY);
  483. ObjEffect_SetVertexColor(obj, 0, alpha, 255, 255, 255);
  484. ObjEffect_SetVertexColor(obj, 1, alpha, 255, 255, 255);
  485. ObjEffect_SetVertexColor(obj, 2, alpha, 255, 255, 255);
  486. ObjEffect_SetVertexColor(obj, 3, alpha, 255, 255, 255);
  487.  
  488. //x += 2.5;
  489. alpha += 16;
  490. wait(1);
  491. }
  492.  
  493. //Obj_Delete(obj);
  494. }
  495.  
  496. function wait(w)
  497. {
  498. loop(w)
  499. {
  500. yield;
  501. }
  502. }
  503.  
  504. #include_function ".\Familiars.txt"
  505. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement