Wire up decode puzzle chain and lock terminal on file removal

Connects the previously-disconnected /decode command to per-player
messages: player 1 unlocks sudo for everyone, player 2 unlocks a scan
command that reveals which files the AI virus has locked, player 3
learns those files should be removed.

Also adds a retaliation mechanic: successfully removing a file locks
the player's terminal. The AI virus locks it out in red immediately;
the mainframe reveals a 12-character recovery code in green after 30
seconds, which can be submitted via /unlock to restore access early,
otherwise the terminal auto-recovers after 45 seconds.
This commit is contained in:
Frank
2026-07-11 16:48:15 +02:00
parent 1e644eb13b
commit 6db9d42852
7 changed files with 461 additions and 27 deletions
+5 -1
View File
@@ -12,6 +12,7 @@ use App\Game\Repository\GameRepository;
use App\Game\Repository\PlayerRepository;
use App\Game\Repository\SessionRepository;
use App\Game\Service\GameDashboardService;
use App\Game\Service\GameResponseService;
use App\Tech\Entity\User;
use App\Game\Service\PlayerService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
@@ -115,7 +116,8 @@ final class GameController extends AbstractController
Request $request,
Security $security,
PlayerRepository $playerRepository,
GameDashboardService $dashboardService
GameDashboardService $dashboardService,
GameResponseService $gameResponseService
): Response
{
$user = $security->getUser();
@@ -157,11 +159,13 @@ final class GameController extends AbstractController
$screen = $player ? $player->getScreen() : 0;
$session_id = $session->getId();
$lock = $player ? $gameResponseService->getPublicLockState($player) : null;
return $this->render('game/index.html.twig', [
'session' => $session,
'screen' => $screen,
'session_id' => $session_id,
'lock' => $lock,
]);
}