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