Mercurial > maze-src
comparison png_to_js.rb @ 0:1eef88068f9f tip
initial commit of maze game source
| author | ferencd |
|---|---|
| date | Sun, 15 Sep 2019 11:46:47 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:1eef88068f9f |
|---|---|
| 1 require 'pp' | |
| 2 require 'base64' | |
| 3 require 'gamedata' | |
| 4 | |
| 5 def food_loader(foods, wd, file) | |
| 6 foodnames = [] | |
| 7 foodeffects = [] | |
| 8 foods.each {|food| | |
| 9 file.write("var #{food[:name]}= new Image();") | |
| 10 imgfile = "#{wd}/food/#{food[:name]}.png" | |
| 11 s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) | |
| 12 file.write("#{food[:name]}.src=\"data:image/png;base64,#{s}\";\n") | |
| 13 foodnames << "#{food[:name]}" | |
| 14 foodeffects << food[:energy] | |
| 15 } | |
| 16 | |
| 17 file.write("var food_image = [#{foodnames.join(',')}];\n") | |
| 18 file.write("var food_effects = [#{foodeffects.join(',')}];\n") | |
| 19 end | |
| 20 | |
| 21 def item_loader(items, wd, file) | |
| 22 itemnames = [] | |
| 23 itemvalues = [] | |
| 24 items.each {|loot| | |
| 25 file.write("var #{loot[:name]}= new Image();") | |
| 26 imgfile = "#{wd}/loot/#{loot[:name]}.png" | |
| 27 s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) | |
| 28 file.write("#{loot[:name]}.src=\"data:image/png;base64,#{s}\";\n") | |
| 29 itemnames << "#{loot[:name]}" | |
| 30 itemvalues << loot[:value] | |
| 31 } | |
| 32 | |
| 33 file.write("var item_image = [#{itemnames.join(',')}];\n") | |
| 34 file.write("var item_value = [#{itemvalues.join(',')}];\n") | |
| 35 end | |
| 36 | |
| 37 def weapon_loader(weapons, wd, file) | |
| 38 weaponnames = [] | |
| 39 weaponhits = [] | |
| 40 weapon_anim_idxs = [] | |
| 41 weapons.each {|weapon| | |
| 42 file.write("var #{weapon[:name]}= new Image();") | |
| 43 imgfile = "#{wd}/weapons/#{weapon[:name]}.png" | |
| 44 s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) | |
| 45 file.write("#{weapon[:name]}.src=\"data:image/png;base64,#{s}\";\n") | |
| 46 weaponnames << "#{weapon[:name]}" | |
| 47 weaponhits << weapon[:hitvalue] | |
| 48 weapon_anim_idxs << weapon[:anim_idx] | |
| 49 } | |
| 50 | |
| 51 file.write("var weapon_images = [#{weaponnames.join(',')}];\n") | |
| 52 file.write("var weapon_hits = [#{weaponhits.join(',')}];\n") | |
| 53 file.write("var weapon_anim_idx = [#{weapon_anim_idxs.join(',')}];\n") | |
| 54 | |
| 55 end | |
| 56 | |
| 57 WALL_COUNT = 15 | |
| 58 | |
| 59 def wall_loader(js_var_name, wall_type, wd, file) | |
| 60 file.write("\nvar #{js_var_name}=[];\n") | |
| 61 | |
| 62 (0 .. WALL_COUNT).each do |v| | |
| 63 imgfile = "#{wd}/#{wall_type}/cell_#{v}.png" | |
| 64 s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) | |
| 65 | |
| 66 file.write("#{js_var_name}[#{v}] = new Image();\n") | |
| 67 file.write("#{js_var_name}[#{v}].src=\"data:image/png;base64,#{s}\";\n") | |
| 68 end | |
| 69 end | |
| 70 | |
| 71 def doored_wall_loader(js_var_name, wall_location, door_state, indexes, wd, file) | |
| 72 file.write("\nvar #{js_var_name}=[];\n") | |
| 73 cidx = 0 | |
| 74 indexes.each do |v| | |
| 75 imgfile = "#{wd}/walls/cell_#{v}_#{wall_location}_door_#{door_state}.png" | |
| 76 s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) | |
| 77 file.write("#{js_var_name}[#{cidx}] = {img: new Image(), idx:#{v}}; \n") | |
| 78 file.write("#{js_var_name}[#{cidx}].img.src=\"data:image/png;base64,#{s}\";\n") | |
| 79 | |
| 80 cidx += 1 | |
| 81 end | |
| 82 end | |
| 83 | |
| 84 def staired_wall_loader(js_var_name, stair_direction, indexes, wd, file) | |
| 85 file.write("\nvar #{js_var_name}=[];\n") | |
| 86 | |
| 87 indexes.each do |v| | |
| 88 imgfile = "#{wd}/walls/cell_#{v}_stairs_#{stair_direction}.png" | |
| 89 s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) | |
| 90 | |
| 91 file.write("#{js_var_name}[#{v}] = new Image();\n") | |
| 92 file.write("#{js_var_name}[#{v}].src=\"data:image/png;base64,#{s}\";\n") | |
| 93 end | |
| 94 end | |
| 95 | |
| 96 # Will load the images of an animation | |
| 97 def anim_loader(js_var_name,location, type, direction, count, wd, file) | |
| 98 | |
| 99 file.write("\nvar #{js_var_name}=[];\n") | |
| 100 | |
| 101 (1 .. count).each do | v | | |
| 102 imgfile = "#{wd}/#{location}/#{type}/#{direction}_#{type}_#{v}.png" | |
| 103 s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) | |
| 104 | |
| 105 file.write("#{js_var_name}[#{v - 1}] = new Image();\n") | |
| 106 file.write("#{js_var_name}[#{v - 1}].src=\"data:image/png;base64,#{s}\";\n") | |
| 107 end | |
| 108 end | |
| 109 | |
| 110 def overlay_loader(js_var_name, type, count, wd, file) | |
| 111 file.write("\nvar #{js_var_name}=[];\n") | |
| 112 (0..count).each do | v | | |
| 113 imgfile = "#{wd}/overlay/#{type}_#{v}.png" | |
| 114 s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) | |
| 115 | |
| 116 file.write("#{js_var_name}[#{v}] = new Image();\n") | |
| 117 file.write("#{js_var_name}[#{v}].src=\"data:image/png;base64,#{s}\";\n") | |
| 118 end | |
| 119 end | |
| 120 | |
| 121 | |
| 122 def single_image_loader_printer(images) | |
| 123 images.each do | v | | |
| 124 imgfile = "img/#{v}" | |
| 125 s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) | |
| 126 print "#{v}.src=\"data:image/png;base64,#{s}\";\n" | |
| 127 end | |
| 128 end | |
| 129 | |
| 130 ################################################################################################################## | |
| 131 # Main entry point # | |
| 132 ################################################################################################################## | |
| 133 | |
| 134 abort("Wrong directory #{Dir.pwd} since no ./img directory exists") if not Dir.exist? ("#{Dir.pwd}/img") | |
| 135 | |
| 136 wd = "#{Dir.pwd}/img" | |
| 137 | |
| 138 def load_player_images(array_name, location, file, wd) | |
| 139 anim_loader("right_going_#{location}", location, 'wl', 'r', 9, wd, file) | |
| 140 anim_loader("left_going_#{location}", location, 'wl', 'l', 9, wd, file) | |
| 141 anim_loader("up_going_#{location}", location, 'wl', 'u', 9, wd, file) | |
| 142 anim_loader("down_going_#{location}", location, 'wl', 'd', 9, wd, file) | |
| 143 file.write("var #{array_name} = [left_going_#{location}, up_going_#{location}, right_going_#{location}, down_going_#{location}];") | |
| 144 | |
| 145 anim_loader("right_thrust_#{location}", location, 'tr', 'r', 8, wd, file) | |
| 146 anim_loader("left_thrust_#{location}", location, 'tr', 'l', 8, wd, file) | |
| 147 anim_loader("up_thrust_#{location}", location, 'tr', 'u', 8, wd, file) | |
| 148 anim_loader("down_thrust_#{location}", location, 'tr', 'd', 8, wd, file) | |
| 149 file.write("var #{array_name}_thrust = [left_thrust_#{location}, up_thrust_#{location}, right_thrust_#{location}, down_thrust_#{location}];") | |
| 150 end | |
| 151 | |
| 152 open('graphics.js', 'w') do |file| | |
| 153 | |
| 154 # 1. Wall images, in: /img/walls/cell_*.png | |
| 155 wall_loader('wall_images', 'walls', wd, file) | |
| 156 # 2. Fog drawn walls | |
| 157 wall_loader('fog_drawn_wall_images', 'fog_drawn', wd, file) | |
| 158 | |
| 159 # 2.5 cells with closed doors | |
| 160 bottom_closed_door_indexes = [12,13,1,4,5,8,9] | |
| 161 doored_wall_loader('bottom_closed_doors', 'bottom', 'closed', bottom_closed_door_indexes, wd, file) | |
| 162 | |
| 163 top_closed_door_indexes = [2,6,14] | |
| 164 doored_wall_loader('top_closed_doors', 'top', 'closed', top_closed_door_indexes, wd, file) | |
| 165 | |
| 166 # 2.6 Stairs going down | |
| 167 stairs_down_indexes = [1,8,9] | |
| 168 staired_wall_loader('stairs_down', 'down', stairs_down_indexes, wd, file) | |
| 169 | |
| 170 # 3. player | |
| 171 step_anim_cnt = 'step_anim_cnt' | |
| 172 file.write("var #{step_anim_cnt}= 9;") | |
| 173 | |
| 174 thrust_anim_cnt = 'thrust_anim_cnt' | |
| 175 file.write("var #{thrust_anim_cnt}= 8;") | |
| 176 | |
| 177 load_player_images('lr_player', 'player', file, wd) | |
| 178 load_player_images('lr_player_spear', 'player_spear', file, wd) | |
| 179 load_player_images('lr_player_armor', 'player_armor', file, wd) | |
| 180 load_player_images('lr_player_armor_spear', 'player_armor_spear', file, wd) | |
| 181 load_player_images('lr_player_shoes', 'player_shoes', file, wd) | |
| 182 load_player_images('lr_player_shoes_spear', 'player_shoes_spear', file, wd) | |
| 183 | |
| 184 # dying player | |
| 185 anim_loader('dying_player', 'player', 'hr', 't', 6, wd, file) | |
| 186 | |
| 187 # Skeletons | |
| 188 | |
| 189 # simple skeleton | |
| 190 | |
| 191 anim_loader('skel_walker_right', 'skel', 'wl', 'r', 9, wd, file) | |
| 192 anim_loader('skel_walker_left', 'skel', 'wl', 'l', 9, wd, file) | |
| 193 anim_loader('skel_walker_up', 'skel', 'wl', 'u', 9, wd, file) | |
| 194 anim_loader('skel_walker_down', 'skel', 'wl', 'd', 9, wd, file) | |
| 195 file.write("var skel = [skel_walker_left, skel_walker_up, skel_walker_right, skel_walker_down];\n") | |
| 196 | |
| 197 # Skeleton with spear | |
| 198 | |
| 199 anim_loader('skel_spear_walker_right', 'skel_spear', 'wl', 'r', 9, wd, file) | |
| 200 anim_loader('skel_spear_walker_left', 'skel_spear', 'wl', 'l', 9, wd, file) | |
| 201 anim_loader('skel_spear_walker_up', 'skel_spear', 'wl', 'u', 9, wd, file) | |
| 202 anim_loader('skel_spear_walker_down', 'skel_spear', 'wl', 'd', 9, wd, file) | |
| 203 file.write("var skel_spear = [skel_spear_walker_left, skel_spear_walker_up, skel_spear_walker_right, skel_spear_walker_down];\n") | |
| 204 | |
| 205 # Skeletons array | |
| 206 | |
| 207 file.write('var walker_images = [skel, skel_spear];') | |
| 208 | |
| 209 # Dancing skeletion | |
| 210 anim_loader('skel_killer_dancer_d', 'skel', 'sc', 'd', 7, wd, file) | |
| 211 anim_loader('skel_killer_dancer_u', 'skel', 'sc', 'u', 7, wd, file) | |
| 212 anim_loader('skel_killer_dancer_l', 'skel', 'sc', 'l', 7, wd, file) | |
| 213 anim_loader('skel_killer_dancer_r', 'skel', 'sc', 'r', 7, wd, file) | |
| 214 file.write("var skel_dancer = [skel_killer_dancer_l, skel_killer_dancer_u, skel_killer_dancer_r, skel_killer_dancer_d];\n") | |
| 215 | |
| 216 # Dying skeleton | |
| 217 anim_loader('skel_dies', 'skel', 'hr', 't', 6, wd, file) | |
| 218 | |
| 219 # 5. torches | |
| 220 overlay_loader('torch_images', 'torch', 2, wd, file) | |
| 221 | |
| 222 #6. food stuff | |
| 223 food = [ {:name => 'apple', :energy => 10}, | |
| 224 {:name => 'bread', :energy => 15}, | |
| 225 {:name => 'carrot', :energy => 20}, | |
| 226 {:name => 'fish', :energy => 25}, | |
| 227 {:name => 'meat', :energy => 30}, | |
| 228 {:name => 'mushroom_bad', :energy => -15}, | |
| 229 {:name => 'mushroom', :energy => 5}, | |
| 230 {:name => 'onio', :energy => 5}, | |
| 231 {:name => 'potato', :energy => 15}, | |
| 232 {:name => 'tomato', :energy => 15} | |
| 233 ] | |
| 234 food_loader(food, wd, file) | |
| 235 | |
| 236 #7. Weapons. Don't change the order, js uses this | |
| 237 weapons = [ {:name => 'spear', :hitvalue => 5, :anim_idx => 1}, | |
| 238 {:name => 'armor', :hitvalue => 0, :anim_idx => 2}, | |
| 239 {:name => 'shoe', :hitvalue => 0, :anim_idx => 4}, | |
| 240 {:name => 'ring', :hitvalue => 0, :anim_idx => 0}] | |
| 241 | |
| 242 weapon_loader(weapons, wd, file) | |
| 243 | |
| 244 # 8. Loot items for the adventure mode | |
| 245 | |
| 246 item_loader($ITEMS, wd, file) | |
| 247 | |
| 248 # Activate this upon final release and put the data in the img tags in the html | |
| 249 #static_images=%w(menu.png dungeonslogo.png player/heart.png skel/wl/d_wl_1.png funnyfellow.png) | |
| 250 #single_image_loader_printer static_images | |
| 251 end |
