X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=7a70610eda39e90583ff2840afe54990699eacd3;hb=30f635b58c076871cee2630ce15ffd7019764b2e;hp=bd1666398cde9cd10e8a874aa4cf7b08a72e5167;hpb=5500133caf57ac0d86b85c53b5fe38c466d65447;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index bd166639..7a70610e 100644 --- a/src/init.c +++ b/src/init.c @@ -39,7 +39,7 @@ #define CONFIG_TOKEN_GLOBAL_BUSY "global.busy" #define DEBUG_PRINT_INIT_TIMESTAMPS TRUE -#define DEBUG_PRINT_INIT_TIMESTAMPS_DEPTH 5 +#define DEBUG_PRINT_INIT_TIMESTAMPS_DEPTH 3 static struct FontBitmapInfo font_initial[NUM_INITIAL_FONTS]; @@ -97,7 +97,7 @@ static void print_init_timestamp(char *message) static int counter_nr = 0; int max_depth = DEBUG_PRINT_INIT_TIMESTAMPS_DEPTH; - if (strEqualPrefix(message, "INIT")) + if (strPrefix(message, "INIT")) { if (counter_nr + 1 < max_depth) { @@ -109,19 +109,20 @@ static void print_init_timestamp(char *message) debug_print_timestamp(counter_nr, NULL); } - else if (strEqualPrefix(message, "DONE")) + else if (strPrefix(message, "DONE")) { counter_nr--; - if (counter_nr + 1 < max_depth) + if (counter_nr + 1 < max_depth || + (counter_nr == 0 && max_depth == 1)) { last_message = &message[4]; debug_print_timestamp(counter_nr, message); } } - else if (!strEqualPrefix(message, "TIME") || - !strEqualSuffix(message, last_message)) + else if (!strPrefix(message, "TIME") || + !strSuffix(message, last_message)) { if (counter_nr < max_depth) debug_print_timestamp(counter_nr, message); @@ -306,12 +307,19 @@ static int getFontBitmapID(int font_nr) static int getFontFromToken(char *token) { +#if 1 + char *value = getHashEntry(font_token_hash, token); + + if (value != NULL) + return atoi(value); +#else int i; /* !!! OPTIMIZE THIS BY USING HASH !!! */ for (i = 0; i < NUM_FONTS; i++) if (strEqual(token, font_info[i].token_name)) return i; +#endif /* if font not found, use reliable default value */ return FONT_INITIAL_1; @@ -1132,15 +1140,31 @@ void InitElementSpecialGraphicInfo() static int get_graphic_parameter_value(char *value_raw, char *suffix, int type) { - int i; - int x = 0; - - if (type != TYPE_TOKEN) + if (type != TYPE_ELEMENT && type != TYPE_GRAPHIC) return get_parameter_value(value_raw, suffix, type); if (strEqual(value_raw, ARG_UNDEFINED)) return ARG_UNDEFINED_VALUE; +#if 1 + if (type == TYPE_ELEMENT) + { + char *value = getHashEntry(element_token_hash, value_raw); + + return (value != NULL ? atoi(value) : EL_UNDEFINED); + } + else if (type == TYPE_GRAPHIC) + { + char *value = getHashEntry(graphic_token_hash, value_raw); + + return (value != NULL ? atoi(value) : IMG_UNDEFINED); + } + +#else + + int i; + int x = 0; + /* !!! THIS IS BUGGY !!! NOT SURE IF YOU GET ELEMENT ID OR GRAPHIC ID !!! */ /* !!! (possible reason why ".clone_from" with elements doesn't work) !!! */ @@ -1164,6 +1188,7 @@ static int get_graphic_parameter_value(char *value_raw, char *suffix, int type) x++; } +#endif return -1; } @@ -4798,6 +4823,7 @@ void InitElementPropertiesAfterLoading(int engine_version) static void InitGlobal() { + int graphic; int i; for (i = 0; i < MAX_NUM_ELEMENTS + 1; i++) @@ -4815,6 +4841,37 @@ static void InitGlobal() #endif } + /* create hash from image config list */ + image_config_hash = newSetupFileHash(); + for (i = 0; image_config[i].token != NULL; i++) + setHashEntry(image_config_hash, + image_config[i].token, + image_config[i].value); + + /* create hash from element token list */ + element_token_hash = newSetupFileHash(); + for (i = 0; element_name_info[i].token_name != NULL; i++) + setHashEntry(element_token_hash, + element_name_info[i].token_name, + int2str(i, 0)); + + /* create hash from graphic token list */ + graphic_token_hash = newSetupFileHash(); + for (graphic = 0, i = 0; image_config[i].token != NULL; i++) + if (strSuffix(image_config[i].value, ".pcx") || + strSuffix(image_config[i].value, ".wav") || + strEqual(image_config[i].value, UNDEFINED_FILENAME)) + setHashEntry(graphic_token_hash, + image_config[i].token, + int2str(graphic++, 0)); + + /* create hash from font token list */ + font_token_hash = newSetupFileHash(); + for (i = 0; font_info[i].token_name != NULL; i++) + setHashEntry(font_token_hash, + font_info[i].token_name, + int2str(i, 0)); + /* always start with reliable default values (all elements) */ for (i = 0; i < MAX_NUM_ELEMENTS; i++) ActiveElement[i] = i;