Mercurial > maze-src
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/png_to_js.rb Sun Sep 15 11:46:47 2019 +0200 @@ -0,0 +1,251 @@ +require 'pp' +require 'base64' +require 'gamedata' + +def food_loader(foods, wd, file) + foodnames = [] + foodeffects = [] + foods.each {|food| + file.write("var #{food[:name]}= new Image();") + imgfile = "#{wd}/food/#{food[:name]}.png" + s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) + file.write("#{food[:name]}.src=\"data:image/png;base64,#{s}\";\n") + foodnames << "#{food[:name]}" + foodeffects << food[:energy] + } + + file.write("var food_image = [#{foodnames.join(',')}];\n") + file.write("var food_effects = [#{foodeffects.join(',')}];\n") +end + +def item_loader(items, wd, file) + itemnames = [] + itemvalues = [] + items.each {|loot| + file.write("var #{loot[:name]}= new Image();") + imgfile = "#{wd}/loot/#{loot[:name]}.png" + s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) + file.write("#{loot[:name]}.src=\"data:image/png;base64,#{s}\";\n") + itemnames << "#{loot[:name]}" + itemvalues << loot[:value] + } + + file.write("var item_image = [#{itemnames.join(',')}];\n") + file.write("var item_value = [#{itemvalues.join(',')}];\n") +end + +def weapon_loader(weapons, wd, file) + weaponnames = [] + weaponhits = [] + weapon_anim_idxs = [] + weapons.each {|weapon| + file.write("var #{weapon[:name]}= new Image();") + imgfile = "#{wd}/weapons/#{weapon[:name]}.png" + s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) + file.write("#{weapon[:name]}.src=\"data:image/png;base64,#{s}\";\n") + weaponnames << "#{weapon[:name]}" + weaponhits << weapon[:hitvalue] + weapon_anim_idxs << weapon[:anim_idx] + } + + file.write("var weapon_images = [#{weaponnames.join(',')}];\n") + file.write("var weapon_hits = [#{weaponhits.join(',')}];\n") + file.write("var weapon_anim_idx = [#{weapon_anim_idxs.join(',')}];\n") + +end + +WALL_COUNT = 15 + +def wall_loader(js_var_name, wall_type, wd, file) + file.write("\nvar #{js_var_name}=[];\n") + + (0 .. WALL_COUNT).each do |v| + imgfile = "#{wd}/#{wall_type}/cell_#{v}.png" + s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) + + file.write("#{js_var_name}[#{v}] = new Image();\n") + file.write("#{js_var_name}[#{v}].src=\"data:image/png;base64,#{s}\";\n") + end +end + +def doored_wall_loader(js_var_name, wall_location, door_state, indexes, wd, file) + file.write("\nvar #{js_var_name}=[];\n") + cidx = 0 + indexes.each do |v| + imgfile = "#{wd}/walls/cell_#{v}_#{wall_location}_door_#{door_state}.png" + s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) + file.write("#{js_var_name}[#{cidx}] = {img: new Image(), idx:#{v}}; \n") + file.write("#{js_var_name}[#{cidx}].img.src=\"data:image/png;base64,#{s}\";\n") + + cidx += 1 + end +end + +def staired_wall_loader(js_var_name, stair_direction, indexes, wd, file) + file.write("\nvar #{js_var_name}=[];\n") + + indexes.each do |v| + imgfile = "#{wd}/walls/cell_#{v}_stairs_#{stair_direction}.png" + s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) + + file.write("#{js_var_name}[#{v}] = new Image();\n") + file.write("#{js_var_name}[#{v}].src=\"data:image/png;base64,#{s}\";\n") + end +end + +# Will load the images of an animation +def anim_loader(js_var_name,location, type, direction, count, wd, file) + + file.write("\nvar #{js_var_name}=[];\n") + + (1 .. count).each do | v | + imgfile = "#{wd}/#{location}/#{type}/#{direction}_#{type}_#{v}.png" + s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) + + file.write("#{js_var_name}[#{v - 1}] = new Image();\n") + file.write("#{js_var_name}[#{v - 1}].src=\"data:image/png;base64,#{s}\";\n") + end +end + +def overlay_loader(js_var_name, type, count, wd, file) + file.write("\nvar #{js_var_name}=[];\n") + (0..count).each do | v | + imgfile = "#{wd}/overlay/#{type}_#{v}.png" + s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) + + file.write("#{js_var_name}[#{v}] = new Image();\n") + file.write("#{js_var_name}[#{v}].src=\"data:image/png;base64,#{s}\";\n") + end +end + + +def single_image_loader_printer(images) + images.each do | v | + imgfile = "img/#{v}" + s = Base64.strict_encode64(File.open("#{imgfile}", 'rb').read) + print "#{v}.src=\"data:image/png;base64,#{s}\";\n" + end +end + +################################################################################################################## +# Main entry point # +################################################################################################################## + +abort("Wrong directory #{Dir.pwd} since no ./img directory exists") if not Dir.exist? ("#{Dir.pwd}/img") + +wd = "#{Dir.pwd}/img" + +def load_player_images(array_name, location, file, wd) + anim_loader("right_going_#{location}", location, 'wl', 'r', 9, wd, file) + anim_loader("left_going_#{location}", location, 'wl', 'l', 9, wd, file) + anim_loader("up_going_#{location}", location, 'wl', 'u', 9, wd, file) + anim_loader("down_going_#{location}", location, 'wl', 'd', 9, wd, file) + file.write("var #{array_name} = [left_going_#{location}, up_going_#{location}, right_going_#{location}, down_going_#{location}];") + + anim_loader("right_thrust_#{location}", location, 'tr', 'r', 8, wd, file) + anim_loader("left_thrust_#{location}", location, 'tr', 'l', 8, wd, file) + anim_loader("up_thrust_#{location}", location, 'tr', 'u', 8, wd, file) + anim_loader("down_thrust_#{location}", location, 'tr', 'd', 8, wd, file) + file.write("var #{array_name}_thrust = [left_thrust_#{location}, up_thrust_#{location}, right_thrust_#{location}, down_thrust_#{location}];") +end + +open('graphics.js', 'w') do |file| + + # 1. Wall images, in: /img/walls/cell_*.png + wall_loader('wall_images', 'walls', wd, file) + # 2. Fog drawn walls + wall_loader('fog_drawn_wall_images', 'fog_drawn', wd, file) + + # 2.5 cells with closed doors + bottom_closed_door_indexes = [12,13,1,4,5,8,9] + doored_wall_loader('bottom_closed_doors', 'bottom', 'closed', bottom_closed_door_indexes, wd, file) + + top_closed_door_indexes = [2,6,14] + doored_wall_loader('top_closed_doors', 'top', 'closed', top_closed_door_indexes, wd, file) + + # 2.6 Stairs going down + stairs_down_indexes = [1,8,9] + staired_wall_loader('stairs_down', 'down', stairs_down_indexes, wd, file) + + # 3. player + step_anim_cnt = 'step_anim_cnt' + file.write("var #{step_anim_cnt}= 9;") + + thrust_anim_cnt = 'thrust_anim_cnt' + file.write("var #{thrust_anim_cnt}= 8;") + + load_player_images('lr_player', 'player', file, wd) + load_player_images('lr_player_spear', 'player_spear', file, wd) + load_player_images('lr_player_armor', 'player_armor', file, wd) + load_player_images('lr_player_armor_spear', 'player_armor_spear', file, wd) + load_player_images('lr_player_shoes', 'player_shoes', file, wd) + load_player_images('lr_player_shoes_spear', 'player_shoes_spear', file, wd) + + # dying player + anim_loader('dying_player', 'player', 'hr', 't', 6, wd, file) + + # Skeletons + + # simple skeleton + + anim_loader('skel_walker_right', 'skel', 'wl', 'r', 9, wd, file) + anim_loader('skel_walker_left', 'skel', 'wl', 'l', 9, wd, file) + anim_loader('skel_walker_up', 'skel', 'wl', 'u', 9, wd, file) + anim_loader('skel_walker_down', 'skel', 'wl', 'd', 9, wd, file) + file.write("var skel = [skel_walker_left, skel_walker_up, skel_walker_right, skel_walker_down];\n") + + # Skeleton with spear + + anim_loader('skel_spear_walker_right', 'skel_spear', 'wl', 'r', 9, wd, file) + anim_loader('skel_spear_walker_left', 'skel_spear', 'wl', 'l', 9, wd, file) + anim_loader('skel_spear_walker_up', 'skel_spear', 'wl', 'u', 9, wd, file) + anim_loader('skel_spear_walker_down', 'skel_spear', 'wl', 'd', 9, wd, file) + file.write("var skel_spear = [skel_spear_walker_left, skel_spear_walker_up, skel_spear_walker_right, skel_spear_walker_down];\n") + + # Skeletons array + + file.write('var walker_images = [skel, skel_spear];') + + # Dancing skeletion + anim_loader('skel_killer_dancer_d', 'skel', 'sc', 'd', 7, wd, file) + anim_loader('skel_killer_dancer_u', 'skel', 'sc', 'u', 7, wd, file) + anim_loader('skel_killer_dancer_l', 'skel', 'sc', 'l', 7, wd, file) + anim_loader('skel_killer_dancer_r', 'skel', 'sc', 'r', 7, wd, file) + file.write("var skel_dancer = [skel_killer_dancer_l, skel_killer_dancer_u, skel_killer_dancer_r, skel_killer_dancer_d];\n") + + # Dying skeleton + anim_loader('skel_dies', 'skel', 'hr', 't', 6, wd, file) + + # 5. torches + overlay_loader('torch_images', 'torch', 2, wd, file) + + #6. food stuff + food = [ {:name => 'apple', :energy => 10}, + {:name => 'bread', :energy => 15}, + {:name => 'carrot', :energy => 20}, + {:name => 'fish', :energy => 25}, + {:name => 'meat', :energy => 30}, + {:name => 'mushroom_bad', :energy => -15}, + {:name => 'mushroom', :energy => 5}, + {:name => 'onio', :energy => 5}, + {:name => 'potato', :energy => 15}, + {:name => 'tomato', :energy => 15} + ] + food_loader(food, wd, file) + + #7. Weapons. Don't change the order, js uses this + weapons = [ {:name => 'spear', :hitvalue => 5, :anim_idx => 1}, + {:name => 'armor', :hitvalue => 0, :anim_idx => 2}, + {:name => 'shoe', :hitvalue => 0, :anim_idx => 4}, + {:name => 'ring', :hitvalue => 0, :anim_idx => 0}] + + weapon_loader(weapons, wd, file) + + # 8. Loot items for the adventure mode + + item_loader($ITEMS, wd, file) + + # Activate this upon final release and put the data in the img tags in the html + #static_images=%w(menu.png dungeonslogo.png player/heart.png skel/wl/d_wl_1.png funnyfellow.png) + #single_image_loader_printer static_images +end \ No newline at end of file
