diff --git a/Android/game-reflex-poc/build.gradle b/Android/game-reflex-poc/build.gradle index 7269a72..233967b 100644 --- a/Android/game-reflex-poc/build.gradle +++ b/Android/game-reflex-poc/build.gradle @@ -1,5 +1,5 @@ // file: Android/game-reflex-poc/build.gradle -// version: 36 +// version: 37 plugins { id 'com.android.application' @@ -18,7 +18,7 @@ android { minSdk 21 targetSdk 36 versionCode 2 - versionName '0.2.0-0-pre.4.fix.2' + versionName '0.2.0-0-pre.5' } compileOptions { diff --git a/Android/game-snake-poc/build.gradle b/Android/game-snake-poc/build.gradle index 31ca8b0..0bdbbf2 100644 --- a/Android/game-snake-poc/build.gradle +++ b/Android/game-snake-poc/build.gradle @@ -1,5 +1,5 @@ // file: Android/game-snake-poc/build.gradle -// version: 36 +// version: 37 plugins { id 'com.android.application' @@ -18,7 +18,7 @@ android { minSdk 21 targetSdk 36 versionCode 2 - versionName '0.2.0-0-pre.4.fix.2' + versionName '0.2.0-0-pre.5' } compileOptions { diff --git a/Cargo.toml b/Cargo.toml index 70c7521..26cba83 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ # file: Cargo.toml -# version: 48 +# version: 49 [workspace] resolver = "3" @@ -19,7 +19,7 @@ members = [ ] [workspace.package] -version = "0.2.0-0-pre.4.fix.2" +version = "0.2.0-0-pre.5" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/games" diff --git a/README.md b/README.md index 3da4616..4d3488e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - + # games.sasedev @@ -25,7 +25,7 @@ Workspace expérimental puis productif pour des jeux multiplateformes principale Version stable de référence : `0.1.0`. -Version candidate en cours de conception : `0.2.0-0-pre.4.fix.2`. +Version candidate en cours de conception : `0.2.0-0-pre.5`. Les deux premiers jeux sont des POC structurels : `game-reflex-poc` et `game-snake-poc`. Ils existent d'abord pour valider les frontières du workspace, le moteur, les assets et le packaging multiplateforme. diff --git a/deltas/0.2.0/0-pre.5.md b/deltas/0.2.0/0-pre.5.md new file mode 100644 index 0000000..a695869 --- /dev/null +++ b/deltas/0.2.0/0-pre.5.md @@ -0,0 +1,43 @@ + + + +# Delta 0.2.0-0-pre.5 + +## Base + +Base déclarée : `0.2.0-0-pre.4.fix.2`. + +## Objet + +Décrire fonctionnellement le prochain jeu réel, `Uroburas`, avant reclassification architecturale. + +## Contenu + +- client léger en contenu avec téléchargement de maps/assets ; +- Challenge solo/offline-capable ; +- PvP Battles authentifié avec maps, joueurs présélectionnés/aléatoires, équipes, bots et spectator ; +- Persistent Battle Royale authentifié ; +- règles spécialisables par map ; +- armes/protections avec effets différents tête/corps/queue ; +- score, vies, rewarded continue/rejoin ; +- éditeur de maps, skins/UGC ; +- Hall of Fame ; +- replay/streaming/video régénérée côté serveur. + +## Règle de build + +Les scripts Python restent autorisés pour audit et validation complémentaire mais ne pilotent pas les builds. Les builds utilisent les outils natifs appropriés, notamment Cargo, Gradle et Tauri CLI. Builds, tests unitaires/intégration et smoke tests restent exécutés côté utilisateur. + +## Classification + +Le mapping vers engine, capability, game-system, Uroburas-specific, platform, provider, server et tooling est réservé à la prerelease suivante. + +## Validation + +```bash +python3 scripts/audit_rust_workspace_rules.py +python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates Android deltas history +python3 scripts/audit_distribution_layout.py +``` + +Aucune gate Cargo/Gradle/smoke n'est requise pour cette prerelease documentaire. diff --git a/docs/rules/RULES_COMMANDS.md b/docs/rules/RULES_COMMANDS.md index 06987df..2c8f7d3 100644 --- a/docs/rules/RULES_COMMANDS.md +++ b/docs/rules/RULES_COMMANDS.md @@ -1,5 +1,5 @@ - + # Règles d'exécution des commandes @@ -88,3 +88,11 @@ - **CMD-MATRIX-001** — `docs/rules/RULES_VALIDATION_MATRIX.md` associe des identifiants stables aux commandes et décrit leurs dépendances. - **CMD-MATRIX-002** — Lorsqu'une modification affecte une crate dont dépendent d'autres crates, les validations ciblées couvrent la crate modifiée et les consommateurs directement ou transitivement impactés selon la portée de l'API. - **CMD-MATRIX-003** — La matrice évolue avec le workspace ; ajouter une nouvelle plateforme ou un nouveau type de build doit ajouter ou adapter les commandes concernées plutôt que créer une procédure informelle parallèle. + +## Outils de build et scripts d'audit + +- **CMD-BUILD-001** — Les scripts Python du dépôt sont autorisés pour les audits, audits complémentaires, validations et validations complémentaires. +- **CMD-BUILD-002** — Un script Python ne pilote pas le build d'un produit, d'une plateforme ou d'un package distribué. +- **CMD-BUILD-003** — Les builds utilisent l'outil natif approprié au périmètre : Cargo pour Rust, Gradle pour Android, Tauri CLI pour Tauri, ou l'outil officiellement retenu par la plateforme concernée. +- **CMD-BUILD-004** — Les POC `0.3.x` doivent remplacer toute orchestration de build Python restante par des procédures explicites, reproductibles et testées avec les outils natifs. +- **CMD-BUILD-005** — Les builds, tests unitaires, tests d'intégration et smoke tests de validation sont exécutés côté utilisateur ; les scripts d'audit peuvent vérifier statiquement leur préparation mais ne les simulent pas. diff --git a/docs/studies/000-README.md b/docs/studies/000-README.md index f4a0fb0..b2d03fa 100644 --- a/docs/studies/000-README.md +++ b/docs/studies/000-README.md @@ -1,5 +1,5 @@ - + # Études @@ -37,3 +37,12 @@ Ces études sont des propositions à relire. Elles ne deviennent pas automatique - [`012-PLATFORM_POC_SEQUENCE.md`](012-PLATFORM_POC_SEQUENCE.md) — ordre proposé des POC pour une future série `0.3.x`. Ces documents étudient les POC à réaliser ; ils ne lancent encore aucune implémentation. + +## Étude du prochain jeu réel + +- [`013-UROBURAS_FUNCTIONAL_SPEC.md`](013-UROBURAS_FUNCTIONAL_SPEC.md) — spécification fonctionnelle initiale de Uroburas. +- [`014-UROBURAS_MODES_AND_SESSION_RULES.md`](014-UROBURAS_MODES_AND_SESSION_RULES.md) — Challenge, PvP Battles et Persistent Battle Royale. +- [`015-UROBURAS_MAP_ASSET_AND_UGC_SPEC.md`](015-UROBURAS_MAP_ASSET_AND_UGC_SPEC.md) — maps/assets téléchargés, règles de map, éditeur et UGC. +- [`016-UROBURAS_COMBAT_ITEM_EFFECT_SPEC.md`](016-UROBURAS_COMBAT_ITEM_EFFECT_SPEC.md) — armes, protections et interactions tête/corps/queue. +- [`017-UROBURAS_SCORE_RESPAWN_AND_HALL_OF_FAME.md`](017-UROBURAS_SCORE_RESPAWN_AND_HALL_OF_FAME.md) — score, vies, rewarded continue/rejoin et classements. +- [`018-UROBURAS_SERVER_MEDIA_AND_OBSERVATION_SPEC.md`](018-UROBURAS_SERVER_MEDIA_AND_OBSERVATION_SPEC.md) — spectator, bots, replay, streaming et vidéo régénérée. diff --git a/docs/studies/013-UROBURAS_FUNCTIONAL_SPEC.md b/docs/studies/013-UROBURAS_FUNCTIONAL_SPEC.md new file mode 100644 index 0000000..ebd416c --- /dev/null +++ b/docs/studies/013-UROBURAS_FUNCTIONAL_SPEC.md @@ -0,0 +1,101 @@ + + + +# Uroburas — spécification fonctionnelle initiale + +## Statut + +Étude fonctionnelle non normative pour `0.2.0-0-pre.5`. + +Cette prerelease décrit le comportement attendu. Le classement par engine, capability, game-system, serveur, provider, plateforme ou tooling est volontairement reporté. + +## Identité + +Nom retenu : `Uroburas`. + +Uroburas est un Snake extensible comportant plusieurs modes, des cartes téléchargeables, des règles configurables, du solo, du PvP et un monde persistant multijoueur. + +## Client installé + +Le client installé contient principalement : + +- moteur/runtime ; +- logique de jeu partagée ; +- interfaces/loaders ; +- support plateforme ; +- ressources minimales de bootstrap. + +Les cartes, assets et contenus associés peuvent être téléchargés séparément. + +Le client ne doit pas supposer que toutes les maps ou tous les assets existent lors de l'installation. + +## Serpent + +Le serpent possède au minimum : + +- tête ; +- cou / première portion après la tête ; +- corps ; +- queue. + +Les interactions peuvent produire des effets différents selon la zone touchée. + +## Gameplay attendu + +Le jeu doit permettre : + +- croissance et rétrécissement ; +- coupure du corps ; +- déplacement continu ou par pas selon la map ; +- wrap-around aux bords lorsqu'autorisé ; +- obstacles infranchissables ; +- éléments à manger ; +- éléments poussables ; +- items temporaires ; +- protections ; +- projectiles/effets offensifs ; +- timers ; +- spawns et respawns. + +## Règles pilotées par la map + +Une map peut définir ou contraindre : + +- taille et topology/wrap ; +- murs/obstacles ; +- spawn points ; +- mode de déplacement ; +- vitesse initiale et évolution ; +- vies ; +- items disponibles ; +- objectifs ; +- conditions de victoire/défaite ; +- équipes ; +- bots ; +- spectator ; +- timers ; +- score ; +- paramètres PvP. + +## Modes + +Trois modes principaux : + +1. Challenge ; +2. PvP Battles ; +3. Persistent Battle Royale. + +## Online et identité + +Le mode Challenge peut être joué sans authentification. + +Les modes PvP Battles et Persistent Battle Royale exigent réseau et authentification. + +## Personnalisation future + +Le produit vise aussi : + +- éditeur de maps ; +- maps personnalisées ; +- skins personnalisables ; +- publication/modération éventuelles. diff --git a/docs/studies/014-UROBURAS_MODES_AND_SESSION_RULES.md b/docs/studies/014-UROBURAS_MODES_AND_SESSION_RULES.md new file mode 100644 index 0000000..cc05de8 --- /dev/null +++ b/docs/studies/014-UROBURAS_MODES_AND_SESSION_RULES.md @@ -0,0 +1,144 @@ + + + +# Uroburas — modes et règles de session + +## Mode 1 — Challenge + +### Accès + +- jouable sans authentification ; +- réseau non requis pour jouer ; +- réseau/auth requis pour Hall of Fame et rewarded ads lorsque utilisés. + +### Run + +Une run : + +- commence au stage 1 ; +- commence au spawn défini ; +- démarre avec un nombre initial de vies ; +- progresse à travers les stages ; +- se termine à l'abandon, à la fin prévue ou lorsque plus aucune continuation n'est disponible. + +### Mort + +Lorsqu'un joueur meurt : + +- il perd une vie ; +- il respawn au spawn du stage ; +- l'état exact du stage après mort est défini par la map/ruleset. + +À zéro vie, une rewarded ad peut éventuellement offrir une continuation si réseau et monétisation sont disponibles. + +### Stage + +Une map Challenge peut : + +- dépasser l'écran ; +- être wrap-around ; +- contenir murs/obstacles ; +- contenir objectifs à consommer ; +- contenir objets poussables ; +- faire grandir/rétrécir ; +- faire apparaître vies/items temporairement ; +- utiliser déplacement step-based ou auto-forward ; +- faire varier la vitesse. + +## Mode 2 — PvP Battles + +### Accès + +- réseau obligatoire ; +- authentification obligatoire. + +### Participants + +La partie peut supporter : + +- 1v1 ; +- 3 joueurs ; +- 4 joueurs ; +- équipes ; +- free-for-all ; +- bots si autorisés. + +### Création et sélection + +Une partie peut être : + +- privée ; +- réservée à des joueurs présélectionnés ; +- ouverte à matchmaking/aléatoire ; +- composée de joueurs et bots. + +Les participants peuvent choisir une map selon les règles de la session. + +### Règles + +La map/ruleset peut définir : + +- nombre de vies ; +- items ; +- collisions ; +- équipes ; +- conditions de victoire ; +- spectator ; +- bots ; +- timers ; +- vitesse ; +- autres paramètres. + +### Fin + +La session finit lorsque la condition de victoire est satisfaite. + +Exemples : dernier joueur vivant, dernière équipe vivante, épuisement des vies, score cible ou limite de temps. + +## Mode 3 — Persistent Battle Royale + +### Accès + +- réseau obligatoire ; +- authentification obligatoire pour jouer ; +- observation possible selon politique serveur. + +### Monde + +Une map : + +- peut être gigantesque ; +- reste active jusqu'à décision administrative ; +- accepte joueurs entrant/sortant ; +- contient bots serveur et items temporaires ; +- peut être découpée en zones/chunks. + +### Tentative + +Chaque entrée active constitue une tentative. + +Le joueur : + +- spawn sur un point valide ; +- possède une vie ; +- commence score/progression de tentative à zéro ; +- peut tuer joueurs ou bots ; +- peut être tué par joueurs, bots, environnement ou effets. + +### Mort et retour + +À la mort : + +- la tentative est close ; +- l'ancien état n'est pas restauré ; +- le joueur attend avant de revenir, par exemple sept minutes ; +- une rewarded ad peut réduire/supprimer l'attente ; +- le retour démarre une nouvelle tentative à zéro. + +### Bots + +Les bots sont exécutés côté serveur, peuvent mourir, respawn après un délai et recevoir un nouveau profil comportemental à chaque respawn. + +### Observation + +Un utilisateur peut rester spectateur sans tentative active. diff --git a/docs/studies/015-UROBURAS_MAP_ASSET_AND_UGC_SPEC.md b/docs/studies/015-UROBURAS_MAP_ASSET_AND_UGC_SPEC.md new file mode 100644 index 0000000..42643d0 --- /dev/null +++ b/docs/studies/015-UROBURAS_MAP_ASSET_AND_UGC_SPEC.md @@ -0,0 +1,61 @@ + + + +# Uroburas — maps, assets et UGC + +## Téléchargement + +Le client doit pouvoir télécharger : + +- maps ; +- textures/sprites ; +- sons ; +- metadata ; +- rulesets ; +- skins ; +- autres ressources propres à une map. + +## Package de map + +Une map publiée peut référencer : + +- map id/version ; +- game/ruleset compatibility ; +- tilemap ; +- dimensions ; +- topology/wrap ; +- layers ; +- obstacles ; +- spawn points ; +- item/bot spawn rules ; +- objectives ; +- timers ; +- rules ; +- asset manifest. + +## Règles par map + +Une map peut fixer notamment déplacement, vitesse, vies, équipes, bots, spectator, items, puissance des items, score, fin de partie, respawn et cooldowns. + +## Cache et compatibilité + +Le client doit pouvoir découvrir une map, vérifier compatibilité/version/intégrité, télécharger package/assets, mettre en cache et remplacer une version obsolète. + +## Éditeur de maps + +Objectifs : + +- créer map ; +- placer obstacles/spawns/objectifs/items ; +- configurer règles ; +- tester localement ; +- sauvegarder draft ; +- publier si autorisé. + +## UGC + +Une map utilisateur peut avoir auteur, id/version, visibilité, état draft/published, description/tags, rating, reports, moderation status et compatibility metadata. + +## Skins + +Première approche possible : palettes, motifs, variantes tête/corps/queue et accessoires autorisés. L'upload libre d'images reste séparé. diff --git a/docs/studies/016-UROBURAS_COMBAT_ITEM_EFFECT_SPEC.md b/docs/studies/016-UROBURAS_COMBAT_ITEM_EFFECT_SPEC.md new file mode 100644 index 0000000..b0c849c --- /dev/null +++ b/docs/studies/016-UROBURAS_COMBAT_ITEM_EFFECT_SPEC.md @@ -0,0 +1,72 @@ + + + +# Uroburas — combat, items et effets + +## Principe + +Une attaque peut produire un résultat différent selon tête, cou, corps ou queue. Une attaque peut parfois devenir indirectement bénéfique en raccourcissant le serpent. + +## Inventaire + +Un serpent peut obtenir un ou plusieurs items et décider de les utiliser ou non. Capacité, stacking, puissance, durée, cooldown et combinaison sont configurables par ruleset. + +## Boule de feu + +### Tête non protégée + +- tue le serpent. + +### Tête protégée + +- consomme un ou plusieurs points de casque selon puissance ; +- peut tuer si la protection est insuffisante. + +### Corps / queue + +- détruit ou coupe une portion selon niveau/puissance ; +- peut raccourcir le serpent et parfois l'avantager. + +## Boule de glace + +### Tête non protégée + +- peut tuer. + +### Tête avec casque + +- consomme un ou plusieurs points de protection ; +- peut geler le serpent pendant une durée ; +- le gel peut entraîner un rétrécissement du corps. + +### Corps non protégé + +- coupe la portion concernée. + +### Corps protégé par shield + +- peut geler temporairement la portion ; +- peut modifier temporairement croissance/longueur ; +- les détails dépendent du ruleset. + +## Poison + +Le poison peut être projeté depuis la tête, parcourir un nombre limité de cases, se propager pendant une durée, contaminer plusieurs tiles puis disparaître. + +Sur la tête il peut tuer selon protection/ruleset. Sur le corps il peut couper à l'endroit atteint et donc raccourcir le serpent. + +## Casque / masque + +Protection de tête avec plusieurs points possibles, cumul via pickups et absorption de plusieurs coups selon puissance. + +## Body shield + +Le shield protège le corps à partir du cou. Chaque portion protégée peut perdre sa protection individuellement. + +## Téléporteurs + +Les téléporteurs peuvent fonctionner par paire ou groupe, utiliser un identifiant/canal, être temporaires/permanents et être placés par map ou activés par item. + +## Paramétrage + +Les effets peuvent définir level, power, range, duration, spread, cooldown, zone, charges et interactions avec protections. diff --git a/docs/studies/017-UROBURAS_SCORE_RESPAWN_AND_HALL_OF_FAME.md b/docs/studies/017-UROBURAS_SCORE_RESPAWN_AND_HALL_OF_FAME.md new file mode 100644 index 0000000..f1e9f86 --- /dev/null +++ b/docs/studies/017-UROBURAS_SCORE_RESPAWN_AND_HALL_OF_FAME.md @@ -0,0 +1,32 @@ + + + +# Uroburas — score, respawn et Hall of Fame + +## Challenge + +Une run peut enregistrer points, temps, stage atteint, vies restantes, morts, continues et rewarded continues. + +Le score peut combiner score brut, bonus, pénalités de mort, pénalités de continue et pénalités de rewarded continue. + +## Hall of Fame Challenge + +Si le joueur est online/authentifié lorsqu'il termine ou quitte, points, temps, stage, morts/continues et versions de map/ruleset/game peuvent être soumis. + +## PvP + +Le résultat peut inclure winner/team, kills/deaths, vies consommées, durée, map/ruleset et composition joueurs/bots. + +## Battle Royale + +Chaque tentative repart de zéro. Statistiques candidates : survival time, player kills, bot kills, maximum length, items, distance et cause of death. + +## Respawn / rejoin + +Joueur : une vie par tentative, cooldown de retour, rewarded ad possible, rejoin = nouvelle tentative. + +Bot : respawn automatique, délai plus court, profil comportemental éventuellement renouvelé. + +## Comparabilité + +Un score conserve mode, map id/version, ruleset version, game version et seed si applicable. diff --git a/docs/studies/018-UROBURAS_SERVER_MEDIA_AND_OBSERVATION_SPEC.md b/docs/studies/018-UROBURAS_SERVER_MEDIA_AND_OBSERVATION_SPEC.md new file mode 100644 index 0000000..4c1be0b --- /dev/null +++ b/docs/studies/018-UROBURAS_SERVER_MEDIA_AND_OBSERVATION_SPEC.md @@ -0,0 +1,34 @@ + + + +# Uroburas — observation, bots et média serveur + +## Spectator + +Les modes online peuvent autoriser suivi d'un joueur, changement de joueur, vue de zone, vue libre limitée et leaderboard/live stats. La politique peut être désactivée, limitée ou retardée. + +## PvP + +Le spectator peut être activé/désactivé, limité à certains utilisateurs, autorisé après élimination ou différé pour éviter le ghosting. + +## Battle Royale + +Un utilisateur peut rester observateur pendant le cooldown ou sans jouer. + +## Reconstitution serveur + +Le serveur authoritative possède les données nécessaires pour produire une représentation indépendante d'un client joueur. + +Objectifs futurs : replay, observation Web, streaming, enregistrement, génération de vidéo et publication sur plateformes vidéo. + +## Vidéo régénérée + +Une stratégie possible consiste à enregistrer événements/états puis reconstruire la partie dans un processus dédié afin de choisir caméra/angle et produire vidéo ou stream. Une autre stratégie est un renderer serveur/headless spécialisé. + +Aucune technologie n'est choisie ici. + +## Données candidates + +Snapshots, event log, inputs/actions, positions, item usage, deaths/kills, spawn/despawn, map/ruleset version et timestamps/ticks. + +Le service media ne doit pas appartenir à la boucle critique de simulation. diff --git a/history/0.2.0/0-pre.4.fix.2.md b/history/0.2.0/0-pre.4.fix.2.md new file mode 100644 index 0000000..e31e206 --- /dev/null +++ b/history/0.2.0/0-pre.4.fix.2.md @@ -0,0 +1,18 @@ + + + +# Historique 0.2.0-0-pre.4.fix.2 + +## Statut + +Étude des POC plateforme validée avant ouverture de `0.2.0-0-pre.5`. + +## Contenu accepté + +- Snake comme jeu-sonde unique des futurs POC plateforme ; +- comparaison SDL natif / Web-WASM / Tauri-WebView ; +- Tauri Android + Snake ; +- Web direct + Snake ; +- Tauri Desktop + Snake ; +- builder Android multi-ABI comme POC tooling ; +- matrice commune de validation des POC.