mirror of
https://github.com/libretro/RetroArch
synced 2025-02-28 12:40:23 +00:00
add cheat variables to allow for updating large portions of memory - e.g. unlock all levels
This commit is contained in:
parent
67347205d4
commit
25b5a7e3b8
@ -1605,6 +1605,12 @@ MSG_HASH(MENU_ENUM_LABEL_CHEAT_TYPE,
|
|||||||
"cheat_type")
|
"cheat_type")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_CHEAT_VALUE,
|
MSG_HASH(MENU_ENUM_LABEL_CHEAT_VALUE,
|
||||||
"cheat_value")
|
"cheat_value")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_CHEAT_REPEAT_COUNT,
|
||||||
|
"cheat_repeat_count")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_CHEAT_REPEAT_ADD_TO_VALUE,
|
||||||
|
"cheat_repeat_add_to_value")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_CHEAT_REPEAT_ADD_TO_ADDRESS,
|
||||||
|
"cheat_repeat_add_to_address")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_CHEAT_ADDRESS,
|
MSG_HASH(MENU_ENUM_LABEL_CHEAT_ADDRESS,
|
||||||
"cheat_address")
|
"cheat_address")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_CHEAT_ADDRESS_BIT_POSITION,
|
MSG_HASH(MENU_ENUM_LABEL_CHEAT_ADDRESS_BIT_POSITION,
|
||||||
|
@ -6822,6 +6822,18 @@ MSG_HASH(
|
|||||||
MENU_ENUM_LABEL_VALUE_CHEAT_RUMBLE_SECONDARY_DURATION,
|
MENU_ENUM_LABEL_VALUE_CHEAT_RUMBLE_SECONDARY_DURATION,
|
||||||
"Rumble Secondary Duration (ms)"
|
"Rumble Secondary Duration (ms)"
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_VALUE_CHEAT_REPEAT_COUNT,
|
||||||
|
"Number of Iterations"
|
||||||
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_VALUE_CHEAT_REPEAT_ADD_TO_VALUE,
|
||||||
|
"Value Increase Each Iteration"
|
||||||
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_VALUE_CHEAT_REPEAT_ADD_TO_ADDRESS,
|
||||||
|
"Address Increase Each Iteration"
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_LABEL_VALUE_CHEAT_ADD_NEW_AFTER,
|
MENU_ENUM_LABEL_VALUE_CHEAT_ADD_NEW_AFTER,
|
||||||
"Add New Cheat After This One"
|
"Add New Cheat After This One"
|
||||||
|
@ -123,6 +123,25 @@ bool cheat_manager_save(const char *path, const char *cheat_database, bool overw
|
|||||||
char buf[PATH_MAX_LENGTH];
|
char buf[PATH_MAX_LENGTH];
|
||||||
char cheats_file[PATH_MAX_LENGTH];
|
char cheats_file[PATH_MAX_LENGTH];
|
||||||
config_file_t *conf = NULL;
|
config_file_t *conf = NULL;
|
||||||
|
unsigned int* data_ptrs[16] = { NULL};
|
||||||
|
char* keys[16] = {
|
||||||
|
"cheat%u_handler",
|
||||||
|
"cheat%u_memory_search_size",
|
||||||
|
"cheat%u_cheat_type",
|
||||||
|
"cheat%u_value",
|
||||||
|
"cheat%u_address",
|
||||||
|
"cheat%u_address_bit_position",
|
||||||
|
"cheat%u_rumble_type",
|
||||||
|
"cheat%u_rumble_value",
|
||||||
|
"cheat%u_rumble_port",
|
||||||
|
"cheat%u_rumble_primary_strength",
|
||||||
|
"cheat%u_rumble_primary_duration",
|
||||||
|
"cheat%u_rumble_secondary_strength",
|
||||||
|
"cheat%u_rumble_secondary_duration",
|
||||||
|
"cheat%u_repeat_count",
|
||||||
|
"cheat%u_repeat_add_to_value",
|
||||||
|
"cheat%u_repeat_add_to_address",
|
||||||
|
};
|
||||||
|
|
||||||
buf[0] = cheats_file[0] = '\0';
|
buf[0] = cheats_file[0] = '\0';
|
||||||
|
|
||||||
@ -158,21 +177,6 @@ bool cheat_manager_save(const char *path, const char *cheat_database, bool overw
|
|||||||
char desc_key[256];
|
char desc_key[256];
|
||||||
char code_key[256];
|
char code_key[256];
|
||||||
char enable_key[256];
|
char enable_key[256];
|
||||||
char* keys[13] = {
|
|
||||||
"cheat%u_handler",
|
|
||||||
"cheat%u_memory_search_size",
|
|
||||||
"cheat%u_cheat_type",
|
|
||||||
"cheat%u_value",
|
|
||||||
"cheat%u_address",
|
|
||||||
"cheat%u_address_bit_position",
|
|
||||||
"cheat%u_rumble_type",
|
|
||||||
"cheat%u_rumble_value",
|
|
||||||
"cheat%u_rumble_port",
|
|
||||||
"cheat%u_rumble_primary_strength",
|
|
||||||
"cheat%u_rumble_primary_duration",
|
|
||||||
"cheat%u_rumble_secondary_strength",
|
|
||||||
"cheat%u_rumble_secondary_duration",
|
|
||||||
};
|
|
||||||
|
|
||||||
key[0] = endian_key[0] = desc_key[0] = code_key[0] = enable_key[0] = '\0';
|
key[0] = endian_key[0] = desc_key[0] = code_key[0] = enable_key[0] = '\0';
|
||||||
|
|
||||||
@ -185,13 +189,11 @@ bool cheat_manager_save(const char *path, const char *cheat_database, bool overw
|
|||||||
config_set_string(conf, desc_key, cheat_manager_state.cheats[i].desc);
|
config_set_string(conf, desc_key, cheat_manager_state.cheats[i].desc);
|
||||||
else
|
else
|
||||||
config_set_string(conf, desc_key, cheat_manager_state.cheats[i].code);
|
config_set_string(conf, desc_key, cheat_manager_state.cheats[i].code);
|
||||||
|
|
||||||
config_set_string(conf, code_key, cheat_manager_state.cheats[i].code);
|
config_set_string(conf, code_key, cheat_manager_state.cheats[i].code);
|
||||||
config_set_bool(conf, enable_key, cheat_manager_state.cheats[i].state);
|
config_set_bool(conf, enable_key, cheat_manager_state.cheats[i].state);
|
||||||
config_set_bool(conf, endian_key, cheat_manager_state.cheats[i].big_endian);
|
config_set_bool(conf, endian_key, cheat_manager_state.cheats[i].big_endian);
|
||||||
|
|
||||||
for (j = 0; j < 13; j++)
|
|
||||||
{
|
|
||||||
unsigned int* data_ptrs[13] = { NULL};
|
|
||||||
data_ptrs[0] = &cheat_manager_state.cheats[i].handler;
|
data_ptrs[0] = &cheat_manager_state.cheats[i].handler;
|
||||||
data_ptrs[1] = &cheat_manager_state.cheats[i].memory_search_size;
|
data_ptrs[1] = &cheat_manager_state.cheats[i].memory_search_size;
|
||||||
data_ptrs[2] = &cheat_manager_state.cheats[i].cheat_type;
|
data_ptrs[2] = &cheat_manager_state.cheats[i].cheat_type;
|
||||||
@ -205,6 +207,12 @@ bool cheat_manager_save(const char *path, const char *cheat_database, bool overw
|
|||||||
data_ptrs[10] = &cheat_manager_state.cheats[i].rumble_primary_duration;
|
data_ptrs[10] = &cheat_manager_state.cheats[i].rumble_primary_duration;
|
||||||
data_ptrs[11] = &cheat_manager_state.cheats[i].rumble_secondary_strength;
|
data_ptrs[11] = &cheat_manager_state.cheats[i].rumble_secondary_strength;
|
||||||
data_ptrs[12] = &cheat_manager_state.cheats[i].rumble_secondary_duration;
|
data_ptrs[12] = &cheat_manager_state.cheats[i].rumble_secondary_duration;
|
||||||
|
data_ptrs[13] = &cheat_manager_state.cheats[i].repeat_count;
|
||||||
|
data_ptrs[14] = &cheat_manager_state.cheats[i].repeat_add_to_value;
|
||||||
|
data_ptrs[15] = &cheat_manager_state.cheats[i].repeat_add_to_address;
|
||||||
|
|
||||||
|
for (j = 0; j < 16; j++)
|
||||||
|
{
|
||||||
key[0] = '\0';
|
key[0] = '\0';
|
||||||
snprintf(key, sizeof(key), keys[j], i);
|
snprintf(key, sizeof(key), keys[j], i);
|
||||||
config_set_uint(conf, key, *(data_ptrs[j]));
|
config_set_uint(conf, key, *(data_ptrs[j]));
|
||||||
@ -283,6 +291,9 @@ static void cheat_manager_new(unsigned size)
|
|||||||
cheat_manager_state.cheats[i].desc = NULL ;
|
cheat_manager_state.cheats[i].desc = NULL ;
|
||||||
cheat_manager_state.cheats[i].code = NULL ;
|
cheat_manager_state.cheats[i].code = NULL ;
|
||||||
cheat_manager_state.cheats[i].state = false;
|
cheat_manager_state.cheats[i].state = false;
|
||||||
|
cheat_manager_state.cheats[i].repeat_count = 1;
|
||||||
|
cheat_manager_state.cheats[i].repeat_add_to_value = 0;
|
||||||
|
cheat_manager_state.cheats[i].repeat_add_to_address = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ;
|
return ;
|
||||||
@ -293,6 +304,25 @@ bool cheat_manager_load(const char *path, bool append)
|
|||||||
unsigned cheats = 0, i;
|
unsigned cheats = 0, i;
|
||||||
config_file_t *conf = config_file_new(path);
|
config_file_t *conf = config_file_new(path);
|
||||||
unsigned orig_size ;
|
unsigned orig_size ;
|
||||||
|
unsigned int* data_ptrs[16] = { NULL};
|
||||||
|
char* keys[16] = {
|
||||||
|
"cheat%u_handler",
|
||||||
|
"cheat%u_memory_search_size",
|
||||||
|
"cheat%u_cheat_type",
|
||||||
|
"cheat%u_value",
|
||||||
|
"cheat%u_address",
|
||||||
|
"cheat%u_address_bit_position",
|
||||||
|
"cheat%u_rumble_type",
|
||||||
|
"cheat%u_rumble_value",
|
||||||
|
"cheat%u_rumble_port",
|
||||||
|
"cheat%u_rumble_primary_strength",
|
||||||
|
"cheat%u_rumble_primary_duration",
|
||||||
|
"cheat%u_rumble_secondary_strength",
|
||||||
|
"cheat%u_rumble_secondary_duration",
|
||||||
|
"cheat%u_repeat_count",
|
||||||
|
"cheat%u_repeat_add_to_value",
|
||||||
|
"cheat%u_repeat_add_to_address",
|
||||||
|
};
|
||||||
|
|
||||||
if (!conf)
|
if (!conf)
|
||||||
return false;
|
return false;
|
||||||
@ -334,22 +364,7 @@ bool cheat_manager_load(const char *path, bool append)
|
|||||||
char endian_key[256];
|
char endian_key[256];
|
||||||
char *tmp = NULL;
|
char *tmp = NULL;
|
||||||
bool tmp_bool = false;
|
bool tmp_bool = false;
|
||||||
unsigned int* data_ptrs[13] = { NULL};
|
|
||||||
char* keys[13] = {
|
|
||||||
"cheat%u_handler",
|
|
||||||
"cheat%u_memory_search_size",
|
|
||||||
"cheat%u_cheat_type",
|
|
||||||
"cheat%u_value",
|
|
||||||
"cheat%u_address",
|
|
||||||
"cheat%u_address_bit_position",
|
|
||||||
"cheat%u_rumble_type",
|
|
||||||
"cheat%u_rumble_value",
|
|
||||||
"cheat%u_rumble_port",
|
|
||||||
"cheat%u_rumble_primary_strength",
|
|
||||||
"cheat%u_rumble_primary_duration",
|
|
||||||
"cheat%u_rumble_secondary_strength",
|
|
||||||
"cheat%u_rumble_secondary_duration",
|
|
||||||
};
|
|
||||||
data_ptrs[0] = &cheat_manager_state.cheats[i].handler;
|
data_ptrs[0] = &cheat_manager_state.cheats[i].handler;
|
||||||
data_ptrs[1] = &cheat_manager_state.cheats[i].memory_search_size;
|
data_ptrs[1] = &cheat_manager_state.cheats[i].memory_search_size;
|
||||||
data_ptrs[2] = &cheat_manager_state.cheats[i].cheat_type;
|
data_ptrs[2] = &cheat_manager_state.cheats[i].cheat_type;
|
||||||
@ -363,6 +378,9 @@ bool cheat_manager_load(const char *path, bool append)
|
|||||||
data_ptrs[10] = &cheat_manager_state.cheats[i].rumble_primary_duration;
|
data_ptrs[10] = &cheat_manager_state.cheats[i].rumble_primary_duration;
|
||||||
data_ptrs[11] = &cheat_manager_state.cheats[i].rumble_secondary_strength;
|
data_ptrs[11] = &cheat_manager_state.cheats[i].rumble_secondary_strength;
|
||||||
data_ptrs[12] = &cheat_manager_state.cheats[i].rumble_secondary_duration;
|
data_ptrs[12] = &cheat_manager_state.cheats[i].rumble_secondary_duration;
|
||||||
|
data_ptrs[13] = &cheat_manager_state.cheats[i].repeat_count;
|
||||||
|
data_ptrs[14] = &cheat_manager_state.cheats[i].repeat_add_to_value;
|
||||||
|
data_ptrs[15] = &cheat_manager_state.cheats[i].repeat_add_to_address;
|
||||||
|
|
||||||
endian_key[0] = desc_key[0] = code_key[0] = enable_key[0] = '\0';
|
endian_key[0] = desc_key[0] = code_key[0] = enable_key[0] = '\0';
|
||||||
|
|
||||||
@ -395,7 +413,7 @@ bool cheat_manager_load(const char *path, bool append)
|
|||||||
|
|
||||||
cheat_manager_state.cheats[i].cheat_type = CHEAT_TYPE_SET_TO_VALUE ;
|
cheat_manager_state.cheats[i].cheat_type = CHEAT_TYPE_SET_TO_VALUE ;
|
||||||
cheat_manager_state.cheats[i].memory_search_size = 3;
|
cheat_manager_state.cheats[i].memory_search_size = 3;
|
||||||
for (j = 0 ; j < 13 ; j++ )
|
for (j = 0 ; j < 16 ; j++ )
|
||||||
{
|
{
|
||||||
char key[50] ;
|
char key[50] ;
|
||||||
unsigned val = 0;
|
unsigned val = 0;
|
||||||
@ -463,6 +481,9 @@ bool cheat_manager_realloc(unsigned new_size, unsigned default_handler)
|
|||||||
cheat_manager_state.cheats[i].cheat_type = CHEAT_TYPE_SET_TO_VALUE ;
|
cheat_manager_state.cheats[i].cheat_type = CHEAT_TYPE_SET_TO_VALUE ;
|
||||||
cheat_manager_state.cheats[i].memory_search_size = 3;
|
cheat_manager_state.cheats[i].memory_search_size = 3;
|
||||||
cheat_manager_state.cheats[i].idx = i;
|
cheat_manager_state.cheats[i].idx = i;
|
||||||
|
cheat_manager_state.cheats[i].repeat_count = 1;
|
||||||
|
cheat_manager_state.cheats[i].repeat_add_to_value = 0;
|
||||||
|
cheat_manager_state.cheats[i].repeat_add_to_address = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -1141,6 +1162,8 @@ void cheat_manager_apply_retro_cheats(void)
|
|||||||
unsigned int idx;
|
unsigned int idx;
|
||||||
bool set_value = false;
|
bool set_value = false;
|
||||||
unsigned int value_to_set = 0;
|
unsigned int value_to_set = 0;
|
||||||
|
unsigned int repeat_iter = 0 ;
|
||||||
|
unsigned int address_mask = cheat_manager_state.cheats[i].address_mask ;
|
||||||
|
|
||||||
if (cheat_manager_state.cheats[i].handler != CHEAT_HANDLER_TYPE_RETRO || !cheat_manager_state.cheats[i].state)
|
if (cheat_manager_state.cheats[i].handler != CHEAT_HANDLER_TYPE_RETRO || !cheat_manager_state.cheats[i].state)
|
||||||
continue ;
|
continue ;
|
||||||
@ -1221,6 +1244,8 @@ void cheat_manager_apply_retro_cheats(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
if (set_value)
|
if (set_value)
|
||||||
|
{
|
||||||
|
for ( repeat_iter = 1 ; repeat_iter <= cheat_manager_state.cheats[i].repeat_count ; repeat_iter++)
|
||||||
{
|
{
|
||||||
switch (bytes_per_item)
|
switch (bytes_per_item)
|
||||||
{
|
{
|
||||||
@ -1262,7 +1287,7 @@ void cheat_manager_apply_retro_cheats(void)
|
|||||||
|
|
||||||
for (bitpos = 0 ; bitpos < 8 ; bitpos++)
|
for (bitpos = 0 ; bitpos < 8 ; bitpos++)
|
||||||
{
|
{
|
||||||
if ((cheat_manager_state.cheats[i].address_mask>>bitpos)&0x01 )
|
if ((address_mask>>bitpos)&0x01 )
|
||||||
{
|
{
|
||||||
mask = (~(1<<bitpos)&0xFF) ;
|
mask = (~(1<<bitpos)&0xFF) ;
|
||||||
/* Clear current bit value */
|
/* Clear current bit value */
|
||||||
@ -1280,6 +1305,29 @@ void cheat_manager_apply_retro_cheats(void)
|
|||||||
*(curr+idx) = value_to_set & 0xFF ;
|
*(curr+idx) = value_to_set & 0xFF ;
|
||||||
break ;
|
break ;
|
||||||
}
|
}
|
||||||
|
value_to_set += cheat_manager_state.cheats[i].repeat_add_to_value ;
|
||||||
|
value_to_set = value_to_set%mask ;
|
||||||
|
|
||||||
|
if ( bits < 8 )
|
||||||
|
{
|
||||||
|
unsigned int bit_iter ;
|
||||||
|
for ( bit_iter = 0 ; bit_iter < cheat_manager_state.cheats[i].repeat_add_to_address ; bit_iter++)
|
||||||
|
{
|
||||||
|
address_mask = (address_mask<<mask)&0xFF ;
|
||||||
|
if ( address_mask == 0 )
|
||||||
|
{
|
||||||
|
address_mask = mask ;
|
||||||
|
idx++ ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
idx += (cheat_manager_state.cheats[i].repeat_add_to_address*bytes_per_item) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
idx = idx%cheat_manager_state.total_memory_size ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -132,6 +132,23 @@ struct item_cheat
|
|||||||
unsigned int rumble_secondary_strength ; /* 0-65535 */
|
unsigned int rumble_secondary_strength ; /* 0-65535 */
|
||||||
unsigned int rumble_secondary_duration ; /* in milliseconds */
|
unsigned int rumble_secondary_duration ; /* in milliseconds */
|
||||||
retro_time_t rumble_secondary_end_time ; /* clock value for when rumbling should stop */
|
retro_time_t rumble_secondary_end_time ; /* clock value for when rumbling should stop */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The repeat_ variables allow for a single cheat code to affect multiple memory addresses.
|
||||||
|
* repeat_count - the number of times the cheat code should be applied
|
||||||
|
* repeat_add_to_value - every iteration of repeat_count will have this amount added to item_cheat.value
|
||||||
|
* repeat_add_to_address - every iteration of repeat_count will have this amount added to item_cheat.address
|
||||||
|
*
|
||||||
|
* Note that repeat_add_to_address represents the number of "memory_search_size" blocks to add to
|
||||||
|
* item_cheat.address. If memory_seach_size is 16-bits and repeat_add_to_address is 2, then item_cheat.address
|
||||||
|
* will be increased by 4 bytes 2*(16-bits) for every iteration.
|
||||||
|
*
|
||||||
|
* This is a cheating structure used for codes like unlocking all levels, giving yourself 1 of every item,etc.
|
||||||
|
*/
|
||||||
|
unsigned int repeat_count ;
|
||||||
|
unsigned int repeat_add_to_value ;
|
||||||
|
unsigned int repeat_add_to_address ;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cheat_manager
|
struct cheat_manager
|
||||||
|
@ -126,6 +126,9 @@ static int menu_cbs_init_bind_cancel_compare_type(
|
|||||||
case MENU_ENUM_LABEL_CHEAT_VALUE:
|
case MENU_ENUM_LABEL_CHEAT_VALUE:
|
||||||
case MENU_ENUM_LABEL_CHEAT_ADDRESS:
|
case MENU_ENUM_LABEL_CHEAT_ADDRESS:
|
||||||
case MENU_ENUM_LABEL_CHEAT_ADDRESS_BIT_POSITION:
|
case MENU_ENUM_LABEL_CHEAT_ADDRESS_BIT_POSITION:
|
||||||
|
case MENU_ENUM_LABEL_CHEAT_REPEAT_COUNT:
|
||||||
|
case MENU_ENUM_LABEL_CHEAT_REPEAT_ADD_TO_ADDRESS:
|
||||||
|
case MENU_ENUM_LABEL_CHEAT_REPEAT_ADD_TO_VALUE:
|
||||||
case MENU_ENUM_LABEL_CHEAT_RUMBLE_TYPE:
|
case MENU_ENUM_LABEL_CHEAT_RUMBLE_TYPE:
|
||||||
case MENU_ENUM_LABEL_CHEAT_RUMBLE_VALUE:
|
case MENU_ENUM_LABEL_CHEAT_RUMBLE_VALUE:
|
||||||
case MENU_ENUM_LABEL_CHEAT_RUMBLE_PORT:
|
case MENU_ENUM_LABEL_CHEAT_RUMBLE_PORT:
|
||||||
|
@ -5259,6 +5259,15 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
|
|||||||
menu_displaylist_parse_settings_enum(menu, info,
|
menu_displaylist_parse_settings_enum(menu, info,
|
||||||
MENU_ENUM_LABEL_CHEAT_ADDRESS_BIT_POSITION,
|
MENU_ENUM_LABEL_CHEAT_ADDRESS_BIT_POSITION,
|
||||||
PARSE_ONLY_UINT, false);
|
PARSE_ONLY_UINT, false);
|
||||||
|
menu_displaylist_parse_settings_enum(menu, info,
|
||||||
|
MENU_ENUM_LABEL_CHEAT_REPEAT_COUNT,
|
||||||
|
PARSE_ONLY_UINT, false);
|
||||||
|
menu_displaylist_parse_settings_enum(menu, info,
|
||||||
|
MENU_ENUM_LABEL_CHEAT_REPEAT_ADD_TO_ADDRESS,
|
||||||
|
PARSE_ONLY_UINT, false);
|
||||||
|
menu_displaylist_parse_settings_enum(menu, info,
|
||||||
|
MENU_ENUM_LABEL_CHEAT_REPEAT_ADD_TO_VALUE,
|
||||||
|
PARSE_ONLY_UINT, false);
|
||||||
menu_displaylist_parse_settings_enum(menu, info,
|
menu_displaylist_parse_settings_enum(menu, info,
|
||||||
MENU_ENUM_LABEL_CHEAT_RUMBLE_TYPE,
|
MENU_ENUM_LABEL_CHEAT_RUMBLE_TYPE,
|
||||||
PARSE_ONLY_UINT, false);
|
PARSE_ONLY_UINT, false);
|
||||||
|
@ -4585,6 +4585,21 @@ static bool setting_append_list(
|
|||||||
general_read_handler,
|
general_read_handler,
|
||||||
SD_FLAG_NONE);
|
SD_FLAG_NONE);
|
||||||
|
|
||||||
|
config_uint_cbs(cheat_manager_state.working_cheat.repeat_count, CHEAT_REPEAT_COUNT,
|
||||||
|
setting_uint_action_left_default,setting_uint_action_right_default,
|
||||||
|
0,&setting_get_string_representation_hex_and_uint,1,2048,1) ;
|
||||||
|
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||||
|
|
||||||
|
config_uint_cbs(cheat_manager_state.working_cheat.repeat_add_to_address, CHEAT_REPEAT_ADD_TO_ADDRESS,
|
||||||
|
setting_uint_action_left_default,setting_uint_action_right_default,
|
||||||
|
0,&setting_get_string_representation_hex_and_uint,1,2048,1) ;
|
||||||
|
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||||
|
|
||||||
|
config_uint_cbs(cheat_manager_state.working_cheat.repeat_add_to_value, CHEAT_REPEAT_ADD_TO_VALUE,
|
||||||
|
setting_uint_action_left_default,setting_uint_action_right_default,
|
||||||
|
0,&setting_get_string_representation_hex_and_uint,0,0xFFFF,1) ;
|
||||||
|
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||||
|
|
||||||
config_uint_cbs(cheat_manager_state.working_cheat.rumble_type, CHEAT_RUMBLE_TYPE,
|
config_uint_cbs(cheat_manager_state.working_cheat.rumble_type, CHEAT_RUMBLE_TYPE,
|
||||||
setting_uint_action_left_default,setting_uint_action_right_default,
|
setting_uint_action_left_default,setting_uint_action_right_default,
|
||||||
MENU_ENUM_LABEL_RUMBLE_TYPE_DISABLED,&setting_get_string_representation_uint_as_enum,
|
MENU_ENUM_LABEL_RUMBLE_TYPE_DISABLED,&setting_get_string_representation_uint_as_enum,
|
||||||
|
@ -1247,6 +1247,9 @@ enum msg_hash_enums
|
|||||||
MENU_LABEL(CHEAT_VALUE),
|
MENU_LABEL(CHEAT_VALUE),
|
||||||
MENU_LABEL(CHEAT_ADDRESS),
|
MENU_LABEL(CHEAT_ADDRESS),
|
||||||
MENU_LABEL(CHEAT_ADDRESS_BIT_POSITION),
|
MENU_LABEL(CHEAT_ADDRESS_BIT_POSITION),
|
||||||
|
MENU_LABEL(CHEAT_REPEAT_COUNT),
|
||||||
|
MENU_LABEL(CHEAT_REPEAT_ADD_TO_VALUE),
|
||||||
|
MENU_LABEL(CHEAT_REPEAT_ADD_TO_ADDRESS),
|
||||||
MENU_LABEL(CHEAT_RUMBLE_TYPE),
|
MENU_LABEL(CHEAT_RUMBLE_TYPE),
|
||||||
MENU_LABEL(CHEAT_RUMBLE_VALUE),
|
MENU_LABEL(CHEAT_RUMBLE_VALUE),
|
||||||
MENU_LABEL(CHEAT_RUMBLE_PORT),
|
MENU_LABEL(CHEAT_RUMBLE_PORT),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user