gates_of_skeldal/game/setup.c
2025-02-08 09:19:55 +01:00

266 lines
6.3 KiB
C

#include <platform/platform.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <libs/types.h>
#include <libs/event.h>
#include <libs/memman.h>
#include <libs/devices.h>
#include <libs/bmouse.h>
#include <libs/bgraph.h>
#include <platform/sound.h>
#include <libs/strlite.h>
#include "engine1.h"
#include <libs/pcx.h>
#include "globals.h"
#include <libs/gui.h>
#include <libs/basicobj.h>
#include <string.h>
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();
}
*/