Add mission scoring, rewards collection and save schema v2

Phase "score et récompenses" of the post-0.1.0 plan (user feedback:
wants a more game-like experience with scoring and rewards).

- MissionScoring: 1-3 stars from how each exercise was solved (never
  speed; a finished mission always gives at least one star).
- Save schema v2: mission_results (best/last stars, completions) with a
  v1->v2 migration that keeps existing stars and items.
- Total only grows by the improvement over a mission's best score.
- Data-driven collection (data/rewards, reward_item schema, validated
  incl. mission cross-check) unlocked by RewardRules.
- Reward screen, collection screen, stars on the world map.
- Version 0.2.0.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Denis Defolie
2026-10-11 22:20:59 +02:00
parent 57182172a9
commit 65a0cb46f9
47 changed files with 897 additions and 36 deletions
+10
View File
@@ -0,0 +1,10 @@
{
"item_id": "item_carte_ancienne",
"title": "Carte ancienne",
"description": "Une vieille carte qui montre des lieux que personne n'a encore visités.",
"unlock": {
"type": "total_stars",
"count": 15
},
"review_status": "draft"
}
+10
View File
@@ -0,0 +1,10 @@
{
"item_id": "item_cle_argentee",
"title": "Clé argentée",
"description": "Elle ouvre la porte d'un secret caché au fond de la forêt.",
"unlock": {
"type": "total_stars",
"count": 30
},
"review_status": "draft"
}
+10
View File
@@ -0,0 +1,10 @@
{
"item_id": "item_couronne_feuilles",
"title": "Couronne de feuilles",
"description": "Tressée avec les feuilles de la forêt des accords.",
"unlock": {
"type": "total_stars",
"count": 22
},
"review_status": "draft"
}
+10
View File
@@ -0,0 +1,10 @@
{
"item_id": "item_cristal_echo",
"title": "Cristal d'écho",
"description": "Il répète en chantant toutes les phrases bien écrites.",
"unlock": {
"type": "total_stars",
"count": 45
},
"review_status": "draft"
}
+10
View File
@@ -0,0 +1,10 @@
{
"item_id": "item_graine_magique",
"title": "Graine magique",
"description": "Une petite graine qui brille. Elle attend la bonne forêt pour pousser.",
"unlock": {
"type": "total_stars",
"count": 3
},
"review_status": "draft"
}
+10
View File
@@ -0,0 +1,10 @@
{
"item_id": "item_lanterne_foret",
"title": "Lanterne de la forêt",
"description": "Elle éclaire les chemins quand la nuit tombe sur les mots.",
"unlock": {
"type": "total_stars",
"count": 10
},
"review_status": "draft"
}
+10
View File
@@ -0,0 +1,10 @@
{
"item_id": "item_plume_doree",
"title": "Plume dorée",
"description": "Une plume tombée de l'aile de Plume, le hibou guide.",
"unlock": {
"type": "total_stars",
"count": 6
},
"review_status": "draft"
}
+11
View File
@@ -0,0 +1,11 @@
{
"item_id": "item_trophee_clairiere",
"title": "Trophée de la clairière",
"description": "L'écho de la clairière chante ton nom : tu as tout réussi sans aide.",
"unlock": {
"type": "mission_stars",
"count": 3,
"mission_id": "mission_03_clairiere_echo"
},
"review_status": "draft"
}
+11
View File
@@ -0,0 +1,11 @@
{
"item_id": "item_trophee_pont",
"title": "Trophée du pont",
"description": "Le pont des phrases brille grâce à toi : tu as tout réussi sans aide.",
"unlock": {
"type": "mission_stars",
"count": 3,
"mission_id": "mission_02_pont_des_phrases"
},
"review_status": "draft"
}
+11
View File
@@ -0,0 +1,11 @@
{
"item_id": "item_trophee_pre",
"title": "Trophée du pré",
"description": "Les lutins t'offrent ce trophée : tu as tout réussi sans aide au pré des petits mots.",
"unlock": {
"type": "mission_stars",
"count": 3,
"mission_id": "mission_01_pre_des_mots"
},
"review_status": "draft"
}