mirror of
https://github.com/Oibaf66/fbzx-wii.git
synced 2024-11-28 11:04:15 +01:00
Added game configurations
This commit is contained in:
parent
eaaffd9492
commit
e5dda6bb45
2
Makefile
2
Makefile
@ -118,6 +118,7 @@ dist: $(BUILD)
|
|||||||
mkdir -p $@/fbzx-wii/snapshots
|
mkdir -p $@/fbzx-wii/snapshots
|
||||||
mkdir -p $@/fbzx-wii/microdrives
|
mkdir -p $@/fbzx-wii/microdrives
|
||||||
mkdir -p $@/fbzx-wii/scr
|
mkdir -p $@/fbzx-wii/scr
|
||||||
|
mkdir -p $@/fbzx-wii/configurations
|
||||||
mkdir -p $@/apps/fbzx-wii/doc
|
mkdir -p $@/apps/fbzx-wii/doc
|
||||||
cp fbzx.dol $@/apps/fbzx-wii/boot.dol
|
cp fbzx.dol $@/apps/fbzx-wii/boot.dol
|
||||||
cp meta.xml $@/apps/fbzx-wii/meta.xml
|
cp meta.xml $@/apps/fbzx-wii/meta.xml
|
||||||
@ -132,6 +133,7 @@ dist: $(BUILD)
|
|||||||
touch $@/fbzx-wii/snapshots/dummy
|
touch $@/fbzx-wii/snapshots/dummy
|
||||||
touch $@/fbzx-wii/microdrives/dummy
|
touch $@/fbzx-wii/microdrives/dummy
|
||||||
touch $@/fbzx-wii/scr/dummy
|
touch $@/fbzx-wii/scr/dummy
|
||||||
|
touch $@/fbzx-wii/configurations/dummy
|
||||||
cd $@ && tar -czf ../fbzx-wii-vx-bin.tar.gz *
|
cd $@ && tar -czf ../fbzx-wii-vx-bin.tar.gz *
|
||||||
|
|
||||||
distsource:
|
distsource:
|
||||||
|
@ -143,7 +143,7 @@ void computer_init () {
|
|||||||
strcpy (ordenador.SmbPwd, "Password");
|
strcpy (ordenador.SmbPwd, "Password");
|
||||||
strcpy (ordenador.SmbShare, "Share");
|
strcpy (ordenador.SmbShare, "Share");
|
||||||
strcpy (ordenador.SmbIp, "192.168.0.1");
|
strcpy (ordenador.SmbIp, "192.168.0.1");
|
||||||
|
ordenador.autoconf=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void computer_set_palete() {
|
void computer_set_palete() {
|
||||||
|
@ -213,7 +213,7 @@ struct computer {
|
|||||||
unsigned char SmbPwd[32];
|
unsigned char SmbPwd[32];
|
||||||
unsigned char SmbShare[32];
|
unsigned char SmbShare[32];
|
||||||
unsigned char SmbIp[32];
|
unsigned char SmbIp[32];
|
||||||
|
unsigned char autoconf;
|
||||||
};
|
};
|
||||||
|
|
||||||
void computer_init();
|
void computer_init();
|
||||||
|
@ -67,6 +67,7 @@ char path_snaps[2049];
|
|||||||
char path_taps[2049];
|
char path_taps[2049];
|
||||||
char path_mdrs[2049];
|
char path_mdrs[2049];
|
||||||
char path_scr[2049];
|
char path_scr[2049];
|
||||||
|
char path_confs[2049];
|
||||||
unsigned int colors[80];
|
unsigned int colors[80];
|
||||||
unsigned int jump_frames,curr_frames;
|
unsigned int jump_frames,curr_frames;
|
||||||
char *filenames[5];
|
char *filenames[5];
|
||||||
@ -527,6 +528,7 @@ void save_config(struct computer *object) {
|
|||||||
fprintf(fconfig,"rumble1=%c%c",48+object->rumble[0],10);
|
fprintf(fconfig,"rumble1=%c%c",48+object->rumble[0],10);
|
||||||
fprintf(fconfig,"rumble2=%c%c",48+object->rumble[1],10);
|
fprintf(fconfig,"rumble2=%c%c",48+object->rumble[1],10);
|
||||||
fprintf(fconfig,"port=%c%c",48+object->port,10);
|
fprintf(fconfig,"port=%c%c",48+object->port,10);
|
||||||
|
fprintf(fconfig,"autoconf=%c%c",48+object->autoconf,10);
|
||||||
|
|
||||||
|
|
||||||
for (joy_n=0; joy_n<2; joy_n++)
|
for (joy_n=0; joy_n<2; joy_n++)
|
||||||
@ -537,6 +539,39 @@ void save_config(struct computer *object) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int save_config_game(struct computer *object, char *filename, int overwrite) {
|
||||||
|
|
||||||
|
unsigned char key, joy_n;
|
||||||
|
FILE *fconfig;
|
||||||
|
|
||||||
|
fconfig=fopen(filename,"r");
|
||||||
|
if((fconfig!=NULL)&&(!overwrite)) {
|
||||||
|
fclose(fconfig);
|
||||||
|
return -1; // file already exists
|
||||||
|
}
|
||||||
|
|
||||||
|
fconfig = fopen(filename,"wb");
|
||||||
|
if (fconfig==NULL) {
|
||||||
|
return -2; // can't create file
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(fconfig,"joystick1=%c%c",48+object->joystick[0],10);
|
||||||
|
fprintf(fconfig,"joystick2=%c%c",48+object->joystick[1],10);
|
||||||
|
fprintf(fconfig,"ay_sound=%c%c",48+object->ay_emul,10);
|
||||||
|
fprintf(fconfig,"joypad1=%c%c",48+object->joypad_as_joystick[0],10);
|
||||||
|
fprintf(fconfig,"joypad2=%c%c",48+object->joypad_as_joystick[1],10);
|
||||||
|
fprintf(fconfig,"rumble1=%c%c",48+object->rumble[0],10);
|
||||||
|
fprintf(fconfig,"rumble2=%c%c",48+object->rumble[1],10);
|
||||||
|
|
||||||
|
for (joy_n=0; joy_n<2; joy_n++)
|
||||||
|
for (key=0; key<22; key++)
|
||||||
|
fprintf(fconfig,"joybutton_%c_%c=%.3d%c",joy_n+48,key+97, object->joybuttonkey[joy_n][key],10);
|
||||||
|
|
||||||
|
fclose(fconfig);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void load_config_smb(struct computer *object) {
|
void load_config_smb(struct computer *object) {
|
||||||
|
|
||||||
char line[1024],carac,done;
|
char line[1024],carac,done;
|
||||||
@ -606,23 +641,29 @@ void load_config_smb(struct computer *object) {
|
|||||||
fclose(fconfig);
|
fclose(fconfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
void load_config(struct computer *object) {
|
int load_config(struct computer *object, char *filename) {
|
||||||
|
|
||||||
char config_path[1024];
|
char config_path[1024];
|
||||||
char line[1024],carac,done;
|
char line[1024],carac,done;
|
||||||
int length,pos, key_sdl=0;
|
int length,pos, key_sdl=0;
|
||||||
FILE *fconfig;
|
FILE *fconfig;
|
||||||
unsigned char volume=16,mode128k=255,issue=255,joystick1=255,joystick2=255,ay_emul=255,mdr_active=255,
|
unsigned char volume=255,mode128k=255,issue=255,joystick1=255,joystick2=255,ay_emul=255,mdr_active=255,
|
||||||
dblscan=255,bw=255, tap_fast=0, joypad1=0, joypad2=0, rumble1=0, rumble2=0, joy_n=0, key_n=0, port=0;
|
dblscan=255,bw=255, tap_fast=255, joypad1=255, joypad2=255, rumble1=255, rumble2=255, joy_n=255, key_n=255, port=255, autoconf=255;
|
||||||
|
|
||||||
|
if (filename) strcpy(config_path,filename);
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
strcpy(config_path,getenv("HOME"));
|
strcpy(config_path,getenv("HOME"));
|
||||||
length=strlen(config_path);
|
length=strlen(config_path);
|
||||||
if ((length>0)&&(config_path[length-1]!='/'))
|
if ((length>0)&&(config_path[length-1]!='/'))
|
||||||
strcat(config_path,"/");
|
strcat(config_path,"/");
|
||||||
strcat(config_path,"fbzx_conf");
|
strcat(config_path,"fbzx_conf");
|
||||||
|
}
|
||||||
|
|
||||||
fconfig = fopen(config_path,"rb");
|
fconfig = fopen(config_path,"rb");
|
||||||
if (fconfig==NULL) {
|
if (fconfig==NULL) {
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
done=1;
|
done=1;
|
||||||
@ -709,6 +750,10 @@ void load_config(struct computer *object) {
|
|||||||
port=line[5]-'0';
|
port=line[5]-'0';
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (!strncmp(line,"autoconf=",9)) {
|
||||||
|
autoconf=line[9]-'0';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!strncmp(line,"joybutton_",10)) {
|
if (!strncmp(line,"joybutton_",10)) {
|
||||||
sscanf(line, "joybutton_%c_%c=%3d",&joy_n ,&key_n, &key_sdl);
|
sscanf(line, "joybutton_%c_%c=%3d",&joy_n ,&key_n, &key_sdl);
|
||||||
if ((joy_n<50) && (joy_n>47) && (key_n<119) && (key_n>96))
|
if ((joy_n<50) && (joy_n>47) && (key_n<119) && (key_n>96))
|
||||||
@ -763,8 +808,12 @@ void load_config(struct computer *object) {
|
|||||||
if (port<3) {
|
if (port<3) {
|
||||||
object->port=port;
|
object->port=port;
|
||||||
}
|
}
|
||||||
|
if (autoconf<2) {
|
||||||
|
object->autoconf=autoconf;
|
||||||
|
}
|
||||||
|
|
||||||
fclose(fconfig);
|
fclose(fconfig);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
int main(int argc,char *argv[]) {
|
||||||
@ -822,7 +871,7 @@ int main(int argc,char *argv[]) {
|
|||||||
set_volume(16);
|
set_volume(16);
|
||||||
|
|
||||||
// load current config
|
// load current config
|
||||||
load_config(&ordenador);
|
load_config(&ordenador, NULL);
|
||||||
printf("Modo: %d\n",ordenador.mode128k);
|
printf("Modo: %d\n",ordenador.mode128k);
|
||||||
while(argumento<argc) {
|
while(argumento<argc) {
|
||||||
if ((0==strcmp(argv[argumento],"-h"))||(0==strcmp(argv[argumento],"--help"))) {
|
if ((0==strcmp(argv[argumento],"-h"))||(0==strcmp(argv[argumento],"--help"))) {
|
||||||
@ -977,10 +1026,12 @@ int main(int argc,char *argv[]) {
|
|||||||
strcpy(path_taps,path_snaps);
|
strcpy(path_taps,path_snaps);
|
||||||
strcpy(path_mdrs,path_snaps);
|
strcpy(path_mdrs,path_snaps);
|
||||||
strcpy(path_scr,path_snaps);
|
strcpy(path_scr,path_snaps);
|
||||||
|
strcpy(path_confs,path_snaps);
|
||||||
strcat(path_snaps,"snapshots");
|
strcat(path_snaps,"snapshots");
|
||||||
strcat(path_taps,"tapes");
|
strcat(path_taps,"tapes");
|
||||||
strcat(path_mdrs,"microdrives");
|
strcat(path_mdrs,"microdrives");
|
||||||
strcat(path_scr,"scr");
|
strcat(path_scr,"scr");
|
||||||
|
strcat(path_confs,"configurations");
|
||||||
|
|
||||||
#ifdef GEKKO
|
#ifdef GEKKO
|
||||||
if ((ordenador.port==1)&&usbismount) {
|
if ((ordenador.port==1)&&usbismount) {
|
||||||
|
@ -36,13 +36,16 @@ extern char path_snaps[2049];
|
|||||||
extern char path_taps[2049];
|
extern char path_taps[2049];
|
||||||
extern char path_mdrs[2049];
|
extern char path_mdrs[2049];
|
||||||
extern char path_scr[2049];
|
extern char path_scr[2049];
|
||||||
|
extern char path_confs[2049];
|
||||||
extern unsigned int colors[80];
|
extern unsigned int colors[80];
|
||||||
extern unsigned int jump_frames,curr_frames;
|
extern unsigned int jump_frames,curr_frames;
|
||||||
|
|
||||||
void SDL_Fullscreen_Switch(void);
|
void SDL_Fullscreen_Switch(void);
|
||||||
void load_rom(char);
|
void load_rom(char);
|
||||||
void load_main_game(char *nombre);
|
void load_main_game(char *nombre);
|
||||||
|
int load_config(struct computer *object, char *filename);
|
||||||
void save_config(struct computer *object);
|
void save_config(struct computer *object);
|
||||||
|
int save_config_game(struct computer *object, char *filename, int overwrite);
|
||||||
FILE *myfopen(char *filename,char *mode);
|
FILE *myfopen(char *filename,char *mode);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
140
src/gui_sdl.c
140
src/gui_sdl.c
@ -64,7 +64,7 @@ static const char *main_menu_messages[] = {
|
|||||||
/*07*/ "Emulation settings",
|
/*07*/ "Emulation settings",
|
||||||
/*08*/ "Microdrive",
|
/*08*/ "Microdrive",
|
||||||
/*09*/ "Tools",
|
/*09*/ "Tools",
|
||||||
/*10*/ "Save confs",
|
/*10*/ "Confs files",
|
||||||
/*11*/ "Reset",
|
/*11*/ "Reset",
|
||||||
/*12*/ "Help",
|
/*12*/ "Help",
|
||||||
/*13*/ "Quit",
|
/*13*/ "Quit",
|
||||||
@ -152,6 +152,40 @@ static const char *help_messages[] = {
|
|||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *confs_messages[] = {
|
||||||
|
/*00*/ "Save general configs",
|
||||||
|
/*01*/ " ",
|
||||||
|
/*02*/ "Game configurations",
|
||||||
|
/*03*/ "^|Load|Save|Delete",
|
||||||
|
/*04*/ " ",
|
||||||
|
/*05*/ "Load confs automatically",
|
||||||
|
/*06*/ "^|on|off",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
void maybe_load_conf(const char *filename)
|
||||||
|
{
|
||||||
|
const char *dir = path_confs;
|
||||||
|
char *ptr;
|
||||||
|
char db[256];
|
||||||
|
char fb[81];
|
||||||
|
|
||||||
|
if (filename==NULL) return;
|
||||||
|
|
||||||
|
if (strrchr(filename, '/'))
|
||||||
|
strncpy(fb, strrchr(filename, '/') + 1, 80);
|
||||||
|
else
|
||||||
|
strncpy(fb, filename, 80);
|
||||||
|
|
||||||
|
//remove the extension
|
||||||
|
ptr = strrchr (fb, '.');
|
||||||
|
if (ptr) *ptr = 0;
|
||||||
|
|
||||||
|
snprintf(db, 255, "%s/%s.conf", dir, fb);
|
||||||
|
if (!load_config(&ordenador,db)) msgInfo("Configurations loaded",2000,NULL) ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void insert_tape()
|
static void insert_tape()
|
||||||
{
|
{
|
||||||
unsigned char char_id[11];
|
unsigned char char_id[11];
|
||||||
@ -198,6 +232,7 @@ static void insert_tape()
|
|||||||
case 0: // all right
|
case 0: // all right
|
||||||
strcpy(ordenador.current_tap,filename);
|
strcpy(ordenador.current_tap,filename);
|
||||||
strcpy(ordenador.last_selected_file,filename);
|
strcpy(ordenador.last_selected_file,filename);
|
||||||
|
if (ordenador.autoconf) maybe_load_conf(filename);
|
||||||
break;
|
break;
|
||||||
case -1:
|
case -1:
|
||||||
msgInfo("Error: Can't load that file",3000,NULL);
|
msgInfo("Error: Can't load that file",3000,NULL);
|
||||||
@ -819,6 +854,7 @@ static void save_load_snapshot(int which)
|
|||||||
switch(retorno) {
|
switch(retorno) {
|
||||||
case 0: // all right
|
case 0: // all right
|
||||||
strcpy(ordenador.last_selected_file,filename);
|
strcpy(ordenador.last_selected_file,filename);
|
||||||
|
if (ordenador.autoconf) maybe_load_conf(filename);
|
||||||
break;
|
break;
|
||||||
case -1:
|
case -1:
|
||||||
msgInfo("Error: Can't load that file",3000,NULL);
|
msgInfo("Error: Can't load that file",3000,NULL);
|
||||||
@ -859,6 +895,105 @@ static void save_load_snapshot(int which)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void save_load_configurations(int which)
|
||||||
|
{
|
||||||
|
const char *dir = path_confs;
|
||||||
|
const char *tape = ordenador.last_selected_file;
|
||||||
|
char *ptr;
|
||||||
|
char db[256];
|
||||||
|
char fb[81];
|
||||||
|
int retorno;
|
||||||
|
|
||||||
|
// Name (for saves) - TO CHECK
|
||||||
|
if (tape && strrchr(tape, '/'))
|
||||||
|
strncpy(fb, strrchr(tape, '/') + 1, 80);
|
||||||
|
else
|
||||||
|
strcpy(fb, "unknown");
|
||||||
|
|
||||||
|
//remove the extension
|
||||||
|
ptr = strrchr (fb, '.');
|
||||||
|
if (ptr) *ptr = 0;
|
||||||
|
|
||||||
|
snprintf(db, 255, "%s/%s.conf", dir, fb);
|
||||||
|
|
||||||
|
switch(which)
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
case 0: // Load or delete file
|
||||||
|
{
|
||||||
|
const char *filename = menu_select_file(dir, NULL,-1);
|
||||||
|
|
||||||
|
if (!filename)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (ext_matches(filename, ".conf")|ext_matches(filename, ".CONF"))
|
||||||
|
{
|
||||||
|
if (which == 0) // Load config file
|
||||||
|
{
|
||||||
|
if (!load_config(&ordenador,db)) msgInfo("Configurations loaded",3000,NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else // Delete config file
|
||||||
|
if (msgYesNo("Delete the file?", 0, FULL_DISPLAY_X /2-138, FULL_DISPLAY_Y /2-48)) unlink(filename);
|
||||||
|
}
|
||||||
|
free((void*)filename);
|
||||||
|
} break;
|
||||||
|
case 1: // Save configuration file
|
||||||
|
retorno=save_config_game(&ordenador,db,0);
|
||||||
|
|
||||||
|
switch(retorno)
|
||||||
|
{
|
||||||
|
case 0: //OK
|
||||||
|
msgInfo("Configurations saved",3000,NULL);
|
||||||
|
break;
|
||||||
|
case -1:
|
||||||
|
if (msgYesNo("Overwrite the exiting file?", 0, FULL_DISPLAY_X /2-160, FULL_DISPLAY_Y /2-48))
|
||||||
|
{
|
||||||
|
save_config_game(&ordenador,db,1); //force overwrite
|
||||||
|
msgInfo("Configurations saved",3000,NULL);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case -2:
|
||||||
|
msgInfo("Can't create file",3000,NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void manage_configurations()
|
||||||
|
{
|
||||||
|
int opt ;
|
||||||
|
int submenus[2];
|
||||||
|
|
||||||
|
memset(submenus, 0, sizeof(submenus));
|
||||||
|
|
||||||
|
submenus[1]=!ordenador.autoconf;
|
||||||
|
|
||||||
|
opt = menu_select_title("Configurations file menu",
|
||||||
|
confs_messages, submenus);
|
||||||
|
if (opt < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ordenador.autoconf=!submenus[1];
|
||||||
|
|
||||||
|
switch(opt)
|
||||||
|
{
|
||||||
|
case 0: // Save general configurations
|
||||||
|
save_config(&ordenador);
|
||||||
|
msgInfo("Configurations saved",3000,NULL);
|
||||||
|
break;
|
||||||
|
case 2: // Save, load and delete game configurations
|
||||||
|
save_load_configurations(submenus[0]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void help(void)
|
static void help(void)
|
||||||
{
|
{
|
||||||
menu_select_title("FBZX-WII help",
|
menu_select_title("FBZX-WII help",
|
||||||
@ -899,8 +1034,7 @@ void main_menu()
|
|||||||
tools();
|
tools();
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
save_config(&ordenador);
|
manage_configurations();
|
||||||
msgInfo("Configurations saved",3000,NULL);
|
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
ResetComputer ();
|
ResetComputer ();
|
||||||
|
@ -281,7 +281,7 @@ static const char **get_file_list(const char *base_dir)
|
|||||||
{
|
{
|
||||||
char buf[255];
|
char buf[255];
|
||||||
const char *exts[] = {".tap", ".TAP", ".tzx", ".TZX", ".z80",".Z80",".sna", ".SNA",
|
const char *exts[] = {".tap", ".TAP", ".tzx", ".TZX", ".z80",".Z80",".sna", ".SNA",
|
||||||
".mdr", ".MDR", ".scr", ".SCR", NULL};
|
".mdr", ".MDR", ".scr", ".SCR", ".conf", ".CONF",NULL};
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
snprintf(buf, 255, "%s/%s", base_dir, de->d_name);
|
snprintf(buf, 255, "%s/%s", base_dir, de->d_name);
|
||||||
|
Loading…
Reference in New Issue
Block a user