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