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