TbBool parse_lenses_data_blocks(char *buf, long len, const char *config_textname, unsigned short flags) { long pos; int i,k,n; int cmd_num; char *fname; struct LensConfig *lenscfg; // Block name and parameter word store variables char block_buf[COMMAND_WORD_LEN]; char word_buf[COMMAND_WORD_LEN]; // Initialize the array int arr_size; if ((flags & CnfLd_AcceptPartial) == 0) { arr_size = sizeof(lenses_conf.lenses)/sizeof(lenses_conf.lenses[0]); for (i=0; i < arr_size; i++) { lenscfg = &lenses_conf.lenses[i]; LbMemorySet(lenscfg->code_name, 0, COMMAND_WORD_LEN); LbMemorySet(lenscfg->mist_file, 0, DISKPATH_SIZE); lenscfg->mist_lightness = 0; lenscfg->mist_ghost = 0; lenscfg->displace_kind = 0; lenscfg->displace_magnitude = 0; lenscfg->displace_period = 1; LbMemorySet(lenscfg->palette, 0, PALETTE_SIZE*sizeof(TbPixel)); lenscfg->flags = 0; if (i < lenses_conf.lenses_count) { lenses_desc[i].name = lenscfg->code_name; lenses_desc[i].num = i; } else { lenses_desc[i].name = NULL; lenses_desc[i].num = 0; } } } // Load the file arr_size = lenses_conf.lenses_count; for (i=0; i < arr_size; i++) { sprintf(block_buf,"lens%d",i); pos = 0; k = find_conf_block(buf,&pos,len,block_buf); if (k < 0) { if ((flags & CnfLd_AcceptPartial) == 0) { WARNMSG("Block [%s] not found in %s file.",block_buf,config_textname); return false; } continue; } lenscfg = &lenses_conf.lenses[i]; #define COMMAND_TEXT(cmd_num) get_conf_parameter_text(lenses_data_commands,cmd_num) while (pos<len) { // Finding command number in this line cmd_num = recognize_conf_command(buf,&pos,len,lenses_data_commands); // Now store the config item in correct place if (cmd_num == -3) break; // if next block starts if ((flags & CnfLd_ListOnly) != 0) { // In "List only" mode, accept only name command if (cmd_num > 1) { cmd_num = 0; } } n = 0; switch (cmd_num) { case 1: // NAME if (get_conf_parameter_single(buf,&pos,len,lenscfg->code_name,COMMAND_WORD_LEN) <= 0) { CONFWRNLOG("Couldn't read \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); break; } n++; break; case 2: // MIST if (get_conf_parameter_single(buf,&pos,len,lenscfg->mist_file,DISKPATH_SIZE) > 0) { n++; } if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if ((k >= 0) && (k < 64)) { lenscfg->mist_lightness = k; n++; } } if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if ((k >= 0) && (k < 256)) { lenscfg->mist_ghost = k; n++; } } if (n < 3) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } else { lenscfg->flags |= LCF_HasMist; } break; case 3: // DISPLACEMENT if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if ((k > 0) && (k < 256)) { lenscfg->displace_kind = k; n++; } } if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if ((k >= 0) && (k < 512)) { lenscfg->displace_magnitude = k; n++; } } if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if ((k > 0) && (k < 512)) { lenscfg->displace_period = k; n++; } } if (n < 3) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } else { lenscfg->flags |= LCF_HasDisplace; } break; case 4: // PALETTE if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { fname = prepare_file_path(FGrp_StdData,word_buf); if ( LbFileLoadAt(fname, lenscfg->palette) == PALETTE_SIZE) { n++; } } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } else { lenscfg->flags |= LCF_HasPalette; } break; case 0: // comment break; case -1: // end of buffer break; default: CONFWRNLOG("Unrecognized command (%d) in [%s] block of %s file.", cmd_num,block_buf,config_textname); break; } skip_conf_to_next_line(buf,&pos,len); } #undef COMMAND_TEXT } return true; }
TbBool parse_lenses_common_blocks(char *buf, long len, const char *config_textname, unsigned short flags) { long pos; int k,n; int cmd_num; // Block name and parameter word store variables char block_buf[COMMAND_WORD_LEN]; char word_buf[COMMAND_WORD_LEN]; // Initialize block data if ((flags & CnfLd_AcceptPartial) == 0) { lenses_conf.lenses_count = 1; } // Find the block sprintf(block_buf,"common"); pos = 0; k = find_conf_block(buf,&pos,len,block_buf); if (k < 0) { if ((flags & CnfLd_AcceptPartial) == 0) WARNMSG("Block [%s] not found in %s file.",block_buf,config_textname); return false; } #define COMMAND_TEXT(cmd_num) get_conf_parameter_text(lenses_common_commands,cmd_num) while (pos<len) { // Finding command number in this line cmd_num = recognize_conf_command(buf,&pos,len,lenses_common_commands); // Now store the config item in correct place if (cmd_num == -3) break; // if next block starts n = 0; switch (cmd_num) { case 1: // EYELENSESCOUNT if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if ((k > 0) && (k <= LENS_ITEMS_MAX)) { lenses_conf.lenses_count = k; n++; } } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 0: // comment break; case -1: // end of buffer break; default: CONFWRNLOG("Unrecognized command (%d) in [%s] block of %s file.", cmd_num,block_buf,config_textname); break; } skip_conf_to_next_line(buf,&pos,len); } #undef COMMAND_TEXT return true; }
TbBool parse_objects_object_blocks(char *buf, long len, const char *config_textname, unsigned short flags) { struct ObjectConfigStats *objst; struct Objects *objdat; long pos; int i,k,n; int cmd_num; // Block name and parameter word store variables char block_buf[COMMAND_WORD_LEN]; char word_buf[COMMAND_WORD_LEN]; // Initialize the objects array int arr_size; if ((flags & CnfLd_AcceptPartial) == 0) { arr_size = sizeof(object_conf.object_cfgstats)/sizeof(object_conf.object_cfgstats[0]); for (i=0; i < arr_size; i++) { objst = &object_conf.object_cfgstats[i]; LbMemorySet(objst->code_name, 0, COMMAND_WORD_LEN); objst->name_stridx = 201; objst->genre = 0; if (i < object_conf.object_types_count) { object_desc[i].name = objst->code_name; object_desc[i].num = i; } else { object_desc[i].name = NULL; object_desc[i].num = 0; } } } // Load the file arr_size = object_conf.object_types_count; for (i=0; i < arr_size; i++) { sprintf(block_buf,"object%d",i); pos = 0; k = find_conf_block(buf,&pos,len,block_buf); if (k < 0) { if ((flags & CnfLd_AcceptPartial) == 0) { WARNMSG("Block [%s] not found in %s file.",block_buf,config_textname); return false; } continue; } objst = &object_conf.object_cfgstats[i]; objdat = get_objects_data(i); #define COMMAND_TEXT(cmd_num) get_conf_parameter_text(objects_object_commands,cmd_num) while (pos<len) { // Finding command number in this line cmd_num = recognize_conf_command(buf,&pos,len,objects_object_commands); // Now store the config item in correct place if (cmd_num == -3) break; // if next block starts if ((flags & CnfLd_ListOnly) != 0) { // In "List only" mode, accept only name command if (cmd_num > 1) { cmd_num = 0; } } n = 0; switch (cmd_num) { case 1: // NAME if (get_conf_parameter_single(buf,&pos,len,objst->code_name,COMMAND_WORD_LEN) <= 0) { CONFWRNLOG("Couldn't read \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); break; } break; case 2: // GENRE if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { n = get_id(objects_genres_desc, word_buf); } if (n <= 0) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); break; } objst->genre = n; break; case 3: // RELATEDCREATURE if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { n = get_id(creature_desc, word_buf); } if (n < 0) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); break; } objdat->related_creatr_model = n; break; case 4: // PROPERTIES while (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = get_id(objects_properties_commands, word_buf); switch (k) { case 1: // EXISTS_ONLY_IN_ROOM objst->model_flags |= OMF_ExistsOnlyInRoom; n++; break; case 2: // DESTROYED_ON_ROOM_CLAIM objst->model_flags |= OMF_DestroyedOnRoomClaim; n++; break; case 3: // CHOWNED_ON_ROOM_CLAIM objst->model_flags |= OMF_ChOwnedOnRoomClaim; n++; break; case 4: // DESTROYED_ON_ROOM_PLACE objst->model_flags |= OMF_DestroyedOnRoomPlace; n++; break; default: CONFWRNLOG("Incorrect value of \"%s\" parameter \"%s\" in [%s] block of %s file.", COMMAND_TEXT(cmd_num),word_buf,block_buf,config_textname); break; } } break; case 0: // comment break; case -1: // end of buffer break; default: CONFWRNLOG("Unrecognized command (%d) in [%s] block of %s file.", cmd_num,block_buf,config_textname); break; } skip_conf_to_next_line(buf,&pos,len); } #undef COMMAND_TEXT } return true; }
TbBool parse_trapdoor_door_blocks(char *buf, long len, const char *config_textname, unsigned short flags) { struct ManfctrConfig *mconf; struct DoorConfigStats *doorst; long pos; int i,k,n; int cmd_num; // Block name and parameter word store variables char block_buf[COMMAND_WORD_LEN]; char word_buf[COMMAND_WORD_LEN]; SYNCDBG(19,"Starting"); // Initialize the doors array int arr_size; if ((flags & CnfLd_AcceptPartial) == 0) { arr_size = sizeof(trapdoor_conf.door_cfgstats)/sizeof(trapdoor_conf.door_cfgstats[0]); for (i=0; i < arr_size; i++) { doorst = &trapdoor_conf.door_cfgstats[i]; LbMemorySet(doorst->code_name, 0, COMMAND_WORD_LEN); doorst->name_stridx = GUIStr_Empty; doorst->tooltip_stridx = GUIStr_Empty; doorst->bigsym_sprite_idx = 0; doorst->medsym_sprite_idx = 0; doorst->pointer_sprite_idx = 0; doorst->panel_tab_idx = 0; if (i < trapdoor_conf.door_types_count) { door_desc[i].name = doorst->code_name; door_desc[i].num = i; } else { door_desc[i].name = NULL; door_desc[i].num = 0; } } } // Parse every numbered block within range arr_size = trapdoor_conf.door_types_count; for (i=0; i < arr_size; i++) { sprintf(block_buf,"door%d",i); pos = 0; k = find_conf_block(buf,&pos,len,block_buf); if (k < 0) { if ((flags & CnfLd_AcceptPartial) == 0) { WARNMSG("Block [%s] not found in %s file.",block_buf,config_textname); return false; } continue; } mconf = &game.doors_config[i]; doorst = &trapdoor_conf.door_cfgstats[i]; #define COMMAND_TEXT(cmd_num) get_conf_parameter_text(trapdoor_door_commands,cmd_num) while (pos<len) { // Finding command number in this line cmd_num = recognize_conf_command(buf,&pos,len,trapdoor_door_commands); // Now store the config item in correct place if (cmd_num == -3) break; // if next block starts if ((flags & CnfLd_ListOnly) != 0) { // In "List only" mode, accept only name command if (cmd_num > 1) { cmd_num = 0; } } n = 0; switch (cmd_num) { case 1: // NAME if (get_conf_parameter_single(buf,&pos,len,doorst->code_name,COMMAND_WORD_LEN) <= 0) { CONFWRNLOG("Couldn't read \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); break; } break; case 2: // MANUFACTURELEVEL if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); mconf->manufct_level = k; n++; } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 3: // MANUFACTUREREQUIRED if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); mconf->manufct_required = k; n++; } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 5: // HEALTH if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); door_stats[i][0].health = k; door_stats[i][1].health = k; n++; } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 6: // SELLINGVALUE if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); mconf->selling_value = k; n++; } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 7: // NAMETEXTID if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k > 0) { doorst->name_stridx = k; n++; } } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 8: // TOOLTIPTEXTID if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k > 0) { doorst->tooltip_stridx = k; n++; } } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 9: // CRATE if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { n = get_id(object_desc, word_buf); } if (n < 0) { CONFWRNLOG("Incorrect crate object \"%s\" in [%s] block of %s file.", word_buf,block_buf,config_textname); break; } object_conf.object_to_door_or_trap[n] = i; object_conf.workshop_object_class[n] = TCls_Door; trapdoor_conf.door_to_object[i] = n; break; case 10: // SYMBOLSPRITES if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k >= 0) { doorst->bigsym_sprite_idx = k; n++; } } if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k >= 0) { doorst->medsym_sprite_idx = k; n++; } } if (n < 2) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 11: // POINTERSPRITES if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k >= 0) { doorst->pointer_sprite_idx = k; n++; } } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 12: // PANELTABINDEX if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k >= 0) { doorst->panel_tab_idx = k; n++; } } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 0: // comment break; case -1: // end of buffer break; default: CONFWRNLOG("Unrecognized command (%d) in [%s] block of %s file.", cmd_num,block_buf,config_textname); break; } skip_conf_to_next_line(buf,&pos,len); } #undef COMMAND_TEXT } return true; }
/** * Analyzes given LOF file buffer. The buffer must be null-terminated. */ TbBool level_lof_file_parse(char *fname, char *buf, long len) { struct LevelInformation *lvinfo; long pos; char word_buf[32]; long lvnum; int cmd_num; int k,n; SYNCDBG(8,"Starting for \"%s\"",fname); if (buf == NULL) return false; lvnum = get_level_number_from_file_name(fname); if (lvnum < 1) { WARNLOG("Incorrect .LOF file name \"%s\", skipped.",fname); return false; } lvinfo = get_or_create_level_info(lvnum, LvOp_None); if (lvinfo == NULL) { WARNMSG("Can't get LevelInformation item to store level %ld data from LOF file.",lvnum); return 0; } lvinfo->location = LvLc_Custom; pos = 0; #define COMMAND_TEXT(cmd_num) get_conf_parameter_text(cmpgn_map_commands,cmd_num) while (pos<len) { // Finding command number in this line cmd_num = recognize_conf_command(buf,&pos,len,cmpgn_map_commands); // Now store the config item in correct place if (cmd_num == -3) break; // if next block starts n = 0; switch (cmd_num) { case 1: // NAME_TEXT if (get_conf_parameter_whole(buf,&pos,len,lvinfo->name,LINEMSG_SIZE) <= 0) { WARNMSG("Couldn't read \"%s\" parameter in LOF file '%s'.", COMMAND_TEXT(cmd_num),fname); break; } break; case 2: // NAME_ID if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k > 0) { lvinfo->name_stridx = k; n++; } } if (n < 1) { WARNMSG("Couldn't recognize \"%s\" number in LOF file '%s'.", COMMAND_TEXT(cmd_num),fname); } break; case 3: // ENSIGN_POS if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k > 0) { lvinfo->ensign_x = k; n++; } } if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k > 0) { lvinfo->ensign_y = k; n++; } } if (n < 2) { WARNMSG("Couldn't recognize \"%s\" coordinates in LOF file '%s'.", COMMAND_TEXT(cmd_num),fname); } break; case 4: // ENSIGN_ZOOM if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k > 0) { lvinfo->ensign_zoom_x = k; n++; } } if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k > 0) { lvinfo->ensign_zoom_y = k; n++; } } if (n < 2) { WARNMSG("Couldn't recognize \"%s\" coordinates in LOF file '%s'.", COMMAND_TEXT(cmd_num),fname); } break; case 5: // PLAYERS if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (k > 0) { lvinfo->players = k; n++; } } if (n < 1) { WARNMSG("Couldn't recognize \"%s\" number in LOF file '%s'.", COMMAND_TEXT(cmd_num),fname); } break; case 6: // OPTIONS while ((k = recognize_conf_parameter(buf,&pos,len,cmpgn_map_cmnds_options)) > 0) { switch (k) { case LvOp_Tutorial: lvinfo->options |= k; break; } n++; } break; case 7: // SPEECH if (get_conf_parameter_single(buf,&pos,len,lvinfo->speech_before,DISKPATH_SIZE) > 0) { n++; } if (get_conf_parameter_single(buf,&pos,len,lvinfo->speech_after,DISKPATH_SIZE) > 0) { n++; } if (n < 2) { WARNMSG("Couldn't recognize \"%s\" file names in LOF file '%s'.", COMMAND_TEXT(cmd_num),fname); } break; case 8: // LAND_VIEW if (get_conf_parameter_single(buf,&pos,len,lvinfo->land_view,DISKPATH_SIZE) > 0) { n++; } if (get_conf_parameter_single(buf,&pos,len,lvinfo->land_window,DISKPATH_SIZE) > 0) { n++; } if (n < 2) { WARNMSG("Couldn't recognize \"%s\" file names in LOF file '%s'.", COMMAND_TEXT(cmd_num),fname); } break; case 9: // KIND while ((k = recognize_conf_parameter(buf,&pos,len,cmpgn_map_cmnds_kind)) > 0) { switch (k) { case LvOp_IsSingle: if ((lvinfo->options & LvOp_IsSingle) == 0) { if (add_single_level_to_campaign(&campaign,lvinfo->lvnum) >= 0) n++; lvinfo->options |= LvOp_IsSingle; } else n++; break; case LvOp_IsMulti: if ((lvinfo->options & LvOp_IsMulti) == 0) { if (add_multi_level_to_campaign(&campaign,lvinfo->lvnum) >= 0) n++; lvinfo->options |= LvOp_IsMulti; } else n++; break; case LvOp_IsBonus: if ((lvinfo->options & LvOp_IsBonus) == 0) { if (add_bonus_level_to_campaign(&campaign,lvinfo->lvnum) >= 0) n++; lvinfo->options |= LvOp_IsBonus; } else n++; break; case LvOp_IsExtra: if ((lvinfo->options & LvOp_IsExtra) == 0) { if (add_extra_level_to_campaign(&campaign,lvinfo->lvnum) >= 0) n++; lvinfo->options |= LvOp_IsExtra; } else n++; break; case LvOp_IsFree: if ((lvinfo->options & LvOp_IsFree) == 0) { if (add_freeplay_level_to_campaign(&campaign,lvinfo->lvnum) >= 0) n++; lvinfo->options |= LvOp_IsFree; } else n++; break; } if (n < 1) { WARNMSG("Level %ld defined in '%s' wasn't added to any list; " "kind is wrong or there's no space.",(long)lvinfo->lvnum,fname); } } break; case 10: // AUTHOR case 11: // DESCRIPTION case 12: // DATE // As for now, ignore these break; case 0: // comment break; case -1: // end of buffer break; default: WARNMSG("Unrecognized command (%d) in LOF file '%s', starting on byte %d.",cmd_num,fname,pos); break; } skip_conf_to_next_line(buf,&pos,len); } SYNCDBG(18,"Level %ld ensign (%d,%d) zoom (%d,%d)",(long)lvinfo->lvnum,(int)lvinfo->ensign_x,(int)lvinfo->ensign_y,(int)lvinfo->ensign_zoom_x,(int)lvinfo->ensign_zoom_y); #undef COMMAND_TEXT return true; }
TbBool parse_effects_effect_blocks(char *buf, long len, const char *config_textname, unsigned short flags) { struct EffectConfigStats *effcst; long pos; int i,k,n; int cmd_num; // Block name and parameter word store variables char block_buf[COMMAND_WORD_LEN]; char word_buf[COMMAND_WORD_LEN]; SYNCDBG(19,"Starting"); // Initialize the effects array int arr_size; if ((flags & CnfLd_AcceptPartial) == 0) { arr_size = sizeof(effects_conf.effect_cfgstats)/sizeof(effects_conf.effect_cfgstats[0]); for (i=0; i < arr_size; i++) { effcst = &effects_conf.effect_cfgstats[i]; LbMemorySet(effcst->code_name, 0, COMMAND_WORD_LEN); if (i < 69) effcst->old = &effect_info[i]; else effcst->old = &effect_info[0]; if (i < effects_conf.effect_types_count) { effect_desc[i].name = effcst->code_name; effect_desc[i].num = i; } else { effect_desc[i].name = NULL; effect_desc[i].num = 0; } } } // Parse every numbered block within range arr_size = effects_conf.effect_types_count; for (i=0; i < arr_size; i++) { sprintf(block_buf,"effect%d",i); SYNCDBG(19,"Block [%s]",block_buf); pos = 0; k = find_conf_block(buf,&pos,len,block_buf); if (k < 0) { if ((flags & CnfLd_AcceptPartial) == 0) { WARNMSG("Block [%s] not found in %s file.",block_buf,config_textname); return false; } continue; } effcst = &effects_conf.effect_cfgstats[i]; #define COMMAND_TEXT(cmd_num) get_conf_parameter_text(effects_effect_commands,cmd_num) while (pos<len) { // Finding command number in this line cmd_num = recognize_conf_command(buf,&pos,len,effects_effect_commands); SYNCDBG(19,"Command %s",COMMAND_TEXT(cmd_num)); // Now store the config item in correct place if (cmd_num == -3) break; // if next block starts if ((flags & CnfLd_ListOnly) != 0) { // In "List only" mode, accept only name command if (cmd_num > 1) { cmd_num = 0; } } n = 0; switch (cmd_num) { case 1: // NAME if (get_conf_parameter_single(buf,&pos,len,effcst->code_name,COMMAND_WORD_LEN) <= 0) { CONFWRNLOG("Couldn't read \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); break; } break; case 2: // HEALTH if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); effcst->old->start_health = k; n++; } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 3: // GENERATIONTYPE if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); effcst->old->generation_type = k; n++; } if (n < 1) { CONFWRNLOG("Incorrect value of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 4: // GENERATIONACCELXYRANGE if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); effcst->old->accel_xy_min = k; n++; } if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); effcst->old->accel_xy_max = k; n++; } if (n < 2) { CONFWRNLOG("Couldn't read all values of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 5: // GENERATIONACCELZRANGE if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); effcst->old->accel_z_min = k; n++; } if (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); effcst->old->accel_z_max = k; n++; } if (n < 2) { CONFWRNLOG("Couldn't read all values of \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 6: // GENERATIONKINDRANGE //TODO CONFIG Add effect parameter reading break; case 7: // AREAAFFECTTYPE //TODO CONFIG Add effect parameter reading break; case 0: // comment break; case -1: // end of buffer break; default: CONFWRNLOG("Unrecognized command (%d) in [%s] block of %s file.", cmd_num,block_buf,config_textname); break; } skip_conf_to_next_line(buf,&pos,len); //write_effects_effect_to_log(effcst, i); } #undef COMMAND_TEXT } return true; }
TbBool parse_cubes_cube_blocks(char *buf, long len, const char *config_textname, unsigned short flags) { struct CubeConfigStats *objst; struct CubeAttribs * cubed; long pos; int i,k,n; int cmd_num; // Block name and parameter word store variables char block_buf[COMMAND_WORD_LEN]; char word_buf[COMMAND_WORD_LEN]; // Initialize the cubes array int arr_size; if ((flags & CnfLd_AcceptPartial) == 0) { arr_size = sizeof(cube_conf.cube_cfgstats)/sizeof(cube_conf.cube_cfgstats[0]); for (i=0; i < arr_size; i++) { objst = &cube_conf.cube_cfgstats[i]; LbMemorySet(objst->code_name, 0, COMMAND_WORD_LEN); if (i < cube_conf.cube_types_count) { cube_desc[i].name = objst->code_name; cube_desc[i].num = i; } else { cube_desc[i].name = NULL; cube_desc[i].num = 0; } } } // Load the file arr_size = cube_conf.cube_types_count; for (i=0; i < arr_size; i++) { sprintf(block_buf,"cube%d",i); pos = 0; k = find_conf_block(buf,&pos,len,block_buf); if (k < 0) { if ((flags & CnfLd_AcceptPartial) == 0) { WARNMSG("Block [%s] not found in %s file.",block_buf,config_textname); return false; } continue; } objst = &cube_conf.cube_cfgstats[i]; cubed = &game.cubes_data[i]; #define COMMAND_TEXT(cmd_num) get_conf_parameter_text(cubes_cube_commands,cmd_num) while (pos<len) { // Finding command number in this line cmd_num = recognize_conf_command(buf,&pos,len,cubes_cube_commands); // Now store the config item in correct place if (cmd_num == -3) break; // if next block starts if ((flags & CnfLd_ListOnly) != 0) { // In "List only" mode, accept only name command if (cmd_num > 1) { cmd_num = 0; } } n = 0; switch (cmd_num) { case 1: // NAME if (get_conf_parameter_single(buf,&pos,len,objst->code_name,COMMAND_WORD_LEN) <= 0) { CONFWRNLOG("Couldn't read \"%s\" parameter in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); break; } break; case 2: // TEXTURES while (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (n >= CUBE_TEXTURES) { CONFWRNLOG("Too many \"%s\" parameters in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); break; } cubed->texture_id[n] = k; n++; } if (n < CUBE_TEXTURES) { CONFWRNLOG("Couldn't read all \"%s\" parameters in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 3: // FLAGS while (get_conf_parameter_single(buf,&pos,len,word_buf,sizeof(word_buf)) > 0) { k = atoi(word_buf); if (n >= CUBE_TEXTURES) { CONFWRNLOG("Too many \"%s\" parameters in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); break; } cubed->field_C[n] = k; n++; } if (n < CUBE_TEXTURES) { CONFWRNLOG("Couldn't read all \"%s\" parameters in [%s] block of %s file.", COMMAND_TEXT(cmd_num),block_buf,config_textname); } break; case 0: // comment break; case -1: // end of buffer break; default: CONFWRNLOG("Unrecognized command (%d) in [%s] block of %s file.", cmd_num,block_buf,config_textname); break; } skip_conf_to_next_line(buf,&pos,len); } #undef COMMAND_TEXT } return true; }