Mood update vol. 2: Баффы и дебаффы - #14039
Conversation
Changelog status: ✔️ |
| switch(mood.spirit) | ||
| if(SPIRIT_BAD to SPIRIT_LOW) | ||
| value *= 2 | ||
| if(SPIRIT_LOW to SPIRIT_POOR) | ||
| value *= 1.5 | ||
| if(SPIRIT_POOR to SPIRIT_DISTURBED) | ||
| value *= 1 | ||
| if(SPIRIT_DISTURBED to SPIRIT_NEUTRAL - 1) // the spirit must be BELOW average for misfortunes to happen. | ||
| value *= 0.5 | ||
| if(SPIRIT_NEUTRAL to INFINITY) | ||
| value *= 0 |
There was a problem hiding this comment.
Можно воспользоваться LERP для интерполяции значения в коэффициент, я бы предложил что-то такое:
var/spirit_mod = LERP(-1, 1, mood.spirit/SPIRIT_MAXIMUM)
value = value + value * spirit_mod
в этом случае spirit_mod интерполируется в коэффициент от -1 до 1, если mood.spirit == SPIRIT_DISTURBED то коэффициент будет 0 (потом дефайны и весь спирит всё равно надо будет переименовать).
И к value он применяется относительно текущего значения value, т.е. учитывает изначальный шанс на prob
There was a problem hiding this comment.
хотя, нет, оно не должно влиять на всё значение, скорее надо что-то вроде
var/spirit_mod = LERP(-0.5, 0.5, mood.spirit/SPIRIT_MAXIMUM)
| user.visible_message("<span class='warning'>[M] has been prodded with the [src] by [user]. Luckily it was off.</span>") | ||
| return | ||
| if(user.ClumsyProbabilityCheck(50)) | ||
| if(user.ClumsyProbabilityCheck(50) || user.mood_prob(20)) |
There was a problem hiding this comment.
это было бы хорошо перенести в сам ClumsyProbabilityCheck, только сделать его не зависящим только от трейта. Но я пока не могу сообразить, как лучше его переписать. Нужно чтобы и для трейта шанс более был приближен к дефолтному, и влияние муда/кармы было небольшим.
There was a problem hiding this comment.
пока я думаю будет достаточно в самом ClumsyProbabilityCheck заменить prob на mood_prob, чтобы не вносить функциональных изменений без ревизии (и кламси-ивенты не тригерились только от муда/кармы).
Аналогично можно будет сделать с системой скиллов, где есть небольшие prob на удачу, заменить на mood_prob
Чел у меня минус вайб - пистолет взрывается в руках. Ты ебанутый нет блять? |
В дискорде немного затронули, это точно не тот подход. Правильнее было бы пушкам дать шанс провалиться от прототипирования(рнд)/старости(свалка)/возможно скилла, и уже на них навесить mood_prob (в будущем karma_prob), который незначительно будет влиять на шанс в ту или другую сторону UPD: И если изначально шанса на провал нету - пистолет в идеальном состоянии, слиллы достаточны, то муд никак не повлияет. |
|
Я вообще не понимаю как муд может влиять на шанс успешного выполнения действия. У нас уже есть система скиллов, где эти штрафы были бы как раз уместны, но не в муде. |
|
муд будет переименован в карму, это всё по старым планам его реворка, тут чуть подробнее #14036 |
Понял. Карму можно в "Удачу" переименовать так как по смыслу больше подходит. Для меня Карма это CARMAGEDDON где надо людей машиной давить под тяжелый индастриал мэталл. |
|
@volas добавил lerp и подкрутил влияние скиллов на шанс зафейлить действие |
| if(user.mood_and_skill_prob(5, -0.3, list(/datum/skill/engineering = SKILL_LEVEL_NOVICE))) | ||
| explosion(user.loc, 0, 0, 1, 1) | ||
| to_chat(user, "<span class='danger'>Welding tool malfunction and explode!</span>") | ||
| qdel(src) |
There was a problem hiding this comment.
я бы предпочел, чтобы подобное было отдельными пр-ами, так как это уже новый функционал не очень связанный с мудом, и мы по каждой такой мелочи будем долго обсуждать тормозя основной прогресс
| setSpirit(spirit + amount) | ||
|
|
||
| // The chance that something bad will happen to the character when the mood is low. The lower mood - the higher chance. | ||
| /mob/proc/mood_and_skill_prob(value, skill_multiplier, required_skills) //value - normal prob chance. |
There was a problem hiding this comment.
Простой муд_проб был лучше и с большей областью применения. Скилл проб должен быть частью системы (модуля) скиллов, и муд там уже будет второстепенным.
|
@volas убрал влияние скиллов и добавил force в функцию |
| var/datum/component/mood/mood = GetComponent(/datum/component/mood) | ||
| if(!mood) | ||
| return prob(new_value) | ||
| new_value += value * force * (mood.spirit_level - mood_level) // 2 - "normal" character spirit |
There was a problem hiding this comment.
я немного не понимаю, в чем суть mood_level?
There was a problem hiding this comment.
Похоже на кап, spirit_level в целом странный (почему-то оно от большего у меньшему). Хотя я когда писал про LERP, тоже ошибся с проецированием, так как шанс обычно на плохой эффект, а не хороший, и больший спирит должен понижать. Я бы предложил такой вариант, если у тебя не было причин сделать по другому
| new_value += value * force * (mood.spirit_level - mood_level) // 2 - "normal" character spirit | |
| new_value += value * LERP(1 * force, -1 * force, mood.spirit/SPIRIT_MAXIMUM) |
и убрать mood_level из аргументов, и force дать дефолтный параметр 0.2
There was a problem hiding this comment.
или могу взять пока эту часть на себя, если я тебя запутал
|
Этот запрос на слияние был упомянут в Tau Ceti Station Forum. Там могут быть соответствующие подробности: https://forum.taucetistation.org/t/golosovanie-mood-update-vol2/44918/1 |
| var/datum/component/mood/mood = GetComponent(/datum/component/mood) | ||
| if(!mood) | ||
| return prob(new_value) | ||
| new_value += value * LERP(1 * force, -1 * force, mood.spirit_level / 6) |
There was a problem hiding this comment.
Про spirit_level я уже писал вроде, что он странный и идет от большего к меньшему. Всё было бы корректно, используйся тут просто spirit, но со spirit_level получается обратная зависимость - чем муд хуже, тем больше третий параметр LERP, тем больше мы вычитаем из проба.
Или надо знаки первых двух параметров опять поменять. Но я бы в перспективе отказался от spirit_level вовсе.
There was a problem hiding this comment.
поменял на просто спирит
Co-authored-by: Alexander V. <volas@ya.ru>
Описание изменений
Удалил текущие баффы и дебаффы настроения (небольшое ускорение/замедление у разных взаимодействий и бонус к телекинезу).
Вместо этого в зависимости от настроения в определённых действиях корректируется шанс на успех/провал.
Примеры
Шанс обжечься зажигалкой.
Шанс провалить гетто операцию (с непредназначенными для хирургии инструментами, не на предназначенном для хирургии столе).
В связи с вышеуказанными изменениями, эффект наркотиков, который druggy, стал чуток сильнее усиливать телекинез.
Почему и что этот ПР улучшит
нужно для #14036
Авторство
Чеинжлог
🆑 Simbaka