Структура кода SS13: различия между версиями
imported>Ohar м (Добавлена плашка) |
imported>Kysovich (Перевод статьи) |
||
Строка 1: | Строка 1: | ||
Также прочтите: [[SS13 для опытных программистов]] и [[Руководство по маппингу]] | |||
==DreamMaker== | ==DreamMaker== | ||
Программа, которая потребуется для написания кода и маппинга, состоит из шести основных компонентов. Файловое дерево, дерево объектов, текстовый редактор, редактор иконок, редактор карт и панель отчета об ошибке. | |||
=== | === Файловое дерево === | ||
Доступно во вкладке 'File' в левой вертикальной панели. Оно отображает файлы, которые составляют код игры, и рассортированы по папкам. Двойной клик по файлу откроет его в соответствующем редакторе. Если вы добавите новый файл в список (в Проводнике Windows), обновите список, нажав на кнопку 'Refresh'. Значок рядом с именем файла означает, что он используется в компилируемом коде. Частая ошибка - забыть импортировать новый файл. | |||
=== | === Дерево объектов === | ||
О том, что такое объект, [[#Что такое объект?|читайте ниже]] в этом руководстве, но пока скажем, что это дерево содержим список всего, что помещается на карту. Они расположены в определенной иерархии. Об этом также читайте ниже в гайде. Кнопка 'Update' внизу обновит дерево и дополнит его новыми спрайтами и объектами, если они были добавлены в любой из отмеченных .dm файлов. | |||
=== | === Текстовый редактор === | ||
Данный редактор становится доступным, когда вы открываете файл с расширением .dm. Он предназначен для написания и редактирования кода игры. | |||
=== | === Редактор иконок === | ||
Используется для редактирования иконок и их состояний, доступен, когда открывается файл с расширением .dmi. Отображает список всех спрайтов (часто называемых состояниями иконок) в файле. ПКМ в любом месте оуна отобразит опции для создания новой карты или ролика. Карта - статическое изображение, ролик - состояние иконки в одном из направлении или анимация. Ролик можем иметь одно направление (Юг), четыре (Север-Юг-Восток-Запад) или восемь (компас). Также заметьте, что в одном .dmi файле могут быть только иконки одного определенного размера. Для таких объектов, как сингулярность (которая, набирая силу, увеличивается в размерах), может потребоваться несколько .dmi-файлов. | |||
=== | === Редактор карт === | ||
Обычно открывается, при запуске DreamMaker или при открытии файла с расширением .dmm. Редактор карт отображает (удивительно!) игровую карту. По умолчанию отображает все 4 основные группы объектов: зоны, мобы, объекты и покрытия. Чтобы выбрать параметры отображения, перейдите на вкладку «Слои» на самой верхней панели инструментов и выберите 'Only show selectable layers' («Показывать только выбираемые слои»), а затем выберите, какие слои вы хотите отображать на той же вкладке. Наиболее часто это используется для скрытия областей наложения. Обратите внимание, что карта не будет отображаться, если в коде .dm есть какие-либо ошибки. Исправьте все ошибки, а затем перекомпилируйте его. | |||
=== | === Панель отчета об ошибке === | ||
Текстовая панель в нижней части DreamMaker, предназначенная для составления отчетов об ошибках. | |||
=== | === Компиляция и запуск === | ||
Для компиляции обновленного кода без его запуска, выберите вкладку 'Build' (Сборка) и нажмите 'Compile' (Компилировать). Для компиляции и запуска выберите 'Build' > 'Run'. | |||
== | ==Компоненты кода== | ||
=== | ===Переменные=== | ||
[http://www.byond.com/members/?command=reference&path=var | [http://www.byond.com/members/?command=reference&path=var Источник] | ||
Переменные предназначены для хранения данных. Переменные создаются следующим образом: (без определения значения переменной) | |||
var/i | |||
var/i | |||
Чтобы объявить переменную и её значение: | |||
var/i = 5 | var/i = 5 | ||
var/j = "Hello World" | |||
var/ | |||
Как только переменная была объявлена, вы можете объявить другую с тем же именем: | |||
var/i | var/i | ||
i = 2 | i = 2 | ||
Строка 55: | Строка 54: | ||
i = 12 | i = 12 | ||
==== | ==== Список ==== | ||
[http://www.byond.com/members/?command=reference&path=list | [http://www.byond.com/members/?command=reference&path=list Источник] | ||
Список может быть объявлен одним из трех способов, но переменные, ассоциируемые со списками (<code>len</code> для получения длины списка), будут доступны только если были объявлены первым способом. | |||
var/list/a | var/list/a | ||
var/a[9] | var/a[9] | ||
var/a = list() | var/a = list() | ||
==== | ==== Другие типы ==== | ||
Если вы хотите сохранить монетку где-то в переменных объекта и использовать определенные процедуры или переменные монетки, вам нужно определить переменную, в которой вы храните монету как монету. Второй пример также создает переменную с именем D и заполняет ее новой монетой. | |||
var/obj/item/weapon/coin/C | var/obj/item/weapon/coin/C | ||
var/obj/item/weapon/coin/D = new/var/obj/item/weapon/coin(src) | var/obj/item/weapon/coin/D = new/var/obj/item/weapon/coin(src) | ||
==== | ==== Включенные переменные ==== | ||
Переменные, встроенные в сам BYOND и не определяемые нигде в коде: | |||
<br>[http://www.byond.com/members/?command=reference&path=atom%2Fvar | <br>[http://www.byond.com/members/?command=reference&path=atom%2Fvar Атомарные переменные] | ||
<br>[http://www.byond.com/members/?command=reference&path=client%2Fvar | <br>[http://www.byond.com/members/?command=reference&path=client%2Fvar Клиентские переменные] | ||
<br>[http://www.byond.com/members/?command=reference&path=datum%2Fvar Datum | <br>[http://www.byond.com/members/?command=reference&path=datum%2Fvar Datum-переменные] | ||
<br>[http://www.byond.com/members/?command=reference&path=mob%2Fvar | <br>[http://www.byond.com/members/?command=reference&path=mob%2Fvar Моб-переменные] | ||
===== | ===== Переменные направления (dir) ===== | ||
[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdir | [http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdir Источник] | ||
''' | '''Север:''' 1<br> | ||
''' | '''Юг:''' 2<br> | ||
''' | '''Восток:''' 4<br> | ||
''' | '''Запад:''' 8<br> | ||
''' | '''Северо-восток:''' 5 (1 + 4)<br> | ||
''' | '''Юго-Восток:''' 6 (2 + 4)<br> | ||
''' | '''Северо-запад:''' 9 (1 + 8)<br> | ||
''' | '''Юго-запад:''' 10 (2 + 8)<br> | ||
Направления пронумерованы таким образом, поскольку используют метод 'bitflag' (битовый флаг). То же в двоичном коде: | |||
'''0001''' | '''0001''' для севера<br> | ||
'''0010''' | '''0010''' для юга<br> | ||
'''0100''' | '''0100''' для востока<br> | ||
'''1000''' | '''1000''' для запада<br> | ||
Сложение направлений даст в итоге: | |||
'''0101''' для северо-востока<br> | |||
'''1001''' для северо-запада<br> | |||
'''0110''' для юго-востока<br> | |||
'''1010''' для юго-запада. | |||
Впрочем, другие комбинации (Восток-Запад (1100), Север-Юг (0011), Восток-Северо-Запад (1101) и т.п.) допустимы в особых случаях. (Пример: стены на станции). | |||
===== Атомарные переменные ===== | |||
Применяются ко всем /obj, /turf, /area, /mob объектам. | |||
'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fcontents Содержимое (Contents)]: '''Список объектов, помещаемых в другие объекты. (Баки с плазмой в излучателе, руда в плавильне, и т.п.) | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdensity Плотность (Density)]: '''Двоичный флаг (0/1): 0 означает возможность пройти через объект, 1 - невозможность преодолеть его | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdesc Описание (Desc)]: '''Строка - Описание объекта, пишется при подробном осмотре (Examine) | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdir Направление (Dir)]: '''1-10 - Направление объекта | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Ficon Иконка (Icon)]: '''Файл с разрешением .dmi, который содержит спрайт для иконки | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Ficon_state Состояние иконки (Icon_state)]: '''Название спрайта из файла | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Foverlays Наложения (Overlays)]: '''Список изображений, которые наложены на предмет. | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Flayer Слой (Layer)]: '''Если два объекта находятся на одном тайле и у одного из больше номер слоя, то этот объект будет показан над другим. | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Floc Координаты (Loc)]: '''Позиционирование предмета по X,Y,Z | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fluminosity Свечение (Luminosity)]: '''Насколько объект светится? | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fname Название (Name)]: '''Название предмета, которое будет отображаться при наведении на него | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fopacity Прозрачность (Opacity)]: '''Можно ли через него видеть? | |||
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fpixel_x Смещение по X (Pixel_x)], [http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fpixel_y Смещение по Y (pixel_y)]: '''Установите, если элемент на карте смещен на несколько пикселей в любую сторону. Используется на [[Локальный контроллер питания|ЛКП]], Консолях запросов, Пожарных сигнализациях, и т.п. | |||
<br>'''[http://www.byond.com/members/?command=reference&path=datum%2Fvar%2Ftype Тип (Type)]: '''Тип - это путь к объекту. У монетки эта переменная примет значение: <code>/obj/item/weapon/coin</code> | |||
=== Приложенные инструкции === | |||
Справочные руководства для прилагаемых инструкций (procs) можно найти по следующим ссылкам: | |||
<br>[http://www.byond.com/members/?command=reference&path=area%2Fproc Area procs] | <br>[http://www.byond.com/members/?command=reference&path=area%2Fproc Area procs] | ||
<br>[http://www.byond.com/members/?command=reference&path=mob%2Fproc Mob procs] | <br>[http://www.byond.com/members/?command=reference&path=mob%2Fproc Mob procs] | ||
Строка 125: | Строка 132: | ||
<br>[http://www.byond.com/members/?command=reference&path=obj%2Fproc Turf procs] | <br>[http://www.byond.com/members/?command=reference&path=obj%2Fproc Turf procs] | ||
=== | === Условные операторы === | ||
Условные операторы - это выражения, которые определяют, каким образом будет исполняться код, в зависимости от условия. Чаще всего используется выражение IF (ЕСЛИ). | |||
==== = | ==== = и == ==== | ||
var/a | var/a | ||
Строка 138: | Строка 145: | ||
world << "A is not 14" | world << "A is not 14" | ||
Одиночный символ равенства = означает присваивание значения справа к переменной слева. (В примере выше переменной <code>a</code> присваивается значение <code>14</code> (a = 14)) | |||
Двойной знак равенства == используется для сравнения двух значений. Чаще всего используются именно в выражении IF. В примере выше значение переменной <code>a</code> сравнивается с <code>14</code> (a == 14). Результат сравнения определит, каким образом будет выполняться код. | |||
==== | ==== Выражение IF ==== | ||
[http://www.byond.com/members/?command=reference&path=proc%2Fif | [http://www.byond.com/members/?command=reference&path=proc%2Fif Источник] | ||
В примере был показан простой оператор IF. Оператор IF сначала проверяет, является ли утверждение в скобках (в случае выше a == 14), истинным или нет. Если это правда, он продолжит выполнение кода, который расположен после IF (в приведенном выше случае: <code>world << "A has the value [a]"</code>). В другом случае, если условие не выполнено, он перейдет к оператору ELSE и выполнит код, который находится после него, если этот оператор присутствует. В примере, если a не равно 14, будет выполнено <code>world << "A is not 14"</code> | |||
Операторы сравнения включают в себя: | |||
<br>'''==''' | <br>'''==''' Равенство | ||
<br>'''!=''' | <br>'''!=''' Неравенство | ||
<br>'''<''' | <br>'''<''' Меньше | ||
<br>'''>''' | <br>'''>''' Больше | ||
<br>'''<=''' | <br>'''<=''' Меньше или равно | ||
<br>'''>=''' | <br>'''>=''' Больше или равно | ||
==== | ==== Выражение SWITCH-CASE ==== | ||
[http://www.byond.com/members/?command=reference&path=proc%2Fswitch | [http://www.byond.com/members/?command=reference&path=proc%2Fswitch Источник] | ||
=== | === Циклы === | ||
==== | ==== Оператор WHILE ==== | ||
[http://www.byond.com/members/?command=reference&path=proc%2Fwhile | [http://www.byond.com/members/?command=reference&path=proc%2Fwhile Источник] | ||
==== | ==== Оператор FOR ==== | ||
[http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Floop | [http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Floop Источник] | ||
==== | ==== Оператор FOR для элементов списка (FOREACH) ==== | ||
[http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Flist | [http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Flist Источник] | ||
=== | === Процедуры === | ||
[http://www.byond.com/members/?command=reference&path=proc | [http://www.byond.com/members/?command=reference&path=proc Источник] | ||
== | ==Что такое объект?== | ||
SS13 | SS13 написана на движке BYOND, который использует одноименный объектно-ориентированный язык программирования. Пожалуйста, заметьте, что под объектом далее понимается не внутриигровые объекты, а сущности, которые объявляются в коде. | ||
Каждый определенный путь в игре может быть объектом. Примеры: | |||
/obj/item/weapon/sword | /obj/item/weapon/sword | ||
/turf/simulated/floor | /turf/simulated/floor | ||
Строка 182: | Строка 189: | ||
/atom/ | /atom/ | ||
Объект состоит из [[#Переменные|переменных]] и [[#Процедуры|процедур]] | |||
Пример такого объекта: | |||
/turf/simulated/gold_spot | /turf/simulated/gold_spot | ||
Строка 200: | Строка 207: | ||
spawn_gold() | spawn_gold() | ||
=== | === Иерархия и наследование === | ||
Объекты наследуют все родительские переменные и процедуры. Это означает, что объект, определенный как <code>/obj/item/weapon/storage/box</code>, имеет все переменные от <code>/obj/item/weapon/storage</code>, <code>/obj/item/weapon</code>, <code>/obj/item</code>, <code>/obj</code>, а также <code>/atom</code>, но мы вернемся к этому позже. Некоторые процедуры уже определены для всех объектов, вы можете увидеть их [http://www.byond.com/members/?command=reference&path=atom%2Fproc здесь]. В приведенном выше примере <code>New()</code> был экземпляром процедуры, унаследованной от родительского объекта. Вот почему <code>New()</code> не имеет префикса proc/, потому что он уже определен в родительском объекте. Однако вы должны знать, что <code>New()</code> был переопределен в этом объекте, поэтому он больше не работает так же, как в родительских объектах, а следует описанной логике. | |||
Пример унаследованной переменной - переменные <code>name</code> и <code>desc</code>. Обе были переопределены в дочернем объекте. <code>spawned_gold</code> же является новой переменной, которая отсутствует у родителя. | |||
Если мы определим следующие два объекта: | |||
/turf/simulated/gold_spot/plot1 | /turf/simulated/gold_spot/plot1 | ||
/turf/simulated/gold_spot/plot2 | /turf/simulated/gold_spot/plot2 | ||
то мы определим два потомка объекта <code>/turf/simulated/gold_spot</code>, которые унаследуют все переменные и процедуры объекта <code>/turf/simulated/gold_spot</code>, включая те, которые объект <code>/turf/simulated/gold_spot</code> унаследовала от родителя <code>/turf/simulated</code>. | |||
=== ..() === | === ..() === | ||
<code>..()</code> - это то, что вы чаще всего будете видеть в коде. В других языках программирования подобная конструкция обычно называется super(), она вызывает процедуру с таким же именем из родительского объекта. В отличие от некоторых языков, он не выполняется автоматически, даже если не добавлен, если только не требуется, чтобы он был в начале процедуры. Обычно они добавляются в процедуры New(), Del() и Attackby(), чтобы получить исходное определение в общем родителе. Эти общие определения обеспечивают правильную работу кода. | |||
== | ==Организация основных объектов== | ||
/datum | /datum | ||
/atom | /atom | ||
/area -- | /area --Объекты-зоны, которые используются в маппинге для определения пространства, покрываемого ЛКП, освещением, атмосферой и т.д. | ||
/mob | /mob | ||
/dead -- | /dead --госты, призраки, наблюдатели | ||
/living | /living | ||
/carbon -- | /carbon --люди и гуманоиды | ||
/silicon -- | /silicon --ИИ и киборги | ||
/obj | /obj | ||
/effect -- | /effect --Отметки, триггеры, эффекты и декали | ||
/item | /item | ||
/clothing -- | /clothing --Большая часть надеваемой одежды, ремни и рюкзаки ищите в obj/item/weapon/storage | ||
/devices -- | /devices --электронные устройства | ||
/stack -- | /stack --складываемые предметы: стержни, плитки и материалы | ||
/weapons -- | /weapons --Большинство поднимаемых предметов | ||
/machinery -- | /machinery --машины, используемые электроэнергию, обрабатываются каждый тик и в основном неперемещаемые | ||
/structure -- | /structure --Объекты, которые не требуют обрабатывания каждый тик или питания, примеры - окна, решетки, книжные полки, стеллажи и пр. | ||
/turf | /turf | ||
/simulated | /simulated | ||
/floor -- | /floor --полы с атмосферой | ||
/airless -- | /airless --полы без атмосферы (ВСЕГДА используйте для зон в открытом космосе) | ||
/plating -- | /plating --обшивка с атмосферой | ||
/airless -- | /airless --обшивка без атмосферы | ||
/wall -- | /wall --стены | ||
/r-wall -- | /r-wall --усиленные стены | ||
/space -- | /space --просто космос | ||
/unsimulated -- | /unsimulated --все на ЦК и прочих местах, где движение воздушных масс не симулируется | ||
{{Contribution Guides}} | {{Contribution Guides}} | ||
[[Category:Game Resources]] [[Category:Guides]] | [[Category:Game Resources]] [[Category:Guides]] |
Текущая версия от 15:57, 6 декабря 2022
Также прочтите: SS13 для опытных программистов и Руководство по маппингу
DreamMaker
Программа, которая потребуется для написания кода и маппинга, состоит из шести основных компонентов. Файловое дерево, дерево объектов, текстовый редактор, редактор иконок, редактор карт и панель отчета об ошибке.
Файловое дерево
Доступно во вкладке 'File' в левой вертикальной панели. Оно отображает файлы, которые составляют код игры, и рассортированы по папкам. Двойной клик по файлу откроет его в соответствующем редакторе. Если вы добавите новый файл в список (в Проводнике Windows), обновите список, нажав на кнопку 'Refresh'. Значок рядом с именем файла означает, что он используется в компилируемом коде. Частая ошибка - забыть импортировать новый файл.
Дерево объектов
О том, что такое объект, читайте ниже в этом руководстве, но пока скажем, что это дерево содержим список всего, что помещается на карту. Они расположены в определенной иерархии. Об этом также читайте ниже в гайде. Кнопка 'Update' внизу обновит дерево и дополнит его новыми спрайтами и объектами, если они были добавлены в любой из отмеченных .dm файлов.
Текстовый редактор
Данный редактор становится доступным, когда вы открываете файл с расширением .dm. Он предназначен для написания и редактирования кода игры.
Редактор иконок
Используется для редактирования иконок и их состояний, доступен, когда открывается файл с расширением .dmi. Отображает список всех спрайтов (часто называемых состояниями иконок) в файле. ПКМ в любом месте оуна отобразит опции для создания новой карты или ролика. Карта - статическое изображение, ролик - состояние иконки в одном из направлении или анимация. Ролик можем иметь одно направление (Юг), четыре (Север-Юг-Восток-Запад) или восемь (компас). Также заметьте, что в одном .dmi файле могут быть только иконки одного определенного размера. Для таких объектов, как сингулярность (которая, набирая силу, увеличивается в размерах), может потребоваться несколько .dmi-файлов.
Редактор карт
Обычно открывается, при запуске DreamMaker или при открытии файла с расширением .dmm. Редактор карт отображает (удивительно!) игровую карту. По умолчанию отображает все 4 основные группы объектов: зоны, мобы, объекты и покрытия. Чтобы выбрать параметры отображения, перейдите на вкладку «Слои» на самой верхней панели инструментов и выберите 'Only show selectable layers' («Показывать только выбираемые слои»), а затем выберите, какие слои вы хотите отображать на той же вкладке. Наиболее часто это используется для скрытия областей наложения. Обратите внимание, что карта не будет отображаться, если в коде .dm есть какие-либо ошибки. Исправьте все ошибки, а затем перекомпилируйте его.
Панель отчета об ошибке
Текстовая панель в нижней части DreamMaker, предназначенная для составления отчетов об ошибках.
Компиляция и запуск
Для компиляции обновленного кода без его запуска, выберите вкладку 'Build' (Сборка) и нажмите 'Compile' (Компилировать). Для компиляции и запуска выберите 'Build' > 'Run'.
Компоненты кода
Переменные
Переменные предназначены для хранения данных. Переменные создаются следующим образом: (без определения значения переменной)
var/i
Чтобы объявить переменную и её значение:
var/i = 5 var/j = "Hello World"
Как только переменная была объявлена, вы можете объявить другую с тем же именем:
var/i i = 2 i = 6 i = 12
Список
Список может быть объявлен одним из трех способов, но переменные, ассоциируемые со списками (len
для получения длины списка), будут доступны только если были объявлены первым способом.
var/list/a var/a[9] var/a = list()
Другие типы
Если вы хотите сохранить монетку где-то в переменных объекта и использовать определенные процедуры или переменные монетки, вам нужно определить переменную, в которой вы храните монету как монету. Второй пример также создает переменную с именем D и заполняет ее новой монетой.
var/obj/item/weapon/coin/C var/obj/item/weapon/coin/D = new/var/obj/item/weapon/coin(src)
Включенные переменные
Переменные, встроенные в сам BYOND и не определяемые нигде в коде:
Атомарные переменные
Клиентские переменные
Datum-переменные
Моб-переменные
Переменные направления (dir)
Север: 1
Юг: 2
Восток: 4
Запад: 8
Северо-восток: 5 (1 + 4)
Юго-Восток: 6 (2 + 4)
Северо-запад: 9 (1 + 8)
Юго-запад: 10 (2 + 8)
Направления пронумерованы таким образом, поскольку используют метод 'bitflag' (битовый флаг). То же в двоичном коде:
0001 для севера
0010 для юга
0100 для востока
1000 для запада
Сложение направлений даст в итоге:
0101 для северо-востока
1001 для северо-запада
0110 для юго-востока
1010 для юго-запада.
Впрочем, другие комбинации (Восток-Запад (1100), Север-Юг (0011), Восток-Северо-Запад (1101) и т.п.) допустимы в особых случаях. (Пример: стены на станции).
Атомарные переменные
Применяются ко всем /obj, /turf, /area, /mob объектам.
Содержимое (Contents): Список объектов, помещаемых в другие объекты. (Баки с плазмой в излучателе, руда в плавильне, и т.п.)
Плотность (Density): Двоичный флаг (0/1): 0 означает возможность пройти через объект, 1 - невозможность преодолеть его
Описание (Desc): Строка - Описание объекта, пишется при подробном осмотре (Examine)
Направление (Dir): 1-10 - Направление объекта
Иконка (Icon): Файл с разрешением .dmi, который содержит спрайт для иконки
Состояние иконки (Icon_state): Название спрайта из файла
Наложения (Overlays): Список изображений, которые наложены на предмет.
Слой (Layer): Если два объекта находятся на одном тайле и у одного из больше номер слоя, то этот объект будет показан над другим.
Координаты (Loc): Позиционирование предмета по X,Y,Z
Свечение (Luminosity): Насколько объект светится?
Название (Name): Название предмета, которое будет отображаться при наведении на него
Прозрачность (Opacity): Можно ли через него видеть?
Смещение по X (Pixel_x), Смещение по Y (pixel_y): Установите, если элемент на карте смещен на несколько пикселей в любую сторону. Используется на ЛКП, Консолях запросов, Пожарных сигнализациях, и т.п.
Тип (Type): Тип - это путь к объекту. У монетки эта переменная примет значение: /obj/item/weapon/coin
Приложенные инструкции
Справочные руководства для прилагаемых инструкций (procs) можно найти по следующим ссылкам:
Area procs
Mob procs
Obj procs
Turf procs
Условные операторы
Условные операторы - это выражения, которые определяют, каким образом будет исполняться код, в зависимости от условия. Чаще всего используется выражение IF (ЕСЛИ).
= и ==
var/a a = 14 if (a == 14) world << "A has the value [a]" else world << "A is not 14"
Одиночный символ равенства = означает присваивание значения справа к переменной слева. (В примере выше переменной a
присваивается значение 14
(a = 14))
Двойной знак равенства == используется для сравнения двух значений. Чаще всего используются именно в выражении IF. В примере выше значение переменной a
сравнивается с 14
(a == 14). Результат сравнения определит, каким образом будет выполняться код.
Выражение IF
В примере был показан простой оператор IF. Оператор IF сначала проверяет, является ли утверждение в скобках (в случае выше a == 14), истинным или нет. Если это правда, он продолжит выполнение кода, который расположен после IF (в приведенном выше случае: world << "A has the value [a]"
). В другом случае, если условие не выполнено, он перейдет к оператору ELSE и выполнит код, который находится после него, если этот оператор присутствует. В примере, если a не равно 14, будет выполнено world << "A is not 14"
Операторы сравнения включают в себя:
== Равенство
!= Неравенство
< Меньше
> Больше
<= Меньше или равно
>= Больше или равно
Выражение SWITCH-CASE
Циклы
Оператор WHILE
Оператор FOR
Оператор FOR для элементов списка (FOREACH)
Процедуры
Что такое объект?
SS13 написана на движке BYOND, который использует одноименный объектно-ориентированный язык программирования. Пожалуйста, заметьте, что под объектом далее понимается не внутриигровые объекты, а сущности, которые объявляются в коде.
Каждый определенный путь в игре может быть объектом. Примеры:
/obj/item/weapon/sword /turf/simulated/floor /area/ /atom/
Объект состоит из переменных и процедур
Пример такого объекта:
/turf/simulated/gold_spot var/spawned_gold = 0 name = "Gold Area" desc = "This plot may have spawned gold!" /turf/simulated/gold_spot/proc/spawn_gold() if(prob(50)) new/obj/item/stack/sheet/gold(src) spawned_gold = 1 /turf/simulated/gold_spot/New() ..() spawn_gold()
Иерархия и наследование
Объекты наследуют все родительские переменные и процедуры. Это означает, что объект, определенный как /obj/item/weapon/storage/box
, имеет все переменные от /obj/item/weapon/storage
, /obj/item/weapon
, /obj/item
, /obj
, а также /atom
, но мы вернемся к этому позже. Некоторые процедуры уже определены для всех объектов, вы можете увидеть их здесь. В приведенном выше примере New()
был экземпляром процедуры, унаследованной от родительского объекта. Вот почему New()
не имеет префикса proc/, потому что он уже определен в родительском объекте. Однако вы должны знать, что New()
был переопределен в этом объекте, поэтому он больше не работает так же, как в родительских объектах, а следует описанной логике.
Пример унаследованной переменной - переменные name
и desc
. Обе были переопределены в дочернем объекте. spawned_gold
же является новой переменной, которая отсутствует у родителя.
Если мы определим следующие два объекта:
/turf/simulated/gold_spot/plot1 /turf/simulated/gold_spot/plot2
то мы определим два потомка объекта /turf/simulated/gold_spot
, которые унаследуют все переменные и процедуры объекта /turf/simulated/gold_spot
, включая те, которые объект /turf/simulated/gold_spot
унаследовала от родителя /turf/simulated
.
..()
..()
- это то, что вы чаще всего будете видеть в коде. В других языках программирования подобная конструкция обычно называется super(), она вызывает процедуру с таким же именем из родительского объекта. В отличие от некоторых языков, он не выполняется автоматически, даже если не добавлен, если только не требуется, чтобы он был в начале процедуры. Обычно они добавляются в процедуры New(), Del() и Attackby(), чтобы получить исходное определение в общем родителе. Эти общие определения обеспечивают правильную работу кода.
Организация основных объектов
/datum /atom /area --Объекты-зоны, которые используются в маппинге для определения пространства, покрываемого ЛКП, освещением, атмосферой и т.д. /mob /dead --госты, призраки, наблюдатели /living /carbon --люди и гуманоиды /silicon --ИИ и киборги /obj /effect --Отметки, триггеры, эффекты и декали /item /clothing --Большая часть надеваемой одежды, ремни и рюкзаки ищите в obj/item/weapon/storage /devices --электронные устройства /stack --складываемые предметы: стержни, плитки и материалы /weapons --Большинство поднимаемых предметов /machinery --машины, используемые электроэнергию, обрабатываются каждый тик и в основном неперемещаемые /structure --Объекты, которые не требуют обрабатывания каждый тик или питания, примеры - окна, решетки, книжные полки, стеллажи и пр. /turf /simulated /floor --полы с атмосферой /airless --полы без атмосферы (ВСЕГДА используйте для зон в открытом космосе) /plating --обшивка с атмосферой /airless --обшивка без атмосферы /wall --стены /r-wall --усиленные стены /space --просто космос /unsimulated --все на ЦК и прочих местах, где движение воздушных масс не симулируется
Как внести свой вклад? | |
---|---|
Общее | Руководство по разработке |
Сервер | Настройка базы данных, Запуск локального сервера |
Код | Структура кода SS13, SS13 для опытных программистов, Форматирование текста, Как делать перевод игры |
Маппинг | Руководство по маппингу |
Спрайтинг | Руководство по спрайтингу |
Вики | Руководство по редактированию вики |