TauCetiStation / TauCetiClassic

Франкенштейн жив
GNU Affero General Public License v3.0
144 stars 419 forks source link

Кривое расположение ног на кукле. #8846

Open WatlerJe opened 2 years ago

WatlerJe commented 2 years ago

Подробное описание проблемы

Ноги у всех кукл в билде прорисовываются неправильно, а точнее неправильно накладываются слои друг на друга, в результате чего протез на правой ноге находится поверх левой ноги при направлении на запад (скрин ниже). image

Хотел отрисовать протезы, а тут такое. В общем надо фиксить, ибо такая же беда и с руками которые видно сквозь пузо у толстиков.

LudwigVonChesterfield commented 2 years ago

Было бы хорошо сюда линкануть все похожие ишуи, к примеру про жир, оверлеи крови поверх отрезанных рук, и т.д. Можно было бы сделать большим заданием, и навесить баунти (когда-нибудь)

UDaV73rus commented 2 years ago

8754

LiLJard commented 2 years ago

Такая же штука с отображением предметов в руках. Дальние спрайты перекрывают по какой-то причине те, что ближе к зрителю

DarthSidiousPalpatine commented 2 years ago

Как по какой причине. всё просто. слои рук и ног не меняются. как и слои инхэндов при повороте куклы. даже по логике представьте себе ситуацию. Когда хуман смотрит направо - его правая рука ближе к нам, а левая дальше. Когда хуман смотрит влево - его правая рука дальше от нас, а левая ближе. Но это визуально. По факту же от дира не зависит расположение слоёв куклы. Надо сделать чтобы при смене дира кукла пересобиралась или некоторые слои только.

LudwigVonChesterfield commented 2 years ago
var/list/bodypart_layer_by_dir = list(
    BP_HEAD = list(
        NORTH = HEAD_LAYER_NORTH,
        SOUTH = HEAD_LAYER_SOUTH
    )

вот такое надо выходит

DarthSidiousPalpatine commented 2 years ago

Ммм. нет, наверное. Ты хочешь чтобы противоположный дир вообще вырезался чтоль?

LudwigVonChesterfield commented 2 years ago

возможно красивее было бы

var/list/bodypart_layer_by_dir = list(
    "[BP_HEAD][NORTH]" = HEAD_LAYER_NORTH,
    "[BP_HEAD][SOUTH]" = HEAD_LAYER_SOUTH,
)
KIBORG04 commented 2 years ago

Я вам напомню, но руки так-то корректно отображаются

KIBORG04 commented 2 years ago

image image image

Нога же почему-то даже поверх руки рисуется..

volas commented 2 years ago

Гусев выше правильно написал, кукла склеивается в определенном порядке и стейты фиксируются один поверх другого, не зависимо от dir-а. Возможно, что проблема не решаема вовсе.

С руками схитрили - левые стейты у правых рук почти отсутствуют в самом dmi, но с ногами так не получится - если у нас нет одной из ног, нам нужно показывать другую. У рук мы по этому поводу не волнуемся из-за всегда присутствующего туловища. Единственное что, руки так подогнаны под тощее тело, и на толстом заметен косяк с тремя пикселями через пузо.

Можно попробовать делать для определенных dir-ов конечностей оверлей с BLEND_SUBTRACT (вычетание из одного спрайта другого по маске) от определенных dir-ов других конечностей. Я, правда, не представляю, как оптимально это сделать, не плодя операций с иконками на сервер-сайд и не клепая кучу оверлеев на оверлеи. Возможно альтернативой blend_mode могли бы стать фильтры в режиме альфа-маски.

И нужно будет смотреть это с 3 парами, руки и ноги в https://github.com/TauCetiStation/TauCetiClassic/blob/2fbdc98a4121a10a42be32117ac65aa5cdefcad1/code/modules/mob/living/carbon/human/update_icons.dm#L222-L226 +учитывать для рук туловище, для ног возможно хвост

И инхенды предметов в правой и левой руке в https://github.com/TauCetiStation/TauCetiClassic/blob/2fbdc98a4121a10a42be32117ac65aa5cdefcad1/code/modules/mob/living/carbon/human/update_icons.dm#L396-L397 которым так же стоит скорее всего учитывать туловище

Deahaka commented 2 years ago

Всмысле не решаемая. Я ж кидал месяцев 3 назад ТГ фикс отображения....

volas commented 2 years ago

Могл бы и сюда кинуть, https://github.com/tgstation/tgstation/pull/66607

но они как раз блендят (серверсайд), хоть и кэшируют - это будет затратно для инхендов. Сужу по PR-у, нужно смотреть последнюю ревизию.

volas commented 2 years ago

Я подумал еще немного, запишу на полях.

Для дальней пары можно брать appearance из overlays_standing ближней пары (руки/ноги не в overlays_standing, но им нужен свой массив для порядка), выставлять ему нужный dir, и в качестве фильтра или оверлея с BLEND_SUBTRACT каким-то образом применять именно к 4-му из 4-х dir-у иконки дальней пары. Не могу придумать, как делать последний шаг. Если получится, то была бы генерация всего на лету без дополнительных затрат ресурсов.

не важно, оно работает не так

DarthSidiousPalpatine commented 2 years ago

Можно отслеживать смену дира, думаю, поворот перса. И на повороте пересобирать только руки-ноги + инхенды, меняя их лееры.

ZER0-In commented 1 year ago

Сюда же отображение вещей в руках вокесов. Там тупо спрайтов не хватает и поэтому все выглядит убого. А еще разница в высоте рук. Поэтому вещи где-то не в руках у воксов, а рядом с ними.