Руководство по редактированию кода игры: различия между версиями

Материал из Celadon | Wiki Shiptest
Перейти к навигации Перейти к поиску
(Новая страница: «{{Important |Title=Hey! Listen! |Note=This resource is quite outdated! A good way to learn Dream Maker/DM Code (the language that SS13 is built on) is by referencing the [https://spacestation13.github.io/DMByExample/hello_world.html DM By Example] page, which contains a lot of useful information for new programmers. Some information in this page is still valid, but may not end up being useful. Do read DM By Example, though. |Image=Notice.png |Color=Red }} O...»)
 
(ВСЁ БЛЕАТЬ, ГОТОВО)
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
{{Important
'''ПРИМЕЧАНИЕ!!''' В этом руководстве термины используются очень своебразно. Опытные программисты, пожалуйста, не придирайтесь по поводу того, что такое объект, что такое метод и так далее. Это руководство предназначено '''исключительно для начинающих программистов.''' Остальные... не читайте.
|Title=Hey! Listen!
|Note=This resource is quite outdated! A good way to learn Dream Maker/DM Code (the language that SS13 is built on) is by referencing the [https://spacestation13.github.io/DMByExample/hello_world.html DM By Example] page, which contains a lot of useful information for new programmers. Some information in this page is still valid, but may not end up being useful. Do read DM By Example, though.
|Image=Notice.png
|Color=Red
}}
 
Other related guides: [[SS13 for experienced programmers]] and [[Guide to mapping]]
 
'''NOTE!!''' This guide uses terms very loosely. Experienced coders, please don't get at me over what an object is and what a method and so forth. This guide is intended '''solely for the new coder.''' The rest of you... don't read it as you'll only get mad at me.


==DreamMaker==
==DreamMaker==


The program you will need for both coding and mapping is made out of six major components. The file tree, the object tree, the text editor, the icons editor, the map editor and the error report panel.
Программа, которая вам понадобится как для кодирования, так и для картографии, состоит из шести основных компонентов. Дерево файлов, дерево объектов, текстовый редактор, редактор иконок, редактор карт и панель отчета об ошибках.


=== File tree ===
=== Древо файлов ===


The file tree can be accessed by choosing the 'File' tab in the left-hand vertical panel. It shows the files which make up the code as they are sorted by folders. Double clicking any file will open it in it's respective editor. If you add a new file to the list (in windows explorer) hit the refresh button to refresh the list. The ticks next to files indicate if they're used in the compiling of the code. A common mistake is to forget to include a new file.
Доступ к дереву файлов можно получить, выбрав вкладку «Файл» на левой вертикальной панели. Он показывает файлы, составляющие код, отсортированные по папкам. Двойной щелчок по любому файлу откроет его в соответствующем редакторе. Если вы добавите новый файл в список (в проводнике Windows), нажмите кнопку «Обновить», чтобы обновить список. Галочки рядом с файлами указывают, используются ли они при компиляции кода. Распространенная ошибка — забыть включить новый файл.


=== Objects tree ===
=== Древо объектов ===


What an object is is explained [[#What is an object?|further down]] in this guide, but for now we can say it contains a list of things, which you can place on the map. They are arranged in a hierarchy. This is also explained and described further down in the guide. The update button at the bottom will update the tree with new sprites and objects, if they have been added in any of the ticked .dm files.
Что такое объект, объясняется [[Руководство по редактированию кода игры#What is an object?|далее]] в этом руководстве ниже, но сейчас мы можем сказать, что он содержит список объектов, которые вы можете разместить на карте. Они расположены в иерархии. Это также объясняется и описывается далее в руководстве. Кнопка обновления внизу обновит дерево новыми спрайтами и объектами, если они были добавлены в любой из отмеченных галочкой файлов .dm.


=== Text editor ===
=== Редактор текста ===


This editor is accessed whenever you open a file with the extension ".dm". It is intended for the writing and editing of the game code.
Доступ к этому редактору осуществляется всякий раз, когда вы открываете файл с расширением «.dm». Предназначен для написания и редактирования кода игры.


=== Icons editor ===
=== Редактор иконок ===


Intended for the editing of icon states and icons, it is accessed when you open a ".dmi" file. It displays a list of all the sprites (often called icon states) which are in the file. Rightclicking anywhere will yield the options to create a new movie or pixmap. A pixmap is a static image, while a movie is either an icon state which can point in several different directions (often called dirs) or is animated. The movie can have either 1 (south), 4 (NSEW) or 8 directions (full compass). Also note that a .dmi file may only have icons of a certain size. In the case of the singularity, which grows as it gains power, several .dmi files are needed.
Предназначен для редактирования состояний и значков значков, доступ к нему осуществляется при открытии файла «.dmi». Он отображает список всех спрайтов (часто называемых состояниями значков), которые находятся в файле. Щелчок правой кнопкой мыши в любом месте даст возможность создать новый кадр или растровое изображение. Пиксельное изображение — это статическое изображение, а кадр — это либо состояние значка, которое может указывать в нескольких разных направлениях (часто называемых каталогами), либо анимация. кадр может иметь 1 (юг), 4 (северо-запад) или 8 направлений (полный компас). Также обратите внимание, что файл .dmi может содержать значки только определенного размера. В случае сингулярности, которая растет по мере набора мощности, необходимо несколько файлов .dmi.


=== Map editor ===
=== Редактор карты ===


Usually opened at startup or when opening a ".dmm" map file, the map editor displays the map. By default it displays all 4 major groups: area, mob, object and turf. To choose the specifics of what to display, hit the layers tab in the top-most toolbar and select 'Only show selectable layers' and then choose which layers you want to be shown in the same (layers) tab. (Most commonly used to hide the areas overlay). Note that the map will not display if there are any errors in the .dm code. Correct any errors and then recompile it.
Обычно открывается при запуске или при открытии файла карты «.dmm». Редактор карт отображает карту. По умолчанию отображаются все 4 основные группы: территория, моб, объект и территория. Чтобы выбрать особенности отображения, перейдите на вкладку «Слои» на самой верхней панели инструментов и выберите «Показывать только выбираемые слои», а затем выберите, какие слои вы хотите отображать на той же вкладке (слои). (Чаще всего используется для скрытия наложения областей). Обратите внимание: карта не будет отображаться, если в коде .dm есть ошибки. Исправьте все ошибки и затем перекомпилируйте его.


=== Error report panel ===
=== Панель отчётов об ошибках ===


A text-based panel at the bottom of DreamMaker, the error report panel is intended to provide compiling error reports.
Текстовая панель в нижней части DreamMaker. Панель отчетов об ошибках предназначена для составления отчетов об ошибках.


=== Compile and run ===
=== Скомпилировать и запустить ===


To compile updated code without running it, select the 'build' tab in the uppermost toolbar and choose 'compile'. To compile and run hit the 'run' button in the same tab.
Чтобы скомпилировать обновленный код, не запуская его, выберите вкладку «Сборка» на самой верхней панели инструментов и выберите «Компилировать». Чтобы скомпилировать и запустить, нажмите кнопку «Выполнить» на той же вкладке.


==Code components==
==Компоненты кода==


===Variables===
===Переменные===
[http://www.byond.com/members/?command=reference&path=var reference]
[http://www.byond.com/members/?command=reference&path=var reference]


Variables are intended to store data. Variables are created like this: (creates variable with no defined value)
Переменные предназначены для хранения данных. Переменные создаются следующим образом: (создает переменную без определенного значения) var/i
var/i


To define a value in declaration do this:
Чтобы определить значение в объявлении, сделайте следующее:
   var/i = 5
   var/i = 5
or
или
   var/i = "Hello World"
   var/i = "Hello World"


Once a variable has been defined, you cannot define another one with the same name:
После того как переменная определена, вы не можете определить другую с тем же именем:
   var/i
   var/i
   i = 2
   i = 2
Строка 61: Строка 51:
   i = 12
   i = 12


==== List ====
==== Лист или список ====
[http://www.byond.com/members/?command=reference&path=list reference]
[http://www.byond.com/members/?command=reference&path=list reference]


A list can be defined as either of the three, but special variables associated with lists (such as len for length) will only be available if you use the first declaration.
Список может быть определен как любой из трех, но специальные переменные, связанные со списками (например, len для длины), будут доступны только в том случае, если вы используете первое объявление.
   var/list/a
   var/list/a
   var/a[9]
   var/a[9]
   var/a = list()
   var/a = list()


==== Other Types ====
==== Другие типы ====


If you wish to store a coin in somewhere in the variables of an object and use the coin's defined procs or variables, you'll have to define the variable in which you store the coin as a coin. The second example also creates a variable called D and sets it to a new coin.
Если вы хотите сохранить монету где-то в переменных объекта и использовать определенные для нее процедуры или переменные, вам придется определить переменную, в которой вы храните монету, как монету. Во втором примере также создается переменная с именем 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)


==== Included variables ====
==== Встроенные переменные ====


Variables which are built into byond itself and are not defined anywhere in code:
Переменные, которые встроены в себя и не определены нигде в коде:<br>[http://www.byond.com/members/?command=reference&path=atom%2Fvar Atom vars]
<br>[http://www.byond.com/members/?command=reference&path=atom%2Fvar Atom vars]
<br>[http://www.byond.com/members/?command=reference&path=client%2Fvar Client vars]
<br>[http://www.byond.com/members/?command=reference&path=client%2Fvar Client vars]
<br>[http://www.byond.com/members/?command=reference&path=datum%2Fvar Datum vars]
<br>[http://www.byond.com/members/?command=reference&path=datum%2Fvar Datum vars]
<br>[http://www.byond.com/members/?command=reference&path=mob%2Fvar Mob vars]
<br>[http://www.byond.com/members/?command=reference&path=mob%2Fvar Mob vars]


===== Direction (dir) var =====
===== Переменные направления (dir) =====
[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdir reference]
[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdir reference]


'''North:''' 1<br>
'''Север:''' 1
'''South:''' 2<br>
 
'''East:''' 4<br>
'''Юг:''' 2
'''West:''' 8<br>
 
'''Northeast:''' 5 (1 + 4)<br>
'''Восток:''' 4
'''Southeast:''' 6 (2 + 4)<br>
 
'''Northwest:''' 9 (1 + 8)<br>
'''Запад:''' 8
'''Southwest:''' 10 (2 + 8)<br>
 
'''Северо-восток:''' 5 (1 + 4)


They are numbered like this because dir uses the 'bitflag' methodology. You can read more about bitflags [[Binary_flags|here.]]  It is defined in binary, so...
'''Юго-восток:''' 6 (2 + 4)


'''0001''' is north<br>
'''Северо-запад:''' 9 (1 + 8)
'''0010''' is south<br>
'''0100''' is east<br>
'''1000''' is west


Combining these numbers yields north-east (0101), north-west (1001), south-east (0110) and south-west (1010). Tho other combinations (east-west(1100), north-south (0011), north-east-west (1101) and such) are possible for special uses. Smoothwall code is an example.
'''Юго-запад:''' 10 (2 + 8)
 
<br>Они пронумерованы так, потому что dir использует методологию «битового флага». Подробнее о битовых флагах можно прочитать [[Binary flags|здесь.]] Он определен в двоичном формате, поэтому...
 
'''0001''' — север
 
'''0010''' — юг
 
'''0100''' — восток
 
'''1000''' — запад
 
Объединение этих чисел дает северо-восток (0101), северо-запад (1001), юго-восток (0110) и юго-запад (1010). Для особых целей возможны и другие комбинации (восток-запад (1100), север-юг (0011), северо-восток-запад (1101) и т. д.). Код Smoothwall является примером.


===== Atom vars =====
===== Atom vars =====


These apply to all /obj, /turf, /area, /mob -type objects.
Они применяются ко всем объектам типа /obj, /turf, /area, /mob.
 
'''Содержание :''' Список объектов, вставленных в другой объект. (плазменные резервуары в радиационных массивах, руда в плавильном заводе и т. д.)
 
'''Плотность :''' 0/1 — 0 означает, что ваш моб может пройти сквозь (или пройти), 1 означает, что вы не можете
 
'''Desc :''' string — Описание, отображаемое при осмотре
 
'''Dir :''' 1- 10 — направление, в котором смотрит объект
 
'''. Icon :''' файл .dmi, содержащий спрайт для значка.
 
'''Icon_state :''' имя спрайта в файле из Icon
 
'''Overlays :''' список изображений, наложенных на элемент.
 
'''Слой :''' если два объекта находятся на одной плитке и один из них имеет более высокий номер слоя, чем другой, тот, у которого более высокий номер, будет отображаться так же, как и объект с меньшим. Loc:
 
'''Позиционирование элемента''' по X,Y,Z.
 
'''Яркость :''' Насколько он светится?
 
'''Имя :''' имя, отображаемое при наведении указателя мыши на элемент.
 
'''Непрозрачность :''' можно ли видеть сквозь него?
 
'''Pixel_x , Pixel_y :''' устанавливается, если элемент на карте сдвинут на несколько пикселей в обе стороны. Используется с APC, консолями запросов, пожарной сигнализацией и т. д.


'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fcontents Contents]: '''List of objects which are inserted into another object. (plasma tanks in radiation arrays, ore in the smelter, etc.)
'''Тип :''' Тип — путь к объекту. Для монеты переменная типа будет иметь значение: /obj/item/weapon/coin.
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdensity Density]: '''0/1 - 0 means your mob can pass through (or over), 1 means you cannot
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdesc Desc]: '''string - Description, displayed upon examine
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fdir Dir]: '''1-10 - the direction the object is facing
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Ficon Icon]: '''The .dmi file which contains the sprite for the icon
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Ficon_state Icon_state]: '''The name of the sprite in the file from Icon
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Foverlays Overlays]: '''A list of images which are overlayed on the item.
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Flayer Layer]: '''If two objects are on the same tile and one has a higher layer number than the other, the one with the higher will be shown as above the one with the lower
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Floc Loc]: '''The X,Y,Z positioning of an item
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fluminosity Luminosity]: '''How much does it glow?
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fname Name]: '''The name, displayed when you hover your mouse over the item
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fopacity Opacity]: '''Can you see through it?
<br>'''[http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fpixel_x Pixel_x], [http://www.byond.com/members/?command=reference&path=atom%2Fvar%2Fpixel_y pixel_y]: '''Set if the item on the map is nudged a few pixels to either side. Used with APC's, Request Consoles, Fire alarms, etc.
<br>'''[http://www.byond.com/members/?command=reference&path=datum%2Fvar%2Ftype Type]: '''Type is the path of the object. A coin would have it's type variable set to: /obj/item/weapon/coin


=== Included instructions ===
=== Встроенные инструкции ===


Reference guides for included instructions (proc-s) can be found at the following links:
Справочные руководства для включенных инструкций (proc-s) можно найти по следующим ссылкам:
<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=obj%2Fproc Obj procs]
<br>[http://www.byond.com/members/?command=reference&path=obj%2Fproc Turf procs]


=== Conditionals ===
Процедуры областей


Conditionals are statements which determine how the code will be executed, depending on a condition. The most common conditional is the IF statement
Процедуры мобов
 
Объекты
 
Процедуры турфов
 
=== Операторы ===
 
Условные операторы — это операторы, которые определяют, как будет выполняться код в зависимости от условия. Наиболее распространенным условием является оператор IF.


==== = vs. == ====
==== = vs. == ====
Строка 140: Строка 156:
   a = 14
   a = 14
   if (a == 14)
   if (a == 14)
     world << "A has the value [a]"
     world << "A имеет значение [a]"
   else
   else
     world << "A is not 14"
     world << "A не равняется 14"


As in the example above, the single = means you assign the value on the right to the variable on the left. In the example above, the variable a was assigned the value 14 (a = 14)
Как и в примере выше, одиночный = означает, что вы присваиваете значение справа переменной слева. В приведенном выше примере переменной a было присвоено значение 14 (a = 14).


The double == is used to compare two values. It's most commonly used in the if statement. In the example above you can see we compared the variable a to 14 (a == 14). This determines how the if will react.
Двойной == используется для сравнения двух значений. Чаще всего он используется в операторе if. В приведенном выше примере вы можете видеть, что мы сравнили переменную a с 14 (a == 14). Это определяет, как будет реагировать if.


Comparison Operators
[https://www.byond.com/members/?command=reference&path=proc%2Fif Справочник по операторам сравнения]
[http://www.byond.com/members/?command=reference&path=proc%2Fif reference]


The example shows a simple if statement. If statements work by first checking if the statement in the brackets, in the case above a == 14, is true or not. If it's true, it will proceed to execute the code, which is further indented from the if (in the case above: world << "A has the value [a]"). In the other case, if the statement is not true, it will jump to the else statement and execute the code, which is indented from that. It will only jump to the else statement if one is present. In the example, if a was not 14, it would execute world << "A is not 14"
В примере показан простой оператор if. Операторы if работают, сначала проверяя, является ли утверждение в скобках (в приведенном выше случае == 14) истинным или нет. Если это правда, он приступит к выполнению кода, который имеет дополнительный отступ от if (в приведенном выше случае: world << «A имеет значение [a]»). В другом случае, если утверждение неверно, он перейдет к оператору else и выполнит код, отступ от которого находится. Он перейдет к оператору else только в том случае, если он присутствует. В этом примере, если a не равно 14, будет выполнено world << "A is not 14"


Comparison operators include:
К операторам сравнения относятся:
<br>'''==''' Is Equal To
<br>'''!=''' Is Not Equal To
<br>'''<''' Less than
<br>'''>''' More than
<br>'''<=''' Less or equal
<br>'''>=''' More or equal


==== Switch-case statement ====
'''==''' Равно
[http://www.byond.com/members/?command=reference&path=proc%2Fswitch reference]


=== Loops ===
'''!=''' Не равно
 
'''<''' Меньше
 
'''>''' Больше чем
 
'''<=''' Меньше или равно
 
'''>=''' Больше или равно
 
==== Оператор switch ====
[http://www.byond.com/members/?command=reference&path=proc%2Fswitch ссылка]
 
=== Петли ===


==== While ====
==== While ====
[http://www.byond.com/members/?command=reference&path=proc%2Fwhile reference]
[http://www.byond.com/members/?command=reference&path=proc%2Fwhile ссылка]


==== For ====
==== For ====
[http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Floop reference]
[http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Floop ссылка]


==== For (foreach) ====
==== For (foreach) ====
[http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Flist reference]
[http://www.byond.com/members/?command=reference&path=proc%2Ffor%2Flist ссылка]


=== Procs ===
=== Процедуры ===
[http://www.byond.com/members/?command=reference&path=proc reference]
[http://www.byond.com/members/?command=reference&path=proc ссылка]


==What is an object?==
==Что такое объект?==


SS13 is coded in Byond, which is an object oriented programming language. Please note that by object here i do not mean an item or machine in-game. For this intro alone i will speak of objects as I'll define them here.
SS13 написан на Byond, объектно-ориентированном языке программирования. Обратите внимание, что под объектом я не имею в виду внутриигровой предмет или машину. Только в этом вступлении я буду говорить об объектах так, как я их здесь определяю.


An object can be any defined path in the game. Examples include:
Объектом может быть любой определенный путь в игре. Примеры включают в себя:
   /obj/item/weapon/sword
   /obj/item/weapon/sword
   /turf/simulated/floor
   /turf/simulated/floor
Строка 188: Строка 209:
   /atom/
   /atom/


An object is made out of both [[#Variables|variables]] and [[#Procs|procs]]
Объект состоит из [[Руководство по редактированию кода игры#Variables|переменных]] и [[Руководство по редактированию кода игры#Procs|процедур.]]
 
Here's an example of an object:


Вот пример объекта:
   /turf/simulated/gold_spot
   /turf/simulated/gold_spot
     var/spawned_gold = 0
     var/spawned_gold = 0
     name = "Gold Area"
     name = "Зона золота"
     desc = "This plot may have spawned gold!"
     desc = "Этот узел может спавнить золото!"
    
    
   /turf/simulated/gold_spot/proc/spawn_gold()
   /turf/simulated/gold_spot/proc/spawn_gold()
Строка 206: Строка 226:
     spawn_gold()
     spawn_gold()


=== Hierarchy and Inheritance ===
=== Иерархия и наследование ===


Objects inherit all it's parent's variables and procs. This means that an object defined as /obj/item/weapon/storage/box has all the variables of /obj/item/weapon/storage, /obj/item/weapon, /obj/item, /obj and also /atom, but we'll get to that one later. Some procs are already defined for all objects, you can see these [http://www.byond.com/members/?command=reference&path=atom%2Fproc here]. In the above example, New() was an instance of a proc which was inherited from the parent object. This is why New() does not have the proc/ prefix, because it is already defined in the parent object. You should however know that New() was redefined here, so it no longer acts the same way as in the parent objects.  
Объекты наследуют все переменные и процедуры своего родителя. Это означает, что объект, определенный как /obj/item/weapon/storage/box, имеет все переменные /obj/item/weapon/storage, /obj/item/weapon, /obj/item, /obj, а также /atom, но мы вернемся к этому позже. Некоторые процедуры уже определены для всех объектов, их можно увидеть [https://www.byond.com/members/?command=reference&path=atom%2Fproc здесь] . В приведенном выше примере New() был экземпляром процедуры, унаследованной от родительского объекта. Вот почему New() не имеет префикса proc/, поскольку он уже определен в родительском объекте. Однако вы должны знать, что New() здесь был переопределен, поэтому он больше не действует так же, как в родительских объектах.  


An example of an inherited variable are the name and desc (description) variables. Both were redefined tho. spawned_gold, however, is a new variable. One which the parent proc does not have.
Примером наследуемой переменной являются переменные name и desc (описание). Оба были переопределены. Однако spawned_gold — это новая переменная. Тот, которого нет у родительской процедуры.


If we define the following two objects...
Если мы определим следующие два объекта...
   /turf/simulated/gold_spot/plot1
   /turf/simulated/gold_spot/plot1
   /turf/simulated/gold_spot/plot2
   /turf/simulated/gold_spot/plot2
...we just defined two child objects of /turf/simulated/gold_spot and they inherited all the procs and vars that /turf/simulated/gold_spot has including all those which /turf/simulated/gold_spot inherited from their parent (/turf/simulated).
..., то два дочерних объекта /turf/simulated/gold_spot, только что унаследовали все процессы и переменные, которые /turf/simulated/gold_spot имеет, включая все те, которые /turf/simulated/gold_spot унаследовали от своего родителя (/turf/).


=== ..() ===
=== ..() ===


   ..()
   ..()
is something you will often see in the code. In other languages this is usually called super(), it calls the parent object's proc with the same name. Unlike some languages it is not automatically executed even if not added, nor is it required to be at the proc's start. These are usually added in New(), Del() and Attackby() procs to get to the original definition in the common parent. These common definitions usually ensure things are properly handled.
это то, что вы часто будете видеть в коде. На других языках это обычно называется super(), он вызывает процедуру родительского объекта с тем же именем. В отличие от некоторых языков, он не запускается автоматически, даже если не добавлен, и не требуется, чтобы он находился в начале процесса. Обычно они добавляются в процедуры New(), Del() и Attackby(), чтобы получить исходное определение в общем родителе. Эти общие определения обычно обеспечивают правильное обращение с ситуацией.
 
==Area, Mob, Obj and Turf organization==
 
  /datum
    /atom
      /area --All objects in here are areas, which are used in mapping to define the extent of an APC's power coverage, lighting, atmos, etc.
      /mob
        /dead --ghosts
        /living
          /carbon --humans and monkeys
          /silicon --AI and cyborgs
      /obj
        /effect --Landmarks, trigger objects, effects and decals
        /item
          /clothing --most of the clothing you can wear, belts and backpacks are in obj/item/weapon/storage
          /devices --electronic devices
          /stack --the things which you can stack, such as rods, floor tiles and materials
          /weapons --most items which you can pick up
        /machinery --machines which use power, process every tick and are generally unmovable
        /structure --objects which don't require processing every tick or power, examples include windows, grilles, bookcases etc.
      /turf
        /simulated
          /floor --floors with air
            /airless --floors without air (ALWAYS use these for areas exposed to space)
            /plating --plating
              /airless --airless plating
          /wall --walls
            /r-wall --reinforced walls
        /space --it's space
        /unsimulated --everything used on centcom and places where air movement is not simulated.


==Организация Зон, Мобов, Объектов и турфов==


{{Contribution guides}}
/datum
    /atom
      /area -- Все объекты здесь представляют собой области, которые используются при картографировании для определения степени энергетического покрытия ЛКП, освещения, атмосферы и т. д.
      /mob
        /dead -- призраки/госты
        /living
          /carbon -- люди и обезьяны
          /silicon -- ИИ и киборги
      /obj
        /effect -- Ориентиры, триггерные объекты, эффекты и наклейки
        /item
          /clothing -- бОльшая часть одежды, которую вы можете носить, ремни и рюкзаки находятся в obj/item/weapon/storage
          /devices -- электронные устройства
          /stack -- вещи, которые можно складывать друг в друга, например стержни, напольная плитка и материалы
          /weapons -- большинство предметов, которые можно подобрать
        /machines -- машины, которые используют энергию, обрабатывают каждый такт и, как правило, не сдвигаемые
        /structure -- объекты, которые не требуют обработки каждого такта или мощности, примеры включают окна, решетки, книжные шкафы и т. д.
      /turf
        /simulated
          /floor -- полы с воздухом
            /airless --полы без воздуха (ВСЕГДА используйте их для помещений подвергающиеся воздействию космоса)
            /plating -- обшивка
              /airless --безвоздушное покрытие
          /wall --walls
            /r-wall -- укреплённые стены
        /space -- это космос
        /unimulated --все, что используется в Центкоме и в местах, где движение воздуха не моделируется.

Текущая версия от 02:42, 13 октября 2023

ПРИМЕЧАНИЕ!! В этом руководстве термины используются очень своебразно. Опытные программисты, пожалуйста, не придирайтесь по поводу того, что такое объект, что такое метод и так далее. Это руководство предназначено исключительно для начинающих программистов. Остальные... не читайте.

DreamMaker

Программа, которая вам понадобится как для кодирования, так и для картографии, состоит из шести основных компонентов. Дерево файлов, дерево объектов, текстовый редактор, редактор иконок, редактор карт и панель отчета об ошибках.

Древо файлов

Доступ к дереву файлов можно получить, выбрав вкладку «Файл» на левой вертикальной панели. Он показывает файлы, составляющие код, отсортированные по папкам. Двойной щелчок по любому файлу откроет его в соответствующем редакторе. Если вы добавите новый файл в список (в проводнике Windows), нажмите кнопку «Обновить», чтобы обновить список. Галочки рядом с файлами указывают, используются ли они при компиляции кода. Распространенная ошибка — забыть включить новый файл.

Древо объектов

Что такое объект, объясняется далее в этом руководстве ниже, но сейчас мы можем сказать, что он содержит список объектов, которые вы можете разместить на карте. Они расположены в иерархии. Это также объясняется и описывается далее в руководстве. Кнопка обновления внизу обновит дерево новыми спрайтами и объектами, если они были добавлены в любой из отмеченных галочкой файлов .dm.

Редактор текста

Доступ к этому редактору осуществляется всякий раз, когда вы открываете файл с расширением «.dm». Предназначен для написания и редактирования кода игры.

Редактор иконок

Предназначен для редактирования состояний и значков значков, доступ к нему осуществляется при открытии файла «.dmi». Он отображает список всех спрайтов (часто называемых состояниями значков), которые находятся в файле. Щелчок правой кнопкой мыши в любом месте даст возможность создать новый кадр или растровое изображение. Пиксельное изображение — это статическое изображение, а кадр — это либо состояние значка, которое может указывать в нескольких разных направлениях (часто называемых каталогами), либо анимация. кадр может иметь 1 (юг), 4 (северо-запад) или 8 направлений (полный компас). Также обратите внимание, что файл .dmi может содержать значки только определенного размера. В случае сингулярности, которая растет по мере набора мощности, необходимо несколько файлов .dmi.

Редактор карты

Обычно открывается при запуске или при открытии файла карты «.dmm». Редактор карт отображает карту. По умолчанию отображаются все 4 основные группы: территория, моб, объект и территория. Чтобы выбрать особенности отображения, перейдите на вкладку «Слои» на самой верхней панели инструментов и выберите «Показывать только выбираемые слои», а затем выберите, какие слои вы хотите отображать на той же вкладке (слои). (Чаще всего используется для скрытия наложения областей). Обратите внимание: карта не будет отображаться, если в коде .dm есть ошибки. Исправьте все ошибки и затем перекомпилируйте его.

Панель отчётов об ошибках

Текстовая панель в нижней части DreamMaker. Панель отчетов об ошибках предназначена для составления отчетов об ошибках.

Скомпилировать и запустить

Чтобы скомпилировать обновленный код, не запуская его, выберите вкладку «Сборка» на самой верхней панели инструментов и выберите «Компилировать». Чтобы скомпилировать и запустить, нажмите кнопку «Выполнить» на той же вкладке.

Компоненты кода

Переменные

reference

Переменные предназначены для хранения данных. Переменные создаются следующим образом: (создает переменную без определенного значения) var/i

Чтобы определить значение в объявлении, сделайте следующее:

 var/i = 5

или

 var/i = "Hello World"

После того как переменная определена, вы не можете определить другую с тем же именем:

 var/i
 i = 2
 i = 6
 i = 12

Лист или список

reference

Список может быть определен как любой из трех, но специальные переменные, связанные со списками (например, 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)

Встроенные переменные

Переменные, которые встроены в себя и не определены нигде в коде:
Atom vars
Client vars
Datum vars
Mob vars

Переменные направления (dir)

reference

Север: 1

Юг: 2

Восток: 4

Запад: 8

Северо-восток: 5 (1 + 4)

Юго-восток: 6 (2 + 4)

Северо-запад: 9 (1 + 8)

Юго-запад: 10 (2 + 8)


Они пронумерованы так, потому что dir использует методологию «битового флага». Подробнее о битовых флагах можно прочитать здесь. Он определен в двоичном формате, поэтому...

0001 — север

0010 — юг

0100 — восток

1000 — запад

Объединение этих чисел дает северо-восток (0101), северо-запад (1001), юго-восток (0110) и юго-запад (1010). Для особых целей возможны и другие комбинации (восток-запад (1100), север-юг (0011), северо-восток-запад (1101) и т. д.). Код Smoothwall является примером.

Atom vars

Они применяются ко всем объектам типа /obj, /turf, /area, /mob.

Содержание : Список объектов, вставленных в другой объект. (плазменные резервуары в радиационных массивах, руда в плавильном заводе и т. д.)

Плотность : 0/1 — 0 означает, что ваш моб может пройти сквозь (или пройти), 1 означает, что вы не можете

Desc : string — Описание, отображаемое при осмотре

Dir : 1- 10 — направление, в котором смотрит объект

. Icon : файл .dmi, содержащий спрайт для значка.

Icon_state : имя спрайта в файле из Icon

Overlays : список изображений, наложенных на элемент.

Слой : если два объекта находятся на одной плитке и один из них имеет более высокий номер слоя, чем другой, тот, у которого более высокий номер, будет отображаться так же, как и объект с меньшим. Loc:

Позиционирование элемента по X,Y,Z.

Яркость : Насколько он светится?

Имя : имя, отображаемое при наведении указателя мыши на элемент.

Непрозрачность : можно ли видеть сквозь него?

Pixel_x , Pixel_y : устанавливается, если элемент на карте сдвинут на несколько пикселей в обе стороны. Используется с APC, консолями запросов, пожарной сигнализацией и т. д.

Тип : Тип — путь к объекту. Для монеты переменная типа будет иметь значение: /obj/item/weapon/coin.

Встроенные инструкции

Справочные руководства для включенных инструкций (proc-s) можно найти по следующим ссылкам:

Процедуры областей

Процедуры мобов

Объекты

Процедуры турфов

Операторы

Условные операторы — это операторы, которые определяют, как будет выполняться код в зависимости от условия. Наиболее распространенным условием является оператор IF.

= vs. ==

 var/a
 a = 14
 if (a == 14)
   world << "A имеет значение [a]"
 else
   world << "A не равняется 14"

Как и в примере выше, одиночный = означает, что вы присваиваете значение справа переменной слева. В приведенном выше примере переменной a было присвоено значение 14 (a = 14).

Двойной == используется для сравнения двух значений. Чаще всего он используется в операторе if. В приведенном выше примере вы можете видеть, что мы сравнили переменную a с 14 (a == 14). Это определяет, как будет реагировать if.

Справочник по операторам сравнения

В примере показан простой оператор if. Операторы if работают, сначала проверяя, является ли утверждение в скобках (в приведенном выше случае == 14) истинным или нет. Если это правда, он приступит к выполнению кода, который имеет дополнительный отступ от if (в приведенном выше случае: world << «A имеет значение [a]»). В другом случае, если утверждение неверно, он перейдет к оператору else и выполнит код, отступ от которого находится. Он перейдет к оператору else только в том случае, если он присутствует. В этом примере, если a не равно 14, будет выполнено world << "A is not 14"

К операторам сравнения относятся:

== Равно

!= Не равно

< Меньше

> Больше чем

<= Меньше или равно

>= Больше или равно

Оператор switch

ссылка

Петли

While

ссылка

For

ссылка

For (foreach)

ссылка

Процедуры

ссылка

Что такое объект?

SS13 написан на Byond, объектно-ориентированном языке программирования. Обратите внимание, что под объектом я не имею в виду внутриигровой предмет или машину. Только в этом вступлении я буду говорить об объектах так, как я их здесь определяю.

Объектом может быть любой определенный путь в игре. Примеры включают в себя:

 /obj/item/weapon/sword
 /turf/simulated/floor
 /area/
 /atom/

Объект состоит из переменных и процедур.

Вот пример объекта:

 /turf/simulated/gold_spot
   var/spawned_gold = 0
   name = "Зона золота"
   desc = "Этот узел может спавнить золото!"
 
 /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/).

..()

 ..()

это то, что вы часто будете видеть в коде. На других языках это обычно называется super(), он вызывает процедуру родительского объекта с тем же именем. В отличие от некоторых языков, он не запускается автоматически, даже если не добавлен, и не требуется, чтобы он находился в начале процесса. Обычно они добавляются в процедуры New(), Del() и Attackby(), чтобы получить исходное определение в общем родителе. Эти общие определения обычно обеспечивают правильное обращение с ситуацией.

Организация Зон, Мобов, Объектов и турфов

/datum 
   /atom 
     /area -- Все объекты здесь представляют собой области, которые используются при картографировании для определения степени энергетического покрытия ЛКП, освещения, атмосферы и т. д. 
     /mob 
       /dead -- призраки/госты
       /living 
         /carbon -- люди и обезьяны 
         /silicon -- ИИ и киборги 
     /obj 
       /effect -- Ориентиры, триггерные объекты, эффекты и наклейки 
       /item 
         /clothing -- бОльшая часть одежды, которую вы можете носить, ремни и рюкзаки находятся в obj/item/weapon/storage 
         /devices -- электронные устройства 
         /stack -- вещи, которые можно складывать друг в друга, например стержни, напольная плитка и материалы 
         /weapons -- большинство предметов, которые можно подобрать 
       /machines -- машины, которые используют энергию, обрабатывают каждый такт и, как правило, не сдвигаемые
       /structure -- объекты, которые не требуют обработки каждого такта или мощности, примеры включают окна, решетки, книжные шкафы и т. д. 
     /turf 
       /simulated 
         /floor -- полы с воздухом 
           /airless --полы без воздуха (ВСЕГДА используйте их для помещений подвергающиеся воздействию космоса) 
           /plating -- обшивка
             /airless --безвоздушное покрытие 
         /wall --walls 
           /r-wall -- укреплённые стены 
       /space -- это космос 
       /unimulated --все, что используется в Центкоме и в местах, где движение воздуха не моделируется.