Remove static tag from menu functions
[kraptor.git] / src / menu.c
bloba3e51aa49b57ee37122389d6801b0d823e7af437
1 /*
2 --------------------------------------------------------
3 menu.c
4 --------------------------------------------------------
5 Sistema de menu de Kraptor (al estilo de Unre*l)
6 Tiene el menu principal, y algunos otros menues cools (sonido, etc)
8 NOTAS: TODOS LOS TEXTOS DEL MENU ESTAN EN *INGLES*
9 PARA PODER TRADUCIRLOS AUTOMATICAMENTE
10 CON EL ENGINE DE TRADUCCION.
11 USAR MENUES Y DIALOGOS *LOCALES* PARA QUE AL
12 ENTRAR/SALIR DE SCOPE, (CADA VEZ QUE SE LLAMA LA FUNCION)
13 SE TRADUZCAN AUTOMATICAMENTE AL LENGUAJE ORIGINAL.
14 --------------------------------------------------------
16 #ifndef K_MENU_C
17 #define K_MENU_C
19 #include <allegro.h>
20 #include "main.h"
21 #include "guitrans.h"
22 #include "guiprocs.h"
23 #include "error.h"
24 #include "game.h"
25 #include "data.h"
26 #include "menu.h"
27 #include "global.h"
28 #include "jugador.h"
29 #include "savedlg.h"
30 #include "joymnu.h"
32 /* Accion seleccionada en el menu, ver los #define en menu.h */
33 static int menu_seleccionado = 0;
35 BITMAP *bmp_menu_main = NULL; /* bitmap de fondo */
36 PALETTE pal_menu_main; /* paleta del menu */
38 /* puntero a la ayuda del juego */
39 char *texto_ayuda_juego = NULL;
40 char *texto_acerca_de_juego = NULL; /* acerca de... */
41 BITMAP *acerca_de_bmp = NULL; /* bitmap acerca de... */
43 /* boton 'especial' que se usa para configurar el teclado
44 cuando se da click, muestra un mensaje, espera por
45 una tecla, y la almacena en la variable que apunta dp3
46 dp3 debe ser un *int (ej: &jugador.arr)
47 si dp3 es NULL, llama a la funcion que resetea el teclado
48 del jugador.
49 Muestra el nombre de la tecla asignada en dp3 (readkey() >> 8)
51 static int keybutton_proc(int msg, DIALOG *d, int c)
54 /* nombres de teclas, extraido del ejemplo de Allegro, exkeys.c
55 y modificado para simplificar el display */
56 char *key_names[] =
58 "(None)", "A", "B", "C",
59 "D", "E", "F", "G",
60 "H", "I", "J", "K",
61 "L", "M", "N", "O",
62 "P", "Q", "R", "S",
63 "T", "U", "V", "W",
64 "X", "Y", "Z", "0",
65 "1", "2", "3", "4",
66 "5", "6", "7", "8",
67 "9", "0 Pad", "1 Pad", "2 Pad",
68 "3 Pad", "4 Pad", "5 Pad", "6 Pad",
69 "7 Pad", "8 Pad", "9 Pad", "F1",
70 "F2", "F3", "F4", "F5",
71 "F6", "F7", "F8", "F9",
72 "F10", "F11", "F12", "Esc",
73 "`", "-", "=", "Backspace",
74 "Tab", "[", "]", "Enter",
75 ":", "'", "\\", "\\",
76 ",", ".", "/", "Space",
77 "Insert", "Del", "Home", "End",
78 "Pgup", "Pgdn", "Left", "Right",
79 "Up", "Down", "/ Pad", "*",
80 "- Pad", "+ Pad", "Del Pad", "Enter Pad",
81 "Prtscr", "Pause", "Abnt_C1", "Yen",
82 "Kana", "Convert", "Noconvert", "At",
83 "Circumflex", "Colon2", "Kanji",
84 "Lshift", "Rshift", "Lcontrol", "Rcontrol",
85 "Alt", "Altgr", "Lwin", "Rwin",
86 "Menu", "Scrlock", "Numlock", "Capslock",
87 "Max"
90 /* si selecciona, pedir tecla... */
91 if (msg == MSG_CLICK || msg == MSG_KEY)
93 /* pone un ??? en el caption */
94 int p = (d->flags & D_SELECTED) ? 1 : 0;
95 int style = ((p) ? F_IN : 0) | ((d->flags & D_GOTFOCUS) ? F_LIGHT : 0);
97 scare_mouse();
99 gui_rect(screen, d->x, d->y, d->w, d->h, style);
100 rectfill(screen, d->x+1, d->y+1, d->x+d->w-2, d->y+d->h-2, (d->flags & D_GOTFOCUS) ? gui_light_color : gui_back_color);
102 text_mode(-1);
103 gui_textout(screen, "???", d->x+p + d->w/2, d->y+p + (d->h-text_height(font))/2, (d->flags & D_DISABLED) ? gui_dark_color : gui_text_color, 1);
105 unscare_mouse();
107 clear_keybuf();
108 if (d->dp3 == NULL)
110 set_teclado_default();
111 alert(get_config_text("Default keyboard"), NULL, NULL, get_config_text("OK"), NULL, 0, 0);
112 return D_REDRAW;
114 else
116 *((int *)d->dp3) = readkey() >> 8; /* leer tecla */
119 return D_REDRAWME;
121 else
124 if(msg == MSG_DRAW && d->dp3 != NULL) /* al dibujar, setear el nombre de la tecla al actual */
126 if ( *((int *)d->dp3) > -1 && *((int *)d->dp3) < 114) /* limitar rango */
127 d->dp = (void *)get_config_text(key_names[*((int *)d->dp3)]); /* poner tecla en el caption, traducida y todo... */
128 else
129 d->dp = (void *)get_config_text("Unknown");
132 return xbutton_proc(msg, d, c); /* sobrecarga la funcion base */
134 return D_O_K;
142 Esta funcion fabrica el menu principal
143 tiene un monton de mierdas propias
144 dentro del mismo scope
146 static void hacer_el_menu_principal_helper()
148 // comenzar un nuevo juego
149 int nuevo_juego_mnu()
151 DIALOG skill_select_dlg[] =
153 /* (proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */
154 { xbox_proc, 0, 0, 160, 128, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
155 { xbutton_proc, 8, 32, 144, 24, 0, 0, 0, D_EXIT, 0, 0, "Easy", NULL, NULL },
156 { xbutton_proc, 8, 64, 144, 24, 0, 0, 0, D_EXIT, 0, 0, "Medium", NULL, NULL },
157 { xbutton_proc, 8, 96, 144, 24, 0, 0, 0, D_EXIT, 0, 0, "Hard", NULL, NULL },
158 { xtext_proc, 8, 8, 144, 16, 0, 0, 0, 0, 0, 0, "Skill", NULL, NULL },
159 { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
162 /* nivel de dificultad, */
163 menu_seleccionado = MNU_S_NEW_GAME;
165 traducir_DIALOG_dp(skill_select_dlg);
166 centre_dialog(skill_select_dlg);
167 set_dialog_color(skill_select_dlg, makecol(0,0,0), makecol(255,255,255));
169 nivel_de_dificultad = do_dialog(skill_select_dlg, 2) - 1;
170 if (nivel_de_dificultad < 0 || nivel_de_dificultad > 2) nivel_de_dificultad = 1;
172 return D_CLOSE;
175 // Carga un juego
176 int cargar_mnu()
178 menu_seleccionado = MNU_S_LOAD_GAME;
180 return D_CLOSE;
183 int salir_mnu()
185 menu_seleccionado = MNU_S_QUIT_GAME;
187 return D_CLOSE;
190 /* Permite seleccionar un nuevo modo de video */
191 int choose_video_mnu()
193 int card = 0, w = SCREEN_W, h = SCREEN_H;
195 /* permitir elegir el modo de video */
196 if (!gfx_mode_select(&card, &w, &h)) return D_REDRAW;
198 set_color_depth(8); /* setear a 8bpp, en otros modos, no ANDA! */
199 // DEBUG: FALTA INFORMAR SI FALLA EL MODO DE VIDEO
200 if (set_gfx_mode(card, w, h, 0, 0))
201 if (set_gfx_mode(GFX_SAFE, 640, 480, 0, 0))
202 if (set_gfx_mode(GFX_SAFE, 320, 200, 0, 0))
203 levantar_error("ERROR: imposible utilizar algun modo grafico de 8bpp!");
205 return D_CLOSE;
208 /* Acerca de... */
209 int acercade_proggy_mnu()
211 DIALOG acerca_de_dlg[] =
213 /* (proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */
214 { xbox_proc, 0, 0, 320, 200, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
215 { xtextbox_proc, 4, 20, 152, 160, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
216 { xbutton_proc, 300, 4, 16, 12, 0, 0, 0, D_EXIT, 0, 0, "X", NULL, NULL },
217 { xbox_proc, 164, 20, 152, 176, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
218 { xtext_proc, 4, 4, 100, 12, 0, 0, 0, 0, 0, 0, "About", NULL, NULL },
219 { xbitmap_proc, 168, 24, 144, 168, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
220 { xtext_proc, 4, 184, 100, 12, 0, 0, 0, 0, 0, 0, "Version x.x.x", NULL, NULL },
221 { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
224 if (texto_acerca_de_juego == NULL || acerca_de_bmp == NULL)
226 alert("ERROR:", "No hay informacion disponible!", NULL, "Aceptar", NULL, 0, 0);
227 return D_REDRAW;
230 /* DEBUG: alterar los indices [x] si cambia el dialogo! */
231 acerca_de_dlg[1].dp = texto_acerca_de_juego; /* setear el texto de ayuda de disco */
232 acerca_de_dlg[4].dp = (void *)get_config_text("About"); /* traducir el caption */
233 acerca_de_dlg[5].dp = acerca_de_bmp;
234 acerca_de_dlg[6].dp = KRAPTOR_VERSION_STR;
236 centre_dialog(acerca_de_dlg);
237 set_dialog_color(acerca_de_dlg, makecol(0,0,0), makecol(255,255,255));
238 popup_dialog(acerca_de_dlg, 0);
240 return D_REDRAW;
243 /* idioma -> espa¤ol */
244 int cambia_espanol(void)
246 menu_seleccionado = MNU_S_CFG_SPANISH;
247 return D_CLOSE;
250 /* idioma -> ingles */
251 int cambia_ingles(void)
253 menu_seleccionado = MNU_S_CFG_ENGLISH;
254 return D_CLOSE;
257 /* Menu Juego */
258 MENU menu_juego[] =
260 // text proc , child , flags, dp
261 { "New game", nuevo_juego_mnu, NULL, 0, NULL },
262 { "Load game", cargar_mnu, NULL, 0, NULL },
263 { "", NULL, NULL, 0, NULL },
264 { "Exit game", salir_mnu, NULL, 0, NULL },
265 { NULL, NULL, NULL, 0, NULL }
269 /* Menu Configuracion */
270 MENU menu_cfg[] =
272 // text proc , child , flags, dp
273 { "Sound", modificar_sonido_mnu, NULL, 0, NULL },
274 { "Controls", mod_teclado_jugar, NULL, 0, NULL },
275 { "Details", mod_detalle_mnu, NULL, 0, NULL },
276 { "", NULL, NULL, 0, NULL },
277 { "Video", choose_video_mnu, NULL, 0, NULL },
278 { "", NULL, NULL, 0, NULL },
279 { "Spanish", cambia_espanol, NULL, 0, NULL },
280 { "English", cambia_ingles, NULL, 0, NULL },
281 { NULL, NULL, NULL, 0, NULL }
284 /* Menu Ayuda */
285 MENU menu_ayuda[] =
287 // text proc , child , flags, dp
288 { "Help", ayuda_proggy_mnu, NULL, 0, NULL },
289 { "About", acercade_proggy_mnu,NULL, 0, NULL },
290 { NULL, NULL, NULL, 0, NULL }
294 /* Menu superior */
295 MENU menu_top[] =
297 // text proc , child , flags, dp
298 { "&Game", NULL, menu_juego, 0, NULL },
299 { "&Configuration", NULL, menu_cfg, 0, NULL },
300 { "&Help", NULL, menu_ayuda, 0, NULL },
301 { NULL, NULL, NULL, 0, NULL }
305 /* Dialogo principal */
306 DIALOG main_dlg[] =
308 /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */
309 { d_menu_proc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, menu_top, NULL, NULL },
310 { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
313 /* traducir menus 'al vuelo' */
314 traducir_MENU_text(menu_juego);
315 traducir_MENU_text(menu_cfg);
316 traducir_MENU_text(menu_ayuda);
317 traducir_MENU_text(menu_top);
319 menu_seleccionado = 0;
320 do_dialog(main_dlg, -1);
326 Funcion que muestra el menu principal
327 y actual en consecuencia */
328 void realizar_menu_principal()
330 menu_seleccionado = 0;
332 while (menu_seleccionado != MNU_S_QUIT_GAME)
334 set_palette(pal_menu_main);
335 color_map = NULL;
336 rgb_map = NULL;
337 xset_gui_colors();
339 clear_keybuf();
341 set_mouse_sprite(NULL); /* acomoda puntero del mouse para que se ajuste a los colores */
343 stretch_blit(bmp_menu_main,
344 screen,
345 0, 0,
346 bmp_menu_main->w,
347 bmp_menu_main->h,
348 0, 0,
349 SCREEN_W,
350 SCREEN_H);
352 /* hacer menu */
353 hacer_el_menu_principal_helper();
355 switch (menu_seleccionado)
357 case MNU_S_NEW_GAME: // comenzar juego nuevo
358 comenzar_juego(FALSE); /* Rock 'n roll! */
359 break;
361 case MNU_S_LOAD_GAME: // cargar un juego
362 if (cargar_juego_menu())
363 comenzar_juego(TRUE); // comenzar el juego, pero sin alterar las vars cargadas
364 break;
366 case MNU_S_QUIT_GAME: /* Salir, confirmar primero */
367 if (alert(get_config_text("Exit game"),
368 NULL,
369 NULL,
370 get_config_text("Yes"),
371 get_config_text("No"),
372 0, 0) != 1)
374 menu_seleccionado = 0;
376 break;
378 case MNU_S_CFG_SPANISH: // cambiar a espa~ol
379 reload_config_texts("es");
380 lenguaje[0]='e';
381 lenguaje[1]='s';
382 lenguaje[2]= '\0';
383 break;
385 case MNU_S_CFG_ENGLISH: // cambiar a ingles
386 reload_config_texts("en");
387 lenguaje[0]='e';
388 lenguaje[1]='n';
389 lenguaje[2]= '\0';
390 break;
392 default:
393 break;
403 Menu para modificar parametros de sonido y musica
404 SE PUEDE LLAMAR DESDE OTROS LADOS (ej: desde game.c)
406 int modificar_sonido_mnu(void)
408 DIALOG sonido_dlg[] =
410 /* (proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */
411 { xbox_proc, 0, 0, 150, 92, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
412 { xcheck_proc, 4, 4, 140, 12, 0, 0, 0, 0, 1, 0, "Sound", NULL, NULL },
413 { xslider_proc, 4, 20, 140, 12, 0, 0, 0, 0, 255, 255, NULL, NULL, NULL },
414 { xcheck_proc, 4, 36, 140, 12, 0, 0, 0, 0, 1, 0, "Music", NULL, NULL },
415 { xslider_proc, 4, 52, 140, 12, 0, 0, 0, 0, 255, 255, NULL, NULL, NULL },
416 { xbutton_proc, 35, 72, 80, 16, 0, 0, 0, D_EXIT, 0, 0, "OK", NULL, NULL },
417 { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
421 traducir_DIALOG_dp(sonido_dlg);
422 centre_dialog(sonido_dlg);
423 set_dialog_color(sonido_dlg, makecol(0,0,0), makecol(255,255,255));
426 /* setear parametros actuales */
427 sonido_dlg[1].flags |= (quiere_snd) ? D_SELECTED : 0 ;
428 sonido_dlg[2].d2 = volumen_sonido;
429 sonido_dlg[3].flags |= (quiere_musica) ? D_SELECTED : 0 ;
430 sonido_dlg[4].d2 = volumen_musica;
432 popup_dialog(sonido_dlg, 0); /* mostrar dialogo */
434 /* ajustar nuevos parametros */
435 if (sonido_dlg[1].flags & D_SELECTED)
436 quiere_snd = TRUE;
437 else
438 quiere_snd = FALSE;
440 volumen_sonido = sonido_dlg[2].d2;
442 if (sonido_dlg[3].flags & D_SELECTED)
443 quiere_musica = TRUE;
444 else
445 quiere_musica = FALSE;
447 volumen_musica = sonido_dlg[4].d2;
449 return D_REDRAW;
452 /* Esto permite configurar el teclado solamente */
453 int configurar_el_teclado_solo(void)
455 /* dialogo de configuracion */
456 DIALOG dlg_teclado_config[] =
458 /* (proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */
459 { xbox_proc, 0, 0, 248, 184, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
460 { xtext_proc, 8, 8, 188, 12, 0, 0, 0, 0, 0, 0, "Controls", NULL, NULL },
461 { xbutton_proc, 8, 152, 72, 24, 0, 0, 0, D_EXIT, 0, 0, "OK", NULL, NULL },
462 { keybutton_proc, 80, 24, 88, 24, 0, 0, 0, 0, 0, 0, "Up", NULL, NULL },
463 { keybutton_proc, 8, 56, 88, 24, 0, 0, 0, 0, 0, 0, "Left", NULL, NULL },
464 { keybutton_proc, 80, 88, 88, 24, 0, 0, 0, 0, 0, 0, "Down", NULL, NULL },
465 { keybutton_proc, 152, 56, 88, 24, 0, 0, 0, 0, 0, 0, "Right", NULL, NULL },
466 { keybutton_proc, 8, 120, 72, 24, 0, 0, 0, 0, 0, 0, "Shoot", NULL, NULL },
467 { keybutton_proc, 88, 120, 72, 24, 0, 0, 0, 0, 0, 0, "Weapon", NULL, NULL },
468 { keybutton_proc, 168, 120, 72, 24, 0, 0, 0, 0, 0, 0, "Special", NULL, NULL },
469 { keybutton_proc, 168, 152, 72, 24, 0, 0, 0, 0, 0, 0, "Default", NULL, NULL },
470 { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
473 /* inicializo el dialogo (el compilador no permite inicializarlo arriba) */
474 dlg_teclado_config[3].dp3 = &teclado_jug.arr;
475 dlg_teclado_config[4].dp3 = &teclado_jug.izq;
476 dlg_teclado_config[5].dp3 = &teclado_jug.abj;
477 dlg_teclado_config[6].dp3 = &teclado_jug.der;
478 dlg_teclado_config[7].dp3 = &teclado_jug.sht;
479 dlg_teclado_config[8].dp3 = &teclado_jug.wpn;
480 dlg_teclado_config[9].dp3 = &teclado_jug.bmb;
482 traducir_DIALOG_dp(dlg_teclado_config);
483 centre_dialog(dlg_teclado_config);
484 set_dialog_color(dlg_teclado_config, makecol(0,0,0), makecol(255,255,255));
486 popup_dialog(dlg_teclado_config, 0); /* mostrar dialogo */
488 return D_REDRAW;
491 /* permite configurar el mouse */
492 int configurar_el_mouse(void)
494 DIALOG mouse_cfg_dlg[] =
496 /* (proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */
497 { xbox_proc, 0, 0, 140, 128, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
498 { xtext_proc, 4, 4, 132, 16, 0, 0, 0, 0, 0, 0, "Mouse", NULL, NULL },
499 { xcheck_proc, 4, 28, 132, 16, 0, 0, 0, 0, 1, 0, "Enable", NULL, NULL },
500 { xtext_proc, 4, 56, 128, 16, 0, 0, 0, 0, 0, 0, "Speed", NULL, NULL },
501 { xslider_proc, 4, 72, 132, 16, 0, 0, 0, 0, 32, 0, NULL, NULL, NULL },
502 { xbutton_proc, 20, 100, 100, 20, 0, 0, 0, D_EXIT, 0, 0, "OK", NULL, NULL },
503 { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
506 traducir_DIALOG_dp(mouse_cfg_dlg);
507 centre_dialog(mouse_cfg_dlg);
508 set_dialog_color(mouse_cfg_dlg, makecol(0,0,0), makecol(255,255,255));
510 mouse_cfg_dlg[2].flags = (quiere_usar_mouse) ? D_SELECTED : 0 ;
511 mouse_cfg_dlg[4].d2 = mouse_velocidad;
513 popup_dialog(mouse_cfg_dlg, 0); /* mostrar dialogo */
515 if (mouse_cfg_dlg[2].flags & D_SELECTED)
516 { quiere_usar_mouse = TRUE; }
517 else
518 { quiere_usar_mouse = FALSE; }
520 mouse_velocidad = mouse_cfg_dlg[4].d2;
522 return D_REDRAW;
527 Permite configurar los controles, entre ellos, teclado, mouse, joystick
528 DEBUG: esta sin terminar
529 Puede ser llamado desde otros lados, ej: game.c
531 int mod_teclado_jugar(void)
533 int ret = -1;
534 DIALOG controls_config_dlg[] =
536 /* (proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */
537 { xbox_proc, 0, 0, 200, 168, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
538 { xtext_proc, 8, 4, 184, 16, 0, 0, 0, 0, 0, 0, "Controls", NULL, NULL },
539 { xbutton_proc, 8, 24, 184, 32, 0, 0, 0, D_EXIT, 0, 0, "Keyboard config", NULL, NULL },
540 { xbutton_proc, 8, 60, 184, 32, 0, 0, 0, D_EXIT, 0, 0, "Mouse config", NULL, NULL },
541 { xbutton_proc, 8, 96, 184, 32, 0, 0, 0, D_EXIT, 0, 0, "Joystick config", NULL, NULL },
542 { xbutton_proc, 50, 136, 100, 24, 0, 0, 0, D_EXIT, 0, 0, "OK", NULL, NULL },
543 { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
546 traducir_DIALOG_dp(controls_config_dlg);
547 centre_dialog(controls_config_dlg);
548 set_dialog_color(controls_config_dlg, makecol(0,0,0), makecol(255,255,255));
550 while (ret != 5)
552 ret = popup_dialog(controls_config_dlg, 0); /* mostrar dialogo */
554 if (ret == 2) configurar_el_teclado_solo();
556 if (ret == 3) configurar_el_mouse();
558 if (ret == 4) joystick_configuration_menu();
560 return D_REDRAW;
564 Permite configurar los detalles
565 Puede ser llamado desde otros lados, ej: game.c
567 int mod_detalle_mnu(void)
569 DIALOG detalle_dlg[] =
571 /* (proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */
572 { xbox_proc, 0, 0, 150, 96, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
573 { xtext_proc, 4, 4, 140, 12, 0, 0, 0, 0, 0, 0, "Detail level", NULL, NULL },
574 { xslider_proc, 4, 18, 140, 14, 0, 0, 0, 0, 10, 10, NULL, NULL, NULL },
575 { xbutton_proc, 32, 76, 80, 16, 0, 0, 0, D_EXIT, 0, 0, "OK", NULL, NULL },
576 { xcheck_proc, 4, 36, 140, 12, 0, 0, 0, 0, 1, 0, "Auto adjust", NULL, NULL },
577 { xcheck_proc, 4, 56, 140, 12, 0, 0, 0, 0, 1, 0, "Play videos", NULL, NULL },
578 { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
582 traducir_DIALOG_dp(detalle_dlg);
583 centre_dialog(detalle_dlg);
584 set_dialog_color(detalle_dlg, makecol(0,0,0), makecol(255,255,255));
586 /* setear parametros actuales */
587 detalle_dlg[2].d2 = nivel_detalle;
588 detalle_dlg[4].flags |= (detalle_automatico) ? D_SELECTED : 0 ;
589 detalle_dlg[5].flags |= (quiere_videos) ? D_SELECTED : 0;
591 popup_dialog(detalle_dlg, 0); /* mostrar dialogo */
593 nivel_detalle = detalle_dlg[2].d2;
595 if (detalle_dlg[4].flags & D_SELECTED)
596 detalle_automatico = TRUE;
597 else
598 detalle_automatico = FALSE;
600 if (detalle_dlg[5].flags & D_SELECTED)
601 quiere_videos = TRUE;
602 else
603 quiere_videos = FALSE;
605 return D_REDRAW;
609 Este menu generico es para ser llamado
610 desde game.c, presenta la configuracion 'al vuelo'
611 de sonido, teclado y detalles
613 int menu_configuracion_al_vuelo(void)
615 DIALOG configurar_dlg[] =
617 /* (proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */
618 { xbox_proc, 0, 0, 128, 152, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
619 { xtext_proc, 8, 8, 112, 8, 0, 0, 0, 0, 0, 0, "Configuration", NULL, NULL },
620 { xbutton_proc, 8, 24, 112, 24, 0, 0, 0, D_EXIT, 0, 0, "Sound", modificar_sonido_mnu, NULL },
621 { xbutton_proc, 8, 56, 112, 24, 0, 0, 0, D_EXIT, 0, 0, "Controls", mod_teclado_jugar, NULL },
622 { xbutton_proc, 8, 88, 112, 24, 0, 0, 0, D_EXIT, 0, 0, "Details", mod_detalle_mnu, NULL },
623 { xbutton_proc, 8, 128, 112, 16, 0, 0, 0, D_EXIT, 0, 0, "OK", NULL, NULL },
624 { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
627 traducir_DIALOG_dp(configurar_dlg);
628 centre_dialog(configurar_dlg);
629 set_dialog_color(configurar_dlg, makecol(0,0,0), makecol(255,255,255));
631 /* setear parametros actuales */
633 popup_dialog(configurar_dlg, 0); /* mostrar dialogo */
635 return D_REDRAW;
638 /* Ayuda del programa
639 Puede ser llamado desde otros lados, ej: game.c
641 int ayuda_proggy_mnu()
643 /* dialogo que muestra la ayuda */
644 DIALOG ayuda_dlg[] =
646 /* (proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */
647 { xbox_proc, 0, 0, 320, 200, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
648 { xtextbox_proc, 4, 20, 312, 176, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
649 { xbutton_proc, 300, 4, 16, 12, 0, 0, 0, D_EXIT, 0, 0, "X", NULL, NULL },
650 { xtext_proc, 4, 4, 100, 12, 0, 0, 0, 0, 0, 0, "Help", NULL, NULL },
651 { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
654 if (texto_ayuda_juego == NULL)
656 alert("ERROR:", "No hay ayuda disponible!", NULL, "Aceptar", NULL, 0, 0);
657 return D_REDRAW;
660 /* DEBUG: alterar los indices [x] si cambia el dialogo! */
661 ayuda_dlg[1].dp = texto_ayuda_juego; /* setear el texto de ayuda de disco */
662 ayuda_dlg[3].dp = (void *)get_config_text("Help"); /* traducir el caption */
664 centre_dialog(ayuda_dlg);
665 set_dialog_color(ayuda_dlg, makecol(0,0,0), makecol(255,255,255));
666 popup_dialog(ayuda_dlg, 0);
668 return D_REDRAW;
672 #endif