Kibo

Contenuti

  1. Stati / Emozioni del mostro
  2. Tabella evoluzioni
  3. Evoluzione & Regressione
  4. Formula XP per evoluzione
  5. Formula calorie attive
  6. Animazioni meteo
  7. Profilo utente & Giorno/Notte
  8. Setting quadrante
  9. Note bene · compatibilità

🎭 Stati / Emozioni del mostro

Il mostro ha 7 stati determinati in tempo reale. Gli stati di allenamento (rilevati dal movimento) hanno la priorità più alta, poi lo stress (≥ 70), infine la Body Battery. Di notte, nella finestra di sonno del profilo, il mostro dorme.

ℹ️
Priorità: Allenamento intenso → mood 6; Allenamento leggero → mood 5; Stress ≥ 70 → mood 4; altrimenti Body Battery: ≥70 → Iper (3), ≥20 → Attivo (2), <20 → Stanco (1). La finestra di sonno forza mood 0 (Dorme).
z Z

😴 Dorme

Finestra di sonno: occhi chiusi, ZZZ fluttuanti

Sonno (notte)
mood = 0

😪 Stanco

Occhi socchiusi con palpebra pesante, bocca neutra

Body Battery < 20
mood = 1

😊 Attivo

Occhi aperti e vivaci, sorriso aperto

Body Battery 20 – 69
mood = 2

🤩 Iper

Occhi spalancati, mega sorriso, sparkles brillanti

Body Battery ≥ 70
mood = 3

😰 Stressato

Sopracciglia arcuate, bocca giù, goccia di sudore

Stress ≥ 70
mood = 4

🚶 Allenamento leggero

Camminata, yoga, pesi: il mostro cammina (animazione)

Attività leggera rilevata
mood = 5

🏃 Allenamento intenso

Corsa, bici, palestra: compare la fascia sportiva

Attività intensa rilevata
mood = 6

Tabella riassuntiva stati

mood Nome Trigger Occhi Bocca Extra
0 Dorme 😴 Finestra di sonno (notte) Archi chiusi, palpebra abbassata Yawn aperto (cerchio scuro + interno rosso) ZZZ bianchi fluttuanti
1 Stanco 😪 Body Battery < 20 Aperti, iride bassa + palpebra a metà Linea retta (neutrale)
2 Attivo 😊 Body Battery 20–69 Aperti, iride centrata Mezzaluna sorridente
3 Iper 🤩 Body Battery ≥ 70 Spalancati, iride grande Mezzaluna grande sorridente Sparkle dorati ai lati della testa
4 Stressato 😰 Stress ≥ 70 (priorità) Aperti, sopracciglia inclinate (\ /) Arco rovesciato (frown) Goccia sudore animata + segni tensione rossi
5 Allenamento leggero 🚶 Attività leggera rilevata (priorità) Aperti, vivaci Sorriso Animazione di camminata
6 Allenamento intenso 🏃 Attività intensa rilevata (priorità max) Aperti, vivaci Sorriso Fascia sportiva sulla fronte
⚠️
Quando il dispositivo non ha ancora dati (prima accensione / simulatore) il mostro mostra il mood Attivo (2) di default.

🌱 Tabella evoluzioni

Ogni famiglia ha 3 stadi evolutivi (0 → 1 → 2). L'evoluzione è guidata dall'XP cumulativo; la de-evoluzione avviene se l'XP scende sotto la soglia per inattività.

