Advertisement
Guest User

Untitled

a guest
Feb 10th, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.31 KB | None | 0 0
  1. #include "./../system/Sound.txt"
  2. #include "./../system/Music.txt"
  3. #include "./../system/SpellName.txt"
  4. #include "../system/package/functions_score.txt"
  5.  
  6. let SCENE_MAIN = 00;
  7. let SCENE_START = 10;
  8. let SCENE_MODE = 11;
  9. let SCENE_QUIT = 70;
  10.  
  11. let objScene = SCENE_MAIN;
  12. let mainX = 0;
  13. let mainY = 0;
  14. let shiftTime = 0;
  15. let shiftNum = 0;
  16.  
  17. let whitePng = GetCurrentScriptDirectory ~ "../system/img/WhiteSquare.png";
  18.  
  19. @Initialize
  20. {
  21. GenPaths;
  22. LoadCommonDataAreaA2("CONFIG",GetCurrentScriptDirectory ~ "../system/data/CONFIG");
  23. SetAutoDeleteObject(true);
  24. TBackground;
  25. }
  26. @MainLoop
  27. {
  28. yield;
  29. }
  30. @Finalize
  31. {
  32. EndMusic(0);
  33. }
  34. function LoadImages
  35. {
  36. LoadTexture(whitePng);
  37. LoadTexture(GetCurrentScriptDirectory ~ "../system/img/RSS_Item.png");
  38. LoadTexture(GetCurrentScriptDirectory ~ "./img/Title_Main.png");
  39. }
  40.  
  41. task TBackground
  42. {
  43. LoadImages;
  44. loop(90){yield;}
  45. PlayMusic(0);
  46.  
  47. let back = ObjPrim_Create(OBJ_SPRITE_2D);
  48. ObjPrim_SetTexture(back,GetCurrentScriptDirectory ~ "img/Title_Main.png");
  49. ObjSprite2D_SetSourceRect(back,0,0,640,480);
  50. ObjSprite2D_SetDestRect(back,0,0,640,480);
  51. Obj_SetRenderPriority(back,0.01);
  52.  
  53. let shad = ObjPrim_Create(OBJ_SPRITE_2D);
  54. ObjPrim_SetTexture(shad,GetCurrentScriptDirectory ~ "img/Title_Effect.png");
  55. ObjSprite2D_SetDestRect(shad,0,0,640,480);
  56. Obj_SetRenderPriority(shad,0.01);
  57. ObjRender_SetAlpha(shad,70);
  58. ObjRender_SetBlendType(shad,BLEND_ADD_ARGB);
  59.  
  60. let counter = -1;
  61. loop
  62. {
  63. counter+=1;
  64. let alpha = min(30,counter)/30;
  65. ObjRender_SetColorHSV(back,0,0,alpha*255);
  66. ObjRender_SetAlpha(shad,alpha*120);
  67. ObjSprite2D_SetSourceRect(shad,-counter*0.4,counter*0.175,256-counter*0.4,256+counter*0.175);
  68. if(counter == 30)
  69. {
  70. TScene_Main;
  71. }
  72. yield;
  73. }
  74. }
  75. task TScene_Main
  76. {
  77. let distm = 170;
  78.  
  79. let texts = ["Game Start","Practice","Upgrade","Replay","Result","Music Room","Options","Quit"];
  80. let glw = length(texts);
  81. let obj = [];
  82. ascent(i in 0..glw+1)
  83. {
  84. let text;
  85. obj = obj ~ [CreateText];
  86. if(i == glw)
  87. {
  88. ObjText_SetText(obj[i],texts[0]);
  89. ObjRender_SetBlendType(obj[i],BLEND_ADD_ARGB);
  90. }
  91. else
  92. {
  93. ObjText_SetText(obj[i],texts[i]);
  94.  
  95. }
  96. ObjRender_SetScaleXYZ(obj[i],-1,-1,0);
  97. ObjText_SetFontSize(obj[i], 32);
  98. ObjText_SetHorizontalAlignment(obj[i],ALIGNMENT_RIGHT);
  99. ObjText_SetMaxWidth(obj[i],distm);
  100. Obj_SetRenderPriority(obj[i], 0.1);
  101. }
  102. let count = 90;
  103. let back = [];
  104. ascent(i in 0..2)
  105. {
  106. back = back ~ [ObjPrim_Create(OBJ_SPRITE_2D)];
  107. ObjPrim_SetPrimitiveType(back[i],PRIMITIVE_TRIANGLESTRIP);
  108. ObjPrim_SetTexture(back[i],whitePng);
  109. Obj_SetRenderPriority(back[i],0.09);
  110. ObjPrim_SetVertexCount(back[i],count*2);
  111. }
  112. let orb = ObjPrim_Create(OBJ_SPRITE_2D);
  113. ObjPrim_SetTexture(orb,GetCurrentScriptDirectory ~ "../system/img/YinYang.png");
  114. ObjSprite2D_SetSourceRect(orb,0,0,256,256);
  115. ObjSprite2D_SetDestRect(orb,0,0,1,1);
  116. ObjRender_SetScaleXYZ(orb,distm*0.9,distm*0.9,0);
  117. Obj_SetRenderPriority(orb,0.09);
  118.  
  119.  
  120. let selectIndex = 0;
  121. let frameKeyHold = 0;
  122. let frameTurn = 0;
  123. let dir = 0;
  124. let scene = SCENE_MAIN;
  125. objScene = scene;
  126.  
  127.  
  128. let xM = mainX+1;
  129. let yM = mainY;
  130. let cenx = GetScreenWidth-45;
  131. let ceny = GetScreenHeight-75;
  132. let x = 0;
  133. let y = 0;
  134.  
  135. let counter = 0;
  136. shiftTime = 45;
  137. FShiftX(xM);
  138.  
  139. loop
  140. {
  141. counter+=1;
  142. x = (xM-mainX)*GetScreenWidth;
  143. y = (yM-mainY)*GetScreenHeight;
  144. ascent(i in 0..glw+1)
  145. {
  146. let angle = 180-i*360/glw;
  147. if(i == glw)
  148. {
  149. if(dir == 1)
  150. {
  151. angle+=(-1+selectIndex%1)*360/glw;
  152. ObjText_SetText(obj[i],texts[ceil(selectIndex)%glw]);
  153. }
  154. else if(dir == -1)
  155. {
  156. angle+=(selectIndex%1)*360/glw;
  157. ObjText_SetText(obj[i],texts[floor(selectIndex)]);
  158. }
  159. else
  160. {
  161. ObjText_SetText(obj[i],texts[floor(selectIndex)]);
  162. }
  163. }
  164. else
  165. {
  166. angle+=selectIndex*360/glw;
  167. if(cos(angle) >= cos(90-360/glw))
  168. {
  169. Obj_SetVisible(obj[i],false);
  170. }
  171. else
  172. {
  173. Obj_SetVisible(obj[i],true);
  174. }
  175. }
  176. ObjRender_SetPosition(obj[i],x-distm*0.5+cenx+distm*1.075*cos(angle),y-22+ceny+distm*1.075*sin(angle),0);
  177. ObjRender_SetAngleZ(obj[i],angle);
  178. }
  179. ascent(i0 in 0..length(back))
  180. {
  181. ascent(i1 in 0..count*2)
  182. {
  183. let dist = distm*(0.35+i0*0.65+(i1%2)*(0.65-i0*0.2));
  184. let color = 0;
  185. let alpha = 125;
  186. if(i1%2 == i0)
  187. {
  188. color = 0;
  189. alpha = 255;
  190. }
  191. let angle = floor(i1*0.5)*360/(count-1);
  192. ObjPrim_SetVertexPosition(back[i0],i1,x+cenx+dist*cos(angle),y+ceny+dist*sin(angle),0);
  193. ObjPrim_SetVertexAlpha(back[i0],i1,alpha);
  194. ObjPrim_SetVertexColor(back[i0],i1,color,color,color);
  195. }
  196. }
  197. ObjRender_SetPosition(orb,x+cenx,y+ceny,0);
  198. ObjRender_SetAngleZ(orb,30-selectIndex*360/glw);
  199. if(scene == objScene && counter >= shiftTime)
  200. {
  201. shiftTime = 30;
  202. let ind = IndexScroll([VK_UP,VK_DOWN],selectIndex,frameKeyHold,frameTurn,glw,dir,14);
  203. selectIndex = ind[0];
  204. frameKeyHold = ind[1];
  205. frameTurn = ind[2];
  206. dir = ind[3];
  207. if(IsKeyState([VK_OK],[KEY_PUSH]))
  208. {
  209. PlaySound("se_Confirm",120);
  210. alternative(selectIndex)
  211. case(0)
  212. {
  213. TScene_Start(selectIndex);
  214. TFakeTexts;
  215. }
  216. case(7)
  217. {
  218. SetScriptResult(["EXIT"]);
  219. loop(20){yield;}
  220. CloseScript(GetOwnScriptID);
  221. return;
  222. }
  223. }
  224. if(IsKeyState([VK_CANCEL],[KEY_PUSH]))
  225. {
  226. if(selectIndex == 7)
  227. {
  228. PlaySound("se_Cancel",120);
  229. SetScriptResult(["EXIT"]);
  230. loop(20){yield;}
  231. CloseScript(GetOwnScriptID);
  232. return;
  233. }
  234. else
  235. {
  236. PlaySound("se_Cancel",120);
  237. selectIndex = 7;
  238. }
  239. }
  240. }
  241. yield;
  242. }
  243. task TFakeTexts
  244. {
  245. let obj = [];
  246. ascent(i in 0..glw+1)
  247. {
  248. let text;
  249. obj = obj ~ [CreateText];
  250. if(i == glw)
  251. {
  252. ObjText_SetText(obj[i],texts[(selectIndex)%glw]);
  253. ObjRender_SetBlendType(obj[i],BLEND_ADD_ARGB);
  254. }
  255. else
  256. {
  257. ObjText_SetText(obj[i],texts[(glw-i)%glw]);
  258. }
  259. ObjRender_SetScaleXYZ(obj[i],1,1,0);
  260. ObjText_SetFontSize(obj[i], 32);
  261. ObjText_SetHorizontalAlignment(obj[i],ALIGNMENT_LEFT);
  262. ObjText_SetMaxWidth(obj[i],distm);
  263. Obj_SetRenderPriority(obj[i], 0.1);
  264. }
  265. loop
  266. {
  267. if(objScene != SCENE_MAIN)
  268. {
  269. ascent(i in 0..glw+1)
  270. {
  271. let angle = i*360/glw;
  272. if(i != glw)
  273. {
  274. angle+=selectIndex*360/glw;
  275. if(cos(angle) <= cos(90))
  276. {
  277. Obj_SetVisible(obj[i],false);
  278. }
  279. else
  280. {
  281. Obj_SetVisible(obj[i],true);
  282. }
  283. }
  284. ObjRender_SetPosition(obj[i],x-distm*0.5+60+cenx+distm*0.75*cos(angle),y-22+ceny+distm*0.75*sin(angle),0);
  285. ObjRender_SetAngleZ(obj[i],angle);
  286. }
  287. }
  288. else
  289. {
  290. ascent(i in 0..length(obj))
  291. {
  292. Obj_Delete(obj[i]);
  293. }
  294. return;
  295. }
  296. yield;
  297. }
  298. }
  299. }
  300. task TScene_Start(type_main)
  301. {
  302. let textsMode = ["Barrier Mode","Classic Mode"];
  303. let textsDesc = ["Brilliant Pagoda or Haze Castle style. You have a health[r]bar and barriers, different colored bullets do different[r]amounts of damage, etc. You're intended to play this one.","Classic Touhou style. Your barriers become extra lives,[r]but each bullet is an instant kill. Unlike the original,[r]you don't get extra booze for playing in this mode."];
  304.  
  305. let distx = GetScreenWidth*0.5-75;
  306.  
  307. let glw = length(textsMode);
  308. let objMode = [];
  309. ascent(i in 0..glw+1)
  310. {
  311. let text;
  312. objMode = objMode ~ [CreateText];
  313. if(i == glw)
  314. {
  315. ObjText_SetText(objMode[i],textsMode[0]);
  316. ObjRender_SetBlendType(objMode[i],BLEND_ADD_ARGB);
  317. }
  318. else
  319. {
  320. ObjText_SetText(objMode[i],textsMode[i]);
  321. }
  322. ObjText_SetFontSize(objMode[i], 40);
  323. ObjText_SetHorizontalAlignment(objMode[i],ALIGNMENT_LEFT);
  324. Obj_SetRenderPriority(objMode[i], 0.12);
  325. }
  326. ObjText_SetFontColorTop(objMode[0], 155, 196, 255);
  327. ObjText_SetFontColorBottom(objMode[0], 96, 96, 255);
  328. ObjText_SetFontColorTop(objMode[1], 255, 196, 55);
  329. ObjText_SetFontColorBottom(objMode[1], 255, 96, 96);
  330. ObjRender_SetAlpha(objMode[glw],85);
  331.  
  332. let objDesc = CreateText;
  333. ObjText_SetText(objDesc,textsDesc[0]);
  334. ObjText_SetFontSize(objDesc, 20);
  335. ObjText_SetHorizontalAlignment(objDesc,ALIGNMENT_LEFT);
  336. Obj_SetRenderPriority(objDesc, 0.12);
  337.  
  338. let objMaj = CreateText;
  339. ObjText_SetText(objMaj,"Select the Game Style");
  340. ObjText_SetFontSize(objMaj, 54);
  341. ObjText_SetHorizontalAlignment(objMaj,ALIGNMENT_LEFT);
  342. Obj_SetRenderPriority(objMaj, 0.12);
  343.  
  344. let objS;
  345. local
  346. {
  347. objS = ObjPrim_Create(OBJ_SPRITE_LIST_2D);
  348. ObjPrim_SetTexture(objS,GetCurrentScriptDirectory ~ "../system/img/RSS_Item.png");
  349. Obj_SetRenderPriority(objS,0.12);
  350. ObjRender_SetBlendType(objS,BLEND_ADD_ARGB);
  351. ascent(i in 0..2)
  352. {
  353. ObjSpriteList2D_AddVertex(objS);
  354. ObjSpriteList2D_SetSourceRect(objS,11*32,1*32,12*32,2*32);
  355. ObjRender_SetAngleZ(objS,(i*2-1)*90);
  356. ObjSpriteList2D_SetDestRect(objS,-24,i*250-24,24,i*250+24);
  357. }
  358. ObjSpriteList2D_AddVertex(objS);
  359. ObjSpriteList2D_CloseVertex(objS);
  360. ObjRender_SetColor(objS,64,64,255);
  361. }
  362.  
  363. let back;
  364. local
  365. {
  366. back = ObjPrim_Create(OBJ_SPRITE_LIST_2D);
  367. ObjPrim_SetTexture(back,whitePng);
  368. Obj_SetRenderPriority(back,0.11);
  369. ObjRender_SetAlpha(back,155);
  370.  
  371. descent(i in 0..2)
  372. {
  373. ObjSpriteList2D_AddVertex(back);
  374. ObjSpriteList2D_SetDestRect(back,-distx-i*2,40-i*2,distx+i*2,90+i*2);
  375. ObjRender_SetColorHSV(back,0,0,i*155);
  376.  
  377. ObjSpriteList2D_AddVertex(back);
  378. ObjSpriteList2D_SetDestRect(back,-distx*0.75-i*2,125-i*2,distx*0.75+i*2,335+i*2);
  379. ObjRender_SetColorHSV(back,0,0,i*155);
  380.  
  381. ObjSpriteList2D_AddVertex(back);
  382. ObjSpriteList2D_SetDestRect(back,-distx-i*2,350-i*2,distx+i*2,450+i*2);
  383. ObjRender_SetColorHSV(back,0,0,i*155);
  384. }
  385. ObjSpriteList2D_AddVertex(back);
  386. ObjSpriteList2D_CloseVertex(back);
  387. }
  388.  
  389. let selectIndex = 0;
  390. let ind = selectIndex;
  391. let frameKeyHold = 0;
  392. let frameTurn = 0;
  393. let dir = 0;
  394. let scene = SCENE_START;
  395. objScene = scene;
  396.  
  397. let xM = mainX+1;
  398. let yM = mainY;
  399. let cenx = GetScreenWidth*0.5;
  400. let ceny = 0;
  401. let x = 0;
  402. let y = 0;
  403. let xm = x;
  404. let ym = y;
  405.  
  406. let shiftingBack = false;
  407. let counterShift = 0;
  408. let counter = 0;
  409.  
  410. FShiftX(xM);
  411.  
  412. loop
  413. {
  414. counter+=1;
  415. x = (xM-mainX)*GetScreenWidth;
  416. y = (yM-mainY)*GetScreenHeight;
  417. if(ind != selectIndex || xm != x || ym != y)
  418. {
  419. ind = selectIndex;
  420. xm = x;
  421. ym = y;
  422. ascent(i in 0..glw+1)
  423. {
  424. let v = i;
  425. if(i == glw)
  426. {
  427. v = trunc(selectIndex);
  428. ObjText_SetText(objMode[i],textsMode[v]);
  429. }
  430. ObjRender_SetPosition(objMode[i],x+cenx-78,y+ceny+135+v*200/glw,0);
  431. }
  432. ObjRender_SetPosition(back,x+cenx,y+ceny,0);
  433. ObjRender_SetPosition(objDesc,x+GetScreenWidth*0.5-distx+4,y+ceny+350,0);
  434. ObjText_SetText(objDesc,textsDesc[trunc(selectIndex)]);
  435. ObjRender_SetPosition(objMaj,x+cenx-172,y+ceny+40,0);
  436. ObjRender_SetPosition(objS,x+cenx+130,y+ceny+158+trunc(selectIndex)*200/glw,0);
  437. }
  438. if(scene == objScene && counter >= shiftTime)
  439. {
  440. let ind = IndexScroll([VK_UP,VK_DOWN],selectIndex,frameKeyHold,frameTurn,glw,dir,4);
  441. selectIndex = ind[0];
  442. frameKeyHold = ind[1];
  443. frameTurn = ind[2];
  444. dir = ind[3];
  445. if(shiftingBack == false)
  446. {
  447. if(IsKeyState([VK_CANCEL],[KEY_PUSH]))
  448. {
  449. PlaySound("se_Cancel",120);
  450. FShiftX(xM-1);
  451. shiftingBack = true;
  452. }
  453. if(IsKeyState([VK_OK],[KEY_PUSH]))
  454. {
  455. PlaySound("se_Confirm",120);
  456. alternative(selectIndex)
  457. case(0)
  458. {
  459. SetCommonData("GAME_STYLE","BARRIER");
  460. }
  461. case(1)
  462. {
  463. SetCommonData("GAME_STYLE","CLASSIC");
  464. }
  465. return;
  466. }
  467. }
  468. else
  469. {
  470. counterShift+=1;
  471. if(counterShift >= shiftTime)
  472. {
  473. ascent(i in 0..length(objMode))
  474. {
  475. Obj_Delete(objMode[i]);
  476. }
  477. Obj_Delete(objDesc);
  478. Obj_Delete(objMaj);
  479. Obj_Delete(back);
  480. Obj_Delete(objS);
  481. objScene = SCENE_MAIN;
  482. return;
  483. }
  484. }
  485. }
  486. yield;
  487. }
  488. }task FShiftX(x)
  489. {
  490. let xM = mainX;
  491. shiftNum+=1;
  492. let time = shiftTime;
  493. let num = shiftNum;
  494. ascent(t in 0..time)
  495. {
  496. if(num != shiftNum){return;}
  497. mainX+=(x-xM)*(1-cos(t*360/time))/time;
  498. yield;
  499. }
  500. }
  501. task FShiftY(y)
  502. {
  503. let yM = mainY;
  504. shiftNum+=1;
  505. let time = shiftTime;
  506. let num = shiftNum;
  507. ascent(t in 0..time)
  508. {
  509. if(num != shiftNum){return;}
  510. mainY+=(y-yM)*(1-cos(t*360/time))/time;
  511. yield;
  512. }
  513. }
  514.  
  515. function IndexScroll(Key,selectIndex,frameKeyHold,frameTurn,countMenu,dir,scrollSpeed)
  516. {
  517. if(dir != 0)
  518. {
  519. selectIndex+=dir/scrollSpeed;
  520. if(IsKeyState(Key,[KEY_HOLD]))
  521. {
  522. frameTurn = (frameTurn+1)%scrollSpeed;
  523. if(frameTurn == 0)
  524. {
  525. dir = 0;
  526. selectIndex = round(selectIndex)%countMenu;
  527. }
  528. }
  529. else
  530. {
  531. frameTurn = (frameTurn+1)%scrollSpeed;
  532. if(frameTurn == 0)
  533. {
  534. dir = 0;
  535. selectIndex = round(selectIndex)%countMenu;
  536. }
  537. }
  538. }
  539. else
  540. {
  541. dir = 0;
  542. if(IsKeyState([Key[0]],[KEY_PUSH]))
  543. {
  544. PlaySound("se_Select",120);
  545. dir = -1;
  546. }
  547. else if(IsKeyState([Key[1]],[KEY_PUSH]))
  548. {
  549. PlaySound("se_Select",120);
  550. dir = 1;
  551. }
  552. else if(IsKeyState([Key[0]],[KEY_HOLD]))
  553. {
  554. frameKeyHold++;
  555. if(frameKeyHold == 30 || frameKeyHold > 30)
  556. {
  557. PlaySound("se_Select",120);
  558. dir = -1;
  559. }
  560. }
  561. else if(IsKeyState([Key[1]],[KEY_HOLD]))
  562. {
  563. frameKeyHold++;
  564. if(frameKeyHold == 30 || frameKeyHold > 30)
  565. {
  566. PlaySound("se_Select",120);
  567. dir = 1;
  568. }
  569. }
  570. else
  571. {
  572. frameKeyHold = 0;
  573. }
  574.  
  575. selectIndex+=absolute(dir)*dir/scrollSpeed;
  576. frameTurn=absolute(dir)*((frameTurn+1)%scrollSpeed);
  577. }
  578. if(selectIndex < 0)
  579. {
  580. selectIndex += countMenu;
  581. }
  582. else if(selectIndex >= countMenu)
  583. {
  584. selectIndex -= countMenu;
  585. }
  586. return [selectIndex,frameKeyHold,frameTurn,dir];
  587. }
  588. function CreateText
  589. {
  590. let obj = ObjText_Create;
  591. ObjText_SetFontType(obj,"Cirno");
  592. ObjText_SetFontColorTop(obj, 255, 255, 255);
  593. ObjText_SetFontColorBottom(obj, 196, 196, 196);
  594. ObjText_SetFontBorderType(obj, BORDER_FULL);
  595. ObjText_SetFontBorderColor(obj,64, 64, 64);
  596. ObjText_SetFontBorderWidth(obj, 2);
  597. ObjText_SetSidePitch(obj,1);
  598. return obj;
  599. }
  600.  
  601. task DeleteArray(array)
  602. {
  603. ascent(i in 0..length(array))
  604. {
  605. Obj_Delete(array[i]);
  606. }
  607. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement