Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds hunger to mouse #1753

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
Open

Adds hunger to mouse #1753

wants to merge 10 commits into from

Conversation

Drsmail
Copy link

@Drsmail Drsmail commented Jan 19, 2025

Что этот PR делает

Добавляет мышкам под контролем игрока систему голода и возможность взаимодействовать с едой.

  • При переедании мышку ждёт жестокая смерть от разрыва желудка
  • При употребления сыра накладывается эффект наркотиков на 2 секунды
  • Систему голода не удалось полностью скопировать с людей, поэтому параметры пришлось подпирать самому, приближенно к людям, но мыши голодают чуть быстрее и получают чуть больше веществ с еды.
  • Добавляет мышкам кастомный hud голода

Почему это хорошо для игры

Скорее всего это плохо. Я уде вижу нашествие мышей на кухню с желанием съесть всё что можно.

Изображения изменений

image
image
image
image

TODO

  • Доделать иконки для шкалы голода
  • Придумать, что случается с очень голодными мышами (Теряет здоровье в тик?)
  • Убрать все магические числа и добавить параметр голода мыши в виде блюда/час
  • Менять скорость поедание еды прямо пропорционально голоду.
  • Придумать и добавить особенное взаимодействие с сыром (Квестовую цепочку? Открыть прыжок после поедания 4 кусков? Просто особенные реплики в чате?)
  • Убрать log_debug()
  • Пройтись по всему тексту

Тестирование

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

Changelog

🆑
tweak: На борту станций замечен новый вид особо прожорливые мышей. Оберегайте еду и не забудьте расставить побольше мышеловок.
/:cl:

Summary by Sourcery

Implement a hunger system for player-controlled mice, allowing them to interact with food and suffer consequences for overeating.

New Features:

  • A hunger system for player-controlled mice has been added.

Tests:

  • Verified that non-player mice are unaffected by hunger.
  • Confirmed that a mouse can only eat one item at a time.
  • Checked that other mouse mechanics remain untouched.
  • Ensured correct nutrient gain from meat consumption.
  • Validated the expected reagent loss per minute.

Summary by Sourcery

Add a hunger system for player-controlled mice, including a hunger meter and the ability to eat food. Overeating will cause the mouse to explode.

New Features:

  • Mice now have a hunger system.

Tests:

  • Verify that non-player mice are unaffected by the hunger system.
  • Confirm that mice can only eat one food item at a time.
  • Ensure other mouse mechanics are not impacted.

Copy link

sourcery-ai bot commented Jan 19, 2025

Reviewer's Guide by Sourcery

This pull request introduces a hunger system for player-controlled mice, allowing them to eat food and suffer consequences for overeating. The system includes a nutrition level, hunger drain, and different states based on the nutrition level. The mice can eat food items, which will increase their nutrition level. If a mouse overeats, it will die. The speed of eating is also affected by the hunger level.

Sequence diagram for mouse eating food

sequenceDiagram
    participant M as Mouse
    participant F as Food Item

    M->>F: Click on food
    alt Already eating
        M-->>M: Show 'finish chewing' message
    else Not eating
        Note over M,F: Eating time varies with nutrition level
        M->>F: Start eating animation
        M->>F: Wait for eating duration
        alt Eating completed
            F->>M: Transfer nutrients
            Note over M: Adjust nutrition level
            F->>F: Generate trash
            F->>F: Self-destruct
        else Interrupted
            M-->>M: Stop eating
        end
    end
Loading

Class diagram for mouse hunger system

classDiagram
    class Mouse {
        +nutrition: float
        +hunger_drain: float
        +busy: bool
        +previous_status: string
        +handle_chemicals_in_body()
        +consume(food: Food)
        +start_pulling(item)
    }

    class Food {
        +reagents
        +generate_trash()
    }

    class MouseHUD {
        +nutrition_display
        +healths
    }

    Mouse "1" -- "1" MouseHUD
    Mouse "1" -- "*" Food : consumes
Loading

State diagram for mouse hunger levels

stateDiagram-v2
    [*] --> Hungry
    Hungry --> Fed: Eat food
    Fed --> WellFed: Continue eating
    WellFed --> Full: Continue eating
    Full --> Fat: Overeat
    Fat --> [*]: Explode from overeating

    Hungry --> Starving: No food
    Starving --> Hypoglycemia: No food
    Hypoglycemia --> [*]: Death from starvation

    note right of Fat: Above 135% nutrition
    note right of Starving: Takes damage over time
    note right of Hypoglycemia: Takes more damage
