merge master

This commit is contained in:
thefish 2019-11-15 21:25:15 +03:00
commit cc017e3781

156
TODO
View File

@ -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
- distorted Aschenputtel story / partisans / rapist prince / Grey Mountains