www.pudn.com > ngcd080s.zip > cheats.c


#include  
#include  
#include "../config/config.h" 
#include "../gui/gui.h" 
#include "../input/macro.h" 
 
extern int neogeo_ipl_done; 
 
int	cheats_enable = 0; 
 
typedef struct { 
	char	cheat_name[32]; 
	int		cheat_code; 
	int		cheat_type; 
	int		cheat_enable; 
} CHEAT_ENTRY; 
 
CHEAT_ENTRY	cheat_list[16]; 
 
DIALOG cheat_dialog[] = 
{ 
   /* (dialog proc)   (x)  (y)  (w)  (h)    (fg)    (bg)  (key)  (flags)   (d1)  (d2)            (dp) */ 
 {d_neo_border_proc,   0,   0, 239, 239, 0x0000, 0x0000,      0,      0,     0,    0,                NULL}, 
 {d_neo_fbox_proc,     2,   2, 235,   8, 0x0000, 0x10E3,      0,      0,     0,    0,                NULL}, 
 {d_text_proc,        10,   3,   0,   0, 0xFFFF, 0x10E3,      0,      0,     0,    0,  "Cheats Selection"}, 
 {d_text_proc,        10,  13,   0,   0, 0xFFFF, 0x9596,      0,      0,     0,    0,       "Game Name :"}, 
 {d_text_proc,		  80,  13,   0,   0, 0xFFFF, 0x9596,      0,      0,     0,    0,                  ""}, 
  
 {d_neo_gbox_proc,    10,  26, 220, 189, 0xC71C, 0x328A,      0,      0,     0,    0,  "Available cheats"}, 
 {d_neo_check_proc,   15,  32,  10,  10, 0xFFFF, 0x9596,    '1',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15,  44,  10,  10, 0xFFFF, 0x9596,    '2',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15,  56,  10,  10, 0xFFFF, 0x9596,    '3',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15,  68,  10,  10, 0xFFFF, 0x9596,    '4',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15,  80,  10,  10, 0xFFFF, 0x9596,    '5',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15,  92,  10,  10, 0xFFFF, 0x9596,    '6',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15, 104,  10,  10, 0xFFFF, 0x9596,    '7',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15, 116,  10,  10, 0xFFFF, 0x9596,    '8',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15, 128,  10,  10, 0xFFFF, 0x9596,    '9',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15, 140,  10,  10, 0xFFFF, 0x9596,    'a',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15, 152,  10,  10, 0xFFFF, 0x9596,    'b',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15, 164,  10,  10, 0xFFFF, 0x9596,    'c',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15, 176,  10,  10, 0xFFFF, 0x9596,    'd',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15, 188,  10,  10, 0xFFFF, 0x9596,    'e',      0,     0,    0,                  ""}, 
 {d_neo_check_proc,   15, 200,  10,  10, 0xFFFF, 0x9596,    'f',      0,     0,    0,                  ""}, 
 
 {d_neo_button_proc,  87, 219, 65,  15, 0x0000, 0x0000,     'o', D_EXIT,     0,    0,               "&OK"}, 
 
 {NULL,                0,   0,   0,   0, 0x0000, 0x0000,      0,      0,     0,    0,                NULL} 
}; 
 
void cheat_select(void) 
{ 
	int			ret, i, code; 
	MACROFILE	cfg; 
	 
	if (!neogeo_ipl_done) 
	{ 
		neo_alert1("Error", NULL, "This function is useless without a game loaded.", NULL, "&Abort", 'a'); 
		return; 
	} 
	macro_fopen(&cfg, "CHEATS.CFG"); 
	 
	if ((!macro_find_section(&cfg, config_game_name))||(!macro_find_subsection(&cfg, "codes"))) 
	{ 
		macro_fclose(&cfg); 
		neo_alert1(config_game_name, NULL, "No entry for this game in CHEATS.CFG.", NULL, "&Abort", 'a'); 
		return; 
	} 
	 
	cheat_dialog[4].dp = config_game_name; 
	 
	i = 0; 
	 
	while(macro_enum_variables(&cfg)) 
	{ 
		cheat_split((char *)cfg.macro_variable, cheat_list[i].cheat_name, &cheat_list[i].cheat_code, &cheat_list[i].cheat_type); 
		i++; 
	} 
	 
	for(i=0;i<15;i++) 
	{ 
		cheat_dialog[i + 6].flags = 0; 
 
		if (cheat_list[i].cheat_code == 0) 
			cheat_dialog[i + 6].flags = D_HIDDEN; 
			 
		if (cheat_list[i].cheat_enable) 
			cheat_dialog[i + 6].flags = D_SELECTED; 
			 
		cheat_dialog[i + 6].dp = cheat_list[i].cheat_name; 
	} 
	 
	centre_dialog(cheat_dialog); 
 
	ret = do_dialog(cheat_dialog, 0); 
 
	for(i=0;i<15;i++) 
	{ 
		if (cheat_dialog[i + 6].flags&D_SELECTED) 
		{ 
			cheat_list[i].cheat_enable = 1; 
			cheats_enable = 1; 
		} 
		else 
			cheat_list[i].cheat_enable = 0; 
	} 
 
	macro_fclose(&cfg); 
}