Sabotages & événements
Cette page décrit les sabotages utilisables par les joueurs et les événements aléatoires qui peuvent perturber une partie.
Elle s’appuie sur les modules :
game/sabotage.pygame/minigames.pygame/events.py
Sabotages
Les sabotages permettent de pénaliser l’adversaire en cassant ses équipements, en réduisant son stock ou en attaquant sa réputation.
Dans game/sabotage.py :
- chaque sabotage est représenté par un objet
Sabotagequi définit :- un nom (
name) affiché dans l’interface, - un coût en argent (
cost), - un type (matériel, réputation, inspection, vol, stock…),
- une fonction d’effet (
effect_func) appliquée à la cible, - un cooldown (temps de recharge),
- éventuellement une exigence de proximité (
requires_proximity=True).
- un nom (
Exemples de sabotages typiques :
- Casse Friteuse (
break_fryer) :- casse la friteuse adverse (
fryer.break_machine()) ; - empêche de préparer certains plats pendant un moment.
- casse la friteuse adverse (
- Lancer Rumeur (
rumor) :- fait perdre une portion de réputation (ex. −15%) à l’adversaire.
- Falsifier Carte (
fake_menu) :- casse le menu adverse, ce qui peut gêner la commande ou afficher de mauvaises infos.
- Contrôle Hygiène (
inspection) :- fait perdre de la réputation (ex. −5%) ;
- casse les toilettes et augmente le risque d’inspection sanitaire ultérieure.
- Voler la Broche (
steal_spit) :- vole la broche kebab pendant environ 30 secondes ;
- rend certains plats impossibles à servir sur cette durée.
- Empoisonner Stock (
poison_food) :- diminue les quantités du stock d’ingrédients adverse ;
- inflige une pénalité supplémentaire de réputation.
L’exécution d’un sabotage passe par SabotageManager.execute_sabotage (appelé depuis GameState.handle_sabotage ou try_steal_spit) qui :
- vérifie que le joueur a assez d’argent pour payer le sabotage,
- applique l’effet correspondant,
- démarre le cooldown pour empêcher un spam immédiat.
Mini‑jeux liés aux sabotages
Certains sabotages ou réparations peuvent impliquer des mini‑jeux, gérés dans game/minigames.py :
- un mini‑jeu comprend une phase d’init, une boucle de mise à jour et une résolution (succès/échec) ;
- ils peuvent servir à :
- accélérer certaines préparations,
- réparer un sabotage plus vite,
- obtenir des bonus ou éviter une pénalité.
Le même système de mini‑jeux est également utilisé pour le service des clients (voir Clients & commandes).
Événements aléatoires
Les événements globaux sont centralisés dans game/events.py via EventManager :
- régulièrement (par exemple toutes les 60 secondes), le jeu tire au sort la possibilité de déclencher un événement (probabilité typique : 30%) ;
- si un événement est déclenché,
EventManagerapplique son effet sur un ou plusieurs joueurs.
Exemple : inspection sanitaire
Un des événements les plus importants est l’inspection sanitaire (health_inspection) :
- chaque joueur possède un risque d’inspection calculé à partir de l’état de ses toilettes (
equipment["toilets"].get_inspection_risk()) ; - le joueur avec les toilettes les plus négligées a plus de chances d’être ciblé ;
- si l’inspection tombe sur un joueur :
- il peut perdre de l’argent (amende, ex. −100) ;
- il peut perdre une grande portion de réputation (ex. −20).
Cela crée une boucle de gameplay intéressante :
- négliger l’hygiène + abuser des sabotages augmente ton risque ;
- une inspection négative peut te faire perdre beaucoup d’avantage en peu de temps.
Impact global sur la partie
Les sabotages et événements influencent indirectement :
- le flux de clients (via la réputation et l’état des équipements) ;
- la vitesse de service (équipements cassés, stock réduit) ;
- le score final (perte d’argent, clients fâchés).
Ils doivent donc être utilisés avec stratégie :
un sabotage bien placé peut retourner une partie, mais un abus peut aussi te mettre dans une situation critique si tu négliges ton propre restaurant.