Guest User

Untitled

a guest
Oct 11th, 2014
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.47 KB | None | 0 0
  1. include eugl.ew
  2. include texture.ew
  3. include spritesheet.ew
  4. include font.ew
  5. include extra.ew
  6.  
  7. global atom camera_angle
  8. camera_angle=0
  9.  
  10. integer current_texture
  11. current_texture=0
  12. integer count
  13. count=0
  14.  
  15. integer red,green,blue
  16.  
  17. red=255
  18. green=255
  19. blue=255
  20.  
  21. integer fieldofview
  22. sequence view_wview,view_hview
  23. integer view_current
  24. view_wview={800.0}
  25. view_hview={600}
  26. view_current=1
  27. fieldofview=45--values from rotmg
  28.  
  29. atom projection_matrix,transformation_matrix
  30. projection_matrix=allocate(8*16)
  31. transformation_matrix=allocate(8*16)
  32.  
  33. atom transformation_matrix_defalut
  34. transformation_matrix_defalut=allocate(8*16)
  35.  
  36. global procedure d3d_bind_texture(integer tex)
  37. if current_texture!=tex then
  38. gl_bindTexture (GL_TEXTURE_2D, tex)
  39. current_texture=tex
  40. end if
  41. end procedure
  42.  
  43. global procedure d3d_set_hidden(integer enable)
  44. if enable then
  45. gl_enable(GL_DEPTH_TEST)
  46. else
  47. gl_disable(GL_DEPTH_TEST)
  48. end if
  49. end procedure
  50.  
  51. global function d3d_get_count()
  52. return count
  53. end function
  54.  
  55. global procedure d3d_set_count(integer c)
  56. count=c
  57. end procedure
  58.  
  59. global procedure draw_set_color(integer r, integer g, integer b)
  60. red=r
  61. green=g
  62. blue=b
  63. end procedure
  64.  
  65.  
  66.  
  67. global procedure draw_text(atom x, atom y, sequence text)
  68. integer sprite_width,sprite_height,images_per_row,frameindex,spr,fw
  69. atom tx,ty,tw,th,aw
  70.  
  71. spr=font_list[currentfont][1]
  72.  
  73. sprite_width=font_list[currentfont][2]
  74. sprite_height=font_list[currentfont][3]
  75.  
  76. tw = spritesheet_list[spr][6]
  77. th = spritesheet_list[spr][7]
  78.  
  79. images_per_row= spritesheet_list[spr][8]
  80.  
  81. d3d_bind_texture(spritesheet_list[spr][1])
  82.  
  83. gl_color4ub(red,green,blue,255)
  84.  
  85. for i=1 to length(text) do
  86.  
  87. frameindex=text[i]-32
  88.  
  89. tx=wrap_between(frameindex,0,images_per_row)*tw
  90. ty=floor((frameindex/images_per_row))*th
  91.  
  92. fw=font_list[currentfont][4][text[i]-31]+1
  93.  
  94. aw=(tw/sprite_width)*fw
  95. count+=1
  96.  
  97. gl_begin (GL_QUADS)
  98.  
  99. gl_texCoord2f ( {tx, ty}) gl_vertex2f({ x, y })
  100. gl_texCoord2f ( {tx+aw, ty}) gl_vertex2f({ x+fw, y })
  101. gl_texCoord2f ( {tx+aw, ty+th}) gl_vertex2f({ x+fw, y+sprite_height })
  102. gl_texCoord2f ( {tx, ty+th}) gl_vertex2f({ x, y+sprite_height })
  103.  
  104. gl_end ()
  105.  
  106. x+=fw
  107.  
  108. end for
  109. gl_color4ub(255,255,255,255)
  110. end procedure
  111.  
  112.  
  113.  
  114. global procedure draw_texture(atom x, atom y, integer tex)
  115. integer width,height
  116.  
  117. width=texture_list[tex][texture_width]
  118. height=texture_list[tex][texture_height]
  119.  
  120. d3d_bind_texture(tex)
  121.  
  122. count+=1
  123. gl_begin (GL_QUADS)
  124.  
  125. gl_texCoord2f ( {0, 0}) gl_vertex2f({ x, y })
  126. gl_texCoord2f ( {1, 0}) gl_vertex2f({ x+width, y })
  127. gl_texCoord2f ( {1, 1}) gl_vertex2f({ x+width, y+height })
  128. gl_texCoord2f ( {0, 1}) gl_vertex2f({ x, y+height })
  129.  
  130. gl_end ()
  131. end procedure
  132.  
  133. global procedure draw_spritesheet_texture(atom x, atom y, integer spr, integer frameindex)
  134. integer width,height
  135. integer images_per_row
  136. atom tx,ty,tw,th
  137.  
  138. width=spritesheet_list[spr][spritesheet_sprite_width]
  139. height=spritesheet_list[spr][spritesheet_sprite_height]
  140.  
  141. tw = spritesheet_list[spr][spritesheet_texture_tw]
  142. th = spritesheet_list[spr][spritesheet_texture_th]
  143.  
  144.  
  145. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  146.  
  147. tx=wrap_between(frameindex,0,images_per_row)*tw
  148. ty=floor((frameindex/images_per_row))*th
  149.  
  150. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  151.  
  152. count+=1
  153.  
  154. gl_begin (GL_QUADS)
  155.  
  156. gl_texCoord2f ( {tx, ty}) gl_vertex2f({ x, y })
  157. gl_texCoord2f ( {tx+tw, ty}) gl_vertex2f({ x+width, y })
  158. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex2f({ x+width, y+height })
  159. gl_texCoord2f ( {tx, ty+th}) gl_vertex2f({ x, y+height })
  160.  
  161. gl_end ()
  162. end procedure
  163.  
  164. global procedure draw_spritesheet_texture_ext(atom x, atom y, integer spr, integer frameindex, integer xs, integer ys )
  165. --integer width,height
  166. integer images_per_row
  167. atom tx,ty,tw,th
  168.  
  169. --width=spritesheet_list[spr][spritesheet_sprite_width]
  170. --height=spritesheet_list[spr][spritesheet_sprite_height]
  171.  
  172. tw = spritesheet_list[spr][spritesheet_texture_tw]
  173. th = spritesheet_list[spr][spritesheet_texture_th]
  174.  
  175.  
  176. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  177.  
  178. tx=wrap_between(frameindex,0,images_per_row)*tw
  179. ty=floor((frameindex/images_per_row))*th
  180.  
  181. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  182.  
  183. count+=1
  184.  
  185. gl_begin (GL_QUADS)
  186.  
  187. gl_texCoord2f ( {tx, ty}) gl_vertex2f({ x, y })
  188. gl_texCoord2f ( {tx+tw, ty}) gl_vertex2f({ x+xs, y })
  189. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex2f({ x+xs, y+ys })
  190. gl_texCoord2f ( {tx, ty+th}) gl_vertex2f({ x, y+ys })
  191.  
  192. gl_end ()
  193. end procedure
  194.  
  195. global procedure draw_line(atom x1,atom y1,atom x2,atom y2)
  196.  
  197. d3d_bind_texture(0)--unbindtexture
  198.  
  199. gl_begin(GL_LINES)
  200. gl_color4ub(red,green,blue,255)
  201. gl_vertex2f({x1,y1})
  202. gl_color4ub(red,green,blue,255)
  203. gl_vertex2f({x2,y2})
  204. gl_end()
  205.  
  206.  
  207. gl_color4ub(255,255,255,255)
  208. end procedure
  209.  
  210. global procedure draw_rectangle(atom x1,atom y1,atom x2,atom y2,integer outline)
  211. d3d_bind_texture(0)--unbindtexture
  212. if(outline) then
  213. gl_color4ub(red,green,blue,255)
  214. gl_begin(GL_LINE_LOOP)
  215. gl_vertex2f({x1,y1})
  216. gl_vertex2f({x1,y2})
  217. gl_vertex2f({x2,y2})
  218. gl_vertex2f({x2,y1})
  219. gl_end()
  220. else
  221. gl_color4ub(red,green,blue,255)
  222. gl_rectf({x1,y1,x2,y2})
  223. end if
  224. gl_color4ub(255,255,255,255)
  225. end procedure
  226.  
  227.  
  228. global procedure d3d_set_projection_ortho(atom x, atom y, atom width, atom height, atom angle)
  229. gl_disable(GL_DEPTH_TEST)
  230. gl_matrixMode(GL_PROJECTION)
  231. gl_loadIdentity()
  232. glu_perspective(angle, 1, 0, 1)
  233. gl_matrixMode(GL_MODELVIEW)
  234. gl_loadIdentity()
  235. gl_scalef({1, -1, 1})
  236. gl_ortho(x-1,x + width,y-1,y + height,0,1)
  237. gl_rotatef(angle,{0,0,1})
  238. gl_getDoublev(GL_MODELVIEW_MATRIX,projection_matrix)
  239. gl_multMatrixd(transformation_matrix)
  240. end procedure
  241.  
  242.  
  243. global procedure d3d_start()
  244.  
  245. -- Enable depth buffering
  246. gl_enable(GL_DEPTH_TEST)
  247.  
  248. -- Set up projection matrix
  249. gl_matrixMode(GL_PROJECTION)
  250. gl_loadIdentity()
  251. glu_perspective(fieldofview, -view_wview[view_current] / view_hview[view_current], 1, 32000) -- view_hview might need converting to double
  252.  
  253. -- Set up modelview matrix
  254. gl_matrixMode(GL_MODELVIEW)
  255. gl_clearColor(0,0,0,1)
  256. gl_clear(GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT)--might need to or_all instead
  257. gl_loadIdentity()
  258.  
  259. end procedure
  260.  
  261. global procedure d3d_set_perspective(integer enable)
  262.  
  263. if (enable) then
  264. gl_matrixMode(GL_PROJECTION)
  265. gl_loadIdentity()
  266. glu_perspective(fieldofview, -view_wview[view_current] / view_hview[view_current], 1, 32000) -- view_hview might need converting to double
  267. gl_matrixMode(GL_MODELVIEW)
  268. else
  269. gl_matrixMode(GL_PROJECTION)
  270. gl_loadIdentity()
  271. glu_perspective(0, 1, 0, 1)
  272. gl_matrixMode(GL_MODELVIEW)
  273. end if --Perspective not the same as in GM when turning off perspective and using d3d projection
  274. end procedure
  275.  
  276.  
  277. procedure projection_matrix_set(sequence list)
  278. sequence bytes
  279. integer pos
  280. pos=0
  281. for i=1 to 16 do --should be 16
  282. bytes=atom_to_float64(list[i])
  283. for j=1 to 8 do
  284. poke(projection_matrix+pos, bytes[j])
  285. pos+=1
  286. end for
  287. end for
  288. end procedure
  289.  
  290. procedure transformation_matrix_set(sequence list)
  291. sequence bytes
  292. integer pos
  293. pos=0
  294. for i=1 to 16 do --should be 16
  295. bytes=atom_to_float64(list[i])
  296. for j=1 to 8 do
  297. poke(transformation_matrix+pos, bytes[j])
  298. pos+=1
  299. end for
  300. end for
  301. end procedure
  302.  
  303. projection_matrix_set({1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1})
  304.  
  305. transformation_matrix_set({1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1})
  306. mem_copy(transformation_matrix_defalut, transformation_matrix, 8*16)
  307.  
  308.  
  309.  
  310. global procedure d3d_set_projection(atom xfrom,atom yfrom,atom zfrom,atom xto,atom yto,atom zto,atom xup,atom yup,atom zup)
  311.  
  312. gl_matrixMode(GL_PROJECTION)
  313. gl_loadIdentity()
  314. glu_perspective(fieldofview, -view_wview[view_current] / view_hview[view_current], 1, 32000) -- view_hview might need converting to double
  315. gl_matrixMode(GL_MODELVIEW)
  316. gl_loadIdentity()
  317. glu_lookAt( {xfrom, yfrom, zfrom}, {xto, yto, zto}, {xup, yup, zup})
  318.  
  319. gl_getDoublev(GL_MODELVIEW_MATRIX,projection_matrix)
  320. gl_multMatrixd(transformation_matrix)
  321. end procedure
  322.  
  323.  
  324. global procedure d3d_set_projection_ext(atom xfrom,atom yfrom,atom zfrom,atom xto,atom yto,atom zto,atom xup,atom yup,atom zup,atom angle,atom aspect,atom znear,atom zfar)
  325.  
  326.  
  327. gl_matrixMode(GL_PROJECTION)
  328. gl_loadIdentity()
  329. glu_perspective(angle, -aspect, znear, zfar)
  330. gl_matrixMode(GL_MODELVIEW)
  331. gl_loadIdentity()
  332.  
  333. glu_lookAt({xfrom, yfrom, zfrom}, {xto, yto, zto}, {xup, yup, zup})
  334. gl_getDoublev(GL_MODELVIEW_MATRIX,projection_matrix)
  335. gl_multMatrixd(transformation_matrix)
  336. end procedure
  337.  
  338.  
  339. global procedure d3d_transform_set_identity()
  340. mem_copy( transformation_matrix,transformation_matrix_defalut, 8*16)
  341. gl_multMatrixd(transformation_matrix)
  342. end procedure
  343.  
  344. global procedure d3d_transform_add_translation(atom xt,atom yt,atom zt)
  345.  
  346. gl_loadIdentity()
  347. gl_translatef({xt, yt, zt})
  348. gl_multMatrixd(transformation_matrix)
  349. gl_getDoublev(GL_MODELVIEW_MATRIX,transformation_matrix)
  350. gl_loadMatrixd(projection_matrix)
  351. gl_multMatrixd(transformation_matrix)
  352. end procedure
  353.  
  354. global procedure d3d_transform_set_translation(atom xt,atom yt,atom zt)
  355.  
  356. gl_loadIdentity()
  357. gl_translatef({xt, yt, zt})
  358. gl_getDoublev(GL_MODELVIEW_MATRIX,transformation_matrix)
  359. gl_loadMatrixd(projection_matrix)
  360. gl_multMatrixd(transformation_matrix)
  361. end procedure
  362.  
  363. global procedure d3d_transform_add_rotation_axis(atom x, atom y, atom z, atom angle)
  364.  
  365. gl_loadIdentity()
  366. gl_rotatef(-angle,{x,y,z})
  367. gl_multMatrixd(transformation_matrix)
  368. gl_getDoublev(GL_MODELVIEW_MATRIX,transformation_matrix)
  369. gl_loadMatrixd(projection_matrix)
  370. gl_multMatrixd(transformation_matrix)
  371. end procedure
  372.  
  373.  
  374.  
  375. global procedure draw_spritesheet_floor2(atom xx, atom yy, atom size, integer spr,integer frameindex)
  376. atom tx,ty,tw,th
  377. integer images_per_row
  378. atom v
  379. v=0
  380. d3d_transform_set_identity()
  381.  
  382.  
  383. tw = spritesheet_list[spr][spritesheet_texture_tw]
  384. th = spritesheet_list[spr][spritesheet_texture_th]
  385.  
  386.  
  387. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  388.  
  389. d3d_transform_set_translation(-(size/2), -(size/2), 0)
  390. --d3d_transform_add_rotation_axis(0, 0, 1, angle)
  391. d3d_transform_add_translation(xx, yy, 0)
  392.  
  393.  
  394. tx=wrap_between(frameindex,0,images_per_row)*tw
  395. ty=floor(frameindex/images_per_row)*th
  396.  
  397. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  398.  
  399. gl_begin (GL_TRIANGLE_FAN)
  400.  
  401. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ 0, 0, 0.5+v })
  402. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ size, 0, 0.5+v })
  403. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ size, size, 0.5+v })
  404. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ 0, size, 0.5+v })
  405.  
  406. gl_end ()
  407.  
  408. d3d_transform_set_identity()
  409. end procedure
  410.  
  411.  
  412. global procedure draw_spritesheet_floor(atom xx, atom yy, atom size, integer spr,integer frameindex)
  413. atom tx,ty,tw,th
  414. integer images_per_row
  415. atom v
  416. v=0
  417. d3d_transform_set_identity()
  418.  
  419.  
  420. tw = spritesheet_list[spr][spritesheet_texture_tw]
  421. th = spritesheet_list[spr][spritesheet_texture_th]
  422.  
  423.  
  424. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  425.  
  426. d3d_transform_set_translation(-(size/2), -(size/2), 0)
  427. --d3d_transform_add_rotation_axis(0, 0, 1, angle)
  428. d3d_transform_add_translation(xx, yy, 0)
  429.  
  430.  
  431. tx=wrap_between(frameindex,0,images_per_row)*tw
  432. ty=floor(frameindex/images_per_row)*th
  433.  
  434. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  435.  
  436. gl_begin (GL_TRIANGLE_FAN)
  437.  
  438. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ 0, 0, 0.5+v })
  439. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ size, 0, 0.5+v })
  440. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ size, size, 0.5+v })
  441. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ 0, size, 0.5+v })
  442.  
  443. gl_end ()
  444.  
  445. d3d_transform_set_identity()
  446. end procedure
  447.  
  448.  
  449. global procedure draw_spritesheet_floor_angle(atom xx, atom yy, atom size, integer spr,integer frameindex, atom angle)
  450. atom tx,ty,tw,th
  451. integer images_per_row
  452. atom v
  453. v=0
  454. d3d_transform_set_identity()
  455.  
  456.  
  457. tw = spritesheet_list[spr][spritesheet_texture_tw]
  458. th = spritesheet_list[spr][spritesheet_texture_th]
  459.  
  460.  
  461. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  462.  
  463. d3d_transform_set_translation(-(size/2), -(size/2), 0)
  464. d3d_transform_add_rotation_axis(0, 0, 1, angle)
  465. d3d_transform_add_translation(xx, yy, 0)
  466.  
  467.  
  468. tx=wrap_between(frameindex,0,images_per_row)*tw
  469. ty=floor(frameindex/images_per_row)*th
  470.  
  471. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  472.  
  473. count+=1
  474.  
  475. gl_begin (GL_TRIANGLE_FAN)
  476.  
  477. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ 0, 0, 0.5+v })
  478. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ size, 0, 0.5+v })
  479. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ size, size, 0.5+v })
  480. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ 0, size, 0.5+v })
  481.  
  482. gl_end ()
  483.  
  484. d3d_transform_set_identity()
  485. end procedure
  486.  
  487.  
  488. global procedure draw_texturesheet_wall(atom xx, atom yy, atom size, integer tex,integer frameindex, atom v)
  489. integer sprite_width,sprite_height,images_per_row,z
  490. atom tx,ty,tw,th
  491.  
  492.  
  493. sprite_width=8
  494. sprite_height=8
  495.  
  496. tw = (sprite_width / 128)
  497. th = (sprite_height / 240)
  498.  
  499.  
  500. images_per_row= 128/sprite_width
  501. d3d_transform_set_identity()
  502.  
  503. d3d_transform_set_translation(-(size/2), -(size/2), 0)
  504. --d3d_transform_add_rotation_axis(0, 0, 1, angle)
  505. d3d_transform_add_translation(xx, yy, 0)
  506.  
  507.  
  508. tx=wrap_between(160,0,images_per_row)*tw
  509. ty=floor(160/images_per_row)*th
  510.  
  511. gl_bindTexture (GL_TEXTURE_2D, tex)
  512.  
  513. z=2
  514.  
  515.  
  516.  
  517.  
  518. --front
  519. gl_begin (GL_TRIANGLE_FAN)
  520.  
  521. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ 0, 1, 0 })
  522. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ 0, 1, z })
  523. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ 1, 1, z })
  524. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ 1, 1, 0 })
  525.  
  526. gl_end ()
  527.  
  528. tx=wrap_between(frameindex,0,images_per_row)*tw
  529. ty=floor(frameindex/images_per_row)*th
  530.  
  531.  
  532. --BACK
  533. gl_begin (GL_TRIANGLE_FAN)
  534.  
  535. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ 0, 0, 0 })
  536. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ 0, 0, z })
  537. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ 1, 0, z })
  538. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ 1, 0, 0 })
  539.  
  540. gl_end ()
  541.  
  542. --left size
  543. gl_begin (GL_TRIANGLE_FAN)
  544.  
  545. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ 0, 1, 0 })
  546. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ 0, 0, 0 })
  547. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ 0, 0, z })
  548. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ 0, 1, z })
  549.  
  550. gl_end ()
  551.  
  552. --right size
  553. gl_begin (GL_TRIANGLE_FAN)
  554.  
  555. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ 1, 1, 0 })
  556. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ 1, 0, 0 })
  557. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ 1, 0, z })
  558. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ 1, 1, z })
  559.  
  560. gl_end ()
  561.  
  562.  
  563. --top
  564. gl_begin (GL_TRIANGLE_FAN)
  565.  
  566. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ 0, 1, z })
  567. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ 1, 1, z })
  568. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ 1, 0, z })
  569. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ 0, 0, z })
  570.  
  571. gl_end ()
  572.  
  573.  
  574.  
  575. d3d_transform_set_identity()
  576. end procedure
  577.  
  578.  
  579.  
  580.  
  581. global procedure d3d_draw_text(atom x, atom y, sequence text)
  582. integer sprite_width,sprite_height,images_per_row,frameindex,spr,fw
  583. atom tx,ty,tw,th,aw
  584.  
  585. d3d_transform_set_identity()
  586.  
  587. d3d_transform_set_translation(-(1/2), -(1/2), 0)
  588. d3d_transform_add_translation(x, y, 0)
  589.  
  590. spr=font_list[currentfont][1]
  591.  
  592. sprite_width=font_list[currentfont][2]
  593. sprite_height=font_list[currentfont][3]
  594.  
  595. tw = spritesheet_list[spr][6]
  596. th = spritesheet_list[spr][7]
  597.  
  598. images_per_row= spritesheet_list[spr][8]
  599.  
  600. d3d_bind_texture(spritesheet_list[spr][1])
  601.  
  602. gl_color4ub(red,green,blue,255)
  603.  
  604. x=0
  605. for i=1 to length(text) do
  606.  
  607. frameindex=text[i]-32
  608.  
  609. tx=wrap_between(frameindex,0,images_per_row)*tw
  610. ty=floor((frameindex/images_per_row))*th
  611.  
  612. fw=font_list[currentfont][4][text[i]-31]+1
  613.  
  614. aw=(tw/sprite_width)*fw
  615. count+=1
  616.  
  617. gl_begin (GL_QUADS)
  618.  
  619. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ x, 0, 1 })
  620. gl_texCoord2f ( {tx+aw, ty}) gl_vertex3f({ x+0.2, 0 , 1})
  621. gl_texCoord2f ( {tx+aw, ty+th}) gl_vertex3f({ x+0.2, 0.5, 1 })
  622. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ x, 0.5, 1 })
  623.  
  624. gl_end ()
  625.  
  626. x+=0.2
  627.  
  628. end for
  629. gl_color4ub(255,255,255,255)
  630. d3d_transform_set_identity()
  631. end procedure
  632.  
  633.  
  634.  
  635. global procedure draw_spritesheet_tile(atom x, atom y, integer spr, integer frameindex)
  636. integer images_per_row
  637. atom tx,ty,tw,th
  638.  
  639. tw = spritesheet_list[spr][spritesheet_texture_tw]
  640. th = spritesheet_list[spr][spritesheet_texture_th]
  641.  
  642.  
  643. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  644.  
  645. tx=wrap_between(frameindex,0,images_per_row)*tw
  646. ty=floor((frameindex/images_per_row))*th
  647.  
  648. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  649.  
  650. count+=1
  651.  
  652. gl_begin (GL_TRIANGLE_FAN)
  653.  
  654. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ x, y, 0 })
  655. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ x+1, y, 0 })
  656. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ x+1, y+1, 0 })
  657. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ x, y+1, 0 })
  658.  
  659. gl_end ()
  660.  
  661. end procedure
  662.  
  663.  
  664. global procedure draw_spritesheet_tile3(atom x, atom y, integer spr, integer frameindex)
  665. integer images_per_row
  666. atom tx,ty,tw,th
  667.  
  668. d3d_transform_set_identity()
  669.  
  670. d3d_transform_set_translation(-(1/2), -(1/2), 0)
  671.  
  672. d3d_transform_add_translation(x, y, 0)
  673.  
  674. tw = spritesheet_list[spr][spritesheet_texture_tw]
  675. th = spritesheet_list[spr][spritesheet_texture_th]
  676.  
  677.  
  678. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  679.  
  680. tx=wrap_between(frameindex,0,images_per_row)*tw
  681. ty=floor((frameindex/images_per_row))*th
  682.  
  683. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  684.  
  685. count+=1
  686.  
  687.  
  688. gl_begin (GL_TRIANGLE_FAN)
  689.  
  690. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ 0, 0, 0.1 })
  691. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ 1, 0, 0.1 })
  692. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ 1, 1, 0.1 })
  693. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ 0, 1, 0.1 })
  694.  
  695. gl_end ()
  696.  
  697. d3d_transform_set_identity()
  698.  
  699. end procedure
  700.  
  701.  
  702. global procedure draw_spritesheet_tile5(atom x, atom y, integer spr, integer frameindex)
  703. integer images_per_row
  704. atom tx,ty,tw,th
  705.  
  706. d3d_transform_set_identity()
  707.  
  708. d3d_transform_set_translation(-(1/2), -(1/2), 0)
  709.  
  710. d3d_transform_add_translation(x, y, 0)
  711.  
  712. tw = spritesheet_list[spr][spritesheet_texture_tw]
  713. th = spritesheet_list[spr][spritesheet_texture_th]
  714.  
  715.  
  716. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  717.  
  718. tx=wrap_between(frameindex,0,images_per_row)*tw
  719. ty=floor((frameindex/images_per_row))*th
  720.  
  721. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  722.  
  723. count+=1
  724.  
  725. gl_begin (GL_TRIANGLE_FAN)
  726.  
  727. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ 0, 0, 0.1 })
  728. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ 1, 0, 0.1 })
  729. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ 1, 1, 0.1 })
  730. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ 0, 1, 0.1 })
  731.  
  732. gl_end ()
  733.  
  734. d3d_transform_set_identity()
  735. end procedure
  736.  
  737.  
  738. global procedure draw_spritesheet_tile2(atom x, atom y, integer spr, integer frameindex, atom v)
  739. integer images_per_row
  740. atom tx,ty,tw,th,offsetx,offsety
  741.  
  742. offsetx=0--(1/2)/2
  743. offsety=0--(1/2)/2
  744.  
  745. tw = spritesheet_list[spr][spritesheet_texture_tw]
  746. th = spritesheet_list[spr][spritesheet_texture_th]
  747.  
  748.  
  749. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  750.  
  751. tx=wrap_between(frameindex,0,images_per_row)*tw
  752. ty=floor((frameindex/images_per_row))*th
  753.  
  754. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  755.  
  756. count+=1
  757.  
  758. gl_begin (GL_TRIANGLE_FAN)
  759.  
  760. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ x-offsetx, y-offsety, 0.1+v })
  761. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ (x+1)-offsetx, y-offsety, 0.1+v })
  762. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ (x+1)-offsetx, (y+1)-offsety, 0.1+v })
  763. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ x-offsetx, (y+1)-offsety, 0.1+v })
  764.  
  765. gl_end ()
  766.  
  767.  
  768. end procedure
  769.  
  770.  
  771. global procedure draw_spritesheet_tile6(atom x, atom y, atom size, integer spr, integer frameindex, atom v)
  772. integer images_per_row,width
  773. atom tx,ty,tw,th,offsetx,offsety
  774.  
  775.  
  776. width=spritesheet_list[spr][spritesheet_sprite_width]
  777. if width=16 then
  778. size*=2
  779.  
  780. end if
  781.  
  782. offsetx=(size/2)/2
  783. offsety=(size/2)/2
  784.  
  785.  
  786. tw = spritesheet_list[spr][spritesheet_texture_tw]
  787. th = spritesheet_list[spr][spritesheet_texture_th]
  788.  
  789.  
  790. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  791.  
  792. tx=wrap_between(frameindex,0,images_per_row)*tw
  793. ty=floor((frameindex/images_per_row))*th
  794.  
  795. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  796.  
  797. count+=1
  798.  
  799. gl_begin (GL_TRIANGLE_FAN)
  800.  
  801. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ x-offsetx, y-offsety, 0.1+v })
  802. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ (x+size)-offsetx, y-offsety, 0.1+v })
  803. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ (x+size)-offsetx, (y+size)-offsety, 0.1+v })
  804. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ x-offsetx, (y+size)-offsety, 0.1+v })
  805.  
  806. gl_end ()
  807.  
  808.  
  809. end procedure
  810.  
  811. integer xpixel,ypixel
  812. xpixel=24
  813. ypixel=24
  814.  
  815. global procedure draw_spritesheet_tile4(atom x, atom y, atom size, integer spr, integer frameindex)
  816. integer images_per_row
  817. atom tx,ty,tw,th
  818.  
  819.  
  820. d3d_transform_set_identity()
  821.  
  822. d3d_transform_set_translation(-(1/2), -(1/2), 0)
  823.  
  824. d3d_transform_add_translation(x, y, 0)
  825.  
  826.  
  827. tw = spritesheet_list[spr][spritesheet_texture_tw]
  828. th = spritesheet_list[spr][spritesheet_texture_th]
  829.  
  830.  
  831. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  832.  
  833. tx=wrap_between(frameindex,0,images_per_row)*tw
  834. ty=floor((frameindex/images_per_row))*th
  835.  
  836. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  837.  
  838. count+=1
  839.  
  840. gl_begin (GL_TRIANGLE_FAN)
  841.  
  842. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ 0, 0, 0.1 })
  843. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ size, 0, 0.1 })
  844. gl_texCoord2f ( {tx+tw, ty+th})gl_vertex3f({ size, size, 0.1 })
  845. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ 0, size, 0.1 })
  846.  
  847. gl_end ()
  848.  
  849. d3d_transform_set_identity()
  850.  
  851. end procedure
  852.  
  853.  
  854.  
  855. global procedure draw_spritesheet_tile22(atom x, atom y, integer spr, integer frameindex, atom v)
  856. integer images_per_row
  857. atom tx,ty,tw,th,offsetx,offsety
  858.  
  859. --return
  860. d3d_transform_set_identity()
  861.  
  862. d3d_transform_set_translation(-(1/2), 0, 0)
  863. d3d_transform_add_rotation_axis(0, 0, 1, camera_angle)
  864. d3d_transform_add_translation(x, y, 0)
  865.  
  866. offsetx=0--(1/2)/2
  867. offsety=0--(1/2)/2
  868.  
  869. tw = spritesheet_list[spr][spritesheet_texture_tw]
  870. th = spritesheet_list[spr][spritesheet_texture_th]
  871.  
  872.  
  873. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  874.  
  875. tx=wrap_between(frameindex,0,images_per_row)*tw
  876. ty=floor((frameindex/images_per_row))*th
  877.  
  878. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  879.  
  880. count+=1
  881.  
  882. gl_begin (GL_TRIANGLE_FAN)
  883.  
  884. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ -offsetx, -offsety, 0.1 })
  885. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ 1-offsetx, -offsety, 0.1 })
  886. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ 1-offsetx, -offsety, 1.1 })
  887. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ -offsetx, -offsety, 1.1 })
  888.  
  889. gl_end ()
  890. --d3d_transform_set_identity()
  891.  
  892. end procedure
  893.  
  894.  
  895. global procedure draw_spritesheet_tile66(atom x, atom y, atom size, integer spr, integer frameindex, atom v)
  896. integer images_per_row,width
  897. atom tx,ty,tw,th,offsetx,offsety
  898.  
  899. --return
  900. d3d_transform_set_identity()
  901.  
  902. d3d_transform_set_translation(-(size/2), 0, 0)
  903. d3d_transform_add_rotation_axis(0, 0, 1, camera_angle)
  904. d3d_transform_add_translation(x, y, 0)
  905.  
  906.  
  907. width=spritesheet_list[spr][spritesheet_sprite_width]
  908. if width=16 then
  909. size*=2
  910.  
  911. end if
  912.  
  913. offsetx=(size/2)/2
  914. offsety=(size/2)/2
  915.  
  916.  
  917. tw = spritesheet_list[spr][spritesheet_texture_tw]
  918. th = spritesheet_list[spr][spritesheet_texture_th]
  919.  
  920.  
  921. images_per_row= spritesheet_list[spr][spritesheet_texture_images_per_row]
  922.  
  923. tx=wrap_between(frameindex,0,images_per_row)*tw
  924. ty=floor((frameindex/images_per_row))*th
  925.  
  926. d3d_bind_texture(spritesheet_list[spr][spritesheet_texture])
  927.  
  928. count+=1
  929.  
  930. gl_begin (GL_TRIANGLE_FAN)
  931.  
  932. gl_texCoord2f ( {tx, ty+th}) gl_vertex3f({ 0, 0, 0.1 })
  933. gl_texCoord2f ( {tx+tw, ty+th}) gl_vertex3f({ size, 0, 0.1 })
  934. gl_texCoord2f ( {tx+tw, ty}) gl_vertex3f({ size, 0, 0.1+size })
  935. gl_texCoord2f ( {tx, ty}) gl_vertex3f({ 0, 0, 0.1+size })
  936.  
  937. gl_end ()
  938.  
  939. --d3d_transform_set_identity()
  940.  
  941. end procedure
Advertisement
Add Comment
Please, Sign In to add comment