Loading

File-Level Changes

Change Details Files
Implements a hunger system for player-controlled mice.
  • Added constants for nutrition, feeding time, and gibbing.
  • Added a nutrition display to the mouse HUD.
  • Added a hunger drain mechanism that reduces nutrition over time.
  • Added a system to change the mouse's name and description based on hunger level.
  • Added a system to damage the mouse if it is starving.
  • Added a system to kill the mouse if it overeats.
  • Added a system to handle the consumption of food items.
  • Added a check to prevent the mouse from pulling anything except food.
  • Added a check to prevent the mouse from eating more than one item at a time.
modular_ss220/mobs/code/simple_animal/friendly/mouse.dm
Allows mice to consume food items.
  • Added a consume proc to the mouse that handles eating food.
  • Modified the food interaction to call the consume proc when a mouse interacts with food.
modular_ss220/mobs/code/simple_animal/friendly/mouse.dm
code/modules/food_and_drinks/food_base.dm

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time. You can also use
    this command to specify where the summary should be inserted.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@github-actions github-actions bot added :feelsgood: Частичная модульность Не всегда получается всё впихнуть в модуль, увы. 🖌️ Спрайты Вы заработали свою миска-рис и кошко-жена. Партия гордится вами! labels Jan 19, 2025
@Drsmail
Copy link
Author

Drsmail commented Jan 19, 2025

Я не очень понимаю, почему у меня появилось столько include(ов) в modular_ss220/mobs/_mobs.dme, я могу их убрать?

@Gaxeer
Copy link
Collaborator

Gaxeer commented Jan 19, 2025

1f40c

@Gaxeer
Copy link
Collaborator

Gaxeer commented Jan 19, 2025

Я не очень понимаю, почему у меня появилось столько include(ов) в modular_ss220/mobs/_mobs.dme, я могу их убрать?

можешь убрать. Это бьенд насирает, если им открыть

@Drsmail
Copy link
Author

Drsmail commented Jan 19, 2025

Я не очень понимаю, почему у меня появилось столько include(ов) в modular_ss220/mobs/_mobs.dme, я могу их убрать?

можешь убрать. Это бьенд насирает, если им открыть

Угусь, спасибо!

@Drsmail
Copy link
Author

Drsmail commented Jan 20, 2025

@m-dzianishchyts, Максимилиан, посмотришь? Мне осталось там только текст проверить и дождаться, когда картинки будут готовы. С текстом у меня проблемы возникли, потому что там мышки могут быть и крысами и питомцами, поэтому я не уверен как написать текст, чтобы подошёл под все случаи, вот я и написал на английском. Но наверное слишком много где у меня userdanger?

@m-dzianishchyts m-dzianishchyts self-requested a review January 20, 2025 15:17
@Drsmail
Copy link
Author

Drsmail commented Jan 22, 2025

Пока всё ещё жду картинки, но код бы посмотреть.

@Drsmail Drsmail marked this pull request as ready for review January 22, 2025 12:50
@ss220app ss220app bot added the 📜 CL валиден Этот чейнджлог будет успешно опубликован label Jan 22, 2025
Comment on lines +65 to +69
// Отслеживаем, что призрак попал в мышку.
/mob/living/simple_animal/mouse/Login()
. = ..()
// Теперь мышка будет обрабатыватся в цикле life, обычные мышки не будут обрабатывать голод.
reagents = new()
Copy link
Collaborator

Choose a reason for hiding this comment

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

А если призрак вышел из мыши, то всё равнл будут продолжать обрабатываться?

Copy link
Author

@Drsmail Drsmail Jan 22, 2025

Choose a reason for hiding this comment

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

Да, если призрак выйдет с мышки она в конечном итоге умрёт от голода. Есть какие-то предложения?

Copy link
Collaborator

@m-dzianishchyts m-dzianishchyts left a comment

Choose a reason for hiding this comment

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

Бегло глянул, можно еще оставшиеся внутриигровые сообщения перевести для консистенси

@Drsmail
Copy link
Author

Drsmail commented Jan 23, 2025

Бегло глянул, можно еще оставшиеся внутриигровые сообщения перевести для консистенси

Спасибо большое, я доработаю.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
:feelsgood: Частичная модульность Не всегда получается всё впихнуть в модуль, увы. 🖌️ Спрайты Вы заработали свою миска-рис и кошко-жена. Партия гордится вами! 📜 CL валиден Этот чейнджлог будет успешно опубликован
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants