X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=5fb6ecfcea7127a345d3d0024a95519923d0d1ef;hb=fd72fbf3b83fc7215347e131aa6fc3c87ad7b4d5;hp=db49f46739e511710e53df7e1ea85059e5cf6f68;hpb=6267de26119fba6395dd7259154f5b9177dab84c;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index db49f467..5fb6ecfc 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; } @@ -1713,12 +1713,26 @@ static boolean adjustTreeArtworkForEMC(char **artwork_set_1, char **artwork_set_2, char **artwork_set, boolean prefer_2) { + // do nothing if neither special artwork set 1 nor 2 are defined + if (!*artwork_set_1 && !*artwork_set_2) + return FALSE; + boolean want_1 = (prefer_2 == FALSE); boolean want_2 = (prefer_2 == TRUE); boolean has_only_1 = (!*artwork_set && !*artwork_set_2); boolean has_only_2 = (!*artwork_set && !*artwork_set_1); char *artwork_set_new = NULL; + // replace missing special artwork 1 or 2 with (optional) standard artwork + + if (!*artwork_set_1) + setString(artwork_set_1, *artwork_set); + + if (!*artwork_set_2) + setString(artwork_set_2, *artwork_set); + + // set standard artwork to either special artwork 1 or 2, as requested + if (*artwork_set_1 && (want_1 || has_only_1)) artwork_set_new = *artwork_set_1; @@ -2267,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 @@ -2297,7 +2311,7 @@ unsigned int get_hash_from_key(void *key) return hash; } -int hash_keys_are_equal(void *key1, void *key2) +int hash_key_strings_are_equal(void *key1, void *key2) { return (strEqual((char *)key1, (char *)key2)); } @@ -2305,7 +2319,7 @@ int hash_keys_are_equal(void *key1, void *key2) SetupFileHash *newSetupFileHash(void) { SetupFileHash *new_hash = - create_hashtable(16, 0.75, get_hash_from_key, hash_keys_are_equal); + create_hashtable(16, 0.75, get_hash_from_string, hash_key_strings_are_equal); if (new_hash == NULL) Fail("create_hashtable() failed -- out of memory"); @@ -4580,6 +4594,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;