Skip to content

Mood update vol. 2: Баффы и дебаффы - #14039

Merged
volas merged 19 commits into
TauCetiStation:masterfrom
simb11:mood-update-2
May 2, 2025
Merged

Mood update vol. 2: Баффы и дебаффы#14039
volas merged 19 commits into
TauCetiStation:masterfrom
simb11:mood-update-2

Conversation

@simb11

@simb11 simb11 commented Apr 21, 2025

Copy link
Copy Markdown
Contributor

Описание изменений

Удалил текущие баффы и дебаффы настроения (небольшое ускорение/замедление у разных взаимодействий и бонус к телекинезу).
Вместо этого в зависимости от настроения в определённых действиях корректируется шанс на успех/провал.

Примеры
  • Шанс обжечься зажигалкой.

  • Шанс провалить гетто операцию (с непредназначенными для хирургии инструментами, не на предназначенном для хирургии столе).

В связи с вышеуказанными изменениями, эффект наркотиков, который druggy, стал чуток сильнее усиливать телекинез.

Почему и что этот ПР улучшит

нужно для #14036

Авторство

Чеинжлог

🆑 Simbaka

  • del: Настроение более не влияет на телекинез и скорость взаимодействия с разными объектами.
  • experiment[link]: Вместо этого, персонажей с низким настроением преследуют неудачи (подробнее и с примерами см. в пул реквесте).
  • tweak: Наркотики сильнее влияют на силу телекинеза.

@TauKitty

Copy link
Copy Markdown
Contributor
Changelog status: ✔️

Comment thread code/datums/components/mood.dm Outdated
Comment on lines +367 to +377
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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно воспользоваться 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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

хотя, нет, оно не должно влиять на всё значение, скорее надо что-то вроде
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))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это было бы хорошо перенести в сам ClumsyProbabilityCheck, только сделать его не зависящим только от трейта. Но я пока не могу сообразить, как лучше его переписать. Нужно чтобы и для трейта шанс более был приближен к дефолтному, и влияние муда/кармы было небольшим.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

пока я думаю будет достаточно в самом ClumsyProbabilityCheck заменить prob на mood_prob, чтобы не вносить функциональных изменений без ревизии (и кламси-ивенты не тригерились только от муда/кармы).

Аналогично можно будет сделать с системой скиллов, где есть небольшие prob на удачу, заменить на mood_prob

@WatlerJe

Copy link
Copy Markdown
Contributor

Шанс того что оружие при стрельбе заклинит и взорвётся.

Чел у меня минус вайб - пистолет взрывается в руках.

Ты ебанутый нет блять?

@volas

volas commented Apr 22, 2025

Copy link
Copy Markdown
Member

Чел у меня минус вайб - пистолет взрывается в руках.

В дискорде немного затронули, это точно не тот подход. Правильнее было бы пушкам дать шанс провалиться от прототипирования(рнд)/старости(свалка)/возможно скилла, и уже на них навесить mood_prob (в будущем karma_prob), который незначительно будет влиять на шанс в ту или другую сторону

UPD: И если изначально шанса на провал нету - пистолет в идеальном состоянии, слиллы достаточны, то муд никак не повлияет.

@WatlerJe

Copy link
Copy Markdown
Contributor

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

@volas

volas commented Apr 22, 2025

Copy link
Copy Markdown
Member

муд будет переименован в карму, это всё по старым планам его реворка, тут чуть подробнее #14036

@WatlerJe

Copy link
Copy Markdown
Contributor

муд будет переименован в карму, это всё по старым планам его реворка, тут чуть подробнее #14036

Понял. Карму можно в "Удачу" переименовать так как по смыслу больше подходит. Для меня Карма это CARMAGEDDON где надо людей машиной давить под тяжелый индастриал мэталл.

@simb11
simb11 requested a review from volas April 23, 2025 19:31
@simb11

simb11 commented Apr 23, 2025

Copy link
Copy Markdown
Contributor Author

@volas добавил lerp и подкрутил влияние скиллов на шанс зафейлить действие

Comment on lines +331 to +334
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)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

я бы предпочел, чтобы подобное было отдельными пр-ами, так как это уже новый функционал не очень связанный с мудом, и мы по каждой такой мелочи будем долго обсуждать тормозя основной прогресс

Comment thread code/datums/components/mood.dm Outdated
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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Простой муд_проб был лучше и с большей областью применения. Скилл проб должен быть частью системы (модуля) скиллов, и муд там уже будет второстепенным.

@simb11

simb11 commented Apr 24, 2025

Copy link
Copy Markdown
Contributor Author

@volas убрал влияние скиллов и добавил force в функцию
ещё поменял места где используется муд проб
p. s. и хоть убей, не могу нигде найти места куда впихнуть муд проб, кроме шанса провалить гетто-операцию

Comment thread code/datums/components/mood.dm Outdated
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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

я немного не понимаю, в чем суть mood_level?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Похоже на кап, spirit_level в целом странный (почему-то оно от большего у меньшему). Хотя я когда писал про LERP, тоже ошибся с проецированием, так как шанс обычно на плохой эффект, а не хороший, и больший спирит должен понижать. Я бы предложил такой вариант, если у тебя не было причин сделать по другому

Suggested change
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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

или могу взять пока эту часть на себя, если я тебя запутал

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

сделал всё

@TauKitty

Copy link
Copy Markdown
Contributor

Этот запрос на слияние был упомянут в Tau Ceti Station Forum. Там могут быть соответствующие подробности:

https://forum.taucetistation.org/t/golosovanie-mood-update-vol2/44918/1

Comment thread code/datums/components/mood.dm Outdated
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)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Про spirit_level я уже писал вроде, что он странный и идет от большего к меньшему. Всё было бы корректно, используйся тут просто spirit, но со spirit_level получается обратная зависимость - чем муд хуже, тем больше третий параметр LERP, тем больше мы вычитаем из проба.

Или надо знаки первых двух параметров опять поменять. Но я бы в перспективе отказался от spirit_level вовсе.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

поменял на просто спирит

Comment thread code/game/objects/items/weapons/cigs_lighters.dm
Comment thread code/datums/components/mood.dm
Co-authored-by: Alexander V. <volas@ya.ru>
@volas
volas merged commit 9fed63b into TauCetiStation:master May 2, 2025
TauKitty added a commit to TauCetiStation/ClassicChangelog that referenced this pull request May 2, 2025
@simb11
simb11 deleted the mood-update-2 branch May 10, 2025 14:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants