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
+18 -1
View File
@@ -45,7 +45,24 @@
"dictation.input_placeholder": "Écris ici...",
"dictation.replay_button": "Réécouter",
"dictation.provisional_audio_badge": "Voix provisoire",
"reward_screen.title": "Mission réussie !",
"reward_screen.title": "Mission terminée !",
"reward_screen.stars_label": "Étoiles gagnées :",
"reward_screen.message_1": "Chaque essai te fait progresser. Tu peux rejouer pour gagner plus d'étoiles !",
"reward_screen.message_2": "Bien joué ! Tu as trouvé toutes les réponses.",
"reward_screen.message_3": "Parfait ! Tu as tout réussi du premier coup.",
"reward_screen.record_label": "Nouveau record pour cette mission !",
"reward_screen.total_label": "Total d'étoiles :",
"reward_screen.new_items_label": "Nouveaux objets dans ta collection :",
"reward_screen.collection_button": "Voir ma collection",
"collection.title": "Ma collection",
"collection.progress_label": "Objets trouvés :",
"collection.locked_title": "Objet mystère",
"collection.unlock_total_stars": "À débloquer avec %d étoiles au total",
"collection.unlock_mission_stars": "À débloquer avec %d étoiles à la mission « %s »",
"collection.back_button": "Retour à la carte",
"collection.owned_marker": "Trouvé",
"world_map.total_stars_label": "Total d'étoiles :",
"world_map.mission_stars_label": "Étoiles :",
"world_map.collection_button": "Ma collection",
"reward_screen.continue_button": "Retour à la carte"
}