#include #include #include #include #include #include #include #include #include #include #include #include #include "engine1.h" #include #include "globals.h" #include #include #include extern char enable_sort; extern char autoattack; char q_runsetup(char *parm) { char c[6]; strncpy(c,parm,6); strupper(c); return !strncmp(c,"/SETUP",6); } static void show_setup_desktop(WINDOW *w) { put_picture(w->x,w->y,ablock(H_SETUPBAR)); } static void checkbox_animator(THE_TIMER *t) { t; animate_checkbox(10,130,10); } static int effects[]={SND_GVOLUME,SND_MUSIC,SND_GFX,SND_TREBL,SND_BASS,SND_XBASS}; static void do_setup_change(void) { char c; c=f_get_value(0,o_aktual->id); switch (o_aktual->id) { case 10:set_snd_effect(SND_SWAP,c & 1);break; case 20:set_snd_effect(SND_OUTFILTER,c & 1);break; default:set_snd_effect(effects[o_aktual->id/10-20],c);break; } } static void change_zoom(void) { int id=o_aktual->id; int i; for(i=30;i<60;i+=10) c_set_value(0,i,(f_get_value(0,i) & ~1) | (i==id)); zoom_speed((id-30)/10); } static void change_turn(void) { int id=o_aktual->id; int i; for(i=60;i<90;i+=10) c_set_value(0,i,(f_get_value(0,i) & ~1) | (i==id)); turn_speed((id-60)/10); } static void unwire_setup(void); static void setup_keyboard(EVENT_MSG *msg,void **_) { if (msg->msg == E_KEYBOARD) { char c= quit_request_as_escape(va_arg(msg->data, int)); if (c==27) { unwire_proc(); } } } static void wire_setup(void) { unwire_proc(); unwire_proc=unwire_setup; mute_all_tracks(0); cur_mode=MD_SETUP; send_message(E_ADD,E_KEYBOARD,setup_keyboard); SEND_LOG("(GAME) Starting setup"); } static void unwire_setup(void) { show_names=f_get_value(0,90) & 1; enable_sort=f_get_value(0,100) & 1; autoattack=f_get_value(0,110) & 1; autosave_enabled=f_get_value(0,120) & 1; level_preload=f_get_value(0,130) & 1; delete_from_timer(TM_CHECKBOX); mix_back_sound(32768); close_current(); send_message(E_DONE,E_KEYBOARD,setup_keyboard); wire_proc(); cancel_render=1; SEND_LOG("(GAME) Setup closed"); } char exit_setup(int id,int xa,int ya,int xr,int yr) { id,xa,ya,xr,yr; unwire_setup(); return 0; } T_CLK_MAP setup[]= { {-1,0,0,639,14,exit_setup,2,H_MS_DEFAULT}, {-1,0,15,639,479,exit_setup,0x8,H_MS_DEFAULT}, }; void skeldal_checkbox(OBJREC *); void setup_ok_button(OBJREC *); void skeldal_soupak(OBJREC *); void new_setup() { WINDOW *w; CTL3D ctl; int i; static int textxp[]={ 75, 75,435,435,434,535,535,535,434,434,434,434,434, 35,410,510}; static int textyp[]={275,305, 65, 95,125, 65, 95,125,185,215,245,275,305,235, 40, 40}; static int textc[]={ 53, 54, 56, 57, 58, 56, 57, 58,140,141,142,143,144 ,51, 55, 59}; mix_back_sound(256000-16384); memset(&ctl,0,sizeof(ctl)); change_click_map(setup,4); set_font(H_FBOLD,SETUP_COL2); default_font=curfont; memcpy(f_default,charcolors,sizeof(f_default)); w=create_window(0,SCREEN_OFFLINE,639,359,0,&ctl); w->draw_event=show_setup_desktop; desktop_add_window(w); define(10,50,270,190,20,0,skeldal_checkbox); c_default(get_snd_effect(SND_SWAP)); on_control_change(do_setup_change); if (check_snd_effect(SND_OUTFILTER)) { define(20,50,300,190,20,0,skeldal_checkbox);c_default(get_snd_effect(SND_OUTFILTER)); on_control_change(do_setup_change); } define(30,410,60,90,20,0,skeldal_checkbox);c_default(zoom_speed(-1)==0); on_control_change(change_zoom); define(40,410,90,90,20,0,skeldal_checkbox);c_default(zoom_speed(-1)==1);on_control_change(change_zoom); define(50,410,120,90,20,0,skeldal_checkbox);c_default(zoom_speed(-1)==2);on_control_change(change_zoom); define(60,510,60,90,20,0,skeldal_checkbox);c_default(turn_speed(-1)==0);on_control_change(change_turn); define(70,510,90,90,20,0,skeldal_checkbox);c_default(turn_speed(-1)==1);on_control_change(change_turn); define(80,510,120,90,20,0,skeldal_checkbox);c_default(turn_speed(-1)==2);on_control_change(change_turn); for(i=0;i<5;i++) { define((i+9)*10,410,180+i*30,190,20,0,skeldal_checkbox); switch(i) { case 0:c_default(show_names);break; case 1:c_default(enable_sort);break; case 2:c_default(autoattack);break; case 3:c_default(autosave_enabled);break; case 4:c_default(level_preload);break; } } for(i=0;i<(int)(sizeof(textc)/sizeof(int));i++) define(-1,textxp[i],textyp[i]-1,1,1,0,label,texty[textc[i]]); for(i=0;i<(int)(sizeof(effects)/sizeof(int));i++) if (check_snd_effect(effects[i])) { define(200+i*10,50+i*60,30,30,200,0,skeldal_soupak,effects[i]==SND_MUSIC?127:255);c_default(get_snd_effect(effects[i])); on_control_change(do_setup_change); } define(300,559,336,81,21,0,setup_ok_button,texty[174]);on_control_change(unwire_setup); property(NULL,ablock(H_FTINY),&color_topbar,0); redraw_window(); add_to_timer(TM_CHECKBOX,4,-1,checkbox_animator); } void game_setup_(void) { wire_setup(); new_setup(); } char game_setup(int id,int xa,int ya,int xr,int yr) { id;xa;ya;xr;yr; run_background(game_setup_); return 1; } void GameResume(EVENT_MSG *msg,void **data) { static int volsave; data; if (msg->msg==E_INIT) { volsave=get_snd_effect(SND_GVOLUME); set_snd_effect(SND_GVOLUME,volsave>>1); } if (msg->msg==E_KEYBOARD) { set_snd_effect(SND_GVOLUME,volsave); wire_main_functs(); msg->msg=-2; } } void GamePause() { int i; unwire_proc(); send_message(E_ADD,E_KEYBOARD,GameResume); update_mysky(); schovej_mysku(); trans_bar(0,0,640,480,0); set_font(H_FBOLD,RGB555(0,23,0)); i=text_width(texty[5]); add_window(320-(i/2)-10,100,i+40,40,H_IDESKA,4,20,20); redraw_window(); set_aligned_position(320,115,1,1,texty[5]); outtext(texty[5]); ukaz_mysku(); showview(0,0,0,0); cancel_render=1; } /*void user_setup() { initmode256(cur_xlat); init_mysky(); hranice_mysky(0,0,639,479); mouse_set_default(H_MS_DEFAULT); ukaz_mysku(); setup_dialoge(); escape(); schovej_mysku(); closemode(); } */