diff --git a/TODO b/TODO index e686d3c..c91dd84 100644 --- a/TODO +++ b/TODO @@ -16,22 +16,16 @@ Basics: - ai - dijkstra maps Tech: - + fix connector position - - xecutors fov algo - - M.Kitsch fov algo - - milazzo fov algo - - naive bresenham algo + + fix connector position - 1 tile inside + Assets and i18n: - move tile settings to json: - + tile export - - tile import + - move tile settings to json, generate from there (part of prefabs) - prepare all interface entries for i18n - all texts (terrain, mobs, quests) also in at least 2 languages ECS & engine: - - systems message queue - - implement timeQueue (how to deal with closures?) (?) github.com/thefish/scheduleq - get rid od time.Now inside + - implement time queue (how to deal with closures?) (?) github.com/thefish/scheduleq - get rid od time.Now inside - move all rendering to systems - try to move input handling to systems @@ -45,20 +39,146 @@ Dungeon and branches: + compose from gens and prefabs - editor for prefabs Mapgen: - + use delaunay -> minimum spanning tree for room connection (Краскал в gonum) - github.com/algds/kruskals - MST - github.com/esimov/triangle - delaunay - - или граф относительных окрестностей (?) + + use delaunay -> minimum spanning tree for room connection (Краскал в gonum) + github.com/algds/kruskals - MST + github.com/esimov/triangle - delaunay + - или граф относительных окрестностей (?) + - clustered (place in one area and displace top to bottom moving FROM center) + - BSP (split, parent, child, next, iterate) Combat: - generate skeleton / intesines / muscle / eyes&ears & fingers from templates - serializable - - config in json files + - config in outer files - mass - - damage from skill / mass / speed / material density + - damage calculated from: + kinetic energy is calculated by mass / speed / material density (p = mv) масса на скорость = кинетическая энергия + next you determine target and its subpart (accuracy appied) + next we calculate the area, on which kinetic energy is applied (determined by piercing, hacking, crushing damage profile) находим площадь + next we calculate + + skills determine speed, acceleration, and accuracy + accuracy is diff between where you aimed and where you actually applied the impulse + + - как устроена тушка: + - иерархически - есть корень, у которого есть ветки и листья - как в классическом дереве, Ветки - [конечности]. Для каждой указан [относительный размер]. + - функциональные системы + - [скелет] : череп, хребет, кости - отвечает за движение и применения силы + [Полезные инструменты]: + челюсти и зубы, когти, хвосты, хватательные всякие пальцы и ладони, лапы, копыта, рога, жала + - [обмен жидкостью] - сосуды, артерии, сердце, селезенка(иммунитет втч) - доставка энергии до всех конечностей + именно по этой жидкости считается гидроудар + - [получение и накопление энергии (ЖРАТ)] - желудок, кишки, печень(сопротивляемость ядам втч), селезенка(да, 2 системы) + - [нервные импульсы] - мозги, нервная ткань - передача урпавляющих импульсов + [Полезные инструменты]: + - [зрение] - глаза (или аналоги) и нервы + - [слух] - уши (иил аналоги) и нервы + - [обоняние] - нос и нервы + - [осязание] - кожа (вибриссы, антенны) и нервы + - [полезные инструменты] - . + крепятся к скелету + дают эффекты вроде возможности видеть, нюхать, хватать, стоять и ходить, ползать, бросать, царапать, бить, кусать и колоть, одевать итп + + В этом смысле экипировка тоже входит в организм через конечность с соответствующей функцией, и требует дополнительного + + + Для каждого узла дерева веток/конечностей есть список [слоев тканей] (для каждого указана толщина) и [органов], которые там располагаются. + (прим - сделать наследуемые шаблоны [конечностей] - для гуманоида, четвероногого итп и [слоев тканей] - + млекопитающее, земноводное, рептилия, головоногое и шаблон [органов]) + Для каждой системы есть необходимый для функционирования список органов и реально располагаемый (два сердца anyone?) + Для каждого слоя в конечностях обозначается система, которой он принадлежит. + Для каждого органа в конечностях обозначается система, которой он принадлежит. + Пока органов, соединенных по всему дереву тканями больше, чем необходимо по минимальному списку - все в порядке. При потерях система выходит из строя: + - Нервная система - отключается _все_ действия ниже по дереву. Полная остановка/уничтожение - помираем. + - Обмен жидкостью - начинаем терять уровень внутреннего давления, как только он ниже критического - помираем + - Скелет - теряем возможности соответствующие поврежденной части отсюда и ниже по дереву. При обнажении CORE - помираем (разрубили пополам, блин!) + - Энергия (ЖРАТ) - при повреждении чувствуем себя плохо (деориентация), в перспективе - прекращение притока энергии и остановка обмена жидкостью и неврной деятельности, т.е. помираем + Кроме того, при потерях растет уровень боли. При превышении критического порога - помираем от болевого шока + (оторвали мишке лапы? помирает прямо тут, не ждем потери давления крови). + + + - как считать дамаг: + находим [кинетическую энергию] = масса на скорость движения. Для массы плотность, для скорости - характеристики тушки + находим цель и в ней часть куда всё это попадет (применяется скилл меткости для нахождения разницы между заявленным и получившимся) + Это не только смещение по частям, но и максимальная глубина проникновения в слоях (исходя из скиллов, удади и профиля оружия) + (тут нужно подумать о кинематике движения, хотя можно обойтись рандомом) + находим площадь, на котрую придется кинетическая энергия (профиль оружия - колющий, режущий, давящий) + [импульс] = [остаток импульса] = [кинетическая энергия] / [площадь] + + находим слои, покрывающие эту [площадь] (от наружных к внутренним до core) + + Инициализируем [счетчик всего времени соударения] + + По каждому слою внутрь: + Делим [остаток импульса] на [время соударения] (определяется _упругостью_ материала СЛОЯ) + Добавляем [время соударения] к [счетчику всего времени соударения] (нужен для расчета гидроудара позже) + Делим [остаток импульса] на [площадь поперечного сечения ударной части] + (скажем для давящего - результат 5/2 , для режущего - 1, для колющего - 1/4) + получаем характеристику удара: [давление] силу поделенную на площадь (скажем в ньютонах / м2) + Сравниваем с хрупкостью материала слоя: если [давление] * [счетчик всего времени соударения] > [предела хрупкости] + то провалено - разрушается ВЕСЬ СЛОЙ в пределах части -> переходим к следующему слою, не уменьшая [остаток импульса] + Сравниваем [остаток импульса] с [ударной вязкостью материала]: + Так как ударная вязкость в джоулях, а импульс в ньютонах - умножаем остаток импульса на [толщину слоя] / [площадь], + это произведение вычитаем из [остатка импульса] + Если от импульса еще что-то осталось -> переходим к следующему слою, иначе выходим + Если слои кончились, а от импульса еще что-то осталось: + Считаем off-balance / сбитие с ног / отправление в полет - для дубин это будет часто =) + Пороговые значния придется подбирать. + + foreach [список поврежденных слоев]: + смотрим какие штуки находились в этой части в этом слое, роллим [поцарапан / проткнут / ушиблен / уничтожен]. + - Для экипировки - применяем повреждения (ухудшаем зарактеристики) + - Для органов - добавляем к кровотечению кровооборот органа, добавляем к уровню нервной нагрузки "важность" органа + - При разрушении связок / нервов / мыщц / костей - отключаем всё что их требует ниже по дереву тушки + + + Расчет гидроудара (специально для дубин и проч): + есть [площадь], [время], [импульс] + но считать колебания и скорость звука в жидкой среде (а это километры в секунды) считать дорого, просто передаем + топ-3 внутренним [слоям] и [органам], чья [жесткость? слоя] и [относительный размер|органа] больше всех остальных + тут присутствующих 30% от [импульса] умноженного на [площадь] / [счетчик всего времени соударения]. Таким образом, + надетые доспехи и поддоспешник оставоляют вероятность сломать кость, а вот три слоя брони - уже нет. + + +Но поскольку такой симулятор скотобойни за одно и то же тело быстро приестся - играем за иллитида/мозгового слизня, который +берет разые тушки под контроль, выбрасывает по мере использования и берет новые. + +Соответственно направления развития +- Зов - приманивает тушки получше +- Контроль - позволяет более полно использовать инзначальные возможности тушки, или даже применять новые +- Мутации - отращивание и улучшение тушки, замена материалов, дополнительные конечности/органы, смена шаблона тканей, переход на другой [метаболизм] итп. +- Внедрение и изъятие - запоминание умений тушки и внедрение в другие - от пользования дубиной до телепортационных заклинаний + +За опыт открываются [слоты] для этих возможностей. Макисмальное количество ограничено (скажем 7) +За применения [умений тушки] можно получить ее умения в [слот] (направление контроль). +Любое [умение] занимает какой-то % от слота, может быть больше размера слота. [Объединить слоты] в один больший (но +меньший по размеру чем сумма начальных двух) можно только за [эпические свершения] - сдачу квеста или победу над OOD. +За жти же [эпические очки] открываются новые [умения] в ветках (ограничить деревом скиллов?). +При [гибели тушки] теряются рандомные [слоты] вместе с [умениями] что в них были (не складывайте яйца в одну корзину!). +Если заметят и уничтожат собственно иллитида - game over, high score. + + + + - no hitpoints! blood is the life source - - pain is measure of nervous system load, lose conscience if its aboe threshold + ``` + [CORE] -> [BODYPART] -> [BODYPART] ... + has PARENT bodypart or core + Has layers of material: + + [BONE] + + [TENDON] / [LIGAMENT] / [CARTILAGE] + [MUSCLE] + [FAT] + [SKIN] + [FUR] / [HAIR] / [EYE] / [EAR] + + ``` + + Quest engine: - look at parsers like URQL etc - - distorted Aschenputtel story / partisans / rapist prince / Grey Mountains \ No newline at end of file + - distorted Aschenputtel story / partisans / rapist prince / Grey Mountains +