source: golgotha/src/golg/resources.cc @ 80

Last change on this file since 80 was 80, checked in by Sam Hocevar, 11 years ago
  • Adding the Golgotha source code. Not sure what's going to be interesting in there, but since it's all public domain, there's certainly stuff to pick up.
File size: 11.4 KB
Line 
1/********************************************************************** <BR>
2  This file is part of Crack dot Com's free source code release of
3  Golgotha. <a href="http://www.crack.com/golgotha_release"> <BR> for
4  information about compiling & licensing issues visit this URL</a>
5  <PRE> If that doesn't help, contact Jonathan Clark at
6  golgotha_source@usa.net (Subject should have "GOLG" in it)
7***********************************************************************/
8
9#include "resources.hh"
10#include "window/cursor.hh"
11#include "memory/malloc.hh"
12#include "string/string.hh"
13#include "network/login.hh"
14#include "string/string.hh"
15#include "loaders/load.hh"
16#include "r1_api.hh"
17
18#include "sound/sound.hh"
19
20g1_resource_class g1_resources;
21
22float f_get(char *rname)
23{
24  i4_const_str::iterator s=i4gets(rname).begin();
25  return s.read_float();
26}
27
28
29void g1_resource_class::g_float(i4_float &f, char *res_name)
30{
31  i4_const_str st=use->get(res_name);
32  if (st.null())
33    i4_error("Constant missing %s\n",res_name);
34  i4_const_str::iterator i=st.begin();
35  f=i.read_float();
36}
37
38void g1_resource_class::g_cursor(i4_cursor_class *&c, char *res_name, int big, int color)
39{
40  i4_const_str st=use->get(res_name);
41  if (st.null())
42    i4_error("Constant missing from res/constants.res %s\n",res_name);
43
44  i4_const_str::iterator i=st.begin();
45  i4_str *fmt=i.read_string();
46
47  w32 tcolor=i.read_number();
48  int hx=i.read_number();  if (!big) hx/=2;
49  int hy=i.read_number();  if (!big) hy/=2;
50
51  i4_str *fn=fmt->sprintf(100,big ? "big" : "small", color ? 16 : 2);
52  delete fmt;
53
54  i4_image_class *im=i4_load_image(*fn);
55  if (!im)
56  {
57    char buf[100];
58    i4_os_string(*fn, buf, 100);
59    i4_error("failed to load image for cursor in constants.res : %s",buf);
60  }
61
62  delete fn;
63
64  c=new i4_cursor_class(im, tcolor, hx, hy);
65
66  delete im;
67}
68 
69void g1_resource_class::g_w32(w32 &x, char *res_name)
70{
71  i4_const_str st=use->get(res_name);
72  if (st.null())
73    i4_error("Constant missing %s\n",res_name);
74  i4_const_str::iterator i=st.begin();
75  x=i.read_number();
76}
77
78void g1_resource_class::g_sw32(sw32 &x, char *res_name)
79{
80  i4_const_str st=use->get(res_name);
81  if (st.null())
82    i4_error("Constant missing %s\n",res_name);
83  i4_const_str::iterator i=st.begin();
84  x=i.read_number();
85}
86
87void g1_resource_class::g_w16(w16 &x, char *res_name)
88{
89  i4_const_str st=use->get(res_name);
90  if (st.null())
91    i4_error("Constant missing %s\n",res_name);
92  i4_const_str::iterator i=st.begin();
93  x=i.read_number();
94}
95
96void g1_resource_class::g_sw16(sw16 &x, char *res_name)
97{
98  i4_const_str st=use->get(res_name);
99  if (st.null())
100    i4_error("Constant missing %s\n",res_name);
101  i4_const_str::iterator i=st.begin();
102  x=i.read_number();
103}
104
105void g1_resource_class::g_point(i4_3d_point_class &p, char *res_name)
106{
107  i4_const_str *s,*x=use->get_array(res_name);
108 
109  s=x;
110  i4_const_str::iterator i=x->begin();
111  p.x=i.read_float();
112
113  x++;
114  i=x->begin();
115  p.y=i.read_float();
116
117  x++;
118  i=x->begin();
119  p.z=i.read_float();
120
121  i4_free(s);
122}
123
124void g1_resource_class::g_rect(rect &r, char *res_name)
125{
126 i4_const_str *s,*x=use->get_array(res_name);
127 
128  s=x;
129  i4_const_str::iterator i=x->begin();
130  r.x1=i.read_number();
131
132  x++;
133  i=x->begin();
134  r.y1=i.read_number();
135
136  x++;
137  i=x->begin();
138  r.x2=i.read_number();
139
140  x++;
141  i=x->begin();
142  r.y2=i.read_number();
143
144  i4_free(s);
145}
146
147void g1_resource_class::cleanup()
148{
149  int i;
150  for (i=0; i<G1_TOTAL_CURSORS; i++)
151  {
152    if (big_cursors[i])     
153      delete big_cursors[i];
154   
155    if (small_cursors[i])     
156      delete small_cursors[i];
157  }
158
159
160  for (i=0; i<t_images; i++)
161    if (images[i])
162    {
163      delete images[i];
164      images[i]=0;
165    }
166
167  i4_free(images);
168
169  i4_free(build_context_help); 
170  t_build_context_helps=0;
171
172  if (username) delete username;
173  username=0;
174}
175
176void g1_resource_class::load()
177{
178  int i;
179
180  i4_string_manager_class constants;
181  constants.init();
182  constants.load(i4gets("constants"));
183 
184  paused=i4_F;
185 
186  username=i4_get_user_name();
187
188  use=&constants;
189
190  draw_flags=DRAW_ALL;
191
192  char *cursors[]={"default_cursor",
193                   "select_cursor", "move_cursor",
194                  "target_cursor", "follow_cursor", "x_cursor" };
195
196  for (i=0; i<G1_TOTAL_CURSORS; i++)
197  {
198    g_cursor(big_cursors[i], cursors[i], 1, 1);
199    g_cursor(small_cursors[i], cursors[i],  0, 0);
200  }
201 
202  g_float(gravity,                                 "gravity");
203  g_float(damping_friction,                        "damping_friction");
204  damping_fraction = 1.0/damping_friction;
205  ln_damping_friction = exp(0.1*damping_friction);
206
207  g_float(recoil_factor,                           "recoil_factor");
208  g_float(recoil_gravity,                          "recoil_gravity");
209
210  g_float(sink_rate,                               "sink_rate");
211  g_sw16(water_damage,                             "water_damage");
212
213  g_float(player_turn_speed,                       "player_turn_speed");
214  g_float(player_accel,                            "player_accel");
215
216  g_rect(health_window,                            "health_window");
217  g_rect(chain_gun_window,                         "chain_gun_window");
218
219  g_rect(main_gun_window,                          "main_gun_window");
220  g_rect(missile_window,                           "missile_window");
221  g_rect(options_window,                           "options_window");
222
223
224
225  g_float(player_max_speed,                        "player_max_speed");
226  g_float(player_max_strafe_speed,                 "player_max_strafe_speed");
227  g_float(player_stop_friction,                    "player_stop_friction");
228
229  g_float(strafe_turn_speed,                       "strafe_turn_speed");
230  g_float(player_roll_speed,                       "player_roll_speed");
231  g_float(player_roll_max,                         "player_roll_max");
232  g_float(bullet_speed,                            "bullet_speed");
233
234  g_float(player_strafe_accel,                     "player_strafe_accel");
235
236  g_float(camera_dist,                             "camera_dist");
237  g_float(camera_angle,                            "camera_angle");
238  g_float(startegy_camera_angle,                   "startegy_camera_angle");
239  g_float(startegy_camera_dist,                    "startegy_camera_dist");
240  g_float(strategy_camera_turn_angle,              "strategy_camera_turn_angle");
241
242  g_float(follow_camera_height,                    "follow_camera_height");
243  g_float(follow_camera_dist,                      "follow_camera_dist");
244  g_float(follow_camera_rotation,                  "follow_camera_rotation");
245
246  g_float(player_fire_slop_angle,                  "player_fire_slop_angle");
247  g_float(player_turret_radius,                    "player_turret_radius");
248  g_point(player_top_attach,                       "player_top_attach");
249  g_point(rocket_tank_top_attach,                  "rocket_tank_top_attach");
250  g_point(turret_muzzle_attach,                    "turret_muzzle_attach");
251  g_point(turret_top_attach,                       "turret_top_attach");
252  g_point(supergun_muzzle_attach,                  "supergun_muzzle_attach");
253
254  g_point(repairer_tip_attach,                     "repairer_tip_attach");
255  g_float(repairer_boom_offset,                    "repairer_boom_offset");
256
257  g_float(lod_switch_dist,                         "lod_switch_dist");
258  g_float(lod_disappear_dist,                      "lod_disappear_dist");
259  g_float(skimpy_details_dist,                     "skimpy_details_dist");
260
261  g_float(view_radii[0],                           "visual_radii_low");
262  g_float(view_radii[1],                           "visual_radii_med");
263  g_float(view_radii[2],                           "visual_radii_high");
264
265  g_rect(balance,                                  "balance");
266  g_rect(build_buttons,                            "build_buttons");
267
268  g_rect(lives,                                    "lives");
269  g_rect(mouse_scroll,                             "mouse_scroll");
270
271  g_w16(net_hostname_x,                            "net_hostname_x");
272  g_w16(net_hostname_y,                            "net_hostname_y");
273
274  g_w16(net_username_x,                            "net_username_x");
275  g_w16(net_username_y,                            "net_username_y");
276
277  g_w16(net_found_x1,                              "net_found_x1");
278  g_w16(net_found_x2,                              "net_found_x2");
279  g_w16(net_found_y,                               "net_found_y");
280
281  g_w16(net_start_x,                               "net_start_x");
282  g_w16(net_start_y,                               "net_start_y");
283
284  g_w16(net_find_port,                             "net_find_port");
285  g_w16(net_udp_port,                              "net_udp_port");
286
287  g_sw16(compass_x,                                "compass_x");
288  g_sw16(compass_y,                                "compass_y");
289
290  g_sw16(stat_pad_start_x,                         "stat_pad_start_x");
291  g_sw16(stat_pad_start_y,                         "stat_pad_start_y");
292  g_w16(stat_pad_size_x,                           "stat_pad_size_x");
293  g_w16(stat_pad_size_y,                           "stat_pad_size_y");
294  g_sw16(stat_pad_step_x,                          "stat_pad_step_x");
295  g_sw16(stat_pad_step_y,                          "stat_pad_step_y");
296
297  g_w16(small_health_added,                        "small_health_added");
298  g_w16(large_health_added,                        "large_health_added");
299
300  g_w16(small_bullets_added,                       "small_bullets_added");
301  g_w16(large_bullets_added,                       "large_bullets_added");
302
303  g_w16(small_chain_added,                         "small_chain_added");
304  g_w16(large_chain_added,                         "large_chain_added");
305
306  g_w16(small_missiles_added,                       "small_missiles_added");
307  g_w16(large_missiles_added,                       "large_missiles_added");
308
309  g_w16(small_money_added,                          "small_money_added");
310  g_w16(large_money_added,                          "large_money_added");
311
312
313
314  g_w32(supertank_machine_gun_damage,              "supertank_machine_gun_damage");
315  g_w32(supertank_turret_damage,                   "supertank_turret_damage");
316  g_w32(supertank_guided_missile_damage,           "supertank_guided_missile_damage");
317
318  g_w32(action_strategy_ticks_to_switch,           "action_strategy_ticks_to_switch");
319
320  g_w32(lock_cheat,                                "lock_cheat");
321
322  i4_const_str *im_array=constants.get_array("images");
323  t_images=0;
324  for (i=0; !im_array[i].null(); i++)
325    t_images++;
326
327  images=(i4_image_class **)i4_malloc(sizeof(i4_image_class **) * t_images, "image array");
328
329  for (i=0; i<t_images && !im_array[i].null(); i++)
330  {
331    images[i]=i4_load_image(im_array[i]);
332    if (!images[i])
333    {
334      char im_name[100];
335      i4_error("image missing %s", i4_os_string(im_array[i], im_name, sizeof(im_name)));
336    }
337  }
338  i4_free(im_array);
339
340
341  use=0;   // make sure this isn't used any more
342  constants.uninit();
343
344
345  build_context_help=i4_string_man.get_array("build_context_help");
346  if (!build_context_help)
347    i4_error("no build_context_help in res/g1.res");
348 
349  t_build_context_helps=0;
350  for (i4_const_str *str=build_context_help; !str->null(); str++)
351    t_build_context_helps++;
352
353
354  render_window_expand_mode=R1_COPY_1x1;
355}
356
357
Note: See TracBrowser for help on using the repository browser.