X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=a9a62d4e44df0968e1c998a44083949769840471;hb=c128739405acf7f7fc4414cb68803e9b966ade69;hp=493fc74e53283bc6dacc901bc5e6e7ec783c4e5d;hpb=26111e8a6e3efa228a897f120f45776ad60f2d48;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 493fc74e..a9a62d4e 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -725,7 +725,7 @@ char *getScoreTapeBasename(char *name) sprintf(timestamp, "%s", getCurrentTimestamp()); sprintf(basename_raw, "%s-%s", timestamp, name); - sprintf(basename, "%s-%08x", timestamp, get_hash_from_key(basename_raw)); + sprintf(basename, "%s-%08x", timestamp, get_hash_from_string(basename_raw)); return basename; } @@ -2281,7 +2281,7 @@ DEFINE_HASHTABLE_REMOVE(remove_hash_entry, char, char); #define remove_hash_entry hashtable_remove #endif -unsigned int get_hash_from_key(void *key) +unsigned int get_hash_from_string(void *key) { /* djb2 @@ -2311,15 +2311,27 @@ unsigned int get_hash_from_key(void *key) return hash; } -int hash_keys_are_equal(void *key1, void *key2) +unsigned int get_hash_from_integer(void *key) +{ + unsigned int hash = PTR_TO_UINT(key); + + return hash; +} + +int hash_key_strings_are_equal(void *key1, void *key2) { return (strEqual((char *)key1, (char *)key2)); } +int hash_key_integers_are_equal(void *key1, void *key2) +{ + return (key1 == key2); +} + SetupFileHash *newSetupFileHash(void) { SetupFileHash *new_hash = - create_hashtable(16, 0.75, get_hash_from_key, hash_keys_are_equal); + create_hashtable(get_hash_from_string, hash_key_strings_are_equal, free, free); if (new_hash == NULL) Fail("create_hashtable() failed -- out of memory"); @@ -2332,7 +2344,7 @@ void freeSetupFileHash(SetupFileHash *hash) if (hash == NULL) return; - hashtable_destroy(hash, 1); // 1 == also free values stored in hash + hashtable_destroy(hash); } char *getHashEntry(SetupFileHash *hash, char *token) @@ -2358,12 +2370,12 @@ void setHashEntry(SetupFileHash *hash, char *token, char *value) Fail("cannot insert into hash -- aborting"); } -char *removeHashEntry(SetupFileHash *hash, char *token) +void removeHashEntry(SetupFileHash *hash, char *token) { if (hash == NULL) - return NULL; + return; - return remove_hash_entry(hash, token); + remove_hash_entry(hash, token); } #if ENABLE_UNUSED_CODE @@ -2819,10 +2831,11 @@ SetupFileHash *loadSetupFileHash(char *filename) #define LEVELINFO_TOKEN_HANDICAP 29 #define LEVELINFO_TOKEN_TIME_LIMIT 30 #define LEVELINFO_TOKEN_SKIP_LEVELS 31 -#define LEVELINFO_TOKEN_USE_EMC_TILES 32 -#define LEVELINFO_TOKEN_INFO_SCREENS_FROM_MAIN 33 +#define LEVELINFO_TOKEN_ALLOW_SKIPPING_LEVELS 32 +#define LEVELINFO_TOKEN_USE_EMC_TILES 33 +#define LEVELINFO_TOKEN_INFO_SCREENS_FROM_MAIN 34 -#define NUM_LEVELINFO_TOKENS 34 +#define NUM_LEVELINFO_TOKENS 35 static LevelDirTree ldi; @@ -2846,6 +2859,8 @@ static struct TokenInfo levelinfo_tokens[] = { TYPE_BOOLEAN, &ldi.latest_engine, "latest_engine" }, { TYPE_BOOLEAN, &ldi.level_group, "level_group" }, { TYPE_BOOLEAN, &ldi.readonly, "readonly" }, + { TYPE_STRING, &ldi.graphics_set_ecs, "graphics_set.old" }, + { TYPE_STRING, &ldi.graphics_set_aga, "graphics_set.new" }, { TYPE_STRING, &ldi.graphics_set_ecs, "graphics_set.ecs" }, { TYPE_STRING, &ldi.graphics_set_aga, "graphics_set.aga" }, { TYPE_STRING, &ldi.graphics_set, "graphics_set" }, @@ -3218,7 +3233,7 @@ void setSetupInfo(struct TokenInfo *token_info, *(boolean *)setup_value = get_boolean_from_string(token_value); break; - case TYPE_SWITCH3: + case TYPE_SWITCH_3_STATES: *(int *)setup_value = get_switch3_from_string(token_value); break; @@ -4594,6 +4609,12 @@ static boolean AddTreeSetToTreeInfoExt(TreeInfo *tree_node_old, char *tree_dir, TreeInfo *tree_node_new = getTreeInfoFromIdentifier(*tree_node_first, tree_subdir_new); + // if not found, check if added node is level group or artwork group + if (tree_node_new == NULL) + tree_node_new = getTreeInfoFromIdentifierExt(*tree_node_first, + tree_subdir_new, + TREE_NODE_TYPE_GROUP); + if (tree_node_new == NULL) // should not happen return FALSE; @@ -4841,9 +4862,10 @@ char *getSetupValue(int type, void *value) strcpy(value_string, (*(boolean *)value ? "on" : "off")); break; - case TYPE_SWITCH3: - strcpy(value_string, (*(int *)value == AUTO ? "auto" : - *(int *)value == FALSE ? "off" : "on")); + case TYPE_SWITCH_3_STATES: + strcpy(value_string, (*(int *)value == MODE_AUTO ? "auto" : + *(int *)value == MODE_ASK ? "ask" : + *(int *)value == MODE_FALSE ? "off" : "on")); break; case TYPE_YES_NO: @@ -4851,8 +4873,13 @@ char *getSetupValue(int type, void *value) break; case TYPE_YES_NO_AUTO: - strcpy(value_string, (*(int *)value == AUTO ? "auto" : - *(int *)value == FALSE ? "no" : "yes")); + strcpy(value_string, (*(int *)value == MODE_AUTO ? "auto" : + *(int *)value == MODE_FALSE ? "no" : "yes")); + break; + + case TYPE_YES_NO_ASK: + strcpy(value_string, (*(int *)value == MODE_ASK ? "ask" : + *(int *)value == MODE_FALSE ? "no" : "yes")); break; case TYPE_ECS_AGA: