diff --git a/MODDING.md b/MODDING.md index c0ab01f..9139835 100644 --- a/MODDING.md +++ b/MODDING.md @@ -150,7 +150,7 @@ The areas which will expand based on how full the character is and their progres | `null` | The null that will expand. | | `scaleMax` | The scale (in percent) that will be added at maximum. Know that a scale of 100 is the normal scale of an animation. | -The first expand area is treated as the belly: it breathes, jiggles when smacked, rubbed or fed, and is where stage-up effects and gained weight come from. +The first expand area is treated as the belly: it breathes, jiggles when smacked, rubbed or fed, churns when it gurgles, and is where stage-up effects and gained weight come from. ### interactTypes, interactAreas `interactTypes` is an object of interaction types by name, giving each type's defaults. Rub, Smack, Kiss and Turn Around come from common. A type gets a button on the taskbar only if one of the character's areas uses it. `interactAreas` is a list of the concrete areas on a character which can be interacted with; usually for belly rubs, kisses, etc. Each area names its `type` and takes all of that type's settings, changing whichever it gives itself. diff --git a/src/body.cpp b/src/body.cpp index 4b77441..735ddc5 100644 --- a/src/body.cpp +++ b/src/body.cpp @@ -2,6 +2,8 @@ constexpr float BREATH_AMPLITUDE = 1.5f; constexpr float BREATH_SPEED = 2.2f; +constexpr float CHURN_JIGGLE = 0.8f; +constexpr float CHURN_TIME = 0.75f; constexpr float JIGGLE_DAMPING = 0.12f; constexpr float JIGGLE_STIFFNESS = 0.18f; constexpr float SWAP_STEP = 0.5f; @@ -250,7 +252,12 @@ void Body::update(std::vector& events) } values_clamp(); if (is_chance(traits.gurgleChance * capacity_percent_get() * traits.gurgleCapacityMultiplier)) + { audio->play(character->sounds[SOUND_GURGLE]); + churn = (int)(CHURN_TIME * TICK_RATE); + } + if (churn > 0) + jiggle_add(random_get(-CHURN_JIGGLE, CHURN_JIGGLE) * churn-- / (CHURN_TIME * TICK_RATE)); if (int current = stage_get(stats.weight); current != stage) stage_set(current); diff --git a/src/play.h b/src/play.h index 7f2dcdf..654e0de 100644 --- a/src/play.h +++ b/src/play.h @@ -75,7 +75,8 @@ struct Toast class Play; // The character's body: its stats, digestion and stages, and the animations they choose. The belly (the first expand -// area) breathes and jiggles on a spring, and freeze holds the body still for a hit's few ticks. +// area) breathes and jiggles on a spring, churning for a while after each gurgle, and freeze holds the body still for +// a hit's few ticks. class Body { public: @@ -90,6 +91,7 @@ public: float jiggle = 0; float jiggleVelocity = 0; float talkTime = 0; + int churn = 0; int freeze = 0; int stage = 0; bool isBlinking = false;