Advertisement
Guest User

Mainloop example

a guest
Apr 29th, 2012
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.78 KB | None | 0 0
  1. #TouhouDanmakufu
  2. #Title[Spellcard seria]
  3. #Text[just a tutorial to present it]
  4. #Player[FREE]
  5. #ScriptVersion[2]
  6.  
  7. script_enemy_main{
  8.  
  9. let CSD = GetCurrentScriptDirectory;
  10.  
  11. let imgBoss = CSD ~ "img\Sprite.png";
  12. let cut = CSD ~ "img\Cut.png";
  13. let bg = CSD ~ "img\lake.png";
  14. let bgm = CSD ~ "bmg\Legendary Illusion ~ Infinite Being.mp3";
  15. let frame = 0;
  16. let angle = 0;
  17. let lollo = 360;
  18. let angle= 0;
  19. let brollo = 500;
  20. //Qui metti tutte le variabili che vuoi usare, io ho creato da frame a brollo. In Mainloop le modifichi a piacimento!
  21.  
  22. @Initialize{
  23. SetLife(1000);
  24. SetTimer(60);
  25. SetScore(2000);
  26. SetMovePosition01(GetEnemyX,120,3);
  27.  
  28. LoadGraphic(imgBoss);
  29. LoadGraphic(cut);
  30. LoadGraphic(bg);
  31. LoadMusic(bgm);
  32. PlayMusic(bgm);
  33.  
  34. CutIn(YOUMU,"Scripting like a Cirno - Easy -",cut,0,0,300,450);
  35.  
  36.  
  37. }
  38.  
  39. @MainLoop{
  40. SetCollisionA(GetX,GetY,32);
  41. SetCollisionB(GetX,GetY,16);
  42.  
  43. //set shot data e ( id, time, speed, dir, dir-velocity, acceleration, maxspeed, graphic)
  44.  
  45.  
  46. //Qui ho giocato sulle variabili impostate. "Ricorda, prima metti gli if e poi le modifiche ulteriori! Ad esempio io prima ho impostato le due spirali, poi fuori dagli if ho detto che l'angolo aumenta di 5 ogni volta!"
  47.  
  48. //In pratica, danmakufu segue alla lettera cio che scrivi da inizio di mainloop fino alla fine. Ad esempio dopo aver impostato la variabile "frame", alla fine degli if che interessano frame ho messo "frame++;". Ovvero, l'editor legge: frame aumenta di 1 e quando entro nei parametri if aziono. Qua ad esempio frame parte da zero (cosi ho impostato su script_enemy_main) poi trova "if( frame==60)" e fa l'azione preposta, poi trova "if( frame == 120)" e qui idem fa l'azione preposta, pero ho aggiunto anche frame=0. Che vuol dire? Significa che a questa azione il timer di "frame" torna a zero, ma siccome ho impostato frame++ il conteggio da zero aumenta. Quindi ho un loop infinito in cui a 1 secondo (60 frame sono 1 secondo) faccio 1 azione e a 2 secondi (frame==120) faccio l'altra.
  49.  
  50. //In contemporanea io ho creato lollo, il nome variabile e diverso ma il conteggio e lo stesso che vale per frame! Pero ho fatto una cosa diversa...se in script_enemy_main impostavo lollo=0, di conseguenza rischiavo che le azioni lollo e frame si sovrascrivessero. Allora imposto lollo=360 e alla fine di mainloop metto lollo--, quindi lollo parte da 360 e diminuisce di uno. Come vedi, ho messo che finche lollo e tra 180 e 360 ho una spirale, quando lollo scende sotto i 180 questo attacco si stoppa (perche non rientra piu in quell if) e parte una seconda spirale (if lollo < 180) poi a lollo=0 parte il terzo attacco e alla fine di questo come per frame ho messo lollo=360. Ora lollo torna a 360 e ricomincia il primo dei 3 suoi attacchi impostati ( 360<lollo<180 per intenderci).
  51.  
  52. //Ora, modificando i valori di lollo e frame posso far durare gli attacchi quanto voglio.
  53.  
  54. //Come fare a ripetere un attacco che magari capitava a frame 300 e tu sei a frame 1000 e non puoi tornare indietro? Io ho inventato la variabile in script_enemy_main brollo a 500. In fondo c'e brollo++, quindi brollo aumenta! In if ho messo if(brollo == 1000){lollo = 100000;} if(brollo == 2000){lollo=361;} Ora , il primo if dice che parti da brollo a 500 e il conteggio sale a 1000, a questa vetta lollo diventa 100mila. Ovvero, dato che tutte le azioni di lollo avvengono a lollo<360 e 100mila in termini di tempo e un bordello anche se lollo diminuisce di 1 per effetto di lollo--; io di fatto ho "disabilitato" lollo. (a meno che tu non voglia aspettare che lollo arrivi da 100mila a 360!!!). Il secondo if dice che se brollo arriva a 2000 lollo va a 361. In pratica, brollo parte da 500, sale a 1000 e blocca lollo, poi sale a 2000 e sblocca lollo.
  55.  
  56. //Se vuoi bloccare ancora lollo, nello stesso if in cui dici che lollo diventa 361 aggiungi pure "brollo=500", cosi riporti brollo a 500 e finche brollo non arriva a 1000, lollo e sbloccato.
  57.  
  58. //Le variabili che imposti all'inizio hanno il nome che vuoi tu, non c'e una regola!
  59.  
  60. if( frame==60){
  61.  
  62. CreateShotA(2, GetEnemyX, GetEnemyY, 30);
  63. SetShotDataA(2, 0, 0, 0, 0, 0, 0, BLUE22);
  64. SetShotDataA(2, 1, 3, GetAngleToPlayer, 0, 0, 0, BLUE22);
  65. CreateShotA(3, GetEnemyX, GetEnemyY, 30);
  66. SetShotDataA(3, 0, 0, 0, 0, 0, 0, BLUE22);
  67. SetShotDataA(3, 1, 3, GetAngleToPlayer-30, 0, 0, 0, BLUE22);
  68. CreateShotA(4, GetEnemyX, GetEnemyY, 30);
  69. SetShotDataA(4, 0, 0, 0, 0, 0, 0, BLUE22);
  70. SetShotDataA(4, 1, 3, GetAngleToPlayer+30, 0, 0, 0, BLUE22);
  71. FireShot(2);
  72. FireShot(3);
  73. FireShot(4);
  74. }
  75.  
  76. if( frame == 120){
  77.  
  78. CreateShotA(1, GetEnemyX, GetEnemyY, 30);
  79. SetShotDataA(1, 0, 0, 0, 0, 0, 0, WHITE22);
  80. SetShotDataA(1, 1, 3, GetAngleToPlayer, 0, 0, 0, WHITE22);
  81. CreateShotA(5, GetEnemyX, GetEnemyY, 30);
  82. SetShotDataA(5, 0, 0, 0, 0, 0, 0, WHITE22);
  83. SetShotDataA(5, 1, 3, GetAngleToPlayer-60, 0, 0, 0, WHITE22);
  84. CreateShotA(6, GetEnemyX, GetEnemyY, 30);
  85. SetShotDataA(6, 0, 0, 0, 0, 0, 0, WHITE22);
  86. SetShotDataA(6, 1, 3, GetAngleToPlayer+60, 0, 0, 0, WHITE22);
  87.  
  88. FireShot(1);
  89. FireShot(5);
  90. FireShot(6);
  91.  
  92. frame = 0;
  93. }
  94.  
  95. if( lollo<180){
  96.  
  97. CreateShot01(GetX, GetY, 3, angle, BLUE12, 0);
  98.  
  99. angle +=360/100;
  100.  
  101. }
  102.  
  103.  
  104. if( lollo>180 && lollo<360){
  105.  
  106. CreateShot01(GetX, GetY, 5, -angle, YELLOW12, 0);
  107.  
  108. angle +=360/100;
  109.  
  110. }
  111.  
  112. angle +=5;
  113.  
  114. if( lollo == 0){
  115.  
  116. CreateShot01(GetEnemyX,GetEnemyY,6,GetAngleToPlayer,AQUA01,10);
  117. CreateShot01(GetEnemyX,GetEnemyY,5,GetAngleToPlayer-10,AQUA01,10);
  118. CreateShot01(GetEnemyX,GetEnemyY,5,GetAngleToPlayer+10,AQUA01,10);
  119. CreateShot01(GetEnemyX,GetEnemyY,4.5,GetAngleToPlayer+20,AQUA01,10);
  120. CreateShot01(GetEnemyX,GetEnemyY,4.5,GetAngleToPlayer-20,AQUA01,10);
  121. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer,AQUA01,10);
  122. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer,AQUA01,10);
  123. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer-60,AQUA01,10);
  124. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer+60,AQUA01,10);
  125. CreateShot01(GetEnemyX,GetEnemyY,6,GetAngleToPlayer,AQUA01,10);
  126. CreateShot01(GetEnemyX,GetEnemyY,5,GetAngleToPlayer-30,AQUA01,10);
  127. CreateShot01(GetEnemyX,GetEnemyY,5,GetAngleToPlayer+30,AQUA01,10);
  128. CreateShot01(GetEnemyX,GetEnemyY,4.5,GetAngleToPlayer+40,AQUA01,10);
  129. CreateShot01(GetEnemyX,GetEnemyY,4.5,GetAngleToPlayer-40,AQUA01,10);
  130. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer,AQUA01,10);
  131. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer,AQUA01,10);
  132. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer-70,AQUA01,10);
  133. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer+70,AQUA01,10);
  134. CreateShot01(GetEnemyX,GetEnemyY,5,GetAngleToPlayer,GREEN05,10);
  135. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer-10,GREEN05,10);
  136. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer+10,GREEN05,10);
  137. CreateShot01(GetEnemyX,GetEnemyY,3.5,GetAngleToPlayer+20,GREEN05,10);
  138. CreateShot01(GetEnemyX,GetEnemyY,3.5,GetAngleToPlayer-20,GREEN05,10);
  139. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer,GREEN05,10);
  140. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer,GREEN05,10);
  141. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer-60,GREEN05,10);
  142. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer+60,GREEN05,10);
  143. CreateShot01(GetEnemyX,GetEnemyY,5,GetAngleToPlayer,GREEN05,10);
  144. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer-30,GREEN05,10);
  145. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer+30,GREEN05,10);
  146. CreateShot01(GetEnemyX,GetEnemyY,3.5,GetAngleToPlayer+40,GREEN05,10);
  147. CreateShot01(GetEnemyX,GetEnemyY,3.5,GetAngleToPlayer-40,GREEN05,10);
  148. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer,GREEN05,10);
  149. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer,GREEN05,10);
  150. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer-70,GREEN05,10);
  151. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer+70,GREEN05,10);
  152. CreateShot01(GetEnemyX,GetEnemyY,2.5,GetAngleToPlayer,AQUA01,10);
  153. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer-10,AQUA01,10);
  154. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer+10,AQUA01,10);
  155. CreateShot01(GetEnemyX,GetEnemyY,1.5,GetAngleToPlayer+20,AQUA01,10);
  156. CreateShot01(GetEnemyX,GetEnemyY,1.5,GetAngleToPlayer-20,AQUA01,10);
  157. CreateShot01(GetEnemyX,GetEnemyY,1,GetAngleToPlayer,AQUA01,10);
  158. CreateShot01(GetEnemyX,GetEnemyY,1,GetAngleToPlayer,AQUA01,10);
  159. CreateShot01(GetEnemyX,GetEnemyY,0.7,GetAngleToPlayer-60,AQUA01,10);
  160. CreateShot01(GetEnemyX,GetEnemyY,0.7,GetAngleToPlayer+60,AQUA01,10);
  161. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer,AQUA01,10);
  162. CreateShot01(GetEnemyX,GetEnemyY,1,GetAngleToPlayer-30,AQUA01,10);
  163. CreateShot01(GetEnemyX,GetEnemyY,1,GetAngleToPlayer+30,AQUA01,10);
  164. CreateShot01(GetEnemyX,GetEnemyY,0.7,GetAngleToPlayer+40,AQUA01,10);
  165. CreateShot01(GetEnemyX,GetEnemyY,0.7,GetAngleToPlayer-40,AQUA01,10);
  166. CreateShot01(GetEnemyX,GetEnemyY,0.5,GetAngleToPlayer,AQUA01,10);
  167. CreateShot01(GetEnemyX,GetEnemyY,0.5,GetAngleToPlayer,AQUA01,10);
  168. CreateShot01(GetEnemyX,GetEnemyY,0.3,GetAngleToPlayer-70,AQUA01,10);
  169. CreateShot01(GetEnemyX,GetEnemyY,0.3,GetAngleToPlayer+70,AQUA01,10);
  170. CreateShot01(GetEnemyX,GetEnemyY,8,GetAngleToPlayer,GREEN05,10);
  171. CreateShot01(GetEnemyX,GetEnemyY,7,GetAngleToPlayer-10,GREEN05,10);
  172. CreateShot01(GetEnemyX,GetEnemyY,7,GetAngleToPlayer+10,GREEN05,10);
  173. CreateShot01(GetEnemyX,GetEnemyY,6.5,GetAngleToPlayer+20,GREEN05,10);
  174. CreateShot01(GetEnemyX,GetEnemyY,6.5,GetAngleToPlayer-20,GREEN05,10);
  175. CreateShot01(GetEnemyX,GetEnemyY,6,GetAngleToPlayer,GREEN05,10);
  176. CreateShot01(GetEnemyX,GetEnemyY,6,GetAngleToPlayer,GREEN05,10);
  177. CreateShot01(GetEnemyX,GetEnemyY,5,GetAngleToPlayer-60,GREEN05,10);
  178. CreateShot01(GetEnemyX,GetEnemyY,5,GetAngleToPlayer+60,GREEN05,10);
  179. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer,GREEN05,10);
  180. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer-30,GREEN05,10);
  181. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer+30,GREEN05,10);
  182. CreateShot01(GetEnemyX,GetEnemyY,3.5,GetAngleToPlayer+40,GREEN05,10);
  183. CreateShot01(GetEnemyX,GetEnemyY,3.5,GetAngleToPlayer-40,GREEN05,10);
  184. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer,GREEN05,10);
  185. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer,GREEN05,10);
  186. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer-70,GREEN05,10);
  187. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer+70,GREEN05,10);
  188. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer,GREEN05,10);
  189. CreateShot01(GetEnemyX,GetEnemyY,1,GetAngleToPlayer-10,GREEN05,10);
  190. CreateShot01(GetEnemyX,GetEnemyY,1,GetAngleToPlayer+10,GREEN05,10);
  191. CreateShot01(GetEnemyX,GetEnemyY,0.5,GetAngleToPlayer+20,GREEN05,10);
  192. CreateShot01(GetEnemyX,GetEnemyY,0.5,GetAngleToPlayer-20,GREEN05,10);
  193. CreateShot01(GetEnemyX,GetEnemyY,0.3,GetAngleToPlayer,GREEN05,10);
  194. CreateShot01(GetEnemyX,GetEnemyY,0.3,GetAngleToPlayer,GREEN05,10);
  195. CreateShot01(GetEnemyX,GetEnemyY,0.2,GetAngleToPlayer-60,GREEN05,10);
  196. CreateShot01(GetEnemyX,GetEnemyY,0.2,GetAngleToPlayer+60,GREEN05,10);
  197. CreateShot01(GetEnemyX,GetEnemyY,5,GetAngleToPlayer,GREEN05,10);
  198. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer-30,GREEN05,10);
  199. CreateShot01(GetEnemyX,GetEnemyY,4,GetAngleToPlayer+30,GREEN05,10);
  200. CreateShot01(GetEnemyX,GetEnemyY,3.5,GetAngleToPlayer+40,GREEN05,10);
  201. CreateShot01(GetEnemyX,GetEnemyY,3.5,GetAngleToPlayer-40,GREEN05,10);
  202. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer,GREEN05,10);
  203. CreateShot01(GetEnemyX,GetEnemyY,3,GetAngleToPlayer,GREEN05,10);
  204. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer-70,GREEN05,10);
  205. CreateShot01(GetEnemyX,GetEnemyY,2,GetAngleToPlayer+70,GREEN05,10);
  206.  
  207. lollo = 360;
  208. }
  209.  
  210. frame++;
  211.  
  212. brollo++;
  213. if(brollo == 1000){
  214. lollo = 100000;
  215.  
  216. }
  217. if(brollo == 2000){
  218. lollo=361;
  219. brollo=500;
  220. }
  221.  
  222. lollo--;
  223.  
  224. }
  225.  
  226. @DrawLoop{
  227.  
  228. SetTexture(imgBoss);
  229. SetRenderState(ALPHA);
  230. SetAlpha(255);
  231. SetGraphicRect(0,0,110,110);
  232. SetGraphicScale(1,1);
  233. SetGraphicAngle(0,0,0);
  234. DrawGraphic(GetX,GetY);
  235. }
  236.  
  237. @BackGround{
  238.  
  239. SetTexture(bg);
  240. SetRenderState(ALPHA);
  241. SetAlpha(255);
  242. SetGraphicRect(0,0,512,512);
  243. SetGraphicScale(1,1);
  244. SetGraphicAngle(0,0,0);
  245. DrawGraphic(GetCenterX,GetCenterY);
  246.  
  247. }
  248.  
  249. @Finalize{
  250.  
  251. DeleteGraphic(imgBoss);
  252. DeleteGraphic(cut);
  253. DeleteGraphic(bg);
  254.  
  255. }
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265. function wait(w){
  266. loop(w){yield;}
  267. }
  268.  
  269.  
  270. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement