Skyrim CK:Формат файлов скриптов

Материал из Tiarum
Перейти к: навигация, поиск
Переводить Этот материал нуждается в переводе или допереводе..
Вы можете помочь перевести его. Не забывайте предварительно добавлять строку {{Edit|--~~~~}} в материалы над которыми работаете, чтобы не создавать конфликта правок.
Пожалуйста, снимите шаблон этого сообщения, когда материал будет вычитан.

Содержание

Skyrim поддерживает версии 3.0 и 3.1 откомпилированных скриптовых файлов.


The format appears to be stored in big-endian regardless of platform (Windows, PS3, and 360 observed as big-endian).

Заголовок

Имя Тип / Размер Что означает
magic uint32 0xFA57C0DE (FASTCODE?)
majorVersion uint8 3
minorVersion uint8 1
gameId uint16 1 = Skyrim?
unknown3 uint64 Возможно, время компиляции.
sourceFileИмя String Имя файла с исходным кодом (имеет расширение .psc).
unknown5 String Имя директории компилятора? Возможно имя пользователя, компилировавшего скрипт?
unknown6 String Имя компьютера, на котором был откомпилирован скрипт.
СтрокаTable String Table Таблица строк
debugЧто означает Debug Info Отладочная информация
userFlags User Flags Пользовательские флаги
objects Objects Объекты

Основное

Строка (String)

Имя Тип / Размер Что означает
length uint16 Длина строки.
data char[length] Данные. Не может принимать нулевое значение.

Секции

Таблица строк (String Table)

Имя Тип / Размер Что означает
count uint16 Количество строк в таблице
Strings String[count] Строки

Отладочная информация (Debug Info)

Имя Тип / Размер Что означает
hasDebugInfo uint8 Если равно нулю, то отладочная информация отсутствует. Последующие записи должны быть пропущены.
modificationTime uint64 time_t
functionCount uint16 Количество функций
functions Debug Function[functionCount] Функции

Debug Function

Имя Тип / Размер Что означает
objectNameIndex uint16 Номер строки в строковой таблице.
stateNameIndex uint16 Номер строки в строковой таблице.
functionNameIndex uint16 Номер строки в строковой таблице.
functionType uint8 Тип функции. Допустимые значения: 0-3
instructionCount uint16
lineNumbers uint16[instructionCount] Maps instructions to their original lines in the source.

Пользовательские флаги (User Flags)

Имя Тип / Размер Что означает
count uint16 Количество
userFlags User Flag[count] Пользовательские флаги

Пользовательский флаг (User Flag)

Имя Тип / Размер Что означает
NameIndex uint16 Номер строки в строковой таблице.
flagIndex uint8 Bit index

Объекты (Objects)

Имя Тип / Размер Что означает
count uint16 Количество
objects Object[count] Объекты

Объект (Object)

Имя Тип / Размер Что означает
NameIndex uint16 Номер строки в строковой таблице.
size uint32 Размер
data uint8[size-4] (Размер, включая себя в большинстве случаев, иначе size-4), содержимое - смотри Object Data

Данные объекта (Object Data)

Имя Тип / Размер Что означает
parentClassName uint16 Номер строки в строковой таблице.
docString uint16 Номер строки в строковой таблице.
userFlags uint32 Пользовательские флаги
autoStateName uint16 Номер строки в строковой таблице.
numVariables uint16 Количество переменных
Variables Variable[numVariables] Переменные
numProperties uint16 Количество свойств
properties Properties[numProperties] Свойства
numStates uint16 Количество положений
states State[numStates] Положения
Переменная (Variable)
Имя Тип / Размер Что означает
Имя uint16 Номер строки в строковой таблице.
typeИмя uint16 Номер строки в строковой таблице.
userFlags uint32
data VariableData Default value
Данные переменной (Variable Data)
Имя Тип / Размер Что означает
type uint8 0 = null, 1 = идентификатор, 2 = строчный, 3 = целочисленный, 4 = с плавающей запятой, 5 = логический
data uint16 Индекс строки в строковой таблице, существует только, если тип переменной строчный (type == 2)
data int32 Существует только, если тип переменной целочисленный (type == 3)
data float Существует только, если тип переменной с плавающей запятой (type == 4)
data uint8 уществует только, если тип переменной с логический (type == 5)
Свойства (Properties)
Имя Тип / Размер Что означает
name uint16 Номер строки в строковой таблице.
type uint16 Номер строки в строковой таблице.
docString uint16 Номер строки в строковой таблице.
userFlags uint32
flags uint8 Битовое поле: 1 = чтение, 2 = запись, 4 = autovar
autoVarName uint16 Номер строки в строковой таблице, существует, если (flags & 4) != 0
readHandler Function Существует, если (flags & 5) == 1
writeHandler Function Существует, если (flags & 6) == 2
Положение (State)
Имя Тип / Размер Что означает
Имя uint16 Номер строки в строковой таблице или пустая строка для стандартного положения
numFunctions uint16 Количество функций
functions Function[numFunctions] Функции

Функция (Function)

Имя Тип / Размер Что означает
functionName uint16 Номер строки в строковой таблице.
returnType uint16 Номер строки в строковой таблице.
docString uint16 Номер строки в строковой таблице.
userFlags uint32 Пользовательские флаги
flags uint8 Флаги
numParams uint16 Количество аргументов функции
params VariableType[numParams] Аргументы функции
numLocals uint16 Количество локальных переменных функции
locals VariableType[numLocals] Локальные переменные
numInstructions uint16 Количество инструкций
instructions Instruction[numInstructions] Инструкции
Тип переменной (Variable Type)
Имя Тип / Размер Что означает
Name uint16 Номер строки в строковой таблице.
type uint16 Номер строки в строковой таблице.
Инструкция (Instruction)
Имя Тип / Размер Что означает
op uint8 Смотри опкоды
arguments VariableData[changes depending on opcode] Длинна зависит от конкретного опкода, а также от переменной-аргумента.
Операционные коды (Opcodes)

Код операции, операционный код, опкод — часть машинного языка, называемой инструкцией, определяющей операцию, которая должна быть выполнена.

Код Имя Аргументы Описание
00 nop none Бездействие.
01 iadd SII Сумма двух целых чисел.
02 fadd SFF Сумма двух чисел с плавающей запятой.
03 isub SII Разница двух целых чисел.
04 fsub SFF Разница двух чисел с плавающей запятой.
05 imul SII Произведение двух целых чисел.
06 fmul SFF Произведение двух чисел с плавающей запятой.
07 idiv SII Частное двух целых чисел.
08 fdiv SFF Частное двух чисел с плавающей запятой.
09 imod SII Остаток от деления двух целых чисел.
0A not SA Логическая инверсия. Возможно преобразование типов.
0B ineg SI Отрицание целого числа.
0C fneg SF Отрицание числа с плавающей запятой.
0D assign SA Присваивание.
0E cast SA Преобразование типов.
0F cmp_eq SAA Возвращает истину, если a = b
10 cmp_lt SAA Возвращает истину, если a < b
11 cmp_le SAA Возвращает истину, если a <= b
12 cmp_gt SAA Возвращает истину, если a > b
13 cmp_ge SAA Возвращает истину, если a >= b
14 jmp L relative unconditional branch
15 jmpt AL relative conditional branch if a bool is true
16 jmpf AL relative conditional branch if a bool is false
17 callmethod NSS*
18 callparent NS*
19 callstatic NNS*
1A return A
1B strcat SQQ concatenate two Строкаs
1C propget NSS retrieve an instance Свойства
1D propset NSA set an instance Свойства
1E array_create Su create an array of the specified size
1F array_length SS Получить длинну массива.
20 array_getelement SSI Присвоить значение элементу массива.
21 array_setelement SIA Получить значение элемента массива.

Each character in the "arguments" Строка specifies an argument type. They're all read as Переменная Data. * characters are used for Переменная-length arguments. Первый аргумент - целое число, указывающее на количество последующих аргументов.

Инструмент для получения информации о откомпилированых скриптах вы можете получить тут: [1].

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Разделы TES
Разделы Fallout
Модмейкерам
Инструменты