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