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