Advertisement
drakeirving

lib_balloon.dnh (altered)

Sep 21st, 2014
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.03 KB | None | 0 0
  1.  
  2. // Finds an appropriate number of "middle-type" dialogue bubbles to use for the given text.
  3. // sca2 is a scaling factor dependent on ratio of pixel width to number of characters,
  4. // so if a bubble is too short, fiddle with this.
  5. function GetBalloonLength(text){
  6. let sca = 0.6;
  7. let sca2 = 4;
  8. let max = 0;
  9. ascent(i in 0..length(text)){
  10. if(length(text[i]) > max){
  11. max = length(text[i]);
  12. }
  13. }
  14. return ceil((max*sca2) / (64*sca));
  15. }
  16.  
  17.  
  18. //
  19. // 会話シーン用
  20. // char_text[2] に入力された文字列を表示します
  21. // char_text[1] が "NULL" であれば、1行の文字列を表示します
  22. // char_text[1] が "NULL" 以外であれば、2行の文字列を表示します
  23. // number はカウンタと同期して自動削除に使用しています
  24. task CreateBalloonManager( pos, long, char_text, number, tex_change ){
  25. let i = 0;
  26. let j = 0;
  27. let sca = 0.6;
  28.  
  29. loop( 2 ){
  30. CreateBalloonPlayer( j, [ pos[0]+j -64*sca, pos[1] + j*(128*sca) -64*sca], 0+j*3, sca, number, tex_change );
  31. loop( long ){
  32. CreateBalloonPlayer( j, [ pos[0] + (i+1)*(64*sca), pos[1] + j*(128*sca) -64*sca], 1, sca, number, tex_change );
  33. i++;
  34. }
  35. CreateBalloonPlayer( j, [ pos[0] + (i+1)*(64*sca), pos[1] + j*(128*sca) -64*sca], 2, sca, number, tex_change );
  36. i = 0;
  37. j++;
  38. }
  39.  
  40. if( char_text[1] != "NULL" ){
  41. // 表示文字列に2行目があるとき
  42. CreateBalloonText( [ pos[0]-20, pos[1]+(30*sca) ], char_text[0], number );
  43. CreateBalloonText( [ pos[0]-20, pos[1]+(70*sca) ], char_text[1], number );
  44. }
  45. else{
  46. // 表示文字列が1行目だけのとき
  47. CreateBalloonText( [ pos[0]-20, pos[1]+(50*sca) ], char_text[0], number );
  48. }
  49. }
  50.  
  51.  
  52. // こっちは敵の吹きだし用
  53. task CreateBalloonManager_Reverse( pos, long, char_text, number, tex_change ){
  54. let i = 0;
  55. let j = 0;
  56. let sca = 0.6;
  57.  
  58. loop( 2 ){
  59. CreateBalloonEnemy( j, [ pos[0] -64*sca, pos[1] + j*(128*sca) -64*sca], 2, sca, number, tex_change );
  60. loop( long ){
  61. CreateBalloonEnemy( j, [ pos[0] + (i+1)*(64*sca), pos[1] + j*(128*sca) -64*sca], 1, sca, number, tex_change );
  62. i++;
  63. }
  64. CreateBalloonEnemy( j, [ pos[0] + (i+1)*(64*sca), pos[1] + j*(128*sca) -64*sca], j*3, sca, number, tex_change );
  65. i = 0;
  66. j++;
  67. }
  68.  
  69. if( char_text[1] != "NULL" ){
  70. // 表示文字列に2行目があるとき
  71. CreateBalloonText( [ pos[0]-20, pos[1]+(30*sca) ], char_text[0], number );
  72. CreateBalloonText( [ pos[0]-20, pos[1]+(70*sca) ], char_text[1], number );
  73. }
  74. else{
  75. // 表示文字列が1行目だけのとき
  76. CreateBalloonText( [ pos[0]-20, pos[1]+(50*sca) ], char_text[0], number );
  77. }
  78. }
  79.  
  80.  
  81.  
  82. // 文字列作成
  83. task CreateBalloonText( pos, char_text, number ){
  84. let text = ObjText_Create();
  85. let size = 14;
  86. let move1 = 0;
  87. let moveA = 0;
  88.  
  89. // 会話カウンター
  90. let counter = GetAreaCommonData("Talk", "counter", 0 );
  91.  
  92. ObjRender_SetPosition(text, pos[0], pos[1], 0 );
  93. Obj_SetRenderPriorityI(text, 88 );
  94. ObjText_SetText(text, char_text );
  95. //ObjText_SetFontType(text, "MS ゴシック" );
  96. ObjText_SetFontType(text, "Tahoma" );
  97. ObjText_SetFontSize(text, size );
  98. ObjText_SetHorizontalAlignment(text, ALIGNMENT_LEFT );
  99. ObjText_SetMaxWidth(text, 1024 );
  100. ObjText_SetFontColorTop(text, 0, 0, 0 );
  101. ObjText_SetFontColorBottom(text, 0, 0, 0 );
  102.  
  103. while( move1 < 1 ){
  104. move1 = 1 * sin( moveA );
  105.  
  106. ObjRender_SetScaleXYZ(text, 1, move1*1, 0 );
  107. ObjRender_SetAlpha(text, move1*255 );
  108.  
  109. moveA += 10;
  110.  
  111. yield;
  112. }
  113. move1 = 0;
  114. moveA = 0;
  115. while( counter == number ){
  116. counter = GetAreaCommonData("Talk", "counter", 0 );
  117. yield;
  118. }
  119. while( move1 < 1 ){
  120. move1 = 1 * sin( moveA );
  121.  
  122. ObjRender_SetScaleXYZ(text, 1, 1 - move1*1, 0 );
  123. ObjRender_SetAlpha(text, 255 - move1*255 );
  124.  
  125. moveA += 10;
  126.  
  127. yield;
  128. }
  129. Obj_Delete(text);
  130. }
  131.  
  132. // 会話吹き出し作成
  133. task CreateBalloonPlayer( rev, pos, type, sca, number, tex_change ){
  134. let ID = ObjPrim_Create(OBJ_SPRITE_2D);
  135. let csd = GetCurrentScriptDirectory();
  136. let move1 = 0;
  137. let moveA = 0;
  138.  
  139. // 会話カウンター
  140. let counter = GetAreaCommonData("Talk", "counter", 0 );
  141.  
  142. // type
  143. // 0 吹き出し部分
  144. // 1 長い所部分
  145. // 2 終端部分
  146. // 3 吹き出しの下側部分
  147.  
  148. let _rect = 0;
  149.  
  150. if( rev != 0 ){
  151. _rect += 128;
  152. }
  153.  
  154. if( tex_change != 0 ){
  155. _rect += 256;
  156. }
  157.  
  158. ObjRender_SetPosition(ID, pos[0], pos[1], 0 );
  159. Obj_SetRenderPriorityI(ID, 87 );
  160. ObjRender_SetBlendType(ID, BLEND_ALPHA );
  161. ObjPrim_SetTexture(ID, front_tex[4] );
  162. alternative( type )
  163. case( 0 ){
  164. ObjSprite2D_SetSourceRect(ID, 128, 0 + _rect, 256, 128 + _rect );
  165. }
  166. case( 1 ){
  167. ObjSprite2D_SetSourceRect(ID, 256, 0 + _rect, 320, 128 + _rect );
  168. }
  169. case( 2 ){
  170. ObjSprite2D_SetSourceRect(ID, 512, 0 + _rect, 640, 128 + _rect );
  171. }
  172. case( 3 ){
  173. ObjSprite2D_SetSourceRect(ID, 768, 0 + _rect, 896, 128 + _rect );
  174. }
  175. //ObjSprite2D_SetDestCenter(ID);
  176. alternative( type )
  177. case( 1 ){
  178. ObjSprite2D_SetDestRect(ID, 0, 0, 64, 128);
  179. }
  180. others{
  181. ObjSprite2D_SetDestRect(ID, 0, 0, 128, 128);
  182. }
  183.  
  184. while( move1 < 1 ){
  185. move1 = 1 * sin( moveA );
  186.  
  187. ObjRender_SetScaleXYZ(ID, sca, move1*sca, 0 );
  188. ObjRender_SetAlpha(ID, move1*255 );
  189.  
  190. moveA += 10;
  191.  
  192. yield;
  193. }
  194. move1 = 0;
  195. moveA = 0;
  196. while( counter == number ){
  197. counter = GetAreaCommonData("Talk", "counter", 0 );
  198. yield;
  199. }
  200. while( move1 < 1 ){
  201. move1 = 1 * sin( moveA );
  202.  
  203. ObjRender_SetScaleXYZ(ID, sca, sca - move1*sca, 0 );
  204. ObjRender_SetAlpha(ID, 255 - move1*255 );
  205.  
  206. moveA += 10;
  207.  
  208. yield;
  209. }
  210. Obj_Delete(ID);
  211. }
  212. task CreateBalloonEnemy( rev, pos, type, sca, number, tex_change ){
  213. let ID = ObjPrim_Create(OBJ_SPRITE_2D);
  214. let csd = GetCurrentScriptDirectory();
  215. let move1 = 0;
  216. let moveA = 0;
  217.  
  218. // 会話カウンター
  219. let counter = GetAreaCommonData("Talk", "counter", 0 );
  220.  
  221. // type
  222. // 0 長い所部分
  223. // 1 吹き出し部分
  224. // 2 終端部分
  225. // 3 吹き出しの下側部分
  226.  
  227. let _rect = 0;
  228.  
  229. if( rev != 0 ){
  230. _rect += 128;
  231. }
  232.  
  233. if( tex_change != 0 ){
  234. _rect += 256;
  235. }
  236.  
  237. ObjRender_SetPosition(ID, pos[0], pos[1], 0 );
  238. Obj_SetRenderPriorityI(ID, 87 );
  239. ObjRender_SetBlendType(ID, BLEND_ALPHA );
  240. ObjPrim_SetTexture(ID, front_tex[11] );
  241. alternative( type )
  242. case( 0 ){
  243. ObjSprite2D_SetSourceRect(ID, 256, 0 + _rect, 384, 128 + _rect );
  244. }
  245. case( 1 ){
  246. ObjSprite2D_SetSourceRect(ID, 128, 0 + _rect, 224, 128 + _rect );
  247. }
  248. case( 2 ){
  249. ObjSprite2D_SetSourceRect(ID, 512, 0 + _rect, 640, 128 + _rect );
  250. }
  251. case( 3 ){
  252. ObjSprite2D_SetSourceRect(ID, 768, 0 + _rect, 896, 128 + _rect );
  253. }
  254. //ObjSprite2D_SetDestCenter(ID);
  255. alternative( type )
  256. case( 1 ){
  257. ObjSprite2D_SetDestRect(ID, 0, 0, 64, 128);
  258. }
  259. others{
  260. ObjSprite2D_SetDestRect(ID, 0, 0, 128, 128);
  261. }
  262.  
  263. while( move1 < 1 ){
  264. move1 = 1 * sin( moveA );
  265.  
  266. ObjRender_SetScaleXYZ(ID, sca, move1*sca, 0 );
  267. ObjRender_SetAlpha(ID, move1*255 );
  268.  
  269. moveA += 10;
  270.  
  271. yield;
  272. }
  273. move1 = 0;
  274. moveA = 0;
  275. while( counter == number ){
  276. counter = GetAreaCommonData("Talk", "counter", 0 );
  277. yield;
  278. }
  279. while( move1 < 1 ){
  280. move1 = 1 * sin( moveA );
  281.  
  282. ObjRender_SetScaleXYZ(ID, sca, sca - move1*sca, 0 );
  283. ObjRender_SetAlpha(ID, 255 - move1*255 );
  284.  
  285. moveA += 10;
  286.  
  287. yield;
  288. }
  289. Obj_Delete(ID);
  290. }
  291.  
  292. // 会話用キャラクターテクスチャ
  293. task CreateCharacterTexture( pos, fade, type, move, angleXYZ, sca, number, path, _rect ){
  294. let ID = ObjPrim_Create(OBJ_SPRITE_2D);
  295. let csd = GetCurrentScriptDirectory();
  296. let move1 = 0;
  297. let moveA = 0;
  298.  
  299. let rgb = 255;
  300.  
  301. // 会話カウンター
  302. let counter = GetAreaCommonData("Talk", "counter", 0 );
  303.  
  304. ObjRender_SetPosition(ID, pos[0], pos[1], 0 );
  305. ObjRender_SetBlendType(ID, BLEND_ALPHA );
  306. Obj_SetRenderPriorityI(ID, 86 );
  307. ObjPrim_SetTexture(ID, path );
  308. ObjRender_SetScaleXYZ(ID, sca, sca, 0 );
  309. ObjRender_SetAngleXYZ(ID, angleXYZ[0], angleXYZ[1], angleXYZ[2] );
  310. ObjRender_SetColor(ID, rgb, rgb, rgb );
  311. ObjSprite2D_SetSourceRect(ID, 0, 0, _rect, _rect );
  312. ObjSprite2D_SetDestCenter(ID);
  313.  
  314. while( move1 < 1 ){
  315. move1 = 1 * sin( moveA );
  316.  
  317. if( fade[0] ){
  318. ObjRender_SetAlpha(ID, move1*255 );
  319. }
  320. else{
  321. ObjRender_SetAlpha(ID, 255 );
  322. }
  323.  
  324. if( move ){
  325. if( type == "front" ){
  326. ObjRender_SetPosition(ID, pos[0] + move1*16, pos[1] - move1*16, 0 );
  327. rgb = 128 + move1*128;
  328. ObjRender_SetColor(ID, rgb, rgb, rgb );
  329. }
  330. else{
  331. ObjRender_SetPosition(ID, pos[0] + 16 - move1*16, pos[1] - 16 + move1*16, 0 );
  332. rgb = 255 - move1*128;
  333. ObjRender_SetColor(ID, rgb, rgb, rgb );
  334. }
  335. }
  336. else{
  337. if( type == "front" ){
  338. ObjRender_SetPosition(ID, pos[0] + 16, pos[1] - 16, 0 );
  339. rgb = 255;
  340. ObjRender_SetColor(ID, rgb, rgb, rgb );
  341. }
  342. else{
  343. ObjRender_SetPosition(ID, pos[0], pos[1], 0 );
  344. rgb = 128;
  345. ObjRender_SetColor(ID, rgb, rgb, rgb );
  346. }
  347. }
  348.  
  349. moveA += 10;
  350.  
  351. yield;
  352. }
  353. move1 = 0;
  354. moveA = 0;
  355. while( counter == number ){
  356. counter = GetAreaCommonData("Talk", "counter", 0 );
  357. yield;
  358. }
  359. Obj_Delete(ID);
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement