X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=0a406540224696e012e1243fe9944407a62a4863;hb=refs%2Fheads%2Fmaster-next-major-release;hp=5a98416663902600a602bde8e92863a1b278b8ed;hpb=a3ac352389ad4a27a69cf0413eaabccc9eeedd9e;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 5a984166..fb63321b 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -797,26 +797,68 @@ char *getEditorSetupFilename(void) return filename; } -char *getHelpAnimFilename(void) +char *getFilenameFromCurrentLevelDirUpward(char *basename) { + // global variable "leveldir_current" must be modified in the loop below + LevelDirTree *leveldir_current_last = leveldir_current; static char *filename = NULL; - checked_free(filename); + // check for filename in path from current to topmost tree node + + while (leveldir_current != NULL) + { + checked_free(filename); + + filename = getPath2(getCurrentLevelDir(), basename); + + if (fileExists(filename)) + break; + + leveldir_current = leveldir_current->node_parent; + } - filename = getPath2(getCurrentLevelDir(), HELPANIM_FILENAME); + // restore global variable "leveldir_current" modified in above loop + leveldir_current = leveldir_current_last; return filename; } -char *getHelpTextFilename(void) +static char *getHelpFilename(char *basename) { static char *filename = NULL; checked_free(filename); - filename = getPath2(getCurrentLevelDir(), HELPTEXT_FILENAME); + // 1st try: look for help filename in current level set directory + filename = getPath2(getCurrentLevelDir(), basename); + if (fileExists(filename)) + return filename; - return filename; + free(filename); + + // 2nd try: look for help filename in configured graphics set directory + filename = getPath2(getLevelArtworkDir(ARTWORK_TYPE_GRAPHICS), basename); + if (fileExists(filename)) + return filename; + + free(filename); + + // 3rd try: look for help filename in path from current to topmost level set directory + filename = getStringCopy(getFilenameFromCurrentLevelDirUpward(basename)); + if (fileExists(filename)) + return filename; + + return NULL; +} + +char *getHelpAnimFilename(void) +{ + return getHelpFilename(HELPANIM_FILENAME); +} + +char *getHelpTextFilename(void) +{ + return getHelpFilename(HELPTEXT_FILENAME); } static char *getLevelSetInfoBasename(int nr) @@ -3234,7 +3276,7 @@ void setSetupInfo(struct TokenInfo *token_info, break; case TYPE_SWITCH_3_STATES: - *(int *)setup_value = get_switch3_from_string(token_value); + *(int *)setup_value = get_switch_3_state_from_string(token_value); break; case TYPE_KEY: @@ -4863,9 +4905,9 @@ char *getSetupValue(int type, void *value) break; case TYPE_SWITCH_3_STATES: - strcpy(value_string, (*(int *)value == MODE_AUTO ? "auto" : - *(int *)value == MODE_ASK ? "ask" : - *(int *)value == FALSE ? "off" : "on")); + strcpy(value_string, (*(int *)value == STATE_AUTO ? "auto" : + *(int *)value == STATE_ASK ? "ask" : + *(int *)value == STATE_FALSE ? "off" : "on")); break; case TYPE_YES_NO: @@ -4873,17 +4915,17 @@ char *getSetupValue(int type, void *value) break; case TYPE_YES_NO_AUTO: - strcpy(value_string, (*(int *)value == MODE_AUTO ? "auto" : - *(int *)value == FALSE ? "no" : "yes")); + strcpy(value_string, (*(int *)value == STATE_AUTO ? "auto" : + *(int *)value == STATE_FALSE ? "no" : "yes")); break; case TYPE_YES_NO_ASK: - strcpy(value_string, (*(int *)value == MODE_ASK ? "ask" : - *(int *)value == FALSE ? "no" : "yes")); + strcpy(value_string, (*(int *)value == STATE_ASK ? "ask" : + *(int *)value == STATE_FALSE ? "no" : "yes")); break; case TYPE_ECS_AGA: - strcpy(value_string, (*(boolean *)value ? "AGA" : "ECS")); + strcpy(value_string, (*(boolean *)value ? "new" : "old")); break; case TYPE_KEY: