January 26, 2021, 05:40:46 AM

Author Topic: [bb] Sprite Editor 48x48 by Pakz [ 1+ years ago ]  (Read 592 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] Sprite Editor 48x48 by Pakz [ 1+ years ago ]
« on: June 29, 2017, 12:28:39 AM »
Title : Sprite Editor 48x48
Author : Pakz
Posted : 1+ years ago

Description : I kept working at a simple editor and got to this point here.

It has different brush sizes and brush modes, 11 colors, color selection and a line drawing feature.

Code of the project can be found on my github page : <a href="https://github.com/pakz001" target="_blank">https://github.com/pakz001[/url]

Here a youtube playlist with video's of it.
<a href="
" target="_blank">
[/url]

Edit: I have updated the source with more recent versions....

Here more video's :
<a href="
" target="_blank">
[/url]


Code :
Code: BlitzBasic
  1. .init
  2. ; main code ..............>>
  3.  
  4. ; map width
  5. Global mw = 48
  6. Global mh = 48
  7. ; tile width
  8. Global tw = 640/mw
  9. Global th = 480/mh
  10.  
  11. ; closed list (floodfill)
  12. Type ol
  13.         Field x
  14.         Field y
  15. End Type
  16. Type cl
  17.         Field x
  18.         Field y
  19. End Type
  20.  
  21. ; for the undo
  22. Type unre
  23.         Field map[48*48] ; sprite sheet width x height <<<<<<<<<
  24.         Field cols[12*3]
  25.         Field colsf#[12*3]
  26. End Type
  27. Global undoredo.unre = New unre
  28.  
  29. Global win = CreateWindow("Sprite Editor 48x48 Example",100,100,800,600,0,1)
  30. Global txt = CreateTextArea(0,20,800,520,win)
  31. Global txt2 = CreateTextArea(0,20,800,520,win)
  32. Global tab = CreateTabber(0,0,800,20,win)
  33. Global can = CreateCanvas(0,20,800,600,win)
  34.  
  35. HideGadget(txt2)
  36. HideGadget(can)
  37.  
  38. Dim cols(10,3)
  39. Dim colsf#(10,3) ; the float colors for
  40.                                 ; brightness ect
  41.                                
  42. ; This array contains the colors that are protected
  43. ; true/false
  44. Dim protcol(10)
  45.  
  46.  
  47. Dim map(mw,mh)
  48. Global canim = CreateImage(800,600)
  49. SetBuffer ImageBuffer(canim)
  50. Global font=LoadFont("verdana.ttf",12)
  51. SetFont font
  52.  
  53.  
  54. ; shade map part
  55. Dim shademap(mw,mh) ; create the shading true/false pixelmap x
  56.  
  57. ; make the shadegrid
  58. Local x2=0
  59. For y=0 To mh-1 Step 2
  60. For x=0 To mw-1 Step 2
  61.         shademap(x,y) = True
  62.         shademap(x+1,y+1) = True
  63. Next
  64. Next
  65.  
  66. Global brushindex=4
  67. Global brushsize=4
  68. Global lcmx ; previous mouse pos
  69. Global lcmy
  70. Global cmx
  71. Global cmy
  72.  
  73. Global tileim = CreateImage(tw,th,11)
  74. Global tileimbig = CreateImage(32,32,11)
  75.  
  76. refreshtileimages(True)
  77.  
  78. InsertGadgetItem tab,0,"MonkeyX Array",0
  79. InsertGadgetItem tab,1,"Visual Editor",1
  80. InsertGadgetItem tab,2,"Color Data",2
  81.  
  82.  
  83. Global mytxt$
  84.  
  85. Global screen$="txt"
  86.  
  87. Global scatter = False
  88. Global explode = False
  89. Global normal = True
  90. Global smudge = False
  91. Global smudgeint = 5 ; smudge intensity (higher = less)
  92. Global shade = False
  93. Global mirror = False
  94. Global pickcolor = False
  95. Global ctrldown = False
  96.  
  97. Global linemode = False
  98. Global linedrawn = False
  99. Global lsx1
  100. Global lsy1
  101. Global lsx2
  102. Global lsy2
  103. Global lsxm1
  104. Global lsym1
  105. Global lsxm2
  106. Global lsym2
  107.  
  108.  
  109. makemonkeycode
  110. makecolorcode
  111.  
  112. Global timer = CreateTimer(60)
  113. Local br#,bg#,bb# ; for the color manip
  114.  
  115. updateinterface
  116. addundo
  117. .main
  118. Repeat
  119.         we = WaitEvent()
  120.         If we=$101 ; keydown
  121.                 If EventData()=29 ; left ctrl key
  122.                         pickcolor = True
  123.                         ctrldown = True
  124.                         updateinterface
  125.                 End If         
  126.         End If
  127.         If we=$102;keyup
  128.                 If screen="canvas"
  129.                 If EventData()=29 ; ctrl key - pick color
  130.                         pickcolor = False
  131.                         ctrldown = False
  132.                         updateinterface
  133.                 End If         
  134.                 If EventData()=46 ;c cls
  135.                         For y=0 To mh
  136.                         For x=0 To mw
  137.                                 map(x,y)=0
  138.                         Next
  139.                         Next
  140.                         addundo
  141.                         refreshtileimages(True)
  142.                         updateinterface
  143.                 End If
  144.                 If EventData() = 23;i key mirror
  145.                         If mirror = True Then mirror = False Else mirror = True
  146.                         updateinterface
  147.                 End If
  148.                 If EventData()=200 ; cursor up ; color select
  149.                         If brushindex>0 Then brushindex=brushindex-1
  150.                         updateinterface
  151.                 End If
  152.                 If EventData()=208;cursor down
  153.                         If brushindex<10 Then brushindex=brushindex+1
  154.                         updateinterface
  155.                 End If
  156.                 If EventData()=59 ; f1 darken color
  157.                         colsf(brushindex,0) = colsf(brushindex,0)/100*92
  158.                         colsf(brushindex,1) = colsf(brushindex,1)/100*92
  159.                         colsf(brushindex,2) = colsf(brushindex,2)/100*92
  160.                         If colsf(brushindex,0) < 0 Then colsf(brushindex,0) = 0
  161.                         If colsf(brushindex,1) < 0 Then colsf(brushindex,1) = 0
  162.                         If colsf(brushindex,2) < 0 Then colsf(brushindex,2) = 0
  163.                         cols(brushindex,0) = colsf(brushindex,0)
  164.                         cols(brushindex,1) = colsf(brushindex,1)
  165.                         cols(brushindex,2) = colsf(brushindex,2)
  166.                         addundo
  167.                         refreshtileimages
  168.                         updateinterface
  169.                 End If         
  170.                 If EventData()=60 ; brighten
  171.                         colsf(brushindex,0) = colsf(brushindex,0)/100*108
  172.                         colsf(brushindex,1) = colsf(brushindex,1)/100*108
  173.                         colsf(brushindex,2) = colsf(brushindex,2)/100*108
  174.                         If colsf(brushindex,0) > 255 Then colsf(brushindex,0) = 255
  175.                         If colsf(brushindex,1) > 255 Then colsf(brushindex,1) = 255
  176.                         If colsf(brushindex,2) > 255 Then colsf(brushindex,2) = 255
  177.                         cols(brushindex,0) = colsf(brushindex,0)
  178.                         cols(brushindex,1) = colsf(brushindex,1)
  179.                         cols(brushindex,2) = colsf(brushindex,2)                                               
  180.                         addundo
  181.                         refreshtileimages                      
  182.                         updateinterface                
  183.                 End If         
  184.                         If EventData()=35 ; h shading mode
  185.                                 If shade=True Then shade=False Else shade=True
  186.                                 updateinterface
  187.                         End If
  188.                         If EventData()=24;o outline colorarea                          
  189.                                 outlinefill
  190.                                 updateinterface
  191.                                 addundo
  192.                         End If
  193.                         If EventData()=22;u undo
  194.                                 undoback
  195.                                 refreshtileimages
  196.                                 updateinterface
  197.                         End If                 
  198.                         If EventData()=33;f floodfill
  199.                                 floodfill()
  200.                                 updateinterface
  201.                                 addundo
  202.                         End If         
  203.                         If EventData() = 50;m s(m)udge
  204.                                 If smudge=True Then smudge = False Else smudge=True
  205.                                 If smudge = True
  206.                                         scatter=False
  207.                                         explode=False
  208.                                         normal=False
  209.                                         Else
  210.                                         normal = True
  211.                                 End If
  212.                                 updateinterface                        
  213.                         End If
  214.                         If EventData()=49;n normal brush
  215.                                 normal = True
  216.                                 scatter = False
  217.                                 explode = False
  218.                                 updateinterface
  219.                         End If
  220.                         If EventData()=38;l line mode
  221.                                 If linemode = True Then linemode = False Else linemode = True
  222.                                 If linemode = True Then linedrawn=True
  223.                                 updateinterface
  224.                         End If
  225.                         If EventData()=18;e
  226.                                 If explode = False Then explode=True Else explode = False
  227.                                 If explode = True Then scatter = False
  228.                                 If explode = True Then normal = False
  229.                                 If explode = False Then normal = True
  230.                                 updateinterface
  231.                         End If
  232.                         If EventData()=25 ;p pick color
  233.                                 If RectsOverlap(cmx,cmy,1,1,0,0,(mw+1)*tw,(mh+1)*th)
  234.                                         brushindex = map(cmx/tw,cmy/th)
  235.                                         updateinterface
  236.                                 End If
  237.                         End If
  238.                         If EventData() = 31 ; s scatter
  239.                                 If scatter = False Then scatter = True Else scatter = False
  240.                                 If scatter = True Then explode = False
  241.                                 If scatter = True Then normal = False
  242.                                 If scatter = False Then normal = True
  243.                                 updateinterface
  244.                         End If
  245.                         If EventData()>=2 And EventData()<=10 ; 1 to 9
  246.                                 brushsize = EventData()-1
  247.                                 updateinterface
  248.                         End If
  249.                 End If
  250.         End If
  251.         If we=$201;mosuedown
  252.                 If screen = "canvas"
  253.                 If ctrldown=False
  254.                 If RectsOverlap(cmx,cmy,1,1,0,0,(mw+1)*tw,(mh+1)*th)
  255.                         lsx1 = cmx
  256.                         lsy1 = cmy
  257.                         linedrawn=False
  258.                 End If
  259.                 End If
  260.                 End If
  261.         End If
  262.         If we=$202;mouseup
  263.                 If EventSource() = can
  264.                         If ctrldown=True
  265.                                 If EventData()=1
  266.                                         If RectsOverlap(cmx,cmy,1,1,0,0,(mw+1)*tw,(mh+1)*th)
  267.                                                 brushindex = map(cmx/tw,cmy/th)
  268.                                                 updateinterface
  269.                                         End If                         
  270.                                 End If
  271.                         End If
  272.                         If ctrldown=False
  273.                         If EventData() = 1
  274.                                 If RectsOverlap(cmx,cmy,1,1,0,0,(mw+1)*tw,(mh+1)*th)
  275.                                 If linemode = True
  276.                                         lsx2 = cmx
  277.                                         lsy2 = cmy
  278.                                         makeline(lsx1,lsy1,lsx2,lsy2)
  279.                                         If mirror = True
  280.                                                 If lsx1<320
  281.                                                         lsxm1 = (mw*tw)-lsx1
  282.                                                         lsxm2 = (mw*tw)-lsx2
  283.                                                 Else
  284.                                                         lsxm1 = -lsx1+(mw*tw)
  285.                                                         lsxm2 = -lsx2+(mw*tw)
  286.                                                 EndIf
  287.                                                 lsym1 = lsy1
  288.                                                 lsym2 = lsy2
  289.                                                 makeline(lsxm1,lsym1,lsxm2,lsym2)
  290.                                         End If
  291.                                         updateinterface
  292.                                         linedrawn=True
  293.                                 End If
  294.                                 Else
  295.                                         linedrawn=True
  296.                                 End If
  297.                                 ; undestructable checkboxes
  298.                                 If RectsOverlap(cmx,cmy,1,1,712,0,16,11*32)                                    
  299.                                         If protcol(cmy/32) = True
  300.                                                 protcol(cmy/32) = False
  301.                                                 Else
  302.                                                 protcol(cmy/32) = True
  303.                                         End If                                 
  304.                                         updateinterface
  305.                                 End If                         
  306.                                 If RectsOverlap(cmx,cmy,1,1,680,0,32,11*32)
  307.                                         brushindex=cmy/32
  308.                                         updateinterface
  309.                                 End If
  310.                                 If linemode=False
  311.                                 If RectsOverlap(cmx,cmy,1,1,0,0,(mw+1)*tw,(mh+1)*th)
  312.                                         brushdown(cmx,cmy,brushindex)
  313.                                         If mirror = True
  314.                                                 If cmx<320
  315.                                                         x2 = 640-cmx                                           
  316.                                                 Else
  317.                                                         x2 = -cmx+640
  318.                                                 EndIf
  319.                                                 y2 = cmy
  320.                                                 brushdown(x2,y2,brushindex)
  321.                                         End If                                 
  322.                                         updateinterface
  323.                                 End If
  324.                                 End If
  325.  
  326.                         End If
  327.                         If EventData() = 2
  328.                                 If RectsOverlap(cmx,cmy,1,1,680,0,32,11*32)
  329.                                         If RequestColor(cols(brushindex,0),cols(brushindex,1),cols(brushindex,2))=True
  330.                                                 brushindex=cmy/32
  331.                                                 cols(brushindex,0) = RequestedRed()
  332.                                                 cols(brushindex,1) = RequestedGreen()
  333.                                                 cols(brushindex,2) = RequestedBlue()
  334.                                                 colsf(brushindex,0) = RequestedRed()
  335.                                                 colsf(brushindex,1) = RequestedGreen()
  336.                                                 colsf(brushindex,2) = RequestedBlue()
  337.  
  338.                                                 refreshtileimages
  339.                                                 updateinterface
  340.                                                 addundo
  341.                                         End If
  342.                                 End If
  343.                                 ; undestructable checkboxes
  344.                                 If RectsOverlap(cmx,cmy,1,1,712,0,16,11*32)                                    
  345.                                         For i=0 To 10
  346.                                         protcol(i)=False
  347.                                         Next
  348.                                         If protcol(cmy/32) = True
  349.                                                 protcol(cmy/32) = False
  350.                                                 Else
  351.                                                 protcol(cmy/32) = True
  352.                                         End If
  353.                                         updateinterface
  354.                                 End If                                 
  355.                                 If linemode = False
  356.                                 If RectsOverlap(cmx,cmy,1,1,0,0,(mw+1)*tw,(mh+1)*th)
  357.                                         brushdown(cmx,cmy,0)
  358.                                         If mirror = True
  359.                                                 If cmx<320
  360.                                                         x2 = 640-cmx                                           
  361.                                                 Else
  362.                                                         x2 = -cmx+640
  363.                                                 EndIf
  364.                                                 y2 = cmy
  365.                                                 brushdown(x2,y2,0)
  366.                                         End If                                 
  367.                                         updateinterface
  368.                                 End If
  369.                                 End If
  370.                         End If
  371.                         If RectsOverlap(cmx,cmy,1,1,0,0,(mw+1)*tw,(mh+1)*th)
  372.                                 addundo
  373.                         End If                 
  374.                         End If
  375.                 End If
  376.         End If
  377.         If we=$203;mousemove
  378.                 If EventSource()=can
  379.                         lcmx = cmx
  380.                         lcmy = cmy
  381.                         cmx = EventX()
  382.                         cmy = EventY() 
  383.                         If ctrldown=False              
  384.                         If MouseDown(1) = True
  385.                         If linemode=False
  386.                         If RectsOverlap(cmx,cmy,1,1,0,0,(mw+1)*tw,(mh+1)*th)
  387.                                 brushdown(cmx,cmy,brushindex)
  388.                                 If mirror = True
  389.                                         If cmx<320
  390.                                                 x2 = 640-cmx                                           
  391.                                         Else
  392.                                                 x2 = -cmx+640
  393.                                         EndIf
  394.                                         y2 = cmy
  395.                                         brushdown(x2,y2,brushindex)
  396.                                 End If                         
  397.                                 updateinterface
  398.                         End If                 
  399.                         End If
  400.                         End If
  401.                         If MouseDown(2) = True
  402.                         If linemode=False
  403.                         If RectsOverlap(cmx,cmy,1,1,0,0,(mw+1)*tw,(mh+1)*th)
  404.                                 ;map(cmx/tw,cmy/th) = 0
  405.                                 brushdown(cmx,cmy,0)
  406.                                 If mirror = True
  407.                                         If cmx<320
  408.                                                 x2 = 640-cmx                                           
  409.                                         Else
  410.                                                 x2 = -cmx+640
  411.                                         EndIf
  412.                                         y2 = cmy
  413.                                         brushdown(x2,y2,0)
  414.                                 End If
  415.                                 updateinterface
  416.                         End If
  417.                         End If
  418.                         End If
  419.                         End If
  420.                         updateinterface                
  421.                 End If
  422.         End If
  423.         If we=$401;gadgetaction
  424.                 If EventSource() = tab
  425.                         sg = SelectedGadgetItem(tab)
  426.                         If sg = 0
  427.                                 screen="txt"
  428.                                 makemonkeycode
  429.                                 makecolorcode
  430.                                 HideGadget can
  431.                                 HideGadget txt2
  432.                                 ShowGadget txt
  433.                         End If
  434.                         If sg = 1
  435.                                 screen="canvas"
  436.                                 readmonkeycode
  437.                                 readcolorcode
  438.                                 HideGadget txt
  439.                                 HideGadget txt2
  440.                                 ShowGadget can
  441.                                 refreshtileimages
  442.                                 updateinterface
  443.                                 FlipCanvas can
  444.                         End If
  445.                         If sg = 2
  446.                                 screen="txt2"
  447.                                 makecolorcode
  448.                                 makemonkeycode
  449.                                 HideGadget txt
  450.                                 HideGadget can
  451.                                 ShowGadget txt2
  452.                         End If
  453.                 End If
  454.         End If
  455.         If we=$4001
  456.         End If 
  457.         If we=$803 Then Exit
  458. Forever
  459. End
  460.  
  461. .drawfuncs
  462.  
  463. Function updateinterface()
  464.         SetBuffer ImageBuffer(canim)
  465.         Cls
  466.         Color 255,255,255
  467.         For y=0 To mh-1
  468.         For x=0 To mw-1
  469.                 DrawImage tileim,x*tw,y*th,map(x,y)
  470.         Next
  471.         Next
  472.         If mirror = True
  473.                 For y=0 To 480-16 Step 16
  474.                         cx=((mw/2)*(tw))+tw/2
  475.                         Color 255,255,255
  476.                         Line cx,y,cx,y+8
  477.                         Color 20,20,20
  478.                         Line cx,y+8,cx,y+16
  479.                 Next
  480.         End If
  481.         Color 255,255,255
  482.         For y=0 To 10
  483.                 DrawImage tileimbig,680,y*32,y
  484.                 If brushindex = y
  485.                         Rect 681,y*32,31,31,False
  486.                 End If
  487.                 ; the indestructable checkbox
  488.                 Rect 712,y*32,16,32,False
  489.                 If protcol(y) = True
  490.                         Rect 714,y*32,12,30,True
  491.                 End If         
  492.         Next   
  493.         For y=0 To mh-1
  494.         For x=0 To mw-1
  495.                 a = map(x,y)
  496.                 Color cols(a,0),cols(a,1),cols(a,2)
  497.                 Rect x*2+660,y*2+370,2,2
  498.         Next
  499.         Next
  500.         ; draw the line
  501.         If linemode = True And linedrawn = False
  502.         Color 255,255,0
  503.         Line lsx1,lsy1,cmx,cmy
  504.         End If
  505.         ; draw the brush view
  506.         Color 255,255,255
  507.         x1 = cmx-brushsize*tw/2
  508.         y1 = cmy-brushsize*th/2
  509.         Rect cmx-brushsize*tw/2,cmy-brushsize*th/2,brushsize*tw,brushsize*th,False     
  510.         Color 20,20,20
  511.         Rect x1,y1,2,2
  512.         Rect x1,y1+brushsize*th,2,2
  513.         Rect x1+brushsize*tw,y1,2,2
  514.         Rect x1+brushsize*tw,y1+brushsize*th,2,2
  515.         Color 255,255,255
  516.                
  517. ;
  518.         If normal = True
  519.                 Text 10,480,"Brush normal on (n)"
  520.                 Else
  521.                 Text 10,480,"Brush normal off (n)"             
  522.         End If
  523.         If scatter = True Then
  524.                 Text 180,480,"Brush Scatter on (s)"
  525.                 Else
  526.                 Text 180,480,"Brush Scatter off (s)"
  527.         End If
  528.         If smudge = True Then
  529.                 Text 180,490,"Brush Smudge On (m)"
  530.                 Else
  531.                 Text 180,490,"Brush Smudge Off (m)"
  532.         End If
  533.         If shade = True Then
  534.                 Text 180,500,"Shade mode on (h)"
  535.                 Else
  536.                 Text 180,500,"Shade mode off (h)"
  537.         End If
  538.         If mirror = True Then
  539.                 Text 180,510,"Mirror mode on (i)"
  540.                 Else
  541.                 Text 180,510,"Mirror mode off (i)"
  542.         End If
  543.        
  544.         If explode = True
  545.                 Text 380,480,"Brush Explode on (e)"
  546.                 Else
  547.                 Text 380,480,"Brush Explode off (e)"           
  548.         End If
  549.         If linemode = True
  550.                 Text 10,490,"Line Mode On (l)"
  551.                 Else
  552.                 Text 10,490,"Line Mode Off (l)"
  553.         End If
  554.        
  555.         Text 10,500,"Outline at pos (o)"
  556.         Text 380,490,"Pick color (p)"
  557.         Text 380,510,"Darken/Brighten (F1-F2)"
  558.         Text 380,500,"Color Sel. (Cur. Up/Down"
  559.         Text 580,480,"Flood fill (f)"
  560.         If RectsOverlap(0,0,mw*tw,mh*th,cmx,cmy,1,1)=True
  561.                 Text 690,480,"X:"+ cmx/tw + " Y:"+cmy/th
  562.         EndIf
  563.         If pickcolor=True
  564.                 Text 690,490,"Pick color"
  565.         End If
  566.         Text 580,490,"Undo (u)"
  567.         Text 10,510,"color Set (rmb)"
  568.         Text 10,520,"Cls (c)"
  569.         Text 580,510,"Size :"+brushsize
  570.         Text 580,500,"brushsize (1/9)"
  571.         SetBuffer CanvasBuffer(can)
  572.         Cls
  573.         DrawImage canim,0,0
  574.         FlipCanvas can
  575. End Function
  576.  
  577.  
  578. Function addundo()
  579.         undoredo.unre = New unre
  580.         cnt=0
  581.         For y=0 To mh-1
  582.         For x=0 To mw-1
  583.                 undoredomap[cnt] = map(x,y)
  584.                 cnt=cnt+1
  585.         Next
  586.         Next
  587.         cnt3=0
  588.         For i=0 To 11*3
  589.                 undoredocols[cnt3] = cols(cnt1,cnt2)
  590.                 undoredocolsf[cnt3] = colsf(cnt1,cnt2)
  591.                 cnt2=cnt2+1
  592.                 If cnt2>3 Then cnt2 =0:cnt1=cnt1+1
  593.                 cnt3=cnt3+1
  594.         Next
  595.         cnt=0
  596.         For ii.unre = Each unre
  597.         cnt=cnt+1
  598.         Next
  599.         DebugLog "num undo "+cnt
  600. End Function
  601.  
  602. Function undoback()
  603.         Local c=0
  604.         For ii.unre = Each unre
  605.         c=c+1
  606.         Next
  607.         DebugLog "initialize undo "+c
  608.         If c<3 Then Return
  609.         DebugLog "undoing'
  610.         Local cnt=0
  611.         undoredo.unre = Last unre
  612.         Delete undoredo
  613.         undoredo.unre = Last unre
  614.         For y=0 To 47
  615.         For x=0 To 47
  616.                 map(x,y) = undoredomap[cnt]
  617.                 cnt=cnt+1                      
  618.         Next
  619.         Next   
  620.         cnt1=0
  621.         cnt2=0
  622.         cnt3=0
  623.         For i=0 To 11*3
  624.                 cols(cnt1,cnt2) = undoredocols[cnt3]
  625.                 colsf(cnt1,cnt2) = undoredocolsf[cnt3]         
  626.                 cnt2=cnt2+1
  627.                 If cnt2>3 Then cnt2 =0:cnt1=cnt1+1
  628.                 cnt3=cnt3+1
  629.         Next
  630. End Function
  631. Function makemonkeycode()
  632.         mytxt$="Global sprite:Int[][] = ["+Chr(13)+Chr(10)
  633.         For y=0 To mh-1
  634.         mytxt$=mytxt$+"["
  635.         For x=0 To mw-1
  636.                 mytxt$=mytxt$+map(x,y)
  637.                 mytxt$=mytxt$+","
  638.         Next
  639.                 mytxt$=Left(mytxt$,Len(mytxt$)-1)
  640.                 mytxt$=mytxt$+"]"
  641.                 mytxt$=mytxt$+","
  642.                 mytxt$=mytxt$+Chr(13)+Chr(10)
  643.         Next
  644.         mytxt$=Left(mytxt$,Len(mytxt$)-3)
  645.         mytxt$=mytxt$+"]"      
  646.         SetTextAreaText txt,mytxt$
  647. End Function
  648. Function readmonkeycode()
  649.         mytxt$ = TextAreaText(txt)
  650.         Local cnt=0
  651.         Local stp=1
  652.         Local exitloop=False
  653.         While exitloop=False
  654.                 stp=Instr(mytxt$,",",stp)
  655.                 If stp=0 Then exitloop=True
  656.                 stp=stp+1
  657.                 cnt=cnt+1
  658.         Wend
  659.         If cnt <> ((mw)*(mh)) Then Notify "Not valid map data"
  660.         Local mytxt2$
  661.         Local a$=""
  662.         Local b$=""
  663.         Local c$=""
  664.         For i = 1 To Len(mytxt$)
  665.                 a$=Mid(mytxt$,i,1)
  666.                 If a$="," Then b$=b$+a$        
  667.                 If Asc(a$) >= 48 And Asc(a$)<= 57 Then b$=b$+a$
  668.         Next
  669.         For i=1 To Len(b$)
  670.                 a$=Mid(b$,i,1)
  671.                 If Asc(a$)>=48 And Asc(a$)<=57
  672.                         c$=c$+a$
  673.                 End If
  674.                 If a$="," Then
  675.                         map(x,y) = Int(c)
  676.                         c$=""
  677.                         x=x+1
  678.                         If x>=mw Then x=0:y=y+1
  679.                 End If
  680.         Next
  681. End Function
  682. Function readcolorcode()
  683.         Local lst[1000]
  684.         a$ = TextAreaText(txt2)
  685.         a$ = Replace(a$,Chr(13),",")
  686.         a$ = Replace(a$,Chr(10),"")
  687.         For i=1 To Len(a$)
  688.                 b$=Mid(a$,i,1)
  689.                 If b$=Chr(13)
  690.                         lst[cnt] = c$
  691.                         cnt=cnt+1
  692.                         c$=""
  693.                 End If
  694.                 If b$=","
  695.                         lst[cnt] = c$
  696.                         cnt=cnt+1
  697.                         c$=""
  698.                 End If
  699.                 If Asc(b$) >= 48 And Asc(b$) <= 57
  700.                         c$=c$+b$
  701.                 End If
  702.         Next
  703.         cnt2=0
  704.         For i=0 To 10
  705.                 cols(i,0) = lst[cnt2]
  706.                 cnt2=cnt2+1
  707.                 cols(i,1) = lst[cnt2]
  708.                 cnt2=cnt2+1
  709.                 cols(i,2) = lst[cnt2]
  710.                 cnt2=cnt2+1            
  711.         Next
  712. End Function
  713. Function makecolorcode()
  714.         a$ = ""
  715.         For i=0 To 10
  716.                 a$=a$ + cols(i,0) + ","
  717.                 a$=a$ + cols(i,1) + ","
  718.                 a$=a$ + cols(i,2)
  719.                 a$=a$ + Chr(13)+Chr(10)
  720.         Next
  721.         SetTextAreaText(txt2,a$)
  722. End Function
  723. Function refreshtileimages(init=False)
  724.         For i = 0 To 10
  725.                 SetBuffer ImageBuffer(tileim,i)
  726.                 If init=True
  727.                         Color 200+i*3,10+i*20,10
  728.                         cols(i,0) = ColorRed()
  729.                         cols(i,1) = ColorGreen()
  730.                         cols(i,2) = ColorBlue()
  731.                         colsf(i,0) = ColorRed()
  732.                         colsf(i,1) = ColorGreen()
  733.                         colsf(i,2) = ColorBlue()               
  734.                 End If
  735.                 Color cols(i,0),cols(i,1),cols(i,2)
  736.                 Rect 0,0,tw,th,True
  737.                 SetBuffer ImageBuffer(tileimbig,i)
  738.                 Color cols(i,0),cols(i,1),cols(i,2)
  739.                 Rect 0,0,32,32
  740.                 For x=-1 To 1
  741.                 For y=-1 To 1
  742.                         Color 4,4,4
  743.                         Text tw/2+x,th/2+y,i,1,1
  744.                 Next
  745.                 Next
  746.                 Color 255,255,255
  747.                 Text tw/2,th/2,i,1,1
  748.         Next
  749. End Function
  750. .paintfuncs
  751. Function outlinefill()
  752.         For this.ol = Each ol
  753.                 Delete this
  754.         Next
  755.         For that.cl = Each cl
  756.                 Delete that
  757.         Next
  758.        
  759.         Local fillc
  760.         Local st[10]
  761.         st[0] = 0
  762.         st[1] = -1
  763.         st[2] = 1
  764.         st[3] = 0
  765.         st[4] = 0
  766.         st[5] = 1
  767.         st[6] = -1
  768.         st[7] = 0
  769.         If screen="canvas"
  770.         If RectsOverlap(cmx,cmy,1,1,0,0,(mw+1)*tw,(mh+1)*th)   
  771.                
  772.                 Local sx = cmx/tw
  773.                 Local sy = cmy/th      
  774.                 ffaddlist(sx,sy)
  775.                 fillc = map(sx,sy)
  776.                 Local xm
  777.                 Local my
  778.                 While fflistopen() = True
  779.                         this.ol = Last ol
  780.                         mx = thisx
  781.                         my = thisy
  782.                         Delete this
  783.                         a.cl = New cl
  784.                         ax = mx
  785.                         ay = my
  786.                         For i=0 To 6 Step 2
  787.                                 x = st[i]
  788.                                 y = st[i+1]
  789.                                 If mx+x >=0 And mx+x<=mw
  790.                                 If my+y >=0 And my+y<=mh
  791.                                 If isonclosedlist(mx+x,my+y)=False
  792.                                 If map(mx+x,my+y) = fillc                              
  793.                                         z.ol = New ol
  794.                                         zx = mx+x
  795.                                         zy = my+y
  796.                                 End If
  797.                                 End If
  798.                                 End If
  799.                                 End If
  800.                         Next
  801.                 Wend
  802.         End If
  803.         End If
  804.         For e.cl = Each cl
  805.                 x1 = ex
  806.                 y1 = ey
  807.                 For i=0 To 6 Step 2
  808.                         x2 = st[i]
  809.                         y2 = st[i+1]
  810.                         If x1+x2 >=0 And x1+x2<=mw
  811.                         If y1+y2 >=0 And y1+y2<=mh
  812.                                 If map(x1+x2,y1+y2)<>fillc
  813.                                 If shade = True
  814.                                         If shademap(x1+x2,y1+y2) = False
  815.                                         map(x1+x2,y1+y2)=brushindex
  816.                                         End If
  817.                                 End If
  818.                                 If shade=False
  819.                                 map(x1+x2,y1+y2)=brushindex                    
  820.                                 End If
  821.                                 End If
  822.                         End If
  823.                         End If
  824.                 Next
  825.         Next
  826. End Function
  827. Function isonclosedlist(x,y)
  828.         For this.cl = Each cl
  829.                 If thisx = x And thisy = y Then Return True
  830.         Next
  831.         Return False
  832. End Function
  833. Function olistopen()
  834.         Local cnt=0
  835.         For this.ol = Each ol
  836.         cnt=cnt+1
  837.         If cnt>0 Then Return True
  838.         Next
  839.         Return False
  840. End Function
  841. Function floodfill()
  842.         For aa.ol = Each ol
  843.                 Delete aa              
  844.         Next
  845.         For bb.cl = Each cl
  846.                 Delete  bb
  847.         Next
  848.         Local st[10]
  849.         st[0] = 0
  850.         st[1] = -1
  851.         st[2] = 1
  852.         st[3] = 0
  853.         st[4] = 0
  854.         st[5] = 1
  855.         st[6] = -1
  856.         st[7] = 0
  857.         If screen="canvas"
  858.         If RectsOverlap(cmx,cmy,1,1,0,0,(mw+1)*tw,(mh+1)*th)   
  859.                 Local sx = cmx/tw
  860.                 Local sy = cmy/th      
  861.                 Local fillc
  862.                 ffaddlist(sx,sy)
  863.                 fillc = map(sx,sy)
  864.                 If brushindex = fillc Then Return
  865.                 Local xm
  866.                 Local my
  867.                 While fflistopen() = True
  868.                         this.ol = Last ol
  869.                         mx = thisx
  870.                         my = thisy
  871.                         map(mx,my) = brushindex
  872.                         ffremlist(mx,my)
  873.                         For i=0 To 6 Step 2
  874.                                 x = st[i]
  875.                                 y = st[i+1]
  876.                                 If mx+x >=0 And mx+x<=mw
  877.                                 If my+y >=0 And my+y<=mh
  878.                                         If map(mx+x,my+y) = fillc
  879.                                                 ffaddlist(mx+x,my+y)
  880.                                         End If
  881.                                 End If                         
  882.                                 End If
  883.                         Next
  884.                 Wend
  885.         End If
  886.         End If
  887. End Function
  888. Function ffremlist(x,y)
  889.         For this.ol = Each ol
  890.                 If thisx = x And thisy = y
  891.                         Delete this
  892.                         Return
  893.                 End If
  894.         Next
  895. End Function
  896. Function fflistopen()
  897.         Local cnt=0
  898.         For this.ol = Each ol
  899.                 cnt=cnt+1
  900.         Next
  901.         If cnt>0 Then Return True
  902.         Return False
  903. End Function
  904. Function ffaddlist(x,y)
  905.         this.ol = New ol
  906.         thisx = x
  907.         thisy = y
  908. End Function
  909. Function makeline(x1,y1,x2,y2) 
  910.         x1=x1/tw
  911.         y1=y1/th
  912.         x2=x2/tw
  913.         y2=y2/th
  914. ;       Local x1=lsx1/tw
  915. ;       Local y1=lsy1/th
  916. ;       Local x2=lsx2/tw
  917. ;       Local y2=lsy2/th
  918.    Local dx
  919.         Local dy
  920.         Local sx
  921.         Local sy
  922.         Local e
  923.      dx = Abs(x2 - x1)
  924.      sx = -1
  925.      If x1 < x2 Then sx = 1      
  926.      dy = Abs(y2 - y1)
  927.      sy = -1
  928.      If y1 < y2 Then sy = 1
  929.      If dx < dy Then
  930.          e = dx / 2
  931.      Else
  932.          e = dy / 2          
  933.      End If
  934.      Local exitloop=False
  935.      While exitloop = False
  936.        ; map(x1,y1) = brushindex
  937.                 brushdown(x1*tw,y1*th,brushindex)
  938.        If x1 = x2
  939.            If y1 = y2
  940.                exitloop = True
  941.            End If
  942.        End If
  943.        If dx > dy Then
  944.             x1 = x1 + sx :                      e = e - dy
  945.              If e < 0 Then e = e + dx : y1 = y1 + sy
  946.        Else
  947.            y1 = y1 + sy : e = e - dx
  948.            If e < 0 Then e = e + dy : x1 = x1 + sx
  949.        EndIf
  950.         Wend
  951. End Function
  952. Function brushdown(cmx,cmy,ind)
  953.         If brushsize=1 Then
  954.                 If protcol(map(cmx/tw,cmy/th)) = False
  955.                         If shade = False
  956.                                 map(cmx/tw,cmy/th) = ind
  957.                         End If
  958.                         If shade = True
  959.                                 If shademap(cmx/tw,cmy/th) = False
  960.                                         map(cmx/tw,cmy/th) = ind
  961.                                 End If
  962.                         End If
  963.                 End If
  964.         End If
  965.         If brushsize>1 Then
  966.                 Local cnt
  967.                 Local brushbuffer[10*10]
  968.                 If smudge=True
  969.                         If lcmx<>cmx And lcmy<>cmy     
  970.                         ; put data under brush (prev pos)
  971.                         ; in temp array
  972.                         cnt=0
  973.                         For y=-brushsize/2 To brushsize/2
  974.                         For x=-brushsize/2 To brushsize/2
  975.                                 brushbuffer[cnt]=-1
  976.                                 If lcmx/tw+x >=0 And lcmx/tw+x <=mw
  977.                                 If lcmy/th+y >=0 And lcmy/th+y <=mh                    
  978.                                 brushbuffer[cnt] = map(lcmx/tw+x,lcmy/th+y)
  979.                                 End If
  980.                                 End If
  981.                                 cnt=cnt+1
  982.                         Next
  983.                         Next
  984.                         ; copy temp array data to
  985.                         ; current brush position
  986.                         ; uses intensity(rand)
  987.                         cnt=0
  988.                         For y=-brushsize/2 To brushsize/2
  989.                         For x=-brushsize/2 To brushsize/2
  990.                                 If cmx/tw+x >=0 And cmx/tw+x <=mw
  991.                                 If cmy/th+y >=0 And cmy/th+y <=mh                      
  992.                                 If brushbuffer[cnt]>-1
  993.                                 If Rnd(smudgeint)<2
  994.                                 If protcol(map(cmx/tw+x,cmy/th+y)) = False
  995.                                         If shade=False
  996.                                                 map(cmx/tw+x,cmy/th+y) = brushbuffer[cnt]
  997.                                         End If
  998.                                         If shade = True
  999.                                                 If shademap(cmx/tw+x,cmy/th+y) = False
  1000.                                                 map(cmx/tw+x,cmy/th+y) = brushbuffer[cnt]
  1001.                                         End If                         
  1002.                                         End If
  1003.                                
  1004.                                 End If
  1005.                                 End If                                                 
  1006.                                 End If
  1007.                                 End If
  1008.                                 End If
  1009.                                 cnt=cnt+1
  1010.                         Next
  1011.                         Next
  1012.                        
  1013.                         ;
  1014.                         EndIf                  
  1015.                 End If
  1016.                 If normal=True
  1017.                         For y=-brushsize/2 To brushsize/2
  1018.                         For x=-brushsize/2 To brushsize/2
  1019.                                 If cmx/tw+x >=0 And cmx/tw+x <=mw
  1020.                                 If cmy/th+y >=0 And cmy/th+y <=mh
  1021.                                 If protcol(map(cmx/tw+x,cmy/th+y)) = False
  1022.                                         If shade = False
  1023.                                                 map(cmx/tw+x,cmy/th+y) = ind
  1024.                                         End If
  1025.                                         If shade = True
  1026.                                         If shademap(cmx/tw+x,cmy/th+y) = False
  1027.                                                 map(cmx/tw+x,cmy/th+y) = ind
  1028.                                         End If
  1029.                                         End If
  1030.                                 End If
  1031.                                 End If
  1032.                                 End If
  1033.                         Next
  1034.                         Next
  1035.                 End If
  1036.                 If scatter=True
  1037.                         For y=-brushsize/2 To brushsize/2
  1038.                         For x=-brushsize/2 To brushsize/2
  1039.                                 If cmx/tw+x >=0 And cmx/tw+x <=mw
  1040.                                 If cmy/th+y >=0 And cmy/th+y <=mh
  1041.                                 If Rnd(brushsize)<2
  1042.                                 If protcol(map(cmx/tw+x,cmy/th+y)) = False
  1043.                                
  1044.                                         If shade=False
  1045.                                                 map(cmx/tw+x,cmy/th+y) = ind
  1046.                                         End If
  1047.                                         If shade = True
  1048.                                         If shademap(cmx/tw+x,cmy/th+y)=False
  1049.                                                 map(cmx/tw+x,cmy/th+y) = ind
  1050.                                         End If
  1051.                                         End If
  1052.                                
  1053.                                 End If
  1054.                                 End If
  1055.                                 End If
  1056.                                 End If
  1057.                         Next
  1058.                         Next
  1059.                 End If
  1060.                 If explode = True
  1061.                         For y=-brushsize/2 To brushsize/2
  1062.                         For x=-brushsize/2 To brushsize/2
  1063.                                 If cmx/tw+x >=0 And cmx/tw+x <=mw
  1064.                                 If cmy/th+y >=0 And cmy/th+y <=mh
  1065.                                         If Rnd(brushsize)<2
  1066.                                         b = Rnd(cmx/tw-brushsize/2,cmx/tw+brushsize/2)
  1067.                                         c = Rnd(cmy/th-brushsize/2,cmy/th+brushsize/2)
  1068.                                         If b>=0 And b<=mw And c>=0 And c<=mh
  1069.                                         If protcol(map(cmx/tw+x,cmy/th+y)) = False
  1070.                                                 a = map(b,c)
  1071.                                                 If shade = False
  1072.                                                         map(cmx/tw+x,cmy/th+y) = a
  1073.                                                 End If
  1074.                                                 If shade = True
  1075.                                                 If shademap(cmx/tw+x,cmy/th+y) = False
  1076.                                                         map(cmx/tw+x,cmy/th+y) = a
  1077.                                                 End If
  1078.                                                 End If
  1079.                                                
  1080.                                         End If
  1081.                                         End If
  1082.                                         End If
  1083.                                 End If
  1084.                                 End If                 
  1085.                         Next
  1086.                         Next                   
  1087.                 End If
  1088.         End If
  1089. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal