С чего начинается
Конечно же нужно для начала проставить галочку�build -> preferences -> auto FILEDIR в Dream Maker (Все спрайты лежат в одной папке и нет нужды прописывать точный путь к файлам! Удобно!)
Структура
Вот файловая структура, как тут все устроено? Иерархически.
Основные папки: ATMOS, ATOM, DATUM, ICONS, SOUNDS, SYSTEM.
Основные файлы: dbay3302.dme, dbay3302.dmb, isometris.dm, skin.dmf
Остальное не трогайте.
ATMOS
ATMOS состоит из двух основных папок
ATMOSPHERICS и ZAS, первая хранит в себе всю атмосную машинерию, вторая саму систему атмоса, взаимодействие с турфами, зонами. Вот, главное, что тут нужно понимать.
ATOM: A-AREA T-TURFS O-OBJECTS M-MOBS
Собственно, все объекты, которые могут быть помещены на карту. Делится в данном случае на четыре важные составляющие, как вы могли догадаться из названия. Далее рассмотрим подробнее каждую составляющую.
AREA
Зоны, я их не трогал, по сути из важного там только зона шаттла.
И этого кода там совсем немного(AREAS/area.dm)
/proc/send_supply_shuttle()
var/shuttleat = supply_shuttle_at_station ? SUPPLY_STATION_AREATYPE : SUPPLY_DOCK_AREATYPE //зона отправки (проверка, есть ли в этой зоне шаттл)
var/shuttleto = !supply_shuttle_at_station ? SUPPLY_STATION_AREATYPE : SUPPLY_DOCK_AREATYPE //зона доставки (проверка, есть ли в этой зоне шаттл)
var/area/from = locate(text2path(shuttleat)) //грубо говоря, в shuttleat мы прописываем зону отправки
var/area/dest = locate(text2path(shuttleto)) //а сюда доставки
if(!from || !dest) return //если этих зон нет(хотя бы одной), то ничего не произойдет
from.move_contents_to(dest) //переносим полностью все содержимое одной зоны в другую
supply_shuttle_at_station = !supply_shuttle_at_station //говорим, что шаттл улетел
MOB
Мобы, вообще особенность моей изометрии в том, что файловая структура и структура дерева объектов очень и очень схожи. И это лучше всего можно отследить по папке MOB.
Папка GHOST - содержит код призраков.
Папка SIMULATED - содержит код тех мобов, которые обрабатываются игрой все время, пока длится раунд или моб не помрет
SYSTEM - пока пуста
MOB иерархия
Суть в чем, иерархия мобов представляет из себя:
MOB (1)
SIMULATED(2) GHOST(3) NEW_PLAYER(4)
LIVING (5)
ANIMAL(6) HUMANOID(7)
HUMAN(8)
5. Живой. Значит обладающий рядом свойств, умеет дышать, ходить, получать урон, имеет органы.
6. Животное, не умеет пользоваться подавляющим количеством вещей на станции.
7. Гуманоид. Разумное существо, умеет пользоваться подавляющим большинством вещей на станции.
8. Человек, подвид гуманоида.
SIMULATED свойства
Это свойства, которыми обладают
симулируемые мобы. Также часть HUD’а тоже
там.
/mob/simulated
var/bodytemperature = 310.055 //температура тела
var/oxyloss = 0.0 // Кислородный урон
var/toxloss = 0.0 // Токсичный урон
var/brainloss = 0.0 //не работает, забейте
var/ear_deaf = null //не работает, забейте
var/face_dmg = 0 //не работает, забейте
var/halloss = 0 //не работает, забейте
var/hallucination = 0 //не работает, забейте
var/list/atom/hallucinations = list() //не работает, забейте
var/health = 100 //общее здоровье в процентах(от суммы урона всем частям тела)
var/damage_bonus = 0 //модификатор урона (меняется динамически)
var/defense = 5 // модификатор защиты(тоже динамический)
var/revenge = 0 //не работает
var/nodamage = 0 //не работает
var/atom/movable/pulling = null //перетаскиваемый объект пуллом
var/list/stomach_contents = list() //не работает
var/nutrition = 400.0 //сытость
var/mob/my_last_looting //служебный
var/image/overlay_cur //оверлей при say
Функции SIMULATED
MouseDrop_T(mob/simulated/living/humanoid/target, mob/user) + Topic(href, href list) -- Связка, которая работает для лута мобов
verb/Say(msg as text) -- Верб, который позволяет мобам разговаривать
Emote(msg as text) -- Эмоуты
death() -- прок, который обрабатывает смерть персонажа
verb/suicide() -- самоубийство
getOxyLoss() -- Получить цифровое значение кислородного урона
adjustOxyLoss(var/amount) -- Добавить кислородного урона к текущему урону
Функции SIMULATED
getToxLoss() - Получить цифровое значение токсичного урона
adjustToxLoss(var/amount) - Добавить токсического урона к текущему урону
Свойства LIVING
В LIVING в основном хранятся
органы.
/mob/simulated/living
var/list/organs = list() //Список органов
var/brain_op_stage = 0.0 //не работает(в доработке)
var/eye_op_stage = 0.0 //не работает(в доработке)
var/dizziness = 0 //опьянение
var/appendix_op_stage = 0.0 //не работает(в доработке)
var/datum/organ/external/chest/chest //тело
var/datum/organ/external/head/head //голова
var/datum/organ/external/arm/l_arm/l_arm //левая рука
var/datum/organ/external/arm/r_arm/r_arm // правая рука
var/datum/organ/external/leg/r_leg/r_leg // правая нога
var/datum/organ/external/leg/l_leg/l_leg // левая нога
var/datum/organ/external/groin/groin // пах
var/datum/organ/internal/lungs/lungs //легкие
var/datum/organ/internal/heart/heart // сердце
//var/datum/disease2/disease/virus2 = null //не работает(в доработке)
//var/list/datum/disease2/disease/resistances2 = list()//не работает(в доработке)
var/antibodies = 0 //не работает(в доработке)
LIVING функции
getBruteLoss() - Получить цифровое значение брут урона
adjustBruteLoss(var/amount) - Добавить брут урона к текущему урону
getFireLoss() - Получить цифровое значение температурного урона
adjustFireLoss(var/amount) - Добавить температурного урона к текущему урону
handle_chemicals_in_body() - Обработка реагентов в теле моба
rand_damage(var/mind, var/maxd) - Добавить случайное значение брут урона в размере от mind до maxd случайной части тела
rand_burn_damage(var/mind, var/maxd) - Тоже самое, только с температурным уроном
proc/gib() - я думаю вы поняли
blood_flow() - Обработка кровотечений, голода, опьянения, оверлея урона, работы сердца
LIVING функции
updatehealth() - обработка дыхания и обновления индикации здоровья(показателя health)
HealDamage(zone, brute, burn) - излечение части тела zone от физического и температурного урона
apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0) - добавить урон damage типа damatype части тела def_zone минус бонус защиты blocked
get_organ(var/zone) - получить часть тела по названию
heal_burn(var/vol) - излечить весь берн урон в количестве vol
heal_brute(var/vol) - излечить весь брут урон в количестве vol
pain(var/partname, var/amount, var/force) - Боль
HUMANOID
Подобно LIVING и SIMULATED, содержит свои функции, в основном связанные с ношением одежды, инвентарем, взаимодействием с техникой и некоторыми другими вещами.
handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) урон от температуры окружающего воздуха
handle_temperature(var/datum/gas_mixture/environment) обработка температуры тела
process() \\ главный прок, в который включены все остальные проки(подсистемы организма)
do_after(var/time) - выполнять что-то не отрываясь какое-то время
show(var/atom/mybuild) - Показать создаваемый объект
HUMAN
Особо ничем пока не выделяется.
OBJECTS
Главные свойства объектов это density, opacity, anchored. В целом, также как и у мобов, основной прок, это process который автоматически вызывается игрой и обрабатывается каждые n тиков. Объекты подразделяются на item, structure, machinery, effects и остальные
К первым относится все, что можно взять в руку. Ко вторым обычно не обрабатываемые игрой предметы мебели и декора, к третьим разные техники и системы, к эффектам вспышка молнии, дым и взрыв. К остальным служебные объекты(ХУД, лэндмарки и тд.) и некоторые другие эффекты.
Как устроена энергосистема станции
Проводов в изометрии нет, потому АПЦ передает энергию от смеса/получает от генераторов на условном расстоянии. Смес содержит в себе всю собранную АПЦ энергию, АПЦ имеют со смесами один заряд, их не нужно заряжать, тратится энергия одним АПЦ - тратится энергия всей системы.
Интерфейсы
В данном случае простой HTML, с небольшой подключенной таблицей стилей:
https://unpkg.com/purecss@1.0.0/build/pure-min.css\" integrity=\"sha384-nn4HPE8lTHyVtfCBi5yW9d20FjT8BJwUXyWZT9InLYax14RDjBj46LmSztkmNP9w
Фикс “я”
fix255(“здесь текст”)
fix1103(“здесь текст”) для HTML интерфейсов
DATUMS
Турфы(полностью по станционному образу и подобию) рассматривать не особо есть смысл.
А вот датумы стоит глянуть.
AI - Модели поведения роботов
currency - зародыш коммерческой системы
dna - не работает
electronics - Электронные модули для крафтовых плат
events - Ряд случайных событий, активируемых во время игры
idchecker - Проверка айди карт, может быть привязана к любому объекту
jobs - Обработка в соответствии с профессией снаряжения персонажа при спавне
organs - Органы. Подразделяются на внешние и внутренние. Внешние работают одинаково, внутренних два: легкие и сердце.
powernet - полурабочий придаток энергосистемы
recipes - рецепты на кухню
var - нужный для переноса фич с новоТГ кусок кода
SYSTEMS
Рабочих систем не так много, среди них:
Химия, админка, контроллер, ивенты
Химия - содержит взаимодействия разных химических элементов между собой и воздействие на персонажа
Админка - баны
Контроллер - Обрабатывает все, что происходит на станции, самая важная часть
Ивенты - Разные события и гейммоды.