- 
                Notifications
    
You must be signed in to change notification settings  - Fork 2
 
mob_ru
        Asp Adm (Alexey Kirillov) edited this page May 2, 2019 
        ·
        3 revisions
      
    Описание объектов уровня

примечание: из типов упомянут только node
Файл содержит древоподобную структуру, где каждая нода определена следующим образом:
typedef structure
{
    uint type_id;
    uint size;
    
    byte data[size - 8];
} node;data интерпретируется по её type_id, который указывает на тип хранимых данных:
| тип данных | размер (обычно) | описание | 
|---|---|---|
| AiGraph | (см. формат GRP) | |
| AreaArray | ||
| Byte | 1 | 1б беззнаковое целое | 
| Diplomacy | 4096 | 32x32 матрица из 2б целых | 
| Dword | 4 | 4б беззнаковое целое | 
| Float | 4 | 4б вещественное | 
| LeverStats | ||
| Null | 0 | пустая нода | 
| Plot | 12 | 3 floats (vec3) | 
| Plot2DArray | ||
| Quaternion | 16 | 4 floats (vec4) | 
| Record | >8 | контейнер нод | 
| Rectangle | ||
| String | ascii строка | |
| StringArray | >4 | массив строк | 
| StringEncrypted | >4 | зашифрованный скрипт уровня | 
| UnitStats | 172 | параметры существа | 
| Unknown | 
Список возможных type_id:
| type_id | тип данных | имя поля | 
|---|---|---|
| 0x00000000 | Record | ROOT | 
| 0x00001E00 | Record | VSS_SECTION | 
| 0x00001E01 | Record | VSS_TRIGER | 
| 0x00001E02 | Record | VSS_CHECK | 
| 0x00001E03 | Record | VSS_PATH | 
| 0x00001E04 | Dword | VSS_ID | 
| 0x00001E05 | Rectangle | VSS_RECT | 
| 0x00001E06 | Dword | VSS_SRC_ID | 
| 0x00001E07 | Dword | VSS_DST_ID | 
| 0x00001E08 | String | VSS_TITLE | 
| 0x00001E09 | String | VSS_COMMANDS | 
| 0x00001E0A | Byte | VSS_ISSTART | 
| 0x00001E0B | Record | VSS_LINK | 
| 0x00001E0C | String | VSS_GROUP | 
| 0x00001E0D | Byte | VSS_IS_USE_GROUP | 
| 0x00001E0E | Record | VSS_VARIABLE | 
| 0x00001E0F | StringArray | VSS_BS_CHECK | 
| 0x00001E10 | StringArray | VSS_BS_COMMANDS | 
| 0x00001E11 | String | VSS_CUSTOM_SRIPT | 
| 0x0000A000 | Record | OBJECTDBFILE | 
| 0x0000AA00 | Null | LIGHT_SECTION | 
| 0x0000AA01 | Record | LIGHT | 
| 0x0000AA02 | Float | LIGHT_RANGE | 
| 0x0000AA03 | String | LIGHT_NAME | 
| 0x0000AA04 | Plot | LIGHT_POSITION | 
| 0x0000AA05 | Dword | LIGHT_ID | 
| 0x0000AA06 | Byte | LIGHT_SHADOW | 
| 0x0000AA07 | Plot | LIGHT_COLOR | 
| 0x0000AA08 | String | LIGHT_COMMENTS | 
| 0x0000ABD0 | Record | WORLD_SET | 
| 0x0000ABD1 | Plot | WS_WIND_DIR | 
| 0x0000ABD2 | Float | WS_WIND_STR | 
| 0x0000ABD3 | Float | WS_TIME | 
| 0x0000ABD4 | Float | WS_AMBIENT | 
| 0x0000ABD5 | Float | WS_SUN_LIGHT | 
| 0x0000B000 | Record | OBJECTSECTION | 
| 0x0000B001 | Record | OBJECT | 
| 0x0000B002 | Dword | NID | 
| 0x0000B003 | Dword | OBJTYPE | 
| 0x0000B004 | String | OBJNAME | 
| 0x0000B005 | Null | OBJINDEX | 
| 0x0000B006 | String | OBJTEMPLATE | 
| 0x0000B007 | String | OBJPRIMTXTR | 
| 0x0000B008 | String | OBJSECTXTR | 
| 0x0000B009 | Plot | OBJPOSITION | 
| 0x0000B00A | Quaternion | OBJROTATION | 
| 0x0000B00B | Null | OBJTEXTURE | 
| 0x0000B00C | Plot | OBJCOMPLECTION | 
| 0x0000B00D | StringArray | OBJBODYPARTS | 
| 0x0000B00E | String | PARENTTEMPLATE | 
| 0x0000B00F | String | OBJCOMMENTS | 
| 0x0000B010 | Null | OBJ_DEF_LOGIC | 
| 0x0000B011 | Byte | OBJ_PLAYER | 
| 0x0000B012 | Dword | OBJ_PARENT_ID | 
| 0x0000B013 | Byte | OBJ_USE_IN_SCRIPT | 
| 0x0000B014 | Byte | OBJ_IS_SHADOW | 
| 0x0000B015 | Null | OBJ_R | 
| 0x0000B016 | String | OBJ_QUEST_INFO | 
| 0x0000C000 | Null | SC_OBJECTDBFILE | 
| 0x0000CC00 | Null | SOUND_SECTION | 
| 0x0000CC01 | Record | SOUND | 
| 0x0000CC02 | Dword | SOUND_ID | 
| 0x0000CC03 | Plot | SOUND_POSITION | 
| 0x0000CC04 | Dword | SOUND_RANGE | 
| 0x0000CC05 | String | SOUND_NAME | 
| 0x0000CC06 | Dword | SOUND_MIN | 
| 0x0000CC07 | Dword | SOUND_MAX | 
| 0x0000CC08 | String | SOUND_COMMENTS | 
| 0x0000CC09 | Null | SOUND_VOLUME | 
| 0x0000CC0A | StringArray | SOUND_RESNAME | 
| 0x0000CC0B | Dword | SOUND_RANGE2 | 
| 0x0000CC0D | Byte | SOUND_AMBIENT | 
| 0x0000CC0E | Byte | SOUND_IS_MUSIC | 
| 0x0000D000 | Null | PR_OBJECTDBFILE | 
| 0x0000DD00 | Null | PARTICL_SECTION | 
| 0x0000DD01 | Record | PARTICL | 
| 0x0000DD02 | Dword | PARTICL_ID | 
| 0x0000DD03 | Plot | PARTICL_POSITION | 
| 0x0000DD04 | String | PARTICL_COMMENTS | 
| 0x0000DD05 | String | PARTICL_NAME | 
| 0x0000DD06 | Dword | PARTICL_TYPE | 
| 0x0000DD07 | Float | PARTICL_SCALE | 
| 0x0000E000 | Record | DIRICTORY | 
| 0x0000E001 | Record | FOLDER | 
| 0x0000E002 | String | DIR_NAME | 
| 0x0000E003 | Dword | DIR_NINST | 
| 0x0000E004 | Dword | DIR_PARENT_FOLDER | 
| 0x0000E005 | Byte | DIR_TYPE | 
| 0x0000F000 | Record | DIRICTORY_ELEMENTS | 
| 0x0000FF00 | Record | SEC_RANGE | 
| 0x0000FF01 | Record | MAIN_RANGE | 
| 0x0000FF02 | Record | RANGE | 
| 0x0000FF05 | Dword | MIN_ID | 
| 0x0000FF06 | Dword | MAX_ID | 
| 0x31415926 | AiGraph | AIGRAPH | 
| 0xACCEECCA | String | SS_TEXT_OLD | 
| 0xACCEECCB | StringEncrypted | SS_TEXT | 
| 0xBBAB0000 | Record | MAGIC_TRAP | 
| 0xBBAB0001 | Dword | MT_DIPLOMACY | 
| 0xBBAB0002 | String | MT_SPELL | 
| 0xBBAB0003 | AreaArray | MT_AREAS | 
| 0xBBAB0004 | Plot2DArray | MT_TARGETS | 
| 0xBBAB0005 | Dword | MT_CAST_INTERVAL | 
| 0xBBAC0000 | Record | LEVER | 
| 0xBBAC0001 | Null | LEVER_SCIENCE_STATS | 
| 0xBBAC0002 | Byte | LEVER_CUR_STATE | 
| 0xBBAC0003 | Byte | LEVER_TOTAL_STATE | 
| 0xBBAC0004 | Byte | LEVER_IS_CYCLED | 
| 0xBBAC0005 | Byte | LEVER_CAST_ONCE | 
| 0xBBAC0006 | LeverStats | LEVER_SCIENCE_STATS_NEW | 
| 0xBBAC0007 | Byte | LEVER_IS_DOOR | 
| 0xBBAC0008 | Byte | LEVER_RECALC_GRAPH | 
| 0xBBBB0000 | Record | UNIT | 
| 0xBBBB0001 | Null | UNIT_R | 
| 0xBBBB0002 | String | UNIT_PROTOTYPE | 
| 0xBBBB0003 | Null | UNIT_ITEMS | 
| 0xBBBB0004 | UnitStats | UNIT_STATS | 
| 0xBBBB0005 | StringArray | UNIT_QUEST_ITEMS | 
| 0xBBBB0006 | StringArray | UNIT_QUICK_ITEMS | 
| 0xBBBB0007 | StringArray | UNIT_SPELLS | 
| 0xBBBB0008 | StringArray | UNIT_WEAPONS | 
| 0xBBBB0009 | StringArray | UNIT_ARMORS | 
| 0xBBBB000A | Byte | UNIT_NEED_IMPORT | 
| 0xBBBC0000 | Record | UNIT_LOGIC | 
| 0xBBBC0001 | Null | UNIT_LOGIC_AGRESSIV | 
| 0xBBBC0002 | Byte | UNIT_LOGIC_CYCLIC | 
| 0xBBBC0003 | Dword | UNIT_LOGIC_MODEL | 
| 0xBBBC0004 | Float | UNIT_LOGIC_GUARD_R | 
| 0xBBBC0005 | Plot | UNIT_LOGIC_GUARD_PT | 
| 0xBBBC0006 | Byte | UNIT_LOGIC_NALARM | 
| 0xBBBC0007 | Byte | UNIT_LOGIC_USE | 
| 0xBBBC0008 | Null | UNIT_LOGIC_REVENGE | 
| 0xBBBC0009 | Null | UNIT_LOGIC_FEAR | 
| 0xBBBC000A | Float | UNIT_LOGIC_WAIT | 
| 0xBBBC000B | Byte | UNIT_LOGIC_ALARM_CONDITION | 
| 0xBBBC000C | Float | UNIT_LOGIC_HELP | 
| 0xBBBC000D | Byte | UNIT_LOGIC_ALWAYS_ACTIVE | 
| 0xBBBC000E | Byte | UNIT_LOGIC_AGRESSION_MODE | 
| 0xBBBD0000 | Record | GUARD_PT | 
| 0xBBBD0001 | Plot | GUARD_PT_POSITION | 
| 0xBBBD0002 | Null | GUARD_PT_ACTION | 
| 0xBBBE0000 | Record | ACTION_PT | 
| 0xBBBE0001 | Plot | ACTION_PT_LOOK_PT | 
| 0xBBBE0002 | Dword | ACTION_PT_WAIT_SEG | 
| 0xBBBE0003 | Dword | ACTION_PT_TURN_SPEED | 
| 0xBBBE0004 | Byte | ACTION_PT_FLAGS | 
| 0xBBBF0000 | Record | TORCH | 
| 0xBBBF0001 | Float | TORCH_STRENGHT | 
| 0xBBBF0002 | Plot | TORCH_PTLINK | 
| 0xBBBF0003 | String | TORCH_SOUND | 
| 0xDDDDDDD1 | Record | DIPLOMATION | 
| 0xDDDDDDD2 | Diplomacy | DIPLOMATION_FOF | 
| 0xDDDDDDD3 | StringArray | DIPLOMATION_PL_NAMES | 
| 0xFFFFFFFF | Unknown | UNKNOWN | 
В некоторых файлах размер поля не совпадает с ожидаемым.
for (size_t i = 0; i < size; i++) 
{
    key += (((((key * 13) << 4) + key) << 8) - key) * 4 + 2531011;
    data[i] ^= key >> 16;
}В данном коде считается, что размер key постоянный и составляет 4 байта.