Famiglia Tipo Stadio 0 – Base Stadio 1 – Intermedio Stadio 2 – Finale Accento visivo
Ignis 🔥 Fiamma Cinder Blaze (+ corna ariete) Infernyx (+ cresta di fiamme) Coda fiamma, cresta animata
Aqua 💧 Pinne Dewlet Splashling (+ pinna dorsale) Tidewyrm (+ branchie + pinne pettorali) Pinna dorsale, coda squalo
Flora 🍃 Foglia Sprig Mossky (+ orecchie fogliari) Verdantaur (+ fiore sbocciato) Gemma sulla testa, petali
Volt ⚡ Folgore Zappy Voltkit (+ orecchie fulmine) Thundrake (+ scintille guance) Coda fulmine, scintille animate
Glace 🧊 Cristallo Frostle Snowpaw (+ 2 cristalli-corna) Cryowyrm (+ corona centrale + schegge dorsali) Schegge di ghiaccio, cristalli
Aether 🌬 Ali Puff Breezle (+ ali piccole) Aerogriff (+ ali grandi + aureola) Nuvola sotto i piedi, aureola
Terra 🪨 Spighe Pebbo Bouldmole (+ corna di cervo + gemma fronte) Terragolem (+ lastre rocciose dorsali) Sopracciglio spesso, corna ramificate
Astra ⭐ Stelle Twinkle Nebufox (+ antenne a stella) Stellaron (+ aureola + stelle orbitanti) Stelle orbitanti, aureola dorata

🔄 Evoluzione & Regressione

Kibo cresce con il tuo allenamento e regredisce con l'inattività. Ogni giornata di movimento aggiunge XP; le giornate pigre o i giorni saltati sottraggono XP, fino a riportare il mostro a uno stadio precedente. Il ciclo è quindi reversibile: non è una semplice progressione, ma uno specchio delle tue abitudini.

In alto: l'allenamento costante fa evolvere il mostro (Stadio 0 → 1 → 2). In basso: l'inattività prolungata lo fa regredire allo stadio precedente.

⬆️ Evoluzione

Accumula XP allenandoti: minuti_attivi × 4 + passi ÷ 150 (+ bonus VO₂max). Una giornata vale al massimo 220 XP. Superando 300 XP passi allo Stadio 1, oltre 1200 XP allo Stadio 2.

⬇️ Regressione

Una giornata pigra (sotto 20 XP) sottrae 90 XP e azzera la streak. Anche i giorni in cui il quadrante non viene mostrato decadono di 90 XP/giorno (max 5). Se l'XP scende sotto la soglia, il mostro torna allo stadio precedente. L'XP non va mai sotto zero.

💡
L'attività che genera XP è rilevata combinando cadenza dei passi e frequenza cardiaca (relativa al battito a riposo), confermata da calorie attive in aumento o stress basso. Così anche ciclismo, pesi e yoga contano, mentre lo stress da fermo non viene scambiato per allenamento.

📈 Formula XP per evoluzione

L'XP è la misura dell'impegno fisico giornaliero. Ogni giorno contribuisce fino a unax di 220 XP; l'inattività fa decadere i punti.

XP giornaliero lordo
XP = (minuti_attivi × 4) + (passi ÷ 150) [+ bonus VO₂max]
  • minuti_attivi – minuti di attività moderata/intensa del giorno (ActivityMonitor)
  • passi – conteggio passi cumulativo del giorno
  • Bonus VO₂max (opzionale, se abilitato in impostazioni): (vo2max − 30) × 3 se vo2max > 30
  • Cap giornaliero: 220 XP — giornate di super-allenamento non saltano tappe
Soglie evoluzione
Stadio 1 → XP ≥ 300  |  Stadio 2 → XP ≥ 1200
  • Stadio 0 → 1: ~2–3 settimane di allenamento regolare (30 min/die)
  • Stadio 1 → 2: ~5–6 settimane di allenamento regolare
  • De-evoluzione: giornata pigra (< 20 XP) = −90 XP cumulativi
  • Giorni saltati (face non mostrata): −90 XP/die, massimo 5 giorni consecutivi
Visualizzazione progresso XP (esempio: 750 XP)
Stadio 1
300 XP
Stadio 2
1200 XP
037575011251500

Obiettivo giornaliero (streak)

CostanteValoreDescrizione
GOAL_MINUTES30 minMinuti attivi/giorno per mantenere la streak
goalXp()120 XP30 × 4 – XP minimo per "giornata buona"
INACTIVITY_FLOOR20 XPSotto questa soglia il giorno conta come "pigro"
DECAY−90 XPPenalità per ogni giorno pigro o saltato
DAILY_CAP220 XPMassimo XP da un singolo giorno
T1300 XPSoglia evoluzione stadio 1
T21200 XPSoglia evoluzione stadio 2
💡
Il valore XP sul quadrante è l'effectiveXp = XP consolidato + contributo del giorno corrente. Il gauge mostra il progresso verso lo stadio successivo (stageProgress); non esiste un livello separato.

