| 389 | //--------------------------------------------------------------------------- |
| 390 | |
| 391 | void LoadCustomInfoFromScript(const char *filename) |
| 392 | { |
| 393 | FScanner sc; |
| 394 | |
| 395 | int lump = fileSystem.FindFile(filename); |
| 396 | if (lump < 0) return; |
| 397 | |
| 398 | sc.OpenLumpNum(lump); |
| 399 | sc.SetNoOctals(true); |
| 400 | sc.SetCMode(true); |
| 401 | sc.SetNoFatalErrors(true); |
| 402 | |
| 403 | // predefine constants for some stuff to give convenience and eliminate the need for a 'define' directive |
| 404 | sc.AddSymbol("INV_ARMOR", 1+InvDecl_Armor); |
| 405 | sc.AddSymbol("INV_KEVLAR", 1+InvDecl_Kevlar); |
| 406 | sc.AddSymbol("INV_SM_MEDKIT", 1+InvDecl_SmMedkit); |
| 407 | sc.AddSymbol("INV_FORTUNE", 1+InvDecl_Booster); |
| 408 | sc.AddSymbol("INV_MEDKIT", 1+InvDecl_Medkit); |
| 409 | sc.AddSymbol("INV_GAS_BOMB", 1+InvDecl_ChemBomb); |
| 410 | sc.AddSymbol("INV_FLASH_BOMB", 1+InvDecl_FlashBomb); |
| 411 | sc.AddSymbol("INV_CALTROPS", 1+InvDecl_Caltrops); |
| 412 | sc.AddSymbol("INV_NIGHT_VIS", 1+InvDecl_NightVision); |
| 413 | sc.AddSymbol("INV_REPAIR_KIT", 1+InvDecl_RepairKit); |
| 414 | sc.AddSymbol("INV_SMOKE_BOMB", 1+InvDecl_Cloak); |
| 415 | |
| 416 | { |
| 417 | unsigned i; |
| 418 | for (i=0; i<SIZ(weaponmap); i++) |
| 419 | sc.AddSymbol(weaponmap[i].sym, 1+i); |
| 420 | } |
| 421 | |
| 422 | MapRecord* curMap = nullptr; |
| 423 | while (sc.GetString()) |
| 424 | { |
| 425 | switch (cm_transtok(sc.String, cm_tokens, cm_numtokens)) |
| 426 | { |
| 427 | case CM_MAP: |
| 428 | { |
| 429 | sc.MustGetNumber(true); |
| 430 | int mapno = sc.ParseError? -1 : sc.Number; |
| 431 | curMap = FindMapByLevelNum(mapno); |
| 432 | if (!curMap) |
| 433 | { |
| 434 | curMap = AllocateMap(); |
| 435 | curMap->levelNumber = mapno; |
| 436 | curMap->cluster = mapno < 5 ? 1 : 2; |
| 437 | } |
| 438 | if (sc.CheckString("{")) |
| 439 | |
| 440 | while (!sc.CheckString("}")) |
| 441 | { |
| 442 | sc.MustGetString(); |
| 443 | switch (cm_transtok(sc.String, cm_map_tokens, cm_map_numtokens)) |
| 444 | { |
| 445 | case CM_FILENAME: |
| 446 | { |
| 447 | sc.MustGetString(); |
| 448 | curMap->SetFileName(sc.String); |
no test coverage detected