… | |
… | |
473 | CLEAR_FLAG (op, flag) \ |
473 | CLEAR_FLAG (op, flag) \ |
474 | |
474 | |
475 | bool |
475 | bool |
476 | object::parse_kv (object_thawer &f) |
476 | object::parse_kv (object_thawer &f) |
477 | { |
477 | { |
478 | assert (f.kw == KW_object || f.kw == KW_arch); |
|
|
479 | |
|
|
480 | if (f.kw == KW_object) |
|
|
481 | f.get (name); // preset name from object name |
|
|
482 | |
|
|
483 | f.next (); |
|
|
484 | |
|
|
485 | object *op_inv = inv; |
478 | object *op_inv = inv; |
486 | |
479 | |
487 | for (;;) |
480 | for (;;) |
488 | { |
481 | { |
489 | switch (f.kw) |
482 | switch (f.kw) |
… | |
… | |
990 | arch = archetype::find ("earthwall"); |
983 | arch = archetype::find ("earthwall"); |
991 | } |
984 | } |
992 | |
985 | |
993 | assert (arch); //D maybe use exception handling of sorts? |
986 | assert (arch); //D maybe use exception handling of sorts? |
994 | |
987 | |
|
|
988 | f.next (); |
|
|
989 | |
995 | object *op = object::create (); |
990 | object *op = object::create (); |
996 | |
991 | |
997 | op->map = map; |
992 | op->map = map; |
998 | arch->clone.copy_to (op); |
993 | arch->clone.copy_to (op); |
999 | // copy_to activates, this should be fixed properly |
994 | // copy_to activates, this should be fixed properly |
… | |
… | |
1017 | int |
1012 | int |
1018 | set_variable (object *op, char *buf) |
1013 | set_variable (object *op, char *buf) |
1019 | { |
1014 | { |
1020 | object_thawer f (buf, (AV *)0); |
1015 | object_thawer f (buf, (AV *)0); |
1021 | |
1016 | |
1022 | f.kw = KW_arch; // special hack so that parse_kv skips |
1017 | f.next (); |
1023 | return op->parse_kv (f); |
1018 | return op->parse_kv (f); |
1024 | } |
1019 | } |
1025 | |
1020 | |
1026 | /* This returns a string of the integer movement type */ |
1021 | /* This returns a string of the integer movement type */ |
1027 | #if 0 |
1022 | #if 0 |
… | |
… | |
1399 | return true; |
1394 | return true; |
1400 | } |
1395 | } |
1401 | |
1396 | |
1402 | ///////////////////////////////////////////////////////////////////////////// |
1397 | ///////////////////////////////////////////////////////////////////////////// |
1403 | |
1398 | |
|
|
1399 | // generic resource file load, |
|
|
1400 | // currently supports: region, treasures, archetypes |
1404 | bool load_resource_file (const char *filename) |
1401 | bool load_resource_file (const char *filename) |
1405 | { |
1402 | { |
1406 | object_thawer f (filename); |
1403 | object_thawer f (filename); |
|
|
1404 | |
|
|
1405 | bool success = false; |
|
|
1406 | bool seen_arch = false; |
1407 | |
1407 | |
1408 | f.next (); |
1408 | f.next (); |
1409 | |
1409 | |
1410 | for (;;) |
1410 | for (;;) |
1411 | { |
1411 | { |
1412 | switch (f.kw) |
1412 | switch (f.kw) |
1413 | { |
1413 | { |
1414 | case KW_region: |
1414 | case KW_region: |
1415 | if (!region::read (f)) |
1415 | if (!region::read (f)) |
1416 | return false; |
1416 | goto finish; |
|
|
1417 | break; |
|
|
1418 | |
|
|
1419 | case KW_treasure: |
|
|
1420 | case KW_treasureone: |
|
|
1421 | if (!treasurelist::read (f)) |
|
|
1422 | goto finish; |
|
|
1423 | break; |
|
|
1424 | |
|
|
1425 | case KW_object: |
|
|
1426 | seen_arch = true; |
|
|
1427 | if (!archetype::read (f)) |
|
|
1428 | goto finish; |
1417 | break; |
1429 | break; |
1418 | |
1430 | |
1419 | case KW_EOF: |
1431 | case KW_EOF: |
1420 | return true; |
1432 | success = true; |
|
|
1433 | goto finish; |
1421 | |
1434 | |
1422 | default: |
1435 | default: |
1423 | if (!f.parse_error ("resource file")) |
1436 | if (!f.parse_error ("resource file")) |
1424 | return false; |
1437 | goto finish; |
1425 | } |
1438 | } |
1426 | |
|
|
1427 | f.next (); |
|
|
1428 | } |
1439 | } |
|
|
1440 | |
|
|
1441 | finish: |
|
|
1442 | if (seen_arch) |
|
|
1443 | init_archetype_pointers (); |
|
|
1444 | |
|
|
1445 | return success; |
1429 | } |
1446 | } |
1430 | |
1447 | |