🔥 Formula calorie attive

Le calorie attive escludono il metabolismo basale (BMR) e rappresentano solo le calorie bruciate con il movimento. Kibo usa una strategia a cascata:

Strategia 1 – Campo nativo del dispositivo (preferito)
calorie_attive = ActivityMonitor.activeCalories
  • Disponibile su Fenix 7 / Epix / MARQ e dispositivi di fascia alta
  • Se non disponibile → si passa alla Strategia 2
Strategia 2 – Calcolo con BMR Mifflin-St Jeor
calorie_attive = calorie_totali − BMR × (secondi_trascorsi ÷ 86400)
  • calorie_totali – calorie bruciate dall'ActivityMonitor dall'inizio del giorno
  • secondi_trascorsi – secondi dall'inizio del giorno (ore × 3600 + min × 60 + sec)
  • Se il profilo utente non è disponibile → stima grezza: calorie_attive ≈ calorie_totali × 0.40
BMR – Equazione di Mifflin-St Jeor
BMR = 10 × kg + 6.25 × cm − 5 × età + offset
  • kg – peso in kg (profilo utente Garmin: grammi ÷ 1000)
  • cm – altezza in cm
  • età – anno corrente − anno di nascita
  • offset: +5 (maschio) / −161 (femmina) / −78 (neutro/non definito)

🌤 Animazioni meteo

Le animazioni meteo si attivano solo in modalità high-power (schermo acceso) per non impattare la batteria. Pioggia e neve sono overlay full-screen animati; le altre condizioni sono icone vettoriali statiche accanto al badge della temperatura.

☀️ Sereno – Giorno

Icona sole con raggi

code = 0

🌙 Sereno – Notte

Icona luna crescente

code = 0

☁️ Nuvoloso

Icona nuvola statica

code = 1

🌧 Pioggia

Full-screen animato — 14 linee diagonali scorrono

code = 2

❄️ Neve

Full-screen animato — 16 fiocchi oscillano scendendo

code = 3

🌫 Nebbia / Vento

Icona nuvola con bande orizzontali

code = 5

Mappatura condizioni Garmin → codice animazione

Codice Animazione Tipo Condizioni Garmin incluse
0 – Clear ☀️ Sole (giorno) / 🌙 Luna (notte) Icona statica Tutto il resto (sunny, fair, mostly clear…)
1 – Cloudy ☁️ Nuvola Icona statica PARTLY_CLOUDY, MOSTLY_CLOUDY, CLOUDY, THIN_CLOUDS
2 – Rain 🌧 Pioggia full-screen Animazione full-screen RAIN, LIGHT_RAIN, HEAVY_RAIN, SHOWERS, DRIZZLE, THUNDERSTORMS, SCATTERED_THUNDERSTORMS…
3 – Snow ❄️ Neve full-screen Animazione full-screen SNOW, LIGHT_SNOW, HEAVY_SNOW, RAIN_SNOW, WINTRY_MIX, FLURRIES, ICE
5 – Fog/Wind 🌫 Nebbia Icona statica FOG, HAZY, MIST, WINDY
ℹ️
Le animazioni full-screen usano particelle deterministiche derivate dal frame-counter — zero allocazioni per frame, zero stato per particella.
Pioggia: 14 linee diagonali (x−4, y+12) che scorrono in base a phase = frame % 24.
Neve: 16 cerchi con oscillazione sinusoidale laterale + caduta verticale.

Distinzione giorno / notte

Per il codice 0 (clear) il parametro isDay — calcolato come ora ∈ [7, 21] — seleziona tra il disegno del sole e quello della luna crescente.

👤 Profilo utente & Giorno / Notte

