- Mobile match controls (codex #1 High): 3 touch zones внизу MatchScene (L / BOOST / R). Visible semi-transparent overlay'и; работает и на mouse, и на touch. Keyboard input теперь optional (this.keys?), не падает на headless mobile. - Turbo first-hit bug (codex #2): guard на lastHitTime > 0 — иначе первый удар по turbo в первую секунду давал 0 очков (now < 0 + 1000). - AI behavior diff (codex #3): добавлен PersonalityModifier (triggerDistBonus, reliabilityMul, reactionMul). Defensive: +reliability, -reaction. Aggressive: +trigger distance, -reliability. Ghost: 15% «эхо-double-swing» (обе стороны одновременно). Trickster уже имел jitter modifier. Поведенческие отличия теперь должны быть различимы за 5 матчей. - Favicon 404 (codex #4 Low): inline SVG favicon в index.html, no more console noise. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
53 lines
1.7 KiB
HTML
53 lines
1.7 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, viewport-fit=cover" />
|
||
<meta name="theme-color" content="#0a0a14" />
|
||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' fill='%230a0a14'/%3E%3Ccircle cx='16' cy='16' r='8' fill='%23ff006e'/%3E%3Ccircle cx='16' cy='16' r='3' fill='%2300f0ff'/%3E%3C/svg%3E" />
|
||
<meta name="description" content="Дуэльный пинбол с 4 AI-противниками — у каждого свой характер." />
|
||
<title>Пинбол-Дуэль</title>
|
||
<style>
|
||
html, body {
|
||
margin: 0;
|
||
padding: 0;
|
||
overflow: hidden;
|
||
background: #0a0a14;
|
||
width: 100%;
|
||
height: 100%;
|
||
-webkit-tap-highlight-color: transparent;
|
||
touch-action: none;
|
||
user-select: none;
|
||
-webkit-user-select: none;
|
||
}
|
||
#game-container {
|
||
width: 100vw;
|
||
height: 100vh;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
#loading {
|
||
color: #ff006e;
|
||
font-family: 'Press Start 2P', monospace, sans-serif;
|
||
font-size: 14px;
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 50%;
|
||
transform: translate(-50%, -50%);
|
||
animation: pulse 1.2s ease-in-out infinite;
|
||
}
|
||
@keyframes pulse {
|
||
0%, 100% { opacity: 1; }
|
||
50% { opacity: 0.4; }
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div id="game-container">
|
||
<div id="loading">Loading…</div>
|
||
</div>
|
||
<script type="module" src="/src/main.ts"></script>
|
||
</body>
|
||
</html>
|