Mechanic · progression · real-time strategy
Unit growth
A unit steps through a few stages of growth, on a timer or when given an item, and each stage changes what it can do.
On this page
Unit growth moves a unit up a short ladder of stages. In Pikmin a buried sprout steps from leaf to bud to flower on timers and wilts back to a leaf if left as a flower1, and a leaf or bud Pikmin that drinks nectar becomes a flower at once2.
Games
| Game | Year | How | Note |
|---|---|---|---|
| Pikmin | 2001 | Timed stages | sprouts · a buried sprout steps from leaf to bud to flower on timers, and a flower left in the ground wilts back to a leaf |
| Pikmin | 2001 | Fed | Pikmin · a leaf or bud Pikmin that drinks nectar becomes a flower at once |
Every claim about this mechanic, by game (2)
References
- ^ abA buried sprout (
PikiHeadItem) waitsmGrowUpTime(p51, "growupTime(秒)") plus 0 to 2 seconds at random, then plays its growth animation and moves one stage, leaf to bud or bud to flower ((mFlowerStage + 1) % 3). A flower waitsmWiltTime(p52, "kareTime(秒)") plus 0 to 2 seconds, then wilts: it becomes a leaf, and aftermRebirthSeedTime(p53) plus 0 to 2 seconds it goes back to the buried state. The three times are read from parms/pikiMgr.bin; their code defaults are 4, 4, and 1 seconds. A plucked Pikmin keeps its sprout's stage.CodeprojectPiki/pikminHow we know
305void PikiHeadAI::WaitInit::act(AICreature* item) ⋮ 309 if (obj->mFlowerStage == Flower) { 310 item->mSAICtx.mCurrentItemHealth = pikiMgr->mPikiParms->mPikiParms.mWiltTime() + gsys->getRand(1.0f) * 2.0f; 311 } else { 312 item->mSAICtx.mCurrentItemHealth = pikiMgr->mPikiParms->mPikiParms.mGrowUpTime() + gsys->getRand(1.0f) * 2.0f;
src/plugPikiKando/itemAI.cpp lines 305–313 at 9a21636 · upstream ↗ 326 f32& health = item->mSAICtx.mCurrentItemHealth; 327 health -= gsys->getFrameTime(); 328 if (health < 0.0f) { 329 if (obj->mFlowerStage == Flower) { 330 item->mSAICtx.mStateMachine->transit(item, PIKIHEAD_Unk10); 331 } else { 332 item->mSAICtx.mStateMachine->transit(item, PIKIHEAD_Unk7);
src/plugPikiKando/itemAI.cpp lines 326–332 at 9a21636 · upstream ↗ 163 addState(PIKIHEAD_Unk7, PikiHeadMotion::UgGrow); 164 addState(PIKIHEAD_Growuped, PANI_NO_MOTION, new GrowupedExec); ⋮ 166 addState(PIKIHEAD_Unk10, PikiHeadMotion::Sioreru); 167 addState(PIKIHEAD_Kareta, PANI_NO_MOTION, new KaretaInit, new KaretaExec); ⋮ 173 addArrow(PIKIHEAD_Unk7, saiMotionAction0Event, PIKIHEAD_Growuped); 174 addArrow(PIKIHEAD_Growuped, saiMotionDoneEvent, PIKIHEAD_Wait); 175 addArrow(PIKIHEAD_Unk10, saiMotionDoneEvent, PIKIHEAD_Kareta);
src/plugPikiKando/itemAI.cpp lines 163–175 at 9a21636 · upstream ↗ 349 obj->mFlowerStage = (obj->mFlowerStage + 1) % 3;src/plugPikiKando/itemAI.cpp line 349 at 9a21636 · upstream ↗ 381 item->mSAICtx.mCurrentItemHealth = pikiMgr->mPikiParms->mPikiParms.mRebirthSeedTime() + 2.0f * gsys->getRand(1.0f); 382 obj->mFlowerStage = Leaf; ⋮ 393 item->mSAICtx.mStateMachine->transit(item, PIKIHEAD_Bury);
src/plugPikiKando/itemAI.cpp lines 381–393 at 9a21636 · upstream ↗ 101 , mGrowUpTime(this, 4.0f, 0.0f, 300.0f, "p51", "growupTime(秒)") 102 , mWiltTime(this, 4.0f, 0.0f, 300.0f, "p52", "kareTime(秒)") 103 , mRebirthSeedTime(this, 1.0f, 0.0f, 300.0f, "p53", "rebirthTime(秒)")
include/PikiMgr.h lines 101–103 at 9a21636 · upstream ↗ 66enum PikiHappa { 67 Leaf = 0, 68 Bud = 1, 69 Flower = 2,
include/GlobalGameOptions.h lines 66–69 at 9a21636 · upstream ↗ 2581 piki->setFlower(navi->mSproutToPluck->mFlowerStage);src/plugPikiKando/naviState.cpp line 2581 at 9a21636 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Checked by a second AI model, 2026-10-22.
- ^ abA Pikmin that isn't yet a flower drinks when it touches a nectar puddle in its normal state, unless it is damaged, carrying (transport mode), or mushroom-headed; the puddle is an
OBJTYPE_Waterobject, which a decompilation comment calls nectar. If it drank, its growth animation makes it a flower (setFlower(Flower)) at once, from leaf or bud.CodeprojectPiki/pikminHow we know
407 if (!piki->isKinoko()) { ⋮ 411 if (!piki->isDamaged() && piki->mMode != PikiMode::TransportMode) { ⋮ 414 case OBJTYPE_Water: ⋮ 416 // Nectar puddles are modeled as water; non-flower Pikmin can drink to grow. 417 if (piki->mHappa != Flower) { 418 piki->changeMode(PikiMode::FreeMode, piki->mNavi); 419 piki->mCurrNectar = collider; 420 transit(piki, PIKISTATE_Absorb);
src/plugPikiKando/pikiState.cpp lines 407–420 at 9a21636 · upstream ↗ 516 if (mHasAbsorbedNectar) { 517 transit(piki, PIKISTATE_GrowUp);
src/plugPikiKando/pikiState.cpp lines 516–517 at 9a21636 · upstream ↗ 2402 case KEY_Action0: ⋮ 2404 piki->mFloweringTimer++; 2405 seSystem->playPikiSound(SEF_PIKI_GROW4, piki->mSRT.t); 2406 piki->setFlower(Flower);
src/plugPikiKando/pikiState.cpp lines 2402–2406 at 9a21636 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Checked by a second AI model, 2026-10-22.
Sources
Code
- projectPiki. 2026. “pikmin: a decompilation of Pikmin (projectPiki/pikmin).” Commit 9a21636. projectPiki/pikmin @ 9a21636 · licence, all uses