Aller au contenu principal

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.py
  • game/minigames.py
  • game/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 Sabotage qui 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).

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.
  • 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é, EventManager applique 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.