Kibo distingue due meccanismi diversi e indipendenti: lo sfondo giorno/notte e il sonno della creatura. Il primo è puramente orario; il secondo legge la finestra di sonno dal profilo utente Garmin.

Sfondo giorno / notte (orario, NON dal profilo)
isDay = ora ≥ 7 && ora < 21
  • Di giorno (07:00–21:00) il cielo è più chiaro con un bagliore verso l'orizzonte.
  • Di notte lo sfondo si scurisce e compare il campo stellato animato.
  • Lo stesso flag sceglie l'icona meteo del cielo sereno: ☀️ sole (giorno) / 🌙 luna (notte).
Sonno della creatura (dal profilo utente)
dorme se: sleepTime ≤ ora < wakeTime
  • Gli orari sleepTime e wakeTime arrivano dal profilo utente Garmin (UserProfile), non dalle impostazioni dell'app.
  • Durante la finestra di sonno la creatura dorme (mood 0, con berretto da notte), a prescindere dallo sfondo.
  • Se il profilo non espone gli orari, il default è sveglio 08:00 → 00:00 (quindi addormentato 00:00 → 08:00).

Cosa leggiamo dal profilo utente (UserProfile)

Campo profilo Default se assente A cosa serve
restingHeartRate60 bpmSoglie di rilevamento allenamento: riposo +25 → leggero, riposo +50 → intenso
vo2maxRunningBonus XP: (vo2max − 30) × 3, se > 30 e l'opzione è attiva
sleepTime / wakeTimesveglio 08:00 → 00:00Finestra di sonno → la creatura dorme (mood 0)
weightPeso (grammi ÷ 1000 = kg) per il BMR delle calorie attive
heightAltezza (cm) per il BMR
birthYearEtà (anno corrente − anno di nascita) per il BMR
genderneutro (−78)Offset BMR: +5 (uomo) / −161 (donna)
ℹ️
Profilo ≠ Impostazioni app. I dati qui sopra vengono dal profilo utente Garmin. Le opzioni di gioco/visualizzazione (famiglia iniziale, campi dati, meteo on/off, uso del VO₂max) vengono invece dalle impostazioni dell'app Connect IQ (Properties). La cache del profilo si aggiorna quando rientri nel quadrante o cambi le impostazioni, e una volta al giorno (così FC a riposo e VO₂max restano aggiornati).

⚙️ Setting quadrante

Il quadrante espone cinque slot configurabili, ognuno selezionabile dall'app Connect IQ.

I cinque slot — valori selezionabili
  • nessuno, passi, calorie, HR, distanza, piani, batteria orologio, Body Battery (energia), data, minuti attivi, XP, notifiche, calorie attive (calcolate), tempo di recupero.
ℹ️
Altre impostazioni: famiglia di partenza, mostra animazioni meteo, uso del VO₂max.

⚠️ Note bene · compatibilità dispositivi

⚠️
Dati non disponibili → default. Se un dispositivo non espone la Body Battery, la creatura mostra sempre lo stato Attivo (mood 2). Lo stesso vale per tutti gli altri servizi (stress, meteo, VO₂max, recupero, sonno, ecc.): se riusciamo a recuperarli da Garmin li usiamo, altrimenti ricorriamo a un valore di default o nascondiamo il campo. Tutto questo dipende dai dispositivi e da quali funzioni hanno in modo nativo: lo stesso codice gira su un Fenix di fascia alta e su un Instinct base, adattandosi a ciò che l'orologio può misurare.
⚠️
Dati stimati, non in tempo reale. I valori mostrati sono stimati e aggiornati una volta al minuto. Fanno eccezione i passi, aggiornati ogni 10 secondi, e i battiti del cuore, aggiornati ogni 3 secondi.
⚠️
Calorie attive ≠ quelle di Garmin. Il valore delle calorie attive mostrato da Kibo (per la strategia 2) può non corrispondere a quello visualizzato nell'app/widget Garmin, perché la nostra è una formula custom (calorie totali − BMR Mifflin-St Jeor sul tempo trascorso, con fallback). I dettagli del calcolo sono quelli descritti nella sezione "Formula calorie attive" qui sopra.