Mercurial > maze-src
view 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 